Advertisement
Guest User

Untitled

a guest
Jan 9th, 2019
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import { Injectable } from '@angular/core';
  2. import { HttpClient } from '@angular/common/http';
  3. import { Router } from '@angular/router';
  4. import { Observable } from 'rxjs';
  5. import { map } from 'rxjs/operators';
  6. import config from '../config.json';
  7.  
  8. // Interfaces for type checking
  9. export interface UserDetails {
  10.   _id: string,
  11.   email: string,
  12.   firstName: string,
  13.   lastName: string,
  14.   permissions: number,
  15.   lastChanged: Date,
  16.   exp: number;
  17.  
  18. }
  19.  
  20. interface TokenResponse {
  21.   token: string,
  22.   email: string,
  23.   firstName: string,
  24.   lastName: string;
  25. }
  26.  
  27. export interface RegisterPayload {
  28.   email: string,
  29.   firstName: string,
  30.   lastName: string,
  31.   password: string,
  32.   passwordConfirm: string;
  33. }
  34.  
  35. export interface LoginPayload {
  36.   email: string,
  37.   password: string;
  38. }
  39.  
  40.  
  41. @Injectable()
  42.  
  43. export class AuthenticationService {
  44.  
  45.   private token: string;
  46.  
  47.   constructor(private http: HttpClient, private router: Router) { }
  48.  
  49.   private saveToken(token: string): void {
  50.     localStorage.setItem('jwt-token', token);
  51.     this.token = token;
  52.   }
  53.  
  54.   public getToken(): string {
  55.     if (!this.token) {
  56.       this.token = localStorage.getItem('jwt-token');
  57.     }
  58.  
  59.     return this.token;
  60.   }
  61.  
  62.   public getUserDetails(): UserDetails {
  63.     const token = this.getToken();
  64.     let payload;
  65.     if (token) {
  66.       payload = token.split('.')[1];
  67.       payload = window.atob(payload);
  68.       return JSON.parse(payload);
  69.     } else {
  70.       return null;
  71.     }
  72.   }
  73.  
  74.   public isLoggedIn(): boolean {
  75.     const user = this.getUserDetails();
  76.     if (user) {
  77.       return user.exp > Date.now() / 1000;
  78.     } else {
  79.       return false;
  80.     }
  81.   }
  82.  
  83.   // Logout
  84.   public logout(): void {
  85.     this.token = '';
  86.     window.localStorage.removeItem('jwt-token');
  87.     this.router.navigateByUrl('/');
  88.   }
  89.  
  90.   public register(user: RegisterPayload): Observable<any> {
  91.  
  92.     let base = this.http.post(config.apiUrl + '/register', user);
  93.     const request = base.pipe(
  94.       map((data: TokenResponse) => {
  95.         if (data.token) {
  96.           console.log("Token" + data.token)
  97.           this.saveToken(data.token);
  98.         }
  99.         return data;
  100.       })
  101.     );
  102.     return request;
  103.   }
  104.  
  105.   public login(user: LoginPayload): Observable<any> {
  106.     let base = this.http.post(config.apiUrl + '/login', user);
  107.     const request = base.pipe(
  108.       map((data: TokenResponse) => {
  109.         if (data.token) {
  110.           console.log("Token" + data.token)
  111.           this.saveToken(data.token);
  112.         }
  113.         return data;
  114.       })
  115.     );
  116.     return request;
  117.   }
  118.  
  119. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement