real fix for #1
check for match on id for github, google and twitter, and match on email for persona
This commit is contained in:
@ -37,8 +37,6 @@ module.exports = exports = (log, loga, argv) ->
|
|||||||
|
|
||||||
statusDir = argv.status
|
statusDir = argv.status
|
||||||
|
|
||||||
console.log "statusDir: ", statusDir
|
|
||||||
|
|
||||||
idFile = argv.id
|
idFile = argv.id
|
||||||
usingPersona = false
|
usingPersona = false
|
||||||
|
|
||||||
@ -73,7 +71,6 @@ module.exports = exports = (log, loga, argv) ->
|
|||||||
fs.readFile(idFile, (err, data) ->
|
fs.readFile(idFile, (err, data) ->
|
||||||
if err then return cb err
|
if err then return cb err
|
||||||
owner = JSON.parse(data)
|
owner = JSON.parse(data)
|
||||||
console.log 'retrieveOwner owner: ', owner
|
|
||||||
if _.has(owner, 'persona')
|
if _.has(owner, 'persona')
|
||||||
usingPersona = true
|
usingPersona = true
|
||||||
cb())
|
cb())
|
||||||
@ -116,10 +113,19 @@ module.exports = exports = (log, loga, argv) ->
|
|||||||
else
|
else
|
||||||
try
|
try
|
||||||
idProvider = req.session.passport.user.provider
|
idProvider = req.session.passport.user.provider
|
||||||
if _.isEqual(owner[idProvider].id, req.session.passport.user.id)
|
switch idProvider
|
||||||
return true
|
when 'github', 'google', 'twitter'
|
||||||
else
|
if _.isEqual(owner[idProvider].id, req.session.passport.user.id)
|
||||||
return false
|
return true
|
||||||
|
else
|
||||||
|
return false
|
||||||
|
when 'persona'
|
||||||
|
if _.isEqual(owner[idProvider].email, req.session.passport.user.email)
|
||||||
|
return true
|
||||||
|
else
|
||||||
|
return false
|
||||||
|
else
|
||||||
|
return false
|
||||||
catch error
|
catch error
|
||||||
return false
|
return false
|
||||||
|
|
||||||
@ -128,10 +134,19 @@ module.exports = exports = (log, loga, argv) ->
|
|||||||
try
|
try
|
||||||
if admin
|
if admin
|
||||||
idProvider = req.session.passport.user.provider
|
idProvider = req.session.passport.user.provider
|
||||||
if _.isEqual(admin[idProvider].id, req.session.passport.user.id)
|
switch idProvider
|
||||||
return true
|
when 'github', 'google', 'twitter'
|
||||||
else
|
if _.isEqual(admin[idProvider].id, req.session.passport.user.id)
|
||||||
return false
|
return true
|
||||||
|
else
|
||||||
|
return false
|
||||||
|
when 'persona'
|
||||||
|
if _.isEqual(admin[idProvider].email, req.session.passport.user.email)
|
||||||
|
return true
|
||||||
|
else
|
||||||
|
return false
|
||||||
|
else
|
||||||
|
return false
|
||||||
catch error
|
catch error
|
||||||
return false
|
return false
|
||||||
|
|
||||||
@ -164,11 +179,11 @@ module.exports = exports = (log, loga, argv) ->
|
|||||||
# the OAuth application settings - so we don't specify it.
|
# the OAuth application settings - so we don't specify it.
|
||||||
}, (accessToken, refreshToken, profile, cb) ->
|
}, (accessToken, refreshToken, profile, cb) ->
|
||||||
user = {
|
user = {
|
||||||
provider: 'github',
|
provider: 'github'
|
||||||
id: profile.id
|
id: profile.id
|
||||||
username: profile.username
|
username: profile.username
|
||||||
displayName: profile.displayName
|
displayName: profile.displayName
|
||||||
email: profile.emails[0].value
|
emails: profile.emails
|
||||||
}
|
}
|
||||||
cb(null, user)))
|
cb(null, user)))
|
||||||
|
|
||||||
@ -211,11 +226,15 @@ module.exports = exports = (log, loga, argv) ->
|
|||||||
# Persona Strategy
|
# Persona Strategy
|
||||||
PersonaStrategy = require('persona-pass').Strategy
|
PersonaStrategy = require('persona-pass').Strategy
|
||||||
|
|
||||||
|
personaAudience = callbackProtocol + '//' + callbackHost
|
||||||
|
console.log 'Persona Audience: ', personaAudience
|
||||||
|
|
||||||
passport.use(new PersonaStrategy({
|
passport.use(new PersonaStrategy({
|
||||||
audience: callbackProtocol + '//' + callbackHost
|
audience: personaAudience
|
||||||
}, (email, cb) ->
|
}, (email, cb) ->
|
||||||
user = {
|
user = {
|
||||||
persona: { email: email }
|
provider: "persona"
|
||||||
|
email: email
|
||||||
}
|
}
|
||||||
cb(null, user)))
|
cb(null, user)))
|
||||||
|
|
||||||
@ -347,7 +366,6 @@ module.exports = exports = (log, loga, argv) ->
|
|||||||
res.sendStatus(403)
|
res.sendStatus(403)
|
||||||
else
|
else
|
||||||
user = req.session.passport.user
|
user = req.session.passport.user
|
||||||
console.log "Claim: user = ", user
|
|
||||||
id = switch user.provider
|
id = switch user.provider
|
||||||
when "twitter" then {
|
when "twitter" then {
|
||||||
name: user.displayName
|
name: user.displayName
|
||||||
@ -361,7 +379,7 @@ module.exports = exports = (log, loga, argv) ->
|
|||||||
github: {
|
github: {
|
||||||
id: user.id
|
id: user.id
|
||||||
username: user.username
|
username: user.username
|
||||||
email: user.email
|
email: user.emails
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
when "google" then {
|
when "google" then {
|
||||||
|
Reference in New Issue
Block a user