import { HttpClient } from '@angular/common/http'; import { inject, Injectable } from '@angular/core'; import { ExternalLogin, Login } from '../models/login'; import { RegisterInfo } from '../models/register-info'; import { LoginResult, User } from '../models/user'; import { parseUser } from './jwt-util'; /** Authentication API Service */ @Injectable({ providedIn: 'root' }) export class Authentication { private http = inject(HttpClient); /** Send basic credentials to login endpoint. */ public async login(userData: Login): Promise { return this.loginPost('/login', userData); } /** Send user info from 3rd party provider to external login endpoint. */ public async loginWith(userInfo: ExternalLogin): Promise { return this.loginPost('/extlogin', userInfo); } /** Send user info to register endpoint. */ public async register(userData: RegisterInfo): Promise { return this.loginPost('/register', userData); } protected async loginPost(endpoint: string, userData: any): Promise { let user: User; try { const data = await this.http.post(endpoint, userData).toPromise() as string; user = parseUser(data); } catch (e: any) { return { error: e.message }; } return { user }; } }