mirror of https://github.com/rancher/ui.git
140 lines
4.1 KiB
JavaScript
140 lines
4.1 KiB
JavaScript
import Component from '@ember/component';
|
|
import { inject as service } from '@ember/service';
|
|
import { once } from '@ember/runloop';
|
|
import { set, get, observer, setProperties } from '@ember/object';
|
|
|
|
export default Component.extend({
|
|
router: service(),
|
|
gitService: service('pipeline-github'),
|
|
|
|
oauthType: 'github',
|
|
oauthHost: 'github.com',
|
|
provider: null,
|
|
errors: null,
|
|
useGloableConfig: true,
|
|
githubAuthConfig: null,
|
|
testing: false,
|
|
secure: true,
|
|
isEnterprise: false,
|
|
|
|
didReceiveAttrs() {
|
|
setProperties(this, {
|
|
homePageURL: window.location.origin,
|
|
destinationUrl: window.location.origin
|
|
});
|
|
},
|
|
|
|
actions: {
|
|
changeOauthSource(useGloableConfig) {
|
|
set(this, 'useGloableConfig', useGloableConfig);
|
|
},
|
|
|
|
githubAuthConfigAuthenticate() {
|
|
const githubAuthConfig = get(this, 'githubAuthConfig');
|
|
|
|
this.send('authenticate', null, get(githubAuthConfig, 'clientId'), get(githubAuthConfig, 'hostName'), get(githubAuthConfig, 'tls'), true)
|
|
},
|
|
|
|
authenticate(cb, client, host, isTls, inheritAuth, callBack) {
|
|
const clientId = client || get(this, 'oauthModel.clientId');
|
|
let hostname = host || get(this, 'oauthModel.hostName') || get(this, 'oauthHost');
|
|
const tls = isTls === undefined ? get(this, 'oauthModel.scheme') : isTls;
|
|
const scheme = tls ? 'https://' : 'http://';
|
|
const authorizeURL = `${ scheme }${ hostname }${ this.getOauthUrl(clientId) }`;
|
|
|
|
set(this, 'testing', true);
|
|
get(this, 'gitService').authorizeTest(
|
|
authorizeURL,
|
|
(err, code) => {
|
|
if (err) {
|
|
this.send('gotError', err);
|
|
set(this, 'testing', false);
|
|
if ( cb ) {
|
|
cb();
|
|
}
|
|
} else {
|
|
callBack && callBack(code) || this.send('gotCode', code, hostname, tls, inheritAuth, cb);
|
|
}
|
|
}
|
|
);
|
|
},
|
|
|
|
gotCode(code, hostname, tls, inheritAuth, cb) {
|
|
const provider = get(this, 'provider');
|
|
const oauthModel = get(this, 'oauthModel');
|
|
const param = {
|
|
code,
|
|
clientId: oauthModel.clientId,
|
|
clientSecret: oauthModel.clientSecret,
|
|
redirectUrl: `${ get(this, 'destinationUrl') }/verify-auth`,
|
|
inheritAuth: !!inheritAuth,
|
|
hostname,
|
|
tls,
|
|
};
|
|
|
|
provider.doAction('testAndApply', param).then(() => {
|
|
set(this, 'testing', false);
|
|
if ( cb ) {
|
|
cb();
|
|
}
|
|
get(this, 'router').transitionTo('authenticated.project.pipeline.repositories');
|
|
}).catch((res) => {
|
|
this.send('gotError', res);
|
|
set(this, 'testing', false);
|
|
if ( cb ) {
|
|
cb();
|
|
}
|
|
});
|
|
},
|
|
|
|
gotError(err) {
|
|
if ( get(err, 'message') ) {
|
|
this.send('showError', get(err, 'message') + (get(err, 'detail') ? `(${ get(err, 'detail') })` : ''));
|
|
} else if (typeof err === 'object') {
|
|
this.send('showError', `Error (${ get(err, 'status') } - ${ get(err, 'code') })`);
|
|
} else {
|
|
this.send('showError', `Error (${ err })`);
|
|
}
|
|
|
|
set(this, 'testing', false);
|
|
},
|
|
|
|
showError(msg) {
|
|
set(this, 'errors', [msg]);
|
|
window.scrollY = 10000;
|
|
},
|
|
},
|
|
|
|
enterpriseDidChange: observer('isEnterprise', 'oauthModel.hostName', 'secure', function() {
|
|
if (get(this, 'oauthModel.isAuth')) {
|
|
return
|
|
}
|
|
once(this, 'updateEnterprise');
|
|
}),
|
|
|
|
getOauthUrl(clientId) {
|
|
return `/login/oauth/authorize?client_id=${ clientId }&response_type=code&scope=repo+admin%3Arepo_hook`;
|
|
},
|
|
|
|
updateEnterprise() {
|
|
if (get(this, 'isEnterprise')) {
|
|
let hostname = get(this, 'oauthModel.hostName') || '';
|
|
const match = hostname.match(/^http(s)?:\/\//i);
|
|
|
|
if (match) {
|
|
setProperties(this, {
|
|
secure: (match[1] || '').toLowerCase() === 's',
|
|
'oauthModel.hostName': hostname.substr(match[0].length).replace(/\/.*$/, '')
|
|
});
|
|
}
|
|
} else {
|
|
setProperties(this, {
|
|
secure: true,
|
|
'oauthModel.hostName': null
|
|
});
|
|
}
|
|
|
|
set(this, 'oauthModel.scheme', get(this, 'secure'));
|
|
},
|
|
});
|