Guest User

Untitled

a guest
May 8th, 2018
32
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.64 KB | None | 0 0
  1. import { BehaviorSubject } from 'rxjs/BehaviorSubject';
  2. import { Observable } from 'rxjs/Observable';
  3. import { HttpClient } from '@angular/common/http';
  4. import { Injectable } from '@angular/core';
  5. import { map } from 'rxjs/operators';
  6.  
  7. function parseJwt(token) {
  8. if (!token) {
  9. return null;
  10. }
  11. const base64Url = token.split('.')[1];
  12. const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');
  13. return JSON.parse(window.atob(base64));
  14. }
  15.  
  16. @Injectable()
  17. export class AuthenticationService {
  18. private readonly _tokenKey = 'currentUser';
  19. private readonly _url = '/API/users';
  20. private _user$: BehaviorSubject<string>;
  21.  
  22. public redirectUrl: string;
  23.  
  24. constructor(private http: HttpClient) {
  25. let parsedToken = parseJwt(localStorage.getItem(this._tokenKey));
  26. if (parsedToken) {
  27. const expires =
  28. new Date(parseInt(parsedToken.exp, 10) * 1000) < new Date();
  29. if (expires) {
  30. localStorage.removeItem(this._tokenKey);
  31. parsedToken = null;
  32. }
  33. }
  34. this._user$ = new BehaviorSubject<string>(
  35. parsedToken && parsedToken.username
  36. );
  37. }
  38.  
  39. get user$(): BehaviorSubject<string> {
  40. return this._user$;
  41. }
  42.  
  43. get token(): string {
  44. const localToken = localStorage.getItem(this._tokenKey);
  45. return !!localToken ? localToken : '';
  46. }
  47.  
  48. login(username: string, password: string): Observable<boolean> {
  49. return this.http.post(`${this._url}/login`, { username, password }).pipe(
  50. map((res: any) => {
  51. const token = res.token;
  52. if (token) {
  53. localStorage.setItem(this._tokenKey, token);
  54. this._user$.next(username);
  55. return true;
  56. } else {
  57. return false;
  58. }
  59. })
  60. );
  61. }
  62.  
  63. logout() {
  64. if (this.user$.getValue()) {
  65. localStorage.removeItem(this._tokenKey);
  66. setTimeout(() => this._user$.next(null));
  67. }
  68. }
  69.  
  70. register(username: string, password: string): Observable<boolean> {
  71. return this.http.post(`${this._url}/register`, { username, password }).pipe(
  72. map((res: any) => {
  73. const token = res.token;
  74. if (token) {
  75. localStorage.setItem(this._tokenKey, token);
  76. this._user$.next(username);
  77. return true;
  78. } else {
  79. return false;
  80. }
  81. })
  82. );
  83. }
  84.  
  85. checkUserNameAvailability(username: string): Observable<boolean> {
  86. return this.http.post(`${this._url}/checkusername`, { username }).pipe(
  87. map((item: any) => {
  88. if (item.username === 'alreadyexists') {
  89. return false;
  90. } else {
  91. return true;
  92. }
  93. })
  94. );
  95. }
  96. }
Add Comment
Please, Sign In to add comment