Skip to content

Commit 121ec41

Browse files
committed
Reveal and hide secrets
Reveal and hide secret value display within the EnvFrom modal
1 parent 6960e4f commit 121ec41

File tree

4 files changed

+71
-49
lines changed

4 files changed

+71
-49
lines changed

app/scripts/directives/editEnvironmentFrom.js

+9-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
'$attrs',
66
'$filter',
77
'keyValueEditorUtils',
8+
'SecretsService',
89
EditEnvironmentFrom
910
],
1011
bindings: {
@@ -19,7 +20,8 @@
1920

2021
function EditEnvironmentFrom($attrs,
2122
$filter,
22-
utils) {
23+
utils,
24+
SecretsService) {
2325
var ctrl = this;
2426
var canI = $filter('canI');
2527
var humanizeKind = $filter('humanizeKind');
@@ -28,7 +30,13 @@
2830
ctrl.setFocusClass = 'edit-environment-from-set-focus-' + uniqueId;
2931

3032
ctrl.viewOverlayPanel = function(entry) {
33+
ctrl.decodedData = entry.data;
3134
ctrl.overlayPaneEntryDetails = entry;
35+
36+
if (entry.kind === 'Secret') {
37+
ctrl.decodedData = SecretsService.decodeSecretData(entry.data);
38+
}
39+
3240
ctrl.overlayPanelVisible = true;
3341
};
3442

app/views/directives/edit-environment-from.html

+11-4
Original file line numberDiff line numberDiff line change
@@ -85,11 +85,12 @@
8585

8686
<overlay-panel class="add-config-to-application" show-panel="$ctrl.overlayPanelVisible" show-close="true" handle-close="$ctrl.closeOverlayPanel">
8787
<div class="dialog-title">
88-
<h3>Value Details</h3>
88+
<h3>{{$ctrl.overlayPaneEntryDetails.kind | humanizeKind : true}} Details</h3>
8989
</div>
9090
<div class="modal-body">
9191
<h4>{{$ctrl.overlayPaneEntryDetails.metadata.name}}
92-
<small class="muted">&ndash; {{$ctrl.overlayPaneEntryDetails.kind | humanizeKind : true}}</small></h4>
92+
<small ng-if="$ctrl.overlayPaneEntryDetails.kind === 'Secret'" class="mar-left-sm"><a href="" ng-click="$ctrl.showSecret = !$ctrl.showSecret">{{$ctrl.showSecret ? "Hide" : "Reveal"}} Values</a></small>
93+
</h4>
9394

9495
<div ng-if="!($ctrl.overlayPaneEntryDetails.data | size)" class="empty-state-message text-center">
9596
The {{$ctrl.overlayPaneEntryDetails.kind | humanizeKind}} has no properties.
@@ -98,7 +99,7 @@ <h4>{{$ctrl.overlayPaneEntryDetails.metadata.name}}
9899
<div ng-if="$ctrl.overlayPaneEntryDetails.data | size" class="table-responsive scroll-shadows-horizontal">
99100
<table class="table table-bordered table-bordered-columns config-map-table key-value-table">
100101
<tbody>
101-
<tr ng-repeat="(prop, value) in $ctrl.overlayPaneEntryDetails.data">
102+
<tr ng-repeat="(prop, value) in $ctrl.decodedData">
102103
<td class="key">{{prop}}</td>
103104
<td class="value">
104105
<truncate-long-text
@@ -109,7 +110,13 @@ <h4>{{$ctrl.overlayPaneEntryDetails.metadata.name}}
109110
expandable="true">
110111
</truncate-long-text>
111112

112-
<span ng-if="$ctrl.overlayPaneEntryDetails.kind === 'Secret'">&#42;&#42;&#42;&#42;&#42;</span>
113+
<span ng-if="!$ctrl.showSecret && $ctrl.overlayPaneEntryDetails.kind === 'Secret'">&#42;&#42;&#42;&#42;&#42;</span>
114+
<div ng-if="$ctrl.showSecret && $ctrl.overlayPaneEntryDetails.kind === 'Secret'">
115+
{{value}}
116+
<div ng-if="decodedData.$$nonprintable[prop]" class="help-block">
117+
This secret value contains non-printable characters and is displayed as a Base64-encoded string.
118+
</div>
119+
</div>
113120
</td>
114121
</tr>
115122
</tbody>

dist/scripts/scripts.js

+40-40
Original file line numberDiff line numberDiff line change
@@ -9212,60 +9212,60 @@ n[e.key] = e.value;
92129212
};
92139213
} ]), function() {
92149214
angular.module("openshiftConsole").component("editEnvironmentFrom", {
9215-
controller: [ "$attrs", "$filter", "keyValueEditorUtils", function(e, t, n) {
9216-
var a = this, r = t("canI"), o = t("humanizeKind"), i = _.uniqueId();
9217-
a.setFocusClass = "edit-environment-from-set-focus-" + i, a.viewOverlayPanel = function(e) {
9218-
a.overlayPaneEntryDetails = e, a.overlayPanelVisible = !0;
9219-
}, a.closeOverlayPanel = function() {
9220-
a.overlayPanelVisible = !1;
9215+
controller: [ "$attrs", "$filter", "keyValueEditorUtils", "SecretsService", function(e, t, n, a) {
9216+
var r = this, o = t("canI"), i = t("humanizeKind"), s = _.uniqueId();
9217+
r.setFocusClass = "edit-environment-from-set-focus-" + s, r.viewOverlayPanel = function(e) {
9218+
r.decodedData = e.data, r.overlayPaneEntryDetails = e, "Secret" === e.kind && (r.decodedData = a.decodeSecretData(e.data)), r.overlayPanelVisible = !0;
9219+
}, r.closeOverlayPanel = function() {
9220+
r.overlayPanelVisible = !1;
92219221
};
9222-
var s = function(e, t) {
9222+
var c = function(e, t) {
92239223
e && e.push(t || {});
92249224
};
9225-
a.onAddRow = function() {
9226-
s(a.envFromEntries), n.setFocusOn("." + a.setFocusClass);
9227-
}, a.deleteEntry = function(e, t) {
9228-
a.envFromEntries && !a.envFromEntries.length || (a.envFromEntries.splice(e, t), !a.envFromEntries.length && a.addRowLink && s(a.envFromEntries), a.updateEntries(a.envFromEntries), a.editEnvironmentFromForm.$setDirty());
9229-
}, a.hasOptions = function() {
9230-
return !_.isEmpty(a.envFromSelectorOptions);
9231-
}, a.hasEntries = function() {
9232-
return _.some(a.entries, function(e) {
9225+
r.onAddRow = function() {
9226+
c(r.envFromEntries), n.setFocusOn("." + r.setFocusClass);
9227+
}, r.deleteEntry = function(e, t) {
9228+
r.envFromEntries && !r.envFromEntries.length || (r.envFromEntries.splice(e, t), !r.envFromEntries.length && r.addRowLink && c(r.envFromEntries), r.updateEntries(r.envFromEntries), r.editEnvironmentFromForm.$setDirty());
9229+
}, r.hasOptions = function() {
9230+
return !_.isEmpty(r.envFromSelectorOptions);
9231+
}, r.hasEntries = function() {
9232+
return _.some(r.entries, function(e) {
92339233
return _.get(e, "configMapRef.name") || _.get(e, "secretRef.name");
92349234
});
9235-
}, a.isEnvFromReadonly = function(e) {
9236-
return !0 === a.isReadonly || e && !0 === e.isReadonly;
9237-
}, a.groupByKind = function(e) {
9238-
return o(e.kind);
9239-
}, a.dragControlListeners = {
9235+
}, r.isEnvFromReadonly = function(e) {
9236+
return !0 === r.isReadonly || e && !0 === e.isReadonly;
9237+
}, r.groupByKind = function(e) {
9238+
return i(e.kind);
9239+
}, r.dragControlListeners = {
92409240
accept: function(e, t) {
92419241
return e.itemScope.sortableScope.$id === t.$id;
92429242
},
92439243
orderChanged: function() {
9244-
a.editEnvironmentFromForm.$setDirty();
9244+
r.editEnvironmentFromForm.$setDirty();
92459245
}
9246-
}, a.envFromObjectSelected = function(e, t, n) {
9247-
var r = {};
9246+
}, r.envFromObjectSelected = function(e, t, n) {
9247+
var a = {};
92489248
switch (n.kind) {
92499249
case "Secret":
9250-
r.secretRef = {
9250+
a.secretRef = {
92519251
name: n.metadata.name
9252-
}, delete a.envFromEntries[e].configMapRef;
9252+
}, delete r.envFromEntries[e].configMapRef;
92539253
break;
92549254

92559255
case "ConfigMap":
9256-
r.configMapRef = {
9256+
a.configMapRef = {
92579257
name: n.metadata.name
9258-
}, delete a.envFromEntries[e].secretRef;
9258+
}, delete r.envFromEntries[e].secretRef;
92599259
}
9260-
_.assign(a.envFromEntries[e], r), a.updateEntries(a.envFromEntries);
9261-
}, a.updateEntries = function(e) {
9262-
a.entries = _.filter(e, function(e) {
9260+
_.assign(r.envFromEntries[e], a), r.updateEntries(r.envFromEntries);
9261+
}, r.updateEntries = function(e) {
9262+
r.entries = _.filter(e, function(e) {
92639263
return e.secretRef || e.configMapRef;
92649264
});
92659265
};
9266-
var c = function() {
9266+
var l = function() {
92679267
var e = {}, t = {};
9268-
a.envFromEntries = a.entries || [], a.envFromEntries.length || s(a.envFromEntries), _.each(a.envFromSelectorOptions, function(n) {
9268+
r.envFromEntries = r.entries || [], r.envFromEntries.length || c(r.envFromEntries), _.each(r.envFromSelectorOptions, function(n) {
92699269
switch (n.kind) {
92709270
case "ConfigMap":
92719271
e[n.metadata.name] = n;
@@ -9274,18 +9274,18 @@ break;
92749274
case "Secret":
92759275
t[n.metadata.name] = n;
92769276
}
9277-
}), _.each(a.envFromEntries, function(n) {
9278-
var a, o;
9279-
if (n.configMapRef && (a = "configMapRef", o = "configmaps"), n.secretRef && (a = "secretRef", o = "secrets"), a && o) {
9277+
}), _.each(r.envFromEntries, function(n) {
9278+
var a, r;
9279+
if (n.configMapRef && (a = "configMapRef", r = "configmaps"), n.secretRef && (a = "secretRef", r = "secrets"), a && r) {
92809280
var i = n[a].name;
9281-
n.configMapRef && i in e && (n.selectedEnvFrom = e[i]), n.secretRef && i in t && (n.selectedEnvFrom = t[i]), r(o, "get") || (n.isReadonly = !0);
9281+
n.configMapRef && i in e && (n.selectedEnvFrom = e[i]), n.secretRef && i in t && (n.selectedEnvFrom = t[i]), o(r, "get") || (n.isReadonly = !0);
92829282
}
92839283
});
92849284
};
9285-
a.$onInit = function() {
9286-
c(), "cannotDelete" in e && (a.cannotDeleteAny = !0), "cannotSort" in e && (a.cannotSort = !0), "showHeader" in e && (a.showHeader = !0), a.envFromEntries && !a.envFromEntries.length && s(a.envFromEntries);
9287-
}, a.$onChanges = function(e) {
9288-
(e.entries || e.envFromSelectorOptions) && c();
9285+
r.$onInit = function() {
9286+
l(), "cannotDelete" in e && (r.cannotDeleteAny = !0), "cannotSort" in e && (r.cannotSort = !0), "showHeader" in e && (r.showHeader = !0), r.envFromEntries && !r.envFromEntries.length && c(r.envFromEntries);
9287+
}, r.$onChanges = function(e) {
9288+
(e.entries || e.envFromSelectorOptions) && l();
92899289
};
92909290
} ],
92919291
bindings: {

dist/scripts/templates.js

+11-4
Original file line numberDiff line numberDiff line change
@@ -6745,23 +6745,30 @@ angular.module('openshiftConsoleTemplates', []).run(['$templateCache', function(
67456745
"</div>\n" +
67466746
"<overlay-panel class=\"add-config-to-application\" show-panel=\"$ctrl.overlayPanelVisible\" show-close=\"true\" handle-close=\"$ctrl.closeOverlayPanel\">\n" +
67476747
"<div class=\"dialog-title\">\n" +
6748-
"<h3>Value Details</h3>\n" +
6748+
"<h3>{{$ctrl.overlayPaneEntryDetails.kind | humanizeKind : true}} Details</h3>\n" +
67496749
"</div>\n" +
67506750
"<div class=\"modal-body\">\n" +
67516751
"<h4>{{$ctrl.overlayPaneEntryDetails.metadata.name}}\n" +
6752-
"<small class=\"muted\">&ndash; {{$ctrl.overlayPaneEntryDetails.kind | humanizeKind : true}}</small></h4>\n" +
6752+
"<small ng-if=\"$ctrl.overlayPaneEntryDetails.kind === 'Secret'\" class=\"mar-left-sm\"><a href=\"\" ng-click=\"$ctrl.showSecret = !$ctrl.showSecret\">{{$ctrl.showSecret ? \"Hide\" : \"Reveal\"}} Values</a></small>\n" +
6753+
"</h4>\n" +
67536754
"<div ng-if=\"!($ctrl.overlayPaneEntryDetails.data | size)\" class=\"empty-state-message text-center\">\n" +
67546755
"The {{$ctrl.overlayPaneEntryDetails.kind | humanizeKind}} has no properties.\n" +
67556756
"</div>\n" +
67566757
"<div ng-if=\"$ctrl.overlayPaneEntryDetails.data | size\" class=\"table-responsive scroll-shadows-horizontal\">\n" +
67576758
"<table class=\"table table-bordered table-bordered-columns config-map-table key-value-table\">\n" +
67586759
"<tbody>\n" +
6759-
"<tr ng-repeat=\"(prop, value) in $ctrl.overlayPaneEntryDetails.data\">\n" +
6760+
"<tr ng-repeat=\"(prop, value) in $ctrl.decodedData\">\n" +
67606761
"<td class=\"key\">{{prop}}</td>\n" +
67616762
"<td class=\"value\">\n" +
67626763
"<truncate-long-text ng-if=\"$ctrl.overlayPaneEntryDetails.kind === 'ConfigMap'\" content=\"value\" limit=\"50\" newline-limit=\"2\" expandable=\"true\">\n" +
67636764
"</truncate-long-text>\n" +
6764-
"<span ng-if=\"$ctrl.overlayPaneEntryDetails.kind === 'Secret'\">&#42;&#42;&#42;&#42;&#42;</span>\n" +
6765+
"<span ng-if=\"!$ctrl.showSecret && $ctrl.overlayPaneEntryDetails.kind === 'Secret'\">&#42;&#42;&#42;&#42;&#42;</span>\n" +
6766+
"<div ng-if=\"$ctrl.showSecret && $ctrl.overlayPaneEntryDetails.kind === 'Secret'\">\n" +
6767+
"{{value}}\n" +
6768+
"<div ng-if=\"decodedData.$$nonprintable[prop]\" class=\"help-block\">\n" +
6769+
"This secret value contains non-printable characters and is displayed as a Base64-encoded string.\n" +
6770+
"</div>\n" +
6771+
"</div>\n" +
67656772
"</td>\n" +
67666773
"</tr>\n" +
67676774
"</tbody>\n" +

0 commit comments

Comments
 (0)