using AuthHex.Models; using AuthHex.Models.IOs; using AuthHex.Services.UserManager; using System.Text.Json; namespace AuthHex.Services.FunctionHandler { public class UserManager { public readonly Dictionary>> _functionHandler; public UserManager(UserManagerService UserManagerService) { _functionHandler = new() { { "registerUser", UserManagerService.RegisterUser }, { "loginUser", UserManagerService.LoginUser }, { "refreshToken", UserManagerService.RefreshToken }, { "getUserDetails", UserManagerService.GetUserDetails }, { "getUserSessions", async (payload, context) => await UserManagerService.GetUserSessions(context) }, { "ChangeUserStatus", UserManagerService.ChangeUserStatus}, {"LockUserAccount" , UserManagerService.LockUserAccount }, {"ChangeUserPassword" , UserManagerService.ChangeUserPassword }, {"VerifyPassword" , UserManagerService.VerifyPassword }, {"LogoutUser" , UserManagerService.LogoutUser}, {"UpdateUser", UserManagerService.UpdateUser}, {"VerifyOtpForLogin",UserManagerService.VerifyOtpForLogin}, // 2FA Management Functions { "initiateTwoFASetup", async (payload, context) => await UserManagerService.InitiateTwoFASetup(context) }, { "completeTwoFASetup", UserManagerService.CompleteTwoFASetup }, { "verifyTwoFA", UserManagerService.VerifyTwoFA }, { "disableTwoFA", UserManagerService.DisableTwoFA }, { "getTwoFAStatus", async (payload, context) => await UserManagerService.GetTwoFAStatus(context) } }; } public async Task Execute(ApiRequest request, HttpContext httpContext) { if (!_functionHandler.TryGetValue(request.FunctionName, out var handler)) { return new ApiResponse { StatusCode = 404, Message = $"Function '{request.FunctionName}' not found.", Data = null }; } try { var results = await handler(request.Payload, httpContext); return new ApiResponse { StatusCode = 200, Message = "success", Data = results }; } catch (KeyNotFoundException ex) { return new ApiResponse { StatusCode = 400, Message = ex.Message, Data = null }; } catch (InvalidOperationException ex) { return new ApiResponse { StatusCode = 400, Message = ex.Message, Data = null }; } catch (ArgumentException ex) { return new ApiResponse { StatusCode = 500, Message = ex.Message, Data = null }; } } } }