mirror of
https://github.com/LaCasemate/fab-manager.git
synced 2025-01-18 07:52:23 +01:00
(bug) edit authentication provider
+ clean legacy code
This commit is contained in:
parent
3b0262c153
commit
370a443502
@ -33,6 +33,8 @@ export const DataMappingForm = <TFieldValues extends FieldValues, TContext exten
|
||||
* Build the list of available models for the data mapping
|
||||
*/
|
||||
const buildModelOptions = (): Array<selectModelFieldOption> => {
|
||||
if (!dataMapping) return [];
|
||||
|
||||
return Object.keys(dataMapping).map(model => {
|
||||
return {
|
||||
label: model,
|
||||
@ -45,6 +47,8 @@ export const DataMappingForm = <TFieldValues extends FieldValues, TContext exten
|
||||
* Build the list of fields of the current model for the data mapping
|
||||
*/
|
||||
const buildFieldOptions = (formData: Array<TFieldValues>, index: number): Array<selectModelFieldOption> => {
|
||||
if (!dataMapping) return [];
|
||||
|
||||
return dataMapping[getModel(formData, index)]?.map(field => {
|
||||
return {
|
||||
label: field[0],
|
||||
@ -73,7 +77,7 @@ export const DataMappingForm = <TFieldValues extends FieldValues, TContext exten
|
||||
const getDataType = (formData: Array<TFieldValues>, index: number): mappingType => {
|
||||
const model = getModel(formData, index);
|
||||
const field = getField(formData, index);
|
||||
if (model && field) {
|
||||
if (model && field && dataMapping) {
|
||||
return dataMapping[model]?.find(f => f[0] === field)?.[1];
|
||||
}
|
||||
};
|
||||
|
@ -31,21 +31,6 @@ const findIdxById = function (elements, id) {
|
||||
return (elements.map(function (elem) { return elem.id; })).indexOf(id);
|
||||
};
|
||||
|
||||
/**
|
||||
* For OAuth2 authentications, mapping the user's ID is mandatory. This function will check that this mapping
|
||||
* is effective and will return false otherwise
|
||||
* @param mappings {Array<Object>} expected: $scope.provider.auth_provider_mappings_attributes
|
||||
* @returns {Boolean} true if the mapping is declared
|
||||
*/
|
||||
const check_oauth2_id_is_mapped = function (mappings) {
|
||||
for (const mapping of Array.from(mappings)) {
|
||||
if ((mapping.local_model === 'user') && (mapping.local_field === 'uid') && !mapping._destroy) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
};
|
||||
|
||||
/**
|
||||
* Page listing all authentication providers
|
||||
*/
|
||||
@ -121,10 +106,8 @@ Application.Controllers.controller('AuthentificationController', ['$scope', '$st
|
||||
/**
|
||||
* Page to add a new authentication provider
|
||||
*/
|
||||
Application.Controllers.controller('NewAuthenticationController', ['$scope', '$state', '$rootScope', '$uibModal', 'dialogs', 'growl', 'mappingFieldsPromise', 'authProvidersPromise', 'AuthProvider', '_t',
|
||||
function ($scope, $state, $rootScope, $uibModal, dialogs, growl, mappingFieldsPromise, authProvidersPromise, AuthProvider, _t) {
|
||||
$scope.mode = 'creation';
|
||||
|
||||
Application.Controllers.controller('NewAuthenticationController', ['$scope', '$state', 'growl',
|
||||
function ($scope, $state, growl) {
|
||||
/**
|
||||
* Shows a success message forwarded from a child react component
|
||||
*/
|
||||
@ -139,114 +122,17 @@ Application.Controllers.controller('NewAuthenticationController', ['$scope', '$s
|
||||
growl.error(message);
|
||||
};
|
||||
|
||||
// default parameters for the new authentication provider
|
||||
$scope.provider = {
|
||||
name: '',
|
||||
providable_type: '',
|
||||
providable_attributes: {}
|
||||
};
|
||||
|
||||
/**
|
||||
* Initialize some provider's specific properties when selecting the provider type
|
||||
*/
|
||||
$scope.updateProvidable = function () {
|
||||
// === OAuth2Provider ===
|
||||
if ($scope.provider.providable_type === 'OAuth2Provider') {
|
||||
if (typeof $scope.provider.auth_provider_mappings_attributes === 'undefined') {
|
||||
return $scope.provider.auth_provider_mappings_attributes = [];
|
||||
}
|
||||
}
|
||||
};
|
||||
// Add others providers initializers here if needed ...
|
||||
|
||||
/**
|
||||
* Validate and save the provider parameters in database
|
||||
*/
|
||||
$scope.registerProvider = function () {
|
||||
// === DatabaseProvider ===
|
||||
let provider;
|
||||
if ($scope.provider.providable_type === 'DatabaseProvider') {
|
||||
// prevent from adding mode than 1
|
||||
for (provider of Array.from(authProvidersPromise)) {
|
||||
if (provider.providable_type === 'DatabaseProvider') {
|
||||
growl.error(_t('app.admin.authentication_new.a_local_database_provider_already_exists_unable_to_create_another'));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return AuthProvider.save({ auth_provider: $scope.provider }, function (provider) {
|
||||
growl.success(_t('app.admin.authentication_new.local_provider_successfully_saved'));
|
||||
return $state.go('app.admin.members');
|
||||
});
|
||||
// === OAuth2Provider ===
|
||||
} else if ($scope.provider.providable_type === 'OAuth2Provider') {
|
||||
// check the ID mapping
|
||||
if (!check_oauth2_id_is_mapped($scope.provider.auth_provider_mappings_attributes)) {
|
||||
growl.error(_t('app.admin.authentication_new.it_is_required_to_set_the_matching_between_User.uid_and_the_API_to_add_this_provider'));
|
||||
return false;
|
||||
}
|
||||
// discourage the use of unsecure SSO
|
||||
if (!($scope.provider.providable_attributes.base_url.indexOf('https://') > -1)) {
|
||||
dialogs.confirm(
|
||||
{
|
||||
size: 'l',
|
||||
resolve: {
|
||||
object () {
|
||||
return {
|
||||
title: _t('app.admin.authentication_new.security_issue_detected'),
|
||||
msg: _t('app.admin.authentication_new.beware_the_oauth2_authenticatoin_provider_you_are_about_to_add_isnt_using_HTTPS') +
|
||||
_t('app.admin.authentication_new.this_is_a_serious_security_issue_on_internet_and_should_never_be_used_except_for_testing_purposes') +
|
||||
_t('app.admin.authentication_new.do_you_really_want_to_continue')
|
||||
};
|
||||
}
|
||||
}
|
||||
},
|
||||
function () { // unsecured http confirmed
|
||||
AuthProvider.save({ auth_provider: $scope.provider }, function (provider) {
|
||||
growl.success(_t('app.admin.authentication_new.unsecured_oauth2_provider_successfully_added'));
|
||||
return $state.go('app.admin.members');
|
||||
});
|
||||
}
|
||||
);
|
||||
} else {
|
||||
AuthProvider.save({ auth_provider: $scope.provider }, function (provider) {
|
||||
growl.success(_t('app.admin.authentication_new.oauth2_provider_successfully_added'));
|
||||
return $state.go('app.admin.members');
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
$scope.cancel = function () { $state.go('app.admin.members'); };
|
||||
}
|
||||
]);
|
||||
|
||||
/**
|
||||
* Page to edit an already added authentication provider
|
||||
*/
|
||||
Application.Controllers.controller('EditAuthenticationController', ['$scope', '$state', '$rootScope', '$uibModal', 'dialogs', 'growl', 'providerPromise', 'mappingFieldsPromise', 'AuthProvider', '_t',
|
||||
function ($scope, $state, $rootScope, $uibModal, dialogs, growl, providerPromise, mappingFieldsPromise, AuthProvider, _t) {
|
||||
Application.Controllers.controller('EditAuthenticationController', ['$scope', '$state', 'growl', 'providerPromise',
|
||||
function ($scope, $state, growl, providerPromise) {
|
||||
// parameters of the currently edited authentication provider
|
||||
$scope.provider = providerPromise;
|
||||
|
||||
$scope.mode = 'edition';
|
||||
|
||||
/**
|
||||
* Update the current provider with the new inputs
|
||||
*/
|
||||
$scope.updateProvider = function () {
|
||||
// check the ID mapping
|
||||
if (!check_oauth2_id_is_mapped($scope.provider.auth_provider_mappings_attributes)) {
|
||||
growl.error(_t('app.admin.authentication_edit.it_is_required_to_set_the_matching_between_User.uid_and_the_API_to_add_this_provider'));
|
||||
return false;
|
||||
}
|
||||
return AuthProvider.update(
|
||||
{ id: $scope.provider.id },
|
||||
{ auth_provider: $scope.provider },
|
||||
function (provider) {
|
||||
growl.success(_t('app.admin.authentication_edit.provider_successfully_updated'));
|
||||
$state.go('app.admin.members');
|
||||
},
|
||||
function () { growl.error(_t('app.admin.authentication_edit.an_error_occurred_unable_to_update_the_provider')); }
|
||||
);
|
||||
};
|
||||
$scope.provider = cleanProvider(providerPromise);
|
||||
|
||||
/**
|
||||
* Shows a success message forwarded from a child react component
|
||||
@ -261,5 +147,14 @@ Application.Controllers.controller('EditAuthenticationController', ['$scope', '$
|
||||
$scope.onError = function (message) {
|
||||
growl.error(message);
|
||||
};
|
||||
|
||||
$scope.cancel = function () { $state.go('app.admin.members'); };
|
||||
|
||||
// prepare the provider for the react-hook-form
|
||||
function cleanProvider (provider) {
|
||||
delete provider.$promise;
|
||||
delete provider.$resolved;
|
||||
return provider;
|
||||
}
|
||||
}
|
||||
]);
|
||||
|
@ -1003,10 +1003,6 @@ angular.module('application.router', ['ui.router'])
|
||||
templateUrl: '/admin/authentications/new.html',
|
||||
controller: 'NewAuthenticationController'
|
||||
}
|
||||
},
|
||||
resolve: {
|
||||
mappingFieldsPromise: ['AuthProvider', function (AuthProvider) { return AuthProvider.mapping_fields().$promise; }],
|
||||
authProvidersPromise: ['AuthProvider', function (AuthProvider) { return AuthProvider.query().$promise; }]
|
||||
}
|
||||
})
|
||||
.state('app.admin.authentication_edit', {
|
||||
@ -1018,8 +1014,7 @@ angular.module('application.router', ['ui.router'])
|
||||
}
|
||||
},
|
||||
resolve: {
|
||||
providerPromise: ['AuthProvider', '$transition$', function (AuthProvider, $transition$) { return AuthProvider.get({ id: $transition$.params().id }).$promise; }],
|
||||
mappingFieldsPromise: ['AuthProvider', function (AuthProvider) { return AuthProvider.mapping_fields().$promise; }]
|
||||
providerPromise: ['AuthProvider', '$transition$', function (AuthProvider, $transition$) { return AuthProvider.get({ id: $transition$.params().id }).$promise; }]
|
||||
}
|
||||
})
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user