mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-05-12 19:12:28 -04:00
Improvements for V0.6 logins to support hidden nodes.
- Separated Acount stuff from rsinit.cc => rsaccounts.cc - Moved Account Directory to HID06_xxxxxxx, or STD06_xxxxx This allows us to check for Hidden immediately And prevents v0.5 accounts being used with 0.6 - Added functions to support Proxy, and Hidden stuff. - Changed Minimum port to 10 to allow port 80 to be used by those who must. git-svn-id: http://svn.code.sf.net/p/retroshare/code/branches/v0.6-initdev@7027 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
parent
9d78ad8942
commit
39db508ce7
15 changed files with 1783 additions and 1177 deletions
|
@ -312,9 +312,10 @@ bool p3Peers::getPeerDetails(const std::string &id, RsPeerDetails &d)
|
|||
if (ps.hiddenNode)
|
||||
{
|
||||
d.isHiddenNode = true;
|
||||
rs_sprintf(d.hiddenNodeAddress, "%s:%u", ps.hiddenDomain.c_str(), ps.hiddenPort);
|
||||
d.localAddr = "hidden";
|
||||
d.localPort = 0;
|
||||
d.hiddenNodeAddress = ps.hiddenDomain;
|
||||
d.hiddenNodePort = ps.hiddenPort;
|
||||
d.localAddr = sockaddr_storage_iptostring(ps.localaddr);
|
||||
d.localPort = sockaddr_storage_port(ps.localaddr);
|
||||
d.extAddr = "hidden";
|
||||
d.extPort = 0;
|
||||
d.dyndns = "";
|
||||
|
@ -323,6 +324,7 @@ bool p3Peers::getPeerDetails(const std::string &id, RsPeerDetails &d)
|
|||
{
|
||||
d.isHiddenNode = false;
|
||||
d.hiddenNodeAddress = "";
|
||||
d.hiddenNodePort = 0;
|
||||
|
||||
d.localAddr = sockaddr_storage_iptostring(ps.localaddr);
|
||||
d.localPort = sockaddr_storage_port(ps.localaddr);
|
||||
|
@ -732,6 +734,7 @@ bool p3Peers::setLocation(const std::string &ssl_id, const std::string &locatio
|
|||
return mPeerMgr->setLocation(ssl_id, location);
|
||||
}
|
||||
|
||||
|
||||
bool p3Peers::setHiddenNode(const std::string &id, const std::string &hidden_node_address)
|
||||
{
|
||||
#ifdef P3PEERS_DEBUG
|
||||
|
@ -770,6 +773,20 @@ bool p3Peers::setHiddenNode(const std::string &id, const std::string &hidden_no
|
|||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool p3Peers::setHiddenNode(const std::string &id, const std::string &address, uint16_t port)
|
||||
{
|
||||
#ifdef P3PEERS_DEBUG
|
||||
std::cerr << "p3Peers::setHiddenNode() " << id << std::endl;
|
||||
#endif
|
||||
std::cerr << "p3Peers::setHiddenNode() Domain: " << address << " Port: " << port;
|
||||
std::cerr << std::endl;
|
||||
|
||||
mPeerMgr->setNetworkMode(id, RS_NET_MODE_HIDDEN);
|
||||
mPeerMgr->setHiddenDomainPort(id, address, port);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool p3Peers::setLocalAddress(const std::string &id, const std::string &addr_str, uint16_t port)
|
||||
{
|
||||
#ifdef P3PEERS_DEBUG
|
||||
|
@ -864,8 +881,7 @@ bool p3Peers::setNetworkMode(const std::string &id, uint32_t extNetMode)
|
|||
}
|
||||
|
||||
|
||||
bool
|
||||
p3Peers::setVisState(const std::string &id, uint16_t vs_disc, uint16_t vs_dht)
|
||||
bool p3Peers::setVisState(const std::string &id, uint16_t vs_disc, uint16_t vs_dht)
|
||||
{
|
||||
#ifdef P3PEERS_DEBUG
|
||||
std::cerr << "p3Peers::setVisState() " << id << std::endl;
|
||||
|
@ -876,6 +892,52 @@ p3Peers::setVisState(const std::string &id, uint16_t vs_disc, uint16_t vs_dht)
|
|||
return mPeerMgr->setVisState(id, vs_disc, vs_dht);
|
||||
}
|
||||
|
||||
bool p3Peers::getProxyServer(std::string &addr, uint16_t &port)
|
||||
{
|
||||
std::cerr << "p3Peers::getProxyServer()" << std::endl;
|
||||
|
||||
struct sockaddr_storage proxy_addr;
|
||||
mPeerMgr->getProxyServerAddress(proxy_addr);
|
||||
addr = sockaddr_storage_iptostring(proxy_addr);
|
||||
port = sockaddr_storage_port(proxy_addr);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool p3Peers::setProxyServer(const std::string &addr_str, const uint16_t port)
|
||||
{
|
||||
#ifdef P3PEERS_DEBUG
|
||||
#endif
|
||||
std::cerr << "p3Peers::setProxyServer() " << std::endl;
|
||||
|
||||
struct sockaddr_storage addr;
|
||||
struct sockaddr_in *addrv4p = (struct sockaddr_in *) &addr;
|
||||
addrv4p->sin_family = AF_INET;
|
||||
addrv4p->sin_port = htons(port);
|
||||
|
||||
int ret = 1;
|
||||
/********************************** WINDOWS/UNIX SPECIFIC PART *******************/
|
||||
#ifndef WINDOWS_SYS
|
||||
if (ret && (0 != inet_aton(addr_str.c_str(), &(addrv4p->sin_addr))))
|
||||
#else
|
||||
addrv4p->sin_addr.s_addr = inet_addr(addr_str.c_str());
|
||||
if (ret)
|
||||
#endif
|
||||
/********************************** WINDOWS/UNIX SPECIFIC PART *******************/
|
||||
{
|
||||
return mPeerMgr->setProxyServerAddress(addr);
|
||||
}
|
||||
else
|
||||
{
|
||||
std::cerr << "p3Peers::setProxyServer() Failed to Parse Address" << std::endl;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//===========================================================================
|
||||
/* Auth Stuff */
|
||||
std::string
|
||||
|
@ -988,6 +1050,7 @@ bool p3Peers::loadDetailsFromStringCert(const std::string &certstr, RsPeerDetai
|
|||
{
|
||||
pd.isHiddenNode = true;
|
||||
pd.hiddenNodeAddress = cert.hidden_node_string();
|
||||
//pd.hiddenNodePort = cert.hidden_node_port();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -85,6 +85,7 @@ virtual bool removeFriendLocation(const std::string &sslId);
|
|||
virtual bool connectAttempt(const std::string &id);
|
||||
virtual bool setLocation(const std::string &ssl_id, const std::string &location);//location is shown in the gui to differentiate ssl certs
|
||||
virtual bool setHiddenNode(const std::string &id, const std::string &hidden_node_address);
|
||||
virtual bool setHiddenNode(const std::string &id, const std::string &address, uint16_t port);
|
||||
|
||||
virtual bool setLocalAddress(const std::string &id, const std::string &addr, uint16_t port);
|
||||
virtual bool setExtAddress(const std::string &id, const std::string &addr, uint16_t port);
|
||||
|
@ -92,6 +93,9 @@ virtual bool setDynDNS(const std::string &id, const std::string &dyndns);
|
|||
virtual bool setNetworkMode(const std::string &id, uint32_t netMode);
|
||||
virtual bool setVisState(const std::string &id, uint16_t vs_disc, uint16_t vs_dht);
|
||||
|
||||
virtual bool getProxyServer(std::string &addr, uint16_t &port);
|
||||
virtual bool setProxyServer(const std::string &addr, const uint16_t port);
|
||||
|
||||
virtual void getIPServersList(std::list<std::string>& ip_servers) ;
|
||||
virtual void allowServerIPDetermination(bool) ;
|
||||
virtual bool getAllowServerIPDetermination() ;
|
||||
|
|
1317
libretroshare/src/rsserver/rsaccounts.cc
Normal file
1317
libretroshare/src/rsserver/rsaccounts.cc
Normal file
File diff suppressed because it is too large
Load diff
152
libretroshare/src/rsserver/rsaccounts.h
Normal file
152
libretroshare/src/rsserver/rsaccounts.h
Normal file
|
@ -0,0 +1,152 @@
|
|||
/*
|
||||
* libretroshare/src/rsserver/rsaccounts.h
|
||||
*
|
||||
* RetroShare C++ Interface.
|
||||
*
|
||||
* Copyright 2013-2014 by Robert Fernie.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License Version 2.1 as published by the Free Software Foundation.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
|
||||
* USA.
|
||||
*
|
||||
* Please report all bugs and problems to "retroshare@lunamutt.com".
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/*********************************************************************
|
||||
* Header providing interface for libretroshare access to RsAccounts stuff.
|
||||
* External access must be through rsinit.g where a RsAccounts namespace + fns
|
||||
* are available.
|
||||
*
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
#include <list>
|
||||
#include <map>
|
||||
|
||||
class AccountDetails
|
||||
{
|
||||
public:
|
||||
AccountDetails();
|
||||
|
||||
std::string mSslId;
|
||||
std::string mAccountDir;
|
||||
|
||||
std::string mPgpId;
|
||||
std::string mPgpName;
|
||||
std::string mPgpEmail;
|
||||
|
||||
std::string mLocation;
|
||||
bool mIsHiddenLoc;
|
||||
bool mFirstRun;
|
||||
|
||||
};
|
||||
|
||||
class RsAccountsDetail
|
||||
{
|
||||
public:
|
||||
RsAccountsDetail();
|
||||
|
||||
// These functions are externally accessible via RsAccounts namespace.
|
||||
|
||||
|
||||
|
||||
// These functions are accessible from inside libretroshare.
|
||||
|
||||
bool setupBaseDirectory(std::string alt_basedir);
|
||||
bool loadAccounts();
|
||||
bool lockPreferredAccount();
|
||||
|
||||
// Paths.
|
||||
std::string PathDataDirectory();
|
||||
std::string PathBaseDirectory();
|
||||
|
||||
// PGP Path is only dependent on BaseDirectory.
|
||||
std::string PathPGPDirectory();
|
||||
|
||||
// Below are dependent on mPreferredId.
|
||||
std::string PathAccountDirectory();
|
||||
std::string PathAccountKeysDirectory();
|
||||
std::string PathKeyFile();
|
||||
std::string PathCertFile();
|
||||
|
||||
// PGP Accounts.
|
||||
|
||||
int GetPGPLogins(std::list<std::string> &pgpIds);
|
||||
int GetPGPLoginDetails(const std::string& id, std::string &name, std::string &email);
|
||||
bool GeneratePGPCertificate(const std::string&, const std::string& email, const std::string& passwd, std::string &pgpId, std::string &errString);
|
||||
|
||||
bool SelectPGPAccount(const std::string& pgpId);
|
||||
|
||||
// PGP Support Functions.
|
||||
bool exportIdentity(const std::string& fname,const std::string& pgp_id) ;
|
||||
bool importIdentity(const std::string& fname,std::string& imported_pgp_id,std::string& import_error) ;
|
||||
void getUnsupportedKeys(std::map<std::string,std::vector<std::string> > &unsupported_keys);
|
||||
bool copyGnuPGKeyrings() ;
|
||||
|
||||
|
||||
// Selecting Rs Account.
|
||||
bool selectAccountByString(const std::string &prefUserString);
|
||||
bool selectId(const std::string preferredId);
|
||||
|
||||
// Details of Rs Account.
|
||||
bool getPreferredAccountId(std::string &id);
|
||||
bool getAccountDetails(const std::string &id,
|
||||
std::string &gpgId, std::string &gpgName,
|
||||
std::string &gpgEmail, std::string &location);
|
||||
|
||||
bool getAccountOptions(bool &ishidden, bool isFirstTimeRun);
|
||||
|
||||
|
||||
bool getAccountIds(std::list<std::string> &ids);
|
||||
|
||||
bool GenerateSSLCertificate(const std::string& gpg_id,
|
||||
const std::string& org, const std::string& loc,
|
||||
const std::string& country, const bool ishiddenloc,
|
||||
const std::string& passwd, std::string &sslId,
|
||||
std::string &errString);
|
||||
|
||||
// From init file.
|
||||
bool storePreferredAccount();
|
||||
bool loadPreferredAccount();
|
||||
|
||||
private:
|
||||
bool checkPreferredId();
|
||||
|
||||
bool defaultBaseDirectory();
|
||||
|
||||
std::string getHomePath() ;
|
||||
|
||||
bool getAvailableAccounts(std::map<std::string, AccountDetails> &accounts,
|
||||
int& failing_accounts,
|
||||
std::map<std::string,std::vector<std::string> >& unsupported_keys);
|
||||
|
||||
bool setupAccount(const std::string& accountdir);
|
||||
|
||||
private:
|
||||
|
||||
bool mAccountsLocked;
|
||||
|
||||
std::map<std::string, AccountDetails> mAccounts;
|
||||
std::string mPreferredId;
|
||||
std::string mBaseDirectory;
|
||||
|
||||
std::map<std::string,std::vector<std::string> > mUnsupportedKeys ;
|
||||
};
|
||||
|
||||
// Global singleton declaration of data.
|
||||
extern RsAccountsDetail rsAccounts;
|
||||
|
File diff suppressed because it is too large
Load diff
|
@ -1,9 +1,9 @@
|
|||
#include <string>
|
||||
#include <iostream>
|
||||
#include <retroshare/rsinit.h>
|
||||
#include <pqi/authgpg.h>
|
||||
#include "rsloginhandler.h"
|
||||
#include "util/rsdir.h"
|
||||
#include "rsaccounts.h"
|
||||
|
||||
#if defined(UBUNTU) || defined(__FreeBSD__) || defined(__OpenBSD__)
|
||||
#include <gnome-keyring-1/gnome-keyring.h>
|
||||
|
@ -689,11 +689,11 @@ bool RsLoginHandler::getSSLPasswdFromGPGFile(const std::string& ssl_id,std::stri
|
|||
|
||||
std::string RsLoginHandler::getSSLPasswdFileName(const std::string& /*ssl_id*/)
|
||||
{
|
||||
return RsInit::RsConfigKeysDirectory() + "/" + "ssl_passphrase.pgp";
|
||||
return rsAccounts.PathAccountKeysDirectory() + "/" + "ssl_passphrase.pgp";
|
||||
}
|
||||
|
||||
std::string RsLoginHandler::getAutologinFileName(const std::string& /*ssl_id*/)
|
||||
{
|
||||
return RsInit::RsConfigKeysDirectory() + "/" + "help.dta" ;
|
||||
return rsAccounts.PathAccountKeysDirectory() + "/" + "help.dta" ;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue