59 lines
1.8 KiB
C#

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<string> 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<string> GetTokenFromLocalStorage()
{
return await localStorage.GetItemAsStringAsync("authToken");
}
}