quack-angular/src/app/services/auth/auth.service.ts
2024-04-09 00:03:27 +02:00

70 lines
1.7 KiB
TypeScript

import { Injectable, inject } from '@angular/core';
import { ActivatedRouteSnapshot, CanActivateFn, GuardResult, MaybeAsync, Router, RouterStateSnapshot } from '@angular/router';
@Injectable({
providedIn: 'root'
})
export class AuthService {
token?: String;
constructor(private router: Router) { }
checkAllowed() {
// TODO: check if the token is still valid
if (this.token)
return true;
else {
this.router.navigateByUrl('/auth/login');
return false;
}
}
getToken(): Promise<String> {
// TODO: check if the token is still valid
return new Promise<String>((resolve, reject) => {
if (this.token)
resolve(this.token);
else
reject();
});
}
login(username: String, password: String): Promise<Boolean> {
return new Promise<Boolean>((resolve, reject) => {
// TODO: authenticate
if (username === "test" && password === "test") {
this.token = "valid_token";
resolve(true);
}
else {
this.token = undefined;
reject();
}
});
}
logout(): Promise<Boolean> {
return new Promise<Boolean>((resolve, reject) => {
// TODO: logout
this.token = undefined;
resolve(true);
});
}
register(username: String, password: String, rePassword: String): Promise<Boolean> {
return new Promise<Boolean>((resolve, reject) => {
// TODO: register
if (username !== "test" && password === rePassword)
resolve(true);
else
reject();
});
}
}
export const CheckTokenCanActivate: CanActivateFn = (
route: ActivatedRouteSnapshot,
state: RouterStateSnapshot
) => {
return inject(AuthService).checkAllowed();
}