import type { HttpContext } from '@adonisjs/core/http' import { registerValidator, loginValidator } from '#validators/auth' import User from '#models/user' import logger from '@adonisjs/core/services/logger' export default class AuthController { async register({ request }: HttpContext) { try { const data = await request.validateUsing(registerValidator) const user = await User.create(data) logger.info('User registered: %s', user.fullName, user.email, request.ip()) return User.accessTokens.create(user) } catch(error) { logger.error('Registration failed: %s',error) throw(error) } } async login({ request }: HttpContext) { try { const { email, password } = await request.validateUsing(loginValidator) const user = await User.verifyCredentials(email, password) logger.info('User logged in: %s', email) return User.accessTokens.create(user) } catch(error) { logger.error('Login failed: %s',error) throw error } } async logout({ auth }: HttpContext) { const user = auth.user! logger.info('User logout: %s', auth.getUserOrFail().email) try { await User.accessTokens.delete(user, user.currentAccessToken.identifier) return { message: 'User logged out' } } catch(error){ logger.error('Logout failed: %s',error) throw(error) } } async me({ auth }: HttpContext) { if (await auth.check()) { return { user: auth.user } } else { await User.accessTokens.delete(auth.user!, auth.user!.currentAccessToken.identifier) return { message: 'Unauthorized' } } } }