public InMemoryKeyRepository()
        {
            int index = 1;

            // заполняем приложениями
            foreach (var app in TestApplicationCollection.KeyApplications)
            {
                for (int i = index; i < TestApplicationCollection.KeyApplications.Length - index; i++)
                {
                    AuthKeyValue authKeyValue = $"{index}";
                    var          appKey       = new ApplicationWithKey(
                        TestApplicationCollection.KeyApplications[i],
                        app,
                        authKeyValue);

                    AuthKey key = new ExistingAuthKey(
                        authKeyValue,
                        true,
                        TestApplicationCollection.KeyApplications[i],
                        app);

                    _keyDictionary.Add(appKey, key);
                }
            }
        }
        public Task <AuthKey> GetApplicationForKeyAsync(ApplicationWithKey key, CancellationToken token = default)
        {
            if (!_keyDictionary.TryGetValue(key, out var authKeyApplication))
            {
                return(Task.FromResult <AuthKey>(AuthKey.NoKey));
            }

            return(Task.FromResult(authKeyApplication));
        }
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 Task<AuthKey> GetApplicationForKeyAsync(ApplicationWithKey key, CancellationToken token = default)
 {
     return Task.FromResult<AuthKey>(AuthKey.NoKey);
 }