summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlouiz’ <louiz@louiz.org>2016-04-25 11:29:52 +0200
committerlouiz’ <louiz@louiz.org>2016-04-27 11:03:52 +0200
commit1e56c59e8241dbfc6a2526c371cc2e894f9d0f18 (patch)
tree5f4e2de755e26e751f03e09c8ad02ebb17a31b09
parent82e0cf99b0dd0ba48f31060656d03a9586b939c6 (diff)
downloadbiboumi-1e56c59e8241dbfc6a2526c371cc2e894f9d0f18.tar.gz
biboumi-1e56c59e8241dbfc6a2526c371cc2e894f9d0f18.tar.bz2
biboumi-1e56c59e8241dbfc6a2526c371cc2e894f9d0f18.tar.xz
biboumi-1e56c59e8241dbfc6a2526c371cc2e894f9d0f18.zip
Include the Configure ad-hoc command on biboumi's JID for fixed_irc_server
Because a jid like “freenode.example.org” is both the JID for the configured IRC server, and biboumi’s JID. fix #3175
-rw-r--r--louloulibs/xmpp/adhoc_command.cpp4
-rw-r--r--louloulibs/xmpp/adhoc_command.hpp6
-rw-r--r--louloulibs/xmpp/xmpp_component.cpp4
-rw-r--r--src/xmpp/biboumi_adhoc_commands.cpp14
-rw-r--r--src/xmpp/biboumi_component.cpp11
-rw-r--r--tests/end_to_end/__main__.py25
6 files changed, 53 insertions, 11 deletions
diff --git a/louloulibs/xmpp/adhoc_command.cpp b/louloulibs/xmpp/adhoc_command.cpp
index 8a8bcff..99701d7 100644
--- a/louloulibs/xmpp/adhoc_command.cpp
+++ b/louloulibs/xmpp/adhoc_command.cpp
@@ -11,10 +11,6 @@ AdhocCommand::AdhocCommand(std::vector<AdhocStep>&& callbacks, const std::string
{
}
-AdhocCommand::~AdhocCommand()
-{
-}
-
bool AdhocCommand::is_admin_only() const
{
return this->admin_only;
diff --git a/louloulibs/xmpp/adhoc_command.hpp b/louloulibs/xmpp/adhoc_command.hpp
index a2e033a..1c4e4de 100644
--- a/louloulibs/xmpp/adhoc_command.hpp
+++ b/louloulibs/xmpp/adhoc_command.hpp
@@ -19,7 +19,11 @@ class AdhocCommand
friend class AdhocSession;
public:
AdhocCommand(std::vector<AdhocStep>&& callback, const std::string& name, const bool admin_only);
- ~AdhocCommand();
+ ~AdhocCommand() = default;
+ AdhocCommand(const AdhocCommand&) = default;
+ AdhocCommand(AdhocCommand&&) = default;
+ AdhocCommand& operator=(AdhocCommand&&) = delete;
+ AdhocCommand& operator=(const AdhocCommand&) = delete;
const std::string name;
diff --git a/louloulibs/xmpp/xmpp_component.cpp b/louloulibs/xmpp/xmpp_component.cpp
index 8a0ca52..b92d9a3 100644
--- a/louloulibs/xmpp/xmpp_component.cpp
+++ b/louloulibs/xmpp/xmpp_component.cpp
@@ -591,7 +591,9 @@ void XmppComponent::send_version(const std::string& id, const std::string& jid_t
this->send_stanza(iq);
}
-void XmppComponent::send_adhoc_commands_list(const std::string& id, const std::string& requester_jid, const std::string& from_jid, const bool with_admin_only, const AdhocCommandsHandler& adhoc_handler)
+void XmppComponent::send_adhoc_commands_list(const std::string& id, const std::string& requester_jid,
+ const std::string& from_jid,
+ const bool with_admin_only, const AdhocCommandsHandler& adhoc_handler)
{
Stanza iq("iq");
iq["type"] = "result";
diff --git a/src/xmpp/biboumi_adhoc_commands.cpp b/src/xmpp/biboumi_adhoc_commands.cpp
index 7c157cb..eec930d 100644
--- a/src/xmpp/biboumi_adhoc_commands.cpp
+++ b/src/xmpp/biboumi_adhoc_commands.cpp
@@ -118,16 +118,19 @@ void ConfigureIrcServerStep1(XmppComponent&, AdhocSession& session, XmlNode& com
{
const Jid owner(session.get_owner_jid());
const Jid target(session.get_target_jid());
+ std::string server_domain;
+ if ((server_domain = Config::get("fixed_irc_server", "")).empty())
+ server_domain = target.local;
auto options = Database::get_irc_server_options(owner.local + "@" + owner.domain,
- target.local);
+ server_domain);
XmlNode x("jabber:x:data:x");
x["type"] = "form";
XmlNode title("title");
- title.set_inner("Configure the IRC server "s + target.local);
+ title.set_inner("Configure the IRC server "s + server_domain);
x.add_child(std::move(title));
XmlNode instructions("instructions");
- instructions.set_inner("Edit the form, to configure the settings of the IRC server "s + target.local);
+ instructions.set_inner("Edit the form, to configure the settings of the IRC server "s + server_domain);
x.add_child(std::move(instructions));
XmlNode required("required");
@@ -285,8 +288,11 @@ void ConfigureIrcServerStep2(XmppComponent&, AdhocSession& session, XmlNode& com
{
const Jid owner(session.get_owner_jid());
const Jid target(session.get_target_jid());
+ std::string server_domain;
+ if ((server_domain = Config::get("fixed_irc_server", "")).empty())
+ server_domain = target.local;
auto options = Database::get_irc_server_options(owner.local + "@" + owner.domain,
- target.local);
+ server_domain);
for (const XmlNode* field: x->get_children("field", "jabber:x:data"))
{
const XmlNode* value = field->get_child("value", "jabber:x:data");
diff --git a/src/xmpp/biboumi_component.cpp b/src/xmpp/biboumi_component.cpp
index 65fbfc5..5b1d0e0 100644
--- a/src/xmpp/biboumi_component.cpp
+++ b/src/xmpp/biboumi_component.cpp
@@ -61,9 +61,18 @@ BiboumiComponent::BiboumiComponent(std::shared_ptr<Poller> poller, const std::st
{"reload", AdhocCommand({&Reload}, "Reload biboumi’s configuration", true)}
};
+#ifdef USE_DATABASE
+ AdhocCommand configure_server_command({&ConfigureIrcServerStep1, &ConfigureIrcServerStep2}, "Configure a few settings for that IRC server", false);
+ if (!Config::get("fixed_irc_server", "").empty())
+ {
+ this->adhoc_commands_handler.get_commands().emplace(std::make_pair("configure",
+ configure_server_command));
+ }
+#endif
+
this->irc_server_adhoc_commands_handler.get_commands() = {
#ifdef USE_DATABASE
- {"configure", AdhocCommand({&ConfigureIrcServerStep1, &ConfigureIrcServerStep2}, "Configure a few settings for that IRC server", false)},
+ {"configure", configure_server_command},
#endif
};
this->irc_channel_adhoc_commands_handler.get_commands() = {
diff --git a/tests/end_to_end/__main__.py b/tests/end_to_end/__main__.py
index 786c4e9..fbfd3ce 100644
--- a/tests/end_to_end/__main__.py
+++ b/tests/end_to_end/__main__.py
@@ -514,6 +514,31 @@ if __name__ == '__main__':
partial(expect_stanza, ("/iq[@type='result']/disco_items:query[@node='http://jabber.org/protocol/commands']",
"/iq/disco_items:query/disco_items:item[5]")),
], conf='fixed_server'),
+
+
+ Scenario("list_adhoc_irc",
+ [
+ handshake_sequence(),
+ partial(send_stanza, "<iq type='get' id='idwhatever' from='{jid_one}/{resource_one}' to='{irc_host_one}@{biboumi_host}'><query xmlns='http://jabber.org/protocol/disco#items' node='http://jabber.org/protocol/commands' /></iq>"),
+ partial(expect_stanza, ("/iq[@type='result']/disco_items:query[@node='http://jabber.org/protocol/commands']",
+ "/iq/disco_items:query/disco_items:item[1]")),
+ ]),
+ Scenario("list_adhoc_irc_fixed_server",
+ [
+ handshake_sequence(),
+ partial(send_stanza, "<iq type='get' id='idwhatever' from='{jid_one}/{resource_one}' to='{biboumi_host}'><query xmlns='http://jabber.org/protocol/disco#items' node='http://jabber.org/protocol/commands' /></iq>"),
+ partial(expect_stanza, ("/iq[@type='result']/disco_items:query[@node='http://jabber.org/protocol/commands']",
+ "/iq/disco_items:query/disco_items:item[4]")),
+ ], conf='fixed_server'),
+ Scenario("list_admin_adhoc_irc_fixed_server",
+ [
+ handshake_sequence(),
+ partial(send_stanza, "<iq type='get' id='idwhatever' from='{jid_admin}/{resource_one}' to='{biboumi_host}'><query xmlns='http://jabber.org/protocol/disco#items' node='http://jabber.org/protocol/commands' /></iq>"),
+ partial(expect_stanza, ("/iq[@type='result']/disco_items:query[@node='http://jabber.org/protocol/commands']",
+ "/iq/disco_items:query/disco_items:item[6]")),
+ ], conf='fixed_server'),
+
+
)
failures = 0