You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
991 B
39 lines
991 B
import UserModel from '../models/user'
|
|
|
|
function genericStrategy(provider) {
|
|
return async (_accessToken, _refreshToken, profile, done) => {
|
|
if (!profile.emails?.[0].value) {
|
|
console.error(`${provider} Email permission not provided`)
|
|
return done(null, false)
|
|
}
|
|
|
|
try {
|
|
const user = await UserModel.findOne({ provider, providerId: profile.id }).exec()
|
|
|
|
console.info(`${provider} user found. Logging in.`)
|
|
|
|
if (user) {
|
|
return done(null, user)
|
|
}
|
|
|
|
console.info(`${provider} user not found. Creating.`)
|
|
|
|
const newUser = new UserModel({
|
|
providerId: profile.id,
|
|
name: profile.displayName,
|
|
provider,
|
|
email: profile.emails?.[0].value,
|
|
photo: profile.photos?.[0].value.replace('_normal', '').replace('=s96-c', ''),
|
|
}).save((err) => {
|
|
if (err) throw err
|
|
})
|
|
|
|
return done(null, newUser)
|
|
} catch (e) {
|
|
return done(e)
|
|
}
|
|
}
|
|
}
|
|
|
|
export default genericStrategy
|