70 lines
1.7 KiB
TypeScript
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();
|
|
} |