Files
EmptyMauiApp/MauiApp/Core/Business/UserSessionService.cs
2023-10-18 19:02:51 +02:00

78 lines
2.0 KiB
C#

using System.Text.Json;
using MauiApp.Core.Business.Contracts;
using MauiApp.Core.Models;
using MauiApp.Core.Models.Contracts;
using MauiApp.Core.System.LocalStorage.Contracts;
namespace MauiApp.Core.Business;
public class UserSessionService(ILocalStorage localStorage) : IUserSessionService
{
public IUserSession Session
{
get => LoadSession().Result;
set
{
localStorage.Remove(nameof(Session)).Wait();
if (value != null)
StoreSession(value).Wait();
}
}
private async Task<IUserSession> LoadSession()
{
try
{
var jsonSession = await localStorage.GetItemString(nameof(Session));
if (string.IsNullOrWhiteSpace(jsonSession))
return null;
IUserSession session = JsonSerializer.Deserialize<UserSession>(jsonSession);
return session;
}
catch (Exception ex)
{
return null;
}
}
private async Task StoreSession(IUserSession session)
{
var jsonSesson = JsonSerializer.Serialize(session);
await localStorage.SetItemString(nameof(Session), jsonSesson);
}
public async Task<bool> IsValid()
{
return await Task.FromResult(Session is not null);
}
public async Task CreateNewSession(string userId, string token, string refreshToken, string email, string profileDb)
{
Session = new UserSession()
{
UserId = userId,
AccessToken = token,
RefreshToken = refreshToken,
Email = email,
ProfileDb = profileDb
};
await Task.CompletedTask;
}
public async Task ClearStoredSession()
{
Session = null;
await Task.CompletedTask;
}
public Task RefreshToken(string accessToken, string refreshToken)
{
var session = (UserSession) Session;
session.AccessToken = accessToken;
session.RefreshToken = refreshToken;
Session = session;
return Task.CompletedTask;
}
}