#nullable enable
using System;
using System.Collections.Generic;
using System.Text.Json;
using Microsoft.Extensions.Caching.Distributed;
using SimApi.Communications;
namespace SimApi.Helpers;
///
/// 认证助手
///
public class SimApiAuth(IDistributedCache cache)
{
///
/// 产生一个Token记录并返回Token
///
///
///
///
///
///
public string Login(string id, Dictionary? meta = null, string type = "user", string? token = null)
{
return Login(id, meta, new[] { type }, token);
}
///
/// 产生一个Token并记录用户ID角色[多角色]
///
///
///
///
///
///
// ReSharper disable once MemberCanBePrivate.Global
public string Login(string id, Dictionary? meta, string[] type, string? uuid = null)
{
uuid ??= Guid.NewGuid().ToString();
var loginItem = new SimApiLoginItem(id, type, meta);
cache.SetString(uuid, JsonSerializer.Serialize(loginItem));
return uuid;
}
///
/// 设置登录的Meta信息
///
///
///
///
public bool SetMeta(string token, Dictionary meta)
{
var login = GetLogin(token);
if (login == null) { return false; }
var newLogin = new SimApiLoginItem(login.Id, login.Type, login.Meta);
cache.SetString(token,JsonSerializer.Serialize(newLogin));
return true;
}
///
/// 获取登陆信息
///
///
///
public SimApiLoginItem? GetLogin(string token)
{
var login = cache.GetString(token);
return login != null ? JsonSerializer.Deserialize(login) : default;
}
///
/// 退出登陆
///
/// 登陆标识
public void Logout(string uuid)
{
if (!string.IsNullOrEmpty(uuid))
{
cache.Remove(uuid);
}
}
}