public static async Task <PermissionValue> GetUploadPermissions(Game game, long modId) { var client = new Lib.Http.Client(); if (Utils.HaveEncryptedJson("nexus-cookies")) { var cookies = await Utils.FromEncryptedJson <Helpers.Cookie[]>("nexus-cookies"); client.AddCookies(cookies); } var response = await client.GetHtmlAsync($"https://nexusmods.com/{game.MetaData().NexusName}/mods/{modId}"); var hidden = response.DocumentNode .Descendants() .Any(n => n.Id == $"{modId}-title" && n.InnerText == "Hidden mod"); if (hidden) { return(PermissionValue.Hidden); } var perm = response.DocumentNode .Descendants() .Where(d => d.HasClass("permissions-title") && d.InnerHtml == "Upload permission") .SelectMany(d => d.ParentNode.ParentNode.GetClasses()) .FirstOrDefault(perm => perm.StartsWith("permission-")); var not_found = response.DocumentNode.Descendants() .Where(d => d.Id == $"{modId}-title") .Select(d => d.InnerText) .FirstOrDefault() == "Not found"; if (not_found) { return(PermissionValue.NotFound); } return(perm switch { "permission-no" => PermissionValue.No, "permission-maybe" => PermissionValue.Maybe, "permission-yes" => PermissionValue.Yes, _ => PermissionValue.No });
public override async Task <int> Execute() { var client = new Lib.Http.Client(); var json = await client.GetStringAsync("https://bunnycdn.com/api/system/edgeserverlist"); client.Headers.Add(("Host", "wabbajack.b-cdn.net")); using var queue = new WorkQueue(); var mirrors = json.FromJsonString <string[]>(); _logger.LogInformation($"Found {mirrors.Length} edge severs"); var servers = (await mirrors .PMap(queue, async ip => { try { // We use a volume server, so this file will only exist on some (lower cost) servers using var result = await client.GetAsync( $"https://{ip}/WABBAJACK_TEST_FILE.zip_48f799f6-39b2-4229-a329-7459c9965c2d/definition.json.gz", errorsAsExceptions: false, retry: false); var data = await result.Content.ReadAsByteArrayAsync(); return(ip, use: result.IsSuccessStatusCode, size: data.Length); } catch (Exception) { return(ip, use: false, size: 0); } })) .Where(r => r.use && r.size == 267) .Select(r => r.ip) .ToArray(); _logger.LogInformation($"Found {servers.Length} valid mirrors"); Mirrors = servers; LastUpdate = DateTime.UtcNow; return(Mirrors.Length); }