コード例 #1
0
 public ApplicationWithKey(
     KeyApplication requestingApplication,
     KeyApplication targetApplication,
     AuthKeyValue key)
 {
     RequestingApplication = requestingApplication ?? throw new ArgumentNullException(nameof(requestingApplication));
     Key = key;
     TargetApplication = targetApplication ?? throw new ArgumentNullException(nameof(targetApplication));
 }
コード例 #2
0
        public Task <IEnumerable <KeyApplication> > GetKnownApplicationsAsync(
            KeyApplication application,
            CancellationToken token = default)
        {
            if (!_bindedAppDictionary.TryGetValue(application, out var bindedApps))
            {
                var emptyResult = new KeyApplication[] { KeyApplication.NoApplication };
                return(Task.FromResult <IEnumerable <KeyApplication> >(emptyResult));
            }

            return(Task.FromResult <IEnumerable <KeyApplication> >(bindedApps));
        }
コード例 #3
0
        public async Task GetAllApps_ReturnResultFromRepo()
        {
            // ARRANGE

            var firstApp  = new KeyApplication(Guid.NewGuid().ToString(), Guid.NewGuid());
            var secondApp = new KeyApplication(Guid.NewGuid().ToString(), Guid.NewGuid());

            KeyApplication[] expectedResult = { firstApp, secondApp };

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

            appRepoMock.Setup(x => x.GetAllKnownApplicationsAsync(default))
コード例 #4
0
        public async Task GetApp_2BindedApp1Disabled_Return1ActiveApp()
        {
            // ARRANGE
            ApplicationCode applicationCode   = "1";
            KeyApplication  application       = new KeyApplication(applicationCode, Guid.NewGuid());
            var             activeBindedApp   = new KeyApplication("2", Guid.NewGuid());
            var             disabledBindedApp = new KeyApplication("3", Guid.NewGuid());

            KeyApplication[] bindedApplications = { activeBindedApp, disabledBindedApp };

            // настраиваем репу приложения, находим наше приложение
            // а так же возвращаем список из двух приложений
            var appRepoMock = new Mock <IApplicationRepository>();

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

            appRepoMock.Setup(x => x.GetKnownApplicationsAsync(application, default))
            .Returns(() => Task.FromResult <IEnumerable <KeyApplication> >(bindedApplications));

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

            keyRepoMock.Setup(x => x.IsHaveActiveAuthKey(activeBindedApp, application, default))
            .Returns(() => new ValueTask <bool>(Task.FromResult(true)));

            keyRepoMock.Setup(x => x.IsHaveActiveAuthKey(disabledBindedApp, application, default))
            .Returns(() => new ValueTask <bool>(Task.FromResult(false)));

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

            // ACT

            var result = await validator.GetPermittedApplicationsAsync(applicationCode);

            // ASSERT

            KeyApplication[] expectedResult = { activeBindedApp };

            Assert.True(_commonHelper.CheckIsApplicationListsEqual(result, expectedResult));
        }
コード例 #5
0
        public ValueTask <bool> IsHaveActiveAuthKey(KeyApplication application, KeyApplication targetApplication, CancellationToken token = default)
        {
            foreach (var appKeyRow in _keyDictionary)
            {
                var authKey = (ExistingAuthKey)appKeyRow.Value;
                var app     = appKeyRow.Key;

                if (app.TargetApplication != targetApplication &&
                    app.RequestingApplication != application)
                {
                    continue;
                }

                if (authKey.Enabled)
                {
                    return(new ValueTask <bool>(Task.FromResult(true)));
                }
            }

            return(new ValueTask <bool>(false));
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        public InMemoryApplicationRepository()
        {
            int index = 1;

            // заполняем приложениями
            foreach (var app in TestApplicationCollection.KeyApplications)
            {
                _codeDictionary.Add(app.Code, app);
                _uidDictionary.Add(app.Uid, app);

                // "рисуем" связи между приложениями
                var bindedApplications =
                    new KeyApplication[TestApplicationCollection.KeyApplications.Length - index];

                for (int i = index; i < bindedApplications.Length; i++)
                {
                    bindedApplications[i] = TestApplicationCollection.KeyApplications[i];
                }

                _bindedAppDictionary.Add(app, bindedApplications);
                index++;
            }
        }
コード例 #8
0
 public Task <IEnumerable <KeyApplication> > GetKnownApplicationsAsync(KeyApplication application, CancellationToken token = default)
 {
     return(Task.FromResult(Enumerable.Empty <KeyApplication>()));
 }
コード例 #9
0
 public ValueTask<bool> IsHaveActiveAuthKey(KeyApplication application, KeyApplication targetApplication, CancellationToken token = default)
 {
     return new ValueTask<bool>(Task.FromResult(false));
 }