From 692e8418d68dc10e17515fa187258a2ed815d8e6 Mon Sep 17 00:00:00 2001 From: Justin Richer Date: Thu, 26 Feb 2015 21:05:01 -0500 Subject: [PATCH] fixed whitelist deep linking, closes #718 --- .../src/main/webapp/resources/js/admin.js | 71 +++++++++---------- .../src/main/webapp/resources/js/whitelist.js | 71 ++++++++++++++++++- .../webapp/resources/template/whitelist.html | 1 - 3 files changed, 103 insertions(+), 40 deletions(-) diff --git a/openid-connect-server-webapp/src/main/webapp/resources/js/admin.js b/openid-connect-server-webapp/src/main/webapp/resources/js/admin.js index 4c9a9447c..2e83f1622 100644 --- a/openid-connect-server-webapp/src/main/webapp/resources/js/admin.js +++ b/openid-connect-server-webapp/src/main/webapp/resources/js/admin.js @@ -729,33 +729,33 @@ var AppRouter = Backbone.Router.extend({ return; } + this.breadCrumbView.collection.reset(); + this.breadCrumbView.collection.add([ + {text:$.t('admin.home'), href:""}, + {text:$.t('whitelist.manage'), href:"manage/#admin/whitelists"}, + {text:$.t('whitelist.new'), href:"manage/#admin/whitelist/new/" + cid} + ]); + this.updateSidebar('admin/whitelists'); + + //// + var whiteList = this.whiteListList.get(id); + whiteList = new WhiteListModel({id: id}); var client = this.clientList.get(cid); - - // if there's no client this is an error - if (client != null) { - - this.breadCrumbView.collection.reset(); - this.breadCrumbView.collection.add([ - {text:$.t('admin.home'), href:""}, - {text:$.t('whitelist.manage'), href:"manage/#admin/whitelists"}, - {text:$.t('whitelist.new'), href:"manage/#admin/whitelist/new/" + cid} - ]); - - var whiteList = new WhiteListModel(); - whiteList.set({ - clientId: client.get('clientId'), - allowedScopes: client.get('scope') - }, { silent: true }); - - this.whiteListFormView = new WhiteListFormView({model: whiteList, client: client, systemScopeList: this.systemScopeList}); - $('#content').html(this.whiteListFormView.render().el); - setPageTitle($.t('whitelist.new')); - } else { - console.log('ERROR: no client found for ' + cid); + if (!client) { + client = new ClientModel({id: cid}); } + var view = new WhiteListFormView({model: whiteList, client: client, systemScopeList: this.systemScopeList}); + + view.load( + function() { + $('#content').html(view.render().el); + view.delegateEvents(); + setPageTitle($.t('whitelist.manage')); + } + ); }, @@ -776,21 +776,20 @@ var AppRouter = Backbone.Router.extend({ this.updateSidebar('admin/whitelists'); var whiteList = this.whiteListList.get(id); - if (whiteList != null) { - var client = app.clientList.getByClientId(whiteList.get('clientId')); - - // if there's no client, this is an error - if (client != null) { - this.whiteListFormView = new WhiteListFormView({model: whiteList, client: client, systemScopeList: this.systemScopeList}); - $('#content').html(this.whiteListFormView.render().el); - setPageTitle($.t('whitelist.edit')); - - } else { - console.log('ERROR: no client found for ' + whiteList.get('clientId')); - } - } else { - console.error('ERROR: no whitelist found for id ' + id); + if (!whiteList) { + whiteList = new WhiteListModel({id: id}); } + + var view = new WhiteListFormView({model: whiteList, clientList: this.clientList, systemScopeList: this.systemScopeList}); + + view.load( + function() { + $('#content').html(view.render().el); + view.delegateEvents(); + setPageTitle($.t('whitelist.manage')); + } + ); + }, approvedSites:function() { diff --git a/openid-connect-server-webapp/src/main/webapp/resources/js/whitelist.js b/openid-connect-server-webapp/src/main/webapp/resources/js/whitelist.js index 125cc4515..a39a72eda 100644 --- a/openid-connect-server-webapp/src/main/webapp/resources/js/whitelist.js +++ b/openid-connect-server-webapp/src/main/webapp/resources/js/whitelist.js @@ -256,6 +256,73 @@ var WhiteListFormView = Backbone.View.extend({ }, + load:function(callback) { + + if (this.options.client) { + // we know what client we're dealing with already + if (this.model.isFetched && + this.options.client.isFetched()) { + callback(); + return; + } + + $('#loadingbox').sheet('show'); + $('#loading').html( + '' + $.t('whitelist.whitelist') + ' ' + + '' + $.t('common.clients') + ' ' + + '' + $.t('common.scopes') + ' ' + ); + + $.when(this.model.fetchIfNeeded({success:function(e) {$('#loading-whitelist').addClass('label-success');}}), + this.options.client.fetchIfNeeded({success:function(e) {$('#loading-clients').addClass('label-success');}}), + this.options.systemScopeList.fetchIfNeeded({success:function(e) {$('#loading-scopes').addClass('label-success');}})) + .done(function() { + $('#loadingbox').sheet('hide'); + callback(); + }); + + } else { + // we need to get the client information from the list + + if (this.model.isFetched && + this.options.clientList.isFetched && + this.options.systemScopeList.isFetched) { + + var client = this.options.clientList.getByClientId(this.model.get('clientId')); + this.options.client = client; + + callback(); + return; + } + + $('#loadingbox').sheet('show'); + $('#loading').html( + '' + $.t('whitelist.whitelist') + ' ' + + '' + $.t('common.clients') + ' ' + + '' + $.t('common.scopes') + ' ' + ); + + var _self = this; + + $.when(this.model.fetchIfNeeded({success:function(e) {$('#loading-whitelist').addClass('label-success');}}), + this.options.clientList.fetchIfNeeded({success:function(e) {$('#loading-clients').addClass('label-success');}}), + this.options.systemScopeList.fetchIfNeeded({success:function(e) {$('#loading-scopes').addClass('label-success');}})) + .done(function() { + + var client = _self.options.clientList.getByClientId(_self.model.get('clientId')); + _self.options.client = client; + + $('#loadingbox').sheet('hide'); + callback(); + }); + + } + + + + + }, + events:{ 'click .btn-save':'saveWhiteList', 'click .btn-cancel':'cancelWhiteList', @@ -274,9 +341,7 @@ var WhiteListFormView = Backbone.View.extend({ // process allowed scopes var allowedScopes = this.scopeCollection.pluck("item"); - if (this.model.get('id') == null) { - this.model.set({clientId:$('#clientId input').val()}); - } + this.model.set(this.options.client.get('clientId')); var valid = this.model.set({ allowedScopes: allowedScopes diff --git a/openid-connect-server-webapp/src/main/webapp/resources/template/whitelist.html b/openid-connect-server-webapp/src/main/webapp/resources/template/whitelist.html index 3f9cc2e78..102578a71 100644 --- a/openid-connect-server-webapp/src/main/webapp/resources/template/whitelist.html +++ b/openid-connect-server-webapp/src/main/webapp/resources/template/whitelist.html @@ -87,7 +87,6 @@
- <%- client.clientName != null ? client.clientName : ( client.clientId.substr(0,8) + '...' ) %>