Refactor RollingCodesService to remove configuration file handling and update initialization logic

This commit is contained in:
ImBenji
2025-08-19 21:06:41 +01:00
parent 17091bcc95
commit 4a7fec9711
3 changed files with 13 additions and 57 deletions

View File

@@ -7,25 +7,23 @@ import 'package:waylume_server/core/utils.dart';
import '../config/supabase_config.dart';
class RollingCodesService {
// Shared constants (these should match edge function constants)
static const String registrationSeed = String.fromEnvironment('REGISTRATION_SEED', defaultValue: 'default_registration_seed_change_in_production');
static const String secretSalt = String.fromEnvironment('SECRET_SALT', defaultValue: 'default_secret_salt_change_in_production');
// Shared constants (hardcoded to match edge function constants)
static const String registrationSeed = 'waylume_rolling_registration_seed_2025';
static const String secretSalt = 'waylume_operational_secret_salt_2025';
static const int timeWindowSeconds = 300; // 5 minutes
// Server configuration file path
static const String configFile = '/tmp/waylume_server_config.json';
static String? _operationalSeed;
static String? _serverId;
/// Initialize service and load/generate configuration
/// Initialize service
static Future<void> initialize() async {
_serverId = fromEnivronment('SERVER_ID');
if (_serverId == null) {
throw Exception('SERVER_ID environment variable is required');
}
await _loadConfiguration();
// No need to load configuration - server re-registers on every restart
print('Rolling codes service initialized for server $_serverId');
}
/// Generate registration rolling code
@@ -67,9 +65,9 @@ class RollingCodesService {
}
/// Set operational seed after successful registration
static Future<void> setOperationalSeed(String seed) async {
static void setOperationalSeed(String seed) {
_operationalSeed = seed;
await _saveConfiguration();
print('Operational seed set for server $_serverId');
}
/// Get current operational seed
@@ -91,42 +89,4 @@ class RollingCodesService {
return digest.toString();
}
/// Load configuration from persistent storage
static Future<void> _loadConfiguration() async {
try {
final file = File(configFile);
if (await file.exists()) {
final content = await file.readAsString();
final config = jsonDecode(content) as Map<String, dynamic>;
if (config['server_id'] == _serverId) {
_operationalSeed = config['operational_seed'];
print('Loaded operational seed for server $_serverId');
} else {
print('Configuration file exists but server_id does not match. Need to re-register.');
}
}
} catch (e) {
print('Error loading configuration: $e');
}
}
/// Save configuration to persistent storage
static Future<void> _saveConfiguration() async {
try {
final config = {
'server_id': _serverId,
'operational_seed': _operationalSeed,
'last_updated': DateTime.now().toIso8601String(),
};
final file = File(configFile);
await file.writeAsString(jsonEncode(config));
print('Configuration saved for server $_serverId');
} catch (e) {
print('Error saving configuration: $e');
throw Exception('Failed to save server configuration');
}
}
}