mirror of https://github.com/rancher/ui.git
191 lines
5.3 KiB
JavaScript
191 lines
5.3 KiB
JavaScript
import { get, set, computed } from '@ember/object';
|
|
import { observer } from '@ember/object';
|
|
import { once, later } 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';
|
|
|
|
export default Controller.extend({
|
|
github: service(),
|
|
endpoint: service(),
|
|
access: service(),
|
|
settings: service(),
|
|
githubConfig: alias('model.githubConfig'),
|
|
|
|
confirmDisable: false,
|
|
errors: null,
|
|
testing: false,
|
|
error: null,
|
|
saved: false,
|
|
saving: false,
|
|
haveToken: false,
|
|
|
|
organizations: null,
|
|
scheme: alias('githubConfig.scheme'),
|
|
isEnterprise: false,
|
|
secure: true,
|
|
|
|
isEnabled: alias('githubConfig.enabled'),
|
|
|
|
createDisabled: computed('githubConfig.{clientId,clientSecret,hostname}','testing','isEnterprise', 'haveToken', function() {
|
|
if (!get(this, 'haveToken')) {
|
|
return true;
|
|
}
|
|
if ( get(this, 'isEnterprise') && !get(this, 'githubConfig.hostname') )
|
|
{
|
|
return true;
|
|
}
|
|
|
|
if ( get(this, 'testing') )
|
|
{
|
|
return true;
|
|
}
|
|
|
|
}),
|
|
|
|
providerName: computed('githubConfig.hostname', function() {
|
|
if ( get(this, 'githubConfig.hostname') && get(this, 'githubConfig.hostname') !== 'github.com') {
|
|
return 'authPage.github.enterprise';
|
|
} else {
|
|
return 'authPage.github.standard';
|
|
}
|
|
}),
|
|
|
|
numUsers: computed('githubConfig.allowedPrincipals.@each.externalIdType','wasRestricted', function() {
|
|
return ( get(this, 'githubConfig.allowedPrincipalIds') || []).filter(principal => principal.includes(C.PROJECT.TYPE_GITHUB_USER)).get('length');
|
|
}),
|
|
|
|
numOrgs: computed('githubConfig.allowedPrincipals.@each.externalIdType','wasRestricted',function() {
|
|
|
|
return ( get(this, 'githubConfig.allowedPrincipalIds') || []).filter(principal => principal.includes(C.PROJECT.TYPE_GITHUB_ORG)).get('length');
|
|
}),
|
|
|
|
destinationUrl: computed(function() {
|
|
return window.location.origin+'/';
|
|
}),
|
|
|
|
updateEnterprise: function() {
|
|
if ( get(this, 'isEnterprise') ) {
|
|
var hostname = get(this, 'githubConfig.hostname')||'';
|
|
var match = hostname.match(/^http(s)?:\/\//i);
|
|
|
|
if ( match ) {
|
|
set(this, 'secure', ((match[1]||'').toLowerCase() === 's'));
|
|
hostname = hostname.substr(match[0].length).replace(/\/.*$/,'');
|
|
set(this, 'githubConfig.hostname', hostname);
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
set(this, 'githubConfig.hostname', 'github.com');
|
|
set(this, 'secure', true);
|
|
}
|
|
|
|
set(this, 'scheme', get(this, 'secure') ? 'https://' : 'http://');
|
|
},
|
|
|
|
enterpriseDidChange: observer('isEnterprise','githubConfig.hostname','secure', function() {
|
|
once(this,'updateEnterprise');
|
|
}),
|
|
|
|
protocolChoices: [
|
|
{label: 'https:// -- Requires a cert from a public CA', value: 'https://'},
|
|
{label: 'http://', value: 'http://'},
|
|
],
|
|
|
|
authenticationApplied: function(err) {
|
|
|
|
set(this, 'saving', false);
|
|
|
|
if (err) {
|
|
set(this, 'isEnabled', false);
|
|
this.send('gotError', err);
|
|
return;
|
|
}
|
|
|
|
this.send('clearError');
|
|
},
|
|
actions: {
|
|
save: function() {
|
|
this.send('clearError');
|
|
set(this, 'saving', true);
|
|
|
|
let githubConfig = get(this, 'githubConfig');
|
|
githubConfig.setProperties({
|
|
'clientId' : (githubConfig.get('clientId')||'').trim(),
|
|
'clientSecret' : (githubConfig.get('clientSecret')||'').trim(),
|
|
'enabled' : false, // It should already be, but just in case..
|
|
'accessMode' : 'restricted',
|
|
'tls': true,
|
|
'allowedPrincipalIds' : [],
|
|
});
|
|
|
|
get(this, 'github').setProperties({
|
|
hostname : githubConfig.get('hostname'),
|
|
scheme : githubConfig.get('scheme'),
|
|
clientId : githubConfig.get('clientId')
|
|
});
|
|
|
|
|
|
set(this, '_boundSucceed', this.authenticationApplied.bind(this));
|
|
get(this, 'github').test(githubConfig, get(this, '_boundSucceed'));
|
|
},
|
|
|
|
|
|
waitAndRefresh: function(url) {
|
|
$('#loading-underlay, #loading-overlay').removeClass('hide').show();
|
|
setTimeout(function() {
|
|
window.location.href = url || window.location.href;
|
|
}, 1000);
|
|
},
|
|
|
|
promptDisable: function() {
|
|
set(this, 'confirmDisable', true);
|
|
later(this, function() {
|
|
set(this, 'confirmDisable', false);
|
|
}, 10000);
|
|
},
|
|
|
|
gotError: function(err) {
|
|
if ( err.message )
|
|
{
|
|
this.send('showError', err.message + (err.detail? '('+err.detail+')' : ''));
|
|
}
|
|
else
|
|
{
|
|
this.send('showError', 'Error ('+err.status + ' - ' + err.code+')');
|
|
}
|
|
|
|
set(this, 'testing', false);
|
|
},
|
|
|
|
showError: function(msg) {
|
|
set(this, 'errors', [msg]);
|
|
window.scrollY = 10000;
|
|
},
|
|
|
|
clearError: function() {
|
|
set(this, 'errors', null);
|
|
},
|
|
|
|
disable: function() {
|
|
this.send('clearError');
|
|
|
|
let model = get(this, 'githubConfig').clone();
|
|
model.setProperties({
|
|
'enabled': false,
|
|
});
|
|
|
|
model.doAction('disable').then(() => {
|
|
this.send('waitAndRefresh');
|
|
}).catch((err) => {
|
|
this.send('gotError', err);
|
|
}).finally(() => {
|
|
set(this, 'confirmDisable', false);
|
|
});
|
|
},
|
|
},
|
|
});
|