mirror of https://github.com/rancher/ui.git
122 lines
3.1 KiB
JavaScript
122 lines
3.1 KiB
JavaScript
import Service, { inject as service } from '@ember/service';
|
|
import Util from 'shared/utils/util';
|
|
import { get, set } from '@ember/object';
|
|
|
|
const additionalRedirectParams = {
|
|
response_mode: 'query',
|
|
response_type: 'code',
|
|
// prompt: "consent",
|
|
};
|
|
|
|
export default Service.extend({
|
|
access: service(),
|
|
cookies: service(),
|
|
session: service(),
|
|
globalStore: service(),
|
|
app: service(),
|
|
intl: service(),
|
|
oauth: service(),
|
|
|
|
testConfig(config) {
|
|
return config.doAction('configureTest', config);
|
|
},
|
|
|
|
saveConfig(config, opt) {
|
|
return config.doAction('testAndApply', opt);
|
|
},
|
|
|
|
login() {
|
|
const provider = get(this, 'access.providers').findBy('id', 'azuread');
|
|
const authRedirect = get(provider, 'redirectUrl');
|
|
let redirect = Util.addQueryParams(authRedirect, additionalRedirectParams);
|
|
|
|
redirect = Util.addQueryParams(redirect, { state: this.oauth.encodeState(this.oauth.generateState('azuread')) });
|
|
|
|
|
|
window.location.href = redirect;
|
|
},
|
|
|
|
test(config, url, cb) {
|
|
let responded = false;
|
|
|
|
window.onAzureTest = (err, code) => {
|
|
if ( !responded ) {
|
|
let azureADConfig = config;
|
|
|
|
responded = true;
|
|
|
|
this.finishTest(azureADConfig, code, cb);
|
|
}
|
|
};
|
|
|
|
url = Util.addQueryParams(url, additionalRedirectParams);
|
|
const state = this.oauth.encodeState(this.oauth.generateState('azuread'))
|
|
|
|
url = Util.addQueryParams(url, { state });
|
|
|
|
|
|
const popup = window.open(url, 'rancherAuth', Util.popupWindowOptions());
|
|
const intl = get(this, 'intl');
|
|
|
|
const timer = setInterval(() => {
|
|
if (popup && popup.closed ) {
|
|
clearInterval(timer);
|
|
|
|
if ( !responded ) {
|
|
responded = true;
|
|
|
|
cb({
|
|
type: 'error',
|
|
message: intl.t('authPage.azuread.test.authError')
|
|
});
|
|
}
|
|
} else if (popup === null || typeof (popup) === 'undefined') {
|
|
clearInterval(timer);
|
|
|
|
if ( !responded ) {
|
|
responded = true;
|
|
|
|
cb({
|
|
type: 'error',
|
|
message: intl.t('authPage.azuread.test.popupError')
|
|
});
|
|
}
|
|
}
|
|
}, 500);
|
|
},
|
|
|
|
finishTest(config, code, cb) {
|
|
const azureADConfig = config;
|
|
|
|
set(azureADConfig, 'enabled', true);
|
|
|
|
let out = {
|
|
code,
|
|
config: azureADConfig,
|
|
};
|
|
|
|
return this.saveConfig(config, out).then(() => {
|
|
return get(this, 'globalStore').find('principal', null, {
|
|
filter: {
|
|
me: true,
|
|
provider: 'azuread'
|
|
}
|
|
}).then(( resp ) => {
|
|
let aps = get(out, 'config.allowedPrincipalIds') ? get(out, 'config.allowedPrincipalIds') : set(out, 'config.allowedPrincipalIds', []);
|
|
|
|
let me = resp.find( (p) => {
|
|
return get(p, 'me') && get(p, 'provider') === 'azuread';// TODO filters do not work but craig knows
|
|
});
|
|
|
|
if (!aps.includes(get(me, 'id'))) {
|
|
aps.pushObject(get(me, 'id'));
|
|
}
|
|
|
|
return azureADConfig.save().then(() => {
|
|
window.location.href = window.location.href; // eslint-disable-line no-self-assign
|
|
});
|
|
});
|
|
}).catch((err) => cb(err));
|
|
},
|
|
});
|