TirsvadCLI Portfolio Library
Loading...
Searching...
No Matches
UserManager.cs
1
using
Microsoft.AspNetCore.Cryptography.KeyDerivation;
2
using
Microsoft.EntityFrameworkCore;
3
4
using
TirsvadCLI.Portfolio.Core.Abstracts
;
5
using
TirsvadCLI.Portfolio.Domain.Entities
;
6
namespace
TirsvadCLI.Portfolio.Core.Managers
;
7
40
public
class
UserManager
41
{
42
private
readonly Func<IApplicationDbContext> _dbContextFactory;
43
48
public
UserManager
(Func<IApplicationDbContext> dbContextFactory)
49
{
50
_dbContextFactory = dbContextFactory;
51
}
52
58
public
async Task<ApplicationUser?>
FindByNameAsync
(
string
username)
59
{
60
IApplicationDbContext
context = _dbContextFactory();
61
try
62
{
63
return
await context.Users.FirstOrDefaultAsync(u => u.UserName == username);
64
}
65
finally
66
{
67
(context as IDisposable)?.Dispose();
68
}
69
}
70
80
public
static
Task<bool>
CheckPasswordAsync
(
ApplicationUser
user,
string
password)
81
{
82
// Assumes PasswordHash is stored as "base64Salt:base64Hash"
83
if
(
string
.IsNullOrEmpty(user.PasswordHash) || !user.PasswordHash.Contains(
':'
))
84
return
Task.FromResult(
false
);
85
86
string
[] parts = user.PasswordHash.Split(
':'
);
87
if
(parts.Length != 2)
88
return
Task.FromResult(
false
);
89
90
byte
[] saltBytes = Convert.FromBase64String(parts[0]);
91
string
storedHash = parts[1];
92
93
string
hash = HashPassword(password, saltBytes);
94
return
Task.FromResult(storedHash == hash);
95
}
96
101
public
async Task
AddUserAsync
(
ApplicationUser
user)
102
{
103
IApplicationDbContext
context = _dbContextFactory();
104
try
105
{
106
_ = context.Users.Add(user);
107
_ = await context.SaveChangesAsync();
108
}
109
finally
110
{
111
(context as IDisposable)?.Dispose();
112
}
113
}
114
124
private
static
string
HashPassword(
string
password,
byte
[] salt)
125
{
126
return
Convert.ToBase64String(
127
KeyDerivation.Pbkdf2(
128
password: password,
129
salt: salt,
130
prf: KeyDerivationPrf.HMACSHA256,
131
iterationCount: 10000,
132
numBytesRequested: 256 / 8));
133
}
134
}
TirsvadCLI.Portfolio.Core.Managers.UserManager.CheckPasswordAsync
static Task< bool > CheckPasswordAsync(ApplicationUser user, string password)
Verifies a user's password against the stored password hash.
Definition
UserManager.cs:80
TirsvadCLI.Portfolio.Core.Managers.UserManager.AddUserAsync
async Task AddUserAsync(ApplicationUser user)
Asynchronously adds a new user to the database.
Definition
UserManager.cs:101
TirsvadCLI.Portfolio.Core.Managers.UserManager.FindByNameAsync
async Task< ApplicationUser?> FindByNameAsync(string username)
Asynchronously finds a user by their username.
Definition
UserManager.cs:58
TirsvadCLI.Portfolio.Core.Managers.UserManager.UserManager
UserManager(Func< IApplicationDbContext > dbContextFactory)
Initializes a new instance of the UserManager class with the specified database context factory.
Definition
UserManager.cs:48
TirsvadCLI.Portfolio.Domain.Entities.ApplicationUser
Represents an application user entity for authentication and authorization. Inherits from IdentityUse...
Definition
ApplicationUser.cs:13
TirsvadCLI.Portfolio.Core.Abstracts.IApplicationDbContext
Definition
IApplicationDbContext.cs:8
TirsvadCLI.Portfolio.Core.Abstracts
Definition
IApplicationDbContext.cs:5
TirsvadCLI.Portfolio.Core.Managers
Definition
SignInManager.cs:9
TirsvadCLI.Portfolio.Domain.Entities
Definition
ApplicationUser.cs:5
src
TirsvadCLI.Portfolio.Core
Managers
UserManager.cs
Generated by
1.15.0