import {EventEmitter, Injectable} from '@angular/core'; import {HttpClient} from '@angular/common/http'; import {ApiV1LoginResponse} from '../models/api-v1-login-response'; import {Router} from '@angular/router'; import {PeopleModel} from '../models/people.model'; import {UserExtraModel} from '../models/user-extra.model'; import {Observable} from 'rxjs'; import {AppConfig} from '../app.config'; @Injectable() export class AuthService { public apiUrl = ''; public apiWsUrl = ''; public loggedIn = ApiV1LoginResponse.EmptyNew(); loginSuccess = new EventEmitter (); constructor( private http: HttpClient , private router: Router, private config: AppConfig) { this.apiUrl = config.apiUrl; this.apiWsUrl = config.apiWsUrl; } public AutoLogin(): void { const sfm: ApiV1LoginResponse = JSON.parse(localStorage.getItem('sfm')); if (!sfm) { console.log('no auto login'); return; } this.loggedIn = new ApiV1LoginResponse( sfm.login, sfm.machineId, sfm.session, sfm.sessionExpire, sfm.role, new PeopleModel( sfm.User.Id, sfm.User.First, sfm.User.Last, sfm.User.Middle, sfm.User.Title, sfm.User.Display, sfm.User.Nick, sfm.User.Enabled) ); if ( sfm.UserExtra !== undefined ) { this.loggedIn.UserExtra = new UserExtraModel(sfm.UserExtra); } this.loginSuccess.emit(this.loggedIn); // console.log ( 'auto login emit events', this.loggedIn); } isAuthenticated(): boolean { return this.loggedIn.login; } allowEditLoan(): boolean{ return true; } saveSessionInfo(): void { localStorage.setItem('sfm', JSON.stringify(this.loggedIn)); localStorage.setItem('mid', this.loggedIn.machineId); } login(email: string, password: string): void { this.http.post(this.apiUrl + 'login', {u: email, p: password}).subscribe( responseData => { this.loggedIn.session = responseData['Biukop-Session']; this.loggedIn.login = responseData.login; this.loggedIn.machineId = responseData['Biukop-Mid']; this.loggedIn.sessionExpire = responseData.sessionExpire; this.loggedIn.role = responseData.role; if ( responseData.User !== undefined) { this.loggedIn.User = new PeopleModel( responseData.User.Id, responseData.User.First, responseData.User.Last, responseData.User.Middle, responseData.User.Title, responseData.User.Display, responseData.User.Nick, responseData.User.Enabled, ); if (responseData.UserExtra !== undefined ) { this.loggedIn.UserExtra = new UserExtraModel(responseData.UserExtra); }else{ this.loggedIn.UserExtra = UserExtraModel.EmptyNew(); } }else{ this.loggedIn.User = PeopleModel.EmptyNew(); } this.saveSessionInfo(); this.loginSuccess.emit(responseData); }, error => { this.loggedIn = ApiV1LoginResponse.EmptyNew(); console.log('login error', error); this.loginSuccess.emit(this.loggedIn); } ); } logout(): void { this.loggedIn = ApiV1LoginResponse.EmptyNew(); localStorage.removeItem('sfm'); this.loginSuccess.emit(this.loggedIn); this.router.navigate(['/login']).then(r => { console.log('prepare to log back in'); } ); this.http.post(`${this.apiUrl}logout`, '').subscribe( resp => { console.log('successfully logout from server'); }, event => { console.log('error logout from server', event); } ); } public getUrl(key: string): string{ return this.config.getUrl(key); // const s = this.apiUrl + key; // const kvPair: {key: string, value: string}[] = [ // {key: 'login', value: this.apiUrl + 'login'}, // {key: 'logout', value: this.apiUrl + 'logout'} // ]; // // kvPair.forEach( item => { // if ( item.key === key) { // return item.value; // } // }); // // // not found if arrive here // return s; } public UpdatePeopleInfo(people: PeopleModel): void{ this.loggedIn.User.Display = people.Display; this.loggedIn.User.First = people.First; this.loggedIn.User.Last = people.Last; this.saveSessionInfo(); } public LoginAvailable(v: string): Observable { return this.http.get(this.getUrl('login-available/' + v)); } public isAdmin(): boolean { return this.loggedIn.role === 'admin'; } public isBroker(): boolean { return this.loggedIn.role === 'broker'; } public isUser(): boolean { return this.loggedIn.login === true; } public isCurrentUser(id: string): boolean { return this.loggedIn.login === true && this.loggedIn.User !== undefined && this.loggedIn.User.Id === id; } }