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() .SetName("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 GetByJwtToken(string token) { var user = Users.FirstOrDefault(u => u.JwtTokens.Any(t => t.Token == token)); if (user == null) return Result.NotFound(null, "User not found."); return Result.Ok(user); } public Result GetByRefreshToken(string refreshToken) { var user = Users.FirstOrDefault(u => u.JwtTokens.Any(t => t.RefreshToken == refreshToken)); if (user == null) return Result.NotFound(null, "User not found for the provided refresh token."); return Result.Ok(user); } public Result CreateUser(string name, string password, string pepper) { var setPasswordResult = new User() .SetName(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 Settings UpsertUser(User user) { var existing = Users.FirstOrDefault(u => u.Id == user.Id); if (existing != null) Users.Remove(existing); Users.Add(user); return this; } public Settings UpsertUsers(List users) { foreach (var user in users) UpsertUser(user); return this; } public Result RemoveUser(Guid userId) { var user = Users.FirstOrDefault(u => u.Id == userId); if (user == null) return Result.NotFound(null, "User not found."); Users.Remove(user); return Result.Ok(this); } public Result RemoveUsers(List userIds) { foreach (var userId in userIds) { var removeResult = RemoveUser(userId); if (!removeResult.IsSuccess) return removeResult; } return Result.Ok(this); } }