forked from openshift/origin-web-console
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsecrets.js
94 lines (84 loc) · 2.87 KB
/
secrets.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
'use strict';
angular.module("openshiftConsole")
.factory("SecretsService", function(){
var groupSecretsByType = function(secrets) {
var secretsByType = {
source: [],
image: [],
other: []
};
_.each(secrets.by('metadata.name'), function(secret) {
switch (secret.type) {
case 'kubernetes.io/basic-auth':
case 'kubernetes.io/ssh-auth':
case 'Opaque':
secretsByType.source.push(secret);
break;
case 'kubernetes.io/dockercfg':
case 'kubernetes.io/dockerconfigjson':
secretsByType.image.push(secret);
break;
default:
secretsByType.other.push(secret);
}
});
return secretsByType;
};
var decodeDockercfg = function(encodedData) {
var decodedSecretData = {};
var decodedData = JSON.parse(window.atob(encodedData));
_.each(decodedData, function(data, serverName) {
decodedSecretData[serverName] = {
username: data.username,
password: data.password,
email: data.email
};
});
return decodedSecretData;
};
var decodeDockerconfigjson = function(encodedData) {
var decodedSecretData = {};
var decodedData = JSON.parse(window.atob(encodedData));
_.each(decodedData.auths, function(data, serverName) {
var usernamePassword = window.atob(data.auth).split(":");
decodedSecretData[serverName] = {
username: usernamePassword[0],
password: usernamePassword[1],
email: data.email
};
});
return decodedSecretData;
};
var decodeSecretData = function(secretData) {
var nonPrintable = {};
var decodedSecret = _.mapValues(secretData, function(data, paramName) {
var decoded, isNonPrintable;
switch (paramName) {
case ".dockercfg":
return decodeDockercfg(data);
case ".dockerconfigjson":
return decodeDockerconfigjson(data);
default:
decoded = window.atob(data);
// Allow whitespace like newlines and tabs, but detect other
// non-printable characters in the unencoded data.
// http://stackoverflow.com/questions/1677644/detect-non-printable-characters-in-javascript
isNonPrintable = /[\x00-\x09\x0E-\x1F]/.test(decoded);
if (isNonPrintable) {
nonPrintable[paramName] = true;
return data;
}
return decoded;
}
});
// Add a property to indicate when the decoded data contains
// non-printable characters. Use the `$$` prefix so it's not
// considered part of the data.
decodedSecret.$$nonprintable = nonPrintable;
return decodedSecret;
};
return {
groupSecretsByType: groupSecretsByType,
decodeSecretData: decodeSecretData
};
});