Skip to content
Snippets Groups Projects
auth-service.service.ts 1.89 KiB
Newer Older
Tomas Madeja's avatar
Tomas Madeja committed
import { HttpClient } from '@angular/common/http';
import {Injectable} from '@angular/core';
import {Observable, of} from 'rxjs';
import {UserAuthRequest} from '../models/user-auth-request';
Tomas Madeja's avatar
Tomas Madeja committed

@Injectable({
  providedIn: 'root'
})
export class AuthServiceService {

Tomas Madeja's avatar
Tomas Madeja committed
  readonly AUTH_URL: string = 'http://localhost:8080/pa165/auth/login';
  readonly JWT: string = "JWT";
  readonly ROLE: string = "ROLE";

  readonly TEAM_MANAGER = "TEAM_MANAGER";
  readonly LEAGUE_MANAGER = "LEAGUE_MANAGER";
Tomas Madeja's avatar
Tomas Madeja committed

Tomas Madeja's avatar
Tomas Madeja committed
  authenticated: boolean = false;
  leagueManager: boolean = false;
  teamManager: boolean = false;

Tomas Madeja's avatar
Tomas Madeja committed
  constructor(private http: HttpClient) {
  authenticate(userAuthRequest: UserAuthRequest, callback : Function) {
Tomas Madeja's avatar
Tomas Madeja committed
    this.http.post(
      this.AUTH_URL, 
      userAuthRequest,
      {responseType : 'text'}
      )
      .subscribe((response: string) => {
          this.handleAuthResponse(response);
        callback()});
  logOut(): Observable<boolean> {
Tomas Madeja's avatar
Tomas Madeja committed
    localStorage.removeItem(this.JWT)
Tomas Madeja's avatar
Tomas Madeja committed
    this.authenticated = false;
    this.teamManager = false;
    this.leagueManager = false;
    return of(true);
  }

  isAuthenticated(): Observable<boolean> {
Tomas Madeja's avatar
Tomas Madeja committed
    this.authenticated = localStorage.getItem(this.JWT) !== null;
Tomas Madeja's avatar
Tomas Madeja committed
    return of(this.authenticated);
  }

  isLeagueManager(): Observable<boolean> {
    return of(this.authenticated && localStorage.getItem(this.ROLE) == this.LEAGUE_MANAGER);
Tomas Madeja's avatar
Tomas Madeja committed
  }

  isTeamManager(): Observable<boolean> {
    return of(this.authenticated && localStorage.getItem(this.ROLE) == this.TEAM_MANAGER);
Tomas Madeja's avatar
Tomas Madeja committed

  handleAuthResponse(response: string) : void {
    let parts = response.split(" ");
    let role = parts[1];
    console.log(parts[1]);
    let token = parts[2];
    localStorage.setItem(this.ROLE, role);
Tomas Madeja's avatar
Tomas Madeja committed
    localStorage.setItem(this.JWT, token);
  }

  getBearerHeader(): string {
    let token = localStorage.getItem(this.JWT);
    return token !== null ? `Bearer ${token}` : "";
  }