2017-08-01 23:50:28 +02:00
|
|
|
import { Injectable } from '@angular/core';
|
2017-08-04 08:32:49 +02:00
|
|
|
import { HttpClient, HttpHeaders } from '@angular/common/http';
|
|
|
|
|
|
|
|
import { Observable} from 'rxjs/Rx';
|
2017-07-08 00:51:59 +02:00
|
|
|
|
2017-08-01 23:50:28 +02:00
|
|
|
import * as base64 from 'base64util';
|
2017-07-08 00:51:59 +02:00
|
|
|
|
2017-08-04 08:32:49 +02:00
|
|
|
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';
|
|
|
|
|
2017-08-01 23:50:28 +02:00
|
|
|
@Injectable()
|
|
|
|
export class LoginService {
|
2017-08-04 08:32:49 +02:00
|
|
|
|
|
|
|
constructor(
|
|
|
|
private httpClient: HttpClient,
|
|
|
|
private logger: Logger,
|
|
|
|
private ngbModal: NgbModal,
|
|
|
|
) {}
|
|
|
|
|
|
|
|
public readonly url: string = '/api/user/login';
|
|
|
|
|
|
|
|
login(): Observable<Token> {
|
|
|
|
let modal = this.ngbModal.open(LoginModalComponent);
|
|
|
|
|
|
|
|
sessionStorage.clear();
|
|
|
|
|
|
|
|
let observable: Observable<any> = 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<any> {
|
|
|
|
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 {
|
2017-08-01 23:50:28 +02:00
|
|
|
return sessionStorage.getItem('access_token');
|
|
|
|
}
|
2017-08-04 08:32:49 +02:00
|
|
|
|
|
|
|
set accessToken(token: string) {
|
|
|
|
sessionStorage.setItem('access_token', token);
|
|
|
|
}
|
2017-07-08 00:51:59 +02:00
|
|
|
};
|