Babies are free
This commit is contained in:
@@ -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()},
|
||||
);
|
||||
}
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user