diff --git a/source/lobby/IXmppClient.h b/source/lobby/IXmppClient.h index fb241aff48..f275b34de0 100644 --- a/source/lobby/IXmppClient.h +++ b/source/lobby/IXmppClient.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2021 Wildfire Games. +/* Copyright (C) 2022 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -43,6 +43,7 @@ public: virtual void SetNick(const std::string& nick) = 0; virtual std::string GetNick() const = 0; virtual std::string GetJID() const = 0; + virtual void ChangePassword(const std::string& newPassword) = 0; virtual void kick(const std::string& nick, const std::string& reason) = 0; virtual void ban(const std::string& nick, const std::string& reason) = 0; virtual void SetPresence(const std::string& presence) = 0; diff --git a/source/lobby/XmppClient.cpp b/source/lobby/XmppClient.cpp index e1279c2dec..6571d616ad 100644 --- a/source/lobby/XmppClient.cpp +++ b/source/lobby/XmppClient.cpp @@ -1,4 +1,4 @@ -/* Copyright (C) 2021 Wildfire Games. +/* Copyright (C) 2022 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -81,6 +81,7 @@ XmppClient::XmppClient(const ScriptInterface* scriptInterface, const std::string m_client(nullptr), m_mucRoom(nullptr), m_registration(nullptr), + m_regOpt(regOpt), m_username(sUsername), m_password(sPassword), m_room(sRoom), @@ -151,6 +152,9 @@ XmppClient::XmppClient(const ScriptInterface* scriptInterface, const std::string m_client->registerMessageHandler(this); + m_registration = new glooxwrapper::Registration(m_client); + m_registration->registerRegistrationHandler(this); + // Uncomment to see the raw stanzas //m_client->getWrapped()->logInstance().registerLogHandler( gloox::LogLevelDebug, gloox::LogAreaAll, this ); @@ -161,12 +165,6 @@ XmppClient::XmppClient(const ScriptInterface* scriptInterface, const std::string // Get room history. m_mucRoom->setRequestHistory(historyRequestSize, gloox::MUCRoom::HistoryMaxStanzas); } - else - { - // Registration - m_registration = new glooxwrapper::Registration(m_client); - m_registration->registerRegistrationHandler(this); - } m_sessionManager = new glooxwrapper::SessionManager(m_client, this); // Register plugins to allow gloox parse them in incoming sessions @@ -254,7 +252,7 @@ void XmppClient::onConnect() m_mucRoom->join(); } - if (m_registration) + if (m_regOpt) m_registration->fetchRegistrationFields(); } @@ -1193,6 +1191,17 @@ std::string XmppClient::GetJID() const return m_client->getJID().to_string(); } +/** + * Change password for authenticated user. + * + * @param newPassword New password + */ +void XmppClient::ChangePassword(const std::string& newPassword) +{ + if (!newPassword.empty()) + m_registration->changePassword(m_username, newPassword); +} + /** * Kick a player from the current room. * diff --git a/source/lobby/XmppClient.h b/source/lobby/XmppClient.h index 31dfe478f1..c5c90e9b65 100644 --- a/source/lobby/XmppClient.h +++ b/source/lobby/XmppClient.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2021 Wildfire Games. +/* Copyright (C) 2022 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -63,6 +63,7 @@ private: gloox::CertStatus m_certStatus; bool m_initialLoadComplete; bool m_isConnected; + bool m_regOpt; public: // Basic @@ -93,6 +94,7 @@ public: void SetNick(const std::string& nick); std::string GetNick() const; std::string GetJID() const; + void ChangePassword(const std::string& newPassword); void kick(const std::string& nick, const std::string& reason); void ban(const std::string& nick, const std::string& reason); void SetPresence(const std::string& presence); diff --git a/source/lobby/glooxwrapper/glooxwrapper.cpp b/source/lobby/glooxwrapper/glooxwrapper.cpp index f7ad6e74d3..bdee3ed8b9 100644 --- a/source/lobby/glooxwrapper/glooxwrapper.cpp +++ b/source/lobby/glooxwrapper/glooxwrapper.cpp @@ -1,4 +1,4 @@ -/* Copyright (C) 2021 Wildfire Games. +/* Copyright (C) 2022 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -697,6 +697,11 @@ bool glooxwrapper::Registration::createAccount(int fields, const glooxwrapper::R return m_Wrapped->createAccount(fields, valuesUnwrapped); } +void glooxwrapper::Registration::changePassword(const string& username, const string& password) +{ + m_Wrapped->changePassword(username.to_string(), password.to_string()); +} + void glooxwrapper::Registration::registerRegistrationHandler(RegistrationHandler* rh) { gloox::RegistrationHandler* handler = new RegistrationHandlerWrapper(rh); diff --git a/source/lobby/glooxwrapper/glooxwrapper.h b/source/lobby/glooxwrapper/glooxwrapper.h index 0e03e1d656..bd464d55ac 100644 --- a/source/lobby/glooxwrapper/glooxwrapper.h +++ b/source/lobby/glooxwrapper/glooxwrapper.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2021 Wildfire Games. +/* Copyright (C) 2022 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -571,6 +571,7 @@ namespace glooxwrapper ~Registration(); void fetchRegistrationFields(); bool createAccount(int fields, const RegistrationFields& values); + void changePassword(const string& username, const string& password); void registerRegistrationHandler(RegistrationHandler* rh); }; diff --git a/source/lobby/scripting/JSInterface_Lobby.cpp b/source/lobby/scripting/JSInterface_Lobby.cpp index bc29625d9c..bce6c2ff71 100644 --- a/source/lobby/scripting/JSInterface_Lobby.cpp +++ b/source/lobby/scripting/JSInterface_Lobby.cpp @@ -1,4 +1,4 @@ -/* Copyright (C) 2021 Wildfire Games. +/* Copyright (C) 2022 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -218,6 +218,7 @@ void RegisterScriptFunctions(const ScriptRequest& rq) REGISTER_XMPP(SetNick, "LobbySetNick"); REGISTER_XMPP(GetNick, "LobbyGetNick"); REGISTER_XMPP(GetJID, "LobbyGetJID"); + REGISTER_XMPP(ChangePassword, "LobbyChangePassword"); REGISTER_XMPP(kick, "LobbyKick"); REGISTER_XMPP(ban, "LobbyBan"); REGISTER_XMPP(GetPresence, "LobbyGetPlayerPresence");