64 lines
2.3 KiB
C#
64 lines
2.3 KiB
C#
using System;
|
|
using System.Data;
|
|
using System.Data.SqlClient;
|
|
|
|
namespace SecureCore.Authentication
|
|
{
|
|
public static class SessionManager
|
|
{
|
|
private static int SessionKeySize { get; } = 64; //n bytes
|
|
|
|
public static string CreateSessionToken()
|
|
{
|
|
var token = new byte[SessionKeySize];
|
|
|
|
ByteGenerator.GetRandomBytes(ref token);
|
|
|
|
return Convert.ToBase64String(token);
|
|
}
|
|
|
|
public static bool IsSessionTokenValid(string sessionToken, string connectionString, bool isResetToken = false)
|
|
{
|
|
using var connection = new SqlConnection(connectionString);
|
|
using var command = new SqlCommand("ValidateSessionToken", connection) { CommandType = CommandType.StoredProcedure };
|
|
|
|
command.Parameters.AddWithValue("SessionToken", sessionToken);
|
|
command.Parameters.AddWithValue("IsResetToken", isResetToken);
|
|
|
|
connection.Open();
|
|
|
|
var result = command.ExecuteScalar();
|
|
|
|
return Convert.ToBoolean(result);
|
|
}
|
|
|
|
public static void Logout(string sessionToken, string connectionString)
|
|
{
|
|
using var connection = new SqlConnection(connectionString);
|
|
using var command = new SqlCommand("LogoutUser", connection) { CommandType = CommandType.StoredProcedure };
|
|
|
|
command.Parameters.AddWithValue("SessionToken", sessionToken);
|
|
|
|
connection.Open();
|
|
|
|
command.ExecuteNonQuery();
|
|
}
|
|
|
|
public static void Login(string userName, string sessionToken, DateTime expirationDate, string userAgent, string ipAddress, string connectionString)
|
|
{
|
|
using var connection = new SqlConnection(connectionString);
|
|
using var command = new SqlCommand("LoginUser", connection) { CommandType = CommandType.StoredProcedure };
|
|
|
|
command.Parameters.AddWithValue("SessionToken", sessionToken);
|
|
command.Parameters.AddWithValue("ExpirationDate", expirationDate);
|
|
command.Parameters.AddWithValue("UserName", userName);
|
|
command.Parameters.AddWithValue("UserAgent", userAgent);
|
|
command.Parameters.AddWithValue("IpAddress", ipAddress);
|
|
|
|
connection.Open();
|
|
|
|
command.ExecuteNonQuery();
|
|
}
|
|
}
|
|
}
|