public async Task <HttpResponseMessage> LoginFromSSO([FromBody] LoginRequestPayload requestPayload) { using (var _db = new DatabaseContext()) { try { // Throws ExceptionService.InvalidModelPayloadException ControllerHelpers.ValidateModelAndPayload(ModelState, requestPayload); // Throws ExceptionService.InvalidGuidException Guid userSSOID = ControllerHelpers.ParseAndCheckId(requestPayload.SSOUserId); var _ssoLoginManager = new KFC_SSO_Manager(_db); // user will get logged in or registered var loginSession = await _ssoLoginManager.LoginFromSSO( requestPayload.Email, userSSOID, requestPayload.Timestamp, requestPayload.Signature); _db.SaveChanges(); var redirectURL = "https://pointmap.net/#/login/?token=" + loginSession.Token; var response = SSOLoginResponse.ResponseRedirect(Request, redirectURL); return(response); } catch (Exception e) when(e is InvalidGuidException || e is InvalidModelPayloadException || e is InvalidEmailException) { var response = new HttpResponseMessage(HttpStatusCode.BadRequest); response.Content = new StringContent(e.Message); return(response); } catch (Exception e) when(e is UserAlreadyExistsException) { var response = new HttpResponseMessage(HttpStatusCode.Conflict); response.Content = new StringContent(e.Message); return(response); } catch (Exception e) when(e is InvalidTokenSignatureException) { var response = new HttpResponseMessage(HttpStatusCode.Unauthorized); response.Content = new StringContent(e.Message); return(response); } catch (Exception e) { if (e is DbUpdateException || e is DbEntityValidationException) { _db.RevertDatabaseChanges(_db); } var response = new HttpResponseMessage(HttpStatusCode.InternalServerError); return(response); } } }
public void Login_NewUser_ValidUserName_Success() { using (var _db = ut.CreateDataBaseContext()) { _ssoLoginManager = new KFC_SSO_Manager(_db); var user = ut.CreateSSOUserInDb(); var timestamp = 8283752242; MockLoginPayload mock_payload = new MockLoginPayload { email = user.Username, ssoUserId = user.Id, timestamp = timestamp }; var response = _ssoLoginManager.LoginFromSSO(mock_payload.email, mock_payload.ssoUserId, timestamp, mock_payload.Signature()); Assert.IsNotNull(response); } }
public void Login_ExistingUser_Success() { var existing_user = ut.CreateSSOUserInDb(); var existing_username = existing_user.Username; var existing_ssoID = existing_user.Id; var timestamp = 12312312; var _ssoAuth = new SignatureService(); MockLoginPayload mock_payload = new MockLoginPayload { email = existing_username, ssoUserId = existing_ssoID, timestamp = timestamp }; var signature = mock_payload.Signature(); using (var _db = ut.CreateDataBaseContext()) { _ssoLoginManager = new KFC_SSO_Manager(_db); var response = _ssoLoginManager.LoginFromSSO(existing_username, existing_ssoID, timestamp, signature); Assert.IsNotNull(response); } }
public async void Login_NewUser_InvalidUserName_Failure_ExceptionThrown() { var invalid_username = Guid.NewGuid() + ".com"; var valid_ssoID = Guid.NewGuid(); var timestamp = 8283752242; MockLoginPayload mock_payload = new MockLoginPayload { email = invalid_username, ssoUserId = valid_ssoID, timestamp = timestamp }; var signature = mock_payload.Signature(); using (var _db = ut.CreateDataBaseContext()) { _ssoLoginManager = new KFC_SSO_Manager(_db); var result = await _ssoLoginManager.LoginFromSSO(invalid_username, valid_ssoID, timestamp, signature); } //Assert - catch exception }