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); } } }