using PanoptesFrontend.Data.Account; using PanoptesFrontend.Data; using Blazored.LocalStorage; using System.Text.Json; namespace PanoptesFrontend.Services; public interface IAccountService { Task Register(AddUser model); Task Login(LoginUser model); Task Logout(string token); Task GetTokenFromLocalStorage(); } public class AccountService : IAccountService { private IHttpService httpService; private ILocalStorageService localStorage; public AccountService(IHttpService httpService, ILocalStorageService localStorage) { this.httpService = httpService; this.localStorage = localStorage; } public async Task Register(AddUser model){ await httpService.PostAsync("http://localhost:10000/user/register", model); } public async Task Login(LoginUser model){ var response = await httpService.PostAsync("http://localhost:10000/user/login", model); var jsonDoc = JsonDocument.Parse(response); var token = jsonDoc.RootElement.GetProperty("token").GetString(); // Save the JWT token to local storage await localStorage.SetItemAsync("authToken", token); } public async Task Logout(string token){ var authtoken = await localStorage.GetItemAsStringAsync("authToken"); await httpService.PostAsync("http://localhost:10000/user/logout", authtoken); await localStorage.RemoveItemAsync("authToken"); } public async Task GetTokenFromLocalStorage() { return await localStorage.GetItemAsStringAsync("authToken"); } }