mirror of https://github.com/rancher/ui.git
96 lines
2.6 KiB
JavaScript
96 lines
2.6 KiB
JavaScript
import Route from '@ember/routing/route';
|
|
import RSVP from 'rsvp';
|
|
import { get } from '@ember/object';
|
|
import { inject as service } from '@ember/service';
|
|
import C from 'shared/utils/constants';
|
|
|
|
export default Route.extend({
|
|
access : service(),
|
|
cookies : service(),
|
|
github : service(),
|
|
modal : service(),
|
|
prefs : service(),
|
|
settings : service(),
|
|
globalStore : service(),
|
|
|
|
queryParams: {
|
|
config: {
|
|
refreshModel: false
|
|
},
|
|
code: {
|
|
refreshModel: false
|
|
},
|
|
state: {
|
|
refreshModel: false
|
|
},
|
|
authProvider: {
|
|
refreshModel: false
|
|
},
|
|
error_description: {
|
|
refreshModel: false
|
|
},
|
|
login: {
|
|
refreshModel: false
|
|
},
|
|
},
|
|
|
|
model(params/* , transition */) {
|
|
if (window.opener && !get(params, 'login')) {
|
|
let openerController = window.opener.lc('security.authentication.github');
|
|
let openerStore = get(openerController, 'globalStore');
|
|
let qp = get(params, 'config') || get(params, 'authProvider');
|
|
let type = `${qp}Config`;
|
|
let config = openerStore.getById(type, qp);
|
|
let gh = get(this, 'github');
|
|
let stateMsg = 'Authorization state did not match, please try again.';
|
|
|
|
if (get(params, 'config') === 'github') {
|
|
|
|
return gh.testConfig(config).then((resp) => {
|
|
gh.authorize(resp, openerController.get('github.state'));
|
|
}).catch(err => {
|
|
this.send('gotError', err);
|
|
});
|
|
|
|
}
|
|
|
|
if (get(params, 'code')) {
|
|
// TODO see if session.githubState works here
|
|
if (openerController.get('github').stateMatches(get(params, 'state'))) {
|
|
reply(params.error_description, params.code);
|
|
} else {
|
|
reply(stateMsg);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
if (get(params, 'code') && get(params, 'login')) {
|
|
if (get(this, 'github').stateMatches(get(params, 'state'))) {
|
|
let ghProvider = get(this, 'access.providers').findBy('id', 'github');
|
|
return ghProvider.doAction('login', {
|
|
code: get(params, 'code'),
|
|
responseType: 'cookie',
|
|
description: C.SESSION.DESCRIPTION,
|
|
ttl: C.SESSION.TTL,
|
|
}).then(() => {
|
|
return this.transitionTo('authenticated');
|
|
});
|
|
}
|
|
|
|
}
|
|
|
|
function reply(err,code) {
|
|
try {
|
|
window.opener.window.onGithubTest(err,code);
|
|
setTimeout(function() {
|
|
window.close();
|
|
},250);
|
|
return new RSVP.promise();
|
|
} catch(e) {
|
|
window.close();
|
|
}
|
|
}
|
|
}
|
|
});
|