Skip to content

Commit cbb19ef

Browse files
spadgettf0x11
authored andcommitted
Avoid runtime error for some dockerconfigjson secrets
1 parent ba06b4d commit cbb19ef

File tree

3 files changed

+54
-72
lines changed

3 files changed

+54
-72
lines changed

app/scripts/services/secrets.js

+27-67
Original file line numberDiff line numberDiff line change
@@ -28,82 +28,42 @@ angular.module("openshiftConsole")
2828
return secretsByType;
2929
};
3030

31-
var handleDecodeException = function(error, encodedStringType) {
32-
NotificationsService.addNotification({
33-
type: "error",
34-
message: 'Base64-encoded ' + encodedStringType + ' string could not be decoded.',
35-
details: $filter('getErrorDetails')(error)
31+
var decodeDockercfg = function(encodedData) {
32+
var decodedSecretData = {
33+
auths: {}
34+
};
35+
var decodedData = JSON.parse(window.atob(encodedData));
36+
_.each(decodedData, function(data, serverName) {
37+
decodedSecretData.auths[serverName] = {
38+
username: data.username,
39+
password: data.password,
40+
email: data.email
41+
};
3642
});
3743
Logger.error('Base64-encoded ' + encodedStringType + ' string could not be decoded.', error);
3844
};
3945

40-
var getServerParams = function(serverData) {
41-
var params = _.pick(serverData, ['email', 'username', 'password']);
42-
if (serverData.auth) {
43-
try {
44-
// Decode Base64-encoded username:password string.
45-
var setParams = _.spread(function(username, password) {
46-
params.username = username;
47-
params.password = password;
48-
});
49-
setParams(_.split(window.atob(serverData.auth), ':', 2));
50-
} catch(e) {
51-
handleDecodeException(e, 'username:password');
52-
return;
53-
}
54-
}
55-
return params;
56-
};
57-
58-
// decodeDockerConfig handles both Docker configuration file formats, which are:
59-
// - .dockercfg
60-
// {
61-
// "auths": {
62-
// "https://index.docker.io/v1/": {
63-
// "auth": "dGVzdHVzZXI6dGVzdHB3",
64-
// "email": "[email protected]"
65-
// }
66-
// }
67-
// }
68-
//
69-
// - .dockerconfigjson
70-
// {
71-
// "auths": {
72-
// "https://index.docker.io/v1/": {
73-
// "auth": "dGVzdHVzZXI6dGVzdHB3",
74-
// "email": "[email protected]"
75-
// }
76-
// }
77-
// }
78-
//
79-
var decodeDockerConfig = function(encodedData, configType) {
80-
var decodedData;
46+
var decodeDockerconfigjson = function(encodedData) {
8147
var decodedSecretData = {
8248
auths: {}
8349
};
50+
var decodedData = JSON.parse(window.atob(encodedData));
51+
_.each(decodedData.auths, function(data, serverName) {
52+
if (!data.auth) {
53+
decodedSecretData.auths[serverName] = data;
54+
return;
55+
}
8456

85-
try {
86-
decodedData = JSON.parse(window.atob(encodedData));
87-
} catch(e) {
88-
handleDecodeException(e, configType);
89-
}
90-
91-
if (decodedData.auths) {
92-
_.each(decodedData.auths, function(serverData, serverName) {
93-
if (!serverData.auth) {
94-
decodedSecretData.auths[serverName] = serverData;
95-
return;
96-
}
97-
decodedSecretData.auths[serverName] = getServerParams(serverData);
98-
});
57+
var usernamePassword = window.atob(data.auth).split(":");
58+
decodedSecretData.auths[serverName] = {
59+
username: usernamePassword[0],
60+
password: usernamePassword[1],
61+
email: data.email
62+
};
63+
});
9964

100-
if (decodedData.credsStore) {
101-
decodedSecretData.credsStore = decodedData.credsStore;
102-
}
103-
} else {
104-
_.each(decodedData, function(serverData, serverName) {
105-
decodedSecretData.auths[serverName] = getServerParams(serverData);
106-
});
65+
if (decodedData.credsStore) {
66+
decodedSecretData.credsStore = decodedData.credsStore;
10767
}
10868

10969
return decodedSecretData;

dist/scripts/scripts.js

+11-5
Original file line numberDiff line numberDiff line change
@@ -5796,24 +5796,30 @@ message: null
57965796
};
57975797
}), angular.module("openshiftConsole").factory("SecretsService", function() {
57985798
var e = function(e) {
5799-
var t = {}, n = JSON.parse(window.atob(e));
5799+
var t = {
5800+
auths: {}
5801+
}, n = JSON.parse(window.atob(e));
58005802
return _.each(n, function(e, n) {
5801-
t[n] = {
5803+
t.auths[n] = {
58025804
username: e.username,
58035805
password: e.password,
58045806
email: e.email
58055807
};
58065808
}), t;
58075809
}, t = function(e) {
5808-
var t = {}, n = JSON.parse(window.atob(e));
5810+
var t = {
5811+
auths: {}
5812+
}, n = JSON.parse(window.atob(e));
58095813
return _.each(n.auths, function(e, n) {
5814+
if (e.auth) {
58105815
var a = window.atob(e.auth).split(":");
5811-
t[n] = {
5816+
t.auths[n] = {
58125817
username: a[0],
58135818
password: a[1],
58145819
email: e.email
58155820
};
5816-
}), t;
5821+
} else t.auths[n] = e;
5822+
}), n.credsStore && (t.credsStore = n.credsStore), t;
58175823
};
58185824
return {
58195825
groupSecretsByType: function(e) {

dist/scripts/templates.js

+16
Original file line numberDiff line numberDiff line change
@@ -130,22 +130,38 @@ angular.module('openshiftConsoleTemplates', []).run(['$templateCache', function(
130130
$templateCache.put('views/_config-file-params.html',
131131
"<div ng-repeat=\"(serverName, data) in secretData.auths\" class=\"image-source-item\">\n" +
132132
"<h3>{{serverName}}</h3>\n" +
133+
<<<<<<< 2c46e612e12d74ae5c1c179bf8cfa5f66c483b57
133134
"<dt ng-if-start=\"data.username\" translate>username</dt>\n" +
134135
"<dd ng-if-end class=\"word-break\">{{data.username}}</dd>\n" +
135136
"<dt ng-if-start=\"data.password\" translate>password</dt>\n" +
137+
=======
138+
"<dt ng-if-start=\"data.username\">username</dt>\n" +
139+
"<dd ng-if-end class=\"word-break\">{{data.username}}</dd>\n" +
140+
"<dt ng-if-start=\"data.password\">password</dt>\n" +
141+
>>>>>>> Avoid runtime error for some dockerconfigjson secrets
136142
"<dd ng-if-end>\n" +
137143
"<span ng-if=\"view.showSecret\">\n" +
138144
"<copy-to-clipboard clipboard-text=\"data.password\" display-wide=\"true\"></copy-to-clipboard>\n" +
139145
"</span>\n" +
140146
"<span ng-if=\"!view.showSecret\">*****</span>\n" +
141147
"</dd>\n" +
148+
<<<<<<< 2c46e612e12d74ae5c1c179bf8cfa5f66c483b57
142149
"<dt ng-if-start=\"data.email\" translate>email</dt>\n" +
143150
"<dd ng-if-end class=\"word-break\">{{data.email}}</dd>\n" +
144151
"<div ng-if=\"!data.username && !data.password && !data.email\" translate>\n" +
145152
"No username and password.\n" +
146153
"</div>\n" +
147154
"</div>\n" +
148155
"<h3 ng-if-start=\"secretData.credsStore\" translate>Credentials Store</h3>\n" +
156+
=======
157+
"<dt ng-if-start=\"data.email\">email</dt>\n" +
158+
"<dd ng-if-end class=\"word-break\">{{data.email}}</dd>\n" +
159+
"<div ng-if=\"!data.username && !data.password && !data.email\">\n" +
160+
"No username and password.\n" +
161+
"</div>\n" +
162+
"</div>\n" +
163+
"<h3 ng-if-start=\"secretData.credsStore\">Credentials Store</h3>\n" +
164+
>>>>>>> Avoid runtime error for some dockerconfigjson secrets
149165
"<div ng-if-end>\n" +
150166
"<span ng-if=\"view.showSecret\">\n" +
151167
"<copy-to-clipboard clipboard-text=\"secretData.credsStore\" display-wide=\"true\"></copy-to-clipboard>\n" +

0 commit comments

Comments
 (0)