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

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