using Newtonsoft.Json; using OF_DL.Entities; using OF_DL.Helpers.Interfaces; using Serilog; namespace OF_DL.Services { public class AuthService(IAuthHelper authHelper) : IAuthService { public Auth? CurrentAuth { get; set; } public async Task LoadFromFileAsync(string filePath = "auth.json") { try { if (!File.Exists(filePath)) { Log.Debug("Auth file not found: {FilePath}", filePath); return false; } var json = await File.ReadAllTextAsync(filePath); CurrentAuth = JsonConvert.DeserializeObject(json); Log.Debug("Auth file loaded and deserialized successfully"); return CurrentAuth != null; } catch (Exception ex) { Log.Error(ex, "Failed to load auth from file"); return false; } } public async Task LoadFromBrowserAsync() { try { bool runningInDocker = Environment.GetEnvironmentVariable("OFDL_DOCKER") != null; await authHelper.SetupBrowser(runningInDocker); CurrentAuth = await authHelper.GetAuthFromBrowser(); return CurrentAuth != null; } catch (Exception ex) { Log.Error(ex, "Failed to load auth from browser"); return false; } } public async Task SaveToFileAsync(string filePath = "auth.json") { if (CurrentAuth == null) { Log.Warning("Attempted to save null auth to file"); return; } try { var json = JsonConvert.SerializeObject(CurrentAuth, Formatting.Indented); await File.WriteAllTextAsync(filePath, json); Log.Debug($"Auth saved to file: {filePath}"); } catch (Exception ex) { Log.Error(ex, "Failed to save auth to file"); } } } }