Added GitHub and Slack authentication integrations
This commit is contained in:
parent
ee16b82f17
commit
9976842e45
@ -29,6 +29,10 @@ defaults:
|
|||||||
enabled: false
|
enabled: false
|
||||||
facebook:
|
facebook:
|
||||||
enabled: false
|
enabled: false
|
||||||
|
github:
|
||||||
|
enabled: false
|
||||||
|
slack:
|
||||||
|
enabled: false
|
||||||
db: mongodb://localhost/wiki
|
db: mongodb://localhost/wiki
|
||||||
sessionSecret: null
|
sessionSecret: null
|
||||||
admin: null
|
admin: null
|
||||||
|
File diff suppressed because one or more lines are too long
@ -68,6 +68,16 @@ auth:
|
|||||||
enabled: false
|
enabled: false
|
||||||
clientId: FACEBOOK_APP_ID
|
clientId: FACEBOOK_APP_ID
|
||||||
clientSecret: FACEBOOK_APP_SECRET
|
clientSecret: FACEBOOK_APP_SECRET
|
||||||
|
github:
|
||||||
|
enabled: false
|
||||||
|
clientId: GITHUB_CLIENT_ID
|
||||||
|
clientSecret: GITHUB_CLIENT_SECRET
|
||||||
|
slack:
|
||||||
|
enabled: false
|
||||||
|
clientId: SLACK_CLIENT_ID
|
||||||
|
clientSecret: SLACK_CLIENT_SECRET
|
||||||
|
ldap:
|
||||||
|
enabled: false
|
||||||
|
|
||||||
# ---------------------------------------------------------------------
|
# ---------------------------------------------------------------------
|
||||||
# Secret key to use when encrypting sessions
|
# Secret key to use when encrypting sessions
|
||||||
|
@ -123,7 +123,7 @@ router.post('/users/create', (req, res) => {
|
|||||||
|
|
||||||
if (!validator.isEmail(nUsr.email)) {
|
if (!validator.isEmail(nUsr.email)) {
|
||||||
return res.status(400).json({ msg: 'Invalid email address' })
|
return res.status(400).json({ msg: 'Invalid email address' })
|
||||||
} else if (!validator.isIn(nUsr.provider, ['local', 'google', 'windowslive', 'facebook'])) {
|
} else if (!validator.isIn(nUsr.provider, ['local', 'google', 'windowslive', 'facebook', 'github', 'slack'])) {
|
||||||
return res.status(400).json({ msg: 'Invalid provider' })
|
return res.status(400).json({ msg: 'Invalid provider' })
|
||||||
} else if (nUsr.provider === 'local' && !validator.isLength(nUsr.password, { min: 6 })) {
|
} else if (nUsr.provider === 'local' && !validator.isLength(nUsr.password, { min: 6 })) {
|
||||||
return res.status(400).json({ msg: 'Password too short or missing' })
|
return res.status(400).json({ msg: 'Password too short or missing' })
|
||||||
|
@ -64,10 +64,14 @@ router.post('/login', bruteforce.prevent, function (req, res, next) {
|
|||||||
router.get('/login/ms', passport.authenticate('windowslive', { scope: ['wl.signin', 'wl.basic', 'wl.emails'] }))
|
router.get('/login/ms', passport.authenticate('windowslive', { scope: ['wl.signin', 'wl.basic', 'wl.emails'] }))
|
||||||
router.get('/login/google', passport.authenticate('google', { scope: ['profile', 'email'] }))
|
router.get('/login/google', passport.authenticate('google', { scope: ['profile', 'email'] }))
|
||||||
router.get('/login/facebook', passport.authenticate('facebook', { scope: ['public_profile', 'email'] }))
|
router.get('/login/facebook', passport.authenticate('facebook', { scope: ['public_profile', 'email'] }))
|
||||||
|
router.get('/login/github', passport.authenticate('github', { scope: ['user:email'] }))
|
||||||
|
router.get('/login/slack', passport.authenticate('slack', { scope: ['identity.basic', 'identity.email'] }))
|
||||||
|
|
||||||
router.get('/login/ms/callback', passport.authenticate('windowslive', { failureRedirect: '/login', successRedirect: '/' }))
|
router.get('/login/ms/callback', passport.authenticate('windowslive', { failureRedirect: '/login', successRedirect: '/' }))
|
||||||
router.get('/login/google/callback', passport.authenticate('google', { failureRedirect: '/login', successRedirect: '/' }))
|
router.get('/login/google/callback', passport.authenticate('google', { failureRedirect: '/login', successRedirect: '/' }))
|
||||||
router.get('/login/facebook/callback', passport.authenticate('facebook', { failureRedirect: '/login', successRedirect: '/' }))
|
router.get('/login/facebook/callback', passport.authenticate('facebook', { failureRedirect: '/login', successRedirect: '/' }))
|
||||||
|
router.get('/login/github/callback', passport.authenticate('github', { failureRedirect: '/login', successRedirect: '/' }))
|
||||||
|
router.get('/login/slack/callback', passport.authenticate('slack', { failureRedirect: '/login', successRedirect: '/' }))
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Logout
|
* Logout
|
||||||
|
@ -3,6 +3,8 @@
|
|||||||
"local": "Local",
|
"local": "Local",
|
||||||
"windowslive": "Microsoft Account",
|
"windowslive": "Microsoft Account",
|
||||||
"google": "Google ID",
|
"google": "Google ID",
|
||||||
"facebook": "Facebook"
|
"facebook": "Facebook",
|
||||||
|
"github": "GitHub",
|
||||||
|
"slack": "Slack"
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -50,10 +50,14 @@ userSchema.statics.processProfile = (profile) => {
|
|||||||
primaryEmail = (e) ? e.value : _.first(profile.emails).value
|
primaryEmail = (e) ? e.value : _.first(profile.emails).value
|
||||||
} else if (_.isString(profile.email) && profile.email.length > 5) {
|
} else if (_.isString(profile.email) && profile.email.length > 5) {
|
||||||
primaryEmail = profile.email
|
primaryEmail = profile.email
|
||||||
|
} else if (profile.user && profile.user.email && profile.user.email.length > 5) {
|
||||||
|
primaryEmail = profile.user.email
|
||||||
} else {
|
} else {
|
||||||
return Promise.reject(new Error('Invalid User Email'))
|
return Promise.reject(new Error('Invalid User Email'))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
profile.provider = _.lowerCase(profile.provider)
|
||||||
|
|
||||||
return db.User.findOneAndUpdate({
|
return db.User.findOneAndUpdate({
|
||||||
email: primaryEmail,
|
email: primaryEmail,
|
||||||
provider: profile.provider
|
provider: profile.provider
|
||||||
|
@ -83,10 +83,7 @@
|
|||||||
"multer": "^1.2.1",
|
"multer": "^1.2.1",
|
||||||
"ora": "^1.1.0",
|
"ora": "^1.1.0",
|
||||||
"passport": "^0.3.2",
|
"passport": "^0.3.2",
|
||||||
"passport-facebook": "^2.1.1",
|
|
||||||
"passport-google-oauth20": "^1.0.0",
|
|
||||||
"passport-local": "^1.0.0",
|
"passport-local": "^1.0.0",
|
||||||
"passport-windowslive": "^1.0.2",
|
|
||||||
"passport.socketio": "^3.7.0",
|
"passport.socketio": "^3.7.0",
|
||||||
"pm2": "^2.4.0",
|
"pm2": "^2.4.0",
|
||||||
"pug": "^2.0.0-beta11",
|
"pug": "^2.0.0-beta11",
|
||||||
|
@ -50,18 +50,26 @@ html
|
|||||||
span Log in using...
|
span Log in using...
|
||||||
if appconfig.auth.microsoft && appconfig.auth.microsoft.enabled
|
if appconfig.auth.microsoft && appconfig.auth.microsoft.enabled
|
||||||
button.ms(onclick='window.location.assign("/login/ms")')
|
button.ms(onclick='window.location.assign("/login/ms")')
|
||||||
i.fa.fa-windows
|
i.icon-windows2
|
||||||
span Microsoft Account
|
span Microsoft Account
|
||||||
if appconfig.auth.google && appconfig.auth.google.enabled
|
if appconfig.auth.google && appconfig.auth.google.enabled
|
||||||
button.google(onclick='window.location.assign("/login/google")')
|
button.google(onclick='window.location.assign("/login/google")')
|
||||||
i.fa.fa-google
|
i.icon-google
|
||||||
span Google ID
|
span Google ID
|
||||||
if appconfig.auth.facebook && appconfig.auth.facebook.enabled
|
if appconfig.auth.facebook && appconfig.auth.facebook.enabled
|
||||||
button.facebook(onclick='window.location.assign("/login/facebook")')
|
button.facebook(onclick='window.location.assign("/login/facebook")')
|
||||||
i.fa.fa-facebook
|
i.icon-facebook
|
||||||
span Facebook
|
span Facebook
|
||||||
|
if appconfig.auth.github && appconfig.auth.github.enabled
|
||||||
|
button.github(onclick='window.location.assign("/login/github")')
|
||||||
|
i.icon-github
|
||||||
|
span GitHub
|
||||||
|
if appconfig.auth.slack && appconfig.auth.slack.enabled
|
||||||
|
button.slack(onclick='window.location.assign("/login/slack")')
|
||||||
|
i.icon-slack
|
||||||
|
span Slack
|
||||||
#copyright
|
#copyright
|
||||||
= t('footer.poweredby') + ' '
|
= t('footer.poweredby') + ' '
|
||||||
a.icon(href='https://github.com/Requarks/wiki')
|
a.icon(href='https://github.com/Requarks/wiki')
|
||||||
i.icon-github
|
i.icon-github
|
||||||
a(href='https://github.com/Requarks/wiki') Requarks Wiki
|
a(href='https://wiki.requarks.io/') Wiki.js
|
||||||
|
@ -21,6 +21,10 @@
|
|||||||
option(value='google') Google ID
|
option(value='google') Google ID
|
||||||
if appconfig.auth.facebook.enabled
|
if appconfig.auth.facebook.enabled
|
||||||
option(value='facebook') Facebook
|
option(value='facebook') Facebook
|
||||||
|
if appconfig.auth.github.enabled
|
||||||
|
option(value='github') GitHub
|
||||||
|
if appconfig.auth.slack.enabled
|
||||||
|
option(value='slack') Slack
|
||||||
section(v-if='provider=="local"')
|
section(v-if='provider=="local"')
|
||||||
label.label Password:
|
label.label Password:
|
||||||
p.control.is-fullwidth
|
p.control.is-fullwidth
|
||||||
|
@ -37,7 +37,9 @@ block adminContent
|
|||||||
when 'local': i.icon-server
|
when 'local': i.icon-server
|
||||||
when 'windowslive': i.icon-windows2.is-blue
|
when 'windowslive': i.icon-windows2.is-blue
|
||||||
when 'google': i.icon-google.is-blue
|
when 'google': i.icon-google.is-blue
|
||||||
when 'facebook': i.icon-facebook.is-purple
|
when 'facebook': i.icon-facebook.is-indigo
|
||||||
|
when 'github': i.icon-github.is-grey
|
||||||
|
when 'slack': i.icon-slack.is-purple
|
||||||
default: i.icon-warning
|
default: i.icon-warning
|
||||||
= t('auth:providers.' + user.provider)
|
= t('auth:providers.' + user.provider)
|
||||||
label.label Member since
|
label.label Member since
|
||||||
|
@ -34,8 +34,14 @@ block adminContent
|
|||||||
i.icon-google.is-blue
|
i.icon-google.is-blue
|
||||||
| Google ID
|
| Google ID
|
||||||
when 'facebook'
|
when 'facebook'
|
||||||
i.icon-facebook.is-purple
|
i.icon-facebook.is-indigo
|
||||||
| Facebook
|
| Facebook
|
||||||
|
when 'github'
|
||||||
|
i.icon-github.is-blue-grey
|
||||||
|
| GitHub
|
||||||
|
when 'slack'
|
||||||
|
i.icon-slack.is-purple
|
||||||
|
| Slack
|
||||||
default: i.icon-warning
|
default: i.icon-warning
|
||||||
td.is-centered= userMoment(usr.createdAt).format('lll')
|
td.is-centered= userMoment(usr.createdAt).format('lll')
|
||||||
td.is-centered= userMoment(usr.updatedAt).format('lll')
|
td.is-centered= userMoment(usr.updatedAt).format('lll')
|
||||||
|
@ -43,6 +43,12 @@ block adminContent
|
|||||||
when 'facebook'
|
when 'facebook'
|
||||||
i.icon-facebook.is-purple
|
i.icon-facebook.is-purple
|
||||||
| Facebook
|
| Facebook
|
||||||
|
when 'github'
|
||||||
|
i.icon-github.is-blue-grey
|
||||||
|
| GitHub
|
||||||
|
when 'slack'
|
||||||
|
i.icon-slack.is-purple
|
||||||
|
| Slack
|
||||||
default: i.icon-warning
|
default: i.icon-warning
|
||||||
td.is-centered= userMoment(usr.createdAt).format('lll')
|
td.is-centered= userMoment(usr.createdAt).format('lll')
|
||||||
td.is-centered= userMoment(usr.updatedAt).format('lll')
|
td.is-centered= userMoment(usr.updatedAt).format('lll')
|
||||||
|
Loading…
Reference in New Issue
Block a user