mirror of
https://github.com/xuthus83/pigallery2.git
synced 2024-11-03 21:04:03 +08:00
68 lines
1.7 KiB
TypeScript
68 lines
1.7 KiB
TypeScript
import {Injectable} from "@angular/core";
|
|
import {UserDTO, UserRoles} from "../../../../common/entities/UserDTO";
|
|
import {BehaviorSubject} from "rxjs/BehaviorSubject";
|
|
import {UserService} from "./user.service";
|
|
import {LoginCredential} from "../../../../common/entities/LoginCredential";
|
|
import {Cookie} from "ng2-cookies";
|
|
import {Config} from "../../../../common/config/public/Config";
|
|
|
|
declare module ServerInject {
|
|
export let user: UserDTO;
|
|
}
|
|
|
|
@Injectable()
|
|
export class AuthenticationService {
|
|
|
|
public user: BehaviorSubject<UserDTO>;
|
|
|
|
constructor(private _userService: UserService) {
|
|
this.user = new BehaviorSubject(null);
|
|
|
|
//picking up session..
|
|
if (this.isAuthenticated() == false && Cookie.get('pigallery2-session') != null) {
|
|
if (typeof ServerInject !== "undefined" && typeof ServerInject.user !== "undefined") {
|
|
this.user.next(ServerInject.user);
|
|
}
|
|
this.getSessionUser();
|
|
} else {
|
|
if (Config.Client.authenticationRequired === false) {
|
|
this.user.next(<UserDTO>{name: "", password: "", role: UserRoles.Admin});
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
private async getSessionUser(): Promise<void> {
|
|
try {
|
|
this.user.next(await this._userService.getSessionUser());
|
|
} catch (error) {
|
|
console.log(error);
|
|
}
|
|
|
|
}
|
|
|
|
|
|
public async login(credential: LoginCredential): Promise<UserDTO> {
|
|
const user = await this._userService.login(credential);
|
|
this.user.next(user);
|
|
return user;
|
|
}
|
|
|
|
|
|
public isAuthenticated(): boolean {
|
|
if (Config.Client.authenticationRequired === false) {
|
|
return true;
|
|
}
|
|
return !!(this.user.value && this.user.value != null);
|
|
}
|
|
|
|
|
|
|
|
public logout() {
|
|
this._userService.logout();
|
|
this.user.next(null);
|
|
}
|
|
|
|
|
|
}
|