Beispiel #1
0
        /// <summary>
        /// DoCdnAction
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="client"></param>
        /// <param name="req"></param>
        /// <param name="json"></param>
        private static void DoCdnAction<T>(out CdnClient client, out T req, string json)
        {
            DoTencentCloudAction("cdn", out Credential cred, out ClientProfile clientProfile);

            client = new CdnClient(cred, "", clientProfile);
            req = AbstractModel.FromJsonString<T>(json);
        }
        public async Task <CdnClient> GetClientAsync(AppId appId, DepotId depotId, CancellationToken cancellationToken = default)
        {
            await _getClientSemaphore.WaitAsync(cancellationToken);

            if (_cdnClientWrappersAvailable.Count == 0)
            {
                await FillServerPoolAsync();
            }

            await _poolFilledEvent.WaitAsync(cancellationToken);

            CdnClient recommendedClient = null;

            lock (this)
            {
                recommendedClient = _cdnClientWrappersAvailable
                                    .OrderByDescending(x => x.ServerWrapper.Score)
                                    .ThenBy(x => x.ServerWrapper.Server.WeightedLoad)
                                    .ThenBy(x => x.ServerWrapper.Server.Load)
                                    .Take(10)
                                    .OrderBy(x => _random.Next())
                                    .First();

                _cdnClientWrappersAvailable.Remove(recommendedClient);
            }

            if (recommendedClient.RequiresAuthentication(appId, depotId))
            {
                await AuthenticateClientInfoAsync(recommendedClient, appId, depotId);
            }

            _getClientSemaphore.Release();

            return(recommendedClient);
        }
        public async Task CreateAndAuthenticate()
        {
            _client = new CdnClient(Constants.BaseUrl);
            var resp = await _client.Login("admin", "password");

            Assert.IsTrue(resp.HasValue);
            Assert.IsNotEmpty(resp.Value.Token);
        }
Beispiel #4
0
        public async Task RegisterTest()
        {
            using var client = new CdnClient(Constants.BaseUrl);
            var registerResponse = await client.Register("testUser", "123456");

            Assert.IsTrue(registerResponse.HasValue);
            Assert.AreEqual("testuser", registerResponse.Value.Username);
        }
Beispiel #5
0
        public async Task AuthTestWithoutLogin()
        {
            using var client = new CdnClient(Constants.BaseUrl);
            (bool success, string message) = await client.TestAuthentication();

            Assert.IsFalse(success);
            Assert.IsNull(message);
        }
Beispiel #6
0
        public async Task LoginTest()
        {
            using var client = new CdnClient(Constants.BaseUrl);
            var loginDto = await client.Login("admin", "password");

            Assert.IsTrue(loginDto.HasValue);
            Assert.AreEqual("admin", loginDto.Value.User.Username);
            Assert.IsNotNull(loginDto.Value.Token);
            Assert.IsNotEmpty(loginDto.Value.Token);
        }
Beispiel #7
0
        public async Task LoginAuthTest()
        {
            using var client = new CdnClient(Constants.BaseUrl);
            await client.Login("admin", "password");

            (bool success, string message) = await client.TestAuthentication();

            Assert.IsTrue(success);
            Assert.IsNotEmpty(message);
        }
Beispiel #8
0
        public async Task TestRemoveApiKey()
        {
            using var client = new CdnClient(Constants.BaseUrl);
            await client.Login("admin", "password");

            var tokenMaybe = await client.GetApiKey();

            Assert.IsTrue(tokenMaybe.HasValue);
            Assert.IsNotEmpty(tokenMaybe.Value);
            await client.DeleteApiKey();

            Assert.AreEqual(AuthenticationType.Jwt, client.CurrentAuthenticationType);
        }
Beispiel #9
0
        public async Task GetApiKeyAndTestAuthentication()
        {
            using var client = new CdnClient(Constants.BaseUrl);
            await client.Login("admin", "password");

            var tokenMaybe = await client.GetApiKey();

            Assert.IsTrue(tokenMaybe.HasValue);
            Assert.IsNotEmpty(tokenMaybe.Value);
            (bool success, string message) = await client.TestAuthentication();

            Assert.IsTrue(success);
            Assert.IsNotEmpty(message);
        }
Beispiel #10
0
        public async Task CreateAndAuthenticate()
        {
            _client = new CdnClient(Constants.BaseUrl);
            var resp = await _client.Login("admin", "password");

            Assert.IsTrue(resp.HasValue);
            Assert.IsNotEmpty(resp.Value.Token);

            // Create an album that is going to be deleted
            _albumToBeDeleted = (await _client.CreateAlbum("testAlbum").ConfigureAwait(false)).Value;
            Assert.NotNull(_albumToBeDeleted);
            _albumUsedForTestingPrivate = (await _client.CreateAlbum("testAlbum2", false).ConfigureAwait(false)).Value;
            Assert.NotNull(_albumUsedForTestingPrivate);
            _albumUsedForTesting = (await _client.CreateAlbum("testAlbum123").ConfigureAwait(false)).Value;
            Assert.NotNull(_albumUsedForTesting);
        }
Beispiel #11
0
        public async Task CreateAndAuthenticate()
        {
            _client = new CdnClient(Constants.BaseUrl);
            var resp = await _client.Login("admin", "password");

            Assert.IsTrue(resp.HasValue);
            Assert.IsNotEmpty(resp.Value.Token);
            // Add dummy user to remove
            var userToRemove = await _client.Register("removeMePlease", "password");

            var userToRename = await _client.Register("changeMyName", "password");

            Assert.IsTrue(userToRemove.HasValue);
            Assert.IsTrue(userToRename.HasValue);
            _userToRemove = userToRemove.Value;
            _userToRename = userToRename.Value;
        }
        private async Task AuthenticateClientInfoAsync(CdnClient client, AppId appId, DepotId depotId)
        {
            if (client.ServerWrapper.Server.Type == "CDN" || client.ServerWrapper.Server.Type == "SteamCache")
            {
                var authToken = client.GetAuthTokenOrDefault(appId, depotId);

                if (authToken == null)
                {
                    var result = await _steamApps.GetCDNAuthToken(appId, depotId, client.ServerWrapper.Server.Host);

                    authToken = new CdnClientAuthToken(result.Token, result.Expiration, appId, depotId);

                    client.AuthTokens.Add(authToken);
                }

                client.InternalCdnClient.AuthenticateDepot(depotId, await GetDepotKeyAsync(depotId, appId), authToken.Token);
            }
        }
Beispiel #13
0
        /// <summary>
        /// DoCdnAction
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="client"></param>
        /// <param name="req"></param>
        /// <param name="json"></param>
        private static void DoCdnAction <T>(out CdnClient client, out T req, string json)
        {
            var cred = new Credential
            {
                SecretId  = AppSettings.TencentCloud.SecretId,
                SecretKey = AppSettings.TencentCloud.SecretKey
            };

            var httpProfile = new HttpProfile {
                Endpoint = "cdn.tencentcloudapi.com"
            };
            var clientProfile = new ClientProfile {
                HttpProfile = httpProfile
            };

            client = new CdnClient(cred, "", clientProfile);
            req    = AbstractModel.FromJsonString <T>(json);
        }
Beispiel #14
0
        private void DoCdnAction <T>(out CdnClient client, out T req, string json)
        {
            var cred = new Credential
            {
                SecretId  = _tencentCloudOptions.SecretId,
                SecretKey = _tencentCloudOptions.SecretKey
            };
            var httpProfile = new HttpProfile {
                Endpoint = $"cdn.tencentcloudapi.com"
            };

            var clientProfile = new ClientProfile {
                HttpProfile = httpProfile
            };

            client = new CdnClient(cred, "", clientProfile);
            req    = json.DeserializeToObject <T>();
        }
Beispiel #15
0
        public async Task CreateAndAuthenticate()
        {
            _client = new CdnClient(Constants.BaseUrl);
            var resp = await _client.Login("admin", "password");

            Assert.IsTrue(resp.HasValue);
            Assert.IsNotEmpty(resp.Value.Token);

            // Upload files to be used in further tests
            _uploadedFiles = (await this.UploadMultipleFilesNoParameters().ConfigureAwait(false)).ToList();
            // Upload one private file
            var file = await _client.UploadFile(FileUploadTests.GetExampleImage(), "privateTestfile", false);

            Assert.IsTrue(file.HasValue);
            Assert.NotNull(file.Value);
            _uploadedFiles.Add(file.Value);
            Assert.IsNotEmpty(_uploadedFiles);
        }
        public void ReturnClient(CdnClient cdnClientWrapper, bool isFunctional = true)
        {
            if (cdnClientWrapper == null)
            {
                return;
            }

            lock (this)
            {
                if (isFunctional)
                {
                    cdnClientWrapper.ServerWrapper.Score += 0.1;

                    _cdnClientWrappersAvailable.Add(cdnClientWrapper);
                }
                else
                {
                    cdnClientWrapper.ServerWrapper.Score -= 1;
                }
            }

            SaveServerQualitiesMemory();
        }
 public CyberSecManager(AppSettings appSettings, IAnalyticsManager analyticsManager, CdnClient cndClient)
 {
     this._appSettings      = appSettings;
     this._analyticsManager = analyticsManager;
     this._cndClient        = cndClient;
 }
Beispiel #18
0
 public async Task SetupTestAccount()
 {
     using var client = new CdnClient(Constants.BaseUrl);
     await client.Register("daniele", "123456");
 }
        public async Task FillServerPoolAsync()
        {
            // Await until we've logged in and have our suggest cell ID
            await _steamContentClient.SteamClient.AwaitReadyAsync(_steamContentClient.SteamClient.CancellationToken);

            // Add any not-yet-tracked servers
            var servers = await GetServersAsync();

            foreach (var server in servers)
            {
                if (_servers.Any(x => x.Server.Host == server.Host))
                {
                    continue;
                }

                var serverWrapper     = new CdnServerWrapper(server);
                var qualityFromMemory = _steamContentServerQualities.FirstOrDefault(x => x.Host == serverWrapper.Server.Host);

                if (qualityFromMemory != null)
                {
                    serverWrapper.Score = qualityFromMemory.Score;
                }

                _servers.Add(serverWrapper);
            }


            // Fresh database over server quality
            if (_servers.Sum(x => x.Score) == 0)
            {
                foreach (var serverWrapper in _servers)
                {
                    for (int i = 0; i < serverWrapper.Server.NumEntries; i++)
                    {
                        var cdnClient = new CDNClient(_steamContentClient.SteamClient.InternalClient);

                        //await cdnClient.ConnectAsync(serverWrapper.Server);

                        var wrapper = new CdnClient(cdnClient, serverWrapper);

                        _cdnClientWrappersAvailable.Add(wrapper);
                    }
                }
            }
            else
            {
                var orderedServers   = new Queue <CdnServerWrapper>(_servers.OrderByDescending(x => x.Score).OrderBy(x => x.Server.WeightedLoad).OrderBy(x => x.Server.Load));
                int refillsRemaining = CLIENTS_REFILL_LIMIT;

                while (orderedServers.Count > 0)
                {
                    var serverWrapper = orderedServers.Dequeue();

                    for (int i = 0; i < serverWrapper.Server.NumEntries; i++)
                    {
                        var cdnClient = new CDNClient(_steamContentClient.SteamClient.InternalClient);
                        var wrapper   = new CdnClient(cdnClient, serverWrapper);

                        _cdnClientWrappersAvailable.Add(wrapper);

                        if (--refillsRemaining <= 0)
                        {
                            break;
                        }
                    }
                }
            }

            _poolFilledEvent.Set();
        }