From 3dccfc6a2415360bd086780750fc817918e137c7 Mon Sep 17 00:00:00 2001 From: zinyando Date: Tue, 5 Jul 2016 16:54:31 +0200 Subject: [PATCH] Fix SSO issue --- app/app/authenticators/documize.js | 22 +++++-- app/app/pods/auth/sso/route.js | 31 ++++------ app/app/pods/folders/folder/controller.js | 54 ++++++++--------- app/app/pods/folders/settings/route.js | 61 ++++++++++---------- app/app/router.js | 12 ++-- app/app/routes/application.js | 70 +++++++++++------------ app/app/services/session.js | 2 +- 7 files changed, 128 insertions(+), 124 deletions(-) diff --git a/app/app/authenticators/documize.js b/app/app/authenticators/documize.js index 7cfe3886..e68591eb 100644 --- a/app/app/authenticators/documize.js +++ b/app/app/authenticators/documize.js @@ -23,14 +23,26 @@ export default Base.extend({ return reject(); }, - authenticate({password, email}) { + authenticate(credentials) { let domain = netUtil.getSubdomain(); - if (!isPresent(password) || !isPresent(email)) { - return Ember.RSVP.reject("invalid"); - } + let encoded; - var encoded = encodingUtil.Base64.encode(`${domain}:${email}:${password}`); + if (typeof credentials === 'object') { + + let { password, email } = credentials; + + if (!isPresent(password) || !isPresent(email)) { + return Ember.RSVP.reject("invalid"); + } + + encoded = encodingUtil.Base64.encode(`${domain}:${email}:${password}`); + } else if (typeof credentials === 'string') { + encoded = credentials; + } else { + return Ember.RSVP.reject("invalid"); + + } var headers = { 'Authorization': 'Basic ' + encoded diff --git a/app/app/pods/auth/sso/route.js b/app/app/pods/auth/sso/route.js index 99757766..83372b42 100644 --- a/app/app/pods/auth/sso/route.js +++ b/app/app/pods/auth/sso/route.js @@ -1,24 +1,15 @@ import Ember from 'ember'; export default Ember.Route.extend({ - beforeModel() { - this.session.clearSession(); + session: Ember.inject.service(), + + model({ token }) { + this.get("session").authenticate('authenticator:documize', token) + .then(() => { + this.transitionTo('folders.folder'); + }, () => { + this.transitionTo('auth.login'); + console.log(">>>>> Documize SSO failure"); + }); }, - - model(params) { - let token = params.token; - - if (is.undefined(token) || is.null(token) || token.length === 0) { - return; - } - - let self = this; - - this.session.sso(decodeURIComponent(token)).then(function() { - self.transitionTo('folders.folder'); - }, function() { - self.transitionTo('auth.login'); - console.log(">>>>> Documize SSO failure"); - }); - }, -}); \ No newline at end of file +}); diff --git a/app/app/pods/folders/folder/controller.js b/app/app/pods/folders/folder/controller.js index 8237cb61..0ac0a7b4 100644 --- a/app/app/pods/folders/folder/controller.js +++ b/app/app/pods/folders/folder/controller.js @@ -3,8 +3,8 @@ import NotifierMixin from '../../../mixins/notifier'; export default Ember.Controller.extend(NotifierMixin, { documentService: Ember.inject.service('document'), - folderService: Ember.inject.service('folder'), - hasSelectedDocuments: false, + folderService: Ember.inject.service('folder'), + hasSelectedDocuments: false, selectedDocuments: [], actions: { @@ -12,56 +12,56 @@ export default Ember.Controller.extend(NotifierMixin, { this.get('target.router').refresh(); }, - onDocumentsChecked(documents) { + onDocumentsChecked(documents) { this.set('selectedDocuments', documents); this.set('hasSelectedDocuments', documents.length > 0); }, onMoveDocument(folder) { let self = this; - let documents = this.get('selectedDocuments'); + let documents = this.get('selectedDocuments'); - documents.forEach(function(documentId) { - self.get('documentService').getDocument(documentId).then(function(doc) { + documents.forEach(function (documentId) { + self.get('documentService').getDocument(documentId).then(function (doc) { doc.set('folderId', folder); - self.get('documentService').save(doc).then(function() { + self.get('documentService').save(doc).then(function () { self.get('target.router').refresh(); }); }); }); - this.set('selectedDocuments', []); - this.set('hasSelectedDocuments', false); - this.send("showNotification", "Moved"); + this.set('selectedDocuments', []); + this.set('hasSelectedDocuments', false); + this.send("showNotification", "Moved"); }, - onDeleteDocument() { - let documents = this.get('selectedDocuments'); - let self = this; + onDeleteDocument() { + let documents = this.get('selectedDocuments'); + let self = this; - documents.forEach(function(document) { - self.get('documentService').deleteDocument(document).then(function() { - self.get('target.router').refresh(); - }); - }); + documents.forEach(function (document) { + self.get('documentService').deleteDocument(document).then(function () { + self.get('target.router').refresh(); + }); + }); - this.set('selectedDocuments', []); - this.set('hasSelectedDocuments', false); - this.send("showNotification", "Deleted"); - }, + this.set('selectedDocuments', []); + this.set('hasSelectedDocuments', false); + this.send("showNotification", "Deleted"); + }, showDocument(folder, document) { this.transitionToRoute('document', folder.get('id'), folder.get('slug'), document.get('id'), document.get('slug')); }, - onFolderAdd(folder) { - let self = this; - this.showNotification("Added"); + onFolderAdd(folder) { + let self = this; + this.showNotification("Added"); - this.get('folderService').add({ name: folder }).then(function(newFolder) { + this.get('folderService').add({ name: folder }).then(function (newFolder) { self.get('folderService').setCurrentFolder(newFolder); self.transitionToRoute('folders.folder', newFolder.get('id'), newFolder.get('slug')); }); } } -}); +}); \ No newline at end of file diff --git a/app/app/pods/folders/settings/route.js b/app/app/pods/folders/settings/route.js index 56a14d6e..013af42f 100644 --- a/app/app/pods/folders/settings/route.js +++ b/app/app/pods/folders/settings/route.js @@ -3,18 +3,18 @@ import models from '../../../utils/model'; import NotifierMixin from '../../../mixins/notifier'; import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin'; -export default Ember.Route.extend(NotifierMixin, AuthenticatedRouteMixin, { +export default Ember.Route.extend(NotifierMixin, { folderService: Ember.inject.service('folder'), userService: Ember.inject.service('user'), folder: {}, - tab: "", + tab: "", - beforeModel: function(transition) { + beforeModel: function (transition) { this.tab = is.not.undefined(transition.queryParams.tab) ? transition.queryParams.tab : "tabGeneral"; }, model(params) { - return this.get('folderService').getFolder(params.folder_id); + return this.get('folderService').getFolder(params.folder_id); }, setupController(controller, model) { @@ -22,17 +22,17 @@ export default Ember.Route.extend(NotifierMixin, AuthenticatedRouteMixin, { this.folder = model; controller.set('model', model); - controller.set('tabGeneral', false); - controller.set('tabShare', false); - controller.set('tabPermissions', false); - controller.set('tabDelete', false); - controller.set(this.get('tab'), true); + controller.set('tabGeneral', false); + controller.set('tabShare', false); + controller.set('tabPermissions', false); + controller.set('tabDelete', false); + controller.set(this.get('tab'), true); - this.get('folderService').getAll().then(function(folders) { + this.get('folderService').getAll().then(function (folders) { controller.set('folders', folders.rejectBy('id', model.get('id'))); }); - this.get('userService').getAll().then(function(users) { + this.get('userService').getAll().then(function (users) { controller.set('users', users); var folderPermissions = []; @@ -48,7 +48,7 @@ export default Ember.Route.extend(NotifierMixin, AuthenticatedRouteMixin, { folderPermissions.pushObject(u); - users.forEach(function(user, index) /* jshint ignore:line */ { + users.forEach(function (user, index) /* jshint ignore:line */ { if (user.get('active')) { var u = models.FolderPermissionModel.create({ userId: user.get('id'), @@ -64,8 +64,8 @@ export default Ember.Route.extend(NotifierMixin, AuthenticatedRouteMixin, { } }); - self.get('folderService').getPermissions(model.id).then(function(permissions) { - permissions.forEach(function(permission, index) /* jshint ignore:line */ { + self.get('folderService').getPermissions(model.id).then(function (permissions) { + permissions.forEach(function (permission, index) /* jshint ignore:line */ { var folderPermission = folderPermissions.findBy('userId', permission.userId); if (is.not.undefined(folderPermission)) { Ember.set(folderPermission, 'orgId', permission.orgId); @@ -82,45 +82,46 @@ export default Ember.Route.extend(NotifierMixin, AuthenticatedRouteMixin, { }, actions: { - onRename: function(folder) { - let self = this; - this.get('folderService').save(folder).then(function() { - self.showNotification("Renamed"); - }); + onRename: function (folder) { + let self = this; + this.get('folderService').save(folder).then(function () { + self.showNotification("Renamed"); + }); }, onRemove(moveId) { let self = this; - this.get('folderService').remove(this.folder.get('id'), moveId).then(function() { /* jshint ignore:line */ + this.get('folderService').remove(this.folder.get('id'), moveId).then(function () { /* jshint ignore:line */ self.showNotification("Deleted"); self.session.clearSessionItem('folder'); - self.get('folderService').getFolder(moveId).then(function(folder) { + self.get('folderService').getFolder(moveId).then(function (folder) { self.get('folderService').setCurrentFolder(folder); self.transitionTo('folders.folder', folder.get('id'), folder.get('slug')); }); }); }, - onShare: function(invitation) { + onShare: function (invitation) { let self = this; - this.get('folderService').share(this.folder.get('id'), invitation).then(function() { - self.showNotification("Shared"); + this.get('folderService').share(this.folder.get('id'), invitation).then(function () { + self.showNotification("Shared"); }); }, - onPermission: function(folder, message, permissions) { + onPermission: function (folder, message, permissions) { var self = this; - var data = permissions.map(function(obj){ return obj.getProperties('orgId', 'folderId' , 'userId', 'canEdit', 'canView'); }); + var data = permissions.map(function (obj) { + return obj.getProperties('orgId', 'folderId', 'userId', 'canEdit', 'canView'); }); var payload = { Message: message, Roles: data }; - this.get('folderService').savePermissions(folder.get('id'), payload).then(function() { - self.showNotification("Saved"); + this.get('folderService').savePermissions(folder.get('id'), payload).then(function () { + self.showNotification("Saved"); }); - var hasEveryone = _.find(data, function(permission) { + var hasEveryone = _.find(data, function (permission) { return permission.userId === "" && (permission.canView || permission.canEdit); }); @@ -134,7 +135,7 @@ export default Ember.Route.extend(NotifierMixin, AuthenticatedRouteMixin, { } } - this.get('folderService').save(folder).then(function() { + this.get('folderService').save(folder).then(function () { // window.location.href = "/folder/" + folder.get('id') + "/" + folder.get('slug'); }); } diff --git a/app/app/router.js b/app/app/router.js index 88bf5a71..d2e6049d 100644 --- a/app/app/router.js +++ b/app/app/router.js @@ -16,10 +16,10 @@ var Router = Ember.Router.extend({ location: config.locationType }); -export default Router.map(function() { +export default Router.map(function () { this.route('folders', { path: '/' - }, function() { + }, function () { this.route('folder', { path: 's/:folder_id/:folder_slug' }); @@ -30,7 +30,7 @@ export default Router.map(function() { this.route('document', { path: 's/:folder_id/:folder_slug/d/:document_id/:document_slug' - }, function() { + }, function () { this.route('edit', { path: 'edit/:page_id' }); @@ -41,7 +41,7 @@ export default Router.map(function() { this.route('customize', { path: 'settings' - }, function() { + }, function () { this.route('general', { path: 'general' }); @@ -59,7 +59,7 @@ export default Router.map(function() { this.route('auth', { path: 'auth' - }, function() { + }, function () { this.route('sso', { path: 'sso/:token' }); @@ -98,5 +98,5 @@ export default Router.map(function() { path: '/*wildcard' }); - this.route('pods', function() {}); + this.route('pods', function () {}); }); diff --git a/app/app/routes/application.js b/app/app/routes/application.js index a59fd75c..03c03270 100644 --- a/app/app/routes/application.js +++ b/app/app/routes/application.js @@ -9,50 +9,50 @@ // // https://documize.com - import Ember from 'ember'; import ApplicationRouteMixin from 'ember-simple-auth/mixins/application-route-mixin'; +import netUtil from '../utils/net'; const { - inject: { service } + inject: { service } } = Ember; export default Ember.Route.extend(ApplicationRouteMixin, { - appMeta: service(), - session: service(), - beforeModel() { - return this.get('appMeta').boot().then( data => { - if ( data.allowAnonymousAccess ) { - return this.get('session').authenticate('authenticator:anonymous', data); - } - return; - }); - }, - - actions: { - willTransition: function( /*transition*/ ) { - $("#zone-sidebar").css('height', 'auto'); - Mousetrap.reset(); + appMeta: service(), + session: service(), + beforeModel() { + return this.get('appMeta').boot().then(data => { + if (data.allowAnonymousAccess) { + return this.get('session').authenticate('authenticator:anonymous', data); + } + return; + }); }, - didTransition() { - Ember.run.schedule("afterRender",this,function() { - $("#zone-sidebar").css('height', $(document).height() - $("#zone-navigation").height() - $("#zone-header").height() - 35); - }); + actions: { + willTransition: function ( /*transition*/ ) { + $("#zone-sidebar").css('height', 'auto'); + Mousetrap.reset(); + }, - return true; - }, + didTransition() { + Ember.run.schedule("afterRender", this, function () { + $("#zone-sidebar").css('height', $(document).height() - $("#zone-navigation").height() - $("#zone-header").height() - 35); + }); - error(error, transition) { // jshint ignore: line - if (error) { - if (netUtil.isAjaxAccessError(error)) { - localStorage.clear(); - return this.transitionTo('auth.login'); + return true; + }, + + error(error, transition) { // jshint ignore: line + if (error) { + if (netUtil.isAjaxAccessError(error)) { + localStorage.clear(); + return this.transitionTo('auth.login'); + } + } + + // Return true to bubble this event to any parent route. + return true; } - } - - // Return true to bubble this event to any parent route. - return true; - } - }, -}); + }, +}); \ No newline at end of file diff --git a/app/app/services/session.js b/app/app/services/session.js index 8bf7d180..5c6e2d04 100644 --- a/app/app/services/session.js +++ b/app/app/services/session.js @@ -32,7 +32,7 @@ export default SimpleAuthSession.extend({ init: function() { this.set('isMac', is.mac()); this.set('isMobile', is.mobile()); - }, + }, user: computed('isAuthenticated', 'session.content.authenticated.user', function(){ if (this.get('isAuthenticated')) {