SharpRSS/SharpRSS.API/Models/DbSession.cs
2023-10-08 00:46:42 +02:00

34 lines
1.2 KiB
C#

using System;
using System.Security.Cryptography;
using System.Text;
using Serilog;
using SharpRSS.API.Contracts.DTO;
namespace SharpRSS.API.Models
{
internal class DbSession : Session
{
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);
using SHA1 sha1 = SHA1.Create();
string uidHash = Convert.ToHexString(sha1.ComputeHash(Encoding.UTF8.GetBytes(Uid)));
Sid = $"{new DateTimeOffset(Created).ToUnixTimeMilliseconds()}.{uidHash}.{new DateTimeOffset(Expires).ToUnixTimeMilliseconds()}";
}
public string Uid { get; set; }
public static DbSession CreateSession(string uid, double expiresMinutes = 10080)
{
DbSession newSession = new DbSession(uid, expiresMinutes);
return newSession;
}
}
}