Advertisement
Guest User

Untitled

a guest
Jul 17th, 2019
164
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import { Injectable } from '@angular/core';
  2. import { HttpClient, HttpResponse, HttpErrorResponse } from '@angular/common/http';
  3. import { User, Role } from 'src/app/models/user.model';
  4. import { environment } from './../../../environments/environment';
  5. import { Observable, throwError } from 'rxjs';
  6. import { TokenService } from '../token/token.service';
  7.  
  8. import { tap, catchError } from 'rxjs/operators';
  9. import { Router } from '@angular/router';
  10. import { ToastrService } from 'ngx-toastr';
  11. import { SocketService, SocketEvents } from '../socket/socket.service';
  12.  
  13. interface LoginData {
  14.   username: string;
  15.   password: string;
  16. }
  17.  
  18. interface AuthResponse {
  19.   token: string;
  20. }
  21.  
  22. interface RegisterData {
  23.   username: string;
  24.   password: string;
  25.   name: string;
  26.   surname: string;
  27.   role: Role;
  28. }
  29.  
  30. @Injectable({
  31.   providedIn: 'root'
  32. })
  33. export class UserService {
  34.  
  35.   constructor(private http: HttpClient, private tokenService: TokenService, private router: Router,
  36.               private toastr: ToastrService, private socket: SocketService) { }
  37.  
  38.   public login(user: LoginData): Observable<AuthResponse> {
  39.     return this.http.post<AuthResponse>(`${environment.serverUrl}${environment.apiUrl}/login`, user)
  40.       .pipe(
  41.         tap( (res) => {
  42.           this.tokenService.setToken(res.token);
  43.           this.socket.broadcast(SocketEvents.USER_AUTHENTICATED, res.token);
  44.           this.router.navigateByUrl('tables');
  45.           this.toastr.success('Succesfully logged in', 'Login');
  46.         }),
  47.         catchError((error: HttpErrorResponse) => {
  48.           if (error.error instanceof ErrorEvent) {
  49.             // A client-side or network error occurred.
  50.             this.toastr.warning(`Check your internet connection and retry \n ${error.error.message}`, 'Unexpected Error!');
  51.             // console.error('An error occurred:', error.error.message);
  52.           } else {
  53.             // The backend returned an unsuccessful response code.
  54.  
  55.             if (error.status === 401) {
  56.               this.toastr.error('Please check your username or password', 'Login failed');
  57.             } else {
  58.               this.toastr.error('Our server is not working properly, please try again later', 'Server error!');
  59.             }
  60.  
  61.             // console.log(error.error);
  62.           }
  63.  
  64.           // return an observable with a user-facing error message
  65.           return throwError('Something bad happened; please try again later.');
  66.         })
  67.       );
  68.   }
  69.  
  70.   public register(user: RegisterData): Observable<AuthResponse> {
  71.     return this.http.post<AuthResponse>(`${environment.serverUrl}${environment.apiUrl}/register`, user)
  72.       .pipe(
  73.         tap( (res) => {
  74.           this.tokenService.setToken(res.token);
  75.           this.socket.broadcast(SocketEvents.USER_AUTHENTICATED, res.token);
  76.           this.router.navigateByUrl('menu');
  77.           this.toastr.success('You have succesfully registered', 'Welcome');
  78.         }),
  79.         catchError((error: HttpErrorResponse) => {
  80.           if (error.error instanceof ErrorEvent) {
  81.             // A client-side or network error occurred.
  82.             this.toastr.warning(`Check your internet connection and retry \n ${error.error.message}`, 'Unexpected Error!');
  83.             // console.error('An error occurred:', error.error.message);
  84.           } else {
  85.             // The backend returned an unsuccessful response code.
  86.  
  87.             if (error.status === 400) {
  88.               this.toastr.error(`${error.error.message}`, 'Registration failed');
  89.             } else {
  90.               this.toastr.error('Our server is not working properly, please try again later', 'Server error!');
  91.             }
  92.  
  93.             // console.log(error.error);
  94.           }
  95.  
  96.           // return an observable with a user-facing error message
  97.           return throwError('Something bad happened; please try again later.');
  98.         })
  99.       );
  100.   }
  101.  
  102.   public logout(): void {
  103.     const token = this.tokenService.getToken();
  104.     this.tokenService.removeToken();
  105.  
  106.     this.socket.broadcast(SocketEvents.USER_SIGNED_OUT, token);
  107.  
  108.     this.router.navigateByUrl('auth');
  109.   }
  110.  
  111.   public getUser(): User {
  112.     const token = this.tokenService.getToken();
  113.  
  114.     if (token) {
  115.       return this.tokenService.getUserFromToken(token);
  116.     }
  117.  
  118.     return null;
  119.   }
  120.  
  121. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement