/// <summary>
        /// Callback function for each thread.
        /// </summary>
        /// <returns>void</returns>
        static void FuncWaitCallback(object parmOrder)
        {
            Order        order        = parmOrder as Order;
            AuthProvider authProvider = null;

            if (order == null)
            {
                // errors here
            }

            // initialize auth provider
            if (order.UserType == UserType.UnRealNameAuthedUser)
            {
                authProvider = new UserAuthProvider(order);
            }
            else
            {
                authProvider = new VipAuthProvider(order);
            }

            if (authProvider != null)
            {
                authProvider.Authenticate();
                if (authProvider.IsAuthComplete())
                {
                    authProvider.SubmitOrder();
                }
            }
        }
Beispiel #2
0
        private IIdentityServerProvider ProviderFactory()
        {
            IIdentityServerProvider provider;

            switch (providerType)
            {
            case IdentityServerAuthProviderType.UserAuthProvider:
                provider = new UserAuthProvider(this);
                break;

            case IdentityServerAuthProviderType.ServiceProvider:
                provider = new ServiceAuthProvider(this);
                break;

            case IdentityServerAuthProviderType.ResourcePasswordFlowProvider:
                provider = new ResourcePasswordFlowAuthProvider(this);
                break;

            default:
                provider = new ImpersonationAuthProvider(this);
                break;
            }

            provider.Init().Wait();

            return(provider);
        }
        public void IsInitialAuthenticateRequest_ReturnsFalseWhenValidUrlAndHasAccessToken()
        {
            // Arrange
            const string url         = "http://localhost:5000/Auth/IdentityServer";
            const string accessToken = "A1234";

            var httpRequestFake = A.Fake <IRequest>();

            A.CallTo(() => httpRequestFake.AbsoluteUri).Returns(url);

            var authTokensFake = A.Fake <IAuthTokens>();

            A.CallTo(() => authTokensFake.AccessToken).Returns(accessToken);

            var provider = new UserAuthProvider(new TestIdentityServerAuthProviderSettings())
            {
                CallbackUrl = url
            };

            // Act
            var result = provider.IsInitialAuthenticateRequest(httpRequestFake, authTokensFake).Result;

            // Assert
            result.Should().Be(false);

            A.CallTo(() => httpRequestFake.AbsoluteUri).MustHaveHappened();
            A.CallTo(() => authTokensFake.AccessToken).MustHaveHappened();
        }
        public void IsAuthorized_RequestNullSessionNull_ReturnsFalse()
        {
            var provider = new UserAuthProvider(new TestIdentityServerAuthProviderSettings());

            // Act
            var result = provider.IsAuthorized(null, null);

            result.Should().Be(false);
        }
        public void IsAuthorized_RequestNull_SessionNotAuthenticated_ReturnsFalse()
        {
            var authSessionFake = A.Fake <IAuthSession>();
            var authTokenFake   = A.Fake <IAuthTokens>();

            authSessionFake.IsAuthenticated = false;

            var provider = new UserAuthProvider(new TestIdentityServerAuthProviderSettings());

            // Act
            var result = provider.IsAuthorized(authSessionFake, authTokenFake);

            result.Should().Be(false);
        }
        public void IsAuthorized_RequestNull_SessionAuthenticated_AccessTokenValid_ReturnsTrue()
        {
            // Arrange
            var authSessionFake = A.Fake <IAuthSession>();
            var authTokenFake   = A.Fake <IAuthTokens>();

            authSessionFake.IsAuthenticated = true;
            authTokenFake.AccessToken       = "A12345";

            var provider = new UserAuthProvider(new TestIdentityServerAuthProviderSettings());

            // Act
            var result = provider.IsAuthorized(authSessionFake, authTokenFake);

            result.Should().Be(true);
        }
        public void IsInitialAuthenticateRequest_ReturnsFalseWhenAbsoluteUriIsNotValid(string absoluteUri)
        {
            // Arrange
            var httpRequestFake = A.Fake <IRequest>();

            A.CallTo(() => httpRequestFake.AbsoluteUri).Returns(absoluteUri);

            var authTokensFake = A.Fake <IAuthTokens>();

            var provider = new UserAuthProvider(new TestIdentityServerAuthProviderSettings())
            {
                CallbackUrl = "http://localhost:5000/Auth/IdentityServer"
            };

            // Act
            var result = provider.IsInitialAuthenticateRequest(httpRequestFake, authTokensFake).Result;

            // Assert
            result.Should().Be(false);

            A.CallTo(() => httpRequestFake.AbsoluteUri).MustHaveHappened();
        }
        public string CreateOrMergeAuthSession(IAuthSession authSession, IAuthTokens tokens)
        {
            using (var redis = factory.GetClient())
            {
                UserAuthProvider authProvider = null;

                var oAuthProviderId = GetAuthProviderByUserId(redis, tokens.Provider, tokens.UserId);
                if (!oAuthProviderId.IsNullOrEmpty())
                    authProvider = redis.As<UserAuthProvider>().GetById(oAuthProviderId);

                var userAuth = GetUserAuth(redis, authSession, tokens) 
                    ?? new UserAuth { Id = redis.As<UserAuth>().GetNextSequence(), };
                 
                if (authProvider == null)
                {
                    authProvider = new UserAuthProvider {
                        Id = redis.As<UserAuthProvider>().GetNextSequence(),
                        UserAuthId = userAuth.Id,
                        Provider = tokens.Provider,
                        UserId = tokens.UserId,
                    };
                    var idx = IndexProviderToUserIdHash(tokens.Provider);
                    redis.SetEntryInHash(idx, tokens.UserId, authProvider.Id.ToString(CultureInfo.InvariantCulture));
                }

                authProvider.PopulateMissing(tokens);
                userAuth.PopulateMissing(authProvider);

                userAuth.ModifiedDate = DateTime.UtcNow;
                if (authProvider.CreatedDate == default(DateTime))
                    authProvider.CreatedDate = userAuth.ModifiedDate;
                authProvider.ModifiedDate = userAuth.ModifiedDate;

                redis.Store(userAuth);
                redis.Store(authProvider);
                redis.AddItemToSet(IndexUserAuthAndProviderIdsSet(userAuth.Id), authProvider.Id.ToString(CultureInfo.InvariantCulture));

                return userAuth.Id.ToString(CultureInfo.InvariantCulture);
            }
        }
        public string CreateOrMergeAuthSession(IAuthSession authSession, IAuthTokens tokens)
        {
            var userAuth = GetUserAuth(authSession, tokens) ?? new UserAuth();

            using (var db = dbFactory.Open())
            {
                var oAuthProvider = db.Select<UserAuthProvider>(q =>
                    q.Provider == tokens.Provider && q.UserId == tokens.UserId).FirstOrDefault();

                if (oAuthProvider == null)
                {
                    oAuthProvider = new UserAuthProvider {
                        Provider = tokens.Provider,
                        UserId = tokens.UserId,
                    };
                }

                oAuthProvider.PopulateMissing(tokens);
                userAuth.PopulateMissing(oAuthProvider);

                userAuth.ModifiedDate = DateTime.UtcNow;
                if (userAuth.CreatedDate == default(DateTime))
                    userAuth.CreatedDate = userAuth.ModifiedDate;

                db.Save(userAuth);

                oAuthProvider.UserAuthId = userAuth.Id != default(int)
                    ? userAuth.Id
                    : (int)db.GetLastInsertId();

                if (oAuthProvider.CreatedDate == default(DateTime))
                    oAuthProvider.CreatedDate = userAuth.ModifiedDate;
                oAuthProvider.ModifiedDate = userAuth.ModifiedDate;

                db.Save(oAuthProvider);

                return oAuthProvider.UserAuthId.ToString(CultureInfo.InvariantCulture);
            };
        }
Beispiel #10
0
 public UserService(UserRepository repository,
                    UserAuthProvider userAuthProvider
                    ) : base(repository)
 {
     _userAuthProvider = userAuthProvider;
 }