finishing adding alt identity
This commit is contained in:
@ -77,34 +77,38 @@ update_footer = (ownerName, isAuthenticated) ->
|
|||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
claim_wiki()
|
claim_wiki()
|
||||||
else
|
else
|
||||||
$('footer > #security').append "<a href='#' id='addAltAuth' class='foot-item' title='Add Alternative Credentials'><i class='fa fa-user-plus fa-lg fa-fw'></i></a>"
|
# only offer to add alternative id if using persona - at least initially.
|
||||||
$('footer > #security > #addAltAuth').click (e) ->
|
if settings.usingPersona
|
||||||
e.preventDefault
|
$('footer > #security').append "<a href='#' id='addAltAuth' class='foot-item' title='Add Alternative Credentials'><i class='fa fa-user-plus fa-lg fa-fw'></i></a>"
|
||||||
|
$('footer > #security > #addAltAuth').click (e) ->
|
||||||
|
e.preventDefault
|
||||||
|
|
||||||
w = WinChan.open({
|
w = WinChan.open({
|
||||||
url: settings.dialogAddAltURL
|
url: settings.dialogAddAltURL
|
||||||
relay_url: settings.relayURL
|
relay_url: settings.relayURL
|
||||||
window_features: "menubar=0, location=0, resizable=0, scrollbars=0, status=0, dialog=1, width=700, height=375"
|
window_features: "menubar=0, location=0, resizable=0, scrollbars=0, status=0, dialog=1, width=700, height=375"
|
||||||
params: {}
|
params: {}
|
||||||
}, (err, r) ->
|
}, (err, r) ->
|
||||||
if err
|
if err
|
||||||
console.log err
|
console.log err
|
||||||
else
|
else
|
||||||
# add call to add alternative to owner here
|
# add call to add alternative to owner here
|
||||||
console.log 'send request to add owner identity'
|
console.log 'send request to add owner identity'
|
||||||
myInit = {
|
myInit = {
|
||||||
method: 'GET'
|
method: 'GET'
|
||||||
cache: 'no-cache'
|
cache: 'no-cache'
|
||||||
mode: 'same-origin'
|
mode: 'same-origin'
|
||||||
credentials: 'include'
|
credentials: 'include'
|
||||||
}
|
}
|
||||||
fetch '/auth/addAltAuth', myInit
|
fetch '/auth/addAltAuth', myInit
|
||||||
.then (response) ->
|
.then (response) ->
|
||||||
if response.ok
|
if response.ok
|
||||||
console.log 'Alternative Identity added', response
|
console.log 'Alternative Identity added', response
|
||||||
else
|
settings.usingPersona = false
|
||||||
console.log 'Attempt to claim site failed', response
|
update_footer ownerName, isAuthenticated
|
||||||
)
|
else
|
||||||
|
console.log 'Attempt to claim site failed', response
|
||||||
|
)
|
||||||
else
|
else
|
||||||
if !isClaimed
|
if !isClaimed
|
||||||
signonTitle = 'Claim this Wiki'
|
signonTitle = 'Claim this Wiki'
|
||||||
|
@ -59,6 +59,22 @@ module.exports = exports = (log, loga, argv) ->
|
|||||||
# Mozilla Persona service closes on
|
# Mozilla Persona service closes on
|
||||||
personaEnd = new Date('2016-11-30')
|
personaEnd = new Date('2016-11-30')
|
||||||
|
|
||||||
|
watchForOwnerChange = ->
|
||||||
|
# we watch for owner changes, so we can update the information held here
|
||||||
|
fs.watch(idFile, (eventType, filename) ->
|
||||||
|
# re-read the owner file
|
||||||
|
fs.readFile(idFile, (err, data) ->
|
||||||
|
if err
|
||||||
|
console.log 'Error reading ', idFile, err
|
||||||
|
return
|
||||||
|
owner = JSON.parse(data)
|
||||||
|
usingPersona = false
|
||||||
|
if _.isEmpty(_.intersection(_.keys(owner), ids))
|
||||||
|
if _.has(owner, 'persona')
|
||||||
|
usingPersona = true
|
||||||
|
ownerName = owner.name
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
#### Public stuff ####
|
#### Public stuff ####
|
||||||
|
|
||||||
@ -71,8 +87,11 @@ 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)
|
||||||
if _.has(owner, 'persona')
|
# we only enable persona if it is the only owner information.
|
||||||
usingPersona = true
|
if _.isEmpty(_.intersection(_.keys(owner), ids))
|
||||||
|
if _.has(owner, 'persona')
|
||||||
|
usingPersona = true
|
||||||
|
watchForOwnerChange()
|
||||||
cb())
|
cb())
|
||||||
else
|
else
|
||||||
owner = ''
|
owner = ''
|
||||||
@ -93,6 +112,7 @@ module.exports = exports = (log, loga, argv) ->
|
|||||||
console.log "Claiming wiki #{wikiName} for #{id}"
|
console.log "Claiming wiki #{wikiName} for #{id}"
|
||||||
owner = id
|
owner = id
|
||||||
ownerName = owner.name
|
ownerName = owner.name
|
||||||
|
watchForOwnerChange()
|
||||||
cb())
|
cb())
|
||||||
else
|
else
|
||||||
cb('Already Claimed')
|
cb('Already Claimed')
|
||||||
@ -113,7 +133,6 @@ module.exports = exports = (log, loga, argv) ->
|
|||||||
else
|
else
|
||||||
try
|
try
|
||||||
idProvider = _.head(_.keys(req.session.passport.user))
|
idProvider = _.head(_.keys(req.session.passport.user))
|
||||||
console.log 'isAuth - idProvider: ', idProvider
|
|
||||||
switch idProvider
|
switch idProvider
|
||||||
when 'github', 'google', 'twitter'
|
when 'github', 'google', 'twitter'
|
||||||
if _.isEqual(owner[idProvider].id, req.session.passport.user[idProvider].id)
|
if _.isEqual(owner[idProvider].id, req.session.passport.user[idProvider].id)
|
||||||
@ -238,7 +257,6 @@ module.exports = exports = (log, loga, argv) ->
|
|||||||
PersonaStrategy = require('persona-pass').Strategy
|
PersonaStrategy = require('persona-pass').Strategy
|
||||||
|
|
||||||
personaAudience = callbackProtocol + '//' + callbackHost
|
personaAudience = callbackProtocol + '//' + callbackHost
|
||||||
console.log 'Persona Audience: ', personaAudience
|
|
||||||
|
|
||||||
personaStrategyName = callbackHost + 'Persona'
|
personaStrategyName = callbackHost + 'Persona'
|
||||||
|
|
||||||
@ -290,8 +308,6 @@ module.exports = exports = (log, loga, argv) ->
|
|||||||
|
|
||||||
app.get '/auth/loginDialog', (req, res) ->
|
app.get '/auth/loginDialog', (req, res) ->
|
||||||
referer = req.headers.referer
|
referer = req.headers.referer
|
||||||
console.log "logging into: ", url.parse(referer).hostname
|
|
||||||
|
|
||||||
schemeButtons = []
|
schemeButtons = []
|
||||||
_(ids).forEach (scheme) ->
|
_(ids).forEach (scheme) ->
|
||||||
switch scheme
|
switch scheme
|
||||||
@ -316,8 +332,6 @@ module.exports = exports = (log, loga, argv) ->
|
|||||||
|
|
||||||
app.get '/auth/personaLogin', (req, res) ->
|
app.get '/auth/personaLogin', (req, res) ->
|
||||||
referer = req.headers.referer
|
referer = req.headers.referer
|
||||||
console.log "logging into: ", url.parse(referer).hostname
|
|
||||||
|
|
||||||
schemeButtons = []
|
schemeButtons = []
|
||||||
if Date.now() < personaEnd
|
if Date.now() < personaEnd
|
||||||
schemeButtons.push({
|
schemeButtons.push({
|
||||||
@ -364,11 +378,10 @@ module.exports = exports = (log, loga, argv) ->
|
|||||||
res.render(path.join(__dirname, '..', 'views', 'personaDialog.html'), info)
|
res.render(path.join(__dirname, '..', 'views', 'personaDialog.html'), info)
|
||||||
|
|
||||||
app.get '/auth/loginDone', (req, res) ->
|
app.get '/auth/loginDone', (req, res) ->
|
||||||
console.log "Done: ", req.session.passport
|
|
||||||
referer = req.headers.referer
|
referer = req.headers.referer
|
||||||
if referer is undefined
|
if referer is undefined
|
||||||
referer = ''
|
referer = ''
|
||||||
console.log 'loginDone - referer: ', referer
|
|
||||||
info = {
|
info = {
|
||||||
wikiName: if useHttps
|
wikiName: if useHttps
|
||||||
url.parse(referer).hostname
|
url.parse(referer).hostname
|
||||||
@ -390,16 +403,11 @@ module.exports = exports = (log, loga, argv) ->
|
|||||||
app.get '/auth/addAuthDialog', (req, res) ->
|
app.get '/auth/addAuthDialog', (req, res) ->
|
||||||
# only makes sense to add alternative authentication scheme if
|
# only makes sense to add alternative authentication scheme if
|
||||||
# this the user is authenticated
|
# this the user is authenticated
|
||||||
console.log 'User:', getUser(req)
|
|
||||||
if getUser(req)
|
if getUser(req)
|
||||||
|
|
||||||
referer = req.headers.referer
|
referer = req.headers.referer
|
||||||
|
|
||||||
console.log "User: ", owner
|
currentSchemes = _.keys(user)
|
||||||
currentSchemes = _.keys(owner)
|
|
||||||
console.log "currentSchemes: ", currentSchemes
|
|
||||||
altSchemes = _.difference(ids, currentSchemes)
|
altSchemes = _.difference(ids, currentSchemes)
|
||||||
console.log "altSchemes: ", altSchemes
|
|
||||||
|
|
||||||
schemeButtons = []
|
schemeButtons = []
|
||||||
_(altSchemes).forEach (scheme) ->
|
_(altSchemes).forEach (scheme) ->
|
||||||
@ -430,7 +438,7 @@ module.exports = exports = (log, loga, argv) ->
|
|||||||
if isAuthorized(req)
|
if isAuthorized(req)
|
||||||
next()
|
next()
|
||||||
else
|
else
|
||||||
console.log 'rejecting', req.path
|
console.log 'rejecting - not authorized', req.path
|
||||||
res.sendStatus(403)
|
res.sendStatus(403)
|
||||||
|
|
||||||
app.get '/auth/addAltAuth', authorized, (req, res) ->
|
app.get '/auth/addAltAuth', authorized, (req, res) ->
|
||||||
@ -439,10 +447,46 @@ module.exports = exports = (log, loga, argv) ->
|
|||||||
|
|
||||||
user = req.session.passport.user
|
user = req.session.passport.user
|
||||||
|
|
||||||
console.log 'User: ', user
|
idProviders = _.keys(user)
|
||||||
console.log 'Owner: ', owner
|
ids = {}
|
||||||
|
idProviders.forEach (idProvider) ->
|
||||||
console.log 'In add alt auth...'
|
id = switch idProvider
|
||||||
|
when "twitter" then {
|
||||||
|
name: user.twitter.displayName
|
||||||
|
twitter: {
|
||||||
|
id: user.twitter.id
|
||||||
|
username: user.twitter.username
|
||||||
|
}
|
||||||
|
}
|
||||||
|
when "github" then {
|
||||||
|
name: user.github.displayName
|
||||||
|
github: {
|
||||||
|
id: user.github.id
|
||||||
|
username: user.github.username
|
||||||
|
email: user.github.emails
|
||||||
|
}
|
||||||
|
}
|
||||||
|
when "google" then {
|
||||||
|
name: user.google.displayName
|
||||||
|
google: {
|
||||||
|
id: user.google.id
|
||||||
|
emails: user.google.emails
|
||||||
|
}
|
||||||
|
}
|
||||||
|
# only needed until persona closes
|
||||||
|
when "persona" then {
|
||||||
|
name: user.persona.email
|
||||||
|
.substr(0, user.persona.email.indexOf('@'))
|
||||||
|
.split('.')
|
||||||
|
.join(' ')
|
||||||
|
.toLowerCase()
|
||||||
|
.replace(/(^| )(\w)/g, (x) ->
|
||||||
|
return x.toUpperCase())
|
||||||
|
persona: {
|
||||||
|
email: user.persona.email
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ids = _.merge(ids, id)
|
||||||
|
|
||||||
wikiDir = path.resolve(argv.data, '..')
|
wikiDir = path.resolve(argv.data, '..')
|
||||||
statusDir = argv.status.split(path.sep).slice(-1)[0]
|
statusDir = argv.status.split(path.sep).slice(-1)[0]
|
||||||
@ -458,25 +502,22 @@ module.exports = exports = (log, loga, argv) ->
|
|||||||
console.log 'Error reading ', file, err
|
console.log 'Error reading ', file, err
|
||||||
return
|
return
|
||||||
siteOwner = JSON.parse(data)
|
siteOwner = JSON.parse(data)
|
||||||
console.log file , _.intersectionWith(_.entries(siteOwner), _.entries(user), _.isEqual)
|
|
||||||
|
|
||||||
if _.intersectionWith(_.entries(siteOwner), _.entries(user), _.isEqual).length > 0
|
if _.intersectionWith(_.entries(siteOwner), _.entries(user), _.isEqual).length > 0
|
||||||
console.log "Site: ", file, "is mine...\n\n"
|
updateOwner = _.merge(user, siteOwner)
|
||||||
console.log "User: ", user
|
fs.writeFile(path.join(wikiDir, file), JSON.stringify(ids), (err) ->
|
||||||
console.log "Owner (orig): ", siteOwner
|
if err
|
||||||
updateOwner = _.merge(siteOwner, user)
|
console.log 'Error writing ', file, err
|
||||||
console.log "Owner (updated): ", updateOwner
|
# if the write works the change will be picked up by fs.watch() in watchForOwnerChange
|
||||||
else
|
# so there is nothing more to do here.
|
||||||
console.log "Site: ", file, " not mine\n\n"
|
)
|
||||||
|
)
|
||||||
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
app.get '/auth/claim-wiki', (req, res) ->
|
app.get '/auth/claim-wiki', (req, res) ->
|
||||||
if owner
|
if owner
|
||||||
console.log 'Claim Request Ignored: Wiki already has owner'
|
console.log 'Claim Request Ignored: Wiki already has owner - ', wikiName
|
||||||
res.sendStatus(403)
|
res.sendStatus(403)
|
||||||
else
|
else
|
||||||
user = req.session.passport.user
|
user = req.session.passport.user
|
||||||
|
Reference in New Issue
Block a user