Пример #1
0
    public async Task <IResult <ILoginResponse> > Login(ILoginRequest login, CancellationToken cancel = default)
    {
        Result <ILoginResponse> result;

        var user = await _userManager.FindByNameAsync(login.UserName);

        if (user == null)
        {
            result = new ErrorInformation($"The user with the name  {login.UserName} was not found");
            return(result);
        }

        var loginResult = await _signInManager.CheckPasswordSignInAsync(user, login.Password, false);

        if (loginResult.Succeeded)
        {
            _logger.LogInformation("The user {0} has been successfully logged in", login.UserName);
            result = new LoginResponse()
            {
                Token = _jwtGenerator.CreateToken(user)
            };
            return(result);
        }

        _logger.LogInformation("User {0} authentication error", login.UserName);
        result = new ErrorInformation("Authentication error");
        return(result);
    }
Пример #2
0
        public void AttemptLogin_signs_user_in_when_authentication_succeeds([Frozen] CSF.Security.Authentication.IPasswordAuthenticationService authService,
                                                                            [Frozen] ILogsUserInOrOut loginLogout,
                                                                            LoginLogoutManager sut,
                                                                            ILoginRequest request,
                                                                            LoginCredentials credentials,
                                                                            [HasIdentity] User user)
        {
            // Arrange
            user.Username = credentials.Username;
            Mock.Get(request)
            .Setup(x => x.GetCredentials())
            .Returns(credentials);
            Mock.Get(authService)
            .Setup(x => x.Authenticate(credentials))
            .Returns(new AuthenticationResult(user.GetIdentity(), user.Username, true));

            Mock.Get(loginLogout)
            .Setup(x => x.LogUserIn(It.IsAny <IAuthenticationResult>()));

            // Act
            sut.AttemptLogin(request);

            // Assert
            Mock.Get(loginLogout)
            .Verify(x => x.LogUserIn(It.IsAny <IAuthenticationResult>()), Times.Once());
        }
Пример #3
0
        public async Task <ILoginResponse> LoginAsync(ILoginRequest request)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }

            if (WebBrowserNavigator.WebBrowser.Address != ChunithmNetUrl.Top)
            {
                await WebBrowserNavigator.LoadAsync(ChunithmNetUrl.Top);
            }

            await WebBrowserNavigator.EvaluatePageMoveScriptAsync($@"
var inputs = document.getElementsByTagName('input');
var inputName = inputs[0];
var inputPassword = inputs[1];
inputName.value = '{request.SegaId}';
inputPassword.value = '{request.Password}';
formSubmit('sega_login');
");

            var   responseAsync = LoginResponse.CreateResponseAsync(WebBrowserNavigator.WebBrowser);
            await responseAsync;
            var   response = responseAsync.Result;

            if (response.Success)
            {
                var aimeListParser = new AimeListParser();
                response.AimeList = aimeListParser.Parse(response.DocumentText);
            }

            return(response);
        }
Пример #4
0
 public TestWebApiHandler(HttpClient client, LoginRequest loginRequest, IMapper mapper, ILogger <TestWebApiHandler> logger)
 {
     _client       = client;
     _loginRequest = loginRequest;
     _mapper       = mapper;
     _logger       = logger;
 }
Пример #5
0
        public async Task <ILoginResponse> LoginAsync(ILoginRequest request)
        {
            if (!IsLoggedIn())
            {
                await GetToken();
            }

            var loginContent = new FormUrlEncodedContent(new Dictionary <string, string>()
            {
                { "segaId", request.SegaId },
                { "password", request.Password },
                { "token", token },
            });

            var   postLogin = client.PostAsync(ChunithmNetUrl.CreateUrl("submit"), loginContent);
            await postLogin;

            var   getAimeList = client.GetAsync(ChunithmNetUrl.CreateUrl("aimeList"));
            await getAimeList;

            var response = new LoginResponse(getAimeList.Result);

            if (response.Success)
            {
                var aimeListParser = new AimeListParser();
                response.AimeList = aimeListParser.Parse(response.DocumentText);
                if (response.AimeList == null)
                {
                    response.OnInvalidAimeList();
                }
            }

            return(response);
        }
Пример #6
0
        public LoginResult AttemptLogin(ILoginRequest request)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }

            LoginResult          output = null;
            AuthenticationResult authResult;

            output = GetLoginThrottledResult(request);
            if (output != null)
            {
                return(output);
            }

            output = GetAuthenticationFailedLoginResult(request, out authResult);
            if (output != null)
            {
                return(output);
            }

            var currentUser = LogUserIn(request, authResult);

            return(new LoginResult(currentUser.Username));
        }
Пример #7
0
        public async Task <ILoginResponse> LoginAsync(ILoginRequest request)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }

            if (WebBrowserNavigator.WebBrowser.Url?.AbsoluteUri != ChunithmNetUrl.Top)
            {
                await WebBrowserNavigator.NavigateAsync(ChunithmNetUrl.Top);
            }

            {
                var document      = WebBrowserNavigator.WebBrowser.Document;
                var inputs        = document.GetElementsByTagName("input");
                var segaIdInput   = inputs.GetElementsByName("segaId").OfType <HtmlElement>().FirstOrDefault();
                var passwordInput = inputs.GetElementsByName("password").OfType <HtmlElement>().FirstOrDefault();
                segaIdInput.SetAttribute("value", request.SegaId);
                passwordInput.SetAttribute("value", request.Password);
            }

            var   login = WebBrowserNavigator.InvokeScriptAsync("formSubmit", new[] { "sega_login" });
            await login;

            var response = new LoginResponse(WebBrowserNavigator.WebBrowser);

            if (response.Success)
            {
                var aimeListParser = new AimeListParser();
                response.AimeList = aimeListParser.Parse(WebBrowserNavigator.WebBrowser.DocumentText);
            }
            return(response);
        }
Пример #8
0
        /// <summary>
        /// Submits the login request.
        /// </summary>
        /// <returns>The login request.</returns>
        /// <param name="request">Request.</param>
        public async Task <LoginResponse> SubmitLoginRequest(ILoginRequest request)
        {
            var result = await PostAsync(GetEndPointUrl(request), new
            {
                email    = request.Email,
                password = request.Password
            });

            return(result != null ? new LoginResponse(result) : null);
        }
Пример #9
0
        public async Task <TUser> CheckLoginRequest(ILoginRequest login)
        {
            var user = await this.GetUserAsnc(login.Username) as TUser;

            if (user == null)
            {
                return(null);
            }
            var isCorrectPassword = await this.SDHCMemberService.CheckPasswordAsync(user, login.Password);

            return(user);
        }
Пример #10
0
        public async Task <IAuthResponse> LoginUserAsync(ILoginRequest model)
        {
            var user = await _userManager.FindByEmailAsync(model.Email).ConfigureAwait(false);

            if (user == null)
            {
                throw new ValidationException(ExceptionMapping.None, "Combination of user/password does not exist");
            }

            if (!await _userManager.IsEmailConfirmedAsync(user))
            {
                throw new ValidationException(ExceptionMapping.None, "Email not confirmed");
            }

            var result = await _userManager.CheckPasswordAsync(user, model.Password);

            if (!result)
            {
                throw new ValidationException(ExceptionMapping.None, "Combination of user/password does not exist");
            }

            var accessToken = await GenerateAccessTokenAsync(user).ConfigureAwait(false);

            var refreshToken = await _userManager.GenerateConcurrencyStampAsync(user).ConfigureAwait(false);

            var userRefreshToken = await _context.UserRefreshTokens.AsTracking().FirstOrDefaultAsync(x => x.UserID == user.Id);

            if (userRefreshToken == null)
            {
                throw new ValidationException(ExceptionMapping.None, "User could not be created");
            }

            if (DateTimeOffset.UtcNow <= userRefreshToken.ExpiryDate)
            {
                refreshToken = userRefreshToken.RefreshToken;
            }
            else
            {
                userRefreshToken.ExpiryDate   = DateTimeOffset.UtcNow.AddDays(1);
                userRefreshToken.RefreshToken = refreshToken;
                userRefreshToken.UserID       = user.Id;
                _context.UserRefreshTokens.Update(userRefreshToken);
                await _context.SaveChangesAsync();
            }

            return(new AuthResponse
            {
                AccessToken = accessToken,
                ExpireDate = DateTimeOffset.UtcNow.AddDays(1).DateTime,
                RefreshToken = refreshToken
            });
        }
Пример #11
0
        IThrottleKey GetThrottleKey(ILoginRequest request)
        {
            if (request == null)
            {
                return(null);
            }
            if (request.SourceAddress == null)
            {
                return(null);
            }

            return(new SimpleThrottleKey(request.SourceAddress));
        }
Пример #12
0
        LoginResult GetAuthenticationFailedLoginResult(ILoginRequest request, out AuthenticationResult result)
        {
            result = (AuthenticationResult)AuthenticationService.Authenticate(request.GetCredentials());

            if (result != null && result.Success)
            {
                return(null);
            }
            else
            {
                return(LoginResult.LoginFailed);
            }
        }
Пример #13
0
        LoginResult GetLoginThrottledResult(ILoginRequest request)
        {
            var throttlingResult = throttlingService.GetThrottlingResponse(request);

            if (throttlingResult == null || throttlingResult.ShouldAttemptBeHonoured)
            {
                return(null);
            }

            var time = throttlingResult.TimeUntilNextAttemptPermitted.GetValueOrDefault();

            return(LoginResult.LoginFailedDueToThrottling(time));
        }
Пример #14
0
        public void SetUp()
        {
            _fakeCreateCustomerRequest = Substitute.For<ICreateCustomerRequest>();
            _fakeLoginRequest = Substitute.For<ILoginRequest>();
            _fakeSessionService = Substitute.For<ISessionService>();

            _fakeHttpMessageHandler = new FakeHttpMessageHandler();
            _fakeHttpClient = new HttpClient(_fakeHttpMessageHandler);

            _uut = new AzureApiService(_fakeHttpClient, _fakeSessionService);
            _fakeCalculatePriceRequest = Substitute.For<ICalculatePriceRequest>();
            _fakeCreateRideRequest = Substitute.For<ICreateRideRequest>();
        }
Пример #15
0
        public void AttemptLogin_returns_failure_result_when_user_is_not_found([Frozen] CSF.Security.Authentication.IPasswordAuthenticationService authService,
                                                                               LoginLogoutManager sut,
                                                                               ILoginRequest request,
                                                                               LoginCredentials credentials)
        {
            // Arrange
            Mock.Get(request)
            .Setup(x => x.GetCredentials())
            .Returns(credentials);
            Mock.Get(authService)
            .Setup(x => x.Authenticate(credentials))
            .Returns(AuthenticationResult.UserNotFound);

            // Act
            var result = sut.AttemptLogin(request);

            // Assert
            Assert.IsFalse(result.Success);
        }
Пример #16
0
        public void AttemptLogin_returns_failure_result_when_authentication_fails([Frozen] CSF.Security.Authentication.IPasswordAuthenticationService authService,
                                                                                  LoginLogoutManager sut,
                                                                                  ILoginRequest request,
                                                                                  LoginCredentials credentials,
                                                                                  [HasIdentity] User user)
        {
            // Arrange
            Mock.Get(request)
            .Setup(x => x.GetCredentials())
            .Returns(credentials);
            Mock.Get(authService)
            .Setup(x => x.Authenticate(credentials))
            .Returns(new AuthenticationResult(user.GetIdentity(), user.Username, false));

            // Act
            var result = sut.AttemptLogin(request);

            // Assert
            Assert.IsFalse(result.Success);
        }
Пример #17
0
        public void AttemptLogin_does_not_log_user_in_when_user_is_not_found([Frozen] CSF.Security.Authentication.IPasswordAuthenticationService authService,
                                                                             [Frozen] ILogsUserInOrOut loginLogout,
                                                                             LoginLogoutManager sut,
                                                                             ILoginRequest request,
                                                                             LoginCredentials credentials)
        {
            // Arrange
            Mock.Get(request)
            .Setup(x => x.GetCredentials())
            .Returns(credentials);
            Mock.Get(authService)
            .Setup(x => x.Authenticate(credentials))
            .Returns(AuthenticationResult.UserNotFound);

            // Act
            sut.AttemptLogin(request);

            // Assert
            Mock.Get(loginLogout)
            .Verify(x => x.LogUserIn(It.IsAny <IAuthenticationResult>()), Times.Never());
        }
Пример #18
0
        public LoginThrottlingResponse GetThrottlingResponse(ILoginRequest request)
        {
            var key = GetThrottleKey(request);

            if (key == null)
            {
                return(LoginThrottlingResponse.AttemptPermitted);
            }

            var result = throttlePolicy.Check(key);

            if (result.IsLocked)
            {
                return(new LoginThrottlingResponse(result.Limiter.LockDuration.GetValueOrDefault()));
            }

            if (result.IsThrottled)
            {
                return(new LoginThrottlingResponse(result.Limiter.Period));
            }

            return(LoginThrottlingResponse.AttemptPermitted);
        }
Пример #19
0
        public void AttemptLogin_returns_success_result_when_authentication_succeeds([Frozen] CSF.Security.Authentication.IPasswordAuthenticationService authService,
                                                                                     [Frozen] ILogsUserInOrOut loginLogout,
                                                                                     LoginLogoutManager sut,
                                                                                     ILoginRequest request,
                                                                                     LoginCredentials credentials,
                                                                                     [HasIdentity] User user)
        {
            // Arrange
            Mock.Get(request)
            .Setup(x => x.GetCredentials())
            .Returns(credentials);
            Mock.Get(authService)
            .Setup(x => x.Authenticate(credentials))
            .Returns(new AuthenticationResult(user.GetIdentity(), user.Username, true));

            user.Username = credentials.Username;
            user.GenerateIdentity();

            // Act
            var result = sut.AttemptLogin(request);

            // Assert
            Assert.IsTrue(result.Success);
        }
Пример #20
0
        public void AttemptLogin_result_indicates_correct_time_to_next_attempt_when_throttling_prohibits_login([Frozen] CSF.Security.Authentication.IPasswordAuthenticationService authService,
                                                                                                               [Frozen] ILoginThrottlingService throttling,
                                                                                                               LoginLogoutManager sut,
                                                                                                               ILoginRequest request,
                                                                                                               LoginCredentials credentials,
                                                                                                               [HasIdentity] User user,
                                                                                                               TimeSpan time)
        {
            // Arrange
            Mock.Get(request)
            .Setup(x => x.GetCredentials())
            .Returns(credentials);
            Mock.Get(authService)
            .Setup(x => x.Authenticate(credentials))
            .Returns(new AuthenticationResult(user.GetIdentity(), user.Username, true));
            Mock.Get(throttling)
            .Setup(x => x.GetThrottlingResponse(request))
            .Returns(new LoginThrottlingResponse(time));

            user.Username = credentials.Username;
            user.GenerateIdentity();

            // Act
            var result = sut.AttemptLogin(request);

            // Assert
            Assert.AreEqual(time, result.TimeBeforeNextAttempt.GetValueOrDefault());
        }
Пример #21
0
 async Task <IUserBase> ISDHCUserManager.CheckLoginRequest(ILoginRequest login)
 {
     return(await this.CheckLoginRequest(login));
 }
Пример #22
0
 private string GetEndPointUrl(ILoginRequest request)
 {
     return(_customerLoginEndPoint);
 }
Пример #23
0
 public ActionResult Login(ILoginRequest loginRequest)
 {
     _dashboard.LoginResponse = _accountProfileService.Login(loginRequest);
     return(RedirectToAction("Index"));
 }
Пример #24
0
        public void AttemptLogin_returns_failure_result_when_throttling_prohibits_a_login([Frozen] CSF.Security.Authentication.IPasswordAuthenticationService authService,
                                                                                          [Frozen] ILoginThrottlingService throttling,
                                                                                          LoginLogoutManager sut,
                                                                                          ILoginRequest request,
                                                                                          LoginCredentials credentials,
                                                                                          [HasIdentity] User user,
                                                                                          TimeSpan time)
        {
            // Arrange
            Mock.Get(request)
            .Setup(x => x.GetCredentials())
            .Returns(credentials);
            Mock.Get(authService)
            .Setup(x => x.Authenticate(credentials))
            .Returns(new AuthenticationResult(user.GetIdentity(), user.Username, true));
            Mock.Get(throttling)
            .Setup(x => x.GetThrottlingResponse(request))
            .Returns(new LoginThrottlingResponse(time));

            user.Username = credentials.Username;
            user.GenerateIdentity();

            // Act
            var result = sut.AttemptLogin(request);

            // Assert
            Assert.IsFalse(result.Success);
        }
Пример #25
0
 ICurrentUserInfo LogUserIn(ILoginRequest request, AuthenticationResult result)
 {
     loginLogoutService.LogUserIn(result);
     return(new UserInformation(result.UserIdentity, result.Username));
 }