keycloak-aplcache

add mapper category and help text

2/27/2015 8:21:42 PM

Changes

Details

diff --git a/core/src/main/java/org/keycloak/representations/idm/ProtocolMapperTypeRepresentation.java b/core/src/main/java/org/keycloak/representations/idm/ProtocolMapperTypeRepresentation.java
index b208453..78e13bd 100755
--- a/core/src/main/java/org/keycloak/representations/idm/ProtocolMapperTypeRepresentation.java
+++ b/core/src/main/java/org/keycloak/representations/idm/ProtocolMapperTypeRepresentation.java
@@ -9,6 +9,8 @@ import java.util.List;
 public class ProtocolMapperTypeRepresentation {
     protected String id;
     protected String name;
+    protected String category;
+    protected String helpText;
 
     public static class ConfigProperty {
         protected String name;
@@ -58,6 +60,22 @@ public class ProtocolMapperTypeRepresentation {
         this.name = name;
     }
 
+    public String getCategory() {
+        return category;
+    }
+
+    public void setCategory(String category) {
+        this.category = category;
+    }
+
+    public String getHelpText() {
+        return helpText;
+    }
+
+    public void setHelpText(String helpText) {
+        this.helpText = helpText;
+    }
+
     public List<ConfigProperty> getProperties() {
         return properties;
     }
diff --git a/forms/common-themes/src/main/resources/theme/admin/base/resources/js/controllers/applications.js b/forms/common-themes/src/main/resources/theme/admin/base/resources/js/controllers/applications.js
index b412288..f617bc2 100755
--- a/forms/common-themes/src/main/resources/theme/admin/base/resources/js/controllers/applications.js
+++ b/forms/common-themes/src/main/resources/theme/admin/base/resources/js/controllers/applications.js
@@ -1091,11 +1091,14 @@ module.controller('ApplicationProtocolMapperCtrl', function($scope, realm, appli
                                                     $http, $location, Dialog, Notifications) {
     $scope.realm = realm;
     $scope.application = application;
+    if (application.protocol == null) {
+        application.protocol = 'openid-connect';
+    }
 
     var protocolMappers = serverInfo.protocolMapperTypes[application.protocol];
     var mapperTypes = {};
     for (var i = 0; i < protocolMappers.length; i++) {
-        mapperTypes[protocolMappers[i].id] = protocolMappers[i].name;
+        mapperTypes[protocolMappers[i].id] = protocolMappers[i];
     }
     $scope.mapperTypes = mapperTypes;
 
@@ -1135,11 +1138,14 @@ module.controller('AddApplicationProtocolMapperCtrl', function($scope, realm, ap
                                                             $http, $location, Dialog, Notifications) {
     $scope.realm = realm;
     $scope.application = application;
+    if (application.protocol == null) {
+        application.protocol = 'openid-connect';
+    }
 
-    var protocolMapperTypes = serverInfo.protocolMapperTypes[application.protocol];
+    var protocolMappers = serverInfo.protocolMapperTypes[application.protocol];
     var mapperTypes = {};
-    for (var i = 0; i < protocolMapperTypes.length; i++) {
-        mapperTypes[protocolMapperTypes[i].id] = protocolMapperTypes[i].name;
+    for (var i = 0; i < protocolMappers.length; i++) {
+        mapperTypes[protocolMappers[i].id] = protocolMappers[i];
     }
     $scope.mapperTypes = mapperTypes;
 
diff --git a/forms/common-themes/src/main/resources/theme/admin/base/resources/js/controllers/protocols.js b/forms/common-themes/src/main/resources/theme/admin/base/resources/js/controllers/protocols.js
index 9eaa5f9..f6cef81 100755
--- a/forms/common-themes/src/main/resources/theme/admin/base/resources/js/controllers/protocols.js
+++ b/forms/common-themes/src/main/resources/theme/admin/base/resources/js/controllers/protocols.js
@@ -13,10 +13,8 @@ module.controller('ProtocolMapperListCtrl', function($scope, realm, serverInfo, 
     $scope.protocol = protocol;
     var protocolMappers = serverInfo.protocolMapperTypes[protocol];
     var mapperTypes = {};
-    if (protocolMappers) {
-        for (var i = 0; i < protocolMappers.length; i++) {
-            mapperTypes[protocolMappers[i].id] = protocolMappers[i].name;
-        }
+    for (var i = 0; i < protocolMappers.length; i++) {
+        mapperTypes[protocolMappers[i].id] = protocolMappers[i];
     }
     $scope.mapperTypes = mapperTypes;
 
diff --git a/forms/common-themes/src/main/resources/theme/admin/base/resources/partials/application-mappers.html b/forms/common-themes/src/main/resources/theme/admin/base/resources/partials/application-mappers.html
index a06d07c..edaf8cc 100755
--- a/forms/common-themes/src/main/resources/theme/admin/base/resources/partials/application-mappers.html
+++ b/forms/common-themes/src/main/resources/theme/admin/base/resources/partials/application-mappers.html
@@ -11,7 +11,7 @@
         <table class="table table-striped table-bordered">
             <thead>
             <tr>
-                <th class="kc-table-actions" colspan="3">
+                <th class="kc-table-actions" colspan="4">
                     <div class="search-comp clearfix">
                         <input type="text" placeholder="Search..." class="form-control search" data-ng-model="search.name"
                                onkeyup="if(event.keyCode == 13){$(this).next('button').click();}">
@@ -29,6 +29,7 @@
             </tr>
             <tr data-ng-hide="mappers.length == 0">
                 <th>Name</th>
+                <th>Category</th>
                 <th>Type</th>
                 <th>Remove</th>
             </tr>
@@ -36,7 +37,8 @@
             <tbody>
             <tr ng-repeat="mapper in mappers | filter:search">
                 <td><a href="#/realms/{{realm.realm}}/protocols/{{application.protocol}}/mappers/{{mapper.id}}">{{mapper.name}}</a></td>
-                <td>{{mapperTypes[mapper.protocolMapper]}}</td>
+                <td>{{mapperTypes[mapper.protocolMapper].category}}</td>
+                <td>{{mapperTypes[mapper.protocolMapper].name}}</td>
                 <td><input type="checkbox" ng-model="mapper.isChecked"></td>
             </tr>
             <tr data-ng-show="mappers.length == 0">
diff --git a/forms/common-themes/src/main/resources/theme/admin/base/resources/partials/application-mappers-add.html b/forms/common-themes/src/main/resources/theme/admin/base/resources/partials/application-mappers-add.html
index 36d7a6c..5d1520a 100755
--- a/forms/common-themes/src/main/resources/theme/admin/base/resources/partials/application-mappers-add.html
+++ b/forms/common-themes/src/main/resources/theme/admin/base/resources/partials/application-mappers-add.html
@@ -12,7 +12,7 @@
         <table class="table table-striped table-bordered">
             <thead>
             <tr>
-                <th class="kc-table-actions" colspan="3">
+                <th class="kc-table-actions" colspan="4">
                     <div class="search-comp clearfix">
                         <input type="text" placeholder="Search..." class="form-control search" data-ng-model="search.name"
                                onkeyup="if(event.keyCode == 13){$(this).next('button').click();}">
@@ -28,6 +28,7 @@
             </tr>
             <tr data-ng-hide="mappers.length == 0">
                 <th>Name</th>
+                <th>Category</th>
                 <th>Type</th>
                 <th>Add</th>
             </tr>
@@ -35,7 +36,8 @@
             <tbody>
             <tr ng-repeat="mapper in mappers | filter:search">
                 <td><a href="#/realms/{{realm.realm}}/protocols/{{application.protocol}}/mappers/{{mapper.id}}">{{mapper.name}}</a></td>
-                <td>{{mapperTypes[mapper.protocolMapper]}}</td>
+                <td>{{mapperTypes[mapper.protocolMapper].category}}</td>
+                <td>{{mapperTypes[mapper.protocolMapper].name}}</td>
                 <td><input type="checkbox" ng-model="mapper.isChecked"></td>
             </tr>
             <tr data-ng-show="mappers.length == 0">
diff --git a/forms/common-themes/src/main/resources/theme/admin/base/resources/partials/protocol-mapper-detail.html b/forms/common-themes/src/main/resources/theme/admin/base/resources/partials/protocol-mapper-detail.html
index 7b8c8ad..7fb569d 100755
--- a/forms/common-themes/src/main/resources/theme/admin/base/resources/partials/protocol-mapper-detail.html
+++ b/forms/common-themes/src/main/resources/theme/admin/base/resources/partials/protocol-mapper-detail.html
@@ -64,14 +64,14 @@
                             </select>
                         </div>
                     </div>
-                    <span tooltip-placement="right" tooltip="'Confidential' applications require a secret to initiate login protocol.  'Public' clients do not require a secret.  'Bearer-only' applications are web services that never initiate a login." class="fa fa-info-circle"></span>
+                    <span tooltip-placement="right" tooltip="{{mapperType.helpText}}" class="fa fa-info-circle"></span>
                 </div>
                 <div class="form-group clearfix" data-ng-hide="create">
                     <label class="col-sm-2 control-label" for="mapperType">Mapper Type</label>
                     <div class="col-sm-4">
                         <input class="form-control" id="mapperType" type="text" ng-model="mapperType.name" data-ng-readonly="true">
                     </div>
-                    <span tooltip-placement="right" tooltip="Name of the mapper." class="fa fa-info-circle"></span>
+                    <span tooltip-placement="right" tooltip="{{mapperType.helpText}}" class="fa fa-info-circle"></span>
                 </div>
                 <div data-ng-repeat="option in mapperType.properties" class="form-group">
                     <label class="col-sm-2 control-label">{{option.label}} </label>
diff --git a/forms/common-themes/src/main/resources/theme/admin/base/resources/partials/protocol-mapper-list.html b/forms/common-themes/src/main/resources/theme/admin/base/resources/partials/protocol-mapper-list.html
index bc27c66..e3a7970 100755
--- a/forms/common-themes/src/main/resources/theme/admin/base/resources/partials/protocol-mapper-list.html
+++ b/forms/common-themes/src/main/resources/theme/admin/base/resources/partials/protocol-mapper-list.html
@@ -22,13 +22,15 @@
             </tr>
             <tr data-ng-hide="mappers.length == 0">
                 <th>Name</th>
+                <th>Category</th>
                 <th>Type</th>
             </tr>
             </thead>
             <tbody>
             <tr ng-repeat="mapper in mappers | filter:search">
                 <td><a href="#/realms/{{realm.realm}}/protocols/{{protocol}}/mappers/{{mapper.id}}">{{mapper.name}}</a></td>
-                <td>{{mapperTypes[mapper.protocolMapper]}}</td>
+                <td>{{mapperTypes[mapper.protocolMapper].category}}</td>
+                <td>{{mapperTypes[mapper.protocolMapper].name}}</td>
             </tr>
             <tr data-ng-show="mappers.length == 0">
                 <td>No mappers available</td>
diff --git a/services/src/main/java/org/keycloak/protocol/oidc/mappers/AbstractOIDCProtocolMapper.java b/services/src/main/java/org/keycloak/protocol/oidc/mappers/AbstractOIDCProtocolMapper.java
index 6e25a7a..4675f3d 100755
--- a/services/src/main/java/org/keycloak/protocol/oidc/mappers/AbstractOIDCProtocolMapper.java
+++ b/services/src/main/java/org/keycloak/protocol/oidc/mappers/AbstractOIDCProtocolMapper.java
@@ -12,6 +12,8 @@ import org.keycloak.protocol.oidc.OIDCLoginProtocol;
  */
 public abstract class AbstractOIDCProtocolMapper implements ProtocolMapper {
 
+    public static final String TOKEN_MAPPER_CATEGORY = "Token mapper";
+
     @Override
     public String getProtocol() {
         return OIDCLoginProtocol.LOGIN_PROTOCOL;
diff --git a/services/src/main/java/org/keycloak/protocol/oidc/mappers/OIDCAddressMapper.java b/services/src/main/java/org/keycloak/protocol/oidc/mappers/OIDCAddressMapper.java
index ee7e815..9b3adab 100755
--- a/services/src/main/java/org/keycloak/protocol/oidc/mappers/OIDCAddressMapper.java
+++ b/services/src/main/java/org/keycloak/protocol/oidc/mappers/OIDCAddressMapper.java
@@ -39,7 +39,17 @@ public class OIDCAddressMapper extends AbstractOIDCProtocolMapper implements OID
 
     @Override
     public String getDisplayType() {
-        return "Address Mapper";
+        return "User Address";
+    }
+
+    @Override
+    public String getDisplayCategory() {
+        return TOKEN_MAPPER_CATEGORY;
+    }
+
+    @Override
+    public String getHelpText() {
+        return "Maps user address attributes (street, locality, region, postal_code, and country) to the OpenID Connect 'address' claim.";
     }
 
     @Override
diff --git a/services/src/main/java/org/keycloak/protocol/oidc/mappers/OIDCClientSessionNoteMapper.java b/services/src/main/java/org/keycloak/protocol/oidc/mappers/OIDCClientSessionNoteMapper.java
index 1d39d88..84d4a32 100755
--- a/services/src/main/java/org/keycloak/protocol/oidc/mappers/OIDCClientSessionNoteMapper.java
+++ b/services/src/main/java/org/keycloak/protocol/oidc/mappers/OIDCClientSessionNoteMapper.java
@@ -46,7 +46,17 @@ public class OIDCClientSessionNoteMapper extends AbstractOIDCProtocolMapper impl
 
     @Override
     public String getDisplayType() {
-        return "ClientSession Note Mapper";
+        return "ClientSession Note";
+    }
+
+    @Override
+    public String getDisplayCategory() {
+        return TOKEN_MAPPER_CATEGORY;
+    }
+
+    @Override
+    public String getHelpText() {
+        return "Map a temporary note that is attached to the ClientSession to a token claim.";
     }
 
     @Override
diff --git a/services/src/main/java/org/keycloak/protocol/oidc/mappers/OIDCFullNameMapper.java b/services/src/main/java/org/keycloak/protocol/oidc/mappers/OIDCFullNameMapper.java
index b77783a..169494a 100755
--- a/services/src/main/java/org/keycloak/protocol/oidc/mappers/OIDCFullNameMapper.java
+++ b/services/src/main/java/org/keycloak/protocol/oidc/mappers/OIDCFullNameMapper.java
@@ -38,7 +38,17 @@ public class OIDCFullNameMapper extends AbstractOIDCProtocolMapper implements OI
 
     @Override
     public String getDisplayType() {
-        return "Full name Mapper";
+        return "User's full name";
+    }
+
+    @Override
+    public String getDisplayCategory() {
+        return TOKEN_MAPPER_CATEGORY;
+    }
+
+    @Override
+    public String getHelpText() {
+        return "Maps the user's first and last name to the OpenID Connect 'name' claim. Format is <first> + ' ' + <last>";
     }
 
     @Override
diff --git a/services/src/main/java/org/keycloak/protocol/oidc/mappers/OIDCUserAttributeMapper.java b/services/src/main/java/org/keycloak/protocol/oidc/mappers/OIDCUserAttributeMapper.java
index a63a238..ffc742d 100755
--- a/services/src/main/java/org/keycloak/protocol/oidc/mappers/OIDCUserAttributeMapper.java
+++ b/services/src/main/java/org/keycloak/protocol/oidc/mappers/OIDCUserAttributeMapper.java
@@ -52,7 +52,17 @@ public class OIDCUserAttributeMapper extends AbstractOIDCProtocolMapper implemen
 
     @Override
     public String getDisplayType() {
-        return "UserModel Attribute Mapper";
+        return "User Attribute";
+    }
+
+    @Override
+    public String getDisplayCategory() {
+        return TOKEN_MAPPER_CATEGORY;
+    }
+
+    @Override
+    public String getHelpText() {
+        return "Map a custom user attribute to a token claim.";
     }
 
     @Override
diff --git a/services/src/main/java/org/keycloak/protocol/oidc/mappers/OIDCUserModelMapper.java b/services/src/main/java/org/keycloak/protocol/oidc/mappers/OIDCUserModelMapper.java
index 1ae2a65..d5da0fb 100755
--- a/services/src/main/java/org/keycloak/protocol/oidc/mappers/OIDCUserModelMapper.java
+++ b/services/src/main/java/org/keycloak/protocol/oidc/mappers/OIDCUserModelMapper.java
@@ -21,7 +21,7 @@ import java.util.List;
  */
 public class OIDCUserModelMapper extends AbstractOIDCProtocolMapper implements OIDCAccessTokenMapper {
     private static final List<ConfigProperty> configProperties = new ArrayList<ConfigProperty>();
-    public static final String USER_MODEL_PROPERTY = "UserModel Property";
+    public static final String USER_MODEL_PROPERTY = "User Property";
 
     static {
         ConfigProperty property;
@@ -51,7 +51,17 @@ public class OIDCUserModelMapper extends AbstractOIDCProtocolMapper implements O
 
     @Override
     public String getDisplayType() {
-        return "UserModel Property Mapper";
+        return "User Property";
+    }
+
+    @Override
+    public String getDisplayCategory() {
+        return TOKEN_MAPPER_CATEGORY;
+    }
+
+    @Override
+    public String getHelpText() {
+        return "Map a built in user property to a token claim.";
     }
 
     @Override
diff --git a/services/src/main/java/org/keycloak/protocol/oidc/mappers/OIDCUserSessionNoteMapper.java b/services/src/main/java/org/keycloak/protocol/oidc/mappers/OIDCUserSessionNoteMapper.java
index a011adf..b176340 100755
--- a/services/src/main/java/org/keycloak/protocol/oidc/mappers/OIDCUserSessionNoteMapper.java
+++ b/services/src/main/java/org/keycloak/protocol/oidc/mappers/OIDCUserSessionNoteMapper.java
@@ -47,7 +47,17 @@ public class OIDCUserSessionNoteMapper extends AbstractOIDCProtocolMapper implem
 
     @Override
     public String getDisplayType() {
-        return "UserSession Note Mapper";
+        return "UserSession Note";
+    }
+
+    @Override
+    public String getDisplayCategory() {
+        return TOKEN_MAPPER_CATEGORY;
+    }
+
+    @Override
+    public String getHelpText() {
+        return "Map a temporary note that is attached to the UserSession to a token claim.";
     }
 
     @Override
diff --git a/services/src/main/java/org/keycloak/protocol/ProtocolMapper.java b/services/src/main/java/org/keycloak/protocol/ProtocolMapper.java
index c202847..2c3d230 100755
--- a/services/src/main/java/org/keycloak/protocol/ProtocolMapper.java
+++ b/services/src/main/java/org/keycloak/protocol/ProtocolMapper.java
@@ -11,7 +11,9 @@ import java.util.List;
  */
 public interface ProtocolMapper extends Provider, ProviderFactory<ProtocolMapper> {
     String getProtocol();
+    String getDisplayCategory();
     String getDisplayType();
+    String getHelpText();
 
     public static class ConfigProperty {
         protected String name;
diff --git a/services/src/main/java/org/keycloak/services/resources/admin/ServerInfoAdminResource.java b/services/src/main/java/org/keycloak/services/resources/admin/ServerInfoAdminResource.java
index d844721..6871e95 100755
--- a/services/src/main/java/org/keycloak/services/resources/admin/ServerInfoAdminResource.java
+++ b/services/src/main/java/org/keycloak/services/resources/admin/ServerInfoAdminResource.java
@@ -143,6 +143,8 @@ public class ServerInfoAdminResource {
             ProtocolMapperTypeRepresentation rep = new ProtocolMapperTypeRepresentation();
             rep.setId(mapper.getId());
             rep.setName(mapper.getDisplayType());
+            rep.setHelpText(mapper.getHelpText());
+            rep.setCategory(mapper.getDisplayCategory());
             rep.setProperties(new LinkedList<ProtocolMapperTypeRepresentation.ConfigProperty>());
             for (ProtocolMapper.ConfigProperty prop : mapper.getConfigProperties()) {
                 ProtocolMapperTypeRepresentation.ConfigProperty propRep = new ProtocolMapperTypeRepresentation.ConfigProperty();