Merge remote-tracking branch 'upstream/master'
This commit is contained in:
commit
6989589e72
66 files changed
+1622
-450
No files matched your search
+15
@@ -109,6 +109,7 @@ realm-tab-email=Email
|
||||
realm-tab-themes=Themes
|
||||
realm-tab-cache=Cache
|
||||
realm-tab-tokens=Tokens
|
||||
realm-tab-client-initial-access=Initial Access Tokens
|
||||
realm-tab-security-defenses=Security Defenses
|
||||
realm-tab-general=General
|
||||
add-realm=Add Realm
|
||||
@@ -470,3 +471,17 @@ identity-provider-mappers=Identity Provider Mappers
|
||||
create-identity-provider-mapper=Create Identity Provider Mapper
|
||||
add-identity-provider-mapper=Add Identity Provider Mapper
|
||||
client.description.tooltip=Specifies description of the client. For example 'My Client for TimeSheets'. Supports keys for localized values as well. For example\: ${my_client_description}
|
||||
|
||||
expires=Expires
|
||||
expiration=Expiration
|
||||
count=Count
|
||||
remainingCount=Remaining count
|
||||
created=Created
|
||||
back=Back
|
||||
initial-access-tokens=Initial Access Tokens
|
||||
add-initial-access-tokens=Add Initial Access Token
|
||||
initial-access-token=Initial Access Token
|
||||
initial-access.copyPaste.tooltip=Copy/paste the initial access token before navigating away from this page as it's not posible to retrieve later
|
||||
continue=Continue
|
||||
initial-access-token.confirm.title=Copy Initial Access Token
|
||||
initial-access-token.confirm.text=Please copy and paste the initial access token before confirming as it can't be retrieved later
|
||||
@@ -176,6 +176,27 @@ module.config([ '$routeProvider', function($routeProvider) {
|
||||
},
|
||||
controller : 'RealmTokenDetailCtrl'
|
||||
})
|
||||
.when('/realms/:realm/client-initial-access', {
|
||||
templateUrl : resourceUrl + '/partials/client-initial-access.html',
|
||||
resolve : {
|
||||
realm : function(RealmLoader) {
|
||||
return RealmLoader();
|
||||
},
|
||||
clientInitialAccess : function(ClientInitialAccessLoader) {
|
||||
return ClientInitialAccessLoader();
|
||||
}
|
||||
},
|
||||
controller : 'ClientInitialAccessCtrl'
|
||||
})
|
||||
.when('/realms/:realm/client-initial-access/create', {
|
||||
templateUrl : resourceUrl + '/partials/client-initial-access-create.html',
|
||||
resolve : {
|
||||
realm : function(RealmLoader) {
|
||||
return RealmLoader();
|
||||
}
|
||||
},
|
||||
controller : 'ClientInitialAccessCreateCtrl'
|
||||
})
|
||||
.when('/realms/:realm/keys-settings', {
|
||||
templateUrl : resourceUrl + '/partials/realm-keys.html',
|
||||
resolve : {
|
||||
|
||||
+59
@@ -1986,6 +1986,65 @@ module.controller('AuthenticationConfigCreateCtrl', function($scope, realm, flow
|
||||
|
||||
});
|
||||
|
||||
module.controller('ClientInitialAccessCtrl', function($scope, realm, clientInitialAccess, ClientInitialAccess, Dialog, Notifications, $route) {
|
||||
$scope.realm = realm;
|
||||
$scope.clientInitialAccess = clientInitialAccess;
|
||||
|
||||
$scope.remove = function(id) {
|
||||
Dialog.confirmDelete(id, 'initial access token', function() {
|
||||
ClientInitialAccess.remove({ realm: realm.realm, id: id }, function() {
|
||||
Notifications.success("The initial access token was deleted.");
|
||||
$route.reload();
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
module.controller('ClientInitialAccessCreateCtrl', function($scope, realm, ClientInitialAccess, TimeUnit, Dialog, $location, $translate) {
|
||||
$scope.expirationUnit = 'Days';
|
||||
$scope.expiration = TimeUnit.toUnit(0, $scope.expirationUnit);
|
||||
$scope.count = 1;
|
||||
$scope.realm = realm;
|
||||
|
||||
$scope.$watch('expirationUnit', function(to, from) {
|
||||
$scope.expiration = TimeUnit.convert($scope.expiration, from, to);
|
||||
});
|
||||
|
||||
$scope.save = function() {
|
||||
var expiration = TimeUnit.toSeconds($scope.expiration, $scope.expirationUnit);
|
||||
ClientInitialAccess.save({
|
||||
realm: realm.realm
|
||||
}, { expiration: expiration, count: $scope.count}, function (data) {
|
||||
console.debug(data);
|
||||
$scope.id = data.id;
|
||||
$scope.token = data.token;
|
||||
});
|
||||
};
|
||||
|
||||
$scope.cancel = function() {
|
||||
$location.url('/realms/' + realm.realm + '/client-initial-access');
|
||||
};
|
||||
|
||||
$scope.done = function() {
|
||||
var btns = {
|
||||
ok: {
|
||||
label: $translate.instant('continue'),
|
||||
cssClass: 'btn btn-primary'
|
||||
},
|
||||
cancel: {
|
||||
label: $translate.instant('cancel'),
|
||||
cssClass: 'btn btn-default'
|
||||
}
|
||||
}
|
||||
|
||||
var title = $translate.instant('initial-access-token.confirm.title');
|
||||
var message = $translate.instant('initial-access-token.confirm.text');
|
||||
Dialog.open(title, message, btns, function() {
|
||||
$location.url('/realms/' + realm.realm + '/client-initial-access');
|
||||
});
|
||||
};
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -475,6 +475,13 @@ module.factory('GroupLoader', function(Loader, Group, $route, $q) {
|
||||
});
|
||||
});
|
||||
|
||||
module.factory('ClientInitialAccessLoader', function(Loader, ClientInitialAccess, $route) {
|
||||
return Loader.query(ClientInitialAccess, function() {
|
||||
return {
|
||||
realm: $route.current.params.realm
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -102,6 +102,10 @@ module.service('Dialog', function($modal) {
|
||||
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
|
||||
});
|
||||
|
||||
@@ -284,6 +288,13 @@ module.service('ServerInfo', function($resource, $q, $http) {
|
||||
}
|
||||
});
|
||||
|
||||
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', {
|
||||
@@ -1548,11 +1559,4 @@ module.factory('UserGroupMapping', function($resource) {
|
||||
method : 'PUT'
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
});
|
||||
+63
@@ -0,0 +1,63 @@
|
||||
<div class="col-sm-9 col-md-10 col-sm-push-3 col-md-push-2">
|
||||
|
||||
<ol class="breadcrumb">
|
||||
<li><a href="#/realms/{{realm.realm}}/client-initial-access">{{:: 'initial-access-tokens' | translate}}</a></li>
|
||||
<li>{{:: 'add-initial-access-tokens' | translate}}</li>
|
||||
</ol>
|
||||
|
||||
<h1 data-ng-show="create">{{:: 'add-client' | translate}}</h1>
|
||||
|
||||
<form class="form-horizontal" name="createForm" novalidate kc-read-only="!access.manageRealm" data-ng-hide="token">
|
||||
|
||||
<div class="form-group">
|
||||
<label class="col-md-2 control-label" for="expiration">{{:: 'expiration' | translate}}</label>
|
||||
|
||||
<div class="col-md-6 time-selector">
|
||||
<input class="form-control" type="number" required min="0" max="31536000" data-ng-model="expiration" id="expiration"
|
||||
name="expiration"/>
|
||||
<select class="form-control" name="expirationUnit" data-ng-model="expirationUnit">
|
||||
<option data-ng-selected="!expirationUnit" value="Seconds">{{:: 'seconds' | translate}}</option>
|
||||
<option value="Minutes">{{:: 'minutes' | translate}}</option>
|
||||
<option value="Hours">{{:: 'hours' | translate}}</option>
|
||||
<option value="Days">{{:: 'days' | translate}}</option>
|
||||
</select>
|
||||
</div>
|
||||
<kc-tooltip>{{:: 'expiration.tooltip' | translate}}</kc-tooltip>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="col-md-2 control-label" for="count">{{:: 'count' | translate}} </label>
|
||||
<div class="col-sm-6">
|
||||
<input class="form-control" type="text" id="count" name="count" required min="1" max="100" data-ng-model="count">
|
||||
</div>
|
||||
<kc-tooltip>{{:: 'count.tooltip' | translate}}</kc-tooltip>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<div class="col-md-10 col-md-offset-2" data-ng-show="access.manageRealm">
|
||||
<button kc-save>{{:: 'save' | translate}}</button>
|
||||
<button kc-cancel data-ng-click="cancel()">{{:: 'cancel' | translate}}</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<form name="displayForm" data-ng-show="token">
|
||||
<div class="form-group">
|
||||
<label for="initialAccessToken">{{:: 'initial-access-token' | translate}}</label>
|
||||
|
||||
<div>
|
||||
<textarea type="text" id="initialAccessToken" name="initialAccessToken" class="form-control" rows="6" kc-select-action="click">{{token}}</textarea>
|
||||
</div>
|
||||
|
||||
<kc-tooltip>{{:: 'initial-access.copyPaste.tooltip' | translate}}</kc-tooltip>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<div>
|
||||
<button class="btn btn-default" data-ng-click="done()">{{:: 'Back' | translate}}</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<kc-menu></kc-menu>
|
||||
+52
@@ -0,0 +1,52 @@
|
||||
<div class="col-sm-9 col-md-10 col-sm-push-3 col-md-push-2">
|
||||
<kc-tabs-realm></kc-tabs-realm>
|
||||
|
||||
<table class="table table-striped table-bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="kc-table-actions" colspan="6">
|
||||
<div class="form-inline">
|
||||
<div class="form-group">
|
||||
<div class="input-group">
|
||||
<input type="text" placeholder="{{:: 'search.placeholder' | translate}}" data-ng-model="search.id" class="form-control search" onkeyup="if(event.keyCode == 13){$(this).next('I').click();}">
|
||||
<div class="input-group-addon">
|
||||
<i class="fa fa-search" type="submit"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="pull-right" data-ng-show="access.manageRealm">
|
||||
<a id="createClient" class="btn btn-default" href="#/realms/{{realm.realm}}/client-initial-access/create">{{:: 'create' | translate}}</a>
|
||||
</div>
|
||||
</div>
|
||||
</th>
|
||||
</tr>
|
||||
<tr data-ng-hide="clients.length == 0">
|
||||
<th>{{:: 'id' | translate}}</th>
|
||||
<th>{{:: 'created' | translate}}</th>
|
||||
<th>{{:: 'expires' | translate}}</th>
|
||||
<th>{{:: 'count' | translate}}</th>
|
||||
<th>{{:: 'remainingCount' | translate}}</th>
|
||||
<th>{{:: 'actions' | translate}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr ng-repeat="ia in clientInitialAccess | filter:search | orderBy:'timestamp'">
|
||||
<td>{{ia.id}}</td>
|
||||
<td>{{(ia.timestamp * 1000)|date:'shortDate'}} {{(ia.timestamp * 1000)|date:'mediumTime'}}</td>
|
||||
<td><span data-ng-show="ia.expiration > 0">{{((ia.timestamp + ia.expiration) * 1000)|date:'shortDate'}} {{((ia.timestamp + ia.expiration) * 1000)|date:'mediumTime'}}</span></td>
|
||||
<td>{{ia.count}}</td>
|
||||
<td>{{ia.remainingCount}}</td>
|
||||
<td class="kc-action-cell">
|
||||
<button class="btn btn-default btn-block btn-sm" data-ng-click="remove(ia.id)">{{:: 'delete' | translate}}</button>
|
||||
</td>
|
||||
</tr>
|
||||
<tr data-ng-show="(clients | filter:search).length == 0">
|
||||
<td class="text-muted" colspan="3" data-ng-show="search.clientId">{{:: 'no-results' | translate}}</td>
|
||||
<td class="text-muted" colspan="3" data-ng-hide="search.clientId">{{:: 'no-clients-available' | translate}}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<kc-menu></kc-menu>
|
||||
+1
@@ -13,6 +13,7 @@
|
||||
<li ng-class="{active: path[2] == 'theme-settings'}" data-ng-show="access.viewRealm"><a href="#/realms/{{realm.realm}}/theme-settings">{{:: 'realm-tab-themes' | translate}}</a></li>
|
||||
<li ng-class="{active: path[2] == 'cache-settings'}" data-ng-show="access.viewRealm"><a href="#/realms/{{realm.realm}}/cache-settings">{{:: 'realm-tab-cache' | translate}}</a></li>
|
||||
<li ng-class="{active: path[2] == 'token-settings'}" data-ng-show="access.viewRealm"><a href="#/realms/{{realm.realm}}/token-settings">{{:: 'realm-tab-tokens' | translate}}</a></li>
|
||||
<li ng-class="{active: path[2] == 'client-initial-access'}" data-ng-show="access.viewRealm"><a href="#/realms/{{realm.realm}}/client-initial-access">{{:: 'realm-tab-client-initial-access' | translate}}</a></li>
|
||||
<li ng-class="{active: path[2] == 'defense'}" data-ng-show="access.viewRealm"><a href="#/realms/{{realm.realm}}/defense/headers">{{:: 'realm-tab-security-defenses' | translate}}</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
Reference in new issue
Block a user