SharpRSS/SharpRSS.API/Models/DbSession.cs
2024-06-16 13:43:30 +02:00

44 lines
1.6 KiB
C#
Executable File

using System;
using System.Globalization;
using System.Security.Cryptography;
using System.Text;
using Serilog;
namespace SharpRSS.API.Models
{
internal class DbSession
{
public DbSession() { }
private DbSession(string uid, double expiresMinutes)
{
if (string.IsNullOrEmpty(uid) || string.IsNullOrWhiteSpace(uid))
{
Log.Error("User id is null or empty cannot create session!");
throw new Exception("User id cannot be null!");
}
Uid = uid;
Created = DateTime.Now;
Expires = Created.AddMinutes(expiresMinutes);
string uidHash = Convert.ToHexString(SHA1.HashData(Encoding.UTF8.GetBytes(Uid)));
string createdHash = Convert.ToHexString(SHA1.HashData(Encoding.UTF8.GetBytes(Created.ToString(CultureInfo.CurrentCulture))));
Sid = Convert.ToHexString(SHA512.HashData(Encoding.UTF8.GetBytes($"{createdHash}.{uidHash}")));
}
public string Uid { get; set; } = string.Empty;
public string Sid { get; set; } = string.Empty;
public DateTime Created { get; set; }
public DateTime Expires { get; set; }
public bool Expired => Expires < DateTime.Now;
public DbSession Extend(double extendMinutes = 10080) => new DbSession()
{
Uid = Uid,
Sid = Sid,
Created = Created,
Expires = DateTime.Now.AddMinutes(extendMinutes)
};
public static DbSession CreateSession(string uid, double expiresMinutes = 10080) => new DbSession(uid, expiresMinutes);
}
}