SharpRSS/SharpRSS.API/Models/DbSession.cs

40 lines
1.4 KiB
C#
Raw Normal View History

2023-10-08 00:46:42 +02:00
using System;
using System.Security.Cryptography;
using System.Text;
using Serilog;
using SharpRSS.API.Contracts.DTOs;
using SharpRSS.API.Contracts.DTOs.Sessions;
2023-10-08 00:46:42 +02:00
namespace SharpRSS.API.Models
{
internal class DbSession
2023-10-08 00:46:42 +02:00
{
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 string Sid { get; set; } = string.Empty;
public DateTime Created { get; set; }
public DateTime Expires { get; set; }
public bool Expired => Expires < DateTime.Now;
2023-10-08 00:46:42 +02:00
public static DbSession CreateSession(string uid, double expiresMinutes = 10080)
{
DbSession newSession = new DbSession(uid, expiresMinutes);
return newSession;
}
}
}