From a9287af015228a73b5053acdef421d9d63ba766b Mon Sep 17 00:00:00 2001 From: Danijel Andjelkovic Date: Tue, 15 Mar 2022 16:06:09 +0100 Subject: Dodao automatsko osvezavanja JWT tokena, automatsko ucitavanje ulogovanog korisnika. Prosirio modele Dataset, Model, Predictor tako da se moze definisati da li su javna ili da li bilo ko sa linkom moze da ih vidi, dodao lastUpdated datum. Login dugme u navbar-u radi funkcionalno. Login/logout ne moraju da osveze stranicu vise. --- frontend/src/app/_services/auth.service.ts | 46 ++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) (limited to 'frontend/src/app/_services/auth.service.ts') diff --git a/frontend/src/app/_services/auth.service.ts b/frontend/src/app/_services/auth.service.ts index c96c2dae..e6611880 100644 --- a/frontend/src/app/_services/auth.service.ts +++ b/frontend/src/app/_services/auth.service.ts @@ -3,6 +3,7 @@ import { HttpClient, HttpHeaders } from '@angular/common/http'; import { JwtHelperService } from '@auth0/angular-jwt'; import { CookieService } from 'ngx-cookie-service'; import { API_SETTINGS } from 'src/config'; +import shared from '../Shared'; const jwtHelper = new JwtHelperService(); @@ -11,6 +12,8 @@ const jwtHelper = new JwtHelperService(); }) export class AuthService { + shared = shared; + constructor(private http: HttpClient, private cookie: CookieService) { } login(username: string, password: string) { @@ -28,4 +31,47 @@ export class AuthService { } return false; } + + lastToken?: string; + refresher: any; + + enableAutoRefresh() { + this.lastToken = this.cookie.get('token'); + let exp = jwtHelper.getTokenExpirationDate(this.lastToken); + if (!exp) { + exp = new Date(); + } + console.log(exp, exp?.getTime()); + this.refresher = setTimeout(() => { + console.log('refreshing token!'); + this.http.post(`${API_SETTINGS.apiURL}/auth/renewJwt`, {}, { headers: this.authHeader(), responseType: 'text' }).subscribe((response) => { + this.authenticate(response); + }); + }, exp.getTime() - new Date().getTime()); + } + + authenticate(token: string) { + const user = jwtHelper.decodeToken(token); + this.cookie.set('token', token, user.exp); + this.updateUser(); + } + + updateUser() { + if (this.cookie.check('token')) { + const token = this.cookie.get('token'); + this.shared.loggedIn = this.isAuthenticated(); + this.enableAutoRefresh(); + } + } + + logOut() { + this.cookie.delete('token'); + if (this.refresher) + clearTimeout(this.refresher); + this.shared.loggedIn = false; + } + + authHeader() { + return new HttpHeaders().set("Authorization", "Bearer " + this.cookie.get('token')); + } } -- cgit v1.2.3