diff --git a/assets/scripts/app/auth.coffee b/assets/scripts/app/auth.coffee index 364bc34b..a3e5f22a 100644 --- a/assets/scripts/app/auth.coffee +++ b/assets/scripts/app/auth.coffee @@ -18,8 +18,7 @@ Auth = Ember.Object.extend if user = @get('currentUser') user.unload() @set('currentUser', null) - if hooksTarget = @get('hooksTarget') - hooksTarget.afterSignOut() + @sendToApp('afterSignOut') signIn: (data) -> if data @@ -64,9 +63,7 @@ Auth = Ember.Object.extend @set('state', 'signed-in') Travis.trigger('user:signed_in', data.user) - # TODO: I would like to get rid of this dependency in the future - if hooksTarget = @get('hooksTarget') - hooksTarget.afterSignIn() + @sendToApp('afterSignIn') refreshUserData: (user) -> Travis.ajax.get "/users/#{user.id}", (data) => @@ -113,6 +110,21 @@ Auth = Ember.Object.extend endpoint = @get('endpoint') if endpoint[0] == '/' then @receivingEnd else endpoint + sendToApp: (name) -> + # TODO: this is an ugly solution, we need to do one of 2 things: + # * find a way to check if we can already send an event to remove try/catch + # * remove afterSignIn and afterSignOut events by replacing them in a more + # straightforward code - we can do what's needed on a routes/controller level + # as a direct response to either manual sign in or autoSignIn (right now + # we treat both cases behave the same in terms of sent events which I think + # makes it more complicated than it should be). + controller = @container.lookup('controller:auth') + try + controller.send(name) + catch error + unless error.message =~ /Can't trigger action/ + throw error + Ember.onLoad 'Ember.Application', (Application) -> Application.initializer name: "auth", diff --git a/assets/scripts/app/controllers.coffee b/assets/scripts/app/controllers.coffee index f5d9b3f4..a6adbfc0 100644 --- a/assets/scripts/app/controllers.coffee +++ b/assets/scripts/app/controllers.coffee @@ -13,6 +13,18 @@ Travis.TopController = Em.Controller.extend "#{location.protocol}//www.gravatar.com/avatar/#{@get('user.gravatarId')}?s=48&d=mm" ).property('user.gravatarId') + signedIn: (-> + Travis.get('authState') == 'signed-in' + ).property('Travis.authState') + + signedOut: (-> + Travis.get('authState') == 'signed-out' + ).property('Travis.authState') + + signingIn: (-> + Travis.get('authState') == 'signing-in' + ).property('Travis.authState') + Travis.ApplicationController = Em.Controller.extend templateName: 'layouts/home' @@ -26,7 +38,7 @@ Travis.StatsLayoutController = Em.Controller.extend() Travis.ProfileLayoutController = Em.Controller.extend() Travis.AuthLayoutController = Em.Controller.extend() -Travis.AccountProfileController = Em.Controller.extend +Travis.ProfileInfoController = Em.Controller.extend needs: ['currentUser', 'repos'] userBinding: 'controllers.currentUser' @@ -49,6 +61,7 @@ Travis.RepoSettingsController = Em.ObjectController.extend Travis.flash(error: 'There was an error while saving settings. Please try again.') require 'controllers/accounts' +require 'controllers/auth' require 'controllers/build' require 'controllers/builds' require 'controllers/flash' @@ -59,6 +72,5 @@ require 'controllers/repos' require 'controllers/repo' require 'controllers/stats' require 'controllers/current_user' -require 'controllers/account_index' require 'controllers/request' require 'controllers/requests' diff --git a/assets/scripts/app/controllers/auth.coffee b/assets/scripts/app/controllers/auth.coffee new file mode 100644 index 00000000..cfaac6d0 --- /dev/null +++ b/assets/scripts/app/controllers/auth.coffee @@ -0,0 +1 @@ +Travis.AuthController = Travis.Controller.extend() diff --git a/assets/scripts/app/routes.coffee b/assets/scripts/app/routes.coffee index 12049b2d..af908324 100644 --- a/assets/scripts/app/routes.coffee +++ b/assets/scripts/app/routes.coffee @@ -24,19 +24,6 @@ Travis.Route = Ember.Route.extend @controllerFor('currentUser').get('content') Travis.ApplicationRoute = Travis.Route.extend - init: -> - @_super.apply this, arguments - - @auth.set('hooksTarget', this) - - afterSignIn: -> - if transition = @auth.get('afterSignInTransition') - @auth.set('afterSignInTransition', null) - transition.retry() - - afterSignOut: -> - @transitionTo('index.current') - actions: redirectToGettingStarted: -> # do nothing, we handle it only in index path @@ -46,7 +33,7 @@ Travis.ApplicationRoute = Travis.Route.extend error: (error) -> if error == 'needs-auth' - authController = @container.lookup('controller:auth') || @generateController('auth') + authController = @container.lookup('controller:auth') authController.set('redirected', true) @transitionTo('auth') else @@ -55,6 +42,14 @@ Travis.ApplicationRoute = Travis.Route.extend renderFirstSync: -> @renderFirstSync() + afterSignIn: -> + if transition = @auth.get('afterSignInTransition') + @auth.set('afterSignInTransition', null) + transition.retry() + + afterSignOut: -> + @transitionTo('index.current') + Travis.Router.map -> @resource 'index', path: '/', -> @resource 'getting_started' @@ -394,9 +389,10 @@ Travis.AuthRoute = Travis.Route.extend deactivate: -> @controllerFor('auth').set('redirected', false) - redirect: -> - if @auth.get('signedIn') + actions: + afterSignIn: -> @transitionTo('index.current') + return true Travis.RepoSettingsRoute = Travis.Route.extend setupController: (controller, model) ->