ui/lib/global-admin/addon/mixins/saml-auth.js

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');
}),
});