token-service.ts 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  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 { PreferencesProvider } from './preferences-provider';
  6. import 'rxjs/add/operator/map';
  7. import 'rxjs/add/operator/catch';
  8. import 'rxjs/add/observable/throw'
  9. @Injectable()
  10. export class TokenService {
  11. username: string = 'admin';
  12. password: string = 'admin';
  13. url: string = '192.168.88.123:8069';
  14. constructor(
  15. private http: Http,
  16. private preferencesProvider: PreferencesProvider
  17. ) {
  18. }
  19. /**
  20. * Pass token auth
  21. */
  22. getToken(): Promise<any> {
  23. return new Promise((resolve, reject) => {
  24. this.getTokenFromServer().subscribe(data => {
  25. this.preferencesProvider.setHost(this.url);
  26. this.preferencesProvider.setToken(data.value);
  27. resolve(data.value);
  28. }, err => {
  29. reject(err);
  30. });
  31. });
  32. }
  33. /**
  34. * Check if token is present locally
  35. */
  36. tokenIsPresent(): boolean {
  37. return this.getTokenFromLocal() ? true : false;
  38. }
  39. /**
  40. * Check local token on the server
  41. */
  42. checkTokenOnServer(): Observable<Response> {
  43. let body = 'token=' + this.getTokenFromLocal();
  44. let headers = new Headers({ 'Content-Type': 'application/x-www-form-urlencoded' });
  45. let options = new RequestOptions({ headers: headers });
  46. return this.http.post(this.normalizeCheckUrl(this.url), body, options).map(this.extractCheckData).catch(this.handleError);
  47. }
  48. /**
  49. * Extract check value from token verification
  50. */
  51. private extractCheckData(response: Response): boolean {
  52. let body = response.json();
  53. return body.token == 'valid' ? true : false;
  54. }
  55. /**
  56. * Get token from local storage
  57. */
  58. private getTokenFromLocal(): string {
  59. return this.preferencesProvider.getToken();
  60. }
  61. /**
  62. * Handle error if ocurred
  63. */
  64. private normalizeCheckUrl(url: string): string {
  65. return (url.startsWith('http://') ? url : 'http://' + url) + '/api/check';
  66. }
  67. /**
  68. * Normalize provide url
  69. */
  70. private normalizeJwtUrl(url: string): string {
  71. return (url.startsWith('http://') ? url : 'http://' + url) + '/api/jwt';
  72. }
  73. /**
  74. * Get token from server
  75. */
  76. private getTokenFromServer(): Observable<Token> {
  77. let body = 'username=' + this.username + '&password=' + this.password;
  78. let headers = new Headers({ 'Content-Type': 'application/x-www-form-urlencoded' });
  79. let options = new RequestOptions({ headers: headers });
  80. return this.http.post(this.normalizeJwtUrl(this.url), body, options).map(this.extractTokenData).catch(this.handleError);
  81. }
  82. /**
  83. * Extract token data from http response
  84. */
  85. private extractTokenData(response: Response) {
  86. let body = response.json();
  87. let token = new Token(body.token);
  88. return token;
  89. }
  90. /**
  91. * Handle error if ocurred
  92. */
  93. private handleError(error: any) {
  94. let msg = error._body;
  95. return Observable.throw(msg);
  96. }
  97. }