1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { JwtHelperService } from '@auth0/angular-jwt';
import { CookieService } from 'ngx-cookie-service';
import shared from '../Shared';
import { Configuration } from '../configuration.service';
const jwtHelper = new JwtHelperService();
@Injectable({
providedIn: 'root'
})
export class AuthService {
shared = shared;
constructor(private http: HttpClient, private cookie: CookieService) { }
login(username: string, password: string) {
return this.http.post(`${Configuration.settings.apiURL}/auth/login`, { username, password }, { responseType: 'text' });
}
register(user: any) {
return this.http.post(`${Configuration.settings.apiURL}/auth/register`, { ...user }, { responseType: 'text' });
}
getGuestToken() {
return this.http.post(`${Configuration.settings.apiURL}/auth/guestToken`, {}, { responseType: 'text' });
}
isAuthenticated(): boolean {
if (this.cookie.check('token')) {
var token = this.cookie.get('token');
var property = jwtHelper.decodeToken(this.cookie.get('token'));
var username = property['name'];
var userId = property['id'];
return !jwtHelper.isTokenExpired(token) && username != "";
}
return false;
}
lastToken?: string;
refresher: any;
enableAutoRefresh() {
this.lastToken = this.cookie.get('token');
let exp = jwtHelper.getTokenExpirationDate(this.lastToken);
if (!exp) {
exp = new Date();
}
var property = jwtHelper.decodeToken(this.cookie.get('token'));
var username = property['name'];
if (username != "") {
this.refresher = setTimeout(() => {
this.http.post(`${Configuration.settings.apiURL}/auth/renewJwt`, {}, { headers: this.authHeader(), responseType: 'text' }).subscribe((response) => {
this.authenticate(response);
});
}, exp.getTime() - new Date().getTime() - 60000);
}
else {
this.refresher = setTimeout(() => {
this.getGuestToken().subscribe((response) => {
this.authenticate(response);
});
}, exp.getTime() - new Date().getTime() - 60000);
}
}
addGuestToken() {
this.getGuestToken().subscribe((token) => {
this.authenticate(token);
});
}
authenticate(token: string) {
let exp = jwtHelper.getTokenExpirationDate(token);
if (!exp) {
exp = new Date();
}
this.cookie.set('token', token, exp);
this.updateUser();
}
updateUser() {
if (this.cookie.check('token')) {
const token = this.cookie.get('token');
const decodedToken = jwtHelper.decodeToken(token);
this.shared.loggedIn = this.isAuthenticated();
this.shared.username = decodedToken.name;
this.shared.userId = decodedToken.id;
this.enableAutoRefresh();
}
}
logOut() {
this.cookie.delete('token');
if (this.refresher)
clearTimeout(this.refresher);
this.shared.loggedIn = false;
this.addGuestToken();
}
authHeader() {
return new HttpHeaders().set("Authorization", "Bearer " + this.cookie.get('token'));
}
}
|