mirror of https://github.com/rancher/ui.git
143 lines
4.2 KiB
JavaScript
143 lines
4.2 KiB
JavaScript
import {
|
|
get, set, computed, setProperties, observer
|
|
} from '@ember/object';
|
|
import { once } from '@ember/runloop';
|
|
import { alias } from '@ember/object/computed';
|
|
import { inject as service } from '@ember/service';
|
|
import Controller from '@ember/controller';
|
|
import C from 'ui/utils/constants';
|
|
import AuthMixin from 'global-admin/mixins/authentication';
|
|
|
|
export default Controller.extend(AuthMixin, {
|
|
oauth: service(),
|
|
endpoint: service(),
|
|
access: service(),
|
|
settings: service(),
|
|
|
|
confirmDisable: false,
|
|
errors: null,
|
|
testing: false,
|
|
error: null,
|
|
saved: false,
|
|
saving: false,
|
|
haveToken: false,
|
|
|
|
organizations: null,
|
|
isEnterprise: false,
|
|
secure: true,
|
|
|
|
protocolChoices: [
|
|
{
|
|
label: 'https:// -- Requires a cert from a public CA',
|
|
value: 'https://'
|
|
},
|
|
{
|
|
label: 'http://',
|
|
value: 'http://'
|
|
},
|
|
],
|
|
|
|
authConfig: alias('model.githubConfig'),
|
|
scheme: alias('authConfig.scheme'),
|
|
isEnabled: alias('authConfig.enabled'),
|
|
|
|
actions: {
|
|
save() {
|
|
this.send('clearError');
|
|
set(this, 'saving', true);
|
|
|
|
const authConfig = get(this, 'authConfig');
|
|
const am = get(authConfig, 'accessMode') || 'restricted';
|
|
|
|
setProperties(authConfig, {
|
|
'clientId': (authConfig.get('clientId') || '').trim(),
|
|
'clientSecret': (authConfig.get('clientSecret') || '').trim(),
|
|
'enabled': false, // It should already be, but just in case..
|
|
'accessMode': am,
|
|
'tls': true,
|
|
'allowedPrincipalIds': [],
|
|
});
|
|
|
|
setProperties(get(this, 'oauth'), {
|
|
hostname: authConfig.get('hostname'),
|
|
scheme: authConfig.get('scheme'),
|
|
clientId: authConfig.get('clientId')
|
|
});
|
|
|
|
|
|
set(this, '_boundSucceed', this.authenticationApplied.bind(this));
|
|
get(this, 'oauth').test(authConfig, get(this, '_boundSucceed'));
|
|
},
|
|
},
|
|
enterpriseDidChange: observer('isEnterprise', 'authConfig.hostname', 'secure', function() {
|
|
once(this, 'updateEnterprise');
|
|
}),
|
|
|
|
createDisabled: computed('authConfig.{clientId,clientSecret,hostname}', 'testing', 'isEnterprise', 'haveToken', function() {
|
|
if (!get(this, 'haveToken')) {
|
|
return true;
|
|
}
|
|
if ( get(this, 'isEnterprise') && !get(this, 'authConfig.hostname') ) {
|
|
return true;
|
|
}
|
|
|
|
if ( get(this, 'testing') ) {
|
|
return true;
|
|
}
|
|
}),
|
|
|
|
providerName: computed('authConfig.hostname', function() {
|
|
if ( get(this, 'authConfig.hostname') && get(this, 'authConfig.hostname') !== 'github.com') {
|
|
return 'authPage.github.enterprise';
|
|
} else {
|
|
return 'authPage.github.standard';
|
|
}
|
|
}),
|
|
|
|
numUsers: computed('authConfig.allowedPrincipals.@each.externalIdType', 'wasRestricted', function() {
|
|
return ( get(this, 'authConfig.allowedPrincipalIds') || []).filter((principal) => principal.includes(C.PROJECT.TYPE_GITHUB_USER)).get('length');
|
|
}),
|
|
|
|
numOrgs: computed('authConfig.allowedPrincipals.@each.externalIdType', 'wasRestricted', function() {
|
|
return ( get(this, 'authConfig.allowedPrincipalIds') || []).filter((principal) => principal.includes(C.PROJECT.TYPE_GITHUB_ORG)).get('length');
|
|
}),
|
|
|
|
destinationUrl: computed(() => {
|
|
return `${ window.location.origin }/`;
|
|
}),
|
|
|
|
updateEnterprise() {
|
|
if ( get(this, 'isEnterprise') ) {
|
|
var hostname = get(this, 'authConfig.hostname') || '';
|
|
var match = hostname.match(/^http(s)?:\/\//i);
|
|
|
|
if ( match ) {
|
|
setProperties(this, {
|
|
secure: (match[1] || '').toLowerCase() === 's',
|
|
'authConfig.hostname': hostname = hostname.substr(match[0].length).replace(/\/.*$/, '')
|
|
})
|
|
}
|
|
} else {
|
|
setProperties(this, {
|
|
secure: true,
|
|
'authConfig.hostname': 'github.com'
|
|
});
|
|
}
|
|
|
|
set(this, 'scheme', get(this, 'secure') ? 'https://' : 'http://');
|
|
},
|
|
|
|
authenticationApplied(err) {
|
|
set(this, 'saving', false);
|
|
|
|
if (err) {
|
|
set(this, 'isEnabled', false);
|
|
this.send('gotError', err);
|
|
|
|
return;
|
|
}
|
|
|
|
this.send('clearError');
|
|
},
|
|
});
|