commit
0a61eed7d7
|
@ -16,8 +16,14 @@
|
||||||
# for auto signin then we're trying to sign in.
|
# for auto signin then we're trying to sign in.
|
||||||
autoSignIn: (path) ->
|
autoSignIn: (path) ->
|
||||||
console.log 'autoSignIn'
|
console.log 'autoSignIn'
|
||||||
if user = sessionStorage.getItem('travis.user')
|
global = localStorage.getItem('travis.user')
|
||||||
@setData(user: JSON.parse(user))
|
session = sessionStorage.getItem('travis.user')
|
||||||
|
user = session || global
|
||||||
|
if user
|
||||||
|
localStorage.setItem('travis.user', user) unless global
|
||||||
|
data = JSON.parse(user)
|
||||||
|
data = { user: data } unless data.user?
|
||||||
|
@setData(data)
|
||||||
else if localStorage.getItem('travis.auto_signin')
|
else if localStorage.getItem('travis.auto_signin')
|
||||||
console.log 'travis.auto_signin', localStorage.getItem('travis.auto_signin')
|
console.log 'travis.auto_signin', localStorage.getItem('travis.auto_signin')
|
||||||
@signIn()
|
@signIn()
|
||||||
|
@ -32,6 +38,7 @@
|
||||||
signOut: ->
|
signOut: ->
|
||||||
localStorage.removeItem('travis.auto_signin')
|
localStorage.removeItem('travis.auto_signin')
|
||||||
localStorage.removeItem('travis.locale')
|
localStorage.removeItem('travis.locale')
|
||||||
|
localStorage.removeItem('travis.user')
|
||||||
sessionStorage.clear()
|
sessionStorage.clear()
|
||||||
@setData()
|
@setData()
|
||||||
|
|
||||||
|
@ -49,13 +56,7 @@
|
||||||
|
|
||||||
# TODO should have clearData() to clean this up
|
# TODO should have clearData() to clean this up
|
||||||
setData: (data) ->
|
setData: (data) ->
|
||||||
if typeof data == 'string'
|
data = JSON.parse(data) if typeof data == 'string'
|
||||||
# TODO: I sometimes see plain text response "done" when authenticating
|
|
||||||
# we should track down why is that happening and fix the API
|
|
||||||
if data == 'done'
|
|
||||||
data = {}
|
|
||||||
else
|
|
||||||
data = JSON.parse(data)
|
|
||||||
@storeToken(data.token) if data?.token
|
@storeToken(data.token) if data?.token
|
||||||
console.log 'setData', data.user if data?.user
|
console.log 'setData', data.user if data?.user
|
||||||
user = @storeUser(data.user) if data?.user
|
user = @storeUser(data.user) if data?.user
|
||||||
|
@ -89,9 +90,12 @@
|
||||||
|
|
||||||
receiveMessage: (event) ->
|
receiveMessage: (event) ->
|
||||||
if event.origin == @expectedOrigin()
|
if event.origin == @expectedOrigin()
|
||||||
event.data.user.token = event.data.travis_token if event.data.travis_token
|
if event.data == 'redirect'
|
||||||
@setData(event.data)
|
@forceSignIn()
|
||||||
console.log("signed in as #{event.data.user.login}")
|
else if event.data.user?
|
||||||
|
event.data.user.token = event.data.travis_token if event.data.travis_token
|
||||||
|
@setData(event.data)
|
||||||
|
console.log("signed in as #{event.data.user.login}")
|
||||||
else
|
else
|
||||||
console.log("unexpected message #{event.origin}: #{event.data}")
|
console.log("unexpected message #{event.origin}: #{event.data}")
|
||||||
|
|
||||||
|
|
|
@ -11,14 +11,18 @@ module Travis
|
||||||
end
|
end
|
||||||
|
|
||||||
def call(env)
|
def call(env)
|
||||||
return app.call(env) unless info = info_for(env)
|
set_info(env) || app.call(env)
|
||||||
Rack::Response.new(template % info).finish
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def info_for(env)
|
def set_info(env)
|
||||||
return unless env['REQUEST_METHOD'] == 'POST'
|
return unless env['REQUEST_METHOD'] == 'POST'
|
||||||
info = Rack::Request.new(env).params.values_at('token', 'user')
|
request = Rack::Request.new(env)
|
||||||
info if info.first =~ /\A[a-zA-Z\-_\d]+\Z/
|
token, user, storage = request.params.values_at('token', 'user', 'storage')
|
||||||
|
if token =~ /\A[a-zA-Z\-_\d]+\Z/
|
||||||
|
storage = 'sessionStorage' if storage != 'localStorage'
|
||||||
|
info = [storage, token, user, request.fullpath]
|
||||||
|
Rack::Response.new(template % info).finish
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -26,7 +30,8 @@ end
|
||||||
|
|
||||||
__END__
|
__END__
|
||||||
<script>
|
<script>
|
||||||
sessionStorage.setItem('travis.token', %p);
|
var storage = %s;
|
||||||
sessionStorage.setItem('travis.user', %p);
|
storage.setItem('travis.token', %p);
|
||||||
window.location = '/';
|
storage.setItem('travis.user', %p);
|
||||||
|
window.location = %p;
|
||||||
</script>
|
</script>
|
||||||
|
|
Loading…
Reference in New Issue
Block a user