diff --git a/webadmin/src/js/client.js b/webadmin/src/js/client.js index ff5f5ce22..49a43c61e 100644 --- a/webadmin/src/js/client.js +++ b/webadmin/src/js/client.js @@ -522,8 +522,8 @@ angular.module('Application').service('Client', ['$http', 'md5', 'Notification', }).error(defaultErrorHandler(callback)); }; - Client.prototype.getOAuthClients = function (callback) { - $http.get(client.apiOrigin + '/api/v1/oauth/clients').success(function(data, status) { + Client.prototype.getOAuthClients = function (all, callback) { + $http.get(client.apiOrigin + '/api/v1/oauth/clients' + (all ? '?all' : '')).success(function(data, status) { if (status !== 200 || typeof data !== 'object') return callback(new ClientError(status, data)); callback(null, data.clients); }).error(defaultErrorHandler(callback)); diff --git a/webadmin/src/views/account.js b/webadmin/src/views/account.js index e9f91bf87..7eb2b70ac 100644 --- a/webadmin/src/views/account.js +++ b/webadmin/src/views/account.js @@ -178,28 +178,29 @@ angular.module('Application').controller('AccountController', ['$scope', '$locat }, submit: function () { - $scope.groupAdd.busy = true; - $scope.groupAdd.error = {}; + $scope.clientAdd.busy = true; + $scope.clientAdd.error = {}; - Client.createGroup($scope.groupAdd.name, function (error) { - $scope.groupAdd.busy = false; + var CLIENT_REDIRECT_URI_FALLBACK = Client.apiOrigin; + + Client.createOAuthClient($scope.clientAdd.name, $scope.clientAdd.scope, $scope.clientAdd.redirectURI || CLIENT_REDIRECT_URI_FALLBACK, function (error) { + $scope.clientAdd.busy = false; - if (error && error.statusCode === 409) { - $scope.groupAdd.error.name = 'Name already taken'; - $scope.groupAddForm.name.$setPristine(); - $('#groupAddName').focus(); - return; - } if (error && error.statusCode === 400) { - $scope.groupAdd.error.name = error.message; - $scope.groupAddForm.name.$setPristine(); - $('#groupAddName').focus(); + if (error.message.indexOf('redirectURI must be a valid uri') === 0) { + $scope.clientAdd.error.redirectURI = error.message; + $scope.clientAddForm.redirectURI.$setPristine(); + $('#clientAddRedirectURI').focus(); + } else { + // TODO scope checking + } return; } - if (error) return console.error('Unable to create group.', error.statusCode, error.message); + if (error) return console.error('Unable to create API client.', error.statusCode, error.message); refresh(); - $('#groupAddModal').modal('hide'); + + $('#clientAddModal').modal('hide'); }); } }; @@ -212,12 +213,7 @@ angular.module('Application').controller('AccountController', ['$scope', '$locat client.busy = false; - // update the list - Client.getOAuthClients(function (error, activeClients) { - if (error) return console.error(error); - - $scope.activeClients = activeClients; - }); + refresh(); }); }; @@ -228,15 +224,17 @@ angular.module('Application').controller('AccountController', ['$scope', '$locat }); }; - Client.onReady(function () { + function refresh() { $scope.tokenInUse = Client._token; - Client.getOAuthClients(function (error, activeClients) { + Client.getOAuthClients(!!$scope.user.admin /* admins see all */, function (error, activeClients) { if (error) return console.error(error); $scope.activeClients = activeClients; }); - }); + } + + Client.onReady(refresh); // setup all the dialog focus handling ['passwordChangeModal', 'emailChangeModal', 'displayNameChangeModal', 'clientAddModal'].forEach(function (id) {