showUnauthenticated after signout

This commit is contained in:
Sven Fuchs 2012-10-05 22:52:37 +02:00
parent b34e35fbb8
commit f6ac7b9c30
10 changed files with 65 additions and 45 deletions

View File

@ -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)

View File

@ -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()

View File

@ -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'

View File

@ -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) ->

View File

@ -0,0 +1,13 @@
{{#if view.signingIn}}
<h1>Signing in</h1>
<p>
Trying to authenticate with GitHub.
</p>
{{else}}
<h1>Sign in</h1>
<p>
<a href="#" {{action signIn target="Travis.app"}}>Sign in with GitHub</a>
</p>
{{/if}}

View File

@ -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'

View File

@ -0,0 +1,7 @@
@Travis.reopen
SigninView: Travis.View.extend
templateName: 'auth/signin'
signingIn: (->
Travis.app.get('authState')
).property('Travis.app.authState')

File diff suppressed because one or more lines are too long

View File

@ -2224,9 +2224,9 @@ e.readyState=="complete")&&t()})}function t(t,n){var r=document.getElementsByTag
("views"),minispade.require("config/locales"),minispade.require("data/sponsors"),Travis.reopen({App:Em.Application.extend({autoinit:!1,currentUserBinding:"auth.user",authStateBinding:"auth.state",init:
function(){return this._super.apply(this,arguments),this.store=Travis.Store.create(),this.store.loadMany(Travis.Sponsor,Travis.SPONSORS),this.set("auth",Travis.Auth.create({store:this.store,endpoint:Travis
.config.api_endpoint})),this.slider=new Travis.Slider,this.pusher=new Travis.Pusher(Travis.config.pusher),this.tailing=new Travis.Tailing},signIn:function(){return this.get("auth").signIn()},signOut:function(
){return this.get("auth").signOut(),this.get("router").send("showAuthenticated")},receive:function(){return this.store.receive.apply(this.store,arguments)},toggleSidebar:function(){var e;return $("body"
).toggleClass("maximized"),e=$("<span></span>"),$("#top .profile").append(e),Em.run.later(function(){return e.remove()},10),e=$("<span></span>"),$("#repository").append(e),Em.run.later(function(){return e
.remove()},10)}})})}).call(this)}),minispade.register("auth",function(){(function(){this.Travis.Auth=Ember.Object.extend({iframe:$('<iframe id="auth-frame" />').hide(),timeout:5e3,state:"signed-out",receivingEnd
){return this.get("auth").signOut(),this.get("router").send("goToRoot")},receive:function(){return this.store.receive.apply(this.store,arguments)},toggleSidebar:function(){var e;return $("body").toggleClass
("maximized"),e=$("<span></span>"),$("#top .profile").append(e),Em.run.later(function(){return e.remove()},10),e=$("<span></span>"),$("#repository").append(e),Em.run.later(function(){return e.remove()}
,10)}})})}).call(this)}),minispade.register("auth",function(){(function(){this.Travis.Auth=Ember.Object.extend({iframe:$('<iframe id="auth-frame" />').hide(),timeout:5e3,state:"signed-out",receivingEnd
:""+location.protocol+"//"+location.host,init:function(){var e=this;return this.iframe.appendTo("body"),window.addEventListener("message",function(t){return e.receiveMessage(t)}),this.loadUser()},accessToken
:function(){return sessionStorage.getItem("travis.token")}.property(),loadUser:function(){var e;if(e=typeof sessionStorage!="undefined"&&sessionStorage!==null?sessionStorage.getItem("travis.user"):void 0
)return this.setData({user:JSON.parse(e)});if(typeof localStorage!="undefined"&&localStorage!==null?localStorage.getItem("travis.auto_signin"):void 0)return this.trySignIn()},signIn:function(){return this
@ -2366,7 +2366,7 @@ e,n){return t.receive(e,n)})},unsubscribe:function(e){var t;t=this.active_channe
(e,t)})},normalize:function(e,t){switch(e){case"build:started":case"build:finished":return t;case"job:created":case"job:started":case"job:finished":case"job:log":return t.queue&&(t.queue=t.queue.replace
("builds.","")),{job:t};case"worker:added":case"worker:updated":case"worker:removed":return{worker:t}}},warn:function(e,t){if(!this.ignoreWarning(t))return console.warn(t)},ignoreWarning:function(e){var t
,n;if(t=(n=e.data)!=null?n.message:void 0)return t.indexOf("Existing subscription")===0||t.indexOf("No current subscription")===0}})}).call(this)}),minispade.register("routes",function(){(function(){Travis
.Router=Ember.Router.extend({location:"history",enableLogging:!1,initialState:"loading",goToRoot:Ember.Route.transitionTo("root.home.show"),goToStats:Ember.Route.transitionTo("root.stats"),showRepository
.Router=Ember.Router.extend({location:"history",enableLogging:!0,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"),signedIn:function(){return!!

View File

@ -1 +1 @@
d2d014c4
096c4ea9