From 3280f48f20ca37fd3c51bc70830f3e74367322f9 Mon Sep 17 00:00:00 2001 From: Derek Holloway Date: Tue, 29 Jul 2025 19:59:19 -0700 Subject: [PATCH] Get working enough for other app access --- src/Client/src/app/app.ts | 4 +- src/Client/src/app/models/Account.ts | 2 +- .../pages/account/login/login.component.ts | 2 +- src/Client/src/app/services/Authentication.ts | 49 +++---------------- .../Controllers/AuthenticationController.cs | 48 +----------------- 5 files changed, 13 insertions(+), 92 deletions(-) diff --git a/src/Client/src/app/app.ts b/src/Client/src/app/app.ts index 596a131..0620a88 100644 --- a/src/Client/src/app/app.ts +++ b/src/Client/src/app/app.ts @@ -15,7 +15,9 @@ export class App { @ViewChild('jobsLink') jobLink!: ElementRef; @ViewChild('resumesLink') resumeLink!: ElementRef; - constructor(public auth: Authentication, private router: Router){} + constructor(public auth: Authentication, private router: Router){ + this.auth.getLoginState(); + } ngAfterViewInit(){ let ViewLinks = [ this.homeLink, this.resumeLink, this.jobLink ]; diff --git a/src/Client/src/app/models/Account.ts b/src/Client/src/app/models/Account.ts index 99c9acf..12f75e0 100644 --- a/src/Client/src/app/models/Account.ts +++ b/src/Client/src/app/models/Account.ts @@ -1,5 +1,5 @@ export class Account { - public id: number = 0; + public id: number = -1; public userName: string = ""; public email: string = ""; public emailVerified: boolean = false; diff --git a/src/Client/src/app/pages/account/login/login.component.ts b/src/Client/src/app/pages/account/login/login.component.ts index d387b3d..07b2577 100644 --- a/src/Client/src/app/pages/account/login/login.component.ts +++ b/src/Client/src/app/pages/account/login/login.component.ts @@ -43,7 +43,7 @@ export class LoginComponent { } this.errorMsgs.push("Waiting for response from server"); - this.http.post( "https://auth.mistox.com/api/auth/login", { "UserName": this.UserName, "Password": this.Password, "StayLoggedIn": this.StayLoggedIn }, { responseType: 'text' } ).subscribe({ + this.http.post( "api/auth/login", { "UserName": this.UserName, "Password": this.Password, "StayLoggedIn": this.StayLoggedIn }, { responseType: 'text' } ).subscribe({ next: data => { this.errorMsgs = [ "Login Token: " + data ]; window.location.href = this.returnURL + "?LoginToken=" + data; diff --git a/src/Client/src/app/services/Authentication.ts b/src/Client/src/app/services/Authentication.ts index 60803ba..d33ee06 100644 --- a/src/Client/src/app/services/Authentication.ts +++ b/src/Client/src/app/services/Authentication.ts @@ -6,30 +6,21 @@ import { HttpClient, HttpHeaders, HttpParams } from "@angular/common/http"; @Injectable({ providedIn: 'root' }) export class Authentication{ - private _user = new BehaviorSubject(this.getUserFromStorage()); + private _user = new BehaviorSubject( new Account ); user$ = this._user.asObservable(); constructor( private http: HttpClient){ } - Login(UserName: string, Password: string, StayLoggedIn: boolean): Observable { - - const body = new HttpParams() - .set("UserName", UserName) - .set("PasswordHash", Password) - .set("StayLoggedIn", StayLoggedIn ); - const headers = new HttpHeaders({ - 'Content-Type': 'application/x-www-form-urlencoded' - }); - - let sub = this.http.post( "api/account/login", body, { headers } ); + getLoginState(): Observable { + const headers = new HttpHeaders({ 'Content-Type': 'application/x-www-form-urlencoded' }); + let sub = this.http.post( "api/loginState", {}, { headers } ); sub.subscribe({ next: data => { data.passwordHash = ""; this._user.next(data); - this.setUserToStorage(data, StayLoggedIn == true ? SessionType.Forever : SessionType.Session); }, error: err => { - console.log("HTTP Error Signing In: ", err.error); + console.log("No login state found: ", err.error); } }); return sub; @@ -37,8 +28,7 @@ export class Authentication{ Logout(){ this._user.next( new Account ); - this.delUserFromStorage(); - return this.http.post( "api/account/logout", {}, { responseType: 'json' } ); + return this.http.post( "api/logout", {}, { responseType: 'json' } ); } get isLoggedIn(): boolean { @@ -48,33 +38,6 @@ export class Authentication{ get loggedInUser(): Account { return this._user.value; } - - private getUserFromStorage(): Account { - const foreverUser = localStorage.getItem('user'); - const sessionUser = sessionStorage.getItem('user'); - let user = null; - if (foreverUser != null){ - user = JSON.parse(foreverUser) - } else if (sessionUser != null){ - user = JSON.parse(sessionUser) - } else { - user = new Account(); - user.id = -1; - } - return user; - } - private setUserToStorage(user: Account, session: SessionType): void { - if (session == SessionType.Forever){ - localStorage.setItem('user', JSON.stringify(user)); - }else if(session == SessionType.Session){ - sessionStorage.setItem('user', JSON.stringify(user)); - } - } - private delUserFromStorage(): void { - localStorage.removeItem('user'); - sessionStorage.removeItem('user'); - } - } export enum SessionType { diff --git a/src/Server/Controllers/AuthenticationController.cs b/src/Server/Controllers/AuthenticationController.cs index acd951f..b682a82 100755 --- a/src/Server/Controllers/AuthenticationController.cs +++ b/src/Server/Controllers/AuthenticationController.cs @@ -4,9 +4,6 @@ using Auth.Services.DatabaseService; using Auth.Entities; using Auth.DTO; using System.Web.Http; -using System.IdentityModel.Tokens.Jwt; -using Microsoft.IdentityModel.Tokens; -using System.Security.Claims; namespace Auth.Controllers { [ApiController] @@ -19,9 +16,9 @@ namespace Auth.Controllers { _emailContext = emailContext; } - [Route("get")] + [Route("loginState")] [HttpPost] - public async Task> Get() { + public async Task> LoginState() { try { if (isLoggedIn()) { return Ok(await getLoggedInUser()); @@ -33,47 +30,6 @@ namespace Auth.Controllers { } } - [Route("login")] - [HttpPost] - public async Task> Login([FromBody] LoginRequest request) { - try { - Account? test = await _databaseService.GetAccount(request.UserName.ToLower()); - if (test != null) { - if (test.EmailVerified == true) { - if (test.FailedPasswordLock) { - if (test.CurrentPasswordAttempts >= test.PasswordAttempts) { - return BadRequest("Too many failed password attempts. Please reset your password"); - } - } - if (BCrypt.Net.BCrypt.Verify(request.Password, test.PasswordHash)) { - test.CurrentPasswordAttempts = 0; - await _databaseService.SetAccount(test); - - string jwt = AuthJWT.GenereateJWTToken(test, request.StayLoggedIn); - SignIn(Response, jwt); - - return Ok(test); - } - else { - test.CurrentPasswordAttempts += 1; - await _databaseService.SetAccount(test); - return BadRequest("Wrong Password"); - } - } - else { - await SendVerify(new SendVerifyEmailRequest { - UserName = test.UserName - }); - return BadRequest("A new verify email has been sent. \n Note only 1 email send every 5 mintes"); - } - } - return BadRequest("Account Not Found"); - } catch (Exception ex) { - Console.WriteLine("Login Error: " + ex.Message); - return BadRequest("An internal server error has occured"); - } - } - [Route("logout")] [HttpPost] public ActionResult Logout() {