aboutsummaryrefslogtreecommitdiff
path: root/frontend
diff options
context:
space:
mode:
Diffstat (limited to 'frontend')
-rw-r--r--frontend/package-lock.json41
-rw-r--r--frontend/package.json2
-rw-r--r--frontend/src/app/auth-guard.service.spec.ts16
-rw-r--r--frontend/src/app/auth-guard.service.ts21
-rw-r--r--frontend/src/app/auth.service.ts24
-rw-r--r--frontend/src/config.ts3
6 files changed, 106 insertions, 1 deletions
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index ea9085eb..ca854e4f 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -16,6 +16,8 @@
"@angular/platform-browser": "~13.2.0",
"@angular/platform-browser-dynamic": "~13.2.0",
"@angular/router": "~13.2.0",
+ "@auth0/angular-jwt": "^5.0.2",
+ "ngx-cookie-service": "^13.1.2",
"rxjs": "~7.5.0",
"tslib": "^2.3.0",
"zone.js": "~0.11.4"
@@ -600,6 +602,17 @@
"integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==",
"dev": true
},
+ "node_modules/@auth0/angular-jwt": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/@auth0/angular-jwt/-/angular-jwt-5.0.2.tgz",
+ "integrity": "sha512-rSamC9mu+gUxoR86AXcIo+KD7xRIro+/iu1F2Ld85YAZEVKlpB5vYG+g0yGaEOqjtQWP/i0H6fi6XMGPVHSYYQ==",
+ "dependencies": {
+ "tslib": "^2.0.0"
+ },
+ "peerDependencies": {
+ "@angular/common": ">=9.0.0"
+ }
+ },
"node_modules/@babel/code-frame": {
"version": "7.16.7",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz",
@@ -7794,6 +7807,18 @@
"integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
"dev": true
},
+ "node_modules/ngx-cookie-service": {
+ "version": "13.1.2",
+ "resolved": "https://registry.npmjs.org/ngx-cookie-service/-/ngx-cookie-service-13.1.2.tgz",
+ "integrity": "sha512-CInzm1xjI51QA1gCJEnqfDFLnN7w/SzqM5+kGdpI+UiCeHKgYEXpKG1s7lFz4jbLDrL/jHKtrf92t7RGsm66Cg==",
+ "dependencies": {
+ "tslib": "^2.0.0"
+ },
+ "peerDependencies": {
+ "@angular/common": "^13.0.0",
+ "@angular/core": "^13.0.0"
+ }
+ },
"node_modules/nice-napi": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz",
@@ -11732,6 +11757,14 @@
"integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==",
"dev": true
},
+ "@auth0/angular-jwt": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/@auth0/angular-jwt/-/angular-jwt-5.0.2.tgz",
+ "integrity": "sha512-rSamC9mu+gUxoR86AXcIo+KD7xRIro+/iu1F2Ld85YAZEVKlpB5vYG+g0yGaEOqjtQWP/i0H6fi6XMGPVHSYYQ==",
+ "requires": {
+ "tslib": "^2.0.0"
+ }
+ },
"@babel/code-frame": {
"version": "7.16.7",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz",
@@ -17066,6 +17099,14 @@
"integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
"dev": true
},
+ "ngx-cookie-service": {
+ "version": "13.1.2",
+ "resolved": "https://registry.npmjs.org/ngx-cookie-service/-/ngx-cookie-service-13.1.2.tgz",
+ "integrity": "sha512-CInzm1xjI51QA1gCJEnqfDFLnN7w/SzqM5+kGdpI+UiCeHKgYEXpKG1s7lFz4jbLDrL/jHKtrf92t7RGsm66Cg==",
+ "requires": {
+ "tslib": "^2.0.0"
+ }
+ },
"nice-napi": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz",
diff --git a/frontend/package.json b/frontend/package.json
index a515052f..9ab7ad4c 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -18,6 +18,8 @@
"@angular/platform-browser": "~13.2.0",
"@angular/platform-browser-dynamic": "~13.2.0",
"@angular/router": "~13.2.0",
+ "@auth0/angular-jwt": "^5.0.2",
+ "ngx-cookie-service": "^13.1.2",
"rxjs": "~7.5.0",
"tslib": "^2.3.0",
"zone.js": "~0.11.4"
diff --git a/frontend/src/app/auth-guard.service.spec.ts b/frontend/src/app/auth-guard.service.spec.ts
new file mode 100644
index 00000000..35afd377
--- /dev/null
+++ b/frontend/src/app/auth-guard.service.spec.ts
@@ -0,0 +1,16 @@
+import { TestBed } from '@angular/core/testing';
+
+import { AuthGuardService } from './auth-guard.service';
+
+describe('AuthGuardService', () => {
+ let service: AuthGuardService;
+
+ beforeEach(() => {
+ TestBed.configureTestingModule({});
+ service = TestBed.inject(AuthGuardService);
+ });
+
+ it('should be created', () => {
+ expect(service).toBeTruthy();
+ });
+});
diff --git a/frontend/src/app/auth-guard.service.ts b/frontend/src/app/auth-guard.service.ts
new file mode 100644
index 00000000..b6d3678d
--- /dev/null
+++ b/frontend/src/app/auth-guard.service.ts
@@ -0,0 +1,21 @@
+import { Injectable } from '@angular/core';
+import { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot, UrlTree } from '@angular/router';
+import { Observable } from 'rxjs';
+import { AuthService } from './auth.service';
+
+
+@Injectable({
+ providedIn: 'root'
+})
+export class AuthGuardService implements CanActivate {
+
+ constructor(private auth: AuthService, private router: Router) { }
+
+ canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean | UrlTree | Observable<boolean | UrlTree> | Promise<boolean | UrlTree> {
+ if (this.auth.isAuthenticated()) {
+ return true;
+ }
+ this.router.navigate(['login']);
+ return false;
+ }
+}
diff --git a/frontend/src/app/auth.service.ts b/frontend/src/app/auth.service.ts
index af27fdec..29dca31d 100644
--- a/frontend/src/app/auth.service.ts
+++ b/frontend/src/app/auth.service.ts
@@ -1,9 +1,31 @@
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 { API_SETTINGS } from 'src/config';
+
+const jwtHelper = new JwtHelperService();
@Injectable({
providedIn: 'root'
})
export class AuthService {
- constructor() { }
+ constructor(private http: HttpClient, private cookie: CookieService) { }
+
+ login(username: string, password: string) {
+ return this.http.post(`${API_SETTINGS.apiURL}/login`, { username, password });
+ }
+
+ register(username: string, password: string) {
+ return this.http.post(`${API_SETTINGS.apiURL}/register`, { username, password });
+ }
+
+ isAuthenticated(): boolean {
+ if (this.cookie.check('token')) {
+ var token = this.cookie.get('token');
+ return !jwtHelper.isTokenExpired(token);
+ }
+ return false;
+ }
}
diff --git a/frontend/src/config.ts b/frontend/src/config.ts
new file mode 100644
index 00000000..b14670ea
--- /dev/null
+++ b/frontend/src/config.ts
@@ -0,0 +1,3 @@
+export const API_SETTINGS = {
+ apiURL: 'http://localhost:5000/api'
+} \ No newline at end of file