Add superuser config panel support for OIDC login
This commit is contained in:
parent
157640e696
commit
1146b62c13
3 changed files with 265 additions and 125 deletions
|
@ -71,7 +71,11 @@ angular.module("core-config-setup", ['angularFileUpload'])
|
|||
|
||||
{'id': 'bittorrent', 'title': 'BitTorrent downloads', 'condition': function(config) {
|
||||
return config.FEATURE_BITTORRENT;
|
||||
}}
|
||||
}},
|
||||
|
||||
{'id': 'oidc-login', 'title': 'OIDC Login(s)', 'condition': function(config) {
|
||||
return $scope.getOIDCProviders(config).length > 0;
|
||||
}},
|
||||
];
|
||||
|
||||
$scope.STORAGE_CONFIG_FIELDS = {
|
||||
|
@ -147,6 +151,59 @@ angular.module("core-config-setup", ['angularFileUpload'])
|
|||
$scope.validating = null;
|
||||
$scope.savingConfiguration = false;
|
||||
|
||||
$scope.removeOIDCProvider = function(provider) {
|
||||
delete $scope.config[provider];
|
||||
};
|
||||
|
||||
$scope.addOIDCProvider = function() {
|
||||
bootbox.prompt('Enter an ID for the OIDC provider', function(result) {
|
||||
if (!result) {
|
||||
return;
|
||||
}
|
||||
|
||||
result = result.toUpperCase();
|
||||
|
||||
if (!result.match(/^[A-Z0-9]+$/)) {
|
||||
bootbox.alert('Invalid ID for OIDC provider: must be alphanumeric');
|
||||
return;
|
||||
}
|
||||
|
||||
if (result == 'GITHUB' || result == 'GOOGLE') {
|
||||
bootbox.alert('Invalid ID for OIDC provider: cannot be a reserved name');
|
||||
return;
|
||||
}
|
||||
|
||||
var key = result + '_LOGIN_CONFIG';
|
||||
if ($scope.config[key]) {
|
||||
bootbox.alert('Invalid ID for OIDC provider: already exists');
|
||||
return;
|
||||
}
|
||||
|
||||
$scope.config[key] = {};
|
||||
});
|
||||
};
|
||||
|
||||
$scope.getOIDCProviderId = function(key) {
|
||||
var index = key.indexOf('_LOGIN_CONFIG');
|
||||
if (index <= 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return key.substr(0, index);
|
||||
};
|
||||
|
||||
$scope.getOIDCProviders = function(config) {
|
||||
var keys = Object.keys(config || {});
|
||||
return keys.filter(function(key) {
|
||||
if (key == 'GITHUB_LOGIN_CONFIG' || key == 'GOOGLE_LOGIN_CONFIG') {
|
||||
// Has custom UI and config.
|
||||
return false;
|
||||
}
|
||||
|
||||
return !!$scope.getOIDCProviderId(key);
|
||||
});
|
||||
};
|
||||
|
||||
$scope.getServices = function(config) {
|
||||
var services = [];
|
||||
if (!config) { return services; }
|
||||
|
|
Reference in a new issue