using System;
using System.Threading;
using System.Threading.Tasks;
using Kyoo.Controllers;
using Kyoo.Models;
using Microsoft.AspNetCore.Identity;
namespace Kyoo.Authentication
{
///
/// An implementation of an that uses an .
///
public class UserStore : IUserStore
{
///
/// The user repository used to store users.
///
private readonly IUserRepository _users;
///
/// Create a new .
///
/// The user repository to use
public UserStore(IUserRepository users)
{
_users = users;
}
///
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
///
/// Implementation of the IDisposable pattern
///
/// True if this class should be disposed.
protected virtual void Dispose(bool disposing)
{
bool _ = disposing;
// Not implemented because this class has nothing to dispose.
}
///
public Task GetUserIdAsync(User user, CancellationToken cancellationToken)
{
return Task.FromResult(user.ID.ToString());
}
///
public Task GetUserNameAsync(User user, CancellationToken cancellationToken)
{
return Task.FromResult(user.Username);
}
///
public Task SetUserNameAsync(User user, string userName, CancellationToken cancellationToken)
{
user.Username = userName;
return Task.CompletedTask;
}
///
public Task GetNormalizedUserNameAsync(User user, CancellationToken cancellationToken)
{
return Task.FromResult(user.Slug);
}
///
public Task SetNormalizedUserNameAsync(User user, string normalizedName, CancellationToken cancellationToken)
{
user.Slug = normalizedName;
return Task.CompletedTask;
}
///
public async Task CreateAsync(User user, CancellationToken cancellationToken)
{
try
{
await _users.Create(user);
return IdentityResult.Success;
}
catch (Exception ex)
{
return IdentityResult.Failed(new IdentityError {Code = ex.GetType().Name, Description = ex.Message});
}
}
///
public async Task UpdateAsync(User user, CancellationToken cancellationToken)
{
try
{
await _users.Edit(user, false);
return IdentityResult.Success;
}
catch (Exception ex)
{
return IdentityResult.Failed(new IdentityError {Code = ex.GetType().Name, Description = ex.Message});
}
}
///
public async Task DeleteAsync(User user, CancellationToken cancellationToken)
{
try
{
await _users.Delete(user);
return IdentityResult.Success;
}
catch (Exception ex)
{
return IdentityResult.Failed(new IdentityError {Code = ex.GetType().Name, Description = ex.Message});
}
}
///
public Task FindByIdAsync(string userId, CancellationToken cancellationToken)
{
return _users.GetOrDefault(int.Parse(userId));
}
///
public Task FindByNameAsync(string normalizedUserName, CancellationToken cancellationToken)
{
return _users.GetOrDefault(normalizedUserName);
}
}
}