Files
SkydiveLogs/Front/skydivelogs-app/src/services/authentication.service.ts
2021-03-26 15:05:06 +01:00

83 lines
2.6 KiB
TypeScript

import { Injectable } from "@angular/core";
import { HttpClient } from "@angular/common/http";
import { BehaviorSubject, Observable } from "rxjs";
import { map } from "rxjs/operators";
import { User } from "../models/user";
import { BaseService } from "./base.service";
@Injectable({ providedIn: "root" })
export class AuthenticationService extends BaseService {
private currentUserSubject: BehaviorSubject<User>;
public currentUser: Observable<User>;
constructor(private http: HttpClient) {
super();
this.currentUserSubject = new BehaviorSubject<User>(
JSON.parse(localStorage.getItem("currentUser"))
);
this.currentUser = this.currentUserSubject.asObservable();
}
public get currentUserValue(): User {
return this.currentUserSubject.value;
}
public login(username: string, password: string) {
const bodyLogin = {
login: username,
password: password
};
return this.http.post<User>(`${this.apiUrl}/User/Authenticate`,
bodyLogin,
{ headers: this.headers })
.pipe(map(user => {
this.pushToken(username, password, user);
return user;
}));
}
public create(newUser: User) {
return this.http.post<User>(`${this.apiUrl}/User`,
newUser,
{ headers: this.headers })
.pipe(map(user => {
this.pushToken(newUser.login, newUser.password, user);
return user;
}));
}
public update(updatedUser: User) {
return this.http.put<User>(`${this.apiUrl}/User/${updatedUser.id}`,
updatedUser,
{ headers: this.headers })
.pipe(map(user => {
this.pushToken(updatedUser.login, updatedUser.password, user);
return user;
}));
}
private pushToken(login: string, password: string, user: User){
if (user && user.token) {
user.authdata = window.btoa(login + ":" + password);
localStorage.setItem("currentUser", JSON.stringify(user));
this.currentUserSubject.next(user);
}
}
public alwaysLogin() {
this.http.get(`${this.apiUrl}/User/AlwaysLogin`,
{ headers: this.headers })
.subscribe(data => { console.log(data); });
}
public logout() {
localStorage.removeItem("currentUser");
this.currentUserSubject.next(null);
}
}