diff --git a/themes/src/main/resources/theme/base/admin/resources/js/controllers/realm.js b/themes/src/main/resources/theme/base/admin/resources/js/controllers/realm.js
index eb215e0..e8b0ba1 100755
--- a/themes/src/main/resources/theme/base/admin/resources/js/controllers/realm.js
+++ b/themes/src/main/resources/theme/base/admin/resources/js/controllers/realm.js
@@ -1025,19 +1025,50 @@ module.controller('RealmKeysDetailCtrl', function($scope, Realm, realm, $http, $
$scope.generate = function() {
Dialog.confirmGenerateKeys($scope.realm.realm, 'realm', function() {
Realm.update({ realm: realm.realm, publicKey : 'GENERATE' }, function () {
- Notifications.success('New keys generated for realm.');
- Realm.get({ id : realm.realm }, function(updated) {
- $scope.realm = updated;
- })
+ $route.reload();
+ Notifications.success('New keys generated for realm.');
});
});
};
- $scope.cancel = function() {
+ $scope.privateKeyUpload = function($files){
+ var reader = new FileReader();
+ reader.onload = function(e) {
+ $scope.$apply(function() {
+ $scope.privateKeyUploadContent = e.target.result;
+ });
+ };
+ reader.readAsText($files[0]);
+ $scope.privateKeyUploadName = $files[0].name;
+ };
+
+ $scope.publicKeyUpload = function($files){
+ var reader = new FileReader();
+ reader.onload = function(e) {
+ $scope.$apply(function() {
+ $scope.publicKeyUploadContent = e.target.result;
+ });
+ };
+ reader.readAsText($files[0]);
+ $scope.publicKeyUploadName = $files[0].name;
+ };
+
+ $scope.certificateUpload = function($files){
+ var reader = new FileReader();
+ reader.onload = function(e) {
+ $scope.$apply(function() {
+ $scope.certificateUploadContent = e.target.result;
+ });
+ };
+ reader.readAsText($files[0]);
+ $scope.certificateUploadName = $files[0].name;
+ };
+
+ $scope.clearImport = function() {
$route.reload();
}
- $scope.save = function() {
+ $scope.import = function() {
var title = 'Upload keys for realm';
var msg = 'Are you sure you want to upload keys for ' + $scope.realm.realm + '?';
var btns = {
@@ -1052,11 +1083,20 @@ module.controller('RealmKeysDetailCtrl', function($scope, Realm, realm, $http, $
};
Dialog.open(title, msg, btns, function() {
- Realm.update($scope.realm, function () {
- Notifications.success('Keys uploaded for realm.');
- Realm.get({ id : realm.realm }, function(updated) {
- $scope.realm = updated;
- })
+ var upload = { realm : $scope.realm.realm };
+
+ if ($scope.privateKeyUploadContent && $scope.publicKeyUploadContent) {
+ upload.privateKey = $scope.privateKeyUploadContent;
+ upload.publicKey = $scope.publicKeyUploadContent;
+ }
+
+ if ($scope.certificateUploadContent) {
+ upload.certificate = $scope.certificateUploadContent;
+ }
+
+ Realm.update(upload, function () {
+ $route.reload();
+ Notifications.success('Keys imported for realm.');
});
});
};
diff --git a/themes/src/main/resources/theme/base/admin/resources/partials/realm-keys.html b/themes/src/main/resources/theme/base/admin/resources/partials/realm-keys.html
index 5133f37..7bebc3b 100755
--- a/themes/src/main/resources/theme/base/admin/resources/partials/realm-keys.html
+++ b/themes/src/main/resources/theme/base/admin/resources/partials/realm-keys.html
@@ -7,41 +7,82 @@
<fieldset class="border-top">
<div class="form-group">
- <label class="col-md-2 control-label" for="privateKey">{{:: 'privateKey' | translate}}</label>
-
- <div class="col-md-10">
- <textarea type="password" id="privateKey" name="privateKey" class="form-control" rows="{{!realm.privateKey ? 1 : 8}}" data-ng-model="realm.privateKey"></textarea>
- </div>
- </div>
- <div class="form-group">
<label class="col-md-2 control-label" for="publicKey">{{:: 'publicKey' | translate}}</label>
<div class="col-md-10">
<textarea type="text" id="publicKey" name="publicKey" class="form-control" rows="4"
- kc-select-action="click" data-ng-model="realm.publicKey"></textarea>
+ kc-select-action="click" data-ng-model="realm.publicKey" readonly></textarea>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label" for="certificate">{{:: 'certificate' | translate}}</label>
<div class="col-md-10">
- <textarea type="text" id="certificate" name="certificate" class="form-control" rows="8" kc-select-action="click" data-ng-model="realm.certificate"></textarea>
+ <textarea type="text" id="certificate" name="certificate" class="form-control" rows="8" kc-select-action="click" data-ng-model="realm.certificate" readonly></textarea>
</div>
</div>
</fieldset>
<div class="form-group" data-ng-show="access.manageRealm">
<div class="col-md-10 col-md-offset-2">
- <button class="btn btn-danger" type="button" data-ng-click="generate()" data-ng-disabled="enableUpload">{{:: 'gen-new-keys' | translate}}</button>
+ <button class="btn btn-danger" type="button" data-ng-click="generate()">{{:: 'gen-new-keys' | translate}}</button>
</div>
</div>
- <div class="form-group" data-ng-show="access.manageRealm">
- <div class="col-md-10 col-md-offset-2">
- <button class="btn btn-danger" type="button" data-ng-click="save()" data-ng-disabled="!enableUpload">{{:: 'upload-keys' | translate}}</button>
- <button class="btn btn-default" type="button" data-ng-click="cancel()" data-ng-disabled="!enableUpload">{{:: 'cancel' | translate}}</button>
+
+ <fieldset>
+ <legend>Import keys</legend>
+
+ <div class="form-group">
+ <label class="col-md-2 control-label" for="privateKeyUpload">{{:: 'privateKey' | translate}}</label>
+ <div class="col-md-6">
+ <div class="controls kc-button-input-file" data-ng-show="!privateKeyUploadContent">
+ <label for="privateKeyUpload" class="btn btn-default">{{:: 'select-file' | translate}} <i class="pficon pficon-import"></i></label>
+ <input id="privateKeyUpload" type="file" class="hidden" ng-file-select="privateKeyUpload($files)">
+ </div>
+ <span class="kc-uploaded-file">
+ {{privateKeyUploadName}}
+ </span>
+ </div>
</div>
- </div>
+
+ <div class="form-group">
+ <label class="col-md-2 control-label" for="publicKeyUpload">{{:: 'publicKey' | translate}}</label>
+ <div class="col-md-6">
+ <div class="controls kc-button-input-file" data-ng-show="!publicKeyUploadContent">
+ <label for="publicKeyUpload" class="btn btn-default">{{:: 'select-file' | translate}} <i class="pficon pficon-import"></i></label>
+ <input id="publicKeyUpload" type="file" class="hidden" ng-file-select="publicKeyUpload($files)">
+ </div>
+ <span class="kc-uploaded-file">
+ {{publicKeyUploadName}}
+ </span>
+ </div>
+ </div>
+
+ <div class="form-group">
+ <label class="col-md-2 control-label" for="certificateUpload">{{:: 'certificate' | translate}}</label>
+ <div class="col-md-6">
+ <div class="controls kc-button-input-file" data-ng-show="!certificateUploadContent">
+ <label for="certificateUpload" class="btn btn-default">{{:: 'select-file' | translate}} <i class="pficon pficon-import"></i></label>
+ <input id="certificateUpload" type="file" class="hidden" ng-file-select="certificateUpload($files)">
+ </div>
+ <span class="kc-uploaded-file">
+ {{certificateUploadName}}
+ </span>
+ </div>
+ </div>
+
+ <div class="form-group" data-ng-show="access.manageRealm">
+ <div class="col-md-10 col-md-offset-2">
+ <button class="btn btn-danger" type="button" data-ng-click="import()" data-ng-disabled="!((privateKeyUploadContent && publicKeyUploadContent) || certificateUploadContent)">{{:: 'upload-keys' | translate}}</button>
+ <button class="btn btn-default" type="button" data-ng-click="clearImport()" data-ng-disabled="!privateKeyUploadContent && !publicKeyUploadContent && !certificateUploadContent">{{:: 'clear' | translate}}</button>
+ </div>
+ </div>
+ </fieldset>
</form>
+
+
+
+
</div>