mirror of
https://github.com/hmaxnl/SharpRSS.git
synced 2024-09-20 01:54:20 +02:00
40 lines
1.4 KiB
C#
40 lines
1.4 KiB
C#
using System;
|
|
using System.Security.Cryptography;
|
|
using System.Text;
|
|
using Serilog;
|
|
using SharpRSS.API.Contracts.DTOs;
|
|
using SharpRSS.API.Contracts.DTOs.Sessions;
|
|
|
|
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);
|
|
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;
|
|
|
|
public static DbSession CreateSession(string uid, double expiresMinutes = 10080)
|
|
{
|
|
DbSession newSession = new DbSession(uid, expiresMinutes);
|
|
return newSession;
|
|
}
|
|
}
|
|
} |