nfp_sites/api/authentication/routes.mjs

40 lines
1.0 KiB
JavaScript

import Staff from '../staff/model'
import Jwt from '../jwt'
import * as google from './google'
export default class AuthRoutes {
constructor(opts = {}) {
Object.assign(this, {
Staff: opts.Staff || Staff,
jwt: opts.jwt || new Jwt(),
google: opts.google || google,
})
}
/*
* POST /api/login - Authenticate a user using social login
*
* @body {string} token - The google token to authenticate
* @returns
*
* { token: 'Authentication token' }
*/
async login(ctx) {
let output = await google.getProfile(ctx.request.body.token)
if (output.email_verified !== 'true') ctx.throw(422, 'Email was not verified with google')
if (!output.email) ctx.throw(422, 'Email was missing from google response')
let level = 1
let staff = await this.Staff
.query({ where: { email: output.email }})
.fetch({ require: false })
if (staff && staff.id && staff.get('level')) {
level = staff.get('level')
}
ctx.body = { token: this.jwt.createToken(output.email, level) }
}
}