import 'dart:io'; import 'package:backend/authenticator.dart'; import 'package:dart_frog/dart_frog.dart'; import 'package:logging/logging.dart'; import 'package:shared_models/user.dart'; final log = Logger('auth/'); Future<Response> onRequest(RequestContext context) async { // Only allow POST requests if (context.request.method != HttpMethod.post) { return Response(statusCode: HttpStatus.methodNotAllowed); } try { // Parse the request body final body = await context.request.json() as Map<String, dynamic>; final createUserReq = CreateUserRequest.fromJson(body); // Generate token final authenticator = context.read<Authenticator>(); final token = await authenticator.generateToken(createUserReq); if (token == null) { final body = CreateUserResponse( success: false, token: null, error: 'Room ${createUserReq.roomCode} requested is not available', ).toJson(); return Response.json( statusCode: HttpStatus.badRequest, body: body, ); } // Return the token return Response.json( body: CreateUserResponse(token: token, success: true).toJson(), ); // } // on JWTParseException { // return Response.json( // statusCode: HttpStatus.badRequest, // body: {'error': 'Username is required'}, // ); } catch (e) { log.severe('Error:', e); final body = CreateUserResponse(success: false, token: null, error: 'Internal server error').toJson(); return Response.json( statusCode: HttpStatus.internalServerError, body: body, ); } }