50 lines
1.5 KiB
TypeScript
Executable File
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) })
|
|
}
|
|
}
|