32 lines
806 B
JavaScript
32 lines
806 B
JavaScript
import Staff from '../staff/model.mjs'
|
|
import Jwt from '../jwt.mjs'
|
|
|
|
export default class AuthHelper {
|
|
constructor(opts = {}) {
|
|
Object.assign(this, {
|
|
Staff: opts.Staff || Staff,
|
|
jwt: opts.jwt || new Jwt(),
|
|
})
|
|
}
|
|
|
|
async loginStaff(ctx) {
|
|
let staff
|
|
|
|
try {
|
|
staff = await this.Staff
|
|
.getSingleQuery(
|
|
this.Staff.query(qb => qb.where({ email: ctx.request.body.username }), [], ['*']),
|
|
true
|
|
)
|
|
|
|
await this.Staff.compare(ctx.request.body.password, staff.password)
|
|
} catch (err) {
|
|
if (err.message === 'EmptyResponse' || err.message === 'PasswordMismatch') {
|
|
ctx.throw(422, 'The email or password did not match')
|
|
}
|
|
throw err
|
|
}
|
|
|
|
return this.jwt.createToken(staff.id, staff.email, staff.level)
|
|
}
|
|
}
|