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) }) } }