Advertisement
Guest User

Untitled

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