using MaksIT.Core.Abstractions.Domain; using MaksIT.Core.Security; using MaksIT.Results; namespace MaksIT.LetsEncryptServer.Domain; public class Settings : DomainObjectBase { public bool Init { get; set; } public List Users { get; set; } = []; public Settings() {} public Result Initialize(string pepper) { var userResult = new User("admin") .SetPassword("password", pepper); if (!userResult.IsSuccess || userResult.Value == null) { return userResult.ToResultOfType(_ => null); } Init = true; Users = [userResult.Value]; return Result.Ok(this); } public Result GetUserByName(string name) { var user = Users.FirstOrDefault(x => x.Name == name); if (user == null) return Result.NotFound(null, "User not found."); return Result.Ok(user); } public Result AddUser(string name, string password, string pepper) { var setPasswordResult = new User(name) .SetPassword(password, pepper); if (!setPasswordResult.IsSuccess || setPasswordResult.Value == null) return setPasswordResult.ToResultOfType(_ => null); var user = setPasswordResult.Value; Users.Add(user); return Result.Ok(this); } public Result RemoveUser(string name) { if (Users.Any(x => x.Name == name)) { Users = [.. Users.Where(u => u.Name != name)]; return Result.Ok(this); } return Result.NotFound(null, "User not found."); } }