Add first half of login process
This commit is contained in:
@@ -61,6 +61,16 @@ Event.transitionEnd = (->
|
||||
exports.Key = Key = {}
|
||||
Key.Return = 13
|
||||
|
||||
exports.Login = Login = {}
|
||||
Login.authorizeUrl = _.template "https://github.com/login/oauth/authorize" +
|
||||
"?client_id=ea419abd2ab96c708815&scope=public_repo&state=<%= state %>" +
|
||||
|
||||
exports.ModelState = ModelState = {}
|
||||
ModelState.unloaded = 'unloaded'
|
||||
ModelState.loading = 'loading'
|
||||
ModelState.loaded = 'loaded'
|
||||
ModelState.failed = 'failed'
|
||||
|
||||
exports.Opacity = Opacity = {}
|
||||
Opacity.hidden = 1e-6
|
||||
Opacity.shown = 1
|
||||
@@ -69,12 +79,6 @@ exports.ProductionEnvs = [ 'staging', 'production' ]
|
||||
|
||||
exports.RequiredMods = [ 'minecraft' ]
|
||||
|
||||
exports.ModelState = ModelState = {}
|
||||
ModelState.unloaded = 'unloaded'
|
||||
ModelState.loading = 'loading'
|
||||
ModelState.loaded = 'loaded'
|
||||
ModelState.failed = 'failed'
|
||||
|
||||
exports.Text = Text = {}
|
||||
Text.title = 'The Ultimate Minecraft Crafting Guide'
|
||||
|
||||
|
||||
@@ -64,3 +64,4 @@ module.exports = class HeaderController extends BaseController
|
||||
return _.extend super,
|
||||
'click a.logo': 'onLogoClicked'
|
||||
'click .navBar a': 'onNavItemClicked'
|
||||
'click .login a': 'routeLinkClick'
|
||||
|
||||
@@ -0,0 +1,110 @@
|
||||
###
|
||||
Crafting Guide - login_page_controller.coffee
|
||||
|
||||
Copyright (c) 2015 by Redwood Labs
|
||||
All rights reserved.
|
||||
###
|
||||
|
||||
PageController = require './page_controller'
|
||||
{Login} = require '../constants'
|
||||
|
||||
########################################################################################################################
|
||||
|
||||
module.exports = class LoginPageController extends PageController
|
||||
|
||||
@ServerStatus:
|
||||
Up: 'up'
|
||||
Down: 'down'
|
||||
|
||||
constructor: (options={})->
|
||||
options.templateName = 'login_page'
|
||||
super options
|
||||
|
||||
@client = options.client
|
||||
@storage = options.storage
|
||||
|
||||
# Event Methods ################################################################################
|
||||
|
||||
onExpandReadMore: (event)->
|
||||
event.preventDefault()
|
||||
@$readMoreLink.addClass 'hidden'
|
||||
@$readMoreContent.removeClass 'closed'
|
||||
|
||||
onLoginButtonClicked: (event)->
|
||||
event.preventDefault()
|
||||
@_redirectToGitHub()
|
||||
|
||||
# Property Methods #############################################################################
|
||||
|
||||
getLoginSecurityToken: ->
|
||||
@storage.load 'loginSecurityToken'
|
||||
|
||||
setLoginSecurityToken: (value)->
|
||||
@storage.store 'loginSecurityToken', value
|
||||
|
||||
getServerStatus: ->
|
||||
return @_serverStatus
|
||||
|
||||
setServerStatus: (serverStatus)->
|
||||
@_serverStatus = serverStatus
|
||||
@tryRefresh()
|
||||
|
||||
Object.defineProperties @prototype,
|
||||
loginSecurityToken: {get:@prototype.getLoginSecurityToken, set:@prototype.setLoginSecurityToken}
|
||||
serverStatus: {get:@prototype.getServerStatus, set:@prototype.setServerStatus}
|
||||
|
||||
# PageController Overrides #####################################################################
|
||||
|
||||
getTitle: ->
|
||||
return "Login"
|
||||
|
||||
# BaseController Methods #######################################################################
|
||||
|
||||
onWillRender: ->
|
||||
@_validateServerStatus()
|
||||
super
|
||||
|
||||
onDidRender: ->
|
||||
@$readMoreLink = @$('a.read-more')
|
||||
@$readMoreContent = @$('.read-more-content')
|
||||
@$serviceUpContent = @$('.service-up')
|
||||
@$serviceDownContent = @$('.service-down')
|
||||
super
|
||||
|
||||
refresh: ->
|
||||
if @serverStatus is LoginPageController.ServerStatus.Down
|
||||
@$serviceUpContent.addClass 'hidden'
|
||||
@$serviceDownContent.removeClass 'hidden'
|
||||
else
|
||||
@$serviceUpContent.removeClass 'hidden'
|
||||
@$serviceDownContent.addClass 'hidden'
|
||||
|
||||
super
|
||||
|
||||
# Backbone.View Overrides ######################################################################
|
||||
|
||||
events: ->
|
||||
return _.extend super,
|
||||
'click a.read-more': 'onExpandReadMore'
|
||||
'click button': 'onLoginButtonClicked'
|
||||
|
||||
# Private Methods ##############################################################################
|
||||
|
||||
_redirectToGitHub: ->
|
||||
@loginSecurityToken = _.uuid()
|
||||
baseUrl = Login.authorizeUrl state:@loginSecurityToken
|
||||
window.location.href = baseUrl
|
||||
|
||||
_validateServerStatus: ->
|
||||
message = _.uuid()
|
||||
logger.info "Checking Crafting Guide Server at #{@client.baseUrl}..."
|
||||
@client.ping message:message
|
||||
.then (response)=>
|
||||
if response.json.message is message
|
||||
@serverStatus = LoginPageController.ServerStatus.Up
|
||||
logger.info "Crafting Guide Server is up"
|
||||
else
|
||||
throw new Error "Invalid server ping response: #{response.json.message} isnt #{message}"
|
||||
.catch (error)=>
|
||||
@serverStatus = LoginPageController.ServerStatus.Down
|
||||
logger.error "Crafting Guide server is down: #{error}"
|
||||
@@ -13,6 +13,7 @@ HomePageController = require './controllers/home_page_controller'
|
||||
ImageLoader = require './controllers/image_loader'
|
||||
ItemPageController = require './controllers/item_page_controller'
|
||||
ItemSlug = require './models/item_slug'
|
||||
LoginPageController = require './controllers/login_page_controller'
|
||||
Mod = require './models/mod'
|
||||
ModPack = require './models/mod_pack'
|
||||
ModPageController = require './controllers/mod_page_controller'
|
||||
@@ -36,10 +37,11 @@ module.exports = class CraftingGuideRouter extends Backbone.Router
|
||||
@_lastReported = null
|
||||
super options
|
||||
|
||||
@client = options.client
|
||||
@imageLoader = new ImageLoader defaultUrl:'/images/unknown.png'
|
||||
@modPack = new ModPack
|
||||
@storage = new Storage storage:window.localStorage
|
||||
@_defaultOptions = imageLoader:@imageLoader, modPack:@modPack, storage:@storage
|
||||
@_defaultOptions = client:@client, imageLoader:@imageLoader, modPack:@modPack, storage:@storage
|
||||
|
||||
@headerController = new HeaderController el:'.view__header'
|
||||
@headerController.render()
|
||||
@@ -73,6 +75,7 @@ module.exports = class CraftingGuideRouter extends Backbone.Router
|
||||
'configure(/)': 'route__configure'
|
||||
'craft(/)': 'route__craft'
|
||||
'craft/:text': 'route__craft'
|
||||
'login(/)': 'route__login'
|
||||
|
||||
'item/:itemSlug': 'deprecated__item'
|
||||
'crafting/(:text)': 'deprecated__crafting'
|
||||
@@ -114,6 +117,10 @@ module.exports = class CraftingGuideRouter extends Backbone.Router
|
||||
controller.model.params = inventoryText:text
|
||||
@_setPage 'craft', controller
|
||||
|
||||
route__login: ->
|
||||
controller = new LoginPageController _.extend {}, @_defaultOptions
|
||||
@_setPage 'login', controller
|
||||
|
||||
# Deprecated Route Methods #####################################################################
|
||||
|
||||
deprecated__crafting: (text)->
|
||||
|
||||
+15
-9
@@ -8,10 +8,11 @@ All rights reserved.
|
||||
require './underscore_mixins'
|
||||
require './polyfill'
|
||||
|
||||
CraftingGuideRouter = require './crafting_guide_router'
|
||||
FeedbackController = require './controllers/feedback_controller'
|
||||
views = require './views'
|
||||
{Logger} = require 'crafting-guide-common'
|
||||
CraftingGuideRouter = require './crafting_guide_router'
|
||||
FeedbackController = require './controllers/feedback_controller'
|
||||
views = require './views'
|
||||
{CraftingGuideClient} = require 'crafting-guide-common'
|
||||
{Logger} = require 'crafting-guide-common'
|
||||
|
||||
########################################################################################################################
|
||||
|
||||
@@ -22,17 +23,22 @@ if typeof(global) is 'undefined'
|
||||
global.logger = new Logger
|
||||
|
||||
switch window.location.hostname
|
||||
when 'localhost'
|
||||
global.env = 'development'
|
||||
when 'local.crafting-guide.com'
|
||||
global.env = 'development'
|
||||
logger.level = Logger.DEBUG
|
||||
apiBaseUrl = 'http://localhost:8001'
|
||||
when 'new.crafting-guide.com'
|
||||
global.env = 'staging'
|
||||
global.env = 'staging'
|
||||
logger.level = Logger.VERBOSE
|
||||
apiBaseUrl = 'https://crafting-guide-production.herokuapp.com'
|
||||
when 'crafting-guide.com'
|
||||
global.env = 'production'
|
||||
global.env = 'production'
|
||||
logger.level = Logger.INFO
|
||||
apiBaseUrl = 'https://crafting-guide-production.herokuapp.com'
|
||||
else
|
||||
throw new Error "cannot determine the environment of: #{window.location.hostname}"
|
||||
|
||||
global.router = new CraftingGuideRouter
|
||||
global.router = new CraftingGuideRouter client:new CraftingGuideClient baseUrl:apiBaseUrl
|
||||
global.util = require 'util'
|
||||
global.views = views
|
||||
global.markdown = global.markdown.markdown
|
||||
|
||||
@@ -31,3 +31,5 @@ _.mixin
|
||||
parts = [ null, parts[0] ]
|
||||
|
||||
return parts
|
||||
|
||||
_.mixin require('crafting-guide-common').stringMixins
|
||||
|
||||
Reference in New Issue
Block a user