public async Task ValidateKey_NoTargetApplication_ReturnFalse()
        {
            var applicationCode       = "1";
            var targetApplicationCode = "2";
            var authKeyValue          = "qwerty";

            // реп приложений настраиваем, чтобы он не находил целевое приложение
            var repoMock = new Mock <IApplicationRepository>();

            repoMock.Setup(x => x.GetApplicationByCodeAsync(applicationCode, default))
            .Returns(() => Task.FromResult(
                         new KeyApplication(applicationCode, Guid.NewGuid())));

            repoMock.Setup(x => x.GetApplicationByCodeAsync(targetApplicationCode, default))
            .Returns(() => Task.FromResult(KeyApplication.NoApplication));

            // реп ключей к этому моменту не должен вызываться, так как мы вылетели раньше
            var keyRepoMock = new Mock <IKeyRepository>();

            keyRepoMock.Setup(x => x.GetApplicationForKeyAsync(It.IsAny <ApplicationWithKey>(), default))
            .Throws(new Exception("Мы не должны доходить до проверки ключа"));

            var validator = _commonHelper.InitValidator(repoMock.Object, keyRepoMock.Object);

            var requestModel =
                new ApplicationCodeAuthKeyValidateRequest(applicationCode, targetApplicationCode, authKeyValue);
            var result = await validator.ValidateKeyAsync(requestModel);

            Assert.True(result is false);
        }
Example #2
0
        private async Task ExecuteTestSequenceAsync()
        {
            // тесты самого сервиса
            var result = await _keyValidator.GetAllKnownApplicationsAsync();

            var isValid = await _keyValidator.GetPermittedApplicationsAsync("Tort");

            var request     = new ApplicationCodeAuthKeyValidateRequest("Nep", "Tort", "1");
            var validateKey = await _keyValidator.ValidateKeyAsync(request);

            //тесты апи
            var apiRequest     = new ValidateKeyRequest("Nep", "Tort", "1");
            var isValidFromApi = await _keyCheckerApiClient.ValidateApplicationKey(apiRequest);

            if (isValidFromApi)
            {
                Console.WriteLine("Апи сработало. Ну и отлично.");
            }
        }
Example #3
0
        /// <summary>
        /// Проверяет что предоставленный ключ от приложения делающего запрос
        /// существует целевого приложения
        /// </summary>
        public async ValueTask <bool> ValidateKeyAsync(
            ApplicationCodeAuthKeyValidateRequest request,
            CancellationToken token = default)
        {
            if (request is null)
            {
                _logger?.LogError(requestBodyIsNull);
                throw new ArgumentNullException(nameof(request), requestBodyIsNull);
            }

            var application =
                await _applicationRepository.GetApplicationByCodeAsync(request.RequestingApplicationCode, token);

            if (application is NoKeyApplication)
            {
                _logger?.LogWarning(
                    $"Не смогли найти запрашивающее приложение по ключу {request.RequestingApplicationCode}");

                return(false);
            }

            var targetApplication =
                await _applicationRepository.GetApplicationByCodeAsync(request.TargetApplicationCode, token);

            if (targetApplication is NoKeyApplication)
            {
                _logger?.LogWarning(
                    $"Не смогли найти целевое приложение, " +
                    $"код приложения {request.TargetApplicationCode}");

                return(false);
            }

            var applicationKeyValidate = new ApplicationWithKey(application, targetApplication, request.Key);
            var authResult             = await _keyRepository.GetApplicationForKeyAsync(applicationKeyValidate, token);

            return(authResult switch
            {
                NoAuthKey _ => false,
                ExistingAuthKey key => key.Enabled,
                _ => throw new Exception("Не знаю как обработать ключ")
            });
        public async Task ValidateKey_KeyFound(bool keyIsEnabled)
        {
            // ARRANGE

            var applicationCode = "1";
            var application     = new KeyApplication(applicationCode, Guid.NewGuid());

            var targetApplicationCode = "2";
            var targetApplication     = new KeyApplication(targetApplicationCode, Guid.NewGuid());

            var authKeyValue = "qwerty";

            // реп приложений настраиваем, чтобы он находил все приложения
            var repoMock = new Mock <IApplicationRepository>();

            repoMock.Setup(x => x.GetApplicationByCodeAsync(applicationCode, default))
            .Returns(() => Task.FromResult(application));

            repoMock.Setup(x => x.GetApplicationByCodeAsync(targetApplicationCode, default))
            .Returns(() => Task.FromResult(targetApplication));

            // реп ключей должен не находить такого ключа
            var keyRepoMock = new Mock <IKeyRepository>();

            keyRepoMock.Setup(x => x.GetApplicationForKeyAsync(It.IsAny <ApplicationWithKey>(), default))
            .Returns(() => Task.FromResult <AuthKey>(
                         new ExistingAuthKey(authKeyValue, keyIsEnabled, application, targetApplication)));

            var validator = _commonHelper.InitValidator(repoMock.Object, keyRepoMock.Object);

            // ACT

            var requestModel =
                new ApplicationCodeAuthKeyValidateRequest(applicationCode, targetApplicationCode, authKeyValue);
            var result = await validator.ValidateKeyAsync(requestModel);

            // ASSERT

            Assert.Equal(keyIsEnabled, result);
        }