auth2.service.ts 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. import { Injectable } from "@angular/core";
  2. import { HttpClient } from "@angular/common/http";
  3. import { of, Observable, forkJoin, throwError } 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 TOKEN = "TOKEN";
  14. private loggedUser: string;
  15. constructor(private http: HttpClient) {}
  16. login(user: { username: string; password: string }): Observable<boolean> {
  17. return this.http
  18. .post<any>(`${environment.productionApiUrl}/token/`, user)
  19. .pipe(
  20. tap(tokens => this.doLoginUser(user.username, tokens)),
  21. mapTo(true),
  22. catchError(this.errorHandl)
  23. );
  24. }
  25. logout() {
  26. let refreshToken: string = this.getRefreshToken();
  27. this.doLogoutUser();
  28. Swal.close();
  29. window.location.href = "";
  30. }
  31. isLoggedIn() {
  32. return !!this.getJwtToken();
  33. }
  34. /*getUserLevel() {
  35. var bytes = CryptoJS.AES.decrypt(
  36. localStorage.getItem("USER_MENU"),
  37. "soma-inverlec-2019"
  38. );
  39. var role_number = bytes.toString(CryptoJS.enc.Utf8);
  40. return role_number;
  41. }*/
  42. refreshToken() {
  43. let refreshToken: string = this.getRefreshToken();
  44. return this.http
  45. .post<any>(`${environment.productionApiUrl}/token/refresh/`, {
  46. token: `${refreshToken}`
  47. })
  48. .pipe(
  49. tap((tokens: Token) => {
  50. this.storeJwtToken(tokens["token"]);
  51. }, catchError(this.errorHandl))
  52. );
  53. }
  54. getJwtToken() {
  55. return localStorage.getItem(this.TOKEN);
  56. }
  57. private doLoginUser(username: string, tokens: Token) {
  58. this.loggedUser = username;
  59. this.storeTokens(tokens);
  60. }
  61. private doLogoutUser() {
  62. this.loggedUser = null;
  63. this.removeTokens();
  64. }
  65. getRefreshToken() {
  66. return localStorage.getItem(this.TOKEN);
  67. }
  68. private storeJwtToken(jwt: string) {
  69. localStorage.setItem(this.TOKEN, jwt);
  70. }
  71. private storeTokens(tokens: Token) {
  72. localStorage.setItem(this.TOKEN, tokens["token"]);
  73. }
  74. removeTokens() {
  75. localStorage.removeItem(this.TOKEN);
  76. }
  77. errorHandl(error) {
  78. let errorMessage = "";
  79. if (error.error) {
  80. // Get client-side error
  81. errorMessage = error.error;
  82. } else {
  83. // Get server-side error
  84. errorMessage = `Error Code: ${error.status}\nMessage: ${error.message}`;
  85. }
  86. return throwError(errorMessage);
  87. }
  88. }