public void ShouldNavigateToLoginPage_IfTokenCanNotBeRenewed() { // Arrange _runtimeContextMock .Setup(x => x.AccessToken) .Returns(() => "access"); _runtimeContextMock .Setup(x => x.RefreshToken) .Returns(() => "refresh"); _authenticationServiceMock .Setup(x => x.RenewSession(It.IsAny <string>())) .Returns(() => Observable.Return(false)); // Act _target = new AutoLoginViewModel(_schedulerService, _viewStackService.Object, _authenticationServiceMock.Object, _runtimeContextMock.Object); _target.Activator.Activate(); // Assert _authenticationServiceMock.Verify(x => x.IsTokenExpired( It.IsAny <string>()), Times.Exactly(1)); _schedulerService.AdvanceBy(TimeSpan.FromSeconds(3)); _authenticationServiceMock.Verify(x => x.RenewSession( It.IsAny <string>()), Times.Exactly(1)); _viewStackService.Verify(x => x.PushPage( It.IsAny <LoginViewModel>(), It.IsAny <string>(), It.IsAny <bool>(), It.IsAny <bool>()), Times.Exactly(1)); }
public void ShouldPushTo_LoginViewModel_IfRuntimeContextDoesNotHaveAccessAndRefreshToken() { // Arrange _runtimeContextMock .Setup(x => x.AccessToken) .Returns(() => null); _runtimeContextMock .Setup(x => x.RefreshToken) .Returns(() => null); // Act _target = new AutoLoginViewModel(_schedulerService, _viewStackService.Object, _authenticationServiceMock.Object, _runtimeContextMock.Object); _target.Activator.Activate(); // Assert _viewStackService.Verify(x => x.PushPage( It.IsAny <LoginViewModel>(), It.IsAny <string>(), It.IsAny <bool>(), It.IsAny <bool>()), Times.Exactly(1)); }
public AutoLoginView() { InitializeComponent(); NavigationPage.SetHasNavigationBar(this, false); _autoLoginViewModel = new AutoLoginViewModel(AppBootstrapper.NavigationService, AppBootstrapper.AuthenticationService); }
public async Task <IActionResult> Post([FromBody] AutoLoginViewModel credentials) { //reset jwt options //_jwtOptions = null; //_jwtOptions = new JwtIssuerOptions(); if (!ModelState.IsValid) { return(BadRequest(ModelState)); } var identity = await GetClaimsIdentity(credentials.UserName); if (identity == null) { return(BadRequest(Errors.AddErrorToModelState("login_failure", "Invalid username.", ModelState))); } string userId = identity.Claims.Single(c => c.Type == "id").Value; ApplicationUser user = _ctx.Users.Include(t => t.UserProfile).FirstOrDefault(t => t.Id == userId); //check if user has refresh token var validRefreshToken = _ctx.RefreshTokens.FirstOrDefault(r => r.UserId == userId && r.IsEnabled && r.EndDate > DateTime.UtcNow && r.RefreshTokenId.ToString() == credentials.RefreshTokenId); if (validRefreshToken != null) { if (validRefreshToken.EndDate.AddMinutes(-30) < DateTime.UtcNow) { //create new refresh token RefreshToken rt = new RefreshToken(); rt.StartDate = DateTime.UtcNow; DateTime dtmRefreshTokenEndDate = DateTime.UtcNow; dtmRefreshTokenEndDate = dtmRefreshTokenEndDate.AddMonths(6); rt.EndDate = dtmRefreshTokenEndDate; rt.IsEnabled = true; rt.UserId = identity.Claims.Single(c => c.Type == "id").Value; bool refreshTokenAdded = false; refreshTokenAdded = await _sqlServerUow.RefreshTokens.AddAsync(rt); // Serialize and return the response var response = new { id = userId, auth_token = await _jwtFactory.GenerateEncodedToken(credentials.UserName, identity), auth_token_valid = (int)_jwtOptions.ValidFor.TotalSeconds, auth_token_created = _jwtOptions.IssuedAt, auth_token_expires = _jwtOptions.Expiration, refresh_token = rt.RefreshTokenId, two_factor_auth_enabled = user.TwoFactorEnabled, phone_number = user.PhoneNumber, email = user.Email, first_name = user.UserProfile.FirstName, surname = user.UserProfile.Surname }; var json = JsonConvert.SerializeObject(response, _serializerSettings); return(new OkObjectResult(json)); } else { // Serialize and return the response var response = new { id = userId, auth_token = await _jwtFactory.GenerateEncodedToken(credentials.UserName, identity), auth_token_valid = (int)_jwtOptions.ValidFor.TotalSeconds, auth_token_created = _jwtOptions.IssuedAt, auth_token_expires = _jwtOptions.Expiration, refresh_token = validRefreshToken.RefreshTokenId, two_factor_auth_enabled = user.TwoFactorEnabled, phone_number = user.PhoneNumber, email = user.Email, first_name = user.UserProfile.FirstName, surname = user.UserProfile.Surname }; var json = JsonConvert.SerializeObject(response, _serializerSettings); return(new OkObjectResult(json)); } } else { //create refresh token RefreshToken rt = new RefreshToken(); rt.StartDate = DateTime.UtcNow; DateTime dtmRefreshTokenEndDate = DateTime.UtcNow; dtmRefreshTokenEndDate = dtmRefreshTokenEndDate.AddMonths(6); rt.EndDate = dtmRefreshTokenEndDate; rt.IsEnabled = true; rt.UserId = identity.Claims.Single(c => c.Type == "id").Value; bool refreshTokenAdded = false; refreshTokenAdded = await _sqlServerUow.RefreshTokens.AddAsync(rt); // Serialize and return the response var response = new { id = userId, auth_token = await _jwtFactory.GenerateEncodedToken(credentials.UserName, identity), auth_token_valid = (int)_jwtOptions.ValidFor.TotalSeconds, auth_token_created = _jwtOptions.IssuedAt, auth_token_expires = _jwtOptions.Expiration, refresh_token = rt.RefreshTokenId, two_factor_auth_enabled = user.TwoFactorEnabled, phone_number = user.PhoneNumber, email = user.Email, first_name = user.UserProfile.FirstName, surname = user.UserProfile.Surname }; var json = JsonConvert.SerializeObject(response, _serializerSettings); return(new OkObjectResult(json)); } }