mirror of https://github.com/rancher/ui.git
109 lines
2.7 KiB
JavaScript
109 lines
2.7 KiB
JavaScript
import Errors from 'ui/utils/errors';
|
|
import Component from '@ember/component';
|
|
import layout from './template';
|
|
import { set, computed } from '@ember/object';
|
|
import { inject as service } from '@ember/service';
|
|
import Identicon from 'identicon.js';
|
|
import C from 'shared/utils/constants';
|
|
|
|
export default Component.extend({
|
|
globalStore: service(),
|
|
layout,
|
|
|
|
tagName: '',
|
|
member: null,
|
|
editing: true,
|
|
isPublic: false,
|
|
clusterResource: null,
|
|
users: null,
|
|
principal: null,
|
|
principalId: null,
|
|
principalGravatarSrc: null,
|
|
|
|
init() {
|
|
this._super(...arguments);
|
|
|
|
const { isPublic, member } = this;
|
|
|
|
|
|
if (!isPublic && (member.userPrincipalId || member.groupPrincipalId)) {
|
|
const principalId = member.userPrincipalId || member.groupPrincipalId;
|
|
|
|
this.globalStore.rawRequest({
|
|
url: `principals/${ encodeURIComponent(principalId) }`,
|
|
method: 'GET',
|
|
}).then((xhr) => {
|
|
if ( xhr.status === 204 ) {
|
|
return;
|
|
}
|
|
|
|
if ( xhr.body && typeof xhr.body === 'object') {
|
|
set(this, 'principal', set(this, 'external', xhr.body));
|
|
this.principalChanged();
|
|
}
|
|
|
|
return xhr;
|
|
}).catch((xhr) => {
|
|
if ( this.isDestroyed || this.isDestroying ) {
|
|
return;
|
|
}
|
|
|
|
if (member.userPrincipalId) {
|
|
set(this, 'principalId', member.userPrincipalId);
|
|
set(this, 'principalGravatarSrc', `data:image/png;base64,${ new Identicon(AWS.util.crypto.md5(member.userPrincipalId || 'Unknown', 'hex'), 80, 0.01).toString() }`)
|
|
}
|
|
|
|
return xhr;
|
|
});
|
|
}
|
|
},
|
|
|
|
actions: {
|
|
gotError(err) {
|
|
set(this, 'errors', [Errors.stringify(err)]);
|
|
},
|
|
addAuthorized(principal) {
|
|
if (principal) {
|
|
let { principalType, id } = principal;
|
|
|
|
if (principalType === 'user') {
|
|
set(this, 'member.userPrincipalId', id);
|
|
} else if (principalType === 'group') {
|
|
set(this, 'member.groupPrincipalId', id);
|
|
}
|
|
}
|
|
},
|
|
remove() {
|
|
this.remove(this.member);
|
|
},
|
|
},
|
|
|
|
choices: computed('C.CLUSTER_TEMPLATE_ROLES', () => {
|
|
let roles = C.CLUSTER_TEMPLATE_ROLES;
|
|
|
|
return Object.keys(roles).map((key) => {
|
|
return {
|
|
label: `shareMemberRow.accessType.${ roles[key] }`,
|
|
value: roles[key]
|
|
};
|
|
})
|
|
}),
|
|
|
|
noUpdate: computed('editing', 'principal', 'principalId', function() {
|
|
if (this.editing) {
|
|
if (this.principal || this.principalId) {
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
} else {
|
|
return true;
|
|
}
|
|
}),
|
|
|
|
remove() {
|
|
throw new Error('remove is a required action!')
|
|
},
|
|
|
|
});
|