mirror of
https://github.com/hmaxnl/SharpRSS.git
synced 2024-09-21 02:24:20 +02:00
44 lines
1.6 KiB
C#
Executable File
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);
|
|
}
|
|
} |