From f6ac7b9c30d3ebad21c44e653c78af270bc4369f Mon Sep 17 00:00:00 2001 From: Sven Fuchs Date: Fri, 5 Oct 2012 22:52:37 +0200 Subject: [PATCH] showUnauthenticated after signout --- assets/scripts/app/app.coffee | 4 +- assets/scripts/app/auth.coffee | 18 ++++--- assets/scripts/app/controllers.coffee | 2 + assets/scripts/app/routes.coffee | 51 +++++++++----------- assets/scripts/app/templates/auth/signin.hbs | 13 +++++ assets/scripts/app/views.coffee | 3 +- assets/scripts/app/views/signin.coffee | 7 +++ public/scripts/app.js | 2 +- public/scripts/app.min.js | 8 +-- public/version | 2 +- 10 files changed, 65 insertions(+), 45 deletions(-) create mode 100644 assets/scripts/app/templates/auth/signin.hbs create mode 100644 assets/scripts/app/views/signin.coffee diff --git a/assets/scripts/app/app.coffee b/assets/scripts/app/app.coffee index c0375c53..3821e876 100644 --- a/assets/scripts/app/app.coffee +++ b/assets/scripts/app/app.coffee @@ -30,7 +30,7 @@ Travis.reopen @store = Travis.Store.create() @store.loadMany(Travis.Sponsor, Travis.SPONSORS) - @set('auth', Travis.Auth.create(store: @store, endpoint: Travis.config.api_endpoint)) + @set('auth', Travis.Auth.create(app: this, endpoint: Travis.config.api_endpoint)) @slider = new Travis.Slider() @pusher = new Travis.Pusher(Travis.config.pusher) @@ -41,7 +41,7 @@ Travis.reopen signOut: -> @get('auth').signOut() - @get('router').send('showAuthenticated') + @get('router').send('goToRoot') receive: -> @store.receive.apply(@store, arguments) diff --git a/assets/scripts/app/auth.coffee b/assets/scripts/app/auth.coffee index fe24a78a..541b5427 100644 --- a/assets/scripts/app/auth.coffee +++ b/assets/scripts/app/auth.coffee @@ -16,9 +16,9 @@ # if the user is in the session storage, we're using it. if we have a flag # for auto signin then we're trying to sign in. loadUser: -> - if user = sessionStorage?.getItem('travis.user') + if user = sessionStorage.getItem('travis.user') @setData(user: JSON.parse(user)) - else if localStorage?.getItem('travis.auto_signin') + else if localStorage.getItem('travis.auto_signin') @trySignIn() # try signing in, but check later in case we have a timeout @@ -34,7 +34,7 @@ @forceSignIn() if @get('state') == 'signing-in' forceSignIn: -> - localStorage?.setItem('travis.auto_signin', 'true') + localStorage.setItem('travis.auto_signin', 'true') window.location = "#{@endpoint}/auth/handshake?redirect_uri=#{location}" signOut: -> @@ -48,16 +48,18 @@ user = @storeUser(data.user) if data?.user @set('state', if user then 'signed-in' else 'signed-out') @set('user', if user then user else undefined) + @app.get('router').transitionTo('authenticated') if @app.get('router') + # Travis.app.get('router').route(@get('returnTo')) storeToken: (token) -> - sessionStorage?.setItem('travis.token', token) + sessionStorage.setItem('travis.token', token) @notifyPropertyChange('accessToken') storeUser: (user) -> - localStorage?.setItem('travis.auto_signin', 'true') - sessionStorage?.setItem('travis.user', JSON.stringify(user)) - @store.load(Travis.User, user) - @store.find(Travis.User, user.id) + localStorage.setItem('travis.auto_signin', 'true') + sessionStorage.setItem('travis.user', JSON.stringify(user)) + @app.store.load(Travis.User, user) + @app.store.find(Travis.User, user.id) receiveMessage: (event) -> if event.origin == @expectedOrigin() diff --git a/assets/scripts/app/controllers.coffee b/assets/scripts/app/controllers.coffee index 99830b9b..2a760bce 100644 --- a/assets/scripts/app/controllers.coffee +++ b/assets/scripts/app/controllers.coffee @@ -18,10 +18,12 @@ Travis.reopen TopController: Em.Controller.extend userBinding: 'Travis.app.currentUser' + ApplicationController: Em.Controller.extend() MainController: Em.Controller.extend() StatsLayoutController: Em.Controller.extend() ProfileLayoutController: Em.Controller.extend() + AuthLayoutController: Em.Controller.extend() require 'controllers/accounts' require 'controllers/builds' diff --git a/assets/scripts/app/routes.coffee b/assets/scripts/app/routes.coffee index a99b2c9c..9906b92d 100644 --- a/assets/scripts/app/routes.coffee +++ b/assets/scripts/app/routes.coffee @@ -1,16 +1,18 @@ Travis.Router = Ember.Router.extend location: 'history' - enableLogging: false + enableLogging: true initialState: 'loading' goToRoot: Ember.Route.transitionTo('root.home.show') goToStats: Ember.Route.transitionTo('root.stats') + showRepository: Ember.Route.transitionTo('root.home.repository.show') showBuilds: Ember.Route.transitionTo('root.home.repository.builds.index') showBuild: Ember.Route.transitionTo('root.home.repository.builds.show') showPullRequests: Ember.Route.transitionTo('root.home.repository.pullRequests') showBranches: Ember.Route.transitionTo('root.home.repository.branches') showJob: Ember.Route.transitionTo('root.home.repository.job') + showProfile: Ember.Route.transitionTo('root.profile') showAccount: Ember.Route.transitionTo('root.profile.account') showUserProfile: Ember.Route.transitionTo('root.profile.account.profile') @@ -18,44 +20,37 @@ Travis.Router = Ember.Router.extend signedIn: -> !!Travis.app.get('auth.user') - requiresAuth: (path) -> - path == '/profile' && !@signedIn() + needsAuth: (path) -> + path.indexOf('/profile') == 0 && !@signedIn() loading: Ember.Route.extend routePath: (router, path) -> - router.set('lastAttemptedPath', path) - if router.requiresAuth(path) - router.send 'showUnauthenticated' + sessionStorage.setItem('travis.path', path) + if router.needsAuth(path) + router.transitionTo('root.auth') + Travis.app.signIn() else - router.send 'showAuthenticated' - - # showUnauthenticated: Ember.State.transitionTo('unauthenticated.index') - showUnauthenticated: Ember.State.transitionTo('root.home.show') - showAuthenticated: Ember.State.transitionTo('authenticated.index') - - # unauthenticated: Ember.Route.extend - # index: Ember.Route.extend - # route: '/' - # connectOutlets: (router) -> - # router.transitionTo('login') - # login: Ember.Route.extend - # route: '/login' - # connectOutlets: (router) -> - # router.get('applicationController').connectOutlet('login') + router.transitionTo('authenticated') authenticated: Ember.Route.extend - index: Ember.Route.extend - connectOutlets: (router) -> - router.transitionTo('root') - - path = router.get('lastAttemptedPath') - if path && path != '/' - router.route(path) + connectOutlets: (router) -> + path = sessionStorage.getItem('travis.path') + sessionStorage.removeItem('travis.path') + router.transitionTo('root') + router.route(path) if path root: Ember.Route.extend initialState: 'home' loading: Ember.State.extend() + auth: Ember.Route.extend + route: '/auth' + connectOutlets: (router) -> + router.get('applicationController').connectOutlet('authLayout') + $('body').attr('id', 'auth') + router.get('authLayoutController').connectOutlet('top', 'top') + router.get('authLayoutController').connectOutlet('main', 'signin') + stats: Ember.Route.extend route: '/stats' connectOutlets: (router) -> diff --git a/assets/scripts/app/templates/auth/signin.hbs b/assets/scripts/app/templates/auth/signin.hbs new file mode 100644 index 00000000..29ad1483 --- /dev/null +++ b/assets/scripts/app/templates/auth/signin.hbs @@ -0,0 +1,13 @@ +{{#if view.signingIn}} +

Signing in

+

+ Trying to authenticate with GitHub. +

+{{else}} +

Sign in

+

+ Sign in with GitHub +

+{{/if}} + + diff --git a/assets/scripts/app/views.coffee b/assets/scripts/app/views.coffee index 6978b1d1..a0ffb358 100644 --- a/assets/scripts/app/views.coffee +++ b/assets/scripts/app/views.coffee @@ -7,6 +7,7 @@ require 'ext/ember/namespace' @Travis.reopen HomeView: Travis.View.extend(templateName: 'layouts/home') + AuthLayoutView: Travis.View.extend(templateName: 'layouts/simple') ProfileLayoutView: Travis.View.extend(templateName: 'layouts/profile') StatsLayoutView: Travis.View.extend(templateName: 'layouts/simple') ApplicationView: Travis.View.extend(templateName: 'application') @@ -18,5 +19,5 @@ require 'views/repo' require 'views/profile' require 'views/sidebar' require 'views/stats' +require 'views/signin' require 'views/top' - diff --git a/assets/scripts/app/views/signin.coffee b/assets/scripts/app/views/signin.coffee new file mode 100644 index 00000000..a61ca5bc --- /dev/null +++ b/assets/scripts/app/views/signin.coffee @@ -0,0 +1,7 @@ +@Travis.reopen + SigninView: Travis.View.extend + templateName: 'auth/signin' + + signingIn: (-> + Travis.app.get('authState') + ).property('Travis.app.authState') diff --git a/public/scripts/app.js b/public/scripts/app.js index 3aa0f668..a2fe9d22 100644 --- a/public/scripts/app.js +++ b/public/scripts/app.js @@ -29619,4 +29619,4 @@ var _require=function(){function c(a,c){document.addEventListener?a.addEventList ++g&&setTimeout(c,0)})}}(); (function(){!window.WebSocket&&window.MozWebSocket&&(window.WebSocket=window.MozWebSocket);if(window.WebSocket)Pusher.Transport=window.WebSocket,Pusher.TransportType="native";var c=(document.location.protocol=="http:"?Pusher.cdn_http:Pusher.cdn_https)+Pusher.VERSION,a=[];window.JSON||a.push(c+"/json2"+Pusher.dependency_suffix+".js");if(!window.WebSocket)window.WEB_SOCKET_DISABLE_AUTO_INITIALIZATION=!0,a.push(c+"/flashfallback"+Pusher.dependency_suffix+".js");var b=function(){return window.WebSocket?function(){Pusher.ready()}: function(){window.WebSocket?(Pusher.Transport=window.WebSocket,Pusher.TransportType="flash",window.WEB_SOCKET_SWF_LOCATION=c+"/WebSocketMain.swf",WebSocket.__addTask(function(){Pusher.ready()}),WebSocket.__initialize()):(Pusher.Transport=null,Pusher.TransportType="none",Pusher.ready())}}(),e=function(a){var b=function(){document.body?a():setTimeout(b,0)};b()},g=function(){e(b)};a.length>0?_require(a,g):g()})(); -;minispade.register('app', "(function() {(function() {\nminispade.require('auth');\nminispade.require('controllers');\nminispade.require('helpers');\nminispade.require('models');\nminispade.require('pusher');\nminispade.require('routes');\nminispade.require('slider');\nminispade.require('store');\nminispade.require('tailing');\nminispade.require('templates');\nminispade.require('views');\nminispade.require('config/locales');\nminispade.require('data/sponsors');\n\n Travis.reopen({\n App: Em.Application.extend({\n autoinit: false,\n currentUserBinding: 'auth.user',\n authStateBinding: 'auth.state',\n init: function() {\n this._super.apply(this, arguments);\n this.store = Travis.Store.create();\n this.store.loadMany(Travis.Sponsor, Travis.SPONSORS);\n this.set('auth', Travis.Auth.create({\n store: this.store,\n endpoint: Travis.config.api_endpoint\n }));\n this.slider = new Travis.Slider();\n this.pusher = new Travis.Pusher(Travis.config.pusher);\n return this.tailing = new Travis.Tailing();\n },\n signIn: function() {\n return this.get('auth').signIn();\n },\n signOut: function() {\n this.get('auth').signOut();\n return this.get('router').send('showAuthenticated');\n },\n receive: function() {\n return this.store.receive.apply(this.store, arguments);\n },\n toggleSidebar: function() {\n var element;\n $('body').toggleClass('maximized');\n element = $('');\n $('#top .profile').append(element);\n Em.run.later((function() {\n return element.remove();\n }), 10);\n element = $('');\n $('#repository').append(element);\n return Em.run.later((function() {\n return element.remove();\n }), 10);\n }\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=app");minispade.register('auth', "(function() {(function() {\n\n this.Travis.Auth = Ember.Object.extend({\n iframe: $('