File

src/app/providers/stores/session.store.ts

Index

Properties
Methods

Constructor

constructor(storage: StorageService, helper: JwtHelperService)
Parameters :
Name Type Optional
storage StorageService No
helper JwtHelperService No

Methods

clearSession
clearSession()
Returns : void
createSession
createSession(jwt: IJwt)
Parameters :
Name Type Optional
jwt IJwt No
Returns : void
Private trySessionFromJwt
trySessionFromJwt()
Returns : void

Properties

Private headers
headers: HttpHeaders
Type : HttpHeaders
Private session
session: BehaviorSubject<Session>
Type : BehaviorSubject<Session>
Public session$
session$: Observable<Session>
Type : Observable<Session>
import { HttpHeaders } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { JwtHelperService } from '@auth0/angular-jwt';
import { JWT_KEY } from '../../app.constants';
import { IJwt } from '../../models/i-jwt';
import { Session } from '../../models/session';
import { StorageService } from '../services/storage.service';
import { BehaviorSubject, Observable } from 'rxjs';

@Injectable()
export class SessionStore {
  private session: BehaviorSubject<Session>;
  private headers: HttpHeaders;

  public session$: Observable<Session>;

  constructor(
    private storage: StorageService,
    private helper: JwtHelperService
  ) {
    this.headers = new HttpHeaders();
    this.headers.append('Cache-control', 'no-cache');
    this.headers.append('Pragma', 'no-cache');
    this.headers.append('Expires', '0');
    this.session = new BehaviorSubject<Session>(new Session());
    this.session$ = this.session.asObservable();
    this.trySessionFromJwt();
  }

  private trySessionFromJwt() {
    try {
      const rawToken = this.storage.get(JWT_KEY);
      if (rawToken && this.helper.isTokenExpired(rawToken)) {
        return;
      }
      const jwt = this.helper.decodeToken(rawToken) as IJwt;
      this.createSession(jwt);
    } catch (error) {
      console.log(error);
    }
  }

  createSession(jwt: IJwt): void {
    this.session.next(new Session(jwt));
  }

  clearSession(): void {
    this.session.next(new Session());
  }
}

result-matching ""

    No results matching ""