#ifndef CLI_H #define CLI_H #include #include #include #include "database/database.h" #include "config.h" class CLIHandler { struct cmd { std::string name; std::string helptext; unsigned int required_args; std::vector subCommands; std::function(CLIHandler *, const std::vector &)> func; }; private: Database *db; Config *conf; protected: std::pair attach([[maybe_unused]] const std::vector &args); std::pair cli_help([[maybe_unused]] const std::vector &args); std::pair user_add([[maybe_unused]] const std::vector &args); std::pair user_change_pw([[maybe_unused]] const std::vector &args); std::pair user_rename([[maybe_unused]] const std::vector &args); std::pair user_set_perms([[maybe_unused]] const std::vector &args); std::pair user_list([[maybe_unused]] const std::vector &args); std::pair user_show([[maybe_unused]] const std::vector &args); std::pair page_list([[maybe_unused]] const std::vector &args); std::pair pageperms_set_permissions([[maybe_unused]] const std::vector &args); std::pair version([[maybe_unused]] const std::vector &args); std::pair category_list([[maybe_unused]] const std::vector &args); std::pair category_delete([[maybe_unused]] const std::vector &args); std::pair category_show([[maybe_unused]] const std::vector &args); std::vector cmds{ {{"user", "user operations on the database", 1, {{{"add", "[user] [password] - creates a user", 2, {}, &CLIHandler::user_add}, {"changepw", "[user] [password] - changes the password of user", 2, {}, &CLIHandler::user_change_pw}, {"rename", "[user] [new name] - renames a user", 2, {}, &CLIHandler::user_rename}, {"setperms", "[user] [perms] - sets the permissions of the user", 2, {}, &CLIHandler::user_set_perms}, {"list", "- lists users", 0, {}, &CLIHandler::user_list}, {"show", "[user] - show detailed information about user", 1, {}, &CLIHandler::user_show}}}, &CLIHandler::cli_help}, {"page", "operation on pages", 1, {{{"list", "- lists existing pages", 0, {}, &CLIHandler::page_list}}}, &CLIHandler::cli_help}, {"category", "operation on categories", 1, {{{"list", "- lists existing categories", 0, {}, &CLIHandler::category_list}, {"delete", " - deletes a category", 1, {}, &CLIHandler::category_delete}, {"show", " - shows pages of a category", 1, {}, &CLIHandler::category_show}}}, &CLIHandler::cli_help}, {"pageperms", "set permissions on pages", 1, {{{"set", "- [page] [username] [permissions] set permisisons on page", 3, {}, &CLIHandler::pageperms_set_permissions}}}, &CLIHandler::cli_help}, {"exit", "exit cli", 0, {}, [](CLIHandler *, [[maybe_unused]] const std::vector &args) -> std::pair { exit(EXIT_SUCCESS); return {true, ""}; }}, {"help", "print this help", 0, {}, &CLIHandler::cli_help}, {"attach", "attach to running instance", 0, {}, &CLIHandler::attach}, {"version", "print verison info", 0, {}, &CLIHandler::version}}}; std::pair processCommand(const std::vector &commands, std::string cmd, const std::vector &args); public: CLIHandler(Config &config, Database &d); std::pair processCommand(std::string cmd, const std::vector &args); static std::pair> splitCommand(std::string input); }; #endif // CLI_H