mirror of
https://github.com/opelly27/WinStudentGoalTracker.git
synced 2026-05-20 11:07:41 +00:00
Silent merge fail
This commit is contained in:
@@ -0,0 +1,7 @@
|
||||
namespace WinStudentGoalTracker.DataAccess;
|
||||
|
||||
public class LoginDto
|
||||
{
|
||||
public string? Email { get; set; }
|
||||
public string? Password { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
namespace WinStudentGoalTracker.DataAccess;
|
||||
|
||||
public class RefreshTokenDto
|
||||
{
|
||||
public string? RefreshToken { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
namespace WinStudentGoalTracker.DataAccess;
|
||||
|
||||
public class dbRefreshToken
|
||||
{
|
||||
public Guid IdRefreshToken { get; set; }
|
||||
public Guid IdUser { get; set; }
|
||||
public required string TokenHash { get; set; }
|
||||
public required string TokenSalt { get; set; }
|
||||
public DateTime ExpiresAt { get; set; }
|
||||
public DateTime LastUsedAt { get; set; }
|
||||
public DateTime? RevokedAt { get; set; }
|
||||
public string? DeviceInfo { get; set; }
|
||||
public string? UserAgent { get; set; }
|
||||
public Guid? ReplacedByTokenId { get; set; }
|
||||
public DateTime CreatedAt { get; set; }
|
||||
public DateTime UpdatedAt { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
namespace WinStudentGoalTracker.DataAccess;
|
||||
|
||||
public class dbUser
|
||||
{
|
||||
public required Guid IdUser { get; set; }
|
||||
public Guid? IdRole { get; set; }
|
||||
public string? Email { get; set; }
|
||||
public string? Name { get; set; }
|
||||
public string? PasswordHash { get; set; }
|
||||
public string? PasswordSalt { get; set; }
|
||||
public int FailedLoginAttempts { get; set; }
|
||||
public DateTime? LockedUntil { get; set; }
|
||||
public DateTime? CreatedAt { get; set; }
|
||||
public string? RoleInternalName { get; set; }
|
||||
public string? RoleDisplayName { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,83 @@
|
||||
using System.Data;
|
||||
using Dapper;
|
||||
using MySql.Data.MySqlClient;
|
||||
|
||||
namespace WinStudentGoalTracker.DataAccess;
|
||||
|
||||
public class AuthRepository
|
||||
{
|
||||
private IDbConnection Connection => new MySqlConnection(DatabaseManager.ConnectionString);
|
||||
|
||||
public async Task<Guid?> CreateRefreshTokenAsync(
|
||||
Guid refreshTokenId,
|
||||
Guid userId,
|
||||
string tokenHash,
|
||||
string tokenSalt,
|
||||
int expiresInSeconds,
|
||||
string? deviceInfo,
|
||||
string? userAgent)
|
||||
{
|
||||
using var db = Connection;
|
||||
var result = await db.QuerySingleOrDefaultAsync<string?>(
|
||||
"sp_RefreshToken_Create",
|
||||
new
|
||||
{
|
||||
p_id_refresh_token = refreshTokenId.ToString(),
|
||||
p_id_user = userId.ToString(),
|
||||
p_token_hash = tokenHash,
|
||||
p_token_salt = tokenSalt,
|
||||
p_expires_in_seconds = expiresInSeconds,
|
||||
p_device_info = deviceInfo,
|
||||
p_user_agent = userAgent
|
||||
},
|
||||
commandType: CommandType.StoredProcedure);
|
||||
return result != null ? Guid.Parse(result) : null;
|
||||
}
|
||||
|
||||
public async Task<dbRefreshToken?> GetRefreshTokenByIdAsync(Guid refreshTokenId)
|
||||
{
|
||||
using var db = Connection;
|
||||
return await db.QuerySingleOrDefaultAsync<dbRefreshToken>(
|
||||
"sp_RefreshToken_GetById",
|
||||
new { p_id_refresh_token = refreshTokenId.ToString() },
|
||||
commandType: CommandType.StoredProcedure);
|
||||
}
|
||||
|
||||
public async Task<bool> RevokeRefreshTokenAsync(Guid refreshTokenId)
|
||||
{
|
||||
using var db = Connection;
|
||||
var rowsAffected = await db.QuerySingleOrDefaultAsync<int>(
|
||||
"sp_RefreshToken_Revoke",
|
||||
new { p_id_refresh_token = refreshTokenId.ToString() },
|
||||
commandType: CommandType.StoredProcedure);
|
||||
return rowsAffected > 0;
|
||||
}
|
||||
|
||||
public async Task<Guid?> ReplaceRefreshTokenAsync(
|
||||
Guid oldTokenId,
|
||||
Guid newTokenId,
|
||||
Guid userId,
|
||||
string tokenHash,
|
||||
string tokenSalt,
|
||||
int expiresInSeconds,
|
||||
string? deviceInfo,
|
||||
string? userAgent)
|
||||
{
|
||||
using var db = Connection;
|
||||
var result = await db.QuerySingleOrDefaultAsync<string?>(
|
||||
"sp_RefreshToken_Replace",
|
||||
new
|
||||
{
|
||||
p_old_token_id = oldTokenId.ToString(),
|
||||
p_id_refresh_token = newTokenId.ToString(),
|
||||
p_id_user = userId.ToString(),
|
||||
p_token_hash = tokenHash,
|
||||
p_token_salt = tokenSalt,
|
||||
p_expires_in_seconds = expiresInSeconds,
|
||||
p_device_info = deviceInfo,
|
||||
p_user_agent = userAgent
|
||||
},
|
||||
commandType: CommandType.StoredProcedure);
|
||||
return result != null ? Guid.Parse(result) : null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
using System.Data;
|
||||
using Dapper;
|
||||
using MySql.Data.MySqlClient;
|
||||
|
||||
namespace WinStudentGoalTracker.DataAccess;
|
||||
|
||||
public class UserRepository
|
||||
{
|
||||
private IDbConnection Connection => new MySqlConnection(DatabaseManager.ConnectionString);
|
||||
|
||||
public async Task<dbUser?> GetByEmailAsync(string email)
|
||||
{
|
||||
using var db = Connection;
|
||||
return await db.QuerySingleOrDefaultAsync<dbUser>(
|
||||
"sp_User_GetByEmail",
|
||||
new { p_email = email },
|
||||
commandType: CommandType.StoredProcedure);
|
||||
}
|
||||
|
||||
public async Task<dbUser?> GetByIdAsync(Guid idUser)
|
||||
{
|
||||
using var db = Connection;
|
||||
return await db.QuerySingleOrDefaultAsync<dbUser>(
|
||||
"sp_User_GetById",
|
||||
new { p_id_user = idUser.ToString() },
|
||||
commandType: CommandType.StoredProcedure);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user