import { Injectable } from '@angular/core'; import { HttpClient, HttpHeaders } from '@angular/common/http'; import { Observable} from 'rxjs/Rx'; import * as base64 from 'base64util'; import { Logger } from '@nsalaun/ng-logger'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; import { Token } from './token'; import { LoginModalComponent } from './loginModal.component'; import { Login } from './login'; @Injectable() export class LoginService { constructor( private httpClient: HttpClient, private logger: Logger, private ngbModal: NgbModal, ) {} public readonly url: string = '/api/user/login'; login(): Observable { let modal = this.ngbModal.open(LoginModalComponent); sessionStorage.clear(); let observable: Observable = Observable.fromPromise(modal.result); return observable.flatMap((login: Login) => this.doLogin(login) ).map((token: Token): Token => { this.accessToken = token.access_token; return token; }); } logout() { sessionStorage.clear(); } doLogin(login: Login): Observable { var authdata = base64.encode( `${login.email}:${login.password}` ); let headers = new HttpHeaders() headers = headers.set('Authorization', `Basic ${authdata}`); this.logger.log("Headers", headers); return this.httpClient.post(this.url, {}, { headers: headers }); } get accessToken(): string { return sessionStorage.getItem('access_token'); } set accessToken(token: string) { sessionStorage.setItem('access_token', token); } };