From c02c47efcb00782feb1461534923023a711d4f15 Mon Sep 17 00:00:00 2001 From: sowgro Date: Sun, 2 Mar 2025 11:22:48 -0500 Subject: First attempt at an authentication system. --- ufund-ui/src/app/services/users.service.ts | 40 +++++++++++++++++++++++++----- 1 file changed, 34 insertions(+), 6 deletions(-) (limited to 'ufund-ui/src/app/services/users.service.ts') diff --git a/ufund-ui/src/app/services/users.service.ts b/ufund-ui/src/app/services/users.service.ts index 571c004..28cc266 100644 --- a/ufund-ui/src/app/services/users.service.ts +++ b/ufund-ui/src/app/services/users.service.ts @@ -1,6 +1,6 @@ import { Injectable } from '@angular/core'; import {HttpClient, HttpHeaders} from '@angular/common/http'; -import {Observable} from 'rxjs'; +import {firstValueFrom, Observable, of, Subject} from 'rxjs'; import {User} from '../models/User'; @Injectable({ @@ -8,11 +8,24 @@ import {User} from '../models/User'; }) export class UsersService { - private currentUserID? : number + private currentUser : Subject = new Subject(); + private apiKey: string = ""; private url = "http://localhost:8080/users" + private authUrl = "http://localhost:8080/auth" private httpOptions = { - headers: new HttpHeaders({'Content-Type': 'application/json'}) + headers: new HttpHeaders({ + 'Content-Type': 'application/json', + "jelly-api-key": this.apiKey + }) + }; + private httpOptions2 = { + headers: new HttpHeaders({ + 'Content-Type': 'application/json', + "jelly-api-key": this.apiKey + }), + responseType: "text" as "json" // don't ask me how or why this works, bc i have no clue... + // see the relevant angular bug report https://github.com/angular/angular/issues/18586 }; constructor( @@ -23,7 +36,7 @@ export class UsersService { return this.http.post(this.url, data, this.httpOptions) } - getUser(id: number): Observable { + getUser(id: string): Observable { return this.http.get(`${this.url}/${id}`, this.httpOptions) } @@ -35,7 +48,22 @@ export class UsersService { return this.http.delete(`${this.url}/${id}`, this.httpOptions) } - getCurrentUser(): Observable | undefined { - return this.currentUserID ? this.getUser(this.currentUserID) : undefined + getCurrentUser() { + return this.currentUser; + } + + async login(username: string, password: string) { + let res = this.http.post(this.authUrl, {username: username, password: password}, this.httpOptions2); + this.apiKey = await firstValueFrom(res); + console.log("apikey: "+this.apiKey) + let res2 = this.http.get(`${this.url}/${username}`, { + headers: new HttpHeaders({ + 'Content-Type': 'application/json', + "jelly-api-key": this.apiKey + }) + }) + let currentU = await firstValueFrom(res2); + this.currentUser.next(currentU); + // this.currentUser.subscribe(r => console.log("currentUser: "+r.username)) } } -- cgit v1.2.3 From 51f0322db803ed3baf1f24f18a6e7a83dab58a3b Mon Sep 17 00:00:00 2001 From: sowgro Date: Sat, 15 Mar 2025 17:28:01 -0400 Subject: Add login redirection --- ufund-ui/src/app/services/users.service.ts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'ufund-ui/src/app/services/users.service.ts') diff --git a/ufund-ui/src/app/services/users.service.ts b/ufund-ui/src/app/services/users.service.ts index 28cc266..b3bbbd4 100644 --- a/ufund-ui/src/app/services/users.service.ts +++ b/ufund-ui/src/app/services/users.service.ts @@ -1,6 +1,6 @@ import { Injectable } from '@angular/core'; import {HttpClient, HttpHeaders} from '@angular/common/http'; -import {firstValueFrom, Observable, of, Subject} from 'rxjs'; +import {BehaviorSubject, firstValueFrom, Observable} from 'rxjs'; import {User} from '../models/User'; @Injectable({ @@ -8,7 +8,7 @@ import {User} from '../models/User'; }) export class UsersService { - private currentUser : Subject = new Subject(); + private currentUser : BehaviorSubject = new BehaviorSubject(null); private apiKey: string = ""; private url = "http://localhost:8080/users" @@ -48,10 +48,14 @@ export class UsersService { return this.http.delete(`${this.url}/${id}`, this.httpOptions) } - getCurrentUser() { + getCurrentUserSubject() { return this.currentUser; } + getCurrentUser() { + return this.currentUser.getValue() + } + async login(username: string, password: string) { let res = this.http.post(this.authUrl, {username: username, password: password}, this.httpOptions2); this.apiKey = await firstValueFrom(res); -- cgit v1.2.3 From d97d4d430113088c4f52f53c040d8705c66b410e Mon Sep 17 00:00:00 2001 From: sowgro Date: Sat, 15 Mar 2025 18:34:58 -0400 Subject: Add support for account creation --- ufund-ui/src/app/services/users.service.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'ufund-ui/src/app/services/users.service.ts') diff --git a/ufund-ui/src/app/services/users.service.ts b/ufund-ui/src/app/services/users.service.ts index b3bbbd4..c570ccf 100644 --- a/ufund-ui/src/app/services/users.service.ts +++ b/ufund-ui/src/app/services/users.service.ts @@ -32,8 +32,8 @@ export class UsersService { private http: HttpClient ) {} - createUser(data: User): Observable { - return this.http.post(this.url, data, this.httpOptions) + async createUser(username:string, password:string) { + await firstValueFrom(this.http.post(this.url, {username: username, password: password}, this.httpOptions)) } getUser(id: string): Observable { -- cgit v1.2.3