예제 #1
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("Не знаю как обработать ключ")
            });