Exemple #1
0
            private async Task <(HttpClient, CDPTree, CollectedBNetInfo)> ResolveDownloadInfo()
            {
                var info = new CollectedBNetInfo();

                var login_info = Utils.FromEncryptedJson <BethesdaNetData>(DataName);

                var client = new HttpClient();

                client.BaseAddress = new Uri("https://api.bethesda.net");
                client.DefaultRequestHeaders.Add("User-Agent", "bnet");
                foreach (var header in login_info.headers.Where(h => h.Key.ToLower().StartsWith("x-")))
                {
                    client.DefaultRequestHeaders.Add(header.Key, header.Value);
                }

                var posted = await client.PostAsync("/beam/accounts/external_login",
                                                    new StringContent(login_info.body, Encoding.UTF8, "application/json"));

                info.AccessToken = (await posted.Content.ReadAsStringAsync()).FromJSONString <BeamLoginResponse>().access_token;

                client.DefaultRequestHeaders.Add("x-cdp-app", "UGC SDK");
                client.DefaultRequestHeaders.Add("x-cdp-app-ver", "0.9.11314/debug");
                client.DefaultRequestHeaders.Add("x-cdp-lib-ver", "0.9.11314/debug");
                client.DefaultRequestHeaders.Add("x-cdp-platform", "Win/32");

                posted = await client.PostAsync("cdp-user/auth",
                                                new StringContent("{\"access_token\": \"" + info.AccessToken + "\"}", Encoding.UTF8,
                                                                  "application/json"));

                info.CDPToken = (await posted.Content.ReadAsStringAsync()).FromJSONString <CDPLoginResponse>().token;

                client.DefaultRequestHeaders.Add("X-Access-Token", info.AccessToken);
                var got = await client.GetAsync($"mods/ugc-workshop/content/get?content_id={ContentId}");

                JObject data = JObject.Parse(await got.Content.ReadAsStringAsync());

                var content = data["platform"]["response"]["content"];

                info.CDPBranchId  = (int)content["cdp_branch_id"];
                info.CDPProductId = (int)content["cdp_product_id"];

                client.DefaultRequestHeaders.Add("Authorization", $"Token {info.CDPToken}");

                got = await client.GetAsync(
                    $"/cdp-user/projects/{info.CDPProductId}/branches/{info.CDPBranchId}/tree/.json");

                var tree = (await got.Content.ReadAsStringAsync()).FromJSONString <CDPTree>();

                got = await client.GetAsync(
                    $"/cdp-user/projects/{info.CDPProductId}/branches/{info.CDPBranchId}/depots/.json");

                var props_obj = JObject.Parse(await got.Content.ReadAsStringAsync()).Properties().First();

                info.CDPPropertiesId = (int)props_obj.Value["properties_id"];
                info.AESKey          = props_obj.Value["ex_info_A"].Select(e => (byte)e).ToArray();
                info.AESIV           = props_obj.Value["ex_info_B"].Select(e => (byte)e).Take(16).ToArray();

                return(client, tree, info);
            }
            private async Task <(Common.Http.Client, CDPTree, CollectedBNetInfo)> ResolveDownloadInfo()
            {
                var info = new CollectedBNetInfo();

                var login_info = await Utils.FromEncryptedJson <BethesdaNetData>(DataName);

                var client = new Common.Http.Client();

                client.Headers.Add(("User-Agent", "bnet"));
                foreach (var header in login_info.headers.Where(h => h.Key.ToLower().StartsWith("x-")))
                {
                    client.Headers.Add((header.Key, header.Value));
                }

                var posted = await client.PostAsync("https://api.bethesda.net/beam/accounts/external_login",
                                                    new StringContent(login_info.body, Encoding.UTF8, "application/json"));

                info.AccessToken = (await posted.Content.ReadAsStringAsync()).FromJsonString <BeamLoginResponse>().access_token;

                client.Headers.Add(("x-cdp-app", "UGC SDK"));
                client.Headers.Add(("x-cdp-app-ver", "0.9.11314/debug"));
                client.Headers.Add(("x-cdp-lib-ver", "0.9.11314/debug"));
                client.Headers.Add(("x-cdp-platform", "Win/32"));

                posted = await client.PostAsync("https://api.bethesda.net/cdp-user/auth",
                                                new StringContent("{\"access_token\": \"" + info.AccessToken + "\"}", Encoding.UTF8,
                                                                  "application/json"));

                info.CDPToken = (await posted.Content.ReadAsStringAsync()).FromJsonString <CDPLoginResponse>().token;

                client.Headers.Add(("X-Access-Token", info.AccessToken));
                var got = await client.GetAsync($"https://api.bethesda.net/mods/ugc-workshop/content/get?content_id={ContentId}");

                JObject data = JObject.Parse(await got.Content.ReadAsStringAsync());

                var content = data["platform"] !["response"] !["content"] !;