#ifndef SERVER_CONFIG_H #define SERVER_CONFIG_H #include #include /** * @brief Authentication method enumeration */ enum class AuthMethod { NONE, ///< No authentication (allow all access) PAM, ///< PAM authentication SHARED_KEY ///< Shared key authentication }; /** * @brief Authentication configuration structure */ struct AuthConfig { AuthMethod authMethod = AuthMethod::NONE; ///< Primary authentication method bool enableGuestAccess = false; ///< Allow unauthenticated access std::string sharedKey = ""; ///< Shared key for authentication std::string pamServiceName = "stable-diffusion-rest"; ///< PAM service name std::string dataDir = "./auth"; ///< Directory for authentication data std::vector publicPaths; ///< Paths that don't require authentication std::vector adminPaths; ///< Paths that require admin access std::vector userPaths; ///< Paths that require user access std::string customPublicPaths; ///< Custom public paths (comma-separated) }; // Server configuration structure struct ServerConfig { // Server settings std::string host = "0.0.0.0"; int port = 8080; int maxConcurrentGenerations = 1; bool verbose = false; // Connection and timeout settings int connectionTimeoutMs = 500; // Connection timeout in milliseconds int readTimeoutMs = 500; // Read timeout in milliseconds int writeTimeoutMs = 500; // Write timeout in milliseconds // Generation limits int maxPromptLength = 10000; // Maximum prompt character length int maxNegativePromptLength = 10000; // Maximum negative prompt character length // Graceful shutdown delay int shutdownDelayMs = 100; // Delay in milliseconds for graceful shutdown // Required directory parameter std::string modelsDir = ""; // Base models directory (required, must be set via --models-dir) // Model type directory parameters // All default to standard folder names under modelsDir if not explicitly set std::string checkpoints = ""; // Checkpoints directory (default: checkpoints) std::string controlnetDir = ""; // ControlNet directory (default: controlnet) std::string embeddingsDir = ""; // Embeddings directory (default: embeddings) std::string esrganDir = ""; // ESRGAN directory (default: ESRGAN) std::string loraDir = ""; // LoRA directory (default: loras) std::string taesdDir = ""; // TAESD directory (default: TAESD) std::string vaeDir = ""; // VAE directory (default: vae) std::string diffusionModelsDir = ""; // Diffusion models directory (default: diffusion_models) // Queue and output directories std::string queueDir = "./queue"; // Directory to store queue job files std::string outputDir = "./output"; // Directory to store generated images/videos // UI directory (optional - for serving static web UI) std::string uiDir = ""; // Directory containing static web UI files // Logging options bool enableFileLogging = false; std::string logFilePath = "/var/log/stable-diffusion-rest/server.log"; // Default admin credentials (for initial setup) std::string defaultAdminUsername = "admin"; std::string defaultAdminPassword = "admin123"; std::string defaultAdminEmail = "admin@localhost"; // Hash all models option bool hashAllModels = false; // Hash all models during startup // Authentication configuration AuthConfig auth; }; #endif // SERVER_CONFIG_H