summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/xmpp/adhoc_command.hpp45
-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.hpp13
-rw-r--r--src/xmpp/biboumi_component.cpp1
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>