3 * Copyright 2016 RIFT.IO Inc
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
18 import SshKeyActions
from './sshKeyActions.js';
19 import SshKeySource
from './sshKeySource.js';
20 import GUID
from 'utils/guid.js';
21 import AppHeaderActions
from 'widgets/header/headerActions.js';
22 import Alt
from '../alt';
23 import _cloneDeep
from 'lodash/cloneDeep';
24 import _merge
from 'lodash/merge';
27 export default class SshKeyStore
{
33 this.dataCache
= _cloneDeep(this.data
);
38 this.bindActions(SshKeyActions
);
39 this.registerAsync(SshKeySource
);
40 this.exportPublicMethods({
41 updateNewKeyValue
: this.updateNewKeyValue
,
42 updateSshKeyPair
: this.updateSshKeyPair
,
43 editSshKeyPair
: this.editSshKeyPair
,
44 cancelEditSshKeyPair
: this.cancelEditSshKeyPair
,
45 saveEditSshKeyPair
: this.saveEditSshKeyPair
,
46 deleteSshKeyPair
: this.deleteSshKeyPair
,
47 updateEditSshKeyPair
: this.updateEditSshKeyPair
50 updateNewKeyValue
= (k
, field
) => {
53 let value
= e
.target
.value
;
54 let ref
= self
.newKey
;
56 self
.setState({newKey
: ref
});
59 editSshKeyPair
= (k
) => {
63 let ref
= data
.entities
[k
];
64 ref
.isEditable
= true;
65 self
.setState({data
:data
});
68 cancelEditSshKeyPair
= (k
) => {
71 let data
= _cloneDeep(self
.data
);
72 data
.entities
[k
].key
= self
.dataCache
.entities
[k
].key
;
73 data
.entities
[k
].isEditable
= false;
74 self
.setState({data
:data
});
77 saveEditSshKeyPair
= (data
) => {
80 if(self
.validate(data
)) {
81 self
.getInstance().saveSshKey(self
.trimName(data
)).then(function() {})
83 self
.alt
.actions
.global
.showNotification('Make sure all fields are filled in and that you are using only alphanumeric characters for the name');
87 updateEditSshKeyPair
= (k
) => {
90 self
.getInstance().updateSshKey(self
.cleanUpKeyPayload(self
.data
.entities
[k
]))
93 deleteSshKeyPair
= (k
) => {
96 if(window
.confirm('Are you sure you want to delete this key?')) {
97 self
.getInstance().deleteSshKey(k
);
101 saveSshKeySuccess
= (data
) => {
102 let keys
= this.data
;
103 keys
.keys
.push(data
.name
);
104 keys
.entities
[data
.name
] = {
110 dataCache
: _cloneDeep(keys
),
118 updateSshKeySuccess
= (data
) => {
119 let keys
= this.data
;
120 keys
.entities
[data
.name
] = {
126 dataCache
: _cloneDeep(keys
),
134 deleteSshKeySuccess
= (data
) => {
135 let keys
= this.data
;
136 keys
.keys
.splice(keys
.keys
.indexOf(data
.name
), 1);
137 delete keys
.entities
[data
.name
];
139 dataCache
: _cloneDeep(keys
),
143 saveEditSshKeyPairSuccess
= () => {
146 getSshKeySuccess
= (data
) => {
147 let flattened
= this.flattenKeys(data
);
150 dataCache
: _cloneDeep(flattened
)
153 updateSshKeyPair
= (k
, field
) => {
156 let value
= e
.target
.value
;
157 let data
= self
.data
;
158 let ref
= data
.entities
[k
];
160 self
.setState({data
:data
});
168 data
&& data
.map(function(d
){
169 fd
.keys
.push(d
.name
);
170 fd
.entities
[d
.name
] = _merge({isEditable
: false}, d
)
174 cleanUpKeyPayload(payload
) {
175 return {key
: payload
.key
, name
: payload
.name
};
178 if((data
['name'].trim() == '') || ((/[^\w _-]/).test(data
['name']))) {
184 data
.name
= data
.name
.trim();