mirror of
				https://github.com/Kareadita/Kavita.git
				synced 2025-11-04 03:27:05 -05:00 
			
		
		
		
	* Refactored all files to have Interfaces within the same file. Started moving over to file-scoped namespaces. * Refactored common methods for getting underlying file's cover, pages, and extracting into 1 interface. * More refactoring around removing dependence on explicit filetype testing for getting information. * Code is buildable, tests are broken. Huge refactor (not completed) which makes most of DirectoryService testable with a mock filesystem (and thus the services that utilize it). * Finished porting DirectoryService to use mocked filesystem implementation. * Added a null check * Added a null check * Finished all unit tests for DirectoryService. * Some misc cleanup on the code * Fixed up some bugs from refactoring scan loop. * Implemented CleanupService testing and refactored more of DirectoryService to be non-static. Fixed a bug where cover file cleanup wasn't properly finding files due to a regex bug. * Fixed an issue in CleanupBackup() where we weren't properly selecting database files older than 30 days. Finished CleanupService Tests. * Refactored Flatten and RemoveNonImages to directory service to allow CacheService to be testable. * Finally have CacheService tested. Rewrote GetCachedPagePath() to be much more straightforward & performant. * Updated DefaultParserTests.cs to contain all existing tests and follow new test layout format. * All tests fixed up
		
			
				
	
	
		
			58 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System.Collections.Generic;
 | 
						|
using System.Linq;
 | 
						|
using System.Threading.Tasks;
 | 
						|
using API.Entities;
 | 
						|
using API.Errors;
 | 
						|
using Microsoft.AspNetCore.Identity;
 | 
						|
using Microsoft.Extensions.Logging;
 | 
						|
 | 
						|
namespace API.Services
 | 
						|
{
 | 
						|
    public interface IAccountService
 | 
						|
    {
 | 
						|
        Task<IEnumerable<ApiException>> ChangeUserPassword(AppUser user, string newPassword);
 | 
						|
    }
 | 
						|
 | 
						|
    public class AccountService : IAccountService
 | 
						|
    {
 | 
						|
        private readonly UserManager<AppUser> _userManager;
 | 
						|
        private readonly ILogger<AccountService> _logger;
 | 
						|
        public const string DefaultPassword = "[k.2@RZ!mxCQkJzE";
 | 
						|
 | 
						|
        public AccountService(UserManager<AppUser> userManager, ILogger<AccountService> logger)
 | 
						|
        {
 | 
						|
            _userManager = userManager;
 | 
						|
            _logger = logger;
 | 
						|
        }
 | 
						|
 | 
						|
        public async Task<IEnumerable<ApiException>> ChangeUserPassword(AppUser user, string newPassword)
 | 
						|
        {
 | 
						|
            foreach (var validator in _userManager.PasswordValidators)
 | 
						|
            {
 | 
						|
                var validationResult = await validator.ValidateAsync(_userManager, user, newPassword);
 | 
						|
                if (!validationResult.Succeeded)
 | 
						|
                {
 | 
						|
                    return validationResult.Errors.Select(e => new ApiException(400, e.Code, e.Description));
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            var result = await _userManager.RemovePasswordAsync(user);
 | 
						|
            if (!result.Succeeded)
 | 
						|
            {
 | 
						|
                _logger.LogError("Could not update password");
 | 
						|
                return result.Errors.Select(e => new ApiException(400, e.Code, e.Description));
 | 
						|
            }
 | 
						|
 | 
						|
 | 
						|
            result = await _userManager.AddPasswordAsync(user, newPassword);
 | 
						|
            if (!result.Succeeded)
 | 
						|
            {
 | 
						|
                _logger.LogError("Could not update password");
 | 
						|
                return result.Errors.Select(e => new ApiException(400, e.Code, e.Description));
 | 
						|
            }
 | 
						|
 | 
						|
            return new List<ApiException>();
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |