keycloak-aplcache

Details

diff --git a/admin-ui/src/main/resources/META-INF/resources/admin/js/app.js b/admin-ui/src/main/resources/META-INF/resources/admin/js/app.js
index f618052..37fc3ed 100755
--- a/admin-ui/src/main/resources/META-INF/resources/admin/js/app.js
+++ b/admin-ui/src/main/resources/META-INF/resources/admin/js/app.js
@@ -288,6 +288,9 @@ module.config([ '$routeProvider', function($routeProvider) {
                 realm : function(RealmLoader) {
                     return RealmLoader();
                 },
+                application : function(ApplicationLoader) {
+                    return ApplicationLoader();
+                },
                 installation : function(ApplicationInstallationLoader) {
                     return ApplicationInstallationLoader();
                 }
@@ -650,6 +653,28 @@ module.directive('kcReset', function ($compile, Notifications) {
     }
 });
 
+/*
+*  Used to select the element (invoke $(elem).select()) on specified action list.
+*  Usages kc-select-action="click mouseover"
+*  When used in the textarea element, this will select/highlight the textarea content on specified action (i.e. click).
+*/
+module.directive('kcSelectAction', function ($compile, Notifications) {
+    return {
+        restrict: 'A',
+        compile: function (elem, attrs) {
+
+            var events = attrs.kcSelectAction.split(" ");
+
+            for(var i=0; i < events.length; i++){
+
+                elem.bind(events[i], function(){
+                    elem.select();
+                });
+            }
+        }
+    }
+});
+
 module.filter('remove', function() {
     return function(input, remove, attribute) {
         if (!input || !remove) {
diff --git a/admin-ui/src/main/resources/META-INF/resources/admin/js/controllers/applications.js b/admin-ui/src/main/resources/META-INF/resources/admin/js/controllers/applications.js
index ed435ee..30dde4d 100755
--- a/admin-ui/src/main/resources/META-INF/resources/admin/js/controllers/applications.js
+++ b/admin-ui/src/main/resources/META-INF/resources/admin/js/controllers/applications.js
@@ -179,8 +179,10 @@ module.controller('ApplicationListCtrl', function($scope, realm, applications, A
     });
 });
 
-module.controller('ApplicationInstallationCtrl', function($scope, realm, installation, ApplicationInstallation, $routeParams) {
+module.controller('ApplicationInstallationCtrl', function($scope, realm, installation, application, ApplicationInstallation, $routeParams) {
+    console.log('ApplicationInstallationCtrl');
     $scope.realm = realm;
+    $scope.application = application;
     $scope.installation = installation;
     $scope.download = ApplicationInstallation.url({ realm: $routeParams.realm, application: $routeParams.application });
 });
diff --git a/admin-ui/src/main/resources/META-INF/resources/admin/js/controllers/realm.js b/admin-ui/src/main/resources/META-INF/resources/admin/js/controllers/realm.js
index 6598992..3d053af 100755
--- a/admin-ui/src/main/resources/META-INF/resources/admin/js/controllers/realm.js
+++ b/admin-ui/src/main/resources/META-INF/resources/admin/js/controllers/realm.js
@@ -192,11 +192,11 @@ module.controller('RealmRequiredCredentialsCtrl', function($scope, Realm, realm,
 
     /* Map used in the table when hovering over (i) icon */
     $scope.policyMessages = {
-        length:         "Minimal password length. Default value is 8.",
-        digits:         "Minimal number of digits in password. Default value is 1.",
-        lowerCase:      "Minimal number of lowercase characters in password. Default value is 1.",
-        upperCase:      "Minimal number of uppercase characters in password. Default value is 1.",
-        specialChars:   "Minimal number of special characters in password. Default value is 1."
+        length:         "Minimal password length (integer type). Default value is 8.",
+        digits:         "Minimal number (integer type) of digits in password. Default value is 1.",
+        lowerCase:      "Minimal number (integer type) of lowercase characters in password. Default value is 1.",
+        upperCase:      "Minimal number (integer type) of uppercase characters in password. Default value is 1.",
+        specialChars:   "Minimal number (integer type) of special characters in password. Default value is 1."
     }
 
     // $scope.policy is an object representing passwordPolicy string
diff --git a/admin-ui/src/main/resources/META-INF/resources/admin/partials/realm-keys.html b/admin-ui/src/main/resources/META-INF/resources/admin/partials/realm-keys.html
index d15ab2b..b783bfa 100755
--- a/admin-ui/src/main/resources/META-INF/resources/admin/partials/realm-keys.html
+++ b/admin-ui/src/main/resources/META-INF/resources/admin/partials/realm-keys.html
@@ -27,7 +27,8 @@
                             <label for="publicKey">Public key</label>
 
                             <div class="controls">
-                                <textarea type="text" id="publicKey" name="publicKey" class="xlarge" rows="5">{{realm.publicKey}}</textarea>
+                                <textarea type="text" id="publicKey" name="publicKey" class="xlarge" rows="5"
+                                          kc-select-action="click" readonly>{{realm.publicKey}}</textarea>
                             </div>
                         </div>
                     </fieldset>
diff --git a/admin-ui/src/main/resources/META-INF/resources/admin/partials/realm-social.html b/admin-ui/src/main/resources/META-INF/resources/admin/partials/realm-social.html
index bbbbfd0..dbdeb24 100755
--- a/admin-ui/src/main/resources/META-INF/resources/admin/partials/realm-social.html
+++ b/admin-ui/src/main/resources/META-INF/resources/admin/partials/realm-social.html
@@ -122,4 +122,8 @@
         display: inline-block;
         margin: 5px;
     }
+
+    .social-provider .icon-remove, .social-provider .icon-question {
+        cursor: pointer;
+    }
 </style>
\ No newline at end of file
diff --git a/admin-ui/src/main/resources/META-INF/resources/admin/partials/realm-tokens.html b/admin-ui/src/main/resources/META-INF/resources/admin/partials/realm-tokens.html
index 7a2b92b..91ea2d3 100755
--- a/admin-ui/src/main/resources/META-INF/resources/admin/partials/realm-tokens.html
+++ b/admin-ui/src/main/resources/META-INF/resources/admin/partials/realm-tokens.html
@@ -26,7 +26,7 @@
                         <div class="form-group input-select">
                             <label for="tokenLifespan">Token lifespan</label>
                             <div class="input-group">
-                                <input type="text" data-ng-model="realm.tokenLifespan" id="tokenLifespan" name="tokenLifespan" class="tiny">
+                                <input type="number" data-ng-model="realm.tokenLifespan" id="tokenLifespan" name="tokenLifespan" class="tiny">
                                 <div class="select-rcue">
                                     <select name="tokenLifespanUnit" data-ng-model="realm.tokenLifespanUnit" >
                                         <option data-ng-selected="!realm.tokenLifespanUnit">Seconds</option>
@@ -40,7 +40,7 @@
                         <div class="form-group input-select">
                             <label for="accessCodeLifespan">Access code lifespan</label>
                             <div class="input-group">
-                                <input type="text" data-ng-model="realm.accessCodeLifespan" id="accessCodeLifespan" name="accessCodeLifespan" class="tiny">
+                                <input type="number" data-ng-model="realm.accessCodeLifespan" id="accessCodeLifespan" name="accessCodeLifespan" class="tiny">
                                 <div class="select-rcue">
                                     <select name="accessCodeLifespanUnit" data-ng-model="realm.accessCodeLifespanUnit">
                                         <option data-ng-selected="!realm.accessCodeLifespanUnit">Seconds</option>
@@ -54,7 +54,7 @@
                         <div class="form-group input-select">
                             <label for="accessCodeLifespanUserAction" class="two-lines">Access code user action lifespan</label>
                             <div class="input-group">
-                                <input type="text" data-ng-model="realm.accessCodeLifespanUserAction" id="accessCodeLifespanUserAction" name="accessCodeLifespanUserAction" class="tiny">
+                                <input type="number" data-ng-model="realm.accessCodeLifespanUserAction" id="accessCodeLifespanUserAction" name="accessCodeLifespanUserAction" class="tiny">
                                 <div class="select-rcue">
                                     <select name="accessCodeLifespanUserActionUnit" data-ng-model="realm.accessCodeLifespanUserActionUnit">
                                         <option data-ng-selected="!realm.accessCodeLifespanUserActionUnit">Seconds</option>
diff --git a/admin-ui/src/main/resources/META-INF/resources/admin/partials/user-detail.html b/admin-ui/src/main/resources/META-INF/resources/admin/partials/user-detail.html
index 0735afa..fa1683b 100755
--- a/admin-ui/src/main/resources/META-INF/resources/admin/partials/user-detail.html
+++ b/admin-ui/src/main/resources/META-INF/resources/admin/partials/user-detail.html
@@ -36,8 +36,9 @@
                         <div class="form-group">
                             <label for="username">Username <span class="required" data-ng-show="create">*</span></label>
                             <div class="controls">
+                                <!-- Characters >,<,/,\ are forbidden in username -->
                                 <input type="text" id="username" name="username" data-ng-model="user.username" autofocus
-                                       required data-ng-readonly="!create">
+                                       required ng-pattern="/^[^\<\>\\\/]*$/" data-ng-readonly="!create">
                             </div>
                         </div>
 
@@ -45,7 +46,7 @@
                             <label for="email" class="control-label">Email</label>
 
                             <div class="controls">
-                                <input class="input-small" type="text" name="email" id="email"
+                                <input class="input-small" type="email" name="email" id="email"
                                        data-ng-model="user.email">
                             </div>
                         </div>
diff --git a/admin-ui-styles/src/main/resources/META-INF/resources/admin-ui/css/admin-console.css b/admin-ui-styles/src/main/resources/META-INF/resources/admin-ui/css/admin-console.css
index 6d30cdf..2482800 100644
--- a/admin-ui-styles/src/main/resources/META-INF/resources/admin-ui/css/admin-console.css
+++ b/admin-ui-styles/src/main/resources/META-INF/resources/admin-ui/css/admin-console.css
@@ -5,6 +5,12 @@ body {
   color: #4d5258;
   font-family: "Open Sans", sans-serif;
 }
+.admin-console #content textarea {
+  min-width: 10em;
+  max-width: 74em;
+  min-height: 10em;
+  max-height: 50em;
+}
 /* Feedback */
 .feedback-aligner {
   top: 0.9em;
diff --git a/admin-ui-styles/src/main/resources/META-INF/resources/admin-ui/css/admin-console.less b/admin-ui-styles/src/main/resources/META-INF/resources/admin-ui/css/admin-console.less
index 1f49e26..e1e0993 100644
--- a/admin-ui-styles/src/main/resources/META-INF/resources/admin-ui/css/admin-console.less
+++ b/admin-ui-styles/src/main/resources/META-INF/resources/admin-ui/css/admin-console.less
@@ -15,6 +15,15 @@ body {
     font-family: @open-sans;
 }
 
+.admin-console {
+    #content textarea {
+      min-width: 10em;
+      max-width: 74em;
+      min-height: 10em;
+      max-height: 50em;
+    }
+}
+
 /* Feedback */
 
 .feedback-aligner {