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)); }
/// <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); }