fixed retroshare_service with embedded webui

This commit is contained in:
csoler 2019-11-17 22:01:49 +01:00
parent 2123ad7645
commit 997501a24d
No known key found for this signature in database
GPG Key ID: 7BCA522266C0804C
8 changed files with 66 additions and 35 deletions

View File

@ -518,6 +518,14 @@ bool JsonApiServer::revokeAuthToken(const std::string& token)
return false;
}
void JsonApiServer::connectToConfigManager(p3ConfigMgr *cfgmgr)
{
cfgmgr->addConfiguration("jsonapi.cfg",this);
RsFileHash hash;
loadConfiguration(hash);
}
bool JsonApiServer::authorizeUser(const std::string& user,const std::string& passwd)
{
if(!is_alphanumeric(user) || !is_alphanumeric(passwd))

View File

@ -58,6 +58,8 @@ public:
virtual void setBindingAddress(const std::string& address) override { RestbedService::setBindAddress(address); }
virtual int status() const override;
virtual void connectToConfigManager(p3ConfigMgr *cfgmgr);
virtual bool authorizeUser(const std::string& alphanumeric_user,const std::string& alphanumeric_passwd) override;
virtual std::map<std::string,std::string> getAuthorizedTokens() override;
bool revokeAuthToken(const std::string& user) override;

View File

@ -31,6 +31,7 @@ public:
{
_service = std::make_shared<restbed::Service>(); // this is a place holder, in case we request some internal values.
_listening_port = 1984;
_binding_address = "127.0.0.1";
}
void runloop() override
@ -58,7 +59,7 @@ public:
try
{
std::cerr << "(II) Starting restbed service on port " << std::dec << _listening_port << std::endl;
std::cerr << "(II) Starting restbed service on port " << std::dec << _listening_port << " and binding address \"" << _binding_address << "\"" << std::endl;
_service->start( settings );
}
catch(std::exception& e)

View File

@ -22,6 +22,8 @@
#include <string>
class p3ConfigMgr;
class RsJsonAPI
{
public:
@ -40,6 +42,8 @@ public:
virtual void setBindingAddress(const std::string& address) =0;
virtual void setListeningPort(uint16_t port) =0;
virtual void connectToConfigManager(p3ConfigMgr *cfgmgr)=0;
/**
* @brief Get status of the json api server
* @jsonapi{development}

View File

@ -48,11 +48,13 @@ static constexpr char *mime_types[3] = {
};
#ifdef WINDOWS_SYS
static std::string _base_directory = "data/webui";
const std::string RsWebUI::DEFAULT_BASE_DIRECTORY = "data/webui";
#else
static std::string _base_directory = "/usr/share/retroshare/webui/";
const std::string RsWebUI::DEFAULT_BASE_DIRECTORY = "/usr/share/retroshare/webui/";
#endif
static std::string _base_directory = RsWebUI::DEFAULT_BASE_DIRECTORY;
template<int MIME_TYPE_INDEX> class handler
{

View File

@ -61,6 +61,7 @@
#include "gxstunnel/p3gxstunnel.h"
#include "retroshare/rsgxsdistsync.h"
#include "file_sharing/p3filelists.h"
#include "jsonapi/jsonapi.h"
#define ENABLE_GROUTER
@ -391,6 +392,22 @@ int RsInit::InitRetroShare(const RsConfigOptions& conf)
if(!RsAccounts::init(rsInitConfig->optBaseDir,error_code))
return error_code ;
#ifdef RS_JSONAPI
// We create the JsonApiServer this early, because it is needed *before* login
RsInfo() << "Allocating jsonAPI server (not launched yet) " << std::endl;
JsonApiServer *jas = new JsonApiServer();
jas->setListeningPort(conf.jsonApiPort);
jas->setBindingAddress(conf.jsonApiBindAddress);
if(conf.jsonApiPort != NULL)
{
RsInfo() << "Launching jsonAPI server on port " << conf.jsonApiPort << std::endl;
jas->restart();
}
rsJsonAPI = jas;
#endif
#ifdef RS_AUTOLOGIN
/* check that we have selected someone */
@ -408,16 +425,6 @@ int RsInit::InitRetroShare(const RsConfigOptions& conf)
}
#endif
#ifdef RS_JSONAPI
if(rsInitConfig->jsonApiPort)
{
rsJsonAPI->setListeningPort(rsInitConfig->jsonApiPort);
rsJsonAPI->setBindingAddress(rsInitConfig->jsonApiBindAddress);
rsJsonAPI->restart();
}
#endif // ifdef RS_JSONAPI
return RS_INIT_OK;
}
@ -1217,13 +1224,10 @@ int RsServer::StartupRetroShare()
mPluginsManager->loadPlugins(programatically_inserted_plugins) ;
#ifdef RS_JSONAPI
mJsonAPIServer = new JsonApiServer;
rsJsonAPI = mJsonAPIServer;
// add jsonapi server to config manager so that it can save/load its tokens
mConfigMgr->addConfiguration("jsonapi.cfg",mJsonAPIServer);
RsFileHash dummyHash;
mJsonAPIServer->loadConfiguration(dummyHash);
if(rsJsonAPI)
rsJsonAPI->connectToConfigManager(mConfigMgr);
#endif
/**** Reputation system ****/

View File

@ -202,8 +202,6 @@ void WebuiPage::onAllIPCBClicked(bool /*checked*/)
}
void WebuiPage::onApplyClicked()
{
QString errmsg;
rsWebUI->setUserPassword(ui.password_LE->text().toStdString());
if(!restart())

View File

@ -22,7 +22,11 @@
#include "retroshare/rsinit.h"
#ifdef RS_JSONAPI
#include "jsonapi/jsonapi.h"
#include "retroshare/rsjsonapi.h"
#endif
#ifdef RS_WEBUI
#include "retroshare/rswebui.h"
#endif
static CrashStackTrace gCrashStackTrace;
@ -120,8 +124,10 @@ int main(int argc, char* argv[])
std::string prefUserString;
RsConfigOptions conf;
std::string webui_base_directory = RsWebUI::DEFAULT_BASE_DIRECTORY;
#ifdef RS_JSONAPI
conf.jsonApiPort = JsonApiServer::DEFAULT_PORT; // enable JSonAPI by default
conf.jsonApiPort = RsJsonAPI::DEFAULT_PORT; // enable JSonAPI by default
#endif
argstream as(argc,argv);
@ -148,7 +154,7 @@ int main(int argc, char* argv[])
"[node Id] Selected account to use and asks for passphrase"
". Use \"-U list\" in order to list available accounts.",
false );
#endif // RS_SERVICE_TERMINAL_LOGIN
#endif
#ifdef RS_JSONAPI
as >> parameter( 'J', "jsonApiPort", conf.jsonApiPort, "TCP Port",
@ -156,12 +162,12 @@ int main(int argc, char* argv[])
>> parameter( 'P', "jsonApiBindAddress", conf.jsonApiBindAddress,
"TCP bind address", "JSON API Bind Address default "
"127.0.0.1.", false );
#endif // def RS_JSONAPI
#endif
#if (defined(RS_JSONAPI) || defined(RS_WEBUI)) && defined(RS_SERVICE_TERMINAL_WEBUI_PASSWORD)
bool askWebUiPassword = false;
as >> option( 'W', "webui-password", askWebUiPassword,
"Ask WebUI password on the console." );
as >> parameter( 'B', "webui-directory", webui_base_directory, "Place where to find the html/js files for the webui.",false );
as >> option( 'W', "webui-password", askWebUiPassword, "Ask WebUI password on the console." );
#endif /* defined(RS_JSONAPI) && defined(RS_WEBUI) \
&& defined(RS_SERVICE_TERMINAL_WEBUI_PASSWORD) */
@ -169,12 +175,12 @@ int main(int argc, char* argv[])
#ifdef LOCALNET_TESTING
as >> parameter( 'R', "restrict-port" , portRestrictions, "port1-port2",
"Apply port restriction", false);
#endif // ifdef LOCALNET_TESTING
#endif
#ifdef RS_AUTOLOGIN
as >> option( 'a', "auto-login", conf.autoLogin,
"enable auto-login." );
#endif // ifdef RS_AUTOLOGIN
#endif
as >> help( 'h', "help", "Display this Help" );
as.defaultErrorHandling(true, true);
@ -212,6 +218,7 @@ int main(int argc, char* argv[])
conf.main_executable_path = argv[0];
int initResult = RsInit::InitRetroShare(conf);
if(initResult != RS_INIT_OK)
{
RsErr() << "Retroshare core initalization failed with: " << initResult
@ -274,8 +281,7 @@ int main(int argc, char* argv[])
rsNotify->registerNotifyClient(notify);
// supply empty passwd so that it is properly asked 3 times on console
RsInit::LoadCertificateStatus result =
rsLoginHelper->attemptLogin(ssl_id, "");
RsInit::LoadCertificateStatus result = rsLoginHelper->attemptLogin(ssl_id, "");
switch(result)
{
@ -297,14 +303,20 @@ int main(int argc, char* argv[])
<< std::endl;
return -result;
}
/* Start-up libretroshare server threads */
RsControl::instance()->StartupRetroShare();
}
#endif // def RS_SERVICE_TERMINAL_LOGIN
#if (defined(RS_JSONAPI) || defined(RS_WEBUI)) && defined(RS_SERVICE_TERMINAL_WEBUI_PASSWORD)
if(jsonApiServer && !webui_pass1.empty())
jsonApiServer->authorizeToken("webui:"+webui_pass1);
#endif /* defined(RS_JSONAPI) && defined(RS_WEBUI) \
&& defined(RS_SERVICE_TERMINAL_WEBUI_PASSWORD) */
if(rsJsonAPI && !webui_pass1.empty())
{
rsWebUI->setHtmlFilesDirectory(webui_base_directory);
rsWebUI->setUserPassword(webui_pass1);
rsWebUI->restart();
}
#endif
#ifdef __ANDROID__
rsControl->setShutdownCallback(QCoreApplication::exit);