From 1e22c7cbe73c611ecd82dd7d7ff8b0a4be9d8344 Mon Sep 17 00:00:00 2001 From: zinyando Date: Tue, 28 Jun 2016 23:09:59 +0200 Subject: [PATCH] WIP fix session.get property issues --- app/app/authenticators/documize.js | 10 +++- app/app/pods/folders/route.js | 3 +- app/app/routes/application.js | 84 ++++++++++++------------------ app/app/services/app-meta.js | 7 +-- app/app/services/session.js | 38 +++++--------- app/config/environment.js | 3 +- 6 files changed, 63 insertions(+), 82 deletions(-) diff --git a/app/app/authenticators/documize.js b/app/app/authenticators/documize.js index 1039bb6c..082914e7 100644 --- a/app/app/authenticators/documize.js +++ b/app/app/authenticators/documize.js @@ -5,7 +5,8 @@ import netUtil from '../utils/net'; import models from '../utils/model'; const { - isPresent + isPresent, + RSVP: { resolve, reject } } = Ember; export default Base.extend({ @@ -13,6 +14,13 @@ export default Base.extend({ ajax: Ember.inject.service(), + restore(data) { + if (data) { + return resolve(data) + } + return reject(); + }, + authenticate({password, email}) { let domain = netUtil.getSubdomain(); diff --git a/app/app/pods/folders/route.js b/app/app/pods/folders/route.js index 380ba8d3..cd49151f 100644 --- a/app/app/pods/folders/route.js +++ b/app/app/pods/folders/route.js @@ -1,6 +1,7 @@ import Ember from 'ember'; +import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin'; -export default Ember.Route.extend({ +export default Ember.Route.extend(AuthenticatedRouteMixin, { folderService: Ember.inject.service('folder'), folder: {}, diff --git a/app/app/routes/application.js b/app/app/routes/application.js index 82d778f5..40d173cc 100644 --- a/app/app/routes/application.js +++ b/app/app/routes/application.js @@ -9,66 +9,50 @@ // // https://documize.com + import Ember from 'ember'; -import netUtil from '../utils/net'; import ApplicationRouteMixin from 'ember-simple-auth/mixins/application-route-mixin'; const { - inject: { service } + inject: { service } } = Ember; export default Ember.Route.extend(ApplicationRouteMixin, { - userService: service('user'), - session: service('session'), - appMeta: service(), - - transitioning: false, - - beforeModel: function(transition) { - let self = this; - let session = this.get('session'); - let appMeta = this.get('appMeta'); - - // Session ready? - return this.get('appMeta').boot().then(function() { - // Need to authenticate? - if (!appMeta.get("allowAnonymousAccess") && !session.get("isAuthenticated") && - is.not.startWith(transition.targetName, 'auth.')) { - if (!self.transitioning) { - session.set('previousTransition', transition); - self.set('transitioning', true); - } - - transition.abort(); - self.transitionTo('auth.login'); - } - }); + 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(); }, - actions: { - willTransition: function( /*transition*/ ) { - $("#zone-sidebar").css('height', 'auto'); - Mousetrap.reset(); - }, + didTransition() { + Ember.run.schedule("afterRender",this,function() { + $("#zone-sidebar").css('height', $(document).height() - $("#zone-navigation").height() - $("#zone-header").height() - 35); + }); - didTransition() { - Ember.run.schedule("afterRender",this,function() { - $("#zone-sidebar").css('height', $(document).height() - $("#zone-navigation").height() - $("#zone-header").height() - 35); - }); + return true; + }, - 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; + 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; + } + }, }); diff --git a/app/app/services/app-meta.js b/app/app/services/app-meta.js index ca0f64f5..823ba906 100644 --- a/app/app/services/app-meta.js +++ b/app/app/services/app-meta.js @@ -15,7 +15,7 @@ export default Ember.Service.extend({ title: '', version: '', message: '', - allowAnonymousAccess: null, + allowAnonymousAccess: false, boot() { let dbhash; @@ -33,8 +33,9 @@ export default Ember.Service.extend({ } return this.get('ajax').request('public/meta') - .then((response) => { + .then((response) => { this.setProperties(response); - }); + return response; + }); } }); diff --git a/app/app/services/session.js b/app/app/services/session.js index 05052cdb..56603975 100644 --- a/app/app/services/session.js +++ b/app/app/services/session.js @@ -17,7 +17,8 @@ import SimpleAuthSession from 'ember-simple-auth/services/session'; const { inject: { service }, - computed: { oneWay } + computed: { oneWay, or }, + computed } = Ember; export default SimpleAuthSession.extend({ @@ -25,34 +26,19 @@ export default SimpleAuthSession.extend({ appMeta: service(), authenticated: oneWay('isAuthenticated'), - user: oneWay('session.content.authenticated.user'), + isAdmin: oneWay('user.admin'), + isEditor: or('user.admin', 'user.editor'), + + user: computed('session.content.authenticated.user', function(){ + let user = this.get('session.content.authenticated.user'); + if (user) { + return models.UserModel.create(user); + } + }), + folderPermissions: null, currentFolder: null, - authenticate() { - return this._super(...arguments) - .then(function({token, user}){ - return { - token, - user: models.User.create(user) - }; - }); - }, - - isAdmin: function() { - if (this.authenticated && is.not.null(this.user) && this.user.id !== "") { - return this.user.admin; - } - return false; - }.property('user'), - - isEditor: function() { - if (this.authenticated && is.not.null(this.user) && this.user.id !== "") { - return this.user.editor || this.user.admin; - } - return false; - }.property('user'), - clearSession: function() { // TODO: clear session properly with ESA localStorage.clear(); diff --git a/app/config/environment.js b/app/config/environment.js index 2d90e9e9..67d740bc 100644 --- a/app/config/environment.js +++ b/app/config/environment.js @@ -31,7 +31,8 @@ module.exports = function(environment) { }, 'ember-simple-auth': { authenticationRoute: 'auth.login', - routeAfterAuthentication: 'folders.folder' + routeAfterAuthentication: 'folders.folder', + routeIfAlreadyAuthenticated: 'folders.folder' }, APP: { // Allows to disable audit service in tests