Files

50 lines
1.5 KiB
TypeScript
Executable File

import Admin from '#base_modules/Admin/model/admin'
import { HttpContext } from '@adonisjs/core/http'
import hash from '@adonisjs/core/services/hash'
import { authLoginValidator } from '#base_modules/Auth/validators/auth_login_validator'
import db from '@adonisjs/lucid/services/db'
export default class AuthController {
async login({ request, response }: HttpContext) {
const { email, password } = await request.validateUsing(authLoginValidator)
const admin = await Admin.findBy('email', email)
if (!admin) {
return response.unauthorized({
message: 'Invalid credentials.',
})
}
const verified = await hash.verify(admin.password, password)
if (!verified) {
return response.unauthorized({
message: 'Invalid credentials.',
})
}
const token = await Admin.accessTokens.create(admin)
return response.ok({
type: 'bearer',
token: token.value?.release(),
user: admin,
})
}
async logout({ auth }: HttpContext) {
await auth.use('api').invalidateToken()
return { message: 'Logged out' }
}
async user({ response, auth }: HttpContext) {
const user = await auth.use('api').user
if (!user) return response.unauthorized()
await user.load('roles')
const roles = user.roles.map((role) => role.id)
const permissions = await db
.from('role_permissions')
.whereIn('role_id', roles)
.select('permission_slug')
return response.ok({ user, permissions: permissions.map((perm) => perm.permission_slug) })
}
}