diff options
author | Danijel Andjelkovic <adanijel99@gmail.com> | 2022-03-15 16:06:09 +0100 |
---|---|---|
committer | Danijel Andjelkovic <adanijel99@gmail.com> | 2022-03-15 16:06:09 +0100 |
commit | a9287af015228a73b5053acdef421d9d63ba766b (patch) | |
tree | 6333d9dfe6a88686ef42bce158944f810d108839 /frontend/src/app/_services/auth.service.ts | |
parent | 2e62393227d6d7b1c52e82cc8b7c3174206f7687 (diff) |
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.
Diffstat (limited to 'frontend/src/app/_services/auth.service.ts')
-rw-r--r-- | frontend/src/app/_services/auth.service.ts | 46 |
1 files changed, 46 insertions, 0 deletions
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')); + } } |