babai/backend/routes/auth/index.dart
2025-01-29 17:50:44 -07:00

57 lines
1.4 KiB
Dart

import 'dart:io';
import 'package:backend/extensions/request_context.dart';
import 'package:backend/store.dart';
import 'package:dart_frog/dart_frog.dart';
import 'package:dart_jsonwebtoken/dart_jsonwebtoken.dart';
import 'package:shared_models/models/user.dart';
import 'package:uuid/uuid.dart';
Future<Response> onRequest(RequestContext context) async {
// Only allow POST requests
if (context.request.method != HttpMethod.post) {
return Response(statusCode: HttpStatus.methodNotAllowed);
}
try {
// Generate a new user ID
final userId = const Uuid().v4();
// Create JWT token
final jwt = JWT(
{
'userId': userId,
'iat': DateTime.now().millisecondsSinceEpoch,
},
);
// Sign the JWT token (store this secret in environment variables in production)
final token = jwt.sign(
SecretKey(jwtSecret),
expiresIn: const Duration(days: 30), // Token expires in 30 days
);
// Create new user
final user = User(
id: userId,
token: token,
createdAt: DateTime.now(),
);
// Store user in memory
MemoryStore.addUser(user);
// Return the user credentials
return Response.json(
body: {
'userId': userId,
'token': token,
},
);
} catch (e) {
return Response.json(
statusCode: HttpStatus.internalServerError,
body: {'error': e.toString()},
);
}
}