mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2024-11-24 16:17:57 -05:00
64 lines
1.8 KiB
CoffeeScript
64 lines
1.8 KiB
CoffeeScript
|
CocoClass = require 'lib/CocoClass'
|
||
|
{me, CURRENT_USER_KEY} = require 'lib/auth'
|
||
|
{backboneFailure} = require 'lib/errors'
|
||
|
{saveObjectToStorage} = require 'lib/storage'
|
||
|
|
||
|
# facebook user object props to
|
||
|
userPropsToSave =
|
||
|
'first_name': 'firstName'
|
||
|
'last_name': 'lastName'
|
||
|
'gender': 'gender'
|
||
|
'email': 'email'
|
||
|
'id': 'facebookID'
|
||
|
|
||
|
|
||
|
module.exports = FacebookHandler = class FacebookHandler extends CocoClass
|
||
|
constructor: ->
|
||
|
super()
|
||
|
|
||
|
subscriptions:
|
||
|
'facebook-logged-in':'onFacebookLogin'
|
||
|
'facebook-logged-out': 'onFacebookLogout'
|
||
|
|
||
|
onFacebookLogin: (e) =>
|
||
|
# user is logged in also when the page first loads, so check to see
|
||
|
# if we really need to do the lookup
|
||
|
return if not me
|
||
|
|
||
|
doIt = false
|
||
|
@authResponse = e.response.authResponse
|
||
|
for fbProp, userProp of userPropsToSave
|
||
|
unless me.get(userProp)
|
||
|
doIt = true
|
||
|
break
|
||
|
FB.api('/me', @onReceiveMeInfo) if doIt
|
||
|
|
||
|
onFacebookLogout: (e) =>
|
||
|
console.warn('On facebook logout not implemented.')
|
||
|
|
||
|
onReceiveMeInfo: (r) =>
|
||
|
unless r.email
|
||
|
console.error('could not get data, since no email provided')
|
||
|
return
|
||
|
|
||
|
oldEmail = me.get('email')
|
||
|
me.set('firstName', r.first_name) if r.first_name
|
||
|
me.set('lastName', r.last_name) if r.last_name
|
||
|
me.set('gender', r.gender) if r.gender
|
||
|
me.set('email', r.email) if r.email
|
||
|
me.set('facebookID', r.id) if r.id
|
||
|
|
||
|
Backbone.Mediator.publish('logging-in-with-facebook')
|
||
|
window.tracker?.trackEvent 'Facebook Login'
|
||
|
window.tracker?.identify()
|
||
|
me.save({}, {
|
||
|
error: backboneFailure,
|
||
|
url: "/db/user?facebookID=#{r.id}&facebookAccessToken=#{@authResponse.accessToken}"
|
||
|
success: (model) ->
|
||
|
saveObjectToStorage(CURRENT_USER_KEY, model.attributes)
|
||
|
window.location.reload() if model.get('email') isnt oldEmail
|
||
|
})
|
||
|
|
||
|
destroy: ->
|
||
|
super()
|