Complete the login feature

This commit is contained in:
Andrew Miner
2015-04-01 13:31:07 -07:00
parent 764f835698
commit ad897b80c0
10 changed files with 253 additions and 60 deletions
+46 -7
View File
@@ -20,6 +20,7 @@ ModPageController = require './controllers/mod_page_controller'
TutorialPageController = require './controllers/tutorial_page_controller'
Storage = require './models/storage'
UrlParams = require './url_params'
User = require './models/user'
{ProductionEnvs} = require './constants'
{DefaultMods} = require './constants'
{Duration} = require './constants'
@@ -35,16 +36,20 @@ module.exports = class CraftingGuideRouter extends Backbone.Router
@_page = null
@_pageControllers = {}
@_lastReported = null
@_user = null
super options
@client = options.client
@imageLoader = new ImageLoader defaultUrl:'/images/unknown.png'
@modPack = new ModPack
@storage = new Storage storage:window.localStorage
@_defaultOptions = client:@client, imageLoader:@imageLoader, modPack:@modPack, storage:@storage
@client = options.client
@imageLoader = new ImageLoader defaultUrl:'/images/unknown.png'
@modPack = new ModPack
@storage = new Storage storage:window.localStorage
@headerController = new HeaderController el:'.view__header'
@_defaultOptions = client:@client, imageLoader:@imageLoader, modPack:@modPack, storage:@storage, user:@_user
@on Event.change + ':user', => @_defaultOptions.user = @_user
@headerController = new HeaderController _.extend {el:'.view__header'}, @_defaultOptions
@headerController.render()
@on Event.change + ':user', => @headerController.user = @user
# Public Methods ###############################################################################
@@ -60,6 +65,38 @@ module.exports = class CraftingGuideRouter extends Backbone.Router
@modPack.addMod mod
loadCurrentUser: ->
@client.fetchCurrentUser()
.then (response)=>
userData = response.json?.data?.user
@user = new User userData if userData?
.catch (error)=>
if error.response.statusCode isnt 401
logger.error "Failed to get current user: #{error}"
else
logger.info "User is not logged in"
.done()
# Property Methods #############################################################################
getUser: ->
return @_user
setUser: (newUser)->
oldUser = @_user
return if newUser is oldUser
@_user = newUser
logger.info -> "User changed to: #{newUser}"
@trigger Event.change + ':user', this, oldUser, newUser
@trigger Event.change, this
if @_controller? then @_controller.user = newUser
Object.defineProperties @prototype,
user: {get:@prototype.getUser, set:@prototype.setUser}
# Backbone.Router Overrides ####################################################################
navigate: ->
@@ -118,7 +155,8 @@ module.exports = class CraftingGuideRouter extends Backbone.Router
@_setPage 'craft', controller
route__login: ->
controller = new LoginPageController _.extend {}, @_defaultOptions
params = new UrlParams code:{type:'string'}, state:{type:'string'}
controller = new LoginPageController _.extend {params:params}, @_defaultOptions
@_setPage 'login', controller
# Deprecated Route Methods #####################################################################
@@ -182,6 +220,7 @@ module.exports = class CraftingGuideRouter extends Backbone.Router
window.scrollTo 0, 0
controller.user = @user
controller.onWillShow()
controller.$el = $pageContent
controller.render()