From 21a5ebda0a743e6493571a4715682c753f3f55d9 Mon Sep 17 00:00:00 2001 From: "nise.moe" Date: Sat, 15 Jun 2024 01:55:53 +0200 Subject: [PATCH] lock --- .../nisemoe/nise/controller/AuthController.kt | 13 +++++++++++++ .../src/app/metabase/metabase.component.ts | 14 ++++++++++++-- .../src/corelib/service/user.service.ts | 18 ++++++++++++++++++ 3 files changed, 43 insertions(+), 2 deletions(-) diff --git a/nise-backend/src/main/kotlin/com/nisemoe/nise/controller/AuthController.kt b/nise-backend/src/main/kotlin/com/nisemoe/nise/controller/AuthController.kt index d7d9086..9a0a4c8 100644 --- a/nise-backend/src/main/kotlin/com/nisemoe/nise/controller/AuthController.kt +++ b/nise-backend/src/main/kotlin/com/nisemoe/nise/controller/AuthController.kt @@ -20,4 +20,17 @@ class AuthController( return ResponseEntity.ok(currentUser) } + data class IsAdminResponse( + val isAdmin: Boolean + ) + + @GetMapping("/auth/admin", produces = [MediaType.APPLICATION_JSON_VALUE]) + fun isAdmin(): ResponseEntity { + if(!this.authService.isLoggedIn()) + return ResponseEntity.status(401).build() + + val isAdmin = this.authService.isAdmin() + return ResponseEntity.ok(IsAdminResponse(isAdmin)) + } + } diff --git a/nise-frontend/src/app/metabase/metabase.component.ts b/nise-frontend/src/app/metabase/metabase.component.ts index 1d55c8a..35532a0 100644 --- a/nise-frontend/src/app/metabase/metabase.component.ts +++ b/nise-frontend/src/app/metabase/metabase.component.ts @@ -3,6 +3,8 @@ import {HttpClient} from "@angular/common/http"; import {environment} from "../../environments/environment"; import {NgIf} from "@angular/common"; import {CuteLoadingComponent} from "../../corelib/components/cute-loading/cute-loading.component"; +import {UserService} from "../../corelib/service/user.service"; +import {Router} from "@angular/router"; interface CreateMetabaseUserResponse { email: string; @@ -29,10 +31,18 @@ export class MetabaseComponent { user: GetMetabaseUserResponse | null = null; createResponse: CreateMetabaseUserResponse | null = null; - constructor(private httpClient: HttpClient) { } + constructor(private httpClient: HttpClient, private userService: UserService, private router: Router) { } ngOnInit() { - this.getUser(); + this.userService.isAdmin().then(isAdmin => { + if (!isAdmin) { + this.router.navigate(['/']); + } else { + this.getUser(); + } + }).catch(() => { + this.router.navigate(['/']); + }); } resetPassword() { diff --git a/nise-frontend/src/corelib/service/user.service.ts b/nise-frontend/src/corelib/service/user.service.ts index f86dabd..f3002aa 100644 --- a/nise-frontend/src/corelib/service/user.service.ts +++ b/nise-frontend/src/corelib/service/user.service.ts @@ -7,6 +7,10 @@ interface UserInfo { username: string; } +interface IsAdminResponse { + isAdmin: boolean; +} + /** * This stuff gets saved to localStorage ONLY. */ @@ -47,6 +51,20 @@ export class UserService { return this.currentUser !== null; } + public isAdmin(): Promise { + return new Promise((resolve, reject) => { + this.httpClient.get(`${environment.apiUrl}/auth/admin`) + .subscribe({ + next: (isAdmin) => { + resolve(isAdmin.isAdmin); + }, + error: () => { + reject(); + } + }); + }); + } + public updateUser(): Promise { return new Promise((resolve, reject) => { this.httpClient.get(`${environment.apiUrl}/auth`)