diff --git a/forms/common-themes/src/main/resources/theme/base/admin/messages/admin-messages_ca.properties b/forms/common-themes/src/main/resources/theme/base/admin/messages/admin-messages_ca.properties
old mode 100644
new mode 100755
diff --git a/forms/common-themes/src/main/resources/theme/base/admin/messages/admin-messages_es.properties b/forms/common-themes/src/main/resources/theme/base/admin/messages/admin-messages_es.properties
old mode 100644
new mode 100755
diff --git a/forms/common-themes/src/main/resources/theme/base/admin/resources/js/app.js b/forms/common-themes/src/main/resources/theme/base/admin/resources/js/app.js
index bfbcee9c5bb..826a3daa309 100755
--- a/forms/common-themes/src/main/resources/theme/base/admin/resources/js/app.js
+++ b/forms/common-themes/src/main/resources/theme/base/admin/resources/js/app.js
@@ -784,7 +784,7 @@ module.config([ '$routeProvider', function($routeProvider) {
controller : 'AddBuiltinProtocolMapperCtrl'
})
.when('/realms/:realm/clients/:client/mappers/:id', {
- templateUrl : resourceUrl + '/partials/protocol-mapper-detail.html',
+ templateUrl : resourceUrl + '/partials/client-protocol-mapper-detail.html',
resolve : {
realm : function(RealmLoader) {
return RealmLoader();
@@ -803,7 +803,7 @@ module.config([ '$routeProvider', function($routeProvider) {
controller : 'ClientProtocolMapperCtrl'
})
.when('/create/client/:realm/:client/mappers', {
- templateUrl : resourceUrl + '/partials/protocol-mapper-detail.html',
+ templateUrl : resourceUrl + '/partials/client-protocol-mapper-detail.html',
resolve : {
realm : function(RealmLoader) {
return RealmLoader();
@@ -817,6 +817,70 @@ module.config([ '$routeProvider', function($routeProvider) {
},
controller : 'ClientProtocolMapperCreateCtrl'
})
+ .when('/realms/:realm/client-templates/:template/mappers', {
+ templateUrl : resourceUrl + '/partials/client-template-mappers.html',
+ resolve : {
+ realm : function(RealmLoader) {
+ return RealmLoader();
+ },
+ template : function(ClientTemplateLoader) {
+ return ClientTemplateLoader();
+ },
+ serverInfo : function(ServerInfoLoader) {
+ return ServerInfoLoader();
+ }
+ },
+ controller : 'ClientTemplateProtocolMapperListCtrl'
+ })
+ .when('/realms/:realm/client-templates/:template/add-mappers', {
+ templateUrl : resourceUrl + '/partials/client-template-mappers-add.html',
+ resolve : {
+ realm : function(RealmLoader) {
+ return RealmLoader();
+ },
+ template : function(ClientTemplateLoader) {
+ return ClientTemplateLoader();
+ },
+ serverInfo : function(ServerInfoLoader) {
+ return ServerInfoLoader();
+ }
+ },
+ controller : 'ClientTemplateAddBuiltinProtocolMapperCtrl'
+ })
+ .when('/realms/:realm/client-templates/:template/mappers/:id', {
+ templateUrl : resourceUrl + '/partials/client-template-protocol-mapper-detail.html',
+ resolve : {
+ realm : function(RealmLoader) {
+ return RealmLoader();
+ },
+ template : function(ClientTemplateLoader) {
+ return ClientTemplateLoader();
+ },
+ serverInfo : function(ServerInfoLoader) {
+ return ServerInfoLoader();
+ },
+ mapper : function(ClientTemplateProtocolMapperLoader) {
+ return ClientTemplateProtocolMapperLoader();
+ }
+
+ },
+ controller : 'ClientTemplateProtocolMapperCtrl'
+ })
+ .when('/create/client-template/:realm/:template/mappers', {
+ templateUrl : resourceUrl + '/partials/client-template-protocol-mapper-detail.html',
+ resolve : {
+ realm : function(RealmLoader) {
+ return RealmLoader();
+ },
+ serverInfo : function(ServerInfoLoader) {
+ return ServerInfoLoader();
+ },
+ template : function(ClientTemplateLoader) {
+ return ClientTemplateLoader();
+ }
+ },
+ controller : 'ClientTemplateProtocolMapperCreateCtrl'
+ })
.when('/realms/:realm/clients/:client/sessions', {
templateUrl : resourceUrl + '/partials/client-sessions.html',
resolve : {
@@ -1063,6 +1127,9 @@ module.config([ '$routeProvider', function($routeProvider) {
realm : function(RealmLoader) {
return RealmLoader();
},
+ templates : function(ClientTemplateListLoader) {
+ return ClientTemplateListLoader();
+ },
clients : function(ClientListLoader) {
return ClientListLoader();
},
@@ -1081,6 +1148,9 @@ module.config([ '$routeProvider', function($routeProvider) {
realm : function(RealmLoader) {
return RealmLoader();
},
+ templates : function(ClientTemplateListLoader) {
+ return ClientTemplateListLoader();
+ },
clients : function(ClientListLoader) {
return ClientListLoader();
},
@@ -1093,6 +1163,42 @@ module.config([ '$routeProvider', function($routeProvider) {
},
controller : 'ClientDetailCtrl'
})
+ .when('/create/client-template/:realm', {
+ templateUrl : resourceUrl + '/partials/client-template-detail.html',
+ resolve : {
+ realm : function(RealmLoader) {
+ return RealmLoader();
+ },
+ templates : function(ClientTemplateListLoader) {
+ return ClientTemplateListLoader();
+ },
+ template : function() {
+ return {};
+ },
+ serverInfo : function(ServerInfoLoader) {
+ return ServerInfoLoader();
+ }
+ },
+ controller : 'ClientTemplateDetailCtrl'
+ })
+ .when('/realms/:realm/client-templates/:template', {
+ templateUrl : resourceUrl + '/partials/client-template-detail.html',
+ resolve : {
+ realm : function(RealmLoader) {
+ return RealmLoader();
+ },
+ templates : function(ClientTemplateListLoader) {
+ return ClientTemplateListLoader();
+ },
+ template : function(ClientTemplateLoader) {
+ return ClientTemplateLoader();
+ },
+ serverInfo : function(ServerInfoLoader) {
+ return ServerInfoLoader();
+ }
+ },
+ controller : 'ClientTemplateDetailCtrl'
+ })
.when('/realms/:realm/clients', {
templateUrl : resourceUrl + '/partials/client-list.html',
resolve : {
@@ -1109,6 +1215,22 @@ module.config([ '$routeProvider', function($routeProvider) {
},
controller : 'ClientListCtrl'
})
+ .when('/realms/:realm/client-templates', {
+ templateUrl : resourceUrl + '/partials/client-template-list.html',
+ resolve : {
+ realm : function(RealmLoader) {
+ return RealmLoader();
+ },
+ templates : function(ClientTemplateListLoader) {
+ return ClientTemplateListLoader();
+ },
+ serverInfo : function(ServerInfoLoader) {
+ return ServerInfoLoader();
+ }
+
+ },
+ controller : 'ClientTemplateListCtrl'
+ })
.when('/import/client/:realm', {
templateUrl : resourceUrl + '/partials/client-import.html',
resolve : {
@@ -2025,6 +2147,15 @@ module.directive('kcTabsClient', function () {
}
});
+module.directive('kcTabsClientTemplate', function () {
+ return {
+ scope: true,
+ restrict: 'E',
+ replace: true,
+ templateUrl: resourceUrl + '/templates/kc-tabs-client-template.html'
+ }
+});
+
module.directive('kcNavigationUser', function () {
return {
scope: true,
diff --git a/forms/common-themes/src/main/resources/theme/base/admin/resources/js/controllers/clients.js b/forms/common-themes/src/main/resources/theme/base/admin/resources/js/controllers/clients.js
index 4e81a43035c..420517d0f89 100755
--- a/forms/common-themes/src/main/resources/theme/base/admin/resources/js/controllers/clients.js
+++ b/forms/common-themes/src/main/resources/theme/base/admin/resources/js/controllers/clients.js
@@ -726,7 +726,10 @@ module.controller('ClientInstallationCtrl', function($scope, realm, client, Clie
}
});
-module.controller('ClientDetailCtrl', function($scope, realm, client, $route, serverInfo, Client, ClientDescriptionConverter, $location, $modal, Dialog, Notifications) {
+module.controller('ClientDetailCtrl', function($scope, realm, client, templates, $route, serverInfo, Client, ClientDescriptionConverter, $location, $modal, Dialog, Notifications) {
+
+
+
$scope.accessTypes = [
"confidential",
"public",
@@ -735,6 +738,12 @@ module.controller('ClientDetailCtrl', function($scope, realm, client, $route, se
$scope.protocols = Object.keys(serverInfo.providers['login-protocol'].providers).sort();
+ $scope.templates = [ {name:'NONE'}];
+ for (var i = 0; i < templates.length; i++) {
+ var template = templates[i];
+ $scope.templates.push(template);
+ }
+
$scope.signatureAlgorithms = [
"RSA_SHA1",
"RSA_SHA256",
@@ -1444,22 +1453,32 @@ module.controller('ClientProtocolMapperListCtrl', function($scope, realm, client
});
module.controller('ClientProtocolMapperCtrl', function($scope, realm, serverInfo, client, mapper, ClientProtocolMapper, Notifications, Dialog, $location) {
+ /*
$scope.realm = realm;
$scope.client = client;
$scope.create = false;
- if (client.protocol == null) {
- client.protocol = 'openid-connect';
- }
$scope.protocol = client.protocol;
$scope.mapper = angular.copy(mapper);
$scope.changed = false;
- $scope.boolval = true;
- $scope.boolvalId = 'boolval';
+ */
+
+ if (client.protocol == null) {
+ client.protocol = 'openid-connect';
+ }
+
+ $scope.model = {
+ realm: realm,
+ client: client,
+ create: false,
+ protocol: client.protocol,
+ mapper: angular.copy(mapper),
+ changed: false
+ }
var protocolMappers = serverInfo.protocolMapperTypes[client.protocol];
for (var i = 0; i < protocolMappers.length; i++) {
if (protocolMappers[i].id == mapper.protocolMapper) {
- $scope.mapperType = protocolMappers[i];
+ $scope.model.mapperType = protocolMappers[i];
}
}
$scope.$watch(function() {
@@ -1468,9 +1487,9 @@ module.controller('ClientProtocolMapperCtrl', function($scope, realm, serverInfo
$scope.path = $location.path().substring(1).split("/");
});
- $scope.$watch('mapper', function() {
- if (!angular.equals($scope.mapper, mapper)) {
- $scope.changed = true;
+ $scope.$watch('model.mapper', function() {
+ if (!angular.equals($scope.model.mapper, mapper)) {
+ $scope.model.changed = true;
}
}, true);
@@ -1479,17 +1498,17 @@ module.controller('ClientProtocolMapperCtrl', function($scope, realm, serverInfo
realm : realm.realm,
client: client.id,
id : mapper.id
- }, $scope.mapper, function() {
- $scope.changed = false;
+ }, $scope.model.mapper, function() {
+ $scope.model.changed = false;
mapper = angular.copy($scope.mapper);
- $location.url("/realms/" + realm.realm + '/clients/' + client.id + "/mappers/" + mapper.id);
+ $location.url("/realms/" + realm.realm + '/clients/' + client.id + "/mappers/" + $scope.model.mapper.id);
Notifications.success("Your changes have been saved.");
});
};
$scope.reset = function() {
- $scope.mapper = angular.copy(mapper);
- $scope.changed = false;
+ $scope.model.mapper = angular.copy(mapper);
+ $scope.model.changed = false;
};
$scope.cancel = function() {
@@ -1499,7 +1518,7 @@ module.controller('ClientProtocolMapperCtrl', function($scope, realm, serverInfo
$scope.remove = function() {
Dialog.confirmDelete($scope.mapper.name, 'mapper', function() {
- ClientProtocolMapper.remove({ realm: realm.realm, client: client.id, id : $scope.mapper.id }, function() {
+ ClientProtocolMapper.remove({ realm: realm.realm, client: client.id, id : $scope.model.mapper.id }, function() {
Notifications.success("The mapper has been deleted.");
$location.url("/realms/" + realm.realm + '/clients/' + client.id + "/mappers");
});
@@ -1509,16 +1528,27 @@ module.controller('ClientProtocolMapperCtrl', function($scope, realm, serverInfo
});
module.controller('ClientProtocolMapperCreateCtrl', function($scope, realm, serverInfo, client, ClientProtocolMapper, Notifications, Dialog, $location) {
- $scope.realm = realm;
- $scope.client = client;
- $scope.create = true;
if (client.protocol == null) {
client.protocol = 'openid-connect';
}
var protocol = client.protocol;
+ /*
+ $scope.realm = realm;
+ $scope.client = client;
+ $scope.create = true;
$scope.protocol = protocol;
$scope.mapper = { protocol : client.protocol, config: {}};
$scope.mapperTypes = serverInfo.protocolMapperTypes[protocol];
+ */
+ $scope.model = {
+ realm: realm,
+ client: client,
+ create: true,
+ protocol: client.protocol,
+ mapper: { protocol : client.protocol, config: {}},
+ changed: false,
+ mapperTypes: serverInfo.protocolMapperTypes[protocol]
+ }
$scope.$watch(function() {
return $location.path();
@@ -1527,10 +1557,10 @@ module.controller('ClientProtocolMapperCreateCtrl', function($scope, realm, serv
});
$scope.save = function() {
- $scope.mapper.protocolMapper = $scope.mapperType.id;
+ $scope.model.mapper.protocolMapper = $scope.model.mapperType.id;
ClientProtocolMapper.save({
realm : realm.realm, client: client.id
- }, $scope.mapper, function(data, headers) {
+ }, $scope.model.mapper, function(data, headers) {
var l = headers().location;
var id = l.substring(l.lastIndexOf("/") + 1);
$location.url("/realms/" + realm.realm + '/clients/' + client.id + "/mappers/" + id);
@@ -1546,5 +1576,335 @@ module.controller('ClientProtocolMapperCreateCtrl', function($scope, realm, serv
});
+module.controller('ClientTemplateTabCtrl', function(Dialog, $scope, Current, Notifications, $location) {
+ $scope.removeClientTemplate = function() {
+ Dialog.confirmDelete($scope.template.name, 'client template', function() {
+ $scope.template.$remove({
+ realm : Current.realm.realm,
+ template : $scope.template.id
+ }, function() {
+ $location.url("/realms/" + Current.realm.realm + "/client-templates");
+ Notifications.success("The client template has been deleted.");
+ });
+ });
+ };
+});
+
+
+
+module.controller('ClientTemplateListCtrl', function($scope, realm, templates, ClientTemplate, serverInfo, $route, Dialog, Notifications) {
+ $scope.realm = realm;
+ $scope.templates = templates;
+
+ $scope.removeClientTemplate = function(template) {
+ Dialog.confirmDelete(template.name, 'client template', function() {
+ ClientTemplate.remove({
+ realm : realm.realm,
+ template : template.id
+ }, function() {
+ $route.reload();
+ Notifications.success("The client template been deleted.");
+ });
+ });
+ };
+});
+
+module.controller('ClientTemplateDetailCtrl', function($scope, realm, template, $route, serverInfo, ClientTemplate, $location, $modal, Dialog, Notifications) {
+ $scope.protocols = Object.keys(serverInfo.providers['login-protocol'].providers).sort();
+
+ $scope.realm = realm;
+ $scope.create = !template.name;
+
+ function updateProperties() {
+ if ($scope.template.protocol) {
+ $scope.protocol = $scope.protocols[$scope.protocols.indexOf($scope.template.protocol)];
+ } else {
+ $scope.protocol = $scope.protocols[0];
+ }
+ }
+
+ if (!$scope.create) {
+ $scope.template = angular.copy(template);
+ updateProperties();
+ } else {
+ $scope.template = {
+ };
+ $scope.protocol = $scope.protocols[0];
+ }
+
+
+ $scope.switchChange = function() {
+ $scope.changed = true;
+ }
+
+ $scope.changeProtocol = function() {
+ if ($scope.protocol == "openid-connect") {
+ $scope.template.protocol = "openid-connect";
+ } else if ($scope.protocol == "saml") {
+ $scope.template.protocol = "saml";
+ }
+ };
+
+ $scope.$watch(function() {
+ return $location.path();
+ }, function() {
+ $scope.path = $location.path().substring(1).split("/");
+ });
+
+ function isChanged() {
+ if (!angular.equals($scope.template, template)) {
+ return true;
+ }
+ return false;
+ }
+
+ $scope.$watch('template', function() {
+ $scope.changed = isChanged();
+ }, true);
+
+ $scope.save = function() {
+ $scope.template.protocol = $scope.protocol;
+
+ if ($scope.create) {
+ ClientTemplate.save({
+ realm: realm.realm,
+ template: ''
+ }, $scope.template, function (data, headers) {
+ $scope.changed = false;
+ var l = headers().location;
+ var id = l.substring(l.lastIndexOf("/") + 1);
+ $location.url("/realms/" + realm.realm + "/client-templates/" + id);
+ Notifications.success("The client template has been created.");
+ });
+ } else {
+ ClientTemplate.update({
+ realm : realm.realm,
+ template : template.id
+ }, $scope.template, function() {
+ $scope.changed = false;
+ template = angular.copy($scope.template);
+ $location.url("/realms/" + realm.realm + "/client-templates/" + template.id);
+ Notifications.success("Your changes have been saved to the client template.");
+ });
+ }
+ };
+
+ $scope.reset = function() {
+ $route.reload();
+ };
+
+ $scope.cancel = function() {
+ $location.url("/realms/" + realm.realm + "/client-templates");
+ };
+});
+
+module.controller('ClientTemplateProtocolMapperListCtrl', function($scope, realm, template, serverInfo,
+ ClientTemplateProtocolMappersByProtocol, ClientTemplateProtocolMapper,
+ $route, Dialog, Notifications) {
+ $scope.realm = realm;
+ $scope.template = template;
+ if (template.protocol == null) {
+ template.protocol = 'openid-connect';
+ }
+
+ var protocolMappers = serverInfo.protocolMapperTypes[template.protocol];
+ var mapperTypes = {};
+ for (var i = 0; i < protocolMappers.length; i++) {
+ mapperTypes[protocolMappers[i].id] = protocolMappers[i];
+ }
+ $scope.mapperTypes = mapperTypes;
+
+ $scope.removeMapper = function(mapper) {
+ console.debug(mapper);
+ Dialog.confirmDelete(mapper.name, 'mapper', function() {
+ ClientTemplateProtocolMapper.remove({ realm: realm.realm, template: template.id, id : mapper.id }, function() {
+ Notifications.success("The mapper has been deleted.");
+ $route.reload();
+ });
+ });
+ };
+
+ var updateMappers = function() {
+ $scope.mappers = ClientTemplateProtocolMappersByProtocol.query({realm : realm.realm, template : template.id, protocol : template.protocol});
+ };
+
+ updateMappers();
+});
+
+module.controller('ClientTemplateProtocolMapperCtrl', function($scope, realm, serverInfo, template, mapper, ClientTemplateProtocolMapper, Notifications, Dialog, $location) {
+
+ if (template.protocol == null) {
+ template.protocol = 'openid-connect';
+ }
+
+ $scope.model = {
+ realm: realm,
+ template: template,
+ create: false,
+ protocol: template.protocol,
+ mapper: angular.copy(mapper),
+ changed: false
+ }
+
+ var protocolMappers = serverInfo.protocolMapperTypes[template.protocol];
+ for (var i = 0; i < protocolMappers.length; i++) {
+ if (protocolMappers[i].id == mapper.protocolMapper) {
+ $scope.model.mapperType = protocolMappers[i];
+ }
+ }
+ $scope.$watch(function() {
+ return $location.path();
+ }, function() {
+ $scope.path = $location.path().substring(1).split("/");
+ });
+
+ $scope.$watch('model.mapper', function() {
+ if (!angular.equals($scope.model.mapper, mapper)) {
+ $scope.model.changed = true;
+ }
+ }, true);
+
+ $scope.save = function() {
+ ClientTemplateProtocolMapper.update({
+ realm : realm.realm,
+ template: template.id,
+ id : mapper.id
+ }, $scope.model.mapper, function() {
+ $scope.model.changed = false;
+ mapper = angular.copy($scope.mapper);
+ $location.url("/realms/" + realm.realm + '/client-templates/' + template.id + "/mappers/" + $scope.model.mapper.id);
+ Notifications.success("Your changes have been saved.");
+ });
+ };
+
+ $scope.reset = function() {
+ $scope.model.mapper = angular.copy(mapper);
+ $scope.model.changed = false;
+ };
+
+ $scope.cancel = function() {
+ //$location.url("/realms");
+ window.history.back();
+ };
+
+ $scope.remove = function() {
+ Dialog.confirmDelete($scope.mapper.name, 'mapper', function() {
+ ClientTemplateProtocolMapper.remove({ realm: realm.realm, template: template.id, id : $scope.model.mapper.id }, function() {
+ Notifications.success("The mapper has been deleted.");
+ $location.url("/realms/" + realm.realm + '/client-templates/' + template.id + "/mappers");
+ });
+ });
+ };
+
+});
+
+module.controller('ClientTemplateProtocolMapperCreateCtrl', function($scope, realm, serverInfo, template, ClientTemplateProtocolMapper, Notifications, Dialog, $location) {
+ if (template.protocol == null) {
+ template.protocol = 'openid-connect';
+ }
+ var protocol = template.protocol;
+ $scope.model = {
+ realm: realm,
+ template: template,
+ create: true,
+ protocol: template.protocol,
+ mapper: { protocol : template.protocol, config: {}},
+ changed: false,
+ mapperTypes: serverInfo.protocolMapperTypes[protocol]
+ }
+
+ $scope.$watch(function() {
+ return $location.path();
+ }, function() {
+ $scope.path = $location.path().substring(1).split("/");
+ });
+
+ $scope.save = function() {
+ $scope.model.mapper.protocolMapper = $scope.model.mapperType.id;
+ ClientTemplateProtocolMapper.save({
+ realm : realm.realm, template: template.id
+ }, $scope.model.mapper, function(data, headers) {
+ var l = headers().location;
+ var id = l.substring(l.lastIndexOf("/") + 1);
+ $location.url("/realms/" + realm.realm + '/client-templates/' + template.id + "/mappers/" + id);
+ Notifications.success("Mapper has been created.");
+ });
+ };
+
+ $scope.cancel = function() {
+ //$location.url("/realms");
+ window.history.back();
+ };
+
+
+});
+
+module.controller('ClientTemplateAddBuiltinProtocolMapperCtrl', function($scope, realm, template, serverInfo,
+ ClientTemplateProtocolMappersByProtocol,
+ $http, $location, Dialog, Notifications) {
+ $scope.realm = realm;
+ $scope.template = template;
+ if (template.protocol == null) {
+ template.protocol = 'openid-connect';
+ }
+
+ var protocolMappers = serverInfo.protocolMapperTypes[template.protocol];
+ var mapperTypes = {};
+ for (var i = 0; i < protocolMappers.length; i++) {
+ mapperTypes[protocolMappers[i].id] = protocolMappers[i];
+ }
+ $scope.mapperTypes = mapperTypes;
+
+
+
+
+ var updateMappers = function() {
+ var clientMappers = ClientTemplateProtocolMappersByProtocol.query({realm : realm.realm, template : template.id, protocol : template.protocol}, function() {
+ var builtinMappers = serverInfo.builtinProtocolMappers[template.protocol];
+ for (var i = 0; i < clientMappers.length; i++) {
+ for (var j = 0; j < builtinMappers.length; j++) {
+ if (builtinMappers[j].name == clientMappers[i].name
+ && builtinMappers[j].protocolMapper == clientMappers[i].protocolMapper) {
+ builtinMappers.splice(j, 1);
+ break;
+ }
+ }
+ }
+ $scope.mappers = builtinMappers;
+ for (var i = 0; i < $scope.mappers.length; i++) {
+ $scope.mappers[i].isChecked = false;
+ }
+
+
+ });
+ };
+
+ updateMappers();
+
+ $scope.add = function() {
+ var toAdd = [];
+ for (var i = 0; i < $scope.mappers.length; i++) {
+ if ($scope.mappers[i].isChecked) {
+ delete $scope.mappers[i].isChecked;
+ toAdd.push($scope.mappers[i]);
+ }
+ }
+ $http.post(authUrl + '/admin/realms/' + realm.realm + '/client-templates/' + template.id + '/protocol-mappers/add-models',
+ toAdd).success(function() {
+ Notifications.success("Mappers added");
+ $location.url('/realms/' + realm.realm + '/client-templates/' + template.id + '/mappers');
+ }).error(function() {
+ Notifications.error("Error adding mappers");
+ $location.url('/realms/' + realm.realm + '/client-templates/' + template.id + '/mappers');
+ });
+ };
+
+});
+
+
+
+
+
+
diff --git a/forms/common-themes/src/main/resources/theme/base/admin/resources/js/loaders.js b/forms/common-themes/src/main/resources/theme/base/admin/resources/js/loaders.js
index 61b608fe8eb..94854f30e68 100755
--- a/forms/common-themes/src/main/resources/theme/base/admin/resources/js/loaders.js
+++ b/forms/common-themes/src/main/resources/theme/base/admin/resources/js/loaders.js
@@ -107,6 +107,16 @@ module.factory('ClientProtocolMapperLoader', function(Loader, ClientProtocolMapp
});
});
+module.factory('ClientTemplateProtocolMapperLoader', function(Loader, ClientTemplateProtocolMapper, $route, $q) {
+ return Loader.get(ClientTemplateProtocolMapper, function() {
+ return {
+ realm : $route.current.params.realm,
+ template : $route.current.params.template,
+ id: $route.current.params.id
+ }
+ });
+});
+
module.factory('UserLoader', function(Loader, User, $route, $q) {
return Loader.get(User, function() {
return {
@@ -311,6 +321,23 @@ module.factory('ClientListLoader', function(Loader, Client, $route, $q) {
});
});
+module.factory('ClientTemplateLoader', function(Loader, ClientTemplate, $route, $q) {
+ return Loader.get(ClientTemplate, function() {
+ return {
+ realm : $route.current.params.realm,
+ template : $route.current.params.template
+ }
+ });
+});
+
+module.factory('ClientTemplateListLoader', function(Loader, ClientTemplate, $route, $q) {
+ return Loader.query(ClientTemplate, function() {
+ return {
+ realm : $route.current.params.realm
+ }
+ });
+});
+
module.factory('ClientServiceAccountUserLoader', function(Loader, ClientServiceAccountUser, $route, $q) {
return Loader.get(ClientServiceAccountUser, function() {
return {
diff --git a/forms/common-themes/src/main/resources/theme/base/admin/resources/js/services.js b/forms/common-themes/src/main/resources/theme/base/admin/resources/js/services.js
index 7b94680e79c..7a47a83a0c4 100755
--- a/forms/common-themes/src/main/resources/theme/base/admin/resources/js/services.js
+++ b/forms/common-themes/src/main/resources/theme/base/admin/resources/js/services.js
@@ -309,6 +309,18 @@ module.factory('ClientProtocolMapper', function($resource) {
});
});
+module.factory('ClientTemplateProtocolMapper', function($resource) {
+ return $resource(authUrl + '/admin/realms/:realm/client-templates/:template/protocol-mappers/models/:id', {
+ realm : '@realm',
+ template: '@template',
+ id : "@id"
+ }, {
+ update : {
+ method : 'PUT'
+ }
+ });
+});
+
module.factory('User', function($resource) {
return $resource(authUrl + '/admin/realms/:realm/users/:userId', {
realm : '@realm',
@@ -828,6 +840,14 @@ module.factory('ClientProtocolMappersByProtocol', function($resource) {
});
});
+module.factory('ClientTemplateProtocolMappersByProtocol', function($resource) {
+ return $resource(authUrl + '/admin/realms/:realm/client-templates/:template/protocol-mappers/protocol/:protocol', {
+ realm : '@realm',
+ template : "@template",
+ protocol : "@protocol"
+ });
+});
+
module.factory('ClientSessionStats', function($resource) {
return $resource(authUrl + '/admin/realms/:realm/clients/:client/session-stats', {
realm : '@realm',
@@ -956,6 +976,18 @@ module.factory('Client', function($resource) {
});
});
+module.factory('ClientTemplate', function($resource) {
+ return $resource(authUrl + '/admin/realms/:realm/client-templates/:template', {
+ realm : '@realm',
+ template : '@template'
+ }, {
+ update : {
+ method : 'PUT'
+ }
+ });
+});
+
+
module.factory('ClientDescriptionConverter', function($resource) {
return $resource(authUrl + '/admin/realms/:realm/client-description-converter', {
realm : '@realm'
diff --git a/forms/common-themes/src/main/resources/theme/base/admin/resources/partials/client-detail.html b/forms/common-themes/src/main/resources/theme/base/admin/resources/partials/client-detail.html
index 5b81a0167b0..6a2bd481df0 100755
--- a/forms/common-themes/src/main/resources/theme/base/admin/resources/partials/client-detail.html
+++ b/forms/common-themes/src/main/resources/theme/base/admin/resources/partials/client-detail.html
@@ -72,6 +72,18 @@
|
+
+
+
+
+
+
+
+
+
+
+
+
+ |
+ |||||
|---|---|---|---|---|---|
| {{:: 'name' | translate}} | +{{:: 'actions' | translate}} | +||||
| {{template.name}} | ++ + | ++ + | +|||
| {{:: 'no-results' | translate}} | +{{:: 'no-clients-available' | translate}} | +||||
|
+
+
+
+
+
+
+
+
+
+
+ |
+ |||
|---|---|---|---|
| {{:: 'name' | translate}} | +{{:: 'category' | translate}} | +{{:: 'type' | translate}} | +{{:: 'add' | translate}} | +
| {{mapper.name}} | +{{mapperTypes[mapper.protocolMapper].category}} | +{{mapperTypes[mapper.protocolMapper].name}} | ++ |
| {{:: 'no-mappers-available' | translate}} | +|||
|
+
+
+
+
+
+
+
+
+
+
+
+
+ |
+ |||||
|---|---|---|---|---|---|
| {{:: 'name' | translate}} | +{{:: 'category' | translate}} | +{{:: 'type' | translate}} | +{{:: 'actions' | translate}} | +||
| {{mapper.name}} | +{{mapperTypes[mapper.protocolMapper].category}} | +{{mapperTypes[mapper.protocolMapper].name}} | ++ + | ++ + | +|
| {{:: 'no-mappers-available' | translate}} | +|||||