auth2.service.ts 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. import { Injectable } from '@angular/core';
  2. import { HttpClient } from '@angular/common/http';
  3. import { of, Observable, forkJoin } from 'rxjs';
  4. import { catchError, mapTo, tap, map, mergeMap } from 'rxjs/operators';
  5. import { Token } from '@app/models/token';
  6. import { environment } from '@environments/environment';
  7. import * as CryptoJS from 'crypto-js';
  8. import Swal from 'sweetalert2';
  9. @Injectable({
  10. providedIn: 'root'
  11. })
  12. export class AuthService {
  13. private readonly JWT_TOKEN = 'JWT_TOKEN';
  14. private readonly REFRESH_TOKEN = 'REFRESH_TOKEN';
  15. private readonly USER_MENU = 'USER_MENU';
  16. private loggedUser: string;
  17. constructor(private http: HttpClient) {}
  18. login(user: { email: string, password: string}): Observable<boolean> {
  19. return this.http.post<any>(`${environment.productionApiUrl}/auth/login`, user)
  20. .pipe(
  21. tap(tokens => this.doLoginUser(user.email, tokens)),
  22. mapTo(true),
  23. catchError(error => {
  24. return of(false);
  25. }));
  26. }
  27. logout() {
  28. let refreshToken:string = this.getRefreshToken();
  29. this.http.post<any>(`${environment.productionApiUrl}/auth/logout`, {})
  30. .subscribe( results => {});
  31. this.http.post<any>(`${environment.productionApiUrl}/auth/logout2`, {}).subscribe( results => {
  32. this.doLogoutUser();
  33. Swal.close();
  34. window.location.href = "";
  35. });
  36. }
  37. isLoggedIn() {
  38. return !!this.getJwtToken();
  39. }
  40. getUserLevel() {
  41. var bytes = CryptoJS.AES.decrypt(localStorage.getItem("USER_MENU"), 'soma-inverlec-2019');
  42. var role_number = bytes.toString(CryptoJS.enc.Utf8);
  43. return role_number;
  44. }
  45. refreshToken() {
  46. let refreshToken:string = this.getRefreshToken();
  47. return this.http.post<any>(`${environment.productionApiUrl}/auth/refresh`, {
  48. 'Authorization': `Bearer ${refreshToken}`
  49. }).pipe(tap((tokens: Token) => {
  50. this.storeJwtToken(tokens["data"]["access_token"]);
  51. },
  52. (error) => {
  53. console.log("ERROR REFRESHING TOKEN")
  54. }
  55. ));
  56. }
  57. getJwtToken() {
  58. return localStorage.getItem(this.JWT_TOKEN);
  59. }
  60. private doLoginUser(email: string, tokens: Token) {
  61. this.loggedUser = email;
  62. this.storeTokens(tokens);
  63. }
  64. private doLogoutUser() {
  65. this.loggedUser = null;
  66. this.removeTokens();
  67. }
  68. getRefreshToken() {
  69. return localStorage.getItem(this.REFRESH_TOKEN);
  70. }
  71. private storeJwtToken(jwt: string) {
  72. localStorage.setItem(this.JWT_TOKEN, jwt);
  73. }
  74. private storeTokens(tokens: Token) {
  75. localStorage.clear();
  76. //console.log(CryptoJS.AES.encrypt(this.JWT_TOKEN, tokens["data"]["user"].role.toString(), 'soma-inverlec-2019').toString());
  77. localStorage.setItem(this.USER_MENU, CryptoJS.AES.encrypt(tokens["data"]["user"].role.toString(), 'soma-inverlec-2019').toString())
  78. localStorage.setItem(this.JWT_TOKEN, tokens["data"]["user"].token);
  79. localStorage.setItem(this.REFRESH_TOKEN, tokens["data"]["user"].refresh);
  80. }
  81. removeTokens() {
  82. localStorage.removeItem(this.USER_MENU);
  83. localStorage.removeItem(this.JWT_TOKEN);
  84. localStorage.removeItem(this.REFRESH_TOKEN);
  85. }
  86. }