diff options
Diffstat (limited to 'admin/resources/js/services.js')
-rw-r--r-- | admin/resources/js/services.js | 2146 |
1 files changed, 2146 insertions, 0 deletions
diff --git a/admin/resources/js/services.js b/admin/resources/js/services.js new file mode 100644 index 0000000..a165a48 --- /dev/null +++ b/admin/resources/js/services.js @@ -0,0 +1,2146 @@ +'use strict'; + +var module = angular.module('keycloak.services', [ 'ngResource', 'ngRoute' ]); + +module.service('Dialog', function($modal) { + var dialog = {}; + + var openDialog = function(title, message, btns, template) { + var controller = function($scope, $modalInstance, title, message, btns) { + $scope.title = title; + $scope.message = message; + $scope.btns = btns; + + $scope.ok = function () { + $modalInstance.close(); + }; + $scope.cancel = function () { + $modalInstance.dismiss('cancel'); + }; + }; + + return $modal.open({ + templateUrl: resourceUrl + template, + controller: controller, + resolve: { + title: function() { + return title; + }, + message: function() { + return message; + }, + btns: function() { + return btns; + } + } + }).result; + } + + var escapeHtml = function(str) { + var div = document.createElement('div'); + div.appendChild(document.createTextNode(str)); + return div.innerHTML; + }; + + dialog.confirmDelete = function(name, type, success) { + var title = 'Delete ' + escapeHtml(type.charAt(0).toUpperCase() + type.slice(1)); + var msg = 'Are you sure you want to permanently delete the ' + type + ' ' + name + '?'; + var btns = { + ok: { + label: 'Delete', + cssClass: 'btn btn-danger' + }, + cancel: { + label: 'Cancel', + cssClass: 'btn btn-default' + } + } + + openDialog(title, msg, btns, '/templates/kc-modal.html').then(success); + } + + dialog.confirmGenerateKeys = function(name, type, success) { + var title = 'Generate new keys for realm'; + var msg = 'Are you sure you want to permanently generate new keys for ' + name + '?'; + var btns = { + ok: { + label: 'Generate Keys', + cssClass: 'btn btn-danger' + }, + cancel: { + label: 'Cancel', + cssClass: 'btn btn-default' + } + } + + openDialog(title, msg, btns, '/templates/kc-modal.html').then(success); + } + + dialog.confirm = function(title, message, success, cancel) { + var btns = { + ok: { + label: title, + cssClass: 'btn btn-danger' + }, + cancel: { + label: 'Cancel', + cssClass: 'btn btn-default' + } + } + + openDialog(title, message, btns, '/templates/kc-modal.html').then(success, cancel); + } + + dialog.message = function(title, message, success, cancel) { + var btns = { + ok: { + label: "Ok", + cssClass: 'btn btn-default' + } + } + + openDialog(title, message, btns, '/templates/kc-modal-message.html').then(success, cancel); + } + + dialog.open = function(title, message, btns, success, cancel) { + openDialog(title, message, btns, '/templates/kc-modal.html').then(success, cancel); + } + + return dialog +}); + +module.service('CopyDialog', function($modal) { + var dialog = {}; + dialog.open = function (title, suggested, success) { + var controller = function($scope, $modalInstance, title) { + $scope.title = title; + $scope.name = { value: 'Copy of ' + suggested }; + $scope.ok = function () { + console.log('ok with name: ' + $scope.name); + $modalInstance.close(); + success($scope.name.value); + }; + $scope.cancel = function () { + $modalInstance.dismiss('cancel'); + }; + } + $modal.open({ + templateUrl: resourceUrl + '/templates/kc-copy.html', + controller: controller, + resolve: { + title: function() { + return title; + } + } + }); + }; + return dialog; +}); + +module.factory('Notifications', function($rootScope, $timeout) { + // time (in ms) the notifications are shown + var delay = 5000; + + var notifications = {}; + notifications.current = { display: false }; + notifications.current.remove = function() { + if (notifications.scheduled) { + $timeout.cancel(notifications.scheduled); + delete notifications.scheduled; + } + delete notifications.current.type; + delete notifications.current.header; + delete notifications.current.message; + notifications.current.display = false; + console.debug("Remove message"); + } + + $rootScope.notification = notifications.current; + + notifications.message = function(type, header, message) { + notifications.current.remove(); + + notifications.current.type = type; + notifications.current.header = header; + notifications.current.message = message; + notifications.current.display = true; + + notifications.scheduled = $timeout(function() { + notifications.current.remove(); + }, delay); + + console.debug("Added message"); + } + + notifications.info = function(message) { + notifications.message("info", "Info!", message); + }; + + notifications.success = function(message) { + notifications.message("success", "Success!", message); + }; + + notifications.error = function(message) { + notifications.message("danger", "Error!", message); + }; + + notifications.warn = function(message) { + notifications.message("warning", "Warning!", message); + }; + + return notifications; +}); + + +module.factory('ComponentUtils', function() { + + function sortGroups(prop, arr) { + // sort current elements + arr.sort(function (a, b) { + if (a[prop] < b[prop]) { return -1; } + if (a[prop] > b[prop]) { return 1; } + return 0; + }); + // check sub groups + arr.forEach(function (item, index) { + if (!!item.subGroups) { + sortGroups(prop, item.subGroups); + } + }); + return arr; + }; + + var utils = {}; + + utils.sortGroups = sortGroups; + + utils.findIndexById = function(array, id) { + for (var i = 0; i < array.length; i++) { + if (array[i].id === id) return i; + } + return -1; + } + + utils.convertAllMultivaluedStringValuesToList = function(properties, config) { + if (!properties) { + return; + } + + for (var i=0 ; i<properties.length ; i++) { + var prop = properties[i]; + if (prop.type === 'MultivaluedString') { + var configProperty = config[prop.name]; + + if (configProperty == null) { + configProperty = []; + config[prop.name] = configProperty; + } + + if (typeof configProperty === "string") { + configProperty = configProperty.split("##"); + config[prop.name] = configProperty; + } + } + } + } + + utils.convertAllListValuesToMultivaluedString = function(properties, config) { + if (!properties) { + return; + } + + for (var i=0 ; i<properties.length ; i++) { + var prop = properties[i]; + if (prop.type === 'MultivaluedString') { + var configVal = config[prop.name]; + + if (configVal != null) { + if (configVal.length > 0) { + var lastVal = configVal[configVal.length - 1]; + if (lastVal === '') { + console.log('Remove empty value from config property: ' + prop.name); + configVal.splice(configVal.length - 1, 1); + } + } + + var attrVals = configVal.join("##"); + config[prop.name] = attrVals; + + } + } + } + } + + + + utils.addLastEmptyValueToMultivaluedLists = function(properties, config) { + if (!properties) { + return; + } + + for (var i=0 ; i<properties.length ; i++) { + var prop = properties[i]; + if (prop.type === 'MultivaluedString') { + var configProperty = config[prop.name]; + + if (configProperty == null) { + configProperty = []; + config[prop.name] = configProperty; + } + + if (configProperty.length == 0 || configProperty[configProperty.length - 1].length > 0) { + configProperty.push(''); + } + } + } + } + + + utils.removeLastEmptyValue = function(componentConfig) { + + for (var configPropertyName in componentConfig) { + var configVal = componentConfig[configPropertyName]; + if (configVal && configVal.length > 0) { + var lastVal = configVal[configVal.length - 1]; + if (lastVal === '') { + console.log('Remove empty value from config property: ' + configPropertyName); + configVal.splice(configVal.length - 1, 1); + } + } + } + } + + // Allows you to use ui-select2 with <input> tag. + // In HTML you will then use property.mvOptions like this: + // <input ui-select2="prop.mvOptions" ng-model="... + utils.addMvOptionsToMultivaluedLists = function(properties) { + if (!properties) return; + + for (var i=0 ; i<properties.length ; i++) { + var prop = properties[i]; + if (prop.type !== 'MultivaluedList') continue; + + prop.mvOptions = { + 'multiple' : true, + 'simple_tags' : true, + 'tags' : angular.copy(prop.options) + } + } + + } + + return utils; +}); + +module.factory('Realm', function($resource) { + return $resource(authUrl + '/admin/realms/:id', { + id : '@realm' + }, { + update : { + method : 'PUT' + }, + create : { + method : 'POST', + params : { id : ''} + } + + }); +}); + +module.factory('RealmKeys', function($resource) { + return $resource(authUrl + '/admin/realms/:id/keys', { + id : '@realm' + }); +}); + +module.factory('RealmEventsConfig', function($resource) { + return $resource(authUrl + '/admin/realms/:id/events/config', { + id : '@realm' + }, { + update : { + method : 'PUT' + } + }); +}); + +module.factory('RealmEvents', function($resource) { + return $resource(authUrl + '/admin/realms/:id/events', { + id : '@realm' + }); +}); + +module.factory('RealmAdminEvents', function($resource) { + return $resource(authUrl + '/admin/realms/:id/admin-events', { + id : '@realm' + }); +}); + +module.factory('BruteForce', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/attack-detection/brute-force/users', { + realm : '@realm' + }); +}); + +module.factory('BruteForceUser', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/attack-detection/brute-force/users/:userId', { + realm : '@realm', + userId : '@userId' + }); +}); + + +module.factory('RequiredActions', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/authentication/required-actions/:alias', { + realm : '@realm', + alias : '@alias' + }, { + update : { + method : 'PUT' + } + }); +}); + +module.factory('RequiredActionRaisePriority', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/authentication/required-actions/:alias/raise-priority', { + realm : '@realm', + alias : '@alias' + }); +}); + +module.factory('RequiredActionLowerPriority', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/authentication/required-actions/:alias/lower-priority', { + realm : '@realm', + alias : '@alias' + }); +}); + +module.factory('UnregisteredRequiredActions', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/authentication/unregistered-required-actions', { + realm : '@realm' + }); +}); + +module.factory('RegisterRequiredAction', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/authentication/register-required-action', { + realm : '@realm' + }); +}); + +module.factory('RealmLDAPConnectionTester', function($resource, $httpParamSerializer) { + return $resource(authUrl + '/admin/realms/:realm/testLDAPConnection', { + realm : '@realm' + }); +}); + +module.factory('RealmSMTPConnectionTester', function($resource, $httpParamSerializer) { + return $resource(authUrl + '/admin/realms/:realm/testSMTPConnection', { + realm : '@realm' + }); +}); + +module.service('ServerInfo', function($resource, $q, $http) { + var info = {}; + var delay = $q.defer(); + + function copyInfo(data, info) { + angular.copy(data, info); + + info.listProviderIds = function(spi) { + var providers = info.providers[spi].providers; + var ids = Object.keys(providers); + ids.sort(function(a, b) { + var s1; + var s2; + + if (providers[a].order != providers[b].order) { + s1 = providers[b].order; + s2 = providers[a].order; + } else { + s1 = a; + s2 = b; + } + + if (s1 < s2) { + return -1; + } else if (s1 > s2) { + return 1; + } else { + return 0; + } + }); + return ids; + } + + info.featureEnabled = function(provider) { + return info.profileInfo.disabledFeatures.indexOf(provider) == -1; + } + } + + $http.get(authUrl + '/admin/serverinfo').then(function(response) { + copyInfo(response.data, info); + delay.resolve(info); + }); + + return { + get: function() { + return info; + }, + reload: function() { + $http.get(authUrl + '/admin/serverinfo').then(function(response) { + copyInfo(response.data, info); + }); + }, + promise: delay.promise + } +}); + +module.factory('ClientInitialAccess', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/clients-initial-access/:id', { + realm : '@realm', + id : '@id' + }); +}); + +module.factory('ClientProtocolMapper', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/clients/:client/protocol-mappers/models/:id', { + realm : '@realm', + client: '@client', + id : "@id" + }, { + update : { + method : 'PUT' + } + }); +}); + +module.factory('ClientScopeProtocolMapper', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/client-scopes/:clientScope/protocol-mappers/models/:id', { + realm : '@realm', + clientScope: '@clientScope', + id : "@id" + }, { + update : { + method : 'PUT' + } + }); +}); + +module.factory('User', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/users/:userId', { + realm : '@realm', + userId : '@userId' + }, { + update : { + method : 'PUT' + } + }); +}); + +module.service('UserSearchState', function() { + this.isFirstSearch = true; + this.query = { + max : 20, + first : 0 + }; +}); + +module.service('ClientListSearchState', function() { + this.isFirstSearch = true; + this.query = { + max : 20, + first : 0, + search: true + }; +}); + +// Service tracks the last flow selected in Authentication-->Flows tab +module.service('LastFlowSelected', function() { + this.alias = null; +}); + +module.service('RealmRoleRemover', function() { + this.remove = function (role, realm, Dialog, $location, Notifications) { + Dialog.confirmDelete(role.name, 'role', function () { + role.$remove({ + realm: realm.realm, + role: role.id + }, function () { + $location.url("/realms/" + realm.realm + "/roles"); + Notifications.success("The role has been deleted."); + }); + }); + }; +}); + +module.factory('UserSessionStats', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/users/:user/session-stats', { + realm : '@realm', + user : '@user' + }); +}); +module.factory('UserSessions', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/users/:user/sessions', { + realm : '@realm', + user : '@user' + }); +}); +module.factory('UserOfflineSessions', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/users/:user/offline-sessions/:client', { + realm : '@realm', + user : '@user', + client : '@client' + }); +}); + +module.factory('UserSessionLogout', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/sessions/:session', { + realm : '@realm', + session : '@session' + }); +}); + +module.factory('UserLogout', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/users/:user/logout', { + realm : '@realm', + user : '@user' + }); +}); + +module.factory('UserFederatedIdentities', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/users/:user/federated-identity', { + realm : '@realm', + user : '@user' + }); +}); +module.factory('UserFederatedIdentity', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/users/:user/federated-identity/:provider', { + realm : '@realm', + user : '@user', + provider : '@provider' + }); +}); + +module.factory('UserConsents', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/users/:user/consents/:client', { + realm : '@realm', + user : '@user', + client: '@client' + }); +}); + +module.factory('UserImpersonation', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/users/:user/impersonation', { + realm : '@realm', + user : '@user' + }); +}); + +module.factory('UserCredentials', function($resource) { + var credentials = {}; + + credentials.getCredentials = $resource(authUrl + '/admin/realms/:realm/users/:userId/credentials', { + realm : '@realm', + userId : '@userId' + }).query; + + credentials.getConfiguredUserStorageCredentialTypes = $resource(authUrl + '/admin/realms/:realm/users/:userId/configured-user-storage-credential-types', { + realm : '@realm', + userId : '@userId' + }).query; + + credentials.deleteCredential = $resource(authUrl + '/admin/realms/:realm/users/:userId/credentials/:credentialId', { + realm : '@realm', + userId : '@userId', + credentialId : '@credentialId' + }).delete; + + credentials.updateCredentialLabel = $resource(authUrl + '/admin/realms/:realm/users/:userId/credentials/:credentialId/userLabel', { + realm : '@realm', + userId : '@userId', + credentialId : '@credentialId' + }, { + update : { + method : 'PUT', + headers: { + 'Content-Type': 'text/plain;charset=utf-8' + }, + transformRequest: function(credential, getHeaders) { + return credential.userLabel; + } + } + }).update; + + credentials.resetPassword = $resource(authUrl + '/admin/realms/:realm/users/:userId/reset-password', { + realm : '@realm', + userId : '@userId' + }, { + update : { + method : 'PUT' + } + }).update; + + credentials.removeTotp = $resource(authUrl + '/admin/realms/:realm/users/:userId/remove-totp', { + realm : '@realm', + userId : '@userId' + }, { + update : { + method : 'PUT' + } + }).update; + + credentials.disableCredentialTypes = $resource(authUrl + '/admin/realms/:realm/users/:userId/disable-credential-types', { + realm : '@realm', + userId : '@userId' + }, { + update : { + method : 'PUT' + } + }).update; + + credentials.moveCredentialAfter = $resource(authUrl + '/admin/realms/:realm/users/:userId/credentials/:credentialId/moveAfter/:newPreviousCredentialId', { + realm : '@realm', + userId : '@userId', + credentialId : '@credentialId', + newPreviousCredentialId : '@newPreviousCredentialId' + }, { + update : { + method : 'POST' + } + }).update; + + credentials.moveToFirst = $resource(authUrl + '/admin/realms/:realm/users/:userId/credentials/:credentialId/moveToFirst', { + realm : '@realm', + userId : '@userId', + credentialId : '@credentialId' + }, { + update : { + method : 'POST' + } + }).update; + + return credentials; +}); + +module.factory('UserExecuteActionsEmail', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/users/:userId/execute-actions-email', { + realm : '@realm', + userId : '@userId', + lifespan : '@lifespan', + }, { + update : { + method : 'PUT' + } + }); +}); + +module.factory('RealmRoleMapping', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/users/:userId/role-mappings/realm', { + realm : '@realm', + userId : '@userId' + }); +}); + +module.factory('CompositeRealmRoleMapping', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/users/:userId/role-mappings/realm/composite', { + realm : '@realm', + userId : '@userId' + }); +}); + +module.factory('AvailableRealmRoleMapping', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/users/:userId/role-mappings/realm/available', { + realm : '@realm', + userId : '@userId' + }); +}); + + +module.factory('ClientRoleMapping', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/users/:userId/role-mappings/clients/:client', { + realm : '@realm', + userId : '@userId', + client : "@client" + }); +}); + +module.factory('AvailableClientRoleMapping', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/users/:userId/role-mappings/clients/:client/available', { + realm : '@realm', + userId : '@userId', + client : "@client" + }); +}); + +module.factory('CompositeClientRoleMapping', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/users/:userId/role-mappings/clients/:client/composite', { + realm : '@realm', + userId : '@userId', + client : "@client" + }); +}); + +module.factory('ClientRealmScopeMapping', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/clients/:client/scope-mappings/realm', { + realm : '@realm', + client : '@client' + }); +}); + +module.factory('ClientAvailableRealmScopeMapping', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/clients/:client/scope-mappings/realm/available', { + realm : '@realm', + client : '@client' + }); +}); + +module.factory('ClientCompositeRealmScopeMapping', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/clients/:client/scope-mappings/realm/composite', { + realm : '@realm', + client : '@client' + }); +}); + +module.factory('ClientClientScopeMapping', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/clients/:client/scope-mappings/clients/:targetClient', { + realm : '@realm', + client : '@client', + targetClient : '@targetClient' + }); +}); + +module.factory('ClientAvailableClientScopeMapping', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/clients/:client/scope-mappings/clients/:targetClient/available', { + realm : '@realm', + client : '@client', + targetClient : '@targetClient' + }); +}); + +module.factory('ClientCompositeClientScopeMapping', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/clients/:client/scope-mappings/clients/:targetClient/composite', { + realm : '@realm', + client : '@client', + targetClient : '@targetClient' + }); +}); + + + +module.factory('RealmRoles', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/roles', { + realm : '@realm' + }); +}); + +module.factory('RoleRealmComposites', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/roles-by-id/:role/composites/realm', { + realm : '@realm', + role : '@role' + }); +}); + +module.factory('RealmPushRevocation', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/push-revocation', { + realm : '@realm' + }); +}); + +module.factory('RealmClearUserCache', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/clear-user-cache', { + realm : '@realm' + }); +}); + +module.factory('RealmClearRealmCache', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/clear-realm-cache', { + realm : '@realm' + }); +}); + +module.factory('RealmClearKeysCache', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/clear-keys-cache', { + realm : '@realm' + }); +}); + +module.factory('RealmSessionStats', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/session-stats', { + realm : '@realm' + }); +}); + +module.factory('RealmClientSessionStats', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/client-session-stats', { + realm : '@realm' + }); +}); + + +module.factory('RoleClientComposites', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/roles-by-id/:role/composites/clients/:client', { + realm : '@realm', + role : '@role', + client : "@client" + }); +}); + +function clientSelectControl($scope, realm, Client) { + $scope.clientsUiSelect = { + minimumInputLength: 1, + delay: 500, + allowClear: true, + query: function (query) { + var data = {results: []}; + if ('' == query.term.trim()) { + query.callback(data); + return; + } + Client.query({realm: realm, search: true, clientId: query.term.trim(), max: 20}, function(response) { + data.results = response; + query.callback(data); + }); + }, + formatResult: function(object, container, query) { + object.text = object.clientId; + return object.clientId; + } + }; +} + +function roleControl($scope, $route, realm, role, roles, Client, + ClientRole, RoleById, RoleRealmComposites, RoleClientComposites, + $http, $location, Notifications, Dialog, ComponentUtils) { + $scope.$watch(function () { + return $location.path(); + }, function () { + $scope.path = $location.path().substring(1).split("/"); + }); + + $scope.$watch('role', function () { + if (!angular.equals($scope.role, role)) { + $scope.changed = true; + } + }, true); + + $scope.update = function () { + RoleById.update({ + realm: realm.realm, + role: role.id + }, $scope.role, function () { + $scope.changed = false; + role = angular.copy($scope.role); + Notifications.success("Your changes have been saved to the role."); + }); + }; + + $scope.reset = function () { + $scope.role = angular.copy(role); + $scope.changed = false; + }; + + if (!role.id) return; + + $scope.compositeSwitch = role.composite; + $scope.compositeSwitchDisabled = role.composite; + $scope.realmRoles = angular.copy(roles); + $scope.selectedRealmRoles = []; + $scope.selectedRealmMappings = []; + $scope.realmMappings = []; + $scope.clientRoles = []; + $scope.selectedClientRoles = []; + $scope.selectedClientMappings = []; + $scope.clientMappings = []; + + for (var j = 0; j < $scope.realmRoles.length; j++) { + if ($scope.realmRoles[j].id == role.id) { + var realmRole = $scope.realmRoles[j]; + var idx = $scope.realmRoles.indexOf(realmRole); + $scope.realmRoles.splice(idx, 1); + break; + } + } + + + clientSelectControl($scope, $route.current.params.realm, Client); + + $scope.selectedClient = null; + + + $scope.realmMappings = RoleRealmComposites.query({realm : realm.realm, role : role.id}, function(){ + for (var i = 0; i < $scope.realmMappings.length; i++) { + var role = $scope.realmMappings[i]; + for (var j = 0; j < $scope.realmRoles.length; j++) { + var realmRole = $scope.realmRoles[j]; + if (realmRole.id == role.id) { + var idx = $scope.realmRoles.indexOf(realmRole); + if (idx != -1) { + $scope.realmRoles.splice(idx, 1); + break; + } + } + } + } + }); + + $scope.addRealmRole = function() { + $scope.compositeSwitchDisabled=true; + $scope.selectedRealmRolesToAdd = JSON.parse('[' + $scope.selectedRealmRoles + ']'); + $http.post(authUrl + '/admin/realms/' + realm.realm + '/roles-by-id/' + role.id + '/composites', + $scope.selectedRealmRolesToAdd).then(function() { + for (var i = 0; i < $scope.selectedRealmRolesToAdd.length; i++) { + var role = $scope.selectedRealmRolesToAdd[i]; + var idx = ComponentUtils.findIndexById($scope.realmRoles, role.id); + if (idx != -1) { + $scope.realmRoles.splice(idx, 1); + $scope.realmMappings.push(role); + } + } + $scope.selectedRealmRoles = []; + $scope.selectedRealmRolesToAdd = []; + Notifications.success("Role added to composite."); + }); + }; + + $scope.deleteRealmRole = function() { + $scope.compositeSwitchDisabled=true; + $scope.selectedRealmMappingsToRemove = JSON.parse('[' + $scope.selectedRealmMappings + ']'); + $http.delete(authUrl + '/admin/realms/' + realm.realm + '/roles-by-id/' + role.id + '/composites', + {data : $scope.selectedRealmMappingsToRemove, headers : {"content-type" : "application/json"}}).then(function() { + for (var i = 0; i < $scope.selectedRealmMappingsToRemove.length; i++) { + var role = $scope.selectedRealmMappingsToRemove[i]; + var idx = ComponentUtils.findIndexById($scope.realmMappings, role.id); + if (idx != -1) { + $scope.realmMappings.splice(idx, 1); + $scope.realmRoles.push(role); + } + } + $scope.selectedRealmMappings = []; + $scope.selectedRealmMappingsToRemove = []; + Notifications.success("Role removed from composite."); + }); + }; + + $scope.addClientRole = function() { + $scope.compositeSwitchDisabled=true; + $scope.selectedClientRolesToAdd = JSON.parse('[' + $scope.selectedClientRoles + ']'); + $http.post(authUrl + '/admin/realms/' + realm.realm + '/roles-by-id/' + role.id + '/composites', + $scope.selectedClientRolesToAdd).then(function() { + for (var i = 0; i < $scope.selectedClientRolesToAdd.length; i++) { + var role = $scope.selectedClientRolesToAdd[i]; + var idx = ComponentUtils.findIndexById($scope.clientRoles, role.id); + if (idx != -1) { + $scope.clientRoles.splice(idx, 1); + $scope.clientMappings.push(role); + } + } + $scope.selectedClientRoles = []; + $scope.selectedClientRolesToAdd = []; + Notifications.success("Client role added."); + }); + }; + + $scope.deleteClientRole = function() { + $scope.compositeSwitchDisabled=true; + $scope.selectedClientMappingsToRemove = JSON.parse('[' + $scope.selectedClientMappings + ']'); + $http.delete(authUrl + '/admin/realms/' + realm.realm + '/roles-by-id/' + role.id + '/composites', + {data : $scope.selectedClientMappingsToRemove, headers : {"content-type" : "application/json"}}).then(function() { + for (var i = 0; i < $scope.selectedClientMappingsToRemove.length; i++) { + var role = $scope.selectedClientMappingsToRemove[i]; + var idx = ComponentUtils.findIndexById($scope.clientMappings, role.id); + if (idx != -1) { + $scope.clientMappings.splice(idx, 1); + $scope.clientRoles.push(role); + } + } + $scope.selectedClientMappings = []; + $scope.selectedClientMappingsToRemove = []; + Notifications.success("Client role removed."); + }); + }; + + + $scope.changeClient = function(client) { + console.log("selected client: ", client); + if (!client || !client.id) { + $scope.selectedClient = null; + return; + } + $scope.selectedClient = client; + $scope.clientRoles = ClientRole.query({realm : realm.realm, client : client.id}, function() { + $scope.clientMappings = RoleClientComposites.query({realm : realm.realm, role : role.id, client : client.id}, function(){ + for (var i = 0; i < $scope.clientMappings.length; i++) { + var role = $scope.clientMappings[i]; + for (var j = 0; j < $scope.clientRoles.length; j++) { + var realmRole = $scope.clientRoles[j]; + if (realmRole.id == role.id) { + var idx = $scope.clientRoles.indexOf(realmRole); + if (idx != -1) { + $scope.clientRoles.splice(idx, 1); + break; + } + } + } + } + }); + for (var j = 0; j < $scope.clientRoles.length; j++) { + if ($scope.clientRoles[j] == role.id) { + var appRole = $scope.clientRoles[j]; + var idx = $scope.clientRoles.indexof(appRole); + $scope.clientRoles.splice(idx, 1); + break; + } + } + } + ); + }; + + + + +} + + +module.factory('Role', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/roles/:role', { + realm : '@realm', + role : '@role' + }, { + update : { + method : 'PUT' + } + }); +}); + +module.factory('RoleById', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/roles-by-id/:role', { + realm : '@realm', + role : '@role' + }, { + update : { + method : 'PUT' + } + }); +}); + +module.factory('ClientRole', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/clients/:client/roles/:role', { + realm : '@realm', + client : "@client", + role : '@role' + }, { + update : { + method : 'PUT' + } + }); +}); + +module.factory('ClientDefaultClientScopes', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/clients/:client/default-client-scopes/:clientScopeId', { + realm : '@realm', + client : "@client", + clientScopeId : '@clientScopeId' + }, { + update : { + method : 'PUT' + } + }); +}); + +module.factory('ClientOptionalClientScopes', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/clients/:client/optional-client-scopes/:clientScopeId', { + realm : '@realm', + client : "@client", + clientScopeId : '@clientScopeId' + }, { + update : { + method : 'PUT' + } + }); +}); + +module.factory('ClientEvaluateProtocolMappers', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/clients/:client/evaluate-scopes/protocol-mappers?scope=:scopeParam', { + realm : '@realm', + client : "@client", + scopeParam : "@scopeParam" + }); +}); + +module.factory('ClientEvaluateGrantedRoles', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/clients/:client/evaluate-scopes/scope-mappings/:roleContainer/granted?scope=:scopeParam', { + realm : '@realm', + client : "@client", + roleContainer : "@roleContainer", + scopeParam : "@scopeParam" + }); +}); + +module.factory('ClientEvaluateNotGrantedRoles', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/clients/:client/evaluate-scopes/scope-mappings/:roleContainer/not-granted?scope=:scopeParam', { + realm : '@realm', + client : "@client", + roleContainer : "@roleContainer", + scopeParam : "@scopeParam" + }); +}); + +module.factory('ClientEvaluateGenerateExampleToken', function($resource) { + var url = authUrl + '/admin/realms/:realm/clients/:client/evaluate-scopes/generate-example-access-token?scope=:scopeParam&userId=:userId'; + return { + url : function(parameters) + { + return url + .replace(':realm', parameters.realm) + .replace(':client', parameters.client) + .replace(':scopeParam', parameters.scopeParam) + .replace(':userId', parameters.userId); + } + } +}); + +module.factory('ClientProtocolMappersByProtocol', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/clients/:client/protocol-mappers/protocol/:protocol', { + realm : '@realm', + client : "@client", + protocol : "@protocol" + }); +}); + +module.factory('ClientScopeProtocolMappersByProtocol', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/client-scopes/:clientScope/protocol-mappers/protocol/:protocol', { + realm : '@realm', + clientScope : "@clientScope", + protocol : "@protocol" + }); +}); + +module.factory('ClientScopeRealmScopeMapping', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/client-scopes/:clientScope/scope-mappings/realm', { + realm : '@realm', + clientScope : '@clientScope' + }); +}); + +module.factory('ClientScopeAvailableRealmScopeMapping', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/client-scopes/:clientScope/scope-mappings/realm/available', { + realm : '@realm', + clientScope : '@clientScope' + }); +}); + +module.factory('ClientScopeCompositeRealmScopeMapping', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/client-scopes/:clientScope/scope-mappings/realm/composite', { + realm : '@realm', + clientScope : '@clientScope' + }); +}); + +module.factory('ClientScopeClientScopeMapping', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/client-scopes/:clientScope/scope-mappings/clients/:targetClient', { + realm : '@realm', + clientScope : '@clientScope', + targetClient : '@targetClient' + }); +}); + +module.factory('ClientScopeAvailableClientScopeMapping', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/client-scopes/:clientScope/scope-mappings/clients/:targetClient/available', { + realm : '@realm', + clientScope : '@clientScope', + targetClient : '@targetClient' + }); +}); + +module.factory('ClientScopeCompositeClientScopeMapping', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/client-scopes/:clientScope/scope-mappings/clients/:targetClient/composite', { + realm : '@realm', + clientScope : '@clientScope', + targetClient : '@targetClient' + }); +}); + + +module.factory('ClientSessionStats', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/clients/:client/session-stats', { + realm : '@realm', + client : "@client" + }); +}); + +module.factory('ClientSessionStatsWithUsers', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/clients/:client/session-stats?users=true', { + realm : '@realm', + client : "@client" + }); +}); + +module.factory('ClientSessionCount', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/clients/:client/session-count', { + realm : '@realm', + client : "@client" + }); +}); + +module.factory('ClientUserSessions', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/clients/:client/user-sessions', { + realm : '@realm', + client : "@client" + }); +}); + +module.factory('ClientOfflineSessionCount', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/clients/:client/offline-session-count', { + realm : '@realm', + client : "@client" + }); +}); + +module.factory('ClientOfflineSessions', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/clients/:client/offline-sessions', { + realm : '@realm', + client : "@client" + }); +}); + +module.factory('RealmLogoutAll', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/logout-all', { + realm : '@realm' + }); +}); + +module.factory('ClientPushRevocation', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/clients/:client/push-revocation', { + realm : '@realm', + client : "@client" + }); +}); + +module.factory('ClientClusterNode', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/clients/:client/nodes/:node', { + realm : '@realm', + client : "@client" + }); +}); + +module.factory('ClientTestNodesAvailable', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/clients/:client/test-nodes-available', { + realm : '@realm', + client : "@client" + }); +}); + +module.factory('ClientCertificate', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/clients/:client/certificates/:attribute', { + realm : '@realm', + client : "@client", + attribute: "@attribute" + }); +}); + +module.factory('ClientCertificateGenerate', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/clients/:client/certificates/:attribute/generate', { + realm : '@realm', + client : "@client", + attribute: "@attribute" + }, + { + generate : { + method : 'POST' + } + }); +}); + +module.factory('ClientCertificateDownload', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/clients/:client/certificates/:attribute/download', { + realm : '@realm', + client : "@client", + attribute: "@attribute" + }, + { + download : { + method : 'POST', + responseType: 'arraybuffer' + } + }); +}); + +module.factory('Client', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/clients/:client', { + realm : '@realm', + client : '@client' + }, { + update : { + method : 'PUT' + } + }); +}); + +module.factory('ClientScope', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/client-scopes/:clientScope', { + realm : '@realm', + clientScope : '@clientScope' + }, { + update : { + method : 'PUT' + } + }); +}); + +module.factory('RealmDefaultClientScopes', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/default-default-client-scopes/:clientScopeId', { + realm : '@realm', + clientScopeId : '@clientScopeId' + }, { + update : { + method : 'PUT' + } + }); +}); + +module.factory('RealmOptionalClientScopes', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/default-optional-client-scopes/:clientScopeId', { + realm : '@realm', + clientScopeId : '@clientScopeId' + }, { + update : { + method : 'PUT' + } + }); +}); + + +module.factory('ClientDescriptionConverter', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/client-description-converter', { + realm : '@realm' + }); +}); + +/* +module.factory('ClientInstallation', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/clients/:client/installation/providers/:provider', { + realm : '@realm', + client : '@client', + provider : '@provider' + }); +}); +*/ + + + +module.factory('ClientInstallation', function($resource) { + var url = authUrl + '/admin/realms/:realm/clients/:client/installation/providers/:provider'; + return { + url : function(parameters) + { + return url.replace(':realm', parameters.realm).replace(':client', parameters.client).replace(':provider', parameters.provider); + } + } +}); + +module.factory('ClientInstallationJBoss', function($resource) { + var url = authUrl + '/admin/realms/:realm/clients/:client/installation/jboss'; + return { + url : function(parameters) + { + return url.replace(':realm', parameters.realm).replace(':client', parameters.client); + } + } +}); + +module.factory('ClientSecret', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/clients/:client/client-secret', { + realm : '@realm', + client : '@client' + }, { + update : { + method : 'POST' + } + }); +}); + +module.factory('ClientRegistrationAccessToken', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/clients/:client/registration-access-token', { + realm : '@realm', + client : '@client' + }, { + update : { + method : 'POST' + } + }); +}); + +module.factory('ClientOrigins', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/clients/:client/allowed-origins', { + realm : '@realm', + client : '@client' + }, { + update : { + method : 'PUT', + isArray : true + } + }); +}); + +module.factory('ClientServiceAccountUser', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/clients/:client/service-account-user', { + realm : '@realm', + client : '@client' + }); +}); + +module.factory('Current', function(Realm, $route, $rootScope) { + var current = { + realms: {}, + realm: null + }; + + $rootScope.$on('$routeChangeStart', function() { + current.realms = Realm.query(null, function(realms) { + var currentRealm = null; + if ($route.current.params.realm) { + for (var i = 0; i < realms.length; i++) { + if (realms[i].realm == $route.current.params.realm) { + currentRealm = realms[i]; + } + } + } + current.realm = currentRealm; + }); + }); + + return current; +}); + +module.factory('TimeUnit', function() { + var t = {}; + + t.autoUnit = function(time) { + if (!time) { + return 'Hours'; + } + + var unit = 'Seconds'; + if (time % 60 == 0) { + unit = 'Minutes'; + time = time / 60; + } + if (time % 60 == 0) { + unit = 'Hours'; + time = time / 60; + } + if (time % 24 == 0) { + unit = 'Days' + time = time / 24; + } + return unit; + } + + t.toSeconds = function(time, unit) { + switch (unit) { + case 'Seconds': return time; + case 'Minutes': return time * 60; + case 'Hours': return time * 3600; + case 'Days': return time * 86400; + default: throw 'invalid unit ' + unit; + } + } + + t.toUnit = function(time, unit) { + switch (unit) { + case 'Seconds': return time; + case 'Minutes': return Math.ceil(time / 60); + case 'Hours': return Math.ceil(time / 3600); + case 'Days': return Math.ceil(time / 86400); + default: throw 'invalid unit ' + unit; + } + } + + return t; +}); + +module.factory('TimeUnit2', function() { + var t = {}; + + t.asUnit = function(time) { + + var unit = 'Minutes'; + + if (time) { + if (time == -1) { + time = -1; + } else { + if (time < 60) { + time = 60; + } + + if (time % 60 == 0) { + unit = 'Minutes'; + time = time / 60; + } + if (time % 60 == 0) { + unit = 'Hours'; + time = time / 60; + } + if (time % 24 == 0) { + unit = 'Days' + time = time / 24; + } + } + } + + var v = { + unit: unit, + time: time, + toSeconds: function() { + switch (v.unit) { + case 'Minutes': + return v.time * 60; + case 'Hours': + return v.time * 3600; + case 'Days': + return v.time * 86400; + } + } + } + + return v; + } + + return t; +}); + +module.filter('removeSelectedPolicies', function() { + return function(policies, selectedPolicies) { + var result = []; + for(var i in policies) { + var policy = policies[i]; + var policyAvailable = true; + for(var j in selectedPolicies) { + if(policy.id === selectedPolicies[j].id && !policy.multipleSupported) { + policyAvailable = false; + } + } + if(policyAvailable) { + result.push(policy); + } + } + return result; + } +}); + +module.factory('IdentityProvider', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/identity-provider/instances/:alias', { + realm : '@realm', + alias : '@alias' + }, { + update: { + method : 'PUT' + } + }); +}); + +module.factory('IdentityProviderExport', function($resource) { + var url = authUrl + '/admin/realms/:realm/identity-provider/instances/:alias/export'; + return { + url : function(parameters) + { + return url.replace(':realm', parameters.realm).replace(':alias', parameters.alias); + } + } +}); + +module.factory('IdentityProviderFactory', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/identity-provider/providers/:provider_id', { + realm : '@realm', + provider_id : '@provider_id' + }); +}); + +module.factory('IdentityProviderMapperTypes', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/identity-provider/instances/:alias/mapper-types', { + realm : '@realm', + alias : '@alias' + }); +}); + +module.factory('IdentityProviderMappers', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/identity-provider/instances/:alias/mappers', { + realm : '@realm', + alias : '@alias' + }); +}); + +module.factory('IdentityProviderMapper', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/identity-provider/instances/:alias/mappers/:mapperId', { + realm : '@realm', + alias : '@alias', + mapperId: '@mapperId' + }, { + update: { + method : 'PUT' + } + }); +}); + +module.factory('AuthenticationFlowExecutions', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/authentication/flows/:alias/executions', { + realm : '@realm', + alias : '@alias' + }, { + update : { + method : 'PUT' + } + }); +}); + +module.factory('CreateExecutionFlow', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/authentication/flows/:alias/executions/flow', { + realm : '@realm', + alias : '@alias' + }); +}); + +module.factory('CreateExecution', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/authentication/flows/:alias/executions/execution', { + realm : '@realm', + alias : '@alias' + }); +}); + +module.factory('AuthenticationFlows', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/authentication/flows/:flow', { + realm : '@realm', + flow: '@flow' + }); +}); + +module.factory('AuthenticationFormProviders', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/authentication/form-providers', { + realm : '@realm' + }); +}); + +module.factory('AuthenticationFormActionProviders', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/authentication/form-action-providers', { + realm : '@realm' + }); +}); + +module.factory('AuthenticatorProviders', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/authentication/authenticator-providers', { + realm : '@realm' + }); +}); + +module.factory('ClientAuthenticatorProviders', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/authentication/client-authenticator-providers', { + realm : '@realm' + }); +}); + + +module.factory('AuthenticationFlowsCopy', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/authentication/flows/:alias/copy', { + realm : '@realm', + alias : '@alias' + }); +}); +module.factory('AuthenticationConfigDescription', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/authentication/config-description/:provider', { + realm : '@realm', + provider: '@provider' + }); +}); +module.factory('PerClientAuthenticationConfigDescription', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/authentication/per-client-config-description', { + realm : '@realm' + }); +}); + +module.factory('AuthenticationConfig', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/authentication/config/:config', { + realm : '@realm', + config: '@config' + }, { + update: { + method : 'PUT' + } + }); +}); +module.factory('AuthenticationExecutionConfig', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/authentication/executions/:execution/config', { + realm : '@realm', + execution: '@execution' + }); +}); + +module.factory('AuthenticationExecution', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/authentication/executions/:execution', { + realm : '@realm', + execution : '@execution' + }, { + update : { + method : 'PUT' + } + }); +}); + +module.factory('AuthenticationExecutionRaisePriority', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/authentication/executions/:execution/raise-priority', { + realm : '@realm', + execution : '@execution' + }); +}); + +module.factory('AuthenticationExecutionLowerPriority', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/authentication/executions/:execution/lower-priority', { + realm : '@realm', + execution : '@execution' + }); +}); + + + +module.service('SelectRoleDialog', function($modal) { + var dialog = {}; + + var openDialog = function(title, message, btns) { + var controller = function($scope, $modalInstance, title, message, btns) { + $scope.title = title; + $scope.message = message; + $scope.btns = btns; + + $scope.ok = function () { + $modalInstance.close(); + }; + $scope.cancel = function () { + $modalInstance.dismiss('cancel'); + }; + }; + + return $modal.open({ + templateUrl: resourceUrl + '/templates/kc-modal.html', + controller: controller, + resolve: { + title: function() { + return title; + }, + message: function() { + return message; + }, + btns: function() { + return btns; + } + } + }).result; + } + + var escapeHtml = function(str) { + var div = document.createElement('div'); + div.appendChild(document.createTextNode(str)); + return div.innerHTML; + }; + + dialog.confirmDelete = function(name, type, success) { + var title = 'Delete ' + escapeHtml(type.charAt(0).toUpperCase() + type.slice(1)); + var msg = 'Are you sure you want to permanently delete the ' + type + ' ' + name + '?'; + var btns = { + ok: { + label: 'Delete', + cssClass: 'btn btn-danger' + }, + cancel: { + label: 'Cancel', + cssClass: 'btn btn-default' + } + } + + openDialog(title, msg, btns).then(success); + } + + dialog.confirmGenerateKeys = function(name, type, success) { + var title = 'Generate new keys for realm'; + var msg = 'Are you sure you want to permanently generate new keys for ' + name + '?'; + var btns = { + ok: { + label: 'Generate Keys', + cssClass: 'btn btn-danger' + }, + cancel: { + label: 'Cancel', + cssClass: 'btn btn-default' + } + } + + openDialog(title, msg, btns).then(success); + } + + dialog.confirm = function(title, message, success, cancel) { + var btns = { + ok: { + label: title, + cssClass: 'btn btn-danger' + }, + cancel: { + label: 'Cancel', + cssClass: 'btn btn-default' + } + } + + openDialog(title, message, btns).then(success, cancel); + } + + return dialog +}); + +module.factory('Group', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/groups/:groupId', { + realm : '@realm', + userId : '@groupId' + }, { + update : { + method : 'PUT' + } + }); +}); + +module.factory('GroupChildren', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/groups/:groupId/children', { + realm : '@realm', + groupId : '@groupId' + }); +}); + +module.factory('GroupsCount', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/groups/count', { + realm : '@realm' + }, + { + query: { + isArray: false, + method: 'GET', + params: {}, + transformResponse: function (data) { + return angular.fromJson(data) + } + } + }); +}); + +module.factory('Groups', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/groups', { + realm : '@realm' + }) +}); + +module.factory('GroupRealmRoleMapping', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/groups/:groupId/role-mappings/realm', { + realm : '@realm', + groupId : '@groupId' + }); +}); + +module.factory('GroupCompositeRealmRoleMapping', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/groups/:groupId/role-mappings/realm/composite', { + realm : '@realm', + groupId : '@groupId' + }); +}); + +module.factory('GroupAvailableRealmRoleMapping', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/groups/:groupId/role-mappings/realm/available', { + realm : '@realm', + groupId : '@groupId' + }); +}); + + +module.factory('GroupClientRoleMapping', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/groups/:groupId/role-mappings/clients/:client', { + realm : '@realm', + groupId : '@groupId', + client : "@client" + }); +}); + +module.factory('GroupAvailableClientRoleMapping', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/groups/:groupId/role-mappings/clients/:client/available', { + realm : '@realm', + groupId : '@groupId', + client : "@client" + }); +}); + +module.factory('GroupCompositeClientRoleMapping', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/groups/:groupId/role-mappings/clients/:client/composite', { + realm : '@realm', + groupId : '@groupId', + client : "@client" + }); +}); + +module.factory('GroupMembership', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/groups/:groupId/members', { + realm : '@realm', + groupId : '@groupId' + }); +}); + +module.factory('RoleList', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/roles', { + realm : '@realm' + }); +}); + +module.factory('RoleMembership', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/roles/:role/users', { + realm : '@realm', + role : '@role' + }); +}); + +module.factory('ClientRoleList', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/clients/:client/roles', { + realm : '@realm', + client : '@client' + }); +}); + +module.factory('ClientRoleMembership', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/clients/:client/roles/:role/users', { + realm : '@realm', + client : '@client', + role : '@role' + }); +}); + +module.factory('UserGroupMembership', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/users/:userId/groups', { + realm : '@realm', + userId : '@userId' + }); +}); + +module.factory('UserGroupMapping', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/users/:userId/groups/:groupId', { + realm : '@realm', + userId : '@userId', + groupId : '@groupId' + }, { + update : { + method : 'PUT' + } + }); +}); + +module.factory('DefaultGroups', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/default-groups/:groupId', { + realm : '@realm', + groupId : '@groupId' + }, { + update : { + method : 'PUT' + } + }); +}); + +module.factory('SubComponentTypes', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/components/:componentId/sub-component-types', { + realm: '@realm', + componentId: '@componentId' + }); +}); + +module.factory('Components', function($resource, ComponentUtils) { + return $resource(authUrl + '/admin/realms/:realm/components/:componentId', { + realm : '@realm', + componentId : '@componentId' + }, { + update : { + method : 'PUT', + transformRequest: function(componentInstance) { + + if (componentInstance.config) { + ComponentUtils.removeLastEmptyValue(componentInstance.config); + } + + return angular.toJson(componentInstance); + } + }, + save : { + method : 'POST', + transformRequest: function(componentInstance) { + + if (componentInstance.config) { + ComponentUtils.removeLastEmptyValue(componentInstance.config); + } + + return angular.toJson(componentInstance); + } + } + }); +}); + +module.factory('UserStorageOperations', function($resource) { + var object = {} + object.sync = $resource(authUrl + '/admin/realms/:realm/user-storage/:componentId/sync', { + realm : '@realm', + componentId : '@componentId' + }); + object.removeImportedUsers = $resource(authUrl + '/admin/realms/:realm/user-storage/:componentId/remove-imported-users', { + realm : '@realm', + componentId : '@componentId' + }); + object.unlinkUsers = $resource(authUrl + '/admin/realms/:realm/user-storage/:componentId/unlink-users', { + realm : '@realm', + componentId : '@componentId' + }); + object.simpleName = $resource(authUrl + '/admin/realms/:realm/user-storage/:componentId/name', { + realm : '@realm', + componentId : '@componentId' + }); + return object; +}); + + +module.factory('ClientStorageOperations', function($resource) { + var object = {} + object.simpleName = $resource(authUrl + '/admin/realms/:realm/client-storage/:componentId/name', { + realm : '@realm', + componentId : '@componentId' + }); + return object; +}); + + +module.factory('ClientRegistrationPolicyProviders', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/client-registration-policy/providers', { + realm : '@realm', + }); +}); + +module.factory('LDAPMapperSync', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/user-storage/:parentId/mappers/:mapperId/sync', { + realm : '@realm', + componentId : '@componentId', + mapperId: '@mapperId' + }); +}); + + +module.factory('UserGroupMembershipCount', function($resource) { + return $resource(authUrl + '/admin/realms/:realm/users/:userId/groups/count', { + realm : '@realm', + userId : '@userId' + }, + { + query: { + isArray: false, + method: 'GET', + params: {}, + transformResponse: function (data) { + return angular.fromJson(data) + } + } + }); +}); |