diff options
-rw-r--r-- | src/xmpp/adhoc_command.hpp | 45 | ||||
-rw-r--r-- | src/xmpp/biboumi_adhoc_commands.cpp (renamed from src/xmpp/adhoc_command.cpp) | 107 | ||||
-rw-r--r-- | src/xmpp/biboumi_adhoc_commands.hpp | 13 | ||||
-rw-r--r-- | src/xmpp/biboumi_component.cpp | 1 |
4 files changed, 15 insertions, 151 deletions
diff --git a/src/xmpp/adhoc_command.hpp b/src/xmpp/adhoc_command.hpp deleted file mode 100644 index 622d6b9..0000000 --- a/src/xmpp/adhoc_command.hpp +++ /dev/null @@ -1,45 +0,0 @@ -#ifndef ADHOC_COMMAND_HPP -# define ADHOC_COMMAND_HPP - -/** - * Describe an ad-hoc command. - * - * Can only have zero or one step for now. When execution is requested, it - * can return a result immediately, or provide a form to be filled, and - * provide a result once the filled form is received. - */ - -#include <xmpp/adhoc_session.hpp> - -#include <functional> -#include <string> - -class AdhocCommand -{ - friend class AdhocSession; -public: - AdhocCommand(std::vector<AdhocStep>&& callback, const std::string& name, const bool admin_only); - ~AdhocCommand(); - - const std::string name; - - bool is_admin_only() const; - -private: - /** - * A command may have one or more steps. Each step is a different - * callback, inserting things into a <command/> XmlNode and calling - * methods of an AdhocSession. - */ - std::vector<AdhocStep> callbacks; - const bool admin_only; -}; - -void PingStep1(XmppComponent*, AdhocSession& session, XmlNode& command_node); -void HelloStep1(XmppComponent*, AdhocSession& session, XmlNode& command_node); -void HelloStep2(XmppComponent*, AdhocSession& session, XmlNode& command_node); -void DisconnectUserStep1(XmppComponent*, AdhocSession& session, XmlNode& command_node); -void DisconnectUserStep2(XmppComponent*, AdhocSession& session, XmlNode& command_node); -void Reload(XmppComponent*, AdhocSession& session, XmlNode& command_node); - -#endif // ADHOC_COMMAND_HPP diff --git a/src/xmpp/adhoc_command.cpp b/src/xmpp/biboumi_adhoc_commands.cpp index ba20eba..089eebf 100644 --- a/src/xmpp/adhoc_command.cpp +++ b/src/xmpp/biboumi_adhoc_commands.cpp @@ -1,101 +1,7 @@ -#include <xmpp/adhoc_command.hpp> +#include <xmpp/biboumi_adhoc_commands.hpp> #include <xmpp/biboumi_component.hpp> - #include <bridge/bridge.hpp> -#include <utils/reload.hpp> - -using namespace std::string_literals; - -AdhocCommand::AdhocCommand(std::vector<AdhocStep>&& callbacks, const std::string& name, const bool admin_only): - name(name), - callbacks(std::move(callbacks)), - admin_only(admin_only) -{ -} - -AdhocCommand::~AdhocCommand() -{ -} - -bool AdhocCommand::is_admin_only() const -{ - return this->admin_only; -} - -void PingStep1(XmppComponent*, AdhocSession&, XmlNode& command_node) -{ - XmlNode note("note"); - note["type"] = "info"; - note.set_inner("Pong"); - note.close(); - command_node.add_child(std::move(note)); -} - -void HelloStep1(XmppComponent*, AdhocSession&, XmlNode& command_node) -{ - XmlNode x("jabber:x:data:x"); - x["type"] = "form"; - XmlNode title("title"); - title.set_inner("Configure your name."); - title.close(); - x.add_child(std::move(title)); - XmlNode instructions("instructions"); - instructions.set_inner("Please provide your name."); - instructions.close(); - x.add_child(std::move(instructions)); - XmlNode name_field("field"); - name_field["var"] = "name"; - name_field["type"] = "text-single"; - name_field["label"] = "Your name"; - XmlNode required("required"); - required.close(); - name_field.add_child(std::move(required)); - name_field.close(); - x.add_child(std::move(name_field)); - x.close(); - command_node.add_child(std::move(x)); -} - -void HelloStep2(XmppComponent*, AdhocSession& session, XmlNode& command_node) -{ - // Find out if the name was provided in the form. - XmlNode* x = command_node.get_child("x", "jabber:x:data"); - if (x) - { - XmlNode* name_field = nullptr; - for (XmlNode* field: x->get_children("field", "jabber:x:data")) - if (field->get_tag("var") == "name") - { - name_field = field; - break; - } - if (name_field) - { - XmlNode* value = name_field->get_child("value", "jabber:x:data"); - if (value) - { - XmlNode note("note"); - note["type"] = "info"; - note.set_inner("Hello "s + value->get_inner() + "!"s); - note.close(); - command_node.delete_all_children(); - command_node.add_child(std::move(note)); - return; - } - } - } - command_node.delete_all_children(); - XmlNode error(ADHOC_NS":error"); - error["type"] = "modify"; - XmlNode condition(STANZA_NS":bad-request"); - condition.close(); - error.add_child(std::move(condition)); - error.close(); - command_node.add_child(std::move(error)); - session.terminate(); -} - void DisconnectUserStep1(XmppComponent* xmpp_component, AdhocSession&, XmlNode& command_node) { auto biboumi_component = static_cast<BiboumiComponent*>(xmpp_component); @@ -203,14 +109,3 @@ void DisconnectUserStep2(XmppComponent* xmpp_component, AdhocSession& session, X command_node.add_child(std::move(error)); session.terminate(); } - -void Reload(XmppComponent*, AdhocSession&, XmlNode& command_node) -{ - ::reload_process(); - command_node.delete_all_children(); - XmlNode note("note"); - note["type"] = "info"; - note.set_inner("Configuration reloaded."); - note.close(); - command_node.add_child(std::move(note)); -} diff --git a/src/xmpp/biboumi_adhoc_commands.hpp b/src/xmpp/biboumi_adhoc_commands.hpp new file mode 100644 index 0000000..30f713a --- /dev/null +++ b/src/xmpp/biboumi_adhoc_commands.hpp @@ -0,0 +1,13 @@ +#ifndef BIBOUMI_ADHOC_COMMANDS_HPP_INCLUDED +#define BIBOUMI_ADHOC_COMMANDS_HPP_INCLUDED + +#include <xmpp/adhoc_command.hpp> +#include <xmpp/adhoc_session.hpp> +#include <xmpp/xmpp_stanza.hpp> + +class XmppComponent; + +void DisconnectUserStep1(XmppComponent*, AdhocSession& session, XmlNode& command_node); +void DisconnectUserStep2(XmppComponent*, AdhocSession& session, XmlNode& command_node); + +#endif /* BIBOUMI_ADHOC_COMMANDS_HPP_INCLUDED */ diff --git a/src/xmpp/biboumi_component.cpp b/src/xmpp/biboumi_component.cpp index 2ecf247..ba8cb49 100644 --- a/src/xmpp/biboumi_component.cpp +++ b/src/xmpp/biboumi_component.cpp @@ -5,6 +5,7 @@ #include <utils/tolower.hpp> #include <logger/logger.hpp> #include <xmpp/adhoc_command.hpp> +#include <xmpp/biboumi_adhoc_commands.hpp> #include <bridge/list_element.hpp> #include <config/config.hpp> #include <xmpp/jid.hpp> |