1
0
mirror of https://github.com/xuthus83/pigallery2.git synced 2024-11-03 21:04:03 +08:00
pigallery2/frontend/app/model/network/authentication.service.ts
2017-07-14 09:11:04 +02:00

77 lines
2.0 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 async shareLogin(password: string): Promise<UserDTO> {
const user = await this._userService.shareLogin(password);
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 isAuthorized(role: UserRoles) {
return this.user.value && this.user.value.role >= role;
}
public logout() {
this._userService.logout();
this.user.next(null);
}
}