Babies are free

This commit is contained in:
Nate Anderson
2025-01-29 17:50:44 -07:00
commit b99560e34b
35 changed files with 2533 additions and 0 deletions
@@ -0,0 +1,15 @@
import 'dart:io';
import 'package:dart_frog/dart_frog.dart';
import 'package:dart_jsonwebtoken/dart_jsonwebtoken.dart';
final String jwtSecret = Platform.environment['JWT_SECRET'] ?? 'googoogaga-key';
extension RequestContextX on RequestContext {
String get userId {
final authHeader = request.headers['authorization'] ?? '';
final token = authHeader.replaceAll('Bearer ', '');
final jwt = JWT.verify(token, SecretKey(jwtSecret));
return jwt.payload['userId'] as String;
}
}
@@ -0,0 +1,33 @@
import 'dart:io';
import 'package:backend/extensions/request_context.dart';
import 'package:dart_frog/dart_frog.dart';
import 'package:dart_jsonwebtoken/dart_jsonwebtoken.dart';
Middleware authMiddleware() {
return (handler) {
return (context) async {
// Get the authorization header
final authHeader = context.request.headers['authorization'];
if (authHeader == null || !authHeader.startsWith('Bearer ')) {
return Response(statusCode: HttpStatus.unauthorized);
}
final token = authHeader.substring(7);
try {
// Verify the JWT token
JWT.verify(
token,
SecretKey(jwtSecret),
);
// If verification successful, continue to the route handler
return handler(context);
} catch (e) {
return Response.json(
statusCode: HttpStatus.unauthorized,
body: {'error': e.toString()},
);
}
};
};
}
+60
View File
@@ -0,0 +1,60 @@
import 'package:shared_models/models/translation_request.dart';
import 'package:shared_models/models/user.dart';
class MemoryStore {
static final Map<String, TranslationRequest> _googooTranslations = {};
static final Map<String, TranslationRequest> _humanTranslations = {};
static final Map<String, User> _users = {};
// User methods
static User? getUser(String userId) => _users[userId];
static void addUser(User user) => _users[user.id] = user;
// Googoo translation methods
static TranslationRequest? getGoogooTranslation(String id, String userId) {
final translation = _googooTranslations[id];
if (translation?.userId != userId) return null;
return translation;
}
static void addGoogooTranslation(TranslationRequest translation) {
_googooTranslations[translation.id] = translation;
}
static List<TranslationRequest> getUserGoogooTranslations(String userId) {
return _googooTranslations.values.where((t) => t.userId == userId).toList();
}
// Human translation methods
static TranslationRequest? getHumanTranslation(String id, String userId) {
final translation = _humanTranslations[id];
if (translation?.userId != userId) return null;
return translation;
}
static void addHumanTranslation(TranslationRequest translation) {
_humanTranslations[translation.id] = translation;
}
static List<TranslationRequest> getUserHumanTranslations(String userId) {
return _humanTranslations.values.where((t) => t.userId == userId).toList();
}
// Cleanup methods
static void removeOldTranslations(Duration maxAge) {
final cutoffTime = DateTime.now().subtract(maxAge);
_googooTranslations.removeWhere(
(_, translation) => translation.timestamp.isBefore(cutoffTime),
);
_humanTranslations.removeWhere(
(_, translation) => translation.timestamp.isBefore(cutoffTime),
);
}
// For testing/development
static void clearAll() {
_googooTranslations.clear();
_humanTranslations.clear();
_users.clear();
}
}