mirror of https://github.com/rancher/ui.git
129 lines
3.6 KiB
JavaScript
129 lines
3.6 KiB
JavaScript
import Mixin from '@ember/object/mixin';
|
|
import { inject as service } from '@ember/service';
|
|
import {
|
|
computed, get, set, setProperties, observer
|
|
} from '@ember/object';
|
|
import { alias } from '@ember/object/computed';
|
|
import C from 'ui/utils/constants';
|
|
|
|
export default Mixin.create({
|
|
settings: service(),
|
|
saml: service(),
|
|
errors: null,
|
|
redirectUrl: null,
|
|
saving: false,
|
|
saved: false,
|
|
testing: false,
|
|
disableAuth: true,
|
|
urlError: null,
|
|
urlWarning: false,
|
|
urlInvalid: false,
|
|
protocol: 'https://',
|
|
authConfig: alias('model.authConfig'),
|
|
providerNamePath: null,
|
|
providerName: null,
|
|
|
|
didChange: observer('authConfig.rancherApiHost', function() {
|
|
if ( !get(this, 'authConfig.rancherApiHost') ) {
|
|
set(this, 'authConfig.rancherApiHost', get(this, 'model.serverUrl.value'))
|
|
}
|
|
}),
|
|
|
|
actions: {
|
|
authTest(cb) {
|
|
this.send('clearError');
|
|
|
|
const model = get(this, 'authConfig');
|
|
const am = get(model, 'accessMode') || 'unrestricted';
|
|
|
|
setProperties(model, { accessMode: am });
|
|
|
|
const errors = model.validationErrors();
|
|
|
|
if ( errors.get('length') ) {
|
|
setProperties(this, {
|
|
errors,
|
|
testing: false
|
|
});
|
|
|
|
set(model, 'enabled', false);
|
|
cb(false);
|
|
} else {
|
|
set(this, 'testing', true);
|
|
|
|
let allowedPrincipals = [];
|
|
|
|
if (get(this, 'editing')) {
|
|
allowedPrincipals = get(model, 'allowedPrincipalIds');
|
|
}
|
|
|
|
setProperties(model, {
|
|
'enabled': false, // It should already be, but just in case..
|
|
'allowedPrincipalIds': allowedPrincipals,
|
|
});
|
|
|
|
model.save().then(() => {
|
|
model.doAction('testAndEnable', { finalRedirectUrl: `${ window.location.origin }/verify-auth?config=${ get(this, 'providerName') }` }).then( ( resp ) => {
|
|
get(this, 'saml').test(resp, (popupResults) => {
|
|
if (popupResults.type === 'error') {
|
|
this.set('errors', [popupResults.message]);
|
|
cb(false);
|
|
} else {
|
|
this.send('waitAndRefresh');
|
|
}
|
|
});
|
|
}).catch((err) => {
|
|
this.set('errors', [err]);
|
|
cb(false);
|
|
});
|
|
}).catch((err) => {
|
|
this.set('errors', [err]);
|
|
cb(false);
|
|
});
|
|
}
|
|
},
|
|
},
|
|
|
|
apiHost: computed('authConfig.rancherApiHost', {
|
|
get() {
|
|
let host = get(this, 'authConfig.rancherApiHost') || '';
|
|
|
|
if (host.length > 0) {
|
|
host = host.slice(8, host.length);
|
|
}
|
|
|
|
return host;
|
|
},
|
|
set(key, value) {
|
|
let host = '';
|
|
|
|
if (host.indexOf(get(this, 'protocol'))) {
|
|
host = `${ get(this, 'protocol') }${ value }`;
|
|
} else {
|
|
host = value;
|
|
}
|
|
|
|
set(this, 'authConfig.rancherApiHost', host);
|
|
|
|
return value;
|
|
},
|
|
}),
|
|
|
|
numUsers: computed('authConfig.allowedIdentities.@each.externalIdType', 'wasRestricted', function() {
|
|
let type = `PROJECT.TYPE_${ get(this, 'providerName').capitalize() }_USER`;
|
|
|
|
type = get(C, type);
|
|
|
|
return (this.get('authConfig.allowedIdentities') || []).filterBy('externalIdType', type).get('length');
|
|
}),
|
|
|
|
numOrgs: computed('authConfig.allowedIdentities.@each.externalIdType', 'wasRestricted', function() {
|
|
let type = `PROJECT.TYPE_${ get(this, 'providerName').capitalize() }_GROUP`;
|
|
|
|
type = get(C, type);
|
|
|
|
return (this.get('authConfig.allowedIdentities') || []).filterBy('externalIdType', type).get('length');
|
|
}),
|
|
|
|
});
|