token-service.ts 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. import { Injectable } from '@angular/core';
  2. import { Http, Response, Headers, RequestOptions } from '@angular/http';
  3. import { Observable } from 'rxjs/Observable'
  4. import { Token } from '../components/token-component';
  5. import 'rxjs/add/operator/map';
  6. import 'rxjs/add/operator/catch';
  7. import 'rxjs/add/observable/throw'
  8. @Injectable()
  9. export class TokenService {
  10. username: string = 'admin';
  11. password: string = 'admin';
  12. url: string = '192.168.100.141:22000';
  13. constructor(public http: Http) {
  14. }
  15. // Get token
  16. getToken(): void {
  17. // let response = this.getTokenFromServer();
  18. //
  19. // response.subscribe(data => {
  20. // this.setLocalToken(data.value);
  21. // }, err => console.error(err),
  22. // () => console.log('Token received')
  23. // );
  24. this.checkTokenOnServer();
  25. }
  26. // Check if token is present locally
  27. tokenIsPresent(): boolean {
  28. return this.getTokenFromLocal() ? true : false;
  29. }
  30. // Check local token on the server
  31. checkTokenOnServer(): Observable<Response> {
  32. let body = 'token=' + this.getTokenFromLocal();
  33. let headers = new Headers({ 'Content-Type': 'application/x-www-form-urlencoded' });
  34. let options = new RequestOptions({ headers: headers });
  35. return this.http.post(this.normalizeCheckUrl(this.url), body, options).map(this.extractCheckData).catch(this.handleError);
  36. }
  37. // Extract check value from token verification
  38. private extractCheckData(response: Response): boolean {
  39. let body = response.json();
  40. return body.token == 'valid' ? true : false;
  41. }
  42. // Get token from
  43. private getTokenFromLocal(): string {
  44. return localStorage.getItem('odoo');
  45. }
  46. private setLocalToken(value): void {
  47. localStorage.setItem('odoo', value);
  48. }
  49. // Check if introduced url is valid
  50. private checkUrl(): boolean {
  51. return this.url.includes('.');
  52. }
  53. // Normalize provide url
  54. private normalizeCheckUrl(url: string): string {
  55. return (url.startsWith('http://') ? url : 'http://' + url) + '/api/check';
  56. }
  57. // Normalize provide url
  58. private normalizeJwtUrl(url: string): string {
  59. return (url.startsWith('http://') ? url : 'http://' + url) + '/api/jwt';
  60. }
  61. // Get token from server
  62. private getTokenFromServer(): Observable<Token> {
  63. let body = 'username=' + this.username + '&password=' + this.password;
  64. let headers = new Headers({ 'Content-Type': 'application/x-www-form-urlencoded' });
  65. let options = new RequestOptions({ headers: headers });
  66. return this.http.post(this.normalizeJwtUrl(this.url), body, options).map(this.extractTokenData).catch(this.handleError);
  67. }
  68. // Extract token data from http response
  69. private extractTokenData(response: Response) {
  70. let body = response.json();
  71. let token = new Token(body.token);
  72. return token;
  73. }
  74. // Handle error if ocurred
  75. private handleError(error: any) {
  76. let msg = error._body;
  77. return Observable.throw(msg);
  78. }
  79. }