Extend JSON API with reasonable way to create location

This commit is contained in:
Gioacchino Mazzurco 2018-06-28 12:06:43 +02:00
parent 4637fbaff5
commit 0ff80baed3
No known key found for this signature in database
GPG Key ID: A1FBCA3872E87051
2 changed files with 48 additions and 0 deletions

View File

@ -216,6 +216,19 @@ struct RsLoginHelper
* @param[out] locations storage for the retrived locations * @param[out] locations storage for the retrived locations
*/ */
void getLocations(std::vector<RsLoginHelper::Location>& locations); void getLocations(std::vector<RsLoginHelper::Location>& locations);
/**
* @brief Creates a new RetroShare location
* @jsonapi{development}
* @param[inout] location provide input information to generate the location
* and storage to output the data of the generated location
* @param[in] password to protect and unlock the associated PGP key
* @param[out] errorMessage
* @return true if success, false otherwise
*/
bool createLocation( RsLoginHelper::Location& location,
const std::string& password,
std::string& errorMessage );
}; };
#endif #endif

View File

@ -1934,6 +1934,41 @@ void RsLoginHelper::getLocations(std::vector<RsLoginHelper::Location>& store)
} }
} }
bool RsLoginHelper::createLocation(
RsLoginHelper::Location& l, const std::string& password,
std::string& errorMessage )
{
if(l.mLocationName.empty())
{
errorMessage = "Location name is needed";
return false;
}
if(l.mPgpId.isNull() && l.mPpgName.empty())
{
errorMessage = "Either PGP name or PGP id is needed";
return false;
}
if(l.mPgpId.isNull() && !RsAccounts::GeneratePGPCertificate(
l.mPpgName, "", password, l.mPgpId, 4096, errorMessage) )
{
errorMessage = "Failure creating PGP key: " + errorMessage;
return false;
}
if(!rsNotify->cachePgpPassphrase(password)) return false;
if(!rsNotify->setDisableAskPassword(true)) return false;
bool ret = RsAccounts::GenerateSSLCertificate(
l.mPgpId, "", l.mLocationName, "", false,
RSRandom::random_alphaNumericString(
RsInit::getSslPwdLen() ), l.mLocationId, errorMessage );
rsNotify->setDisableAskPassword(false);
return ret;
}
void RsLoginHelper::Location::serial_process( void RsLoginHelper::Location::serial_process(
RsGenericSerializer::SerializeJob j, RsGenericSerializer::SerializeJob j,
RsGenericSerializer::SerializeContext& ctx ) RsGenericSerializer::SerializeContext& ctx )