diff --git a/BotLooter/Program.cs b/BotLooter/Program.cs index ee9fa6a..b09eeab 100644 --- a/BotLooter/Program.cs +++ b/BotLooter/Program.cs @@ -17,7 +17,7 @@ Console.ReadKey(); }; -var version = new Version(0, 1, 0); +var version = new Version(0, 1, 1); var versionChecker = new VersionChecker(Log.Logger); await versionChecker.Check(version); diff --git a/BotLooter/Resources/SteamAccountCredentials.cs b/BotLooter/Resources/SteamAccountCredentials.cs index 83792c0..9177c17 100644 --- a/BotLooter/Resources/SteamAccountCredentials.cs +++ b/BotLooter/Resources/SteamAccountCredentials.cs @@ -28,7 +28,9 @@ public SteamAccountCredentials(string login, string password, SteamGuardAccount { return (null, $"Папки с секретами '{secretsDirectory}' не существует"); } - + + var secrets = await GetSecretFiles(secretsDirectory); + var accounts = new List(); var accountsFileLines = await File.ReadAllLinesAsync(accountsFile); @@ -50,37 +52,71 @@ public SteamAccountCredentials(string login, string password, SteamGuardAccount var login = split[0]; var password = split[1]; - var secretFilePath = Path.Combine(secretsDirectory, login + ".maFile"); + var secret = FindSecretFile(secrets, login); - if (!File.Exists(secretFilePath)) + if (secret is null) { - Log.Logger.Warning("{Login} - Не найден секретный файл для аккаунта", login); + Log.Logger.Warning("{Login} - Не найден секретный файл", login); continue; } - var secretFileContents = await File.ReadAllTextAsync(secretFilePath); - - SteamGuardAccount? steamGuardAccount; + if (secret is not { SharedSecret: not null, IdentitySecret: not null, DeviceID: not null}) + { + Log.Logger.Warning("{Login} - В секретном файле отсутствует shared_secret, identity_secret или device_id", login); + continue; + } + + accounts.Add(new SteamAccountCredentials(login, password, secret)); + } + + return (accounts, ""); + } + private static async Task> GetSecretFiles(string directoryPath) + { + var steamGuardAccounts = new List(); + + var files = Directory.GetFiles(directoryPath); + + foreach (var filePath in files) + { try { - steamGuardAccount = JsonConvert.DeserializeObject(secretFileContents); + var contents = await File.ReadAllTextAsync(filePath); + + var json = JsonConvert.DeserializeObject(contents); + + if (json is null) + { + Log.Logger.Warning("Невалидный секретный файл: {FilePath}", filePath); + continue; + } + + steamGuardAccounts.Add(json); } catch { - Log.Logger.Warning("{Login} - Не удалось десериализовать секретный файл", login); - continue; + Log.Logger.Warning("Невалидный секретный файл: {FilePath}", filePath); } + } + + return steamGuardAccounts; + } + + private static SteamGuardAccount? FindSecretFile(List steamGuardAccounts, string login) + { + foreach (var steamGuardAccount in steamGuardAccounts) + { + var isMatch = steamGuardAccount.AccountName.ToLower() == login.ToLower(); - if (steamGuardAccount is not { SharedSecret: not null, IdentitySecret: not null, DeviceID: not null}) + if (!isMatch) { - Log.Logger.Warning("{Login} - В секретном файле отсутствует SharedSecret, IdentitySecret или DeviceId", login); continue; } - - accounts.Add(new SteamAccountCredentials(login, password, steamGuardAccount)); + + return steamGuardAccount; } - - return (accounts, ""); + + return null; } } \ No newline at end of file