Introduce the realname_from_jid option
When set to true, the realname and username are extracted (by default) from the user’s JID fix #3136
This commit is contained in:
@@ -83,6 +83,19 @@ The configuration file uses a simple format of the form
|
|||||||
able to use the ad-hoc commands that lets them configure their realname and
|
able to use the ad-hoc commands that lets them configure their realname and
|
||||||
username.
|
username.
|
||||||
|
|
||||||
|
`realname_from_jid`
|
||||||
|
|
||||||
|
If this option is set to “true”, the realname and username of each biboumi
|
||||||
|
user will be extracted from their JID. The realname is their bare JID, and
|
||||||
|
the username is the node-part of their JID. Note that if
|
||||||
|
`realname_customization` is “true”, each user will still be able to
|
||||||
|
customize their realname and username, this option just decides the default
|
||||||
|
realname and username.
|
||||||
|
|
||||||
|
If this option is set to “false” (the default value), the realname and
|
||||||
|
username of each user will be set to the nick they used to connect to the
|
||||||
|
IRC server.
|
||||||
|
|
||||||
`log_file`
|
`log_file`
|
||||||
|
|
||||||
A filename into which logs are written. If none is provided, the logs are
|
A filename into which logs are written. If none is provided, the logs are
|
||||||
|
|||||||
+15
-4
@@ -90,7 +90,7 @@ Xmpp::body Bridge::make_xmpp_body(const std::string& str)
|
|||||||
return irc_format_to_xhtmlim(res);
|
return irc_format_to_xhtmlim(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
IrcClient* Bridge::get_irc_client(const std::string& hostname, const std::string& username)
|
IrcClient* Bridge::make_irc_client(const std::string& hostname, const std::string& nickname)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -98,7 +98,18 @@ IrcClient* Bridge::get_irc_client(const std::string& hostname, const std::string
|
|||||||
}
|
}
|
||||||
catch (const std::out_of_range& exception)
|
catch (const std::out_of_range& exception)
|
||||||
{
|
{
|
||||||
this->irc_clients.emplace(hostname, std::make_shared<IrcClient>(this->poller, hostname, username, this));
|
auto username = nickname;
|
||||||
|
auto realname = nickname;
|
||||||
|
if (Config::get("realname_from_jid", "false") == "true")
|
||||||
|
{
|
||||||
|
Jid jid(this->user_jid);
|
||||||
|
username = jid.local;
|
||||||
|
realname = this->get_bare_jid();
|
||||||
|
}
|
||||||
|
this->irc_clients.emplace(hostname,
|
||||||
|
std::make_shared<IrcClient>(this->poller, hostname,
|
||||||
|
nickname, username,
|
||||||
|
realname, this));
|
||||||
std::shared_ptr<IrcClient> irc = this->irc_clients.at(hostname);
|
std::shared_ptr<IrcClient> irc = this->irc_clients.at(hostname);
|
||||||
return irc.get();
|
return irc.get();
|
||||||
}
|
}
|
||||||
@@ -128,9 +139,9 @@ IrcClient* Bridge::find_irc_client(const std::string& hostname)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Bridge::join_irc_channel(const Iid& iid, const std::string& username, const std::string& password)
|
bool Bridge::join_irc_channel(const Iid& iid, const std::string& nickname, const std::string& password)
|
||||||
{
|
{
|
||||||
IrcClient* irc = this->get_irc_client(iid.get_server(), username);
|
IrcClient* irc = this->make_irc_client(iid.get_server(), nickname);
|
||||||
if (iid.get_local().empty())
|
if (iid.get_local().empty())
|
||||||
{ // Join the dummy channel
|
{ // Join the dummy channel
|
||||||
if (irc->is_welcomed())
|
if (irc->is_welcomed())
|
||||||
|
|||||||
@@ -60,7 +60,8 @@ public:
|
|||||||
* Try to join an irc_channel, does nothing and return true if the channel
|
* Try to join an irc_channel, does nothing and return true if the channel
|
||||||
* was already joined.
|
* was already joined.
|
||||||
*/
|
*/
|
||||||
bool join_irc_channel(const Iid& iid, const std::string& username, const std::string& password);
|
bool join_irc_channel(const Iid& iid, const std::string& nickname, const std::string& password);
|
||||||
|
|
||||||
void send_channel_message(const Iid& iid, const std::string& body);
|
void send_channel_message(const Iid& iid, const std::string& body);
|
||||||
void send_private_message(const Iid& iid, const std::string& body, const std::string& type="PRIVMSG");
|
void send_private_message(const Iid& iid, const std::string& body, const std::string& type="PRIVMSG");
|
||||||
void send_raw_message(const std::string& hostname, const std::string& body);
|
void send_raw_message(const std::string& hostname, const std::string& body);
|
||||||
@@ -193,7 +194,7 @@ private:
|
|||||||
* username in this case) if none is found, and connect that newly-created
|
* username in this case) if none is found, and connect that newly-created
|
||||||
* client immediately.
|
* client immediately.
|
||||||
*/
|
*/
|
||||||
IrcClient* get_irc_client(const std::string& hostname, const std::string& username);
|
IrcClient* make_irc_client(const std::string& hostname, const std::string& nickname);
|
||||||
/**
|
/**
|
||||||
* This version does not create the IrcClient if it does not exist, throws
|
* This version does not create the IrcClient if it does not exist, throws
|
||||||
* a IRCServerNotConnected error in that case.
|
* a IRCServerNotConnected error in that case.
|
||||||
|
|||||||
@@ -24,12 +24,14 @@ using namespace std::string_literals;
|
|||||||
using namespace std::chrono_literals;
|
using namespace std::chrono_literals;
|
||||||
|
|
||||||
|
|
||||||
IrcClient::IrcClient(std::shared_ptr<Poller> poller, const std::string& hostname, const std::string& username, Bridge* bridge):
|
IrcClient::IrcClient(std::shared_ptr<Poller> poller, const std::string& hostname,
|
||||||
|
const std::string& nickname, const std::string& username,
|
||||||
|
const std::string& realname, Bridge* bridge):
|
||||||
TCPSocketHandler(poller),
|
TCPSocketHandler(poller),
|
||||||
hostname(hostname),
|
hostname(hostname),
|
||||||
username(username),
|
username(username),
|
||||||
realname(username),
|
realname(realname),
|
||||||
current_nick(username),
|
current_nick(nickname),
|
||||||
bridge(bridge),
|
bridge(bridge),
|
||||||
welcomed(false),
|
welcomed(false),
|
||||||
chanmodes({"", "", "", ""}),
|
chanmodes({"", "", "", ""}),
|
||||||
|
|||||||
@@ -25,7 +25,9 @@ class Bridge;
|
|||||||
class IrcClient: public TCPSocketHandler
|
class IrcClient: public TCPSocketHandler
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
explicit IrcClient(std::shared_ptr<Poller> poller, const std::string& hostname, const std::string& username, Bridge* bridge);
|
explicit IrcClient(std::shared_ptr<Poller> poller, const std::string& hostname,
|
||||||
|
const std::string& nickname, const std::string& username,
|
||||||
|
const std::string& realname, Bridge* bridge);
|
||||||
~IrcClient();
|
~IrcClient();
|
||||||
/**
|
/**
|
||||||
* Connect to the IRC server
|
* Connect to the IRC server
|
||||||
|
|||||||
Reference in New Issue
Block a user