using PanoptesFrontend.Data.Account; using PanoptesFrontend.Data; using Blazored.LocalStorage; using System.Text.Json; using System; 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){ var panoptesHost = Environment.GetEnvironmentVariable("PANOPTESHOST"); await httpService.PostAsync($"http://{panoptesHost}/user/register", model); } public async Task Login(LoginUser model){ var panoptesHost = Environment.GetEnvironmentVariable("PANOPTESHOST"); var response = await httpService.PostAsync($"http://panoptesHost/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"); var panoptesHost = Environment.GetEnvironmentVariable("PANOPTESHOST"); await httpService.PostAsync($"http://{panoptesHost}/user/logout", authtoken); await localStorage.RemoveItemAsync("authToken"); } public async Task GetTokenFromLocalStorage() { return await localStorage.GetItemAsStringAsync("authToken"); } }