Mercurial > irccd
changeset 631:1fa9e5222e87
Irccd: move commands to command folder
line wrap: on
line diff
--- a/irccd/main.cpp Wed Mar 07 17:49:56 2018 +0100 +++ b/irccd/main.cpp Wed Mar 07 21:00:56 2018 +0100 @@ -40,34 +40,35 @@ #include <irccd/daemon/irccd.hpp> #include <irccd/daemon/logger.hpp> -#include <irccd/daemon/plugin_config_command.hpp> -#include <irccd/daemon/plugin_info_command.hpp> -#include <irccd/daemon/plugin_list_command.hpp> -#include <irccd/daemon/plugin_list_command.hpp> -#include <irccd/daemon/plugin_load_command.hpp> -#include <irccd/daemon/plugin_reload_command.hpp> -#include <irccd/daemon/plugin_unload_command.hpp> -#include <irccd/daemon/rule_add_command.hpp> -#include <irccd/daemon/rule_edit_command.hpp> -#include <irccd/daemon/rule_info_command.hpp> -#include <irccd/daemon/rule_list_command.hpp> -#include <irccd/daemon/rule_move_command.hpp> -#include <irccd/daemon/rule_remove_command.hpp> -#include <irccd/daemon/server_connect_command.hpp> -#include <irccd/daemon/server_disconnect_command.hpp> -#include <irccd/daemon/server_info_command.hpp> -#include <irccd/daemon/server_invite_command.hpp> -#include <irccd/daemon/server_join_command.hpp> -#include <irccd/daemon/server_kick_command.hpp> -#include <irccd/daemon/server_list_command.hpp> -#include <irccd/daemon/server_me_command.hpp> -#include <irccd/daemon/server_message_command.hpp> -#include <irccd/daemon/server_mode_command.hpp> -#include <irccd/daemon/server_nick_command.hpp> -#include <irccd/daemon/server_notice_command.hpp> -#include <irccd/daemon/server_part_command.hpp> -#include <irccd/daemon/server_reconnect_command.hpp> -#include <irccd/daemon/server_topic_command.hpp> + +#include <irccd/daemon/command/plugin_config_command.hpp> +#include <irccd/daemon/command/plugin_info_command.hpp> +#include <irccd/daemon/command/plugin_list_command.hpp> +#include <irccd/daemon/command/plugin_list_command.hpp> +#include <irccd/daemon/command/plugin_load_command.hpp> +#include <irccd/daemon/command/plugin_reload_command.hpp> +#include <irccd/daemon/command/plugin_unload_command.hpp> +#include <irccd/daemon/command/rule_add_command.hpp> +#include <irccd/daemon/command/rule_edit_command.hpp> +#include <irccd/daemon/command/rule_info_command.hpp> +#include <irccd/daemon/command/rule_list_command.hpp> +#include <irccd/daemon/command/rule_move_command.hpp> +#include <irccd/daemon/command/rule_remove_command.hpp> +#include <irccd/daemon/command/server_connect_command.hpp> +#include <irccd/daemon/command/server_disconnect_command.hpp> +#include <irccd/daemon/command/server_info_command.hpp> +#include <irccd/daemon/command/server_invite_command.hpp> +#include <irccd/daemon/command/server_join_command.hpp> +#include <irccd/daemon/command/server_kick_command.hpp> +#include <irccd/daemon/command/server_list_command.hpp> +#include <irccd/daemon/command/server_me_command.hpp> +#include <irccd/daemon/command/server_message_command.hpp> +#include <irccd/daemon/command/server_mode_command.hpp> +#include <irccd/daemon/command/server_nick_command.hpp> +#include <irccd/daemon/command/server_notice_command.hpp> +#include <irccd/daemon/command/server_part_command.hpp> +#include <irccd/daemon/command/server_reconnect_command.hpp> +#include <irccd/daemon/command/server_topic_command.hpp> #include <irccd/daemon/service/plugin_service.hpp> #include <irccd/daemon/service/rule_service.hpp>
--- a/libirccd/CMakeLists.txt Wed Mar 07 17:49:56 2018 +0100 +++ b/libirccd/CMakeLists.txt Wed Mar 07 21:00:56 2018 +0100 @@ -25,43 +25,43 @@ ${libirccd_SOURCE_DIR}/irccd/daemon/basic_transport_client.hpp ${libirccd_SOURCE_DIR}/irccd/daemon/basic_transport_server.hpp ${libirccd_SOURCE_DIR}/irccd/daemon/command.hpp + ${libirccd_SOURCE_DIR}/irccd/daemon/command/plugin_config_command.hpp + ${libirccd_SOURCE_DIR}/irccd/daemon/command/plugin_info_command.hpp + ${libirccd_SOURCE_DIR}/irccd/daemon/command/plugin_list_command.hpp + ${libirccd_SOURCE_DIR}/irccd/daemon/command/plugin_list_command.hpp + ${libirccd_SOURCE_DIR}/irccd/daemon/command/plugin_load_command.hpp + ${libirccd_SOURCE_DIR}/irccd/daemon/command/plugin_reload_command.hpp + ${libirccd_SOURCE_DIR}/irccd/daemon/command/plugin_unload_command.hpp + ${libirccd_SOURCE_DIR}/irccd/daemon/command/rule_add_command.hpp + ${libirccd_SOURCE_DIR}/irccd/daemon/command/rule_edit_command.hpp + ${libirccd_SOURCE_DIR}/irccd/daemon/command/rule_info_command.hpp + ${libirccd_SOURCE_DIR}/irccd/daemon/command/rule_list_command.hpp + ${libirccd_SOURCE_DIR}/irccd/daemon/command/rule_move_command.hpp + ${libirccd_SOURCE_DIR}/irccd/daemon/command/rule_remove_command.hpp + ${libirccd_SOURCE_DIR}/irccd/daemon/command/server_connect_command.hpp + ${libirccd_SOURCE_DIR}/irccd/daemon/command/server_disconnect_command.hpp + ${libirccd_SOURCE_DIR}/irccd/daemon/command/server_info_command.hpp + ${libirccd_SOURCE_DIR}/irccd/daemon/command/server_invite_command.hpp + ${libirccd_SOURCE_DIR}/irccd/daemon/command/server_join_command.hpp + ${libirccd_SOURCE_DIR}/irccd/daemon/command/server_kick_command.hpp + ${libirccd_SOURCE_DIR}/irccd/daemon/command/server_list_command.hpp + ${libirccd_SOURCE_DIR}/irccd/daemon/command/server_me_command.hpp + ${libirccd_SOURCE_DIR}/irccd/daemon/command/server_message_command.hpp + ${libirccd_SOURCE_DIR}/irccd/daemon/command/server_mode_command.hpp + ${libirccd_SOURCE_DIR}/irccd/daemon/command/server_nick_command.hpp + ${libirccd_SOURCE_DIR}/irccd/daemon/command/server_notice_command.hpp + ${libirccd_SOURCE_DIR}/irccd/daemon/command/server_part_command.hpp + ${libirccd_SOURCE_DIR}/irccd/daemon/command/server_reconnect_command.hpp + ${libirccd_SOURCE_DIR}/irccd/daemon/command/server_topic_command.hpp ${libirccd_SOURCE_DIR}/irccd/daemon/dynlib_plugin.hpp ${libirccd_SOURCE_DIR}/irccd/daemon/ip_transport_server.hpp ${libirccd_SOURCE_DIR}/irccd/daemon/irccd.hpp ${libirccd_SOURCE_DIR}/irccd/daemon/irc.hpp ${libirccd_SOURCE_DIR}/irccd/daemon/local_transport_server.hpp ${libirccd_SOURCE_DIR}/irccd/daemon/logger.hpp - ${libirccd_SOURCE_DIR}/irccd/daemon/plugin_config_command.hpp ${libirccd_SOURCE_DIR}/irccd/daemon/plugin.hpp - ${libirccd_SOURCE_DIR}/irccd/daemon/plugin_info_command.hpp - ${libirccd_SOURCE_DIR}/irccd/daemon/plugin_list_command.hpp - ${libirccd_SOURCE_DIR}/irccd/daemon/plugin_list_command.hpp - ${libirccd_SOURCE_DIR}/irccd/daemon/plugin_load_command.hpp - ${libirccd_SOURCE_DIR}/irccd/daemon/plugin_reload_command.hpp - ${libirccd_SOURCE_DIR}/irccd/daemon/plugin_unload_command.hpp - ${libirccd_SOURCE_DIR}/irccd/daemon/rule_add_command.hpp - ${libirccd_SOURCE_DIR}/irccd/daemon/rule_edit_command.hpp ${libirccd_SOURCE_DIR}/irccd/daemon/rule.hpp - ${libirccd_SOURCE_DIR}/irccd/daemon/rule_info_command.hpp - ${libirccd_SOURCE_DIR}/irccd/daemon/rule_list_command.hpp - ${libirccd_SOURCE_DIR}/irccd/daemon/rule_move_command.hpp - ${libirccd_SOURCE_DIR}/irccd/daemon/rule_remove_command.hpp - ${libirccd_SOURCE_DIR}/irccd/daemon/server_connect_command.hpp - ${libirccd_SOURCE_DIR}/irccd/daemon/server_disconnect_command.hpp ${libirccd_SOURCE_DIR}/irccd/daemon/server.hpp - ${libirccd_SOURCE_DIR}/irccd/daemon/server_info_command.hpp - ${libirccd_SOURCE_DIR}/irccd/daemon/server_invite_command.hpp - ${libirccd_SOURCE_DIR}/irccd/daemon/server_join_command.hpp - ${libirccd_SOURCE_DIR}/irccd/daemon/server_kick_command.hpp - ${libirccd_SOURCE_DIR}/irccd/daemon/server_list_command.hpp - ${libirccd_SOURCE_DIR}/irccd/daemon/server_me_command.hpp - ${libirccd_SOURCE_DIR}/irccd/daemon/server_message_command.hpp - ${libirccd_SOURCE_DIR}/irccd/daemon/server_mode_command.hpp - ${libirccd_SOURCE_DIR}/irccd/daemon/server_nick_command.hpp - ${libirccd_SOURCE_DIR}/irccd/daemon/server_notice_command.hpp - ${libirccd_SOURCE_DIR}/irccd/daemon/server_part_command.hpp - ${libirccd_SOURCE_DIR}/irccd/daemon/server_reconnect_command.hpp - ${libirccd_SOURCE_DIR}/irccd/daemon/server_topic_command.hpp ${libirccd_SOURCE_DIR}/irccd/daemon/service/plugin_service.hpp ${libirccd_SOURCE_DIR}/irccd/daemon/service/rule_service.hpp ${libirccd_SOURCE_DIR}/irccd/daemon/service/server_service.hpp @@ -73,40 +73,40 @@ set( SOURCES + ${libirccd_SOURCE_DIR}/irccd/daemon/command/plugin_config_command.cpp + ${libirccd_SOURCE_DIR}/irccd/daemon/command/plugin_info_command.cpp + ${libirccd_SOURCE_DIR}/irccd/daemon/command/plugin_list_command.cpp + ${libirccd_SOURCE_DIR}/irccd/daemon/command/plugin_load_command.cpp + ${libirccd_SOURCE_DIR}/irccd/daemon/command/plugin_reload_command.cpp + ${libirccd_SOURCE_DIR}/irccd/daemon/command/plugin_unload_command.cpp + ${libirccd_SOURCE_DIR}/irccd/daemon/command/rule_add_command.cpp + ${libirccd_SOURCE_DIR}/irccd/daemon/command/rule_edit_command.cpp + ${libirccd_SOURCE_DIR}/irccd/daemon/command/rule_info_command.cpp + ${libirccd_SOURCE_DIR}/irccd/daemon/command/rule_list_command.cpp + ${libirccd_SOURCE_DIR}/irccd/daemon/command/rule_move_command.cpp + ${libirccd_SOURCE_DIR}/irccd/daemon/command/rule_remove_command.cpp + ${libirccd_SOURCE_DIR}/irccd/daemon/command/server_connect_command.cpp + ${libirccd_SOURCE_DIR}/irccd/daemon/command/server_disconnect_command.cpp + ${libirccd_SOURCE_DIR}/irccd/daemon/command/server_info_command.cpp + ${libirccd_SOURCE_DIR}/irccd/daemon/command/server_invite_command.cpp + ${libirccd_SOURCE_DIR}/irccd/daemon/command/server_join_command.cpp + ${libirccd_SOURCE_DIR}/irccd/daemon/command/server_kick_command.cpp + ${libirccd_SOURCE_DIR}/irccd/daemon/command/server_list_command.cpp + ${libirccd_SOURCE_DIR}/irccd/daemon/command/server_me_command.cpp + ${libirccd_SOURCE_DIR}/irccd/daemon/command/server_message_command.cpp + ${libirccd_SOURCE_DIR}/irccd/daemon/command/server_mode_command.cpp + ${libirccd_SOURCE_DIR}/irccd/daemon/command/server_nick_command.cpp + ${libirccd_SOURCE_DIR}/irccd/daemon/command/server_notice_command.cpp + ${libirccd_SOURCE_DIR}/irccd/daemon/command/server_part_command.cpp + ${libirccd_SOURCE_DIR}/irccd/daemon/command/server_reconnect_command.cpp + ${libirccd_SOURCE_DIR}/irccd/daemon/command/server_topic_command.cpp ${libirccd_SOURCE_DIR}/irccd/daemon/dynlib_plugin.cpp ${libirccd_SOURCE_DIR}/irccd/daemon/irccd.cpp ${libirccd_SOURCE_DIR}/irccd/daemon/irc.cpp ${libirccd_SOURCE_DIR}/irccd/daemon/logger.cpp - ${libirccd_SOURCE_DIR}/irccd/daemon/plugin_config_command.cpp ${libirccd_SOURCE_DIR}/irccd/daemon/plugin.cpp - ${libirccd_SOURCE_DIR}/irccd/daemon/plugin_info_command.cpp - ${libirccd_SOURCE_DIR}/irccd/daemon/plugin_list_command.cpp - ${libirccd_SOURCE_DIR}/irccd/daemon/plugin_load_command.cpp - ${libirccd_SOURCE_DIR}/irccd/daemon/plugin_reload_command.cpp - ${libirccd_SOURCE_DIR}/irccd/daemon/plugin_unload_command.cpp - ${libirccd_SOURCE_DIR}/irccd/daemon/rule_add_command.cpp ${libirccd_SOURCE_DIR}/irccd/daemon/rule.cpp - ${libirccd_SOURCE_DIR}/irccd/daemon/rule_edit_command.cpp - ${libirccd_SOURCE_DIR}/irccd/daemon/rule_info_command.cpp - ${libirccd_SOURCE_DIR}/irccd/daemon/rule_list_command.cpp - ${libirccd_SOURCE_DIR}/irccd/daemon/rule_move_command.cpp - ${libirccd_SOURCE_DIR}/irccd/daemon/rule_remove_command.cpp - ${libirccd_SOURCE_DIR}/irccd/daemon/server_connect_command.cpp ${libirccd_SOURCE_DIR}/irccd/daemon/server.cpp - ${libirccd_SOURCE_DIR}/irccd/daemon/server_disconnect_command.cpp - ${libirccd_SOURCE_DIR}/irccd/daemon/server_info_command.cpp - ${libirccd_SOURCE_DIR}/irccd/daemon/server_invite_command.cpp - ${libirccd_SOURCE_DIR}/irccd/daemon/server_join_command.cpp - ${libirccd_SOURCE_DIR}/irccd/daemon/server_kick_command.cpp - ${libirccd_SOURCE_DIR}/irccd/daemon/server_list_command.cpp - ${libirccd_SOURCE_DIR}/irccd/daemon/server_me_command.cpp - ${libirccd_SOURCE_DIR}/irccd/daemon/server_message_command.cpp - ${libirccd_SOURCE_DIR}/irccd/daemon/server_mode_command.cpp - ${libirccd_SOURCE_DIR}/irccd/daemon/server_nick_command.cpp - ${libirccd_SOURCE_DIR}/irccd/daemon/server_notice_command.cpp - ${libirccd_SOURCE_DIR}/irccd/daemon/server_part_command.cpp - ${libirccd_SOURCE_DIR}/irccd/daemon/server_reconnect_command.cpp - ${libirccd_SOURCE_DIR}/irccd/daemon/server_topic_command.cpp ${libirccd_SOURCE_DIR}/irccd/daemon/service/plugin_service.cpp ${libirccd_SOURCE_DIR}/irccd/daemon/service/rule_service.cpp ${libirccd_SOURCE_DIR}/irccd/daemon/service/server_service.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libirccd/irccd/daemon/command/plugin_config_command.cpp Wed Mar 07 21:00:56 2018 +0100 @@ -0,0 +1,91 @@ +/* + * plugin_config_command.cpp -- implementation of plugin-config transport command + * + * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include <irccd/json_util.hpp> + +#include <irccd/daemon/irccd.hpp> +#include <irccd/daemon/transport_client.hpp> + +#include <irccd/daemon/service/plugin_service.hpp> + +#include "plugin_config_command.hpp" + +namespace irccd { + +namespace { + +void exec_set(transport_client& client, plugin& plugin, const nlohmann::json& args) +{ + assert(args.count("value") > 0); + + auto var = args.find("variable"); + auto value = args.find("value"); + + if (var == args.end() || !var->is_string()) + throw irccd_error(irccd_error::error::incomplete_message); + if (value == args.end() || !value->is_string()) + throw irccd_error(irccd_error::error::incomplete_message); + + auto config = plugin.config(); + + config[*var] = *value; + plugin.set_config(config); + client.success("plugin-config"); +} + +void exec_get(transport_client& client, plugin& plugin, const nlohmann::json& args) +{ + auto variables = nlohmann::json::object(); + auto var = args.find("variable"); + + if (var != args.end() && var->is_string()) + variables[var->get<std::string>()] = plugin.config()[*var]; + else + for (const auto& pair : plugin.config()) + variables[pair.first] = pair.second; + + /* + * Don't put all variables into the response, put them into a sub property + * 'variables' instead. + * + * It's easier for the client to iterate over all. + */ + client.send({ + { "command", "plugin-config" }, + { "variables", variables } + }); +} + +} // !namespace + +std::string plugin_config_command::get_name() const noexcept +{ + return "plugin-config"; +} + +void plugin_config_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args) +{ + auto plugin = irccd.plugins().require(json_util::require_identifier(args, "plugin")); + + if (args.count("value") > 0) + exec_set(client, *plugin, args); + else + exec_get(client, *plugin, args); +} + +} // !irccd
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libirccd/irccd/daemon/command/plugin_config_command.hpp Wed Mar 07 21:00:56 2018 +0100 @@ -0,0 +1,53 @@ +/* + * plugin_config_command.hpp -- implementation of plugin-config transport command + * + * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef IRCCD_DAEMON_PLUGIN_CONFIG_COMMAND_HPP +#define IRCCD_DAEMON_PLUGIN_CONFIG_COMMAND_HPP + +/** + * \file plugin_config_command.hpp + * \brief Implementation of plugin-config transport command. + */ + +#include <irccd/daemon/command.hpp> + +namespace irccd { + +/** + * \brief Implementation of plugin-config transport command. + * + * Replies: + * + * - plugin_error::not_found + */ +class plugin_config_command : public command { +public: + /** + * \copydoc command::get_name + */ + std::string get_name() const noexcept override; + + /** + * \copydoc command::exec + */ + void exec(irccd& irccd, transport_client& client, const nlohmann::json& args) override; +}; + +} // !irccd + +#endif // !IRCCD_DAEMON_PLUGIN_CONFIG_COMMAND_HPP
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libirccd/irccd/daemon/command/plugin_info_command.cpp Wed Mar 07 21:00:56 2018 +0100 @@ -0,0 +1,48 @@ +/* + * plugin_info_command.cpp -- implementation of plugin-info transport command + * + * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include <irccd/json_util.hpp> + +#include <irccd/daemon/irccd.hpp> +#include <irccd/daemon/transport_client.hpp> + +#include <irccd/daemon/service/plugin_service.hpp> + +#include "plugin_info_command.hpp" + +namespace irccd { + +std::string plugin_info_command::get_name() const noexcept +{ + return "plugin-info"; +} + +void plugin_info_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args) +{ + auto plugin = irccd.plugins().require(json_util::require_identifier(args, "plugin")); + + client.send({ + { "command", "plugin-info" }, + { "author", plugin->author() }, + { "license", plugin->license() }, + { "summary", plugin->summary() }, + { "version", plugin->version() } + }); +} + +} // !irccd
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libirccd/irccd/daemon/command/plugin_info_command.hpp Wed Mar 07 21:00:56 2018 +0100 @@ -0,0 +1,53 @@ +/* + * plugin_info_command.hpp -- implementation of plugin-info transport command + * + * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef IRCCD_DAEMON_PLUGIN_INFO_COMMAND_HPP +#define IRCCD_DAEMON_PLUGIN_INFO_COMMAND_HPP + +/** + * \file plugin_info_command.hpp + * \brief Implementation of plugin-info transport command. + */ + +#include <irccd/daemon/command.hpp> + +namespace irccd { + +/** + * \brief Implementation of plugin-info transport command. + * + * Replies: + * + * - plugin_error::not_found + */ +class plugin_info_command : public command { +public: + /** + * \copydoc command::get_name + */ + std::string get_name() const noexcept override; + + /** + * \copydoc command::exec + */ + void exec(irccd& irccd, transport_client& client, const nlohmann::json& args) override; +}; + +} // !irccd + +#endif // !IRCCD_DAEMON_PLUGIN_INFO_COMMAND_HPP
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libirccd/irccd/daemon/command/plugin_list_command.cpp Wed Mar 07 21:00:56 2018 +0100 @@ -0,0 +1,46 @@ +/* + * plugin_list_command.cpp -- implementation of plugin-list transport command + * + * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include <irccd/daemon/irccd.hpp> +#include <irccd/daemon/transport_client.hpp> + +#include <irccd/daemon/service/plugin_service.hpp> + +#include "plugin_list_command.hpp" + +namespace irccd { + +std::string plugin_list_command::get_name() const noexcept +{ + return "plugin-list"; +} + +void plugin_list_command::exec(irccd& irccd, transport_client& client, const nlohmann::json&) +{ + auto list = nlohmann::json::array(); + + for (const auto& plugin : irccd.plugins().list()) + list += plugin->name(); + + client.send({ + { "command", "plugin-list" }, + { "list", list } + }); +} + +} // !irccd
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libirccd/irccd/daemon/command/plugin_list_command.hpp Wed Mar 07 21:00:56 2018 +0100 @@ -0,0 +1,49 @@ +/* + * plugin_list_command.hpp -- implementation of plugin-list transport command + * + * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +/** + * \file plugin_list_command.hpp + * \brief Implementation of plugin-list transport command. + */ + +#ifndef IRCCD_DAEMON_PLUGIN_LIST_COMMAND_HPP +#define IRCCD_DAEMON_PLUGIN_LIST_COMMAND_HPP + +#include <irccd/daemon/command.hpp> + +namespace irccd { + +/** + * \brief Implementation of plugin-list transport command. + */ +class plugin_list_command : public command { +public: + /** + * \copydoc command::get_name + */ + std::string get_name() const noexcept override; + + /** + * \copydoc command::exec + */ + void exec(irccd& irccd, transport_client& client, const nlohmann::json& args) override; +}; + +} // !irccd + +#endif // !IRCCD_DAEMON_PLUGIN_LIST_COMMAND_HPP
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libirccd/irccd/daemon/command/plugin_load_command.cpp Wed Mar 07 21:00:56 2018 +0100 @@ -0,0 +1,41 @@ +/* + * plugin_load_command.cpp -- implementation of plugin-load transport command + * + * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include <irccd/json_util.hpp> + +#include <irccd/daemon/irccd.hpp> +#include <irccd/daemon/transport_client.hpp> + +#include <irccd/daemon/service/plugin_service.hpp> + +#include "plugin_load_command.hpp" + +namespace irccd { + +std::string plugin_load_command::get_name() const noexcept +{ + return "plugin-load"; +} + +void plugin_load_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args) +{ + irccd.plugins().load(json_util::require_identifier(args, "plugin")); + client.success("plugin-load"); +} + +} // !irccd
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libirccd/irccd/daemon/command/plugin_load_command.hpp Wed Mar 07 21:00:56 2018 +0100 @@ -0,0 +1,55 @@ +/* + * plugin_load_command.hpp -- implementation of plugin-load transport command + * + * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef IRCCD_DAEMON_PLUGIN_LOAD_COMMAND_HPP +#define IRCCD_DAEMON_PLUGIN_LOAD_COMMAND_HPP + +/** + * \file plugin_load_command.hpp + * \brief Implementation of plugin-load transport command. + */ + +#include <irccd/daemon/command.hpp> + +namespace irccd { + +/** + * \brief Implementation of plugin-load transport command. + * + * Replies: + * + * - plugin_error::already_exists + * - plugin_error::not_found + * - plugin_error::exec_error + */ +class plugin_load_command : public command { +public: + /** + * \copydoc command::get_name + */ + std::string get_name() const noexcept override; + + /** + * \copydoc command::exec + */ + void exec(irccd& irccd, transport_client& client, const nlohmann::json& args) override; +}; + +} // !irccd + +#endif // !IRCCD_DAEMON_PLUGIN_LOAD_COMMAND_HPP
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libirccd/irccd/daemon/command/plugin_reload_command.cpp Wed Mar 07 21:00:56 2018 +0100 @@ -0,0 +1,41 @@ +/* + * plugin_reload_command.cpp -- implementation of plugin-reload transport command + * + * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include <irccd/json_util.hpp> + +#include <irccd/daemon/irccd.hpp> +#include <irccd/daemon/transport_client.hpp> + +#include <irccd/daemon/service/plugin_service.hpp> + +#include "plugin_reload_command.hpp" + +namespace irccd { + +std::string plugin_reload_command::get_name() const noexcept +{ + return "plugin-reload"; +} + +void plugin_reload_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args) +{ + irccd.plugins().reload(json_util::require_identifier(args, "plugin")); + client.success("plugin-reload"); +} + +} // !irccd
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libirccd/irccd/daemon/command/plugin_reload_command.hpp Wed Mar 07 21:00:56 2018 +0100 @@ -0,0 +1,54 @@ +/* + * plugin_reload_command.hpp -- implementation of plugin-reload transport command + * + * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef IRCCD_DAEMON_PLUGIN_RELOAD_COMMAND_HPP +#define IRCCD_DAEMON_PLUGIN_RELOAD_COMMAND_HPP + +/** + * \file plugin_reload_command.hpp + * \brief Implementation of plugin-reload transport command. + */ + +#include <irccd/daemon/command.hpp> + +namespace irccd { + +/** + * \brief Implementation of plugin-reload transport command. + * + * Replies: + * + * - plugin_error::not_found + * - plugin_error::exec_error + */ +class plugin_reload_command : public command { +public: + /** + * \copydoc command::get_name + */ + std::string get_name() const noexcept override; + + /** + * \copydoc command::exec + */ + void exec(irccd& irccd, transport_client& client, const nlohmann::json& args) override; +}; + +} // !irccd + +#endif // !IRCCD_DAEMON_PLUGIN_RELOAD_COMMAND_HPP
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libirccd/irccd/daemon/command/plugin_unload_command.cpp Wed Mar 07 21:00:56 2018 +0100 @@ -0,0 +1,41 @@ +/* + * plugin_unload_command.cpp -- implementation of plugin-unload transport command + * + * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include <irccd/json_util.hpp> + +#include <irccd/daemon/irccd.hpp> +#include <irccd/daemon/transport_client.hpp> + +#include <irccd/daemon/service/plugin_service.hpp> + +#include "plugin_unload_command.hpp" + +namespace irccd { + +std::string plugin_unload_command::get_name() const noexcept +{ + return "plugin-unload"; +} + +void plugin_unload_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args) +{ + irccd.plugins().unload(json_util::require_identifier(args, "plugin")); + client.success("plugin-unload"); +} + +} // !irccd
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libirccd/irccd/daemon/command/plugin_unload_command.hpp Wed Mar 07 21:00:56 2018 +0100 @@ -0,0 +1,54 @@ +/* + * plugin_unload_command.hpp -- implementation of plugin-unload transport command + * + * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef IRCCD_DAEMON_PLUGIN_UNLOAD_COMMAND_HPP +#define IRCCD_DAEMON_PLUGIN_UNLOAD_COMMAND_HPP + +/** + * \file plugin_unload_command.hpp + * \brief Implementation of plugin-unload transport command. + */ + +#include <irccd/daemon/command.hpp> + +namespace irccd { + +/** + * \brief Implementation of plugin-unload transport command. + * + * Replies: + * + * - plugin_error::not_found + * - plugin_error::exec_error + */ +class plugin_unload_command : public command { +public: + /** + * \copydoc command::get_name + */ + std::string get_name() const noexcept override; + + /** + * \copydoc command::exec + */ + void exec(irccd& irccd, transport_client& client, const nlohmann::json& args) override; +}; + +} // !irccd + +#endif // !IRCCD_DAEMON_PLUGIN_UNLOAD_COMMAND_HPP
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libirccd/irccd/daemon/command/rule_add_command.cpp Wed Mar 07 21:00:56 2018 +0100 @@ -0,0 +1,47 @@ +/* + * rule_add_command.cpp -- implementation of rule-add transport command + * + * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include <irccd/json_util.hpp> + +#include <irccd/daemon/irccd.hpp> +#include <irccd/daemon/transport_client.hpp> + +#include <irccd/daemon/service/rule_service.hpp> + +#include "rule_add_command.hpp" + +namespace irccd { + +std::string rule_add_command::get_name() const noexcept +{ + return "rule-add"; +} + +void rule_add_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args) +{ + auto index = json_util::get_uint(args, "index", irccd.rules().length()); + auto rule = rule_service::from_json(args); + + if (index > irccd.rules().length()) + throw rule_error(rule_error::error::invalid_index); + + irccd.rules().insert(rule, index); + client.success("rule-add"); +} + +} // !irccd
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libirccd/irccd/daemon/command/rule_add_command.hpp Wed Mar 07 21:00:56 2018 +0100 @@ -0,0 +1,53 @@ +/* + * rule_add_command.hpp -- implementation of rule-add transport command + * + * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef IRCCD_DAEMON_RULE_ADD_COMMAND_HPP +#define IRCCD_DAEMON_RULE_ADD_COMMAND_HPP + +/** + * \file rule_add_command.hpp + * \brief Implementation of rule-add transport command. + */ + +#include <irccd/daemon/command.hpp> + +namespace irccd { + +/** + * \brief Implementation of rule-add transport command. + * + * Replies: + * + * - rule_error::invalid_action + */ +class rule_add_command : public command { +public: + /** + * \copydoc command::get_name + */ + std::string get_name() const noexcept override; + + /** + * \copydoc command::exec + */ + void exec(irccd& irccd, transport_client& client, const nlohmann::json& args) override; +}; + +} // !irccd + +#endif // !IRCCD_DAEMON_RULE_ADD_COMMAND_HPP
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libirccd/irccd/daemon/command/rule_edit_command.cpp Wed Mar 07 21:00:56 2018 +0100 @@ -0,0 +1,76 @@ +/* + * rule_edit_command.cpp -- implementation of rule-edit transport command + * + * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include <irccd/daemon/irccd.hpp> +#include <irccd/daemon/transport_client.hpp> + +#include <irccd/daemon/service/rule_service.hpp> + +#include "rule_edit_command.hpp" + +using namespace std::string_literals; + +namespace irccd { + +std::string rule_edit_command::get_name() const noexcept +{ + return "rule-edit"; +} + +void rule_edit_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args) +{ + static const auto updateset = [] (auto& set, auto args, const auto& key) { + for (const auto& v : args["remove-"s + key]) { + if (v.is_string()) + set.erase(v.template get<std::string>()); + } + for (const auto& v : args["add-"s + key]) { + if (v.is_string()) + set.insert(v.template get<std::string>()); + } + }; + + // Create a copy to avoid incomplete edition in case of errors. + auto index = irccd.rules().get_index(args); + auto rule = irccd.rules().require(index); + + updateset(rule.get_channels(), args, "channels"); + updateset(rule.get_events(), args, "events"); + updateset(rule.get_plugins(), args, "plugins"); + updateset(rule.get_servers(), args, "servers"); + + auto action = args.find("action"); + + if (action != args.end()) { + if (!action->is_string()) + throw rule_error(rule_error::error::invalid_action); + + if (action->get<std::string>() == "accept") + rule.set_action(rule::action::accept); + else if (action->get<std::string>() == "drop") + rule.set_action(rule::action::drop); + else + throw rule_error(rule_error::invalid_action); + } + + // All done, sync the rule. + irccd.rules().require(index) = rule; + client.success("rule-edit"); +} + +} // !irccd
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libirccd/irccd/daemon/command/rule_edit_command.hpp Wed Mar 07 21:00:56 2018 +0100 @@ -0,0 +1,54 @@ +/* + * rule_edit_command.hpp -- implementation of rule-edit transport command + * + * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef IRCCD_DAEMON_RULE_EDIT_COMMAND_HPP +#define IRCCD_DAEMON_RULE_EDIT_COMMAND_HPP + +/** + * \file rule_edit_command.hpp + * \brief Implementation of rule-edit transport command. + */ + +#include <irccd/daemon/command.hpp> + +namespace irccd { + +/** + * \brief Implementation of rule-edit transport command. + * + * Replies: + * + * - rule_error::invalid_index + * - rule_error::invalid_action + */ +class rule_edit_command : public command { +public: + /** + * \copydoc command::get_name + */ + std::string get_name() const noexcept override; + + /** + * \copydoc command::exec + */ + void exec(irccd& irccd, transport_client& client, const nlohmann::json& args) override; +}; + +} // !irccd + +#endif // !IRCCD_DAEMON_RULE_EDIT_COMMAND_HPP
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libirccd/irccd/daemon/command/rule_info_command.cpp Wed Mar 07 21:00:56 2018 +0100 @@ -0,0 +1,41 @@ +/* + * rule_info_command.cpp -- implementation of rule-info transport command + * + * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include <irccd/daemon/irccd.hpp> +#include <irccd/daemon/transport_client.hpp> + +#include <irccd/daemon/service/rule_service.hpp> + +#include "rule_info_command.hpp" + +namespace irccd { + +std::string rule_info_command::get_name() const noexcept +{ + return "rule-info"; +} + +void rule_info_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args) +{ + auto json = rule_service::to_json(irccd.rules().require(irccd.rules().get_index(args))); + + json.push_back({"command", "rule-info"}); + client.send(std::move(json)); +} + +} // !irccd
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libirccd/irccd/daemon/command/rule_info_command.hpp Wed Mar 07 21:00:56 2018 +0100 @@ -0,0 +1,53 @@ +/* + * rule_info_command.hpp -- implementation of rule-info transport command + * + * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef IRCCD_DAEMON_RULE_INFO_COMMAND_HPP +#define IRCCD_DAEMON_RULE_INFO_COMMAND_HPP + +/** + * \file rule_info_command.hpp + * \brief Implementation of rule-info transport command. + */ + +#include <irccd/daemon/command.hpp> + +namespace irccd { + +/** + * \brief Implementation of rule-info transport command. + * + * Replies: + * + * - rule_error::invalid_index + */ +class rule_info_command : public command { +public: + /** + * \copydoc command::get_name + */ + std::string get_name() const noexcept override; + + /** + * \copydoc command::exec + */ + void exec(irccd& irccd, transport_client& client, const nlohmann::json& args) override; +}; + +} // !irccd + +#endif // !IRCCD_DAEMON_RULE_INFO_COMMAND_HPP
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libirccd/irccd/daemon/command/rule_list_command.cpp Wed Mar 07 21:00:56 2018 +0100 @@ -0,0 +1,46 @@ +/* + * rule_list_command.cpp -- implementation of rule-list transport command + * + * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include <irccd/daemon/irccd.hpp> +#include <irccd/daemon/transport_client.hpp> + +#include <irccd/daemon/service/rule_service.hpp> + +#include "rule_list_command.hpp" + +namespace irccd { + +std::string rule_list_command::get_name() const noexcept +{ + return "rule-list"; +} + +void rule_list_command::exec(irccd& irccd, transport_client& client, const nlohmann::json&) +{ + auto array = nlohmann::json::array(); + + for (const auto& rule : irccd.rules().list()) + array.push_back(rule_service::to_json(rule)); + + client.send({ + { "command", "rule-list" }, + { "list", std::move(array) } + }); +} + +} // !irccd
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libirccd/irccd/daemon/command/rule_list_command.hpp Wed Mar 07 21:00:56 2018 +0100 @@ -0,0 +1,49 @@ +/* + * rule_list_command.hpp -- implementation of rule-list transport command + * + * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef IRCCD_DAEMON_RULE_LIST_COMMAND_HPP +#define IRCCD_DAEMON_RULE_LIST_COMMAND_HPP + +/** + * \file rule_list_command.hpp + * \brief Implementation of rule-list transport command. + */ + +#include <irccd/daemon/command.hpp> + +namespace irccd { + +/** + * \brief Implementation of rule-list transport command. + */ +class rule_list_command : public command { +public: + /** + * \copydoc command::get_name + */ + std::string get_name() const noexcept override; + + /** + * \copydoc command::exec + */ + void exec(irccd& irccd, transport_client& client, const nlohmann::json& args) override; +}; + +} // !irccd + +#endif // !IRCCD_DAEMON_RULE_ADD_COMMAND_HPP
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libirccd/irccd/daemon/command/rule_move_command.cpp Wed Mar 07 21:00:56 2018 +0100 @@ -0,0 +1,84 @@ +/* + * rule_move_command.cpp -- implementation of rule-move transport command + * + * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include <irccd/daemon/irccd.hpp> +#include <irccd/daemon/transport_client.hpp> + +#include <irccd/daemon/service/rule_service.hpp> + +#include "rule_move_command.hpp" + +namespace irccd { + +std::string rule_move_command::get_name() const noexcept +{ + return "rule-move"; +} + +void rule_move_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args) +{ + auto from = rule_service::get_index(args, "from"); + auto to = rule_service::get_index(args, "to"); + + /* + * Examples of moves + * -------------------------------------------------------------- + * + * Before: [0] [1] [2] + * + * from = 0 + * to = 2 + * + * After: [1] [2] [0] + * + * -------------------------------------------------------------- + * + * Before: [0] [1] [2] + * + * from = 2 + * to = 0 + * + * After: [2] [0] [1] + * + * -------------------------------------------------------------- + * + * Before: [0] [1] [2] + * + * from = 0 + * to = 123 + * + * After: [1] [2] [0] + */ + + // Ignore dumb input. + if (from == to) { + client.success("rule-move"); + return; + } + + if (from >= irccd.rules().length()) + throw rule_error(rule_error::error::invalid_index); + + auto save = irccd.rules().list()[from]; + + irccd.rules().remove(from); + irccd.rules().insert(save, to > irccd.rules().length() ? irccd.rules().length() : to); + client.success("rule-move"); +} + +} // !irccd
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libirccd/irccd/daemon/command/rule_move_command.hpp Wed Mar 07 21:00:56 2018 +0100 @@ -0,0 +1,53 @@ +/* + * rule_move_command.hpp -- implementation of rule-move transport command + * + * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef IRCCD_DAEMON_RULE_MOVE_COMMAND_HPP +#define IRCCD_DAEMON_RULE_MOVE_COMMAND_HPP + +/** + * \file rule_move_command.hpp + * \brief Implementation of rule-move transport command. + */ + +#include <irccd/daemon/command.hpp> + +namespace irccd { + +/** + * \brief Implementation of rule-move transport command. + * + * Replies: + * + * - rule_error::invalid_index + */ +class rule_move_command : public command { +public: + /** + * \copydoc command::get_name + */ + std::string get_name() const noexcept override; + + /** + * \copydoc command::exec + */ + void exec(irccd& irccd, transport_client& client, const nlohmann::json& args) override; +}; + +} // !irccd + +#endif // !IRCCD_DAEMON_RULE_MOVE_COMMAND_HPP
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libirccd/irccd/daemon/command/rule_remove_command.cpp Wed Mar 07 21:00:56 2018 +0100 @@ -0,0 +1,44 @@ +/* + * rule_remove_command.cpp -- implementation of rule-remove transport command + * + * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include <irccd/daemon/irccd.hpp> +#include <irccd/daemon/transport_client.hpp> + +#include <irccd/daemon/service/rule_service.hpp> + +#include "rule_remove_command.hpp" + +namespace irccd { + +std::string rule_remove_command::get_name() const noexcept +{ + return "rule-remove"; +} + +void rule_remove_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args) +{ + auto index = rule_service::get_index(args); + + if (index >= irccd.rules().length()) + throw rule_error(rule_error::invalid_index); + + irccd.rules().remove(index); + client.success("rule-remove"); +} + +} // !irccd
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libirccd/irccd/daemon/command/rule_remove_command.hpp Wed Mar 07 21:00:56 2018 +0100 @@ -0,0 +1,53 @@ +/* + * rule_remove_command.hpp -- implementation of rule-remove transport command + * + * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef IRCCD_DAEMON_RULE_REMOVE_COMMAND_HPP +#define IRCCD_DAEMON_RULE_REMOVE_COMMAND_HPP + +/** + * \file rule_remove_command.hpp + * \brief Implementation of rule-remove transport command. + */ + +#include <irccd/daemon/command.hpp> + +namespace irccd { + +/** + * \brief Implementation of rule-remove transport command. + * + * Replies: + * + * - rule_error::invalid_index + */ +class rule_remove_command : public command { +public: + /** + * \copydoc command::get_name + */ + std::string get_name() const noexcept override; + + /** + * \copydoc command::exec + */ + void exec(irccd& irccd, transport_client& client, const nlohmann::json& args) override; +}; + +} // !irccd + +#endif // !IRCCD_DAEMON_RULE_REMOVE_COMMAND_HPP
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libirccd/irccd/daemon/command/server_connect_command.cpp Wed Mar 07 21:00:56 2018 +0100 @@ -0,0 +1,44 @@ +/* + * server_connect_command.cpp -- implementation of server-connect transport command + * + * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include <irccd/daemon/irccd.hpp> +#include <irccd/daemon/transport_client.hpp> + +#include <irccd/daemon/service/server_service.hpp> + +#include "server_connect_command.hpp" + +namespace irccd { + +std::string server_connect_command::get_name() const noexcept +{ + return "server-connect"; +} + +void server_connect_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args) +{ + auto server = server_service::from_json(irccd.service(), args); + + if (irccd.servers().has(server->name())) + throw server_error(server_error::error::already_exists, server->name()); + + irccd.servers().add(std::move(server)); + client.success("server-connect"); +} + +} // !irccd
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libirccd/irccd/daemon/command/server_connect_command.hpp Wed Mar 07 21:00:56 2018 +0100 @@ -0,0 +1,57 @@ +/* + * server_connect_command.hpp -- implementation of server-connect transport command + * + * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef IRCCD_DAEMON_SERVER_CONNECT_COMMAND_HPP +#define IRCCD_DAEMON_SERVER_CONNECT_COMMAND_HPP + +/** + * \file server_connect_command.hpp + * \brief Implementation of server-connect transport command. + */ + +#include <irccd/daemon/command.hpp> + +namespace irccd { + +/** + * \brief Implementation of server-connect transport command. + * + * Replies: + * + * - server_error::already_exists, + * - server_error::invalid_hostname, + * - server_error::invalid_identifier, + * - server_error::invalid_port_number, + * - server_error::ssl_disabled. + */ +class server_connect_command : public command { +public: + /** + * \copydoc command::get_name + */ + std::string get_name() const noexcept override; + + /** + * \copydoc command::exec + */ + void exec(irccd& irccd, transport_client& client, const nlohmann::json& args) override; +}; + +} // !irccd + +#endif // !IRCCD_DAEMON_SERVER_CONNECT_COMMAND_HPP
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libirccd/irccd/daemon/command/server_disconnect_command.cpp Wed Mar 07 21:00:56 2018 +0100 @@ -0,0 +1,55 @@ +/* + * server_disconnect_command.cpp -- implementation of server-disconnect transport command + * + * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include <irccd/daemon/irccd.hpp> +#include <irccd/daemon/transport_client.hpp> + +#include <irccd/daemon/service/server_service.hpp> + +#include "server_disconnect_command.hpp" + +namespace irccd { + +std::string server_disconnect_command::get_name() const noexcept +{ + return "server-disconnect"; +} + +void server_disconnect_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args) +{ + auto it = args.find("server"); + + if (it == args.end()) + irccd.servers().clear(); + else { + if (!it->is_string()) + throw server_error(server_error::invalid_identifier, ""); + + auto name = it->get<std::string>(); + auto s = irccd.servers().get(name); + + if (!s) + throw server_error(server_error::not_found, name); + + irccd.servers().remove(name); + } + + client.success("server-disconnect"); +} + +} // !irccd
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libirccd/irccd/daemon/command/server_disconnect_command.hpp Wed Mar 07 21:00:56 2018 +0100 @@ -0,0 +1,54 @@ +/* + * server_disconnect_command.hpp -- implementation of server-disconnect transport command + * + * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef IRCCD_DAEMON_SERVER_DISCONNECT_COMMAND_HPP +#define IRCCD_DAEMON_SERVER_DISCONNECT_COMMAND_HPP + +/** + * \file server_disconnect_command.hpp + * \brief Implementation of server-disconnect transport command. + */ + +#include <irccd/daemon/command.hpp> + +namespace irccd { + +/** + * \brief Implementation of server-disconnect transport command. + * + * Replies: + * + * - server_error::invalid_identifier, + * - server_error::not_found. + */ +class server_disconnect_command : public command { +public: + /** + * \copydoc command::get_name + */ + std::string get_name() const noexcept override; + + /** + * \copydoc command::exec + */ + void exec(irccd& irccd, transport_client& client, const nlohmann::json& args) override; +}; + +} // !irccd + +#endif // !IRCCD_DAEMON_SERVER_DISCONNECT_COMMAND_HPP
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libirccd/irccd/daemon/command/server_info_command.cpp Wed Mar 07 21:00:56 2018 +0100 @@ -0,0 +1,59 @@ +/* + * server_info_command.cpp -- implementation of server-info transport command + * + * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include <irccd/daemon/irccd.hpp> +#include <irccd/daemon/transport_client.hpp> + +#include <irccd/daemon/service/server_service.hpp> + +#include "server_info_command.hpp" + +namespace irccd { + +std::string server_info_command::get_name() const noexcept +{ + return "server-info"; +} + +void server_info_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args) +{ + auto response = nlohmann::json::object(); + auto server = irccd.servers().require(args); + + // General stuff. + response.push_back({"command", "server-info"}); + response.push_back({"name", server->name()}); + response.push_back({"host", server->host()}); + response.push_back({"port", server->port()}); + response.push_back({"nickname", server->nickname()}); + response.push_back({"username", server->username()}); + response.push_back({"realname", server->realname()}); + response.push_back({"channels", server->channels()}); + + // Optional stuff. + if (server->flags() & server::ipv6) + response.push_back({"ipv6", true}); + if (server->flags() & server::ssl) + response.push_back({"ssl", true}); + if (server->flags() & server::ssl_verify) + response.push_back({"sslVerify", true}); + + client.send(response); +} + +} // !irccd
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libirccd/irccd/daemon/command/server_info_command.hpp Wed Mar 07 21:00:56 2018 +0100 @@ -0,0 +1,54 @@ +/* + * server_info_command.hpp -- implementation of server-info transport command + * + * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef IRCCD_DAEMON_SERVER_INFO_COMMAND_HPP +#define IRCCD_DAEMON_SERVER_INFO_COMMAND_HPP + +/** + * \file server_info_command.hpp + * \brief Implementation of server-info transport command. + */ + +#include <irccd/daemon/command.hpp> + +namespace irccd { + +/** + * \brief Implementation of server-info transport command. + * + * Replies: + * + * - server_error::invalid_identifier, + * - server_error::not_found. + */ +class server_info_command : public command { +public: + /** + * \copydoc command::get_name + */ + std::string get_name() const noexcept override; + + /** + * \copydoc command::exec + */ + void exec(irccd& irccd, transport_client& client, const nlohmann::json& args) override; +}; + +} // !irccd + +#endif // !IRCCD_DAEMON_SERVER_INFO_COMMAND_HPP
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libirccd/irccd/daemon/command/server_invite_command.cpp Wed Mar 07 21:00:56 2018 +0100 @@ -0,0 +1,50 @@ +/* + * server_invite_command.cpp -- implementation of server-invite transport command + * + * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include <irccd/json_util.hpp> + +#include <irccd/daemon/irccd.hpp> +#include <irccd/daemon/transport_client.hpp> + +#include <irccd/daemon/service/server_service.hpp> + +#include "server_invite_command.hpp" + +namespace irccd { + +std::string server_invite_command::get_name() const noexcept +{ + return "server-invite"; +} + +void server_invite_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args) +{ + auto server = irccd.servers().require(args); + auto target = json_util::get_string(args, "target"); + auto channel = json_util::get_string(args, "channel"); + + if (target.empty()) + throw server_error(server_error::invalid_nickname, server->name()); + if (channel.empty()) + throw server_error(server_error::invalid_channel, server->name()); + + server->invite(target, channel); + client.success("server-invite"); +} + +} // !irccd
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libirccd/irccd/daemon/command/server_invite_command.hpp Wed Mar 07 21:00:56 2018 +0100 @@ -0,0 +1,56 @@ +/* + * server_invite_command.hpp -- implementation of server-invite transport command + * + * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef IRCCD_DAEMON_SERVER_INVITE_COMMAND_HPP +#define IRCCD_DAEMON_SERVER_INVITE_COMMAND_HPP + +/** + * \file server_invite_command.hpp + * \brief Implementation of server-invite transport command. + */ + +#include <irccd/daemon/command.hpp> + +namespace irccd { + +/** + * \brief Implementation of server-invite transport command. + * + * Replies: + * + * - server_error::invalid_channel, + * - server_error::invalid_identifier, + * - server_error::invalid_nickname, + * - server_error::not_found. + */ +class server_invite_command : public command { +public: + /** + * \copydoc command::get_name + */ + std::string get_name() const noexcept override; + + /** + * \copydoc command::exec + */ + void exec(irccd& irccd, transport_client& client, const nlohmann::json& args) override; +}; + +} // !irccd + +#endif // !IRCCD_DAEMON_SERVER_INVITE_COMMAND_HPP
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libirccd/irccd/daemon/command/server_join_command.cpp Wed Mar 07 21:00:56 2018 +0100 @@ -0,0 +1,48 @@ +/* + * server_join_command.cpp -- implementation of server-join transport command + * + * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include <irccd/json_util.hpp> + +#include <irccd/daemon/irccd.hpp> +#include <irccd/daemon/transport_client.hpp> + +#include <irccd/daemon/service/server_service.hpp> + +#include "server_join_command.hpp" + +namespace irccd { + +std::string server_join_command::get_name() const noexcept +{ + return "server-join"; +} + +void server_join_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args) +{ + auto server = irccd.servers().require(args); + auto channel = json_util::get_string(args, "channel"); + auto password = json_util::get_string(args, "password"); + + if (channel.empty()) + throw server_error(server_error::invalid_channel, server->name()); + + server->join(channel, password); + client.success("server-join"); +} + +} // !irccd
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libirccd/irccd/daemon/command/server_join_command.hpp Wed Mar 07 21:00:56 2018 +0100 @@ -0,0 +1,55 @@ +/* + * server_join_command.hpp -- implementation of server-join transport command + * + * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef IRCCD_DAEMON_SERVER_JOIN_COMMAND_HPP +#define IRCCD_DAEMON_SERVER_JOIN_COMMAND_HPP + +/** + * \file server_join_command.hpp + * \brief Implementation of server-join transport command. + */ + +#include <irccd/daemon/command.hpp> + +namespace irccd { + +/** + * \brief Implementation of server-join transport command. + * + * Replies: + * + * - server_error::invalid_channel, + * - server_error::invalid_identifier, + * - server_error::not_found. + */ +class server_join_command : public command { +public: + /** + * \copydoc command::get_name + */ + std::string get_name() const noexcept override; + + /** + * \copydoc command::exec + */ + void exec(irccd& irccd, transport_client& client, const nlohmann::json& args) override; +}; + +} // !irccd + +#endif // !IRCCD_DAEMON_SERVER_JOIN_COMMAND_HPP
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libirccd/irccd/daemon/command/server_kick_command.cpp Wed Mar 07 21:00:56 2018 +0100 @@ -0,0 +1,51 @@ +/* + * server_kick_command.cpp -- implementation of server-kick transport command + * + * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include <irccd/json_util.hpp> + +#include <irccd/daemon/irccd.hpp> +#include <irccd/daemon/transport_client.hpp> + +#include <irccd/daemon/service/server_service.hpp> + +#include "server_kick_command.hpp" + +namespace irccd { + +std::string server_kick_command::get_name() const noexcept +{ + return "server-kick"; +} + +void server_kick_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args) +{ + auto server = irccd.servers().require(args); + auto target = json_util::get_string(args, "target"); + auto channel = json_util::get_string(args, "channel"); + auto reason = json_util::get_string(args, "reason"); + + if (target.empty()) + throw server_error(server_error::invalid_nickname, server->name()); + if (channel.empty()) + throw server_error(server_error::invalid_channel, server->name()); + + server->kick(target, channel, reason); + client.success("server-kick"); +} + +} // !irccd
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libirccd/irccd/daemon/command/server_kick_command.hpp Wed Mar 07 21:00:56 2018 +0100 @@ -0,0 +1,56 @@ +/* + * server_kick_command.hpp -- implementation of server-kick transport command + * + * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef IRCCD_DAEMON_SERVER_KICK_COMMAND_HPP +#define IRCCD_DAEMON_SERVER_KICK_COMMAND_HPP + +/** + * \file server_kick_command.hpp + * \brief Implementation of server-kick transport command. + */ + +#include <irccd/daemon/command.hpp> + +namespace irccd { + +/** + * \brief Implementation of server-kick transport command. + * + * Replies: + * + * - server_error::invalid_channel, + * - server_error::invalid_identifier, + * - server_error::invalid_nickname, + * - server_error::not_found. + */ +class server_kick_command : public command { +public: + /** + * \copydoc command::get_name + */ + std::string get_name() const noexcept override; + + /** + * \copydoc command::exec + */ + void exec(irccd& irccd, transport_client& client, const nlohmann::json& args) override; +}; + +} // !irccd + +#endif // !IRCCD_DAEMON_SERVER_KICK_COMMAND_HPP
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libirccd/irccd/daemon/command/server_list_command.cpp Wed Mar 07 21:00:56 2018 +0100 @@ -0,0 +1,47 @@ +/* + * server_list_command.cpp -- implementation of server-list transport command + * + * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include <irccd/daemon/irccd.hpp> +#include <irccd/daemon/transport_client.hpp> + +#include <irccd/daemon/service/server_service.hpp> + +#include "server_list_command.hpp" + +namespace irccd { + +std::string server_list_command::get_name() const noexcept +{ + return "server-list"; +} + +void server_list_command::exec(irccd& irccd, transport_client& client, const nlohmann::json&) +{ + auto json = nlohmann::json::object(); + auto list = nlohmann::json::array(); + + for (const auto& server : irccd.servers().servers()) + list.push_back(server->name()); + + client.send({ + { "command", "server-list" }, + { "list", std::move(list) } + }); +} + +} // !irccd
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libirccd/irccd/daemon/command/server_list_command.hpp Wed Mar 07 21:00:56 2018 +0100 @@ -0,0 +1,49 @@ +/* + * server_list_command.hpp -- implementation of server-list transport command + * + * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef IRCCD_DAEMON_SERVER_LIST_COMMAND_HPP +#define IRCCD_DAEMON_SERVER_LIST_COMMAND_HPP + +/** + * \file server_list_command.hpp + * \brief Implementation of server-list transport command. + */ + +#include <irccd/daemon/command.hpp> + +namespace irccd { + +/** + * \brief Implementation of server-list transport command. + */ +class server_list_command : public command { +public: + /** + * \copydoc command::get_name + */ + std::string get_name() const noexcept override; + + /** + * \copydoc command::exec + */ + void exec(irccd& irccd, transport_client& client, const nlohmann::json& args) override; +}; + +} // !irccd + +#endif // !IRCCD_DAEMON_SERVER_LIST_COMMAND_HPP
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libirccd/irccd/daemon/command/server_me_command.cpp Wed Mar 07 21:00:56 2018 +0100 @@ -0,0 +1,48 @@ +/* + * server_me_command.cpp -- implementation of server-me transport command + * + * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include <irccd/json_util.hpp> + +#include <irccd/daemon/irccd.hpp> +#include <irccd/daemon/transport_client.hpp> + +#include <irccd/daemon/service/server_service.hpp> + +#include "server_me_command.hpp" + +namespace irccd { + +std::string server_me_command::get_name() const noexcept +{ + return "server-me"; +} + +void server_me_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args) +{ + auto server = irccd.servers().require(args); + auto channel = json_util::get_string(args, "target"); + auto message = json_util::get_string(args, "message"); + + if (channel.empty()) + throw server_error(server_error::invalid_channel, server->name()); + + server->me(channel, message); + client.success("server-me"); +} + +} // !irccd
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libirccd/irccd/daemon/command/server_me_command.hpp Wed Mar 07 21:00:56 2018 +0100 @@ -0,0 +1,55 @@ +/* + * server_me_command.hpp -- implementation of server-me transport command + * + * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef IRCCD_DAEMON_SERVER_ME_COMMAND_HPP +#define IRCCD_DAEMON_SERVER_ME_COMMAND_HPP + +/** + * \file server_me_command.hpp + * \brief Implementation of server-me transport command. + */ + +#include <irccd/daemon/command.hpp> + +namespace irccd { + +/** + * \brief Implementation of server-me transport command. + * + * Replies: + * + * - server_error::invalid_channel, + * - server_error::invalid_identifier, + * - server_error::not_found. + */ +class server_me_command : public command { +public: + /** + * \copydoc command::get_name + */ + std::string get_name() const noexcept override; + + /** + * \copydoc command::exec + */ + void exec(irccd& irccd, transport_client& client, const nlohmann::json& args) override; +}; + +} // !irccd + +#endif // !IRCCD_DAEMON_SERVER_ME_COMMAND_HPP
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libirccd/irccd/daemon/command/server_message_command.cpp Wed Mar 07 21:00:56 2018 +0100 @@ -0,0 +1,48 @@ +/* + * server_message_command.cpp -- implementation of server-message transport command + * + * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include <irccd/json_util.hpp> + +#include <irccd/daemon/irccd.hpp> +#include <irccd/daemon/transport_client.hpp> + +#include <irccd/daemon/service/server_service.hpp> + +#include "server_message_command.hpp" + +namespace irccd { + +std::string server_message_command::get_name() const noexcept +{ + return "server-message"; +} + +void server_message_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args) +{ + auto server = irccd.servers().require(args); + auto channel = json_util::get_string(args, "target"); + auto message = json_util::get_string(args, "message"); + + if (channel.empty()) + throw server_error(server_error::invalid_channel, server->name()); + + server->message(channel, message); + client.success("server-message"); +} + +} // !irccd
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libirccd/irccd/daemon/command/server_message_command.hpp Wed Mar 07 21:00:56 2018 +0100 @@ -0,0 +1,55 @@ +/* + * server_message_command.hpp -- implementation of server-message transport command + * + * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef IRCCD_DAEMON_SERVER_MESSAGE_COMMAND_HPP +#define IRCCD_DAEMON_SERVER_MESSAGE_COMMAND_HPP + +/** + * \file server_message_command.hpp + * \brief Implementation of server-message transport command. + */ + +#include <irccd/daemon/command.hpp> + +namespace irccd { + +/** + * \brief Implementation of server-message transport command. + * + * Replies: + * + * - server_error::invalid_channel, + * - server_error::invalid_identifier, + * - server_error::not_found. + */ +class server_message_command : public command { +public: + /** + * \copydoc command::get_name + */ + std::string get_name() const noexcept override; + + /** + * \copydoc command::exec + */ + void exec(irccd& irccd, transport_client& client, const nlohmann::json& args) override; +}; + +} // !irccd + +#endif // !IRCCD_DAEMON_SERVER_MESSAGE_COMMAND_HPP
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libirccd/irccd/daemon/command/server_mode_command.cpp Wed Mar 07 21:00:56 2018 +0100 @@ -0,0 +1,54 @@ +/* + * server_mode_command.cpp -- implementation of server-mode transport command + * + * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include <irccd/json_util.hpp> + +#include <irccd/daemon/irccd.hpp> +#include <irccd/daemon/transport_client.hpp> + +#include <irccd/daemon/service/server_service.hpp> + +#include "server_mode_command.hpp" + +namespace irccd { + +std::string server_mode_command::get_name() const noexcept +{ + return "server-mode"; +} + +void server_mode_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args) +{ + auto server = irccd.servers().require(args); + auto channel = json_util::get_string(args, "channel"); + auto mode = json_util::get_string(args, "mode"); + + if (channel.empty()) + throw server_error(server_error::invalid_channel, server->name()); + if (mode.empty()) + throw server_error(server_error::invalid_mode, server->name()); + + auto limit = json_util::get_string(args, "limit"); + auto user = json_util::get_string(args, "user"); + auto mask = json_util::get_string(args, "mask"); + + server->mode(channel, mode, limit, user, mask); + client.success("server-mode"); +} + +} // !irccd
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libirccd/irccd/daemon/command/server_mode_command.hpp Wed Mar 07 21:00:56 2018 +0100 @@ -0,0 +1,56 @@ +/* + * server_mode_command.hpp -- implementation of server-mode transport command + * + * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef IRCCD_DAEMON_SERVER_MODE_COMMAND_HPP +#define IRCCD_DAEMON_SERVER_MODE_COMMAND_HPP + +/** + * \file server_mode_command.hpp + * \brief Implementation of server-mode transport command. + */ + +#include <irccd/daemon/command.hpp> + +namespace irccd { + +/** + * \brief Implementation of server-mode transport command. + * + * Replies: + * + * - server_error::invalid_channel, + * - server_error::invalid_identifier, + * - server_error::invalid_mode, + * - server_error::not_found. + */ +class server_mode_command : public command { +public: + /** + * \copydoc command::get_name + */ + std::string get_name() const noexcept override; + + /** + * \copydoc command::exec + */ + void exec(irccd& irccd, transport_client& client, const nlohmann::json& args) override; +}; + +} // !irccd + +#endif // !IRCCD_DAEMON_SERVER_MODE_COMMAND_HPP
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libirccd/irccd/daemon/command/server_nick_command.cpp Wed Mar 07 21:00:56 2018 +0100 @@ -0,0 +1,47 @@ +/* + * server_nick_command.cpp -- implementation of server-nick transport command + * + * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include <irccd/json_util.hpp> + +#include <irccd/daemon/irccd.hpp> +#include <irccd/daemon/transport_client.hpp> + +#include <irccd/daemon/service/server_service.hpp> + +#include "server_nick_command.hpp" + +namespace irccd { + +std::string server_nick_command::get_name() const noexcept +{ + return "server-nick"; +} + +void server_nick_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args) +{ + auto server = irccd.servers().require(args); + auto nick = json_util::get_string(args, "nickname"); + + if (nick.empty()) + throw server_error(server_error::invalid_nickname, server->name()); + + server->set_nickname(nick); + client.success("server-nick"); +} + +} // !irccd
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libirccd/irccd/daemon/command/server_nick_command.hpp Wed Mar 07 21:00:56 2018 +0100 @@ -0,0 +1,55 @@ +/* + * server_nick_command.hpp -- implementation of server-nick transport command + * + * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef IRCCD_DAEMON_SERVER_NICK_COMMAND_HPP +#define IRCCD_DAEMON_SERVER_NICK_COMMAND_HPP + +/** + * \file server_nick_command.hpp + * \brief Implementation of server-nick transport command. + */ + +#include <irccd/daemon/command.hpp> + +namespace irccd { + +/** + * \brief Implementation of server-nick transport command. + * + * Replies: + * + * - server_error::invalid_identifier, + * - server_error::invalid_nickname, + * - server_error::not_found. + */ +class server_nick_command : public command { +public: + /** + * \copydoc command::get_name + */ + std::string get_name() const noexcept override; + + /** + * \copydoc command::exec + */ + void exec(irccd& irccd, transport_client& client, const nlohmann::json& args) override; +}; + +} // !irccd + +#endif // !IRCCD_DAEMON_SERVER_NICK_COMMAND_HPP
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libirccd/irccd/daemon/command/server_notice_command.cpp Wed Mar 07 21:00:56 2018 +0100 @@ -0,0 +1,48 @@ +/* + * server_notice_command.cpp -- implementation of server-notice transport command + * + * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include <irccd/json_util.hpp> + +#include <irccd/daemon/irccd.hpp> +#include <irccd/daemon/transport_client.hpp> + +#include <irccd/daemon/service/server_service.hpp> + +#include "server_notice_command.hpp" + +namespace irccd { + +std::string server_notice_command::get_name() const noexcept +{ + return "server-notice"; +} + +void server_notice_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args) +{ + auto server = irccd.servers().require(args); + auto channel = json_util::get_string(args, "target"); + auto message = json_util::get_string(args, "message"); + + if (channel.empty()) + throw server_error(server_error::invalid_channel, server->name()); + + server->notice(channel, message); + client.success("server-notice"); +} + +} // !irccd
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libirccd/irccd/daemon/command/server_notice_command.hpp Wed Mar 07 21:00:56 2018 +0100 @@ -0,0 +1,55 @@ +/* + * server_notice_command.hpp -- implementation of server-notice transport command + * + * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef IRCCD_DAEMON_SERVER_NOTICE_COMMAND_HPP +#define IRCCD_DAEMON_SERVER_NOTICE_COMMAND_HPP + +/** + * \file server_notice_command.hpp + * \brief Implementation of server-notice transport command. + */ + +#include <irccd/daemon/command.hpp> + +namespace irccd { + +/** + * \brief Implementation of server-notice transport command. + * + * Replies: + * + * - server_error::invalid_channel, + * - server_error::invalid_identifier, + * - server_error::not_found. + */ +class server_notice_command : public command { +public: + /** + * \copydoc command::get_name + */ + std::string get_name() const noexcept override; + + /** + * \copydoc command::exec + */ + void exec(irccd& irccd, transport_client& client, const nlohmann::json& args) override; +}; + +} // !irccd + +#endif // !IRCCD_DAEMON_SERVER_NOTICE_COMMAND_HPP
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libirccd/irccd/daemon/command/server_part_command.cpp Wed Mar 07 21:00:56 2018 +0100 @@ -0,0 +1,48 @@ +/* + * server_part_command.cpp -- implementation of server-part transport command + * + * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include <irccd/json_util.hpp> + +#include <irccd/daemon/irccd.hpp> +#include <irccd/daemon/transport_client.hpp> + +#include <irccd/daemon/service/server_service.hpp> + +#include "server_part_command.hpp" + +namespace irccd { + +std::string server_part_command::get_name() const noexcept +{ + return "server-part"; +} + +void server_part_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args) +{ + auto server = irccd.servers().require(args); + auto channel = json_util::get_string(args, "channel"); + auto reason = json_util::get_string(args, "reason"); + + if (channel.empty()) + throw server_error(server_error::invalid_channel, server->name()); + + server->part(channel, reason); + client.success("server-part"); +} + +} // !irccd
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libirccd/irccd/daemon/command/server_part_command.hpp Wed Mar 07 21:00:56 2018 +0100 @@ -0,0 +1,55 @@ +/* + * server_part_command.hpp -- implementation of server-part transport command + * + * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef IRCCD_DAEMON_SERVER_PART_COMMAND_HPP +#define IRCCD_DAEMON_SERVER_PART_COMMAND_HPP + +/** + * \file server_part_command.hpp + * \brief Implementation of server-part transport command. + */ + +#include <irccd/daemon/command.hpp> + +namespace irccd { + +/** + * \brief Implementation of server-part transport command. + * + * Replies: + * + * - server_error::invalid_channel, + * - server_error::invalid_identifier, + * - server_error::not_found. + */ +class server_part_command : public command { +public: + /** + * \copydoc command::get_name + */ + std::string get_name() const noexcept override; + + /** + * \copydoc command::exec + */ + void exec(irccd& irccd, transport_client& client, const nlohmann::json& args) override; +}; + +} // !irccd + +#endif // !IRCCD_DAEMON_SERVER_PART_COMMAND_HPP
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libirccd/irccd/daemon/command/server_reconnect_command.cpp Wed Mar 07 21:00:56 2018 +0100 @@ -0,0 +1,58 @@ +/* + * server_reconnect_command.cpp -- implementation of server-reconnect transport command + * + * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include <irccd/string_util.hpp> + +#include <irccd/daemon/irccd.hpp> +#include <irccd/daemon/transport_client.hpp> + +#include <irccd/daemon/service/server_service.hpp> + +#include "server_reconnect_command.hpp" + +namespace irccd { + +std::string server_reconnect_command::get_name() const noexcept +{ + return "server-reconnect"; +} + +void server_reconnect_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args) +{ + auto server = args.find("server"); + + if (server == args.end()) { + for (auto& server : irccd.servers().servers()) + server->reconnect(); + } else { + if (!server->is_string() || !string_util::is_identifier(server->get<std::string>())) + throw server_error(server_error::invalid_identifier, ""); + + auto name = server->get<std::string>(); + auto s = irccd.servers().get(name); + + if (!s) + throw server_error(server_error::not_found, name); + + s->reconnect(); + } + + client.success("server-reconnect"); +} + +} // !irccd
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libirccd/irccd/daemon/command/server_reconnect_command.hpp Wed Mar 07 21:00:56 2018 +0100 @@ -0,0 +1,54 @@ +/* + * server_reconnect_command.hpp -- implementation of server-reconnect transport command + * + * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef IRCCD_DAEMON_SERVER_RECONNECT_COMMAND_HPP +#define IRCCD_DAEMON_SERVER_RECONNECT_COMMAND_HPP + +/** + * \file server_reconnect_command.hpp + * \brief Implementation of server-reconnect transport command. + */ + +#include <irccd/daemon/command.hpp> + +namespace irccd { + +/** + * \brief Implementation of server-reconnect transport command. + * + * Replies: + * + * - server_error::invalid_identifier, + * - server_error::not_found. + */ +class server_reconnect_command : public command { +public: + /** + * \copydoc command::get_name + */ + std::string get_name() const noexcept override; + + /** + * \copydoc command::exec + */ + void exec(irccd& irccd, transport_client& client, const nlohmann::json& args) override; +}; + +} // !irccd + +#endif // !IRCCD_DAEMON_SERVER_RECONNECT_COMMAND_HPP
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libirccd/irccd/daemon/command/server_topic_command.cpp Wed Mar 07 21:00:56 2018 +0100 @@ -0,0 +1,48 @@ +/* + * server_topic_command.cpp -- implementation of server-topic transport command + * + * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include <irccd/json_util.hpp> + +#include <irccd/daemon/irccd.hpp> +#include <irccd/daemon/transport_client.hpp> + +#include <irccd/daemon/service/server_service.hpp> + +#include "server_topic_command.hpp" + +namespace irccd { + +std::string server_topic_command::get_name() const noexcept +{ + return "server-topic"; +} + +void server_topic_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args) +{ + auto server = irccd.servers().require(args); + auto channel = json_util::get_string(args, "channel"); + auto topic = json_util::get_string(args, "topic"); + + if (channel.empty()) + throw server_error(server_error::invalid_channel, server->name()); + + server->topic(channel, topic); + client.success("server-topic"); +} + +} // !irccd
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libirccd/irccd/daemon/command/server_topic_command.hpp Wed Mar 07 21:00:56 2018 +0100 @@ -0,0 +1,55 @@ +/* + * server_topic_command.hpp -- implementation of server-topic transport command + * + * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef IRCCD_DAEMON_SERVER_TOPIC_COMMAND_HPP +#define IRCCD_DAEMON_SERVER_TOPIC_COMMAND_HPP + +/** + * \file server_topic_command.hpp + * \brief Implementation of server-topic transport command. + */ + +#include <irccd/daemon/command.hpp> + +namespace irccd { + +/** + * \brief Implementation of server-topic transport command. + * + * Replies: + * + * - server_error::invalid_channel, + * - server_error::invalid_identifier, + * - server_error::not_found. + */ +class server_topic_command : public command { +public: + /** + * \copydoc command::get_name + */ + std::string get_name() const noexcept override; + + /** + * \copydoc command::exec + */ + void exec(irccd& irccd, transport_client& client, const nlohmann::json& args) override; +}; + +} // !irccd + +#endif // !IRCCD_DAEMON_SERVER_TOPIC_COMMAND_HPP
--- a/libirccd/irccd/daemon/plugin_config_command.cpp Wed Mar 07 17:49:56 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,90 +0,0 @@ -/* - * plugin_config_command.cpp -- implementation of plugin-config transport command - * - * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include <irccd/json_util.hpp> - -#include "irccd.hpp" -#include "plugin_config_command.hpp" -#include "transport_client.hpp" - -#include <irccd/daemon/service/plugin_service.hpp> - -namespace irccd { - -namespace { - -void exec_set(transport_client& client, plugin& plugin, const nlohmann::json& args) -{ - assert(args.count("value") > 0); - - auto var = args.find("variable"); - auto value = args.find("value"); - - if (var == args.end() || !var->is_string()) - throw irccd_error(irccd_error::error::incomplete_message); - if (value == args.end() || !value->is_string()) - throw irccd_error(irccd_error::error::incomplete_message); - - auto config = plugin.config(); - - config[*var] = *value; - plugin.set_config(config); - client.success("plugin-config"); -} - -void exec_get(transport_client& client, plugin& plugin, const nlohmann::json& args) -{ - auto variables = nlohmann::json::object(); - auto var = args.find("variable"); - - if (var != args.end() && var->is_string()) - variables[var->get<std::string>()] = plugin.config()[*var]; - else - for (const auto& pair : plugin.config()) - variables[pair.first] = pair.second; - - /* - * Don't put all variables into the response, put them into a sub property - * 'variables' instead. - * - * It's easier for the client to iterate over all. - */ - client.send({ - { "command", "plugin-config" }, - { "variables", variables } - }); -} - -} // !namespace - -std::string plugin_config_command::get_name() const noexcept -{ - return "plugin-config"; -} - -void plugin_config_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args) -{ - auto plugin = irccd.plugins().require(json_util::require_identifier(args, "plugin")); - - if (args.count("value") > 0) - exec_set(client, *plugin, args); - else - exec_get(client, *plugin, args); -} - -} // !irccd
--- a/libirccd/irccd/daemon/plugin_config_command.hpp Wed Mar 07 17:49:56 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,53 +0,0 @@ -/* - * plugin_config_command.hpp -- implementation of plugin-config transport command - * - * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef IRCCD_DAEMON_PLUGIN_CONFIG_COMMAND_HPP -#define IRCCD_DAEMON_PLUGIN_CONFIG_COMMAND_HPP - -/** - * \file plugin_config_command.hpp - * \brief Implementation of plugin-config transport command. - */ - -#include "command.hpp" - -namespace irccd { - -/** - * \brief Implementation of plugin-config transport command. - * - * Replies: - * - * - plugin_error::not_found - */ -class plugin_config_command : public command { -public: - /** - * \copydoc command::get_name - */ - std::string get_name() const noexcept override; - - /** - * \copydoc command::exec - */ - void exec(irccd& irccd, transport_client& client, const nlohmann::json& args) override; -}; - -} // !irccd - -#endif // !IRCCD_DAEMON_PLUGIN_CONFIG_COMMAND_HPP
--- a/libirccd/irccd/daemon/plugin_info_command.cpp Wed Mar 07 17:49:56 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +0,0 @@ -/* - * plugin_info_command.cpp -- implementation of plugin-info transport command - * - * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include <irccd/json_util.hpp> - -#include "irccd.hpp" -#include "plugin_info_command.hpp" -#include "transport_client.hpp" - -#include <irccd/daemon/service/plugin_service.hpp> - -namespace irccd { - -std::string plugin_info_command::get_name() const noexcept -{ - return "plugin-info"; -} - -void plugin_info_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args) -{ - auto plugin = irccd.plugins().require(json_util::require_identifier(args, "plugin")); - - client.send({ - { "command", "plugin-info" }, - { "author", plugin->author() }, - { "license", plugin->license() }, - { "summary", plugin->summary() }, - { "version", plugin->version() } - }); -} - -} // !irccd
--- a/libirccd/irccd/daemon/plugin_info_command.hpp Wed Mar 07 17:49:56 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,53 +0,0 @@ -/* - * plugin_info_command.hpp -- implementation of plugin-info transport command - * - * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef IRCCD_DAEMON_PLUGIN_INFO_COMMAND_HPP -#define IRCCD_DAEMON_PLUGIN_INFO_COMMAND_HPP - -/** - * \file plugin_info_command.hpp - * \brief Implementation of plugin-info transport command. - */ - -#include "command.hpp" - -namespace irccd { - -/** - * \brief Implementation of plugin-info transport command. - * - * Replies: - * - * - plugin_error::not_found - */ -class plugin_info_command : public command { -public: - /** - * \copydoc command::get_name - */ - std::string get_name() const noexcept override; - - /** - * \copydoc command::exec - */ - void exec(irccd& irccd, transport_client& client, const nlohmann::json& args) override; -}; - -} // !irccd - -#endif // !IRCCD_DAEMON_PLUGIN_INFO_COMMAND_HPP
--- a/libirccd/irccd/daemon/plugin_list_command.cpp Wed Mar 07 17:49:56 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,45 +0,0 @@ -/* - * plugin_list_command.cpp -- implementation of plugin-list transport command - * - * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include "irccd.hpp" -#include "plugin_list_command.hpp" -#include "transport_client.hpp" - -#include <irccd/daemon/service/plugin_service.hpp> - -namespace irccd { - -std::string plugin_list_command::get_name() const noexcept -{ - return "plugin-list"; -} - -void plugin_list_command::exec(irccd& irccd, transport_client& client, const nlohmann::json&) -{ - auto list = nlohmann::json::array(); - - for (const auto& plugin : irccd.plugins().list()) - list += plugin->name(); - - client.send({ - { "command", "plugin-list" }, - { "list", list } - }); -} - -} // !irccd
--- a/libirccd/irccd/daemon/plugin_list_command.hpp Wed Mar 07 17:49:56 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,49 +0,0 @@ -/* - * plugin_list_command.hpp -- implementation of plugin-list transport command - * - * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -/** - * \file plugin_list_command.hpp - * \brief Implementation of plugin-list transport command. - */ - -#ifndef IRCCD_DAEMON_PLUGIN_LIST_COMMAND_HPP -#define IRCCD_DAEMON_PLUGIN_LIST_COMMAND_HPP - -#include "command.hpp" - -namespace irccd { - -/** - * \brief Implementation of plugin-list transport command. - */ -class plugin_list_command : public command { -public: - /** - * \copydoc command::get_name - */ - std::string get_name() const noexcept override; - - /** - * \copydoc command::exec - */ - void exec(irccd& irccd, transport_client& client, const nlohmann::json& args) override; -}; - -} // !irccd - -#endif // !IRCCD_DAEMON_PLUGIN_LIST_COMMAND_HPP
--- a/libirccd/irccd/daemon/plugin_load_command.cpp Wed Mar 07 17:49:56 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,40 +0,0 @@ -/* - * plugin_load_command.cpp -- implementation of plugin-load transport command - * - * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include <irccd/json_util.hpp> - -#include "irccd.hpp" -#include "plugin_load_command.hpp" -#include "transport_client.hpp" - -#include <irccd/daemon/service/plugin_service.hpp> - -namespace irccd { - -std::string plugin_load_command::get_name() const noexcept -{ - return "plugin-load"; -} - -void plugin_load_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args) -{ - irccd.plugins().load(json_util::require_identifier(args, "plugin")); - client.success("plugin-load"); -} - -} // !irccd
--- a/libirccd/irccd/daemon/plugin_load_command.hpp Wed Mar 07 17:49:56 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,55 +0,0 @@ -/* - * plugin_load_command.hpp -- implementation of plugin-load transport command - * - * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef IRCCD_DAEMON_PLUGIN_LOAD_COMMAND_HPP -#define IRCCD_DAEMON_PLUGIN_LOAD_COMMAND_HPP - -/** - * \file plugin_load_command.hpp - * \brief Implementation of plugin-load transport command. - */ - -#include "command.hpp" - -namespace irccd { - -/** - * \brief Implementation of plugin-load transport command. - * - * Replies: - * - * - plugin_error::already_exists - * - plugin_error::not_found - * - plugin_error::exec_error - */ -class plugin_load_command : public command { -public: - /** - * \copydoc command::get_name - */ - std::string get_name() const noexcept override; - - /** - * \copydoc command::exec - */ - void exec(irccd& irccd, transport_client& client, const nlohmann::json& args) override; -}; - -} // !irccd - -#endif // !IRCCD_DAEMON_PLUGIN_LOAD_COMMAND_HPP
--- a/libirccd/irccd/daemon/plugin_reload_command.cpp Wed Mar 07 17:49:56 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,40 +0,0 @@ -/* - * plugin_reload_command.cpp -- implementation of plugin-reload transport command - * - * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include <irccd/json_util.hpp> - -#include "irccd.hpp" -#include "plugin_reload_command.hpp" -#include "transport_client.hpp" - -#include <irccd/daemon/service/plugin_service.hpp> - -namespace irccd { - -std::string plugin_reload_command::get_name() const noexcept -{ - return "plugin-reload"; -} - -void plugin_reload_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args) -{ - irccd.plugins().reload(json_util::require_identifier(args, "plugin")); - client.success("plugin-reload"); -} - -} // !irccd
--- a/libirccd/irccd/daemon/plugin_reload_command.hpp Wed Mar 07 17:49:56 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,54 +0,0 @@ -/* - * plugin_reload_command.hpp -- implementation of plugin-reload transport command - * - * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef IRCCD_DAEMON_PLUGIN_RELOAD_COMMAND_HPP -#define IRCCD_DAEMON_PLUGIN_RELOAD_COMMAND_HPP - -/** - * \file plugin_reload_command.hpp - * \brief Implementation of plugin-reload transport command. - */ - -#include "command.hpp" - -namespace irccd { - -/** - * \brief Implementation of plugin-reload transport command. - * - * Replies: - * - * - plugin_error::not_found - * - plugin_error::exec_error - */ -class plugin_reload_command : public command { -public: - /** - * \copydoc command::get_name - */ - std::string get_name() const noexcept override; - - /** - * \copydoc command::exec - */ - void exec(irccd& irccd, transport_client& client, const nlohmann::json& args) override; -}; - -} // !irccd - -#endif // !IRCCD_DAEMON_PLUGIN_RELOAD_COMMAND_HPP
--- a/libirccd/irccd/daemon/plugin_unload_command.cpp Wed Mar 07 17:49:56 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,40 +0,0 @@ -/* - * plugin_unload_command.cpp -- implementation of plugin-unload transport command - * - * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include <irccd/json_util.hpp> - -#include "irccd.hpp" -#include "plugin_unload_command.hpp" -#include "transport_client.hpp" - -#include <irccd/daemon/service/plugin_service.hpp> - -namespace irccd { - -std::string plugin_unload_command::get_name() const noexcept -{ - return "plugin-unload"; -} - -void plugin_unload_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args) -{ - irccd.plugins().unload(json_util::require_identifier(args, "plugin")); - client.success("plugin-unload"); -} - -} // !irccd
--- a/libirccd/irccd/daemon/plugin_unload_command.hpp Wed Mar 07 17:49:56 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,54 +0,0 @@ -/* - * plugin_unload_command.hpp -- implementation of plugin-unload transport command - * - * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef IRCCD_DAEMON_PLUGIN_UNLOAD_COMMAND_HPP -#define IRCCD_DAEMON_PLUGIN_UNLOAD_COMMAND_HPP - -/** - * \file plugin_unload_command.hpp - * \brief Implementation of plugin-unload transport command. - */ - -#include "command.hpp" - -namespace irccd { - -/** - * \brief Implementation of plugin-unload transport command. - * - * Replies: - * - * - plugin_error::not_found - * - plugin_error::exec_error - */ -class plugin_unload_command : public command { -public: - /** - * \copydoc command::get_name - */ - std::string get_name() const noexcept override; - - /** - * \copydoc command::exec - */ - void exec(irccd& irccd, transport_client& client, const nlohmann::json& args) override; -}; - -} // !irccd - -#endif // !IRCCD_DAEMON_PLUGIN_UNLOAD_COMMAND_HPP
--- a/libirccd/irccd/daemon/rule_add_command.cpp Wed Mar 07 17:49:56 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,46 +0,0 @@ -/* - * rule_add_command.cpp -- implementation of rule-add transport command - * - * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include <irccd/json_util.hpp> - -#include "irccd.hpp" -#include "rule_add_command.hpp" -#include "transport_client.hpp" - -#include <irccd/daemon/service/rule_service.hpp> - -namespace irccd { - -std::string rule_add_command::get_name() const noexcept -{ - return "rule-add"; -} - -void rule_add_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args) -{ - auto index = json_util::get_uint(args, "index", irccd.rules().length()); - auto rule = rule_service::from_json(args); - - if (index > irccd.rules().length()) - throw rule_error(rule_error::error::invalid_index); - - irccd.rules().insert(rule, index); - client.success("rule-add"); -} - -} // !irccd
--- a/libirccd/irccd/daemon/rule_add_command.hpp Wed Mar 07 17:49:56 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,53 +0,0 @@ -/* - * rule_add_command.hpp -- implementation of rule-add transport command - * - * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef IRCCD_DAEMON_RULE_ADD_COMMAND_HPP -#define IRCCD_DAEMON_RULE_ADD_COMMAND_HPP - -/** - * \file rule_add_command.hpp - * \brief Implementation of rule-add transport command. - */ - -#include "command.hpp" - -namespace irccd { - -/** - * \brief Implementation of rule-add transport command. - * - * Replies: - * - * - rule_error::invalid_action - */ -class rule_add_command : public command { -public: - /** - * \copydoc command::get_name - */ - std::string get_name() const noexcept override; - - /** - * \copydoc command::exec - */ - void exec(irccd& irccd, transport_client& client, const nlohmann::json& args) override; -}; - -} // !irccd - -#endif // !IRCCD_DAEMON_RULE_ADD_COMMAND_HPP
--- a/libirccd/irccd/daemon/rule_edit_command.cpp Wed Mar 07 17:49:56 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,75 +0,0 @@ -/* - * rule_edit_command.cpp -- implementation of rule-edit transport command - * - * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include "irccd.hpp" -#include "rule_edit_command.hpp" -#include "transport_client.hpp" - -#include <irccd/daemon/service/rule_service.hpp> - -using namespace std::string_literals; - -namespace irccd { - -std::string rule_edit_command::get_name() const noexcept -{ - return "rule-edit"; -} - -void rule_edit_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args) -{ - static const auto updateset = [] (auto& set, auto args, const auto& key) { - for (const auto& v : args["remove-"s + key]) { - if (v.is_string()) - set.erase(v.template get<std::string>()); - } - for (const auto& v : args["add-"s + key]) { - if (v.is_string()) - set.insert(v.template get<std::string>()); - } - }; - - // Create a copy to avoid incomplete edition in case of errors. - auto index = irccd.rules().get_index(args); - auto rule = irccd.rules().require(index); - - updateset(rule.get_channels(), args, "channels"); - updateset(rule.get_events(), args, "events"); - updateset(rule.get_plugins(), args, "plugins"); - updateset(rule.get_servers(), args, "servers"); - - auto action = args.find("action"); - - if (action != args.end()) { - if (!action->is_string()) - throw rule_error(rule_error::error::invalid_action); - - if (action->get<std::string>() == "accept") - rule.set_action(rule::action::accept); - else if (action->get<std::string>() == "drop") - rule.set_action(rule::action::drop); - else - throw rule_error(rule_error::invalid_action); - } - - // All done, sync the rule. - irccd.rules().require(index) = rule; - client.success("rule-edit"); -} - -} // !irccd
--- a/libirccd/irccd/daemon/rule_edit_command.hpp Wed Mar 07 17:49:56 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,54 +0,0 @@ -/* - * rule_edit_command.hpp -- implementation of rule-edit transport command - * - * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef IRCCD_DAEMON_RULE_EDIT_COMMAND_HPP -#define IRCCD_DAEMON_RULE_EDIT_COMMAND_HPP - -/** - * \file rule_edit_command.hpp - * \brief Implementation of rule-edit transport command. - */ - -#include "command.hpp" - -namespace irccd { - -/** - * \brief Implementation of rule-edit transport command. - * - * Replies: - * - * - rule_error::invalid_index - * - rule_error::invalid_action - */ -class rule_edit_command : public command { -public: - /** - * \copydoc command::get_name - */ - std::string get_name() const noexcept override; - - /** - * \copydoc command::exec - */ - void exec(irccd& irccd, transport_client& client, const nlohmann::json& args) override; -}; - -} // !irccd - -#endif // !IRCCD_DAEMON_RULE_EDIT_COMMAND_HPP
--- a/libirccd/irccd/daemon/rule_info_command.cpp Wed Mar 07 17:49:56 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,40 +0,0 @@ -/* - * rule_info_command.cpp -- implementation of rule-info transport command - * - * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include "irccd.hpp" -#include "rule_info_command.hpp" -#include "transport_client.hpp" - -#include <irccd/daemon/service/rule_service.hpp> - -namespace irccd { - -std::string rule_info_command::get_name() const noexcept -{ - return "rule-info"; -} - -void rule_info_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args) -{ - auto json = rule_service::to_json(irccd.rules().require(irccd.rules().get_index(args))); - - json.push_back({"command", "rule-info"}); - client.send(std::move(json)); -} - -} // !irccd
--- a/libirccd/irccd/daemon/rule_info_command.hpp Wed Mar 07 17:49:56 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,53 +0,0 @@ -/* - * rule_info_command.hpp -- implementation of rule-info transport command - * - * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef IRCCD_DAEMON_RULE_INFO_COMMAND_HPP -#define IRCCD_DAEMON_RULE_INFO_COMMAND_HPP - -/** - * \file rule_info_command.hpp - * \brief Implementation of rule-info transport command. - */ - -#include "command.hpp" - -namespace irccd { - -/** - * \brief Implementation of rule-info transport command. - * - * Replies: - * - * - rule_error::invalid_index - */ -class rule_info_command : public command { -public: - /** - * \copydoc command::get_name - */ - std::string get_name() const noexcept override; - - /** - * \copydoc command::exec - */ - void exec(irccd& irccd, transport_client& client, const nlohmann::json& args) override; -}; - -} // !irccd - -#endif // !IRCCD_DAEMON_RULE_INFO_COMMAND_HPP
--- a/libirccd/irccd/daemon/rule_list_command.cpp Wed Mar 07 17:49:56 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,45 +0,0 @@ -/* - * rule_list_command.cpp -- implementation of rule-list transport command - * - * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include "irccd.hpp" -#include "rule_list_command.hpp" -#include "transport_client.hpp" - -#include <irccd/daemon/service/rule_service.hpp> - -namespace irccd { - -std::string rule_list_command::get_name() const noexcept -{ - return "rule-list"; -} - -void rule_list_command::exec(irccd& irccd, transport_client& client, const nlohmann::json&) -{ - auto array = nlohmann::json::array(); - - for (const auto& rule : irccd.rules().list()) - array.push_back(rule_service::to_json(rule)); - - client.send({ - { "command", "rule-list" }, - { "list", std::move(array) } - }); -} - -} // !irccd
--- a/libirccd/irccd/daemon/rule_list_command.hpp Wed Mar 07 17:49:56 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,49 +0,0 @@ -/* - * rule_list_command.hpp -- implementation of rule-list transport command - * - * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef IRCCD_DAEMON_RULE_LIST_COMMAND_HPP -#define IRCCD_DAEMON_RULE_LIST_COMMAND_HPP - -/** - * \file rule_list_command.hpp - * \brief Implementation of rule-list transport command. - */ - -#include "command.hpp" - -namespace irccd { - -/** - * \brief Implementation of rule-list transport command. - */ -class rule_list_command : public command { -public: - /** - * \copydoc command::get_name - */ - std::string get_name() const noexcept override; - - /** - * \copydoc command::exec - */ - void exec(irccd& irccd, transport_client& client, const nlohmann::json& args) override; -}; - -} // !irccd - -#endif // !IRCCD_DAEMON_RULE_ADD_COMMAND_HPP
--- a/libirccd/irccd/daemon/rule_move_command.cpp Wed Mar 07 17:49:56 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,83 +0,0 @@ -/* - * rule_move_command.cpp -- implementation of rule-move transport command - * - * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include "irccd.hpp" -#include "rule_move_command.hpp" -#include "transport_client.hpp" - -#include <irccd/daemon/service/rule_service.hpp> - -namespace irccd { - -std::string rule_move_command::get_name() const noexcept -{ - return "rule-move"; -} - -void rule_move_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args) -{ - auto from = rule_service::get_index(args, "from"); - auto to = rule_service::get_index(args, "to"); - - /* - * Examples of moves - * -------------------------------------------------------------- - * - * Before: [0] [1] [2] - * - * from = 0 - * to = 2 - * - * After: [1] [2] [0] - * - * -------------------------------------------------------------- - * - * Before: [0] [1] [2] - * - * from = 2 - * to = 0 - * - * After: [2] [0] [1] - * - * -------------------------------------------------------------- - * - * Before: [0] [1] [2] - * - * from = 0 - * to = 123 - * - * After: [1] [2] [0] - */ - - // Ignore dumb input. - if (from == to) { - client.success("rule-move"); - return; - } - - if (from >= irccd.rules().length()) - throw rule_error(rule_error::error::invalid_index); - - auto save = irccd.rules().list()[from]; - - irccd.rules().remove(from); - irccd.rules().insert(save, to > irccd.rules().length() ? irccd.rules().length() : to); - client.success("rule-move"); -} - -} // !irccd
--- a/libirccd/irccd/daemon/rule_move_command.hpp Wed Mar 07 17:49:56 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,53 +0,0 @@ -/* - * rule_move_command.hpp -- implementation of rule-move transport command - * - * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef IRCCD_DAEMON_RULE_MOVE_COMMAND_HPP -#define IRCCD_DAEMON_RULE_MOVE_COMMAND_HPP - -/** - * \file rule_move_command.hpp - * \brief Implementation of rule-move transport command. - */ - -#include "command.hpp" - -namespace irccd { - -/** - * \brief Implementation of rule-move transport command. - * - * Replies: - * - * - rule_error::invalid_index - */ -class rule_move_command : public command { -public: - /** - * \copydoc command::get_name - */ - std::string get_name() const noexcept override; - - /** - * \copydoc command::exec - */ - void exec(irccd& irccd, transport_client& client, const nlohmann::json& args) override; -}; - -} // !irccd - -#endif // !IRCCD_DAEMON_RULE_MOVE_COMMAND_HPP
--- a/libirccd/irccd/daemon/rule_remove_command.cpp Wed Mar 07 17:49:56 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,43 +0,0 @@ -/* - * rule_remove_command.cpp -- implementation of rule-remove transport command - * - * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include "irccd.hpp" -#include "rule_remove_command.hpp" -#include "transport_client.hpp" - -#include <irccd/daemon/service/rule_service.hpp> - -namespace irccd { - -std::string rule_remove_command::get_name() const noexcept -{ - return "rule-remove"; -} - -void rule_remove_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args) -{ - auto index = rule_service::get_index(args); - - if (index >= irccd.rules().length()) - throw rule_error(rule_error::invalid_index); - - irccd.rules().remove(index); - client.success("rule-remove"); -} - -} // !irccd
--- a/libirccd/irccd/daemon/rule_remove_command.hpp Wed Mar 07 17:49:56 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,53 +0,0 @@ -/* - * rule_remove_command.hpp -- implementation of rule-remove transport command - * - * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef IRCCD_DAEMON_RULE_REMOVE_COMMAND_HPP -#define IRCCD_DAEMON_RULE_REMOVE_COMMAND_HPP - -/** - * \file rule_remove_command.hpp - * \brief Implementation of rule-remove transport command. - */ - -#include "command.hpp" - -namespace irccd { - -/** - * \brief Implementation of rule-remove transport command. - * - * Replies: - * - * - rule_error::invalid_index - */ -class rule_remove_command : public command { -public: - /** - * \copydoc command::get_name - */ - std::string get_name() const noexcept override; - - /** - * \copydoc command::exec - */ - void exec(irccd& irccd, transport_client& client, const nlohmann::json& args) override; -}; - -} // !irccd - -#endif // !IRCCD_DAEMON_RULE_REMOVE_COMMAND_HPP
--- a/libirccd/irccd/daemon/server_connect_command.cpp Wed Mar 07 17:49:56 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,43 +0,0 @@ -/* - * server_connect_command.cpp -- implementation of server-connect transport command - * - * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include "irccd.hpp" -#include "server_connect_command.hpp" -#include "transport_client.hpp" - -#include <irccd/daemon/service/server_service.hpp> - -namespace irccd { - -std::string server_connect_command::get_name() const noexcept -{ - return "server-connect"; -} - -void server_connect_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args) -{ - auto server = server_service::from_json(irccd.service(), args); - - if (irccd.servers().has(server->name())) - throw server_error(server_error::error::already_exists, server->name()); - - irccd.servers().add(std::move(server)); - client.success("server-connect"); -} - -} // !irccd
--- a/libirccd/irccd/daemon/server_connect_command.hpp Wed Mar 07 17:49:56 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,57 +0,0 @@ -/* - * server_connect_command.hpp -- implementation of server-connect transport command - * - * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef IRCCD_DAEMON_SERVER_CONNECT_COMMAND_HPP -#define IRCCD_DAEMON_SERVER_CONNECT_COMMAND_HPP - -/** - * \file server_connect_command.hpp - * \brief Implementation of server-connect transport command. - */ - -#include "command.hpp" - -namespace irccd { - -/** - * \brief Implementation of server-connect transport command. - * - * Replies: - * - * - server_error::already_exists, - * - server_error::invalid_hostname, - * - server_error::invalid_identifier, - * - server_error::invalid_port_number, - * - server_error::ssl_disabled. - */ -class server_connect_command : public command { -public: - /** - * \copydoc command::get_name - */ - std::string get_name() const noexcept override; - - /** - * \copydoc command::exec - */ - void exec(irccd& irccd, transport_client& client, const nlohmann::json& args) override; -}; - -} // !irccd - -#endif // !IRCCD_DAEMON_SERVER_CONNECT_COMMAND_HPP
--- a/libirccd/irccd/daemon/server_disconnect_command.cpp Wed Mar 07 17:49:56 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,54 +0,0 @@ -/* - * server_disconnect_command.cpp -- implementation of server-disconnect transport command - * - * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include "irccd.hpp" -#include "server_disconnect_command.hpp" -#include "transport_client.hpp" - -#include <irccd/daemon/service/server_service.hpp> - -namespace irccd { - -std::string server_disconnect_command::get_name() const noexcept -{ - return "server-disconnect"; -} - -void server_disconnect_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args) -{ - auto it = args.find("server"); - - if (it == args.end()) - irccd.servers().clear(); - else { - if (!it->is_string()) - throw server_error(server_error::invalid_identifier, ""); - - auto name = it->get<std::string>(); - auto s = irccd.servers().get(name); - - if (!s) - throw server_error(server_error::not_found, name); - - irccd.servers().remove(name); - } - - client.success("server-disconnect"); -} - -} // !irccd
--- a/libirccd/irccd/daemon/server_disconnect_command.hpp Wed Mar 07 17:49:56 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,54 +0,0 @@ -/* - * server_disconnect_command.hpp -- implementation of server-disconnect transport command - * - * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef IRCCD_DAEMON_SERVER_DISCONNECT_COMMAND_HPP -#define IRCCD_DAEMON_SERVER_DISCONNECT_COMMAND_HPP - -/** - * \file server_disconnect_command.hpp - * \brief Implementation of server-disconnect transport command. - */ - -#include "command.hpp" - -namespace irccd { - -/** - * \brief Implementation of server-disconnect transport command. - * - * Replies: - * - * - server_error::invalid_identifier, - * - server_error::not_found. - */ -class server_disconnect_command : public command { -public: - /** - * \copydoc command::get_name - */ - std::string get_name() const noexcept override; - - /** - * \copydoc command::exec - */ - void exec(irccd& irccd, transport_client& client, const nlohmann::json& args) override; -}; - -} // !irccd - -#endif // !IRCCD_DAEMON_SERVER_DISCONNECT_COMMAND_HPP
--- a/libirccd/irccd/daemon/server_info_command.cpp Wed Mar 07 17:49:56 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,58 +0,0 @@ -/* - * server_info_command.cpp -- implementation of server-info transport command - * - * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include "irccd.hpp" -#include "server_info_command.hpp" -#include "transport_client.hpp" - -#include <irccd/daemon/service/server_service.hpp> - -namespace irccd { - -std::string server_info_command::get_name() const noexcept -{ - return "server-info"; -} - -void server_info_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args) -{ - auto response = nlohmann::json::object(); - auto server = irccd.servers().require(args); - - // General stuff. - response.push_back({"command", "server-info"}); - response.push_back({"name", server->name()}); - response.push_back({"host", server->host()}); - response.push_back({"port", server->port()}); - response.push_back({"nickname", server->nickname()}); - response.push_back({"username", server->username()}); - response.push_back({"realname", server->realname()}); - response.push_back({"channels", server->channels()}); - - // Optional stuff. - if (server->flags() & server::ipv6) - response.push_back({"ipv6", true}); - if (server->flags() & server::ssl) - response.push_back({"ssl", true}); - if (server->flags() & server::ssl_verify) - response.push_back({"sslVerify", true}); - - client.send(response); -} - -} // !irccd
--- a/libirccd/irccd/daemon/server_info_command.hpp Wed Mar 07 17:49:56 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,54 +0,0 @@ -/* - * server_info_command.hpp -- implementation of server-info transport command - * - * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef IRCCD_DAEMON_SERVER_INFO_COMMAND_HPP -#define IRCCD_DAEMON_SERVER_INFO_COMMAND_HPP - -/** - * \file server_info_command.hpp - * \brief Implementation of server-info transport command. - */ - -#include "command.hpp" - -namespace irccd { - -/** - * \brief Implementation of server-info transport command. - * - * Replies: - * - * - server_error::invalid_identifier, - * - server_error::not_found. - */ -class server_info_command : public command { -public: - /** - * \copydoc command::get_name - */ - std::string get_name() const noexcept override; - - /** - * \copydoc command::exec - */ - void exec(irccd& irccd, transport_client& client, const nlohmann::json& args) override; -}; - -} // !irccd - -#endif // !IRCCD_DAEMON_SERVER_INFO_COMMAND_HPP
--- a/libirccd/irccd/daemon/server_invite_command.cpp Wed Mar 07 17:49:56 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,49 +0,0 @@ -/* - * server_invite_command.cpp -- implementation of server-invite transport command - * - * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include <irccd/json_util.hpp> - -#include "irccd.hpp" -#include "server_invite_command.hpp" -#include "transport_client.hpp" - -#include <irccd/daemon/service/server_service.hpp> - -namespace irccd { - -std::string server_invite_command::get_name() const noexcept -{ - return "server-invite"; -} - -void server_invite_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args) -{ - auto server = irccd.servers().require(args); - auto target = json_util::get_string(args, "target"); - auto channel = json_util::get_string(args, "channel"); - - if (target.empty()) - throw server_error(server_error::invalid_nickname, server->name()); - if (channel.empty()) - throw server_error(server_error::invalid_channel, server->name()); - - server->invite(target, channel); - client.success("server-invite"); -} - -} // !irccd
--- a/libirccd/irccd/daemon/server_invite_command.hpp Wed Mar 07 17:49:56 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,56 +0,0 @@ -/* - * server_invite_command.hpp -- implementation of server-invite transport command - * - * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef IRCCD_DAEMON_SERVER_INVITE_COMMAND_HPP -#define IRCCD_DAEMON_SERVER_INVITE_COMMAND_HPP - -/** - * \file server_invite_command.hpp - * \brief Implementation of server-invite transport command. - */ - -#include "command.hpp" - -namespace irccd { - -/** - * \brief Implementation of server-invite transport command. - * - * Replies: - * - * - server_error::invalid_channel, - * - server_error::invalid_identifier, - * - server_error::invalid_nickname, - * - server_error::not_found. - */ -class server_invite_command : public command { -public: - /** - * \copydoc command::get_name - */ - std::string get_name() const noexcept override; - - /** - * \copydoc command::exec - */ - void exec(irccd& irccd, transport_client& client, const nlohmann::json& args) override; -}; - -} // !irccd - -#endif // !IRCCD_DAEMON_SERVER_INVITE_COMMAND_HPP
--- a/libirccd/irccd/daemon/server_join_command.cpp Wed Mar 07 17:49:56 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +0,0 @@ -/* - * server_join_command.cpp -- implementation of server-join transport command - * - * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include <irccd/json_util.hpp> - -#include "irccd.hpp" -#include "server_join_command.hpp" -#include "transport_client.hpp" - -#include <irccd/daemon/service/server_service.hpp> - -namespace irccd { - -std::string server_join_command::get_name() const noexcept -{ - return "server-join"; -} - -void server_join_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args) -{ - auto server = irccd.servers().require(args); - auto channel = json_util::get_string(args, "channel"); - auto password = json_util::get_string(args, "password"); - - if (channel.empty()) - throw server_error(server_error::invalid_channel, server->name()); - - server->join(channel, password); - client.success("server-join"); -} - -} // !irccd
--- a/libirccd/irccd/daemon/server_join_command.hpp Wed Mar 07 17:49:56 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,55 +0,0 @@ -/* - * server_join_command.hpp -- implementation of server-join transport command - * - * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef IRCCD_DAEMON_SERVER_JOIN_COMMAND_HPP -#define IRCCD_DAEMON_SERVER_JOIN_COMMAND_HPP - -/** - * \file server_join_command.hpp - * \brief Implementation of server-join transport command. - */ - -#include "command.hpp" - -namespace irccd { - -/** - * \brief Implementation of server-join transport command. - * - * Replies: - * - * - server_error::invalid_channel, - * - server_error::invalid_identifier, - * - server_error::not_found. - */ -class server_join_command : public command { -public: - /** - * \copydoc command::get_name - */ - std::string get_name() const noexcept override; - - /** - * \copydoc command::exec - */ - void exec(irccd& irccd, transport_client& client, const nlohmann::json& args) override; -}; - -} // !irccd - -#endif // !IRCCD_DAEMON_SERVER_JOIN_COMMAND_HPP
--- a/libirccd/irccd/daemon/server_kick_command.cpp Wed Mar 07 17:49:56 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,50 +0,0 @@ -/* - * server_kick_command.cpp -- implementation of server-kick transport command - * - * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include <irccd/json_util.hpp> - -#include "irccd.hpp" -#include "server_kick_command.hpp" -#include "transport_client.hpp" - -#include <irccd/daemon/service/server_service.hpp> - -namespace irccd { - -std::string server_kick_command::get_name() const noexcept -{ - return "server-kick"; -} - -void server_kick_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args) -{ - auto server = irccd.servers().require(args); - auto target = json_util::get_string(args, "target"); - auto channel = json_util::get_string(args, "channel"); - auto reason = json_util::get_string(args, "reason"); - - if (target.empty()) - throw server_error(server_error::invalid_nickname, server->name()); - if (channel.empty()) - throw server_error(server_error::invalid_channel, server->name()); - - server->kick(target, channel, reason); - client.success("server-kick"); -} - -} // !irccd
--- a/libirccd/irccd/daemon/server_kick_command.hpp Wed Mar 07 17:49:56 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,56 +0,0 @@ -/* - * server_kick_command.hpp -- implementation of server-kick transport command - * - * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef IRCCD_DAEMON_SERVER_KICK_COMMAND_HPP -#define IRCCD_DAEMON_SERVER_KICK_COMMAND_HPP - -/** - * \file server_kick_command.hpp - * \brief Implementation of server-kick transport command. - */ - -#include "command.hpp" - -namespace irccd { - -/** - * \brief Implementation of server-kick transport command. - * - * Replies: - * - * - server_error::invalid_channel, - * - server_error::invalid_identifier, - * - server_error::invalid_nickname, - * - server_error::not_found. - */ -class server_kick_command : public command { -public: - /** - * \copydoc command::get_name - */ - std::string get_name() const noexcept override; - - /** - * \copydoc command::exec - */ - void exec(irccd& irccd, transport_client& client, const nlohmann::json& args) override; -}; - -} // !irccd - -#endif // !IRCCD_DAEMON_SERVER_KICK_COMMAND_HPP
--- a/libirccd/irccd/daemon/server_list_command.cpp Wed Mar 07 17:49:56 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,46 +0,0 @@ -/* - * server_list_command.cpp -- implementation of server-list transport command - * - * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include "irccd.hpp" -#include "server_list_command.hpp" -#include "transport_client.hpp" - -#include <irccd/daemon/service/server_service.hpp> - -namespace irccd { - -std::string server_list_command::get_name() const noexcept -{ - return "server-list"; -} - -void server_list_command::exec(irccd& irccd, transport_client& client, const nlohmann::json&) -{ - auto json = nlohmann::json::object(); - auto list = nlohmann::json::array(); - - for (const auto& server : irccd.servers().servers()) - list.push_back(server->name()); - - client.send({ - { "command", "server-list" }, - { "list", std::move(list) } - }); -} - -} // !irccd
--- a/libirccd/irccd/daemon/server_list_command.hpp Wed Mar 07 17:49:56 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,49 +0,0 @@ -/* - * server_list_command.hpp -- implementation of server-list transport command - * - * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef IRCCD_DAEMON_SERVER_LIST_COMMAND_HPP -#define IRCCD_DAEMON_SERVER_LIST_COMMAND_HPP - -/** - * \file server_list_command.hpp - * \brief Implementation of server-list transport command. - */ - -#include "command.hpp" - -namespace irccd { - -/** - * \brief Implementation of server-list transport command. - */ -class server_list_command : public command { -public: - /** - * \copydoc command::get_name - */ - std::string get_name() const noexcept override; - - /** - * \copydoc command::exec - */ - void exec(irccd& irccd, transport_client& client, const nlohmann::json& args) override; -}; - -} // !irccd - -#endif // !IRCCD_DAEMON_SERVER_LIST_COMMAND_HPP
--- a/libirccd/irccd/daemon/server_me_command.cpp Wed Mar 07 17:49:56 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +0,0 @@ -/* - * server_me_command.cpp -- implementation of server-me transport command - * - * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include <irccd/json_util.hpp> - -#include "irccd.hpp" -#include "server_me_command.hpp" -#include "transport_client.hpp" - -#include <irccd/daemon/service/server_service.hpp> - -namespace irccd { - -std::string server_me_command::get_name() const noexcept -{ - return "server-me"; -} - -void server_me_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args) -{ - auto server = irccd.servers().require(args); - auto channel = json_util::get_string(args, "target"); - auto message = json_util::get_string(args, "message"); - - if (channel.empty()) - throw server_error(server_error::invalid_channel, server->name()); - - server->me(channel, message); - client.success("server-me"); -} - -} // !irccd
--- a/libirccd/irccd/daemon/server_me_command.hpp Wed Mar 07 17:49:56 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,55 +0,0 @@ -/* - * server_me_command.hpp -- implementation of server-me transport command - * - * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef IRCCD_DAEMON_SERVER_ME_COMMAND_HPP -#define IRCCD_DAEMON_SERVER_ME_COMMAND_HPP - -/** - * \file server_me_command.hpp - * \brief Implementation of server-me transport command. - */ - -#include "command.hpp" - -namespace irccd { - -/** - * \brief Implementation of server-me transport command. - * - * Replies: - * - * - server_error::invalid_channel, - * - server_error::invalid_identifier, - * - server_error::not_found. - */ -class server_me_command : public command { -public: - /** - * \copydoc command::get_name - */ - std::string get_name() const noexcept override; - - /** - * \copydoc command::exec - */ - void exec(irccd& irccd, transport_client& client, const nlohmann::json& args) override; -}; - -} // !irccd - -#endif // !IRCCD_DAEMON_SERVER_ME_COMMAND_HPP
--- a/libirccd/irccd/daemon/server_message_command.cpp Wed Mar 07 17:49:56 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +0,0 @@ -/* - * server_message_command.cpp -- implementation of server-message transport command - * - * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include <irccd/json_util.hpp> - -#include "irccd.hpp" -#include "server_message_command.hpp" -#include "transport_client.hpp" - -#include <irccd/daemon/service/server_service.hpp> - -namespace irccd { - -std::string server_message_command::get_name() const noexcept -{ - return "server-message"; -} - -void server_message_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args) -{ - auto server = irccd.servers().require(args); - auto channel = json_util::get_string(args, "target"); - auto message = json_util::get_string(args, "message"); - - if (channel.empty()) - throw server_error(server_error::invalid_channel, server->name()); - - server->message(channel, message); - client.success("server-message"); -} - -} // !irccd
--- a/libirccd/irccd/daemon/server_message_command.hpp Wed Mar 07 17:49:56 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,55 +0,0 @@ -/* - * server_message_command.hpp -- implementation of server-message transport command - * - * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef IRCCD_DAEMON_SERVER_MESSAGE_COMMAND_HPP -#define IRCCD_DAEMON_SERVER_MESSAGE_COMMAND_HPP - -/** - * \file server_message_command.hpp - * \brief Implementation of server-message transport command. - */ - -#include "command.hpp" - -namespace irccd { - -/** - * \brief Implementation of server-message transport command. - * - * Replies: - * - * - server_error::invalid_channel, - * - server_error::invalid_identifier, - * - server_error::not_found. - */ -class server_message_command : public command { -public: - /** - * \copydoc command::get_name - */ - std::string get_name() const noexcept override; - - /** - * \copydoc command::exec - */ - void exec(irccd& irccd, transport_client& client, const nlohmann::json& args) override; -}; - -} // !irccd - -#endif // !IRCCD_DAEMON_SERVER_MESSAGE_COMMAND_HPP
--- a/libirccd/irccd/daemon/server_mode_command.cpp Wed Mar 07 17:49:56 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,53 +0,0 @@ -/* - * server_mode_command.cpp -- implementation of server-mode transport command - * - * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include <irccd/json_util.hpp> - -#include "irccd.hpp" -#include "server_mode_command.hpp" -#include "transport_client.hpp" - -#include <irccd/daemon/service/server_service.hpp> - -namespace irccd { - -std::string server_mode_command::get_name() const noexcept -{ - return "server-mode"; -} - -void server_mode_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args) -{ - auto server = irccd.servers().require(args); - auto channel = json_util::get_string(args, "channel"); - auto mode = json_util::get_string(args, "mode"); - - if (channel.empty()) - throw server_error(server_error::invalid_channel, server->name()); - if (mode.empty()) - throw server_error(server_error::invalid_mode, server->name()); - - auto limit = json_util::get_string(args, "limit"); - auto user = json_util::get_string(args, "user"); - auto mask = json_util::get_string(args, "mask"); - - server->mode(channel, mode, limit, user, mask); - client.success("server-mode"); -} - -} // !irccd
--- a/libirccd/irccd/daemon/server_mode_command.hpp Wed Mar 07 17:49:56 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,56 +0,0 @@ -/* - * server_mode_command.hpp -- implementation of server-mode transport command - * - * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef IRCCD_DAEMON_SERVER_MODE_COMMAND_HPP -#define IRCCD_DAEMON_SERVER_MODE_COMMAND_HPP - -/** - * \file server_mode_command.hpp - * \brief Implementation of server-mode transport command. - */ - -#include "command.hpp" - -namespace irccd { - -/** - * \brief Implementation of server-mode transport command. - * - * Replies: - * - * - server_error::invalid_channel, - * - server_error::invalid_identifier, - * - server_error::invalid_mode, - * - server_error::not_found. - */ -class server_mode_command : public command { -public: - /** - * \copydoc command::get_name - */ - std::string get_name() const noexcept override; - - /** - * \copydoc command::exec - */ - void exec(irccd& irccd, transport_client& client, const nlohmann::json& args) override; -}; - -} // !irccd - -#endif // !IRCCD_DAEMON_SERVER_MODE_COMMAND_HPP
--- a/libirccd/irccd/daemon/server_nick_command.cpp Wed Mar 07 17:49:56 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,46 +0,0 @@ -/* - * server_nick_command.cpp -- implementation of server-nick transport command - * - * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include <irccd/json_util.hpp> - -#include "irccd.hpp" -#include "server_nick_command.hpp" -#include "transport_client.hpp" - -#include <irccd/daemon/service/server_service.hpp> - -namespace irccd { - -std::string server_nick_command::get_name() const noexcept -{ - return "server-nick"; -} - -void server_nick_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args) -{ - auto server = irccd.servers().require(args); - auto nick = json_util::get_string(args, "nickname"); - - if (nick.empty()) - throw server_error(server_error::invalid_nickname, server->name()); - - server->set_nickname(nick); - client.success("server-nick"); -} - -} // !irccd
--- a/libirccd/irccd/daemon/server_nick_command.hpp Wed Mar 07 17:49:56 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,55 +0,0 @@ -/* - * server_nick_command.hpp -- implementation of server-nick transport command - * - * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef IRCCD_DAEMON_SERVER_NICK_COMMAND_HPP -#define IRCCD_DAEMON_SERVER_NICK_COMMAND_HPP - -/** - * \file server_nick_command.hpp - * \brief Implementation of server-nick transport command. - */ - -#include "command.hpp" - -namespace irccd { - -/** - * \brief Implementation of server-nick transport command. - * - * Replies: - * - * - server_error::invalid_identifier, - * - server_error::invalid_nickname, - * - server_error::not_found. - */ -class server_nick_command : public command { -public: - /** - * \copydoc command::get_name - */ - std::string get_name() const noexcept override; - - /** - * \copydoc command::exec - */ - void exec(irccd& irccd, transport_client& client, const nlohmann::json& args) override; -}; - -} // !irccd - -#endif // !IRCCD_DAEMON_SERVER_NICK_COMMAND_HPP
--- a/libirccd/irccd/daemon/server_notice_command.cpp Wed Mar 07 17:49:56 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +0,0 @@ -/* - * server_notice_command.cpp -- implementation of server-notice transport command - * - * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include <irccd/json_util.hpp> - -#include "irccd.hpp" -#include "server_notice_command.hpp" -#include "transport_client.hpp" - -#include <irccd/daemon/service/server_service.hpp> - -namespace irccd { - -std::string server_notice_command::get_name() const noexcept -{ - return "server-notice"; -} - -void server_notice_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args) -{ - auto server = irccd.servers().require(args); - auto channel = json_util::get_string(args, "target"); - auto message = json_util::get_string(args, "message"); - - if (channel.empty()) - throw server_error(server_error::invalid_channel, server->name()); - - server->notice(channel, message); - client.success("server-notice"); -} - -} // !irccd
--- a/libirccd/irccd/daemon/server_notice_command.hpp Wed Mar 07 17:49:56 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,55 +0,0 @@ -/* - * server_notice_command.hpp -- implementation of server-notice transport command - * - * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef IRCCD_DAEMON_SERVER_NOTICE_COMMAND_HPP -#define IRCCD_DAEMON_SERVER_NOTICE_COMMAND_HPP - -/** - * \file server_notice_command.hpp - * \brief Implementation of server-notice transport command. - */ - -#include "command.hpp" - -namespace irccd { - -/** - * \brief Implementation of server-notice transport command. - * - * Replies: - * - * - server_error::invalid_channel, - * - server_error::invalid_identifier, - * - server_error::not_found. - */ -class server_notice_command : public command { -public: - /** - * \copydoc command::get_name - */ - std::string get_name() const noexcept override; - - /** - * \copydoc command::exec - */ - void exec(irccd& irccd, transport_client& client, const nlohmann::json& args) override; -}; - -} // !irccd - -#endif // !IRCCD_DAEMON_SERVER_NOTICE_COMMAND_HPP
--- a/libirccd/irccd/daemon/server_part_command.cpp Wed Mar 07 17:49:56 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +0,0 @@ -/* - * server_part_command.cpp -- implementation of server-part transport command - * - * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include <irccd/json_util.hpp> - -#include "irccd.hpp" -#include "server_part_command.hpp" -#include "transport_client.hpp" - -#include <irccd/daemon/service/server_service.hpp> - -namespace irccd { - -std::string server_part_command::get_name() const noexcept -{ - return "server-part"; -} - -void server_part_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args) -{ - auto server = irccd.servers().require(args); - auto channel = json_util::get_string(args, "channel"); - auto reason = json_util::get_string(args, "reason"); - - if (channel.empty()) - throw server_error(server_error::invalid_channel, server->name()); - - server->part(channel, reason); - client.success("server-part"); -} - -} // !irccd
--- a/libirccd/irccd/daemon/server_part_command.hpp Wed Mar 07 17:49:56 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,55 +0,0 @@ -/* - * server_part_command.hpp -- implementation of server-part transport command - * - * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef IRCCD_DAEMON_SERVER_PART_COMMAND_HPP -#define IRCCD_DAEMON_SERVER_PART_COMMAND_HPP - -/** - * \file server_part_command.hpp - * \brief Implementation of server-part transport command. - */ - -#include "command.hpp" - -namespace irccd { - -/** - * \brief Implementation of server-part transport command. - * - * Replies: - * - * - server_error::invalid_channel, - * - server_error::invalid_identifier, - * - server_error::not_found. - */ -class server_part_command : public command { -public: - /** - * \copydoc command::get_name - */ - std::string get_name() const noexcept override; - - /** - * \copydoc command::exec - */ - void exec(irccd& irccd, transport_client& client, const nlohmann::json& args) override; -}; - -} // !irccd - -#endif // !IRCCD_DAEMON_SERVER_PART_COMMAND_HPP
--- a/libirccd/irccd/daemon/server_reconnect_command.cpp Wed Mar 07 17:49:56 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,57 +0,0 @@ -/* - * server_reconnect_command.cpp -- implementation of server-reconnect transport command - * - * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include <irccd/string_util.hpp> - -#include "irccd.hpp" -#include "server_reconnect_command.hpp" -#include "transport_client.hpp" - -#include <irccd/daemon/service/server_service.hpp> - -namespace irccd { - -std::string server_reconnect_command::get_name() const noexcept -{ - return "server-reconnect"; -} - -void server_reconnect_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args) -{ - auto server = args.find("server"); - - if (server == args.end()) { - for (auto& server : irccd.servers().servers()) - server->reconnect(); - } else { - if (!server->is_string() || !string_util::is_identifier(server->get<std::string>())) - throw server_error(server_error::invalid_identifier, ""); - - auto name = server->get<std::string>(); - auto s = irccd.servers().get(name); - - if (!s) - throw server_error(server_error::not_found, name); - - s->reconnect(); - } - - client.success("server-reconnect"); -} - -} // !irccd
--- a/libirccd/irccd/daemon/server_reconnect_command.hpp Wed Mar 07 17:49:56 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,54 +0,0 @@ -/* - * server_reconnect_command.hpp -- implementation of server-reconnect transport command - * - * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef IRCCD_DAEMON_SERVER_RECONNECT_COMMAND_HPP -#define IRCCD_DAEMON_SERVER_RECONNECT_COMMAND_HPP - -/** - * \file server_reconnect_command.hpp - * \brief Implementation of server-reconnect transport command. - */ - -#include "command.hpp" - -namespace irccd { - -/** - * \brief Implementation of server-reconnect transport command. - * - * Replies: - * - * - server_error::invalid_identifier, - * - server_error::not_found. - */ -class server_reconnect_command : public command { -public: - /** - * \copydoc command::get_name - */ - std::string get_name() const noexcept override; - - /** - * \copydoc command::exec - */ - void exec(irccd& irccd, transport_client& client, const nlohmann::json& args) override; -}; - -} // !irccd - -#endif // !IRCCD_DAEMON_SERVER_RECONNECT_COMMAND_HPP
--- a/libirccd/irccd/daemon/server_topic_command.cpp Wed Mar 07 17:49:56 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +0,0 @@ -/* - * server_topic_command.cpp -- implementation of server-topic transport command - * - * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include <irccd/json_util.hpp> - -#include "irccd.hpp" -#include "server_topic_command.hpp" -#include "transport_client.hpp" - -#include <irccd/daemon/service/server_service.hpp> - -namespace irccd { - -std::string server_topic_command::get_name() const noexcept -{ - return "server-topic"; -} - -void server_topic_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args) -{ - auto server = irccd.servers().require(args); - auto channel = json_util::get_string(args, "channel"); - auto topic = json_util::get_string(args, "topic"); - - if (channel.empty()) - throw server_error(server_error::invalid_channel, server->name()); - - server->topic(channel, topic); - client.success("server-topic"); -} - -} // !irccd
--- a/libirccd/irccd/daemon/server_topic_command.hpp Wed Mar 07 17:49:56 2018 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,55 +0,0 @@ -/* - * server_topic_command.hpp -- implementation of server-topic transport command - * - * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef IRCCD_DAEMON_SERVER_TOPIC_COMMAND_HPP -#define IRCCD_DAEMON_SERVER_TOPIC_COMMAND_HPP - -/** - * \file server_topic_command.hpp - * \brief Implementation of server-topic transport command. - */ - -#include "command.hpp" - -namespace irccd { - -/** - * \brief Implementation of server-topic transport command. - * - * Replies: - * - * - server_error::invalid_channel, - * - server_error::invalid_identifier, - * - server_error::not_found. - */ -class server_topic_command : public command { -public: - /** - * \copydoc command::get_name - */ - std::string get_name() const noexcept override; - - /** - * \copydoc command::exec - */ - void exec(irccd& irccd, transport_client& client, const nlohmann::json& args) override; -}; - -} // !irccd - -#endif // !IRCCD_DAEMON_SERVER_TOPIC_COMMAND_HPP
--- a/tests/src/libirccd/command-plugin-config/main.cpp Wed Mar 07 17:49:56 2018 +0100 +++ b/tests/src/libirccd/command-plugin-config/main.cpp Wed Mar 07 21:00:56 2018 +0100 @@ -19,7 +19,7 @@ #define BOOST_TEST_MODULE "plugin-config" #include <boost/test/unit_test.hpp> -#include <irccd/daemon/plugin_config_command.hpp> +#include <irccd/daemon/command/plugin_config_command.hpp> #include <irccd/daemon/service/plugin_service.hpp> #include <irccd/test/command_test.hpp>
--- a/tests/src/libirccd/command-plugin-info/main.cpp Wed Mar 07 17:49:56 2018 +0100 +++ b/tests/src/libirccd/command-plugin-info/main.cpp Wed Mar 07 21:00:56 2018 +0100 @@ -19,7 +19,7 @@ #define BOOST_TEST_MODULE "plugin-info" #include <boost/test/unit_test.hpp> -#include <irccd/daemon/plugin_info_command.hpp> +#include <irccd/daemon/command/plugin_info_command.hpp> #include <irccd/daemon/service/plugin_service.hpp> #include <irccd/test/command_test.hpp>
--- a/tests/src/libirccd/command-plugin-list/main.cpp Wed Mar 07 17:49:56 2018 +0100 +++ b/tests/src/libirccd/command-plugin-list/main.cpp Wed Mar 07 21:00:56 2018 +0100 @@ -19,7 +19,7 @@ #define BOOST_TEST_MODULE "plugin-list" #include <boost/test/unit_test.hpp> -#include <irccd/daemon/plugin_list_command.hpp> +#include <irccd/daemon/command/plugin_list_command.hpp> #include <irccd/daemon/service/plugin_service.hpp> #include <irccd/test/command_test.hpp>
--- a/tests/src/libirccd/command-plugin-load/main.cpp Wed Mar 07 17:49:56 2018 +0100 +++ b/tests/src/libirccd/command-plugin-load/main.cpp Wed Mar 07 21:00:56 2018 +0100 @@ -19,7 +19,7 @@ #define BOOST_TEST_MODULE "plugin-load" #include <boost/test/unit_test.hpp> -#include <irccd/daemon/plugin_load_command.hpp> +#include <irccd/daemon/command/plugin_load_command.hpp> #include <irccd/daemon/service/plugin_service.hpp> #include <irccd/test/command_test.hpp>
--- a/tests/src/libirccd/command-plugin-reload/main.cpp Wed Mar 07 17:49:56 2018 +0100 +++ b/tests/src/libirccd/command-plugin-reload/main.cpp Wed Mar 07 21:00:56 2018 +0100 @@ -19,7 +19,7 @@ #define BOOST_TEST_MODULE "plugin-reload" #include <boost/test/unit_test.hpp> -#include <irccd/daemon/plugin_reload_command.hpp> +#include <irccd/daemon/command/plugin_reload_command.hpp> #include <irccd/daemon/service/plugin_service.hpp> #include <irccd/test/command_test.hpp>
--- a/tests/src/libirccd/command-plugin-unload/main.cpp Wed Mar 07 17:49:56 2018 +0100 +++ b/tests/src/libirccd/command-plugin-unload/main.cpp Wed Mar 07 21:00:56 2018 +0100 @@ -19,7 +19,7 @@ #define BOOST_TEST_MODULE "plugin-unload" #include <boost/test/unit_test.hpp> -#include <irccd/daemon/plugin_unload_command.hpp> +#include <irccd/daemon/command/plugin_unload_command.hpp> #include <irccd/daemon/service/plugin_service.hpp> #include <irccd/test/command_test.hpp>
--- a/tests/src/libirccd/command-rule-add/main.cpp Wed Mar 07 17:49:56 2018 +0100 +++ b/tests/src/libirccd/command-rule-add/main.cpp Wed Mar 07 21:00:56 2018 +0100 @@ -21,8 +21,8 @@ #include <irccd/json_util.hpp> -#include <irccd/daemon/rule_add_command.hpp> -#include <irccd/daemon/rule_list_command.hpp> +#include <irccd/daemon/command/rule_add_command.hpp> +#include <irccd/daemon/command/rule_list_command.hpp> #include <irccd/daemon/service/rule_service.hpp> #include <irccd/test/command_test.hpp>
--- a/tests/src/libirccd/command-rule-edit/main.cpp Wed Mar 07 17:49:56 2018 +0100 +++ b/tests/src/libirccd/command-rule-edit/main.cpp Wed Mar 07 21:00:56 2018 +0100 @@ -21,8 +21,8 @@ #include <irccd/json_util.hpp> -#include <irccd/daemon/rule_edit_command.hpp> -#include <irccd/daemon/rule_info_command.hpp> +#include <irccd/daemon/command/rule_edit_command.hpp> +#include <irccd/daemon/command/rule_info_command.hpp> #include <irccd/daemon/service/rule_service.hpp> #include <irccd/test/command_test.hpp>
--- a/tests/src/libirccd/command-rule-info/main.cpp Wed Mar 07 17:49:56 2018 +0100 +++ b/tests/src/libirccd/command-rule-info/main.cpp Wed Mar 07 21:00:56 2018 +0100 @@ -21,7 +21,7 @@ #include <irccd/json_util.hpp> -#include <irccd/daemon/rule_info_command.hpp> +#include <irccd/daemon/command/rule_info_command.hpp> #include <irccd/daemon/service/rule_service.hpp> #include <irccd/test/command_test.hpp>
--- a/tests/src/libirccd/command-rule-list/main.cpp Wed Mar 07 17:49:56 2018 +0100 +++ b/tests/src/libirccd/command-rule-list/main.cpp Wed Mar 07 21:00:56 2018 +0100 @@ -21,7 +21,7 @@ #include <irccd/json_util.hpp> -#include <irccd/daemon/rule_list_command.hpp> +#include <irccd/daemon/command/rule_list_command.hpp> #include <irccd/daemon/service/rule_service.hpp> #include <irccd/test/command_test.hpp>
--- a/tests/src/libirccd/command-rule-move/main.cpp Wed Mar 07 17:49:56 2018 +0100 +++ b/tests/src/libirccd/command-rule-move/main.cpp Wed Mar 07 21:00:56 2018 +0100 @@ -21,8 +21,8 @@ #include <irccd/json_util.hpp> -#include <irccd/daemon/rule_list_command.hpp> -#include <irccd/daemon/rule_move_command.hpp> +#include <irccd/daemon/command/rule_list_command.hpp> +#include <irccd/daemon/command/rule_move_command.hpp> #include <irccd/daemon/service/rule_service.hpp> #include <irccd/test/command_test.hpp>
--- a/tests/src/libirccd/command-rule-remove/main.cpp Wed Mar 07 17:49:56 2018 +0100 +++ b/tests/src/libirccd/command-rule-remove/main.cpp Wed Mar 07 21:00:56 2018 +0100 @@ -21,8 +21,8 @@ #include <irccd/json_util.hpp> -#include <irccd/daemon/rule_remove_command.hpp> -#include <irccd/daemon/rule_list_command.hpp> +#include <irccd/daemon/command/rule_remove_command.hpp> +#include <irccd/daemon/command/rule_list_command.hpp> #include <irccd/daemon/service/rule_service.hpp> #include <irccd/test/command_test.hpp>
--- a/tests/src/libirccd/command-server-connect/main.cpp Wed Mar 07 17:49:56 2018 +0100 +++ b/tests/src/libirccd/command-server-connect/main.cpp Wed Mar 07 21:00:56 2018 +0100 @@ -19,7 +19,7 @@ #define BOOST_TEST_MODULE "server-connect" #include <boost/test/unit_test.hpp> -#include <irccd/daemon/server_connect_command.hpp> +#include <irccd/daemon/command/server_connect_command.hpp> #include <irccd/daemon/service/server_service.hpp> #include <irccd/test/command_test.hpp>
--- a/tests/src/libirccd/command-server-disconnect/main.cpp Wed Mar 07 17:49:56 2018 +0100 +++ b/tests/src/libirccd/command-server-disconnect/main.cpp Wed Mar 07 21:00:56 2018 +0100 @@ -19,7 +19,7 @@ #define BOOST_TEST_MODULE "server-disconnect" #include <boost/test/unit_test.hpp> -#include <irccd/daemon/server_disconnect_command.hpp> +#include <irccd/daemon/command/server_disconnect_command.hpp> #include <irccd/daemon/service/server_service.hpp> #include <irccd/test/journal_server.hpp>
--- a/tests/src/libirccd/command-server-info/main.cpp Wed Mar 07 17:49:56 2018 +0100 +++ b/tests/src/libirccd/command-server-info/main.cpp Wed Mar 07 21:00:56 2018 +0100 @@ -19,7 +19,7 @@ #define BOOST_TEST_MODULE "server-info" #include <boost/test/unit_test.hpp> -#include <irccd/daemon/server_info_command.hpp> +#include <irccd/daemon/command/server_info_command.hpp> #include <irccd/daemon/service/server_service.hpp> #include <irccd/test/command_test.hpp>
--- a/tests/src/libirccd/command-server-invite/main.cpp Wed Mar 07 17:49:56 2018 +0100 +++ b/tests/src/libirccd/command-server-invite/main.cpp Wed Mar 07 21:00:56 2018 +0100 @@ -19,7 +19,7 @@ #define BOOST_TEST_MODULE "server-invite" #include <boost/test/unit_test.hpp> -#include <irccd/daemon/server_invite_command.hpp> +#include <irccd/daemon/command/server_invite_command.hpp> #include <irccd/daemon/service/server_service.hpp> #include <irccd/test/command_test.hpp>
--- a/tests/src/libirccd/command-server-join/main.cpp Wed Mar 07 17:49:56 2018 +0100 +++ b/tests/src/libirccd/command-server-join/main.cpp Wed Mar 07 21:00:56 2018 +0100 @@ -19,7 +19,7 @@ #define BOOST_TEST_MODULE "server-join" #include <boost/test/unit_test.hpp> -#include <irccd/daemon/server_join_command.hpp> +#include <irccd/daemon/command/server_join_command.hpp> #include <irccd/daemon/service/server_service.hpp> #include <irccd/test/command_test.hpp>
--- a/tests/src/libirccd/command-server-kick/main.cpp Wed Mar 07 17:49:56 2018 +0100 +++ b/tests/src/libirccd/command-server-kick/main.cpp Wed Mar 07 21:00:56 2018 +0100 @@ -19,7 +19,7 @@ #define BOOST_TEST_MODULE "server-kick" #include <boost/test/unit_test.hpp> -#include <irccd/daemon/server_kick_command.hpp> +#include <irccd/daemon/command/server_kick_command.hpp> #include <irccd/daemon/service/server_service.hpp> #include <irccd/test/command_test.hpp>
--- a/tests/src/libirccd/command-server-list/main.cpp Wed Mar 07 17:49:56 2018 +0100 +++ b/tests/src/libirccd/command-server-list/main.cpp Wed Mar 07 21:00:56 2018 +0100 @@ -19,7 +19,7 @@ #define BOOST_TEST_MODULE "server-list" #include <boost/test/unit_test.hpp> -#include <irccd/daemon/server_list_command.hpp> +#include <irccd/daemon/command/server_list_command.hpp> #include <irccd/daemon/service/server_service.hpp> #include <irccd/test/command_test.hpp>
--- a/tests/src/libirccd/command-server-me/main.cpp Wed Mar 07 17:49:56 2018 +0100 +++ b/tests/src/libirccd/command-server-me/main.cpp Wed Mar 07 21:00:56 2018 +0100 @@ -19,7 +19,7 @@ #define BOOST_TEST_MODULE "server-me" #include <boost/test/unit_test.hpp> -#include <irccd/daemon/server_me_command.hpp> +#include <irccd/daemon/command/server_me_command.hpp> #include <irccd/daemon/service/server_service.hpp> #include <irccd/test/command_test.hpp>
--- a/tests/src/libirccd/command-server-message/main.cpp Wed Mar 07 17:49:56 2018 +0100 +++ b/tests/src/libirccd/command-server-message/main.cpp Wed Mar 07 21:00:56 2018 +0100 @@ -19,7 +19,7 @@ #define BOOST_TEST_MODULE "server-message" #include <boost/test/unit_test.hpp> -#include <irccd/daemon/server_message_command.hpp> +#include <irccd/daemon/command/server_message_command.hpp> #include <irccd/daemon/service/server_service.hpp> #include <irccd/test/command_test.hpp>
--- a/tests/src/libirccd/command-server-mode/main.cpp Wed Mar 07 17:49:56 2018 +0100 +++ b/tests/src/libirccd/command-server-mode/main.cpp Wed Mar 07 21:00:56 2018 +0100 @@ -19,7 +19,7 @@ #define BOOST_TEST_MODULE "server-mode" #include <boost/test/unit_test.hpp> -#include <irccd/daemon/server_mode_command.hpp> +#include <irccd/daemon/command/server_mode_command.hpp> #include <irccd/daemon/service/server_service.hpp> #include <irccd/test/command_test.hpp>
--- a/tests/src/libirccd/command-server-nick/main.cpp Wed Mar 07 17:49:56 2018 +0100 +++ b/tests/src/libirccd/command-server-nick/main.cpp Wed Mar 07 21:00:56 2018 +0100 @@ -19,7 +19,7 @@ #define BOOST_TEST_MODULE "server-nick" #include <boost/test/unit_test.hpp> -#include <irccd/daemon/server_nick_command.hpp> +#include <irccd/daemon/command/server_nick_command.hpp> #include <irccd/daemon/service/server_service.hpp> #include <irccd/test/command_test.hpp>
--- a/tests/src/libirccd/command-server-notice/main.cpp Wed Mar 07 17:49:56 2018 +0100 +++ b/tests/src/libirccd/command-server-notice/main.cpp Wed Mar 07 21:00:56 2018 +0100 @@ -19,7 +19,7 @@ #define BOOST_TEST_MODULE "server-notice" #include <boost/test/unit_test.hpp> -#include <irccd/daemon/server_notice_command.hpp> +#include <irccd/daemon/command/server_notice_command.hpp> #include <irccd/daemon/service/server_service.hpp> #include <irccd/test/command_test.hpp>
--- a/tests/src/libirccd/command-server-part/main.cpp Wed Mar 07 17:49:56 2018 +0100 +++ b/tests/src/libirccd/command-server-part/main.cpp Wed Mar 07 21:00:56 2018 +0100 @@ -19,7 +19,7 @@ #define BOOST_TEST_MODULE "server-part" #include <boost/test/unit_test.hpp> -#include <irccd/daemon/server_part_command.hpp> +#include <irccd/daemon/command/server_part_command.hpp> #include <irccd/daemon/service/server_service.hpp> #include <irccd/test/command_test.hpp>
--- a/tests/src/libirccd/command-server-reconnect/main.cpp Wed Mar 07 17:49:56 2018 +0100 +++ b/tests/src/libirccd/command-server-reconnect/main.cpp Wed Mar 07 21:00:56 2018 +0100 @@ -19,7 +19,7 @@ #define BOOST_TEST_MODULE "server-reconnect" #include <boost/test/unit_test.hpp> -#include <irccd/daemon/server_reconnect_command.hpp> +#include <irccd/daemon/command/server_reconnect_command.hpp> #include <irccd/daemon/service/server_service.hpp> #include <irccd/test/command_test.hpp>
--- a/tests/src/libirccd/command-server-topic/main.cpp Wed Mar 07 17:49:56 2018 +0100 +++ b/tests/src/libirccd/command-server-topic/main.cpp Wed Mar 07 21:00:56 2018 +0100 @@ -19,7 +19,7 @@ #define BOOST_TEST_MODULE "server-topic" #include <boost/test/unit_test.hpp> -#include <irccd/daemon/server_topic_command.hpp> +#include <irccd/daemon/command/server_topic_command.hpp> #include <irccd/daemon/service/server_service.hpp> #include <irccd/test/command_test.hpp>