diff --git a/libresapi/src/api/RsControlModule.cpp b/libresapi/src/api/RsControlModule.cpp index 9dfe55aad..8bf8fd7ea 100644 --- a/libresapi/src/api/RsControlModule.cpp +++ b/libresapi/src/api/RsControlModule.cpp @@ -55,7 +55,7 @@ bool RsControlModule::processShouldExit() return mProcessShouldExit; } -bool RsControlModule::askForPassword(const std::string &key_details, bool /* prev_is_bad */, std::string &password, bool& cancelled) +bool RsControlModule::askForPassword(const std::string &title, const std::string &key_details, bool /* prev_is_bad */, std::string &password, bool& cancelled) { cancelled = false ; { @@ -67,6 +67,7 @@ bool RsControlModule::askForPassword(const std::string &key_details, bool /* pre } mWantPassword = true; + mTitle = title; mKeyName = key_details; mPassword = ""; mStateTokenServer->replaceToken(mStateToken); diff --git a/libresapi/src/api/RsControlModule.h b/libresapi/src/api/RsControlModule.h index 552196b17..d3c8ad18b 100644 --- a/libresapi/src/api/RsControlModule.h +++ b/libresapi/src/api/RsControlModule.h @@ -32,7 +32,7 @@ public: bool processShouldExit(); // from NotifyClient - virtual bool askForPassword(const std::string& key_details, bool prev_is_bad , std::string& password,bool& canceled); + virtual bool askForPassword(const std::string &title, const std::string& key_details, bool prev_is_bad , std::string& password,bool& canceled); protected: // from RsThread @@ -76,6 +76,7 @@ private: // to notify that a password callback is waiting // to answer the request, clear the flag and set the password bool mWantPassword; + std::string mTitle; std::string mKeyName; std::string mPassword; // for ssl cert generation: diff --git a/libretroshare/src/pgp/pgpauxutils.cc b/libretroshare/src/pgp/pgpauxutils.cc index b6cecc2bd..6cd4ebf08 100644 --- a/libretroshare/src/pgp/pgpauxutils.cc +++ b/libretroshare/src/pgp/pgpauxutils.cc @@ -71,13 +71,13 @@ bool PgpAuxUtilsImpl::parseSignature(unsigned char *sign, unsigned int signlen, return AuthGPG::getAuthGPG()->parseSignature(sign,signlen,issuer); } -bool PgpAuxUtilsImpl::askForDeferredSelfSignature(const void *data, - const uint32_t len, - unsigned char *sign, +bool PgpAuxUtilsImpl::askForDeferredSelfSignature(const void *data, + const uint32_t len, + unsigned char *sign, unsigned int *signlen, - int& signature_result ) + int& signature_result , std::string reason) { - return RsServer::notify()->askForDeferredSelfSignature(data, len, sign, signlen, signature_result); + return RsServer::notify()->askForDeferredSelfSignature(data, len, sign, signlen, signature_result, reason); } diff --git a/libretroshare/src/pgp/pgpauxutils.h b/libretroshare/src/pgp/pgpauxutils.h index bd1421f83..5cc1b0a73 100644 --- a/libretroshare/src/pgp/pgpauxutils.h +++ b/libretroshare/src/pgp/pgpauxutils.h @@ -43,7 +43,7 @@ class PgpAuxUtils virtual bool parseSignature(unsigned char *sign, unsigned int signlen, RsPgpId& issuer) const =0; virtual bool VerifySignBin(const void *data, uint32_t len, unsigned char *sign, unsigned int signlen, const PGPFingerprintType& withfingerprint) = 0; - virtual bool askForDeferredSelfSignature(const void *data, const uint32_t len, unsigned char *sign, unsigned int *signlen,int& signature_result ) = 0; + virtual bool askForDeferredSelfSignature(const void *data, const uint32_t len, unsigned char *sign, unsigned int *signlen,int& signature_result, std::string reason) = 0; }; class PgpAuxUtilsImpl: public PgpAuxUtils @@ -58,7 +58,7 @@ public: virtual bool getKeyFingerprint(const RsPgpId& id,PGPFingerprintType& fp) const; virtual bool VerifySignBin(const void *data, uint32_t len, unsigned char *sign, unsigned int signlen, const PGPFingerprintType& withfingerprint); virtual bool getGPGAllList(std::list &ids); - virtual bool askForDeferredSelfSignature(const void *data, const uint32_t len, unsigned char *sign, unsigned int *signlen,int& signature_result ); + virtual bool askForDeferredSelfSignature(const void *data, const uint32_t len, unsigned char *sign, unsigned int *signlen,int& signature_result, std::string reason); }; diff --git a/libretroshare/src/pgp/pgphandler.cc b/libretroshare/src/pgp/pgphandler.cc index d988a6e13..d0f7d66f9 100644 --- a/libretroshare/src/pgp/pgphandler.cc +++ b/libretroshare/src/pgp/pgphandler.cc @@ -61,25 +61,25 @@ ops_parse_cb_return_t cb_get_passphrase(const ops_parser_content_t *content_,ops { case OPS_PARSER_CMD_GET_SK_PASSPHRASE_PREV_WAS_BAD: prev_was_bad = true ; case OPS_PARSER_CMD_GET_SK_PASSPHRASE: - { - std::string passwd; - std::string uid_hint ; - - if(cbinfo->cryptinfo.keydata->nuids > 0) - uid_hint = std::string((const char *)cbinfo->cryptinfo.keydata->uids[0].user_id) ; - uid_hint += "(" + RsPgpId(cbinfo->cryptinfo.keydata->key_id).toStdString()+")" ; + { + std::string passwd; + std::string uid_hint ; - bool cancelled = false ; - passwd = PGPHandler::passphraseCallback()(NULL,uid_hint.c_str(),NULL,prev_was_bad,&cancelled) ; + if(cbinfo->cryptinfo.keydata->nuids > 0) + uid_hint = std::string((const char *)cbinfo->cryptinfo.keydata->uids[0].user_id) ; + uid_hint += "(" + RsPgpId(cbinfo->cryptinfo.keydata->key_id).toStdString()+")" ; - if(cancelled) - *(unsigned char *)cbinfo->arg = 1; + bool cancelled = false ; + passwd = PGPHandler::passphraseCallback()(NULL,"",uid_hint.c_str(),NULL,prev_was_bad,&cancelled) ; - *(content->secret_key_passphrase.passphrase)= (char *)ops_mallocz(passwd.length()+1) ; - memcpy(*(content->secret_key_passphrase.passphrase),passwd.c_str(),passwd.length()) ; - return OPS_KEEP_MEMORY; - } - break; + if(cancelled) + *(unsigned char *)cbinfo->arg = 1; + + *(content->secret_key_passphrase.passphrase)= (char *)ops_mallocz(passwd.length()+1) ; + memcpy(*(content->secret_key_passphrase.passphrase),passwd.c_str(),passwd.length()) ; + return OPS_KEEP_MEMORY; + } + break; default: break; @@ -1326,7 +1326,7 @@ bool PGPHandler::decryptTextFromFile(const RsPgpId&,std::string& text,const std: return (bool)res ; } -bool PGPHandler::SignDataBin(const RsPgpId& id,const void *data, const uint32_t len, unsigned char *sign, unsigned int *signlen,bool use_raw_signature) +bool PGPHandler::SignDataBin(const RsPgpId& id,const void *data, const uint32_t len, unsigned char *sign, unsigned int *signlen,bool use_raw_signature, std::string reason /* = "" */) { RsStackMutex mtx(pgphandlerMtx) ; // lock access to PGP memory structures. // need to find the key and to decrypt it. @@ -1357,7 +1357,7 @@ ops_secret_key_t *secret_key = NULL ; for(int i=0;i<3;++i) { bool cancelled =false; - std::string passphrase = _passphrase_callback(NULL,uid_hint.c_str(),"Please enter passwd for encrypting your key : ",last_passwd_was_wrong,&cancelled) ; + std::string passphrase = _passphrase_callback(NULL,reason.c_str(),uid_hint.c_str(),"Please enter passwd for encrypting your key : ",last_passwd_was_wrong,&cancelled) ;//TODO reason secret_key = ops_decrypt_secret_key_from_data(key,passphrase.c_str()) ; @@ -1448,8 +1448,8 @@ bool PGPHandler::privateSignCertificate(const RsPgpId& ownId,const RsPgpId& id_o return false ; } - bool cancelled = false; - std::string passphrase = _passphrase_callback(NULL,RsPgpId(skey->key_id).toStdString().c_str(),"Please enter passwd for encrypting your key : ",false,&cancelled) ; + bool cancelled = false; + std::string passphrase = _passphrase_callback(NULL,"",RsPgpId(skey->key_id).toStdString().c_str(),"Please enter passwd for encrypting your key : ",false,&cancelled) ; ops_secret_key_t *secret_key = ops_decrypt_secret_key_from_data(skey,passphrase.c_str()) ; diff --git a/libretroshare/src/pgp/pgphandler.h b/libretroshare/src/pgp/pgphandler.h index 1276c83d7..88caa891d 100644 --- a/libretroshare/src/pgp/pgphandler.h +++ b/libretroshare/src/pgp/pgphandler.h @@ -16,7 +16,7 @@ extern "C" { #include } -typedef std::string (*PassphraseCallback)(void *data, const char *uid_hint, const char *passphrase_info, int prev_was_bad,bool *cancelled) ; +typedef std::string (*PassphraseCallback)(void *data, const char *uid_title, const char *uid_hint, const char *passphrase_info, int prev_was_bad,bool *cancelled) ; class PGPCertificateInfo { @@ -85,8 +85,8 @@ class PGPHandler std::string SaveCertificateToString(const RsPgpId& id,bool include_signatures) const ; bool exportPublicKey(const RsPgpId& id,unsigned char *& mem,size_t& mem_size,bool armoured,bool include_signatures) const ; - bool parseSignature(unsigned char *sign, unsigned int signlen,RsPgpId& issuer_id) ; - bool SignDataBin(const RsPgpId& id,const void *data, const uint32_t len, unsigned char *sign, unsigned int *signlen,bool make_raw_signature=false) ; + bool parseSignature(unsigned char *sign, unsigned int signlen,RsPgpId& issuer_id) ; + bool SignDataBin(const RsPgpId& id, const void *data, const uint32_t len, unsigned char *sign, unsigned int *signlen, bool make_raw_signature=false, std::string reason = "") ; bool VerifySignBin(const void *data, uint32_t data_len, unsigned char *sign, unsigned int sign_len, const PGPFingerprintType& withfingerprint) ; bool privateSignCertificate(const RsPgpId& own_id,const RsPgpId& id_of_key_to_sign) ; diff --git a/libretroshare/src/pqi/authgpg.cc b/libretroshare/src/pqi/authgpg.cc index 7caf8e401..38756476c 100644 --- a/libretroshare/src/pqi/authgpg.cc +++ b/libretroshare/src/pqi/authgpg.cc @@ -86,14 +86,14 @@ bool AuthGPG::encryptTextToFile(const std::string& text,const std::string& outfi // return PGPHandler::encryptTextToString(RsPgpId(pgp_id),text,outstr) ; // } -std::string pgp_pwd_callback(void * /*hook*/, const char *uid_hint, const char * /*passphrase_info*/, int prev_was_bad,bool *cancelled) +std::string pgp_pwd_callback(void * /*hook*/, const char *uid_title, const char *uid_hint, const char * /*passphrase_info*/, int prev_was_bad,bool *cancelled) { #define GPG_DEBUG2 #ifdef GPG_DEBUG2 fprintf(stderr, "pgp_pwd_callback() called.\n"); #endif std::string password; - RsServer::notify()->askForPassword(uid_hint, prev_was_bad, password,cancelled) ; + RsServer::notify()->askForPassword(uid_title, uid_hint, prev_was_bad, password,cancelled) ; return password ; } @@ -296,9 +296,9 @@ void AuthGPG::processServices() delete operation; } -bool AuthGPG::DoOwnSignature(const void *data, unsigned int datalen, void *buf_sigout, unsigned int *outl) +bool AuthGPG::DoOwnSignature(const void *data, unsigned int datalen, void *buf_sigout, unsigned int *outl, std::string reason /* = "" */) { - return PGPHandler::SignDataBin(mOwnGpgId,data,datalen,(unsigned char *)buf_sigout,outl) ; + return PGPHandler::SignDataBin(mOwnGpgId,data,datalen,(unsigned char *)buf_sigout,outl,false,reason) ; } @@ -605,9 +605,9 @@ bool AuthGPG::decryptDataBin(const void *data, unsigned int datalen, unsigned ch { return PGPHandler::decryptDataBin(mOwnGpgId,data,datalen,sign,signlen) ; } -bool AuthGPG::SignDataBin(const void *data, unsigned int datalen, unsigned char *sign, unsigned int *signlen) +bool AuthGPG::SignDataBin(const void *data, unsigned int datalen, unsigned char *sign, unsigned int *signlen, std::string reason /*= ""*/) { - return DoOwnSignature(data, datalen, sign, signlen); + return DoOwnSignature(data, datalen, sign, signlen, reason); } bool AuthGPG::VerifySignBin(const void *data, uint32_t datalen, unsigned char *sign, unsigned int signlen, const PGPFingerprintType& withfingerprint) diff --git a/libretroshare/src/pqi/authgpg.h b/libretroshare/src/pqi/authgpg.h index 8d52f2ac5..63cffe784 100644 --- a/libretroshare/src/pqi/authgpg.h +++ b/libretroshare/src/pqi/authgpg.h @@ -208,7 +208,7 @@ class AuthGPG: public p3Config, public RsTickingThread, public PGPHandler * There should also be Encryption Functions... (do later). * ****/ - virtual bool SignDataBin(const void *data, const uint32_t len, unsigned char *sign, unsigned int *signlen); + virtual bool SignDataBin(const void *data, const uint32_t len, unsigned char *sign, unsigned int *signlen, std::string reason = ""); virtual bool VerifySignBin(const void*, uint32_t, unsigned char*, unsigned int, const PGPFingerprintType& withfingerprint); virtual bool parseSignature(const void *sig, unsigned int siglen, RsPgpId& issuer_id); @@ -254,7 +254,7 @@ class AuthGPG: public p3Config, public RsTickingThread, public PGPHandler //void createDummyFriends(void); //NYI /* Internal functions */ - bool DoOwnSignature(const void *, unsigned int, void *, unsigned int *); + bool DoOwnSignature(const void *, unsigned int, void *, unsigned int *, std::string reason); bool VerifySignature(const void *data, int datalen, const void *sig, unsigned int siglen, const PGPFingerprintType& withfingerprint); /* Sign/Trust stuff */ diff --git a/libretroshare/src/pqi/authssl.cc b/libretroshare/src/pqi/authssl.cc index 595ca946d..4c50a046a 100644 --- a/libretroshare/src/pqi/authssl.cc +++ b/libretroshare/src/pqi/authssl.cc @@ -850,7 +850,7 @@ X509 *AuthSSLimpl::SignX509ReqWithGPG(X509_REQ *req, long /*days*/) std::cerr << "Digest Applied: len: " << hashoutl << std::endl; /* NOW Sign via GPG Functions */ - if (!AuthGPG::getAuthGPG()->SignDataBin(buf_hashout, hashoutl, buf_sigout, (unsigned int *) &sigoutl)) + if (!AuthGPG::getAuthGPG()->SignDataBin(buf_hashout, hashoutl, buf_sigout, (unsigned int *) &sigoutl,"AuthSSLimpl::SignX509ReqWithGPG()")) { sigoutl = 0; goto err; diff --git a/libretroshare/src/pqi/p3notify.cc b/libretroshare/src/pqi/p3notify.cc index ecb92f49d..53109a6d1 100644 --- a/libretroshare/src/pqi/p3notify.cc +++ b/libretroshare/src/pqi/p3notify.cc @@ -245,10 +245,10 @@ void p3Notify::notifyDownloadComplete (const std::string& fileHash ) void p3Notify::notifyDownloadCompleteCount (uint32_t count ) { FOR_ALL_NOTIFY_CLIENTS (*it)->notifyDownloadCompleteCount (count) ; } void p3Notify::notifyHistoryChanged (uint32_t msgId , int type) { FOR_ALL_NOTIFY_CLIENTS (*it)->notifyHistoryChanged (msgId,type) ; } -bool p3Notify::askForPassword (const std::string& key_details , bool prev_is_bad , std::string& password,bool *cancelled) +bool p3Notify::askForPassword (const std::string& title , const std::string& key_details , bool prev_is_bad , std::string& password,bool *cancelled) { FOR_ALL_NOTIFY_CLIENTS - if( (*it)->askForPassword(key_details,prev_is_bad,password,*cancelled)) + if( (*it)->askForPassword(title,key_details,prev_is_bad,password,*cancelled)) return true ; return false ; @@ -261,10 +261,10 @@ bool p3Notify::askForPluginConfirmation (const std::string& plugin_filen return false ; } -bool p3Notify::askForDeferredSelfSignature (const void * data , const uint32_t len , unsigned char *sign, unsigned int *signlen,int& signature_result ) +bool p3Notify::askForDeferredSelfSignature (const void * data , const uint32_t len , unsigned char *sign, unsigned int *signlen,int& signature_result, std::string reason /*=""*/) { FOR_ALL_NOTIFY_CLIENTS - if( (*it)->askForDeferredSelfSignature(data,len,sign,signlen,signature_result)) + if( (*it)->askForDeferredSelfSignature(data,len,sign,signlen,signature_result, reason)) return true ; return false ; diff --git a/libretroshare/src/pqi/p3notify.h b/libretroshare/src/pqi/p3notify.h index 907559e06..f91450f22 100644 --- a/libretroshare/src/pqi/p3notify.h +++ b/libretroshare/src/pqi/p3notify.h @@ -116,12 +116,12 @@ class p3Notify: public RsNotify void notifyPeerStatusChangedSummary () ; void notifyDiscInfoChanged () ; - bool askForDeferredSelfSignature (const void * /* data */, const uint32_t /* len */, unsigned char * /* sign */, unsigned int * /* signlen */,int& signature_result ) ; + bool askForDeferredSelfSignature (const void * /* data */, const uint32_t /* len */, unsigned char * /* sign */, unsigned int * /* signlen */, int& signature_result , std::string reason = "") ; void notifyDownloadComplete (const std::string& /* fileHash */) ; void notifyDownloadCompleteCount (uint32_t /* count */) ; void notifyHistoryChanged (uint32_t /* msgId */, int /* type */) ; - bool askForPassword (const std::string& /* key_details */, bool /* prev_is_bad */, std::string&, bool *cancelled /* password */ ) ; + bool askForPassword (const std::string& title, const std::string& /* key_details */, bool /* prev_is_bad */, std::string&, bool *cancelled /* password */ ) ; bool askForPluginConfirmation (const std::string& /* plugin_filename */, const std::string& /* plugin_file_hash */) ; private: diff --git a/libretroshare/src/retroshare/rsidentity.h b/libretroshare/src/retroshare/rsidentity.h index bf6a80724..e7a7abbe8 100644 --- a/libretroshare/src/retroshare/rsidentity.h +++ b/libretroshare/src/retroshare/rsidentity.h @@ -62,6 +62,7 @@ extern RsIdentity *rsIdentity; // Unicode symbols. NOT utf-8 bytes, because of multi byte characters #define RSID_MAXIMUM_NICKNAME_SIZE 30 +#define RSID_MINIMUM_NICKNAME_SIZE 2 std::string rsIdTypeToString(uint32_t idtype); diff --git a/libretroshare/src/retroshare/rsnotify.h b/libretroshare/src/retroshare/rsnotify.h index 76999d540..991ba338e 100644 --- a/libretroshare/src/retroshare/rsnotify.h +++ b/libretroshare/src/retroshare/rsnotify.h @@ -229,12 +229,12 @@ class NotifyClient virtual void notifyPeerStatusChangedSummary () {} virtual void notifyDiscInfoChanged () {} - virtual bool askForDeferredSelfSignature (const void * /* data */, const uint32_t /* len */, unsigned char * /* sign */, unsigned int * /* signlen */,int& signature_result ) { signature_result = false ;return true; } + virtual bool askForDeferredSelfSignature (const void * /* data */, const uint32_t /* len */, unsigned char * /* sign */, unsigned int * /* signlen */,int& signature_result , std::string /*reason = ""*/) { signature_result = false ;return true; } virtual void notifyDownloadComplete (const std::string& /* fileHash */) {} virtual void notifyDownloadCompleteCount (uint32_t /* count */) {} virtual void notifyHistoryChanged (uint32_t /* msgId */, int /* type */) {} - virtual bool askForPassword (const std::string& /* key_details */, bool /* prev_is_bad */, std::string& /* password */,bool& /* cancelled */ ) { return false ;} + virtual bool askForPassword (const std::string& /* title */, const std::string& /* key_details */, bool /* prev_is_bad */, std::string& /* password */,bool& /* cancelled */ ) { return false ;} virtual bool askForPluginConfirmation (const std::string& /* plugin_filename */, const std::string& /* plugin_file_hash */) { return false ;} }; diff --git a/libretroshare/src/retroshare/rspeers.h b/libretroshare/src/retroshare/rspeers.h index 073700b71..c9afe9c1c 100644 --- a/libretroshare/src/retroshare/rspeers.h +++ b/libretroshare/src/retroshare/rspeers.h @@ -352,7 +352,7 @@ public: virtual bool getGPGValidList(std::list &gpg_ids) = 0; virtual bool getGPGAllList(std::list &gpg_ids) = 0; virtual bool getAssociatedSSLIds(const RsPgpId& gpg_id, std::list& ids) = 0; - virtual bool gpgSignData(const void *data, const uint32_t len, unsigned char *sign, unsigned int *signlen) = 0; + virtual bool gpgSignData(const void *data, const uint32_t len, unsigned char *sign, unsigned int *signlen, std::string reason = "") = 0; /* Add/Remove Friends */ virtual bool addFriend(const RsPeerId &ssl_id, const RsPgpId &gpg_id,ServicePermissionFlags flags = RS_NODE_PERM_DEFAULT) = 0; diff --git a/libretroshare/src/rsserver/p3peers.cc b/libretroshare/src/rsserver/p3peers.cc index cbe2a2dde..bd4e11cbd 100644 --- a/libretroshare/src/rsserver/p3peers.cc +++ b/libretroshare/src/rsserver/p3peers.cc @@ -635,9 +635,9 @@ bool p3Peers::getAssociatedSSLIds(const RsPgpId &gpg_id, std::list &id return mPeerMgr->getAssociatedPeers(gpg_id, ids); } -bool p3Peers::gpgSignData(const void *data, const uint32_t len, unsigned char *sign, unsigned int *signlen) +bool p3Peers::gpgSignData(const void *data, const uint32_t len, unsigned char *sign, unsigned int *signlen, std::string reason /* = "" */) { - return AuthGPG::getAuthGPG()->SignDataBin(data,len,sign,signlen); + return AuthGPG::getAuthGPG()->SignDataBin(data,len,sign,signlen, reason); } bool p3Peers::getGPGDetails(const RsPgpId &pgp_id, RsPeerDetails &d) diff --git a/libretroshare/src/rsserver/p3peers.h b/libretroshare/src/rsserver/p3peers.h index 38fad1c7b..2edae4abc 100644 --- a/libretroshare/src/rsserver/p3peers.h +++ b/libretroshare/src/rsserver/p3peers.h @@ -70,7 +70,7 @@ public: virtual bool getGPGAllList(std::list &ids); virtual bool getGPGDetails(const RsPgpId &id, RsPeerDetails &d); virtual bool getAssociatedSSLIds(const RsPgpId& gpg_id, std::list &ids); - virtual bool gpgSignData(const void *data, const uint32_t len, unsigned char *sign, unsigned int *signlen) ; + virtual bool gpgSignData(const void *data, const uint32_t len, unsigned char *sign, unsigned int *signlen, std::string reason = "") ; /* Add/Remove Friends */ virtual bool addFriend(const RsPeerId &ssl_id, const RsPgpId &gpg_id,ServicePermissionFlags flags = RS_NODE_PERM_DEFAULT); diff --git a/libretroshare/src/services/p3idservice.cc b/libretroshare/src/services/p3idservice.cc index be8f8ba54..bc79d98a1 100644 --- a/libretroshare/src/services/p3idservice.cc +++ b/libretroshare/src/services/p3idservice.cc @@ -2784,7 +2784,7 @@ RsGenExchange::ServiceCreate_Return p3IdService::service_CreateGroup(RsGxsGrpIte memset(signarray,0,MAX_SIGN_SIZE) ; // just in case. - mPgpUtils->askForDeferredSelfSignature((void *) hash.toByteArray(), hash.SIZE_IN_BYTES, signarray, &sign_size,result) ; + mPgpUtils->askForDeferredSelfSignature((void *) hash.toByteArray(), hash.SIZE_IN_BYTES, signarray, &sign_size,result, "p3IdService::service_CreateGroup()") ; /* error */ switch(result) diff --git a/retroshare-gui/src/gui/GenCertDialog.cpp b/retroshare-gui/src/gui/GenCertDialog.cpp index 555a35f7f..65780f954 100644 --- a/retroshare-gui/src/gui/GenCertDialog.cpp +++ b/retroshare-gui/src/gui/GenCertDialog.cpp @@ -19,21 +19,26 @@ * Boston, MA 02110-1301, USA. ****************************************************************/ -#include -#include -#include -#include -#include "gui/settings/rsharesettings.h" -#include "util/misc.h" #include "GenCertDialog.h" + #include #include #include -#include #include #include #include +#include #include + +#include +#include "gui/settings/rsharesettings.h" +#include "util/misc.h" + +#include +#include +#include +#include + #include #include #include @@ -99,18 +104,18 @@ void GenCertDialog::grabMouse() ui.entropy_bar->setValue(count*100/2048) ; - if(ui.entropy_bar->value() < 20) - { - ui.genButton2->setEnabled(false) ; - ui.genButton2->setIcon(QIcon(":/images/delete.png")) ; - ui.genButton2->setToolTip(tr("Currently disabled. Please move your mouse around until you reach at least 20%")) ; - } - else - { - ui.genButton2->setEnabled(true) ; - ui.genButton2->setIcon(QIcon(":/images/resume.png")) ; - ui.genButton2->setToolTip(tr("Click to create your node and/or profile")) ; - } + if(ui.entropy_bar->value() < 20) + { + ui.genButton->setEnabled(false) ; + ui.genButton->setIcon(QIcon(":/images/delete.png")) ; + ui.genButton->setToolTip(tr("Currently disabled. Please move your mouse around until you reach at least 20%")) ; + } + else + { + ui.genButton->setEnabled(true) ; + ui.genButton->setIcon(QIcon(":/images/resume.png")) ; + ui.genButton->setToolTip(tr("Click to create your node and/or profile")) ; + } RsInit::collectEntropy(E+(F << 16)) ; } @@ -121,7 +126,9 @@ void GenCertDialog::grabMouse() //} /** Default constructor */ GenCertDialog::GenCertDialog(bool onlyGenerateIdentity, QWidget *parent) - : QDialog(parent, Qt::WindowSystemMenuHint | Qt::WindowTitleHint | Qt::WindowCloseButtonHint), mOnlyGenerateIdentity(onlyGenerateIdentity) + : QDialog(parent, Qt::WindowSystemMenuHint | Qt::WindowTitleHint | Qt::WindowCloseButtonHint) + , mOnlyGenerateIdentity(onlyGenerateIdentity) + , mGXSNickname("") { /* Invoke Qt Designer generated QObject setup routine */ ui.setupUi(this); @@ -130,10 +137,10 @@ GenCertDialog::GenCertDialog(bool onlyGenerateIdentity, QWidget *parent) ui.headerFrame->setHeaderText(tr("Create a new profile")); connect(ui.new_gpg_key_checkbox, SIGNAL(clicked()), this, SLOT(newGPGKeyGenUiSetup())); - connect(ui.adv_checkbox, SIGNAL(clicked()), this, SLOT(updateUiSetup())); - connect(ui.hidden_checkbox, SIGNAL(clicked()), this, SLOT(updateUiSetup())); + connect(ui.adv_checkbox, SIGNAL(clicked()), this, SLOT(updateUiSetup())); + connect(ui.hidden_checkbox, SIGNAL(clicked()), this, SLOT(updateUiSetup())); - connect(ui.genButton2, SIGNAL(clicked()), this, SLOT(genPerson())); + connect(ui.genButton, SIGNAL(clicked()), this, SLOT(genPerson())); connect(ui.importIdentity_PB, SIGNAL(clicked()), this, SLOT(importIdentity())); connect(ui.exportIdentity_PB, SIGNAL(clicked()), this, SLOT(exportIdentity())); @@ -162,17 +169,20 @@ GenCertDialog::GenCertDialog(bool onlyGenerateIdentity, QWidget *parent) // make sure that QVariant always takes an 'int' otherwise the program will crash! ui.keylength_comboBox->addItem("default (2048 bits, recommended)", QVariant(2048)); ui.keylength_comboBox->addItem("high (3072 bits)", QVariant(3072)); - ui.keylength_comboBox->addItem("insane (4096 bits)", QVariant(4096)); + ui.keylength_comboBox->addItem("insane (4096 bits)", QVariant(4096)); #if QT_VERSION >= 0x040700 ui.email_input->setPlaceholderText(tr("[Optional] Visible to your friends, and friends of friends.")) ; ui.node_input->setPlaceholderText(tr("[Required] Examples: Home, Laptop,...")) ; ui.hiddenaddr_input->setPlaceholderText(tr("[Required] Tor/I2P address - Examples: xa76giaf6ifda7ri63i263.onion (obtained by you from Tor)")) ; ui.name_input->setPlaceholderText(tr("[Required] Visible to your friends, and friends of friends.")); + ui.nickname_input->setPlaceholderText(tr("[Optional] Used when you write in chat lobbies, forums and channel comments. Can be setup later if you need one.")); ui.password_input->setPlaceholderText(tr("[Required] This password protects your private PGP key.")); ui.password_input_2->setPlaceholderText(tr("[Required] Type the same password again here.")); #endif + ui.nickname_input->setMaxLength(RSID_MAXIMUM_NICKNAME_SIZE); + ui.node_input->setToolTip(tr("Enter a meaningful node description. e.g. : home, laptop, etc. \nThis field will be used to differentiate different installations with\nthe same profile (PGP key pair).")) ; ui.email_input->hide() ; @@ -223,7 +233,7 @@ void GenCertDialog::init() ui.header_label->show(); ui.new_gpg_key_checkbox->setChecked(false); setWindowTitle(tr("Create new node")); - ui.genButton2->setText(tr("Generate new node")); + ui.genButton->setText(tr("Generate new node")); ui.headerFrame->setHeaderText(tr("Create a new node")); genNewGPGKey = false; } else { @@ -232,7 +242,7 @@ void GenCertDialog::init() ui.new_gpg_key_checkbox->setChecked(true); ui.new_gpg_key_checkbox->setEnabled(true); setWindowTitle(tr("Create new profile")); - ui.genButton2->setText(tr("Generate new profile and node")); + ui.genButton->setText(tr("Generate new profile and node")); ui.headerFrame->setHeaderText(tr("Create a new profile and node")); genNewGPGKey = true; } @@ -271,35 +281,45 @@ void GenCertDialog::newGPGKeyGenUiSetup() { if (ui.new_gpg_key_checkbox->isChecked()) { genNewGPGKey = true; + setWindowTitle(tr("Create new profile")); + ui.headerFrame->setHeaderText(tr("Create a new profile and node")); + if (!mOnlyGenerateIdentity) { + ui.header_label->setVisible(haveGPGKeys); + } + ui.genprofileinfo_label->setVisible(false); + ui.no_gpg_key_label->setText(tr("Welcome to Retroshare. Before you can proceed you need to create a profile and associate a node with it. To do so please fill out this form.\nAlternatively you can import a (previously exported) profile. Just uncheck \"Create a new profile\"")); + + ui.importIdentity_PB->hide() ; + ui.exportIdentity_PB->hide(); + ui.adv_checkbox->setVisible(true); + + ui.genPGPuserlabel->hide(); + ui.genPGPuser->hide(); ui.name_label->show(); ui.name_input->show(); + ui.nickname_label->setVisible(!mOnlyGenerateIdentity); + ui.nickname_input->setVisible(!mOnlyGenerateIdentity); + ui.node_label->setVisible(true); + ui.node_input->setVisible(true); // ui.email_label->show(); // ui.email_input->show(); ui.password_label->show(); ui.password_label_2->show(); ui.password_input->show(); ui.password_input_2->show(); - ui.genPGPuserlabel->hide(); - ui.genPGPuser->hide(); - ui.importIdentity_PB->hide() ; - ui.exportIdentity_PB->hide(); - setWindowTitle(tr("Create new profile")); - ui.genButton2->setText(tr("Generate new profile and node")); - ui.headerFrame->setHeaderText(tr("Create a new profile and node")); - ui.no_gpg_key_label->setText(tr("Welcome to Retroshare. Before you can proceed you need to create a profile and associate a node with it. To do so please fill out this form.\nAlternatively you can import a (previously exported) profile. Just uncheck \"Create a new profile\"")); - ui.genButton2->setVisible(true); - ui.adv_checkbox->setVisible(true); - ui.node_label->setVisible(true); - ui.node_input->setVisible(true); - ui.entropy_label->setVisible(true); - ui.entropy_bar->setVisible(true); - ui.genprofileinfo_label->setVisible(false); - if (!mOnlyGenerateIdentity) { - ui.header_label->setVisible(haveGPGKeys); - } //ui.keylength_label->show(); //ui.keylength_comboBox->show(); + + ui.entropy_label->setVisible(true); + ui.entropy_bar->setVisible(true); + + ui.genButton->setVisible(true); + ui.genButton->setText(tr("Generate new profile and node")); } else { + genNewGPGKey = false; + setWindowTitle(tr("Create new node")); + ui.headerFrame->setHeaderText(tr("Create a new node")); + ui.header_label->setVisible(false); //haveGPGKeys = (ui.genPGPuser->count() != 0)?true:false; if (haveGPGKeys) { QVariant data = ui.genPGPuser->itemData(ui.genPGPuser->currentIndex()); @@ -310,37 +330,39 @@ void GenCertDialog::newGPGKeyGenUiSetup() { ui.genprofileinfo_label->show(); } } - genNewGPGKey = false; - ui.name_label->hide(); - ui.name_input->hide(); -// ui.email_label->hide(); -// ui.email_input->hide(); - ui.password_label->hide(); - ui.password_label_2->hide(); - ui.password_input->hide(); - ui.password_input_2->hide(); - ui.genPGPuserlabel->show(); - ui.genPGPuser->show(); + //ui.genprofileinfo_label->show(); + ui.no_gpg_key_label->setText(tr("Welcome to Retroshare. Before you can proceed you need to import a profile and after that associate a node with it.")); + ui.importIdentity_PB->setVisible(!mOnlyGenerateIdentity); ui.exportIdentity_PB->setVisible(haveGPGKeys); ui.exportIdentity_PB->setEnabled(haveGPGKeys); - setWindowTitle(tr("Create new node")); - ui.genButton2->setText(tr("Generate new node")); - ui.headerFrame->setHeaderText(tr("Create a new node")); - ui.no_gpg_key_label->setText(tr("Welcome to Retroshare. Before you can proceed you need to import a profile and after that associate a node with it.")); - ui.genButton2->setVisible(haveGPGKeys); ui.adv_checkbox->setVisible(haveGPGKeys); ui.adv_checkbox->setChecked(haveGPGKeys && adv_state); - ui.genPGPuser->setVisible(haveGPGKeys); + + //ui.genPGPuserlabel->show(); + //ui.genPGPuser->show(); ui.genPGPuserlabel->setVisible(haveGPGKeys); + ui.genPGPuser->setVisible(haveGPGKeys); + ui.name_label->hide(); + ui.name_input->hide(); + ui.nickname_label->setVisible(!mOnlyGenerateIdentity && haveGPGKeys); + ui.nickname_input->setVisible(!mOnlyGenerateIdentity && haveGPGKeys); ui.node_label->setVisible(haveGPGKeys); ui.node_input->setVisible(haveGPGKeys); - ui.entropy_label->setVisible(haveGPGKeys); - ui.entropy_bar->setVisible(haveGPGKeys); - //ui.genprofileinfo_label->show(); - ui.header_label->setVisible(false); +// ui.email_label->hide(); +// ui.email_input->hide(); + ui.password_label->hide(); + ui.password_input->hide(); + ui.password_label_2->hide(); + ui.password_input_2->hide(); ui.keylength_label->hide(); ui.keylength_comboBox->hide(); + + ui.entropy_label->setVisible(haveGPGKeys); + ui.entropy_bar->setVisible(haveGPGKeys); + + ui.genButton->setText(tr("Generate new node")); + ui.genButton->setVisible(haveGPGKeys); } updateUiSetup(); ui.adv_checkbox->setChecked(adv_state); @@ -349,10 +371,10 @@ void GenCertDialog::newGPGKeyGenUiSetup() { void GenCertDialog::updateUiSetup() { - if (ui.adv_checkbox->isChecked()) - { - ui.hidden_checkbox->show(); - + if (ui.adv_checkbox->isChecked()) + { + ui.hidden_checkbox->show(); + if (ui.new_gpg_key_checkbox->isChecked()) { // key length is only for pgp key creation @@ -364,39 +386,39 @@ void GenCertDialog::updateUiSetup() ui.keylength_label->hide(); ui.keylength_comboBox->hide(); } - - if(ui.hidden_checkbox->isChecked()) - { - ui.hiddenaddr_input->show(); - ui.hiddenaddr_label->show(); - ui.label_hiddenaddr2->show(); - ui.hiddenport_label->show(); - ui.hiddenport_spinBox->show(); - } - else - { - ui.hiddenaddr_input->hide(); - ui.hiddenaddr_label->hide(); - ui.label_hiddenaddr2->hide(); - ui.hiddenport_label->hide(); - ui.hiddenport_spinBox->hide(); - } - } - else - { - ui.hiddenaddr_input->hide(); - ui.hiddenaddr_label->hide(); - ui.label_hiddenaddr2->hide(); - ui.hiddenport_label->hide(); - ui.hiddenport_spinBox->hide(); - ui.hidden_checkbox->hide(); - ui.keylength_label->hide(); - ui.keylength_comboBox->hide(); + if(ui.hidden_checkbox->isChecked()) + { + ui.hiddenaddr_input->show(); + ui.hiddenaddr_label->show(); + ui.label_hiddenaddr->show(); + ui.hiddenport_label->show(); + ui.hiddenport_spinBox->show(); + } + else + { + ui.hiddenaddr_input->hide(); + ui.hiddenaddr_label->hide(); + ui.label_hiddenaddr->hide(); + ui.hiddenport_label->hide(); + ui.hiddenport_spinBox->hide(); + } + } + else + { + ui.hiddenaddr_input->hide(); + ui.hiddenaddr_label->hide(); + ui.label_hiddenaddr->hide(); + ui.hiddenport_label->hide(); + ui.hiddenport_spinBox->hide(); - if(ui.hidden_checkbox->isChecked()) - ui.hidden_checkbox->setChecked(false) ; - } + ui.hidden_checkbox->hide(); + ui.keylength_label->hide(); + ui.keylength_comboBox->hide(); + + if(ui.hidden_checkbox->isChecked()) + ui.hidden_checkbox->setChecked(false) ; + } } @@ -418,9 +440,9 @@ void GenCertDialog::exportIdentity() void GenCertDialog::importIdentity() { - QString fname ; - if(!misc::getOpenFileName(this,RshareSettings::LASTDIR_CERT,tr("Import profile"), tr("RetroShare profile files (*.asc);;All files (*)"),fname)) - return ; + QString fname ; + if(!misc::getOpenFileName(this,RshareSettings::LASTDIR_CERT,tr("Import profile"), tr("RetroShare profile files (*.asc);;All files (*)"),fname)) + return ; if(fname.isNull()) return ; @@ -453,7 +475,30 @@ void GenCertDialog::genPerson() RsPgpId PGPId; bool isHiddenLoc = false; - if (ui.hidden_checkbox->isChecked()) + mGXSNickname = ui.nickname_input->text(); + if (!mGXSNickname.isEmpty()) + { + if (mGXSNickname.size() < RSID_MINIMUM_NICKNAME_SIZE) + { + std::cerr << "GenCertDialog::genPerson() GXS Nickname too short (min " << RSID_MINIMUM_NICKNAME_SIZE<< " chars)"; + std::cerr << std::endl; + + QMessageBox::warning(this, "", tr("The GXS nickname is too short. Please input at least %1 characters.").arg(RSID_MINIMUM_NICKNAME_SIZE), QMessageBox::Ok, QMessageBox::Ok); + mGXSNickname = ""; + return; + } + if (mGXSNickname.size() > RSID_MAXIMUM_NICKNAME_SIZE) + { + std::cerr << "GenCertDialog::genPerson() GXS Nickname too long (max " << RSID_MAXIMUM_NICKNAME_SIZE<< " chars)"; + std::cerr << std::endl; + + QMessageBox::warning(this, "", tr("The GXS nickname is too long. Please reduce the length to %1 characters.").arg(RSID_MAXIMUM_NICKNAME_SIZE), QMessageBox::Ok, QMessageBox::Ok); + mGXSNickname = ""; + return; + } + } + + if (ui.hidden_checkbox->isChecked()) { std::string hl = ui.hiddenaddr_input->text().toStdString(); uint16_t port = ui.hiddenport_spinBox->value(); @@ -515,6 +560,8 @@ void GenCertDialog::genPerson() ui.new_gpg_key_checkbox->hide(); ui.name_label->hide(); ui.name_input->hide(); + ui.nickname_label->hide(); + ui.nickname_input->hide(); // ui.email_label->hide(); // ui.email_input->hide(); ui.password_label_2->hide(); @@ -525,12 +572,12 @@ void GenCertDialog::genPerson() ui.genPGPuser->hide(); ui.node_label->hide(); ui.node_input->hide(); - ui.genButton2->hide(); + ui.genButton->hide(); ui.importIdentity_PB->hide(); ui.genprofileinfo_label->hide(); - ui.hidden_checkbox->hide(); - ui.adv_checkbox->hide(); - ui.keylength_label->hide(); + ui.hidden_checkbox->hide(); + ui.adv_checkbox->hide(); + ui.keylength_label->hide(); ui.keylength_comboBox->hide(); setCursor(Qt::WaitCursor) ; @@ -569,6 +616,7 @@ void GenCertDialog::genPerson() /* complete the process */ RsInit::LoadPassword(sslPasswd); if (Rshare::loadCertificate(sslId, false)) { + accept(); } } diff --git a/retroshare-gui/src/gui/GenCertDialog.h b/retroshare-gui/src/gui/GenCertDialog.h index 6dfff2476..c66445ebb 100644 --- a/retroshare-gui/src/gui/GenCertDialog.h +++ b/retroshare-gui/src/gui/GenCertDialog.h @@ -36,6 +36,7 @@ public: virtual ~GenCertDialog() ; virtual void mouseMoveEvent(QMouseEvent *e) ; + QString getGXSNickname() {return mGXSNickname;} private slots: void genPerson(); void importIdentity(); @@ -53,6 +54,7 @@ private: bool genNewGPGKey; bool haveGPGKeys; bool mOnlyGenerateIdentity; + QString mGXSNickname; QTimer *entropy_timer ; }; diff --git a/retroshare-gui/src/gui/GenCertDialog.ui b/retroshare-gui/src/gui/GenCertDialog.ui index 51b45cfd4..48ca23803 100644 --- a/retroshare-gui/src/gui/GenCertDialog.ui +++ b/retroshare-gui/src/gui/GenCertDialog.ui @@ -17,7 +17,7 @@ :/images/logo/logo_48.png:/images/logo/logo_48.png - + @@ -219,7 +219,7 @@ Alternatively you can use an existing profile. Just uncheck "Create a new p - + @@ -305,7 +305,7 @@ Alternatively you can use an existing profile. Just uncheck "Create a new p - + Qt::Horizontal @@ -320,7 +320,7 @@ Alternatively you can use an existing profile. Just uncheck "Create a new p - + 6 @@ -338,7 +338,7 @@ Alternatively you can use an existing profile. Just uncheck "Create a new p - + Qt::Horizontal @@ -353,107 +353,184 @@ Alternatively you can use an existing profile. Just uncheck "Create a new p - - - - - - - - 120 - 32 - - - - - 120 - 32 - - - - Use profile - - - - - - - - 120 - 32 - - - - - 120 - 32 - - - - Name - - - - - - - Email - - - - - - - This password is for PGP - - - Password - - - - - - - This password is for PGP - - - Password (check) - - - - - - - Node - - - - - - - hidden address - - - - + + + + + Use profile + + - - + + + + Your profile is associated with a PGP key pair. RetroShare currently ignores DSA keys. + + + + + + + Name + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 16777215 + 32 + + + + Enter your nickname here + + + 64 + + + + + + + + + + Chatrooms/Forums Nickname + + + + + + + You can have one or more identities. They are used when you write in chat lobbies, forums and channel comments. They act as the destination for distant chat and the Retroshare distant mail system. + + + + + + + Email + + + + + + + Be careful: this email will be visible to your friends and friends +of your friends. This information is required by PGP, but to stay +anonymous, you can use a fake email. + + + 64 + + + + + + + This password is for PGP + + + Password + + + + + + + Put a strong password here. This password protects your private PGP key. + + + + + + 1024 + + + QLineEdit::Password + + + + + + + This password is for PGP + + + Password (check) + + + + + + + + 0 + 0 + + + + Put a strong password here. This password protects your private PGP key. + + + + + + 1024 + + + QLineEdit::Password + + + + + + + Node name + + + + + + + + 0 + 0 + + + + 64 + + + + + + + hidden address + + + + + + + 6 + - - - Your profile is associated with a PGP key pair. RetroShare currently ignores DSA keys. - - - - - - - - 0 - 0 - - + 0 @@ -466,171 +543,55 @@ Alternatively you can use an existing profile. Just uncheck "Create a new p 32 - - Enter your nickname here - 64 - - - Be careful: this email will be visible to your friends and friends -of your friends. This information is required by PGP, but to stay -anonymous, you can use a fake email. - - - 64 - - - - - - - Put a strong password here. This password protects your private PGP key. - - - - - - 1024 - - - QLineEdit::Password - - - - - - - - 0 - 0 - - - - Put a strong password here. This password protects your private PGP key. - - - - - - 1024 - - - QLineEdit::Password - - - - - - - - 0 - 0 - - - - 64 - - - - - - - 6 - - - - - - 0 - 0 - - - - - 16777215 - 32 - - - - 64 - - - - - - - Port - - - - - - - <html><head/><body><p>This is your connection port.</p><p>Any value between 1024 and 65535 </p><p>should be ok. You can change it later.</p></body></html> - - - 1 - - - 65535 - - - 7812 - - - - - - - - - - - - - <html><head/><body><p>This can be a Tor Onion address of the form: xa76giaf6ifda7ri63i263.onion <br/>or an I2P address in the form: [52 characters].b32.i2p </p><p>In order to get one, you must configure either Tor or I2P to create a new hidden service / server tunnel. If you do not yet have one, you can still go on, and make it right later in RetroShare's Options-&gt;Network-&gt;Hidden Service configuration panel.</p></body></html> - - - true - - - - - - - - - - - - 120 - 32 - - - - - 120 - 32 - - + - PGP key length + Port + + + + + + + <html><head/><body><p>This is your connection port.</p><p>Any value between 1024 and 65535 </p><p>should be ok. You can change it later.</p></body></html> + + + 1 + + + 65535 + + + 7812 - - - - - - + + + + <html><head/><body><p>This can be a Tor Onion address of the form: xa76giaf6ifda7ri63i263.onion <br/>or an I2P address in the form: [52 characters].b32.i2p </p><p>In order to get one, you must configure either Tor or I2P to create a new hidden service / server tunnel. If you do not yet have one, you can still go on, and make it right later in RetroShare's Options-&gt;Network-&gt;Hidden Service configuration panel.</p></body></html> + + + true + + + + + + + PGP key length + + + + + @@ -722,7 +683,7 @@ anonymous, you can use a fake email. - + 16777215 @@ -748,7 +709,7 @@ anonymous, you can use a fake email. - + Qt::Vertical @@ -761,30 +722,37 @@ anonymous, you can use a fake email. - no_node_label - genButton2 - header_label - genprofileinfo_label - entropy_bar - entropy_label - headerFrame - no_gpg_key_label - verticalSpacer - label_hiddenaddr2 - - StyledLabel - QLabel -
gui/common/StyledLabel.h
-
HeaderFrame QFrame
gui/common/HeaderFrame.h
1
+ + StyledLabel + QLabel +
gui/common/StyledLabel.h
+
+ + new_gpg_key_checkbox + importIdentity_PB + exportIdentity_PB + adv_checkbox + hidden_checkbox + genPGPuser + name_input + nickname_input + email_input + password_input + password_input_2 + node_input + hiddenaddr_input + hiddenport_spinBox + genButton + diff --git a/retroshare-gui/src/gui/Identity/IdEditDialog.cpp b/retroshare-gui/src/gui/Identity/IdEditDialog.cpp index 9cd8c60e9..97b10ac4e 100644 --- a/retroshare-gui/src/gui/Identity/IdEditDialog.cpp +++ b/retroshare-gui/src/gui/Identity/IdEditDialog.cpp @@ -505,17 +505,17 @@ void IdEditDialog::createId() { QString groupname = ui->lineEdit_Nickname->text(); - if (groupname.size() < 2) + if (groupname.size() < RSID_MINIMUM_NICKNAME_SIZE) { - std::cerr << "IdEditDialog::createId() Nickname too short"; + std::cerr << "IdEditDialog::createId() Nickname too short (min " << RSID_MINIMUM_NICKNAME_SIZE << " chars)"; std::cerr << std::endl; - QMessageBox::warning(this, "", tr("The nickname is too short. Please input at least %1 characters.").arg(2), QMessageBox::Ok, QMessageBox::Ok); + QMessageBox::warning(this, "", tr("The nickname is too short. Please input at least %1 characters.").arg(RSID_MINIMUM_NICKNAME_SIZE), QMessageBox::Ok, QMessageBox::Ok); return; } if (groupname.size() > RSID_MAXIMUM_NICKNAME_SIZE) { - std::cerr << "IdEditDialog::createId() Nickname too long (max " << RSID_MAXIMUM_NICKNAME_SIZE<< " chars)"; + std::cerr << "IdEditDialog::createId() Nickname too long (max " << RSID_MAXIMUM_NICKNAME_SIZE << " chars)"; std::cerr << std::endl; QMessageBox::warning(this, "", tr("The nickname is too long. Please reduce the length to %1 characters.").arg(RSID_MAXIMUM_NICKNAME_SIZE), QMessageBox::Ok, QMessageBox::Ok); diff --git a/retroshare-gui/src/gui/notifyqt.cpp b/retroshare-gui/src/gui/notifyqt.cpp index e6e5ca52b..e3e02e02c 100644 --- a/retroshare-gui/src/gui/notifyqt.cpp +++ b/retroshare-gui/src/gui/notifyqt.cpp @@ -148,7 +148,7 @@ void NotifyQt::notifyOwnAvatarChanged() class SignatureEventData { public: - SignatureEventData(const void *_data,int32_t _len,unsigned int _signlen) + SignatureEventData(const void *_data,int32_t _len,unsigned int _signlen, std::string _reason) { // We need a new memory chnk because there's no guarranty _sign nor _signlen are not in the stack @@ -173,6 +173,7 @@ class SignatureEventData } len = _len ; memcpy(data,_data,len) ; + reason = _reason ; } ~SignatureEventData() @@ -184,7 +185,7 @@ class SignatureEventData void performSignature() { - if(rsPeers->gpgSignData(data,len,sign,signlen)) + if(rsPeers->gpgSignData(data,len,sign,signlen,reason)) signature_result = SELF_SIGNATURE_RESULT_SUCCESS ; else signature_result = SELF_SIGNATURE_RESULT_FAILED ; @@ -194,10 +195,11 @@ class SignatureEventData uint32_t len ; unsigned char *sign ; unsigned int *signlen ; - int signature_result ; // 0=pending, 1=done, 2=failed/cancelled. + int signature_result ; // 0=pending, 1=done, 2=failed/cancelled. + std::string reason ; }; -bool NotifyQt::askForDeferredSelfSignature(const void *data, const uint32_t len, unsigned char *sign, unsigned int *signlen,int& signature_result) +bool NotifyQt::askForDeferredSelfSignature(const void *data, const uint32_t len, unsigned char *sign, unsigned int *signlen,int& signature_result, std::string reason /*=""*/) { { QMutexLocker m(&_mutex) ; @@ -234,7 +236,7 @@ bool NotifyQt::askForDeferredSelfSignature(const void *data, const uint32_t len, // std::cerr << "NotifyQt:: deferred signature event requeted. Pushing into queue" << std::endl; - SignatureEventData *edta = new SignatureEventData(data,len,*signlen) ; + SignatureEventData *edta = new SignatureEventData(data,len,*signlen, reason) ; _deferred_signature_queue[chksum.toStdString()] = edta ; } @@ -261,12 +263,21 @@ void NotifyQt::handleSignatureEvent() -bool NotifyQt::askForPassword(const std::string& key_details, bool prev_is_bad, std::string& password,bool& cancelled) +bool NotifyQt::askForPassword(const std::string& title, const std::string& key_details, bool prev_is_bad, std::string& password,bool& cancelled) { RsAutoUpdatePage::lockAllEvents() ; QInputDialog dialog; - dialog.setWindowTitle(tr("PGP key passphrase")); + if (title == "") { + dialog.setWindowTitle(tr("PGP key passphrase")); + } else if (title == "AuthSSLimpl::SignX509ReqWithGPG()") { + dialog.setWindowTitle(tr("You need to sign your node's certificate.")); + } else if (title == "p3IdService::service_CreateGroup()") { + dialog.setWindowTitle(tr("You need to sign your forum/chatrooms identity.")); + } else { + dialog.setWindowTitle(QString::fromStdString(title)); + } + dialog.setLabelText((prev_is_bad ? QString("%1\n\n").arg(tr("Wrong password !")) : QString()) + QString("%1:\n %2").arg(tr("Please enter your PGP password for key"), QString::fromUtf8(key_details.c_str()))); dialog.setTextEchoMode(QLineEdit::Password); dialog.setModal(true); diff --git a/retroshare-gui/src/gui/notifyqt.h b/retroshare-gui/src/gui/notifyqt.h index 6080ce91e..bc5cac9db 100644 --- a/retroshare-gui/src/gui/notifyqt.h +++ b/retroshare-gui/src/gui/notifyqt.h @@ -67,7 +67,7 @@ class NotifyQt: public QObject, public NotifyClient virtual void notifyDiscInfoChanged() ; virtual void notifyDownloadComplete(const std::string& fileHash); virtual void notifyDownloadCompleteCount(uint32_t count); - virtual bool askForPassword(const std::string& key_details, bool prev_is_bad, std::string& password, bool &cancelled); + virtual bool askForPassword(const std::string& title, const std::string& key_details, bool prev_is_bad, std::string& password, bool &cancelled); virtual bool askForPluginConfirmation(const std::string& plugin_filename, const std::string& plugin_file_hash); // Queues the signature event so that it canhappen in the main GUI thread (to ask for passwd). @@ -82,7 +82,7 @@ class NotifyQt: public QObject, public NotifyClient // 1: signature success // 2: signature failed. Wrong passwd, user pressed cancel, etc. // - virtual bool askForDeferredSelfSignature(const void *data, const uint32_t len, unsigned char *sign, unsigned int *signlen,int& signature_result) ; + virtual bool askForDeferredSelfSignature(const void *data, const uint32_t len, unsigned char *sign, unsigned int *signlen, int& signature_result, std::string reason = "") ; /* Notify from GUI */ void notifyChatFontChanged(); diff --git a/retroshare-gui/src/gui/qss/stylesheet/Standard.qss b/retroshare-gui/src/gui/qss/stylesheet/Standard.qss index bea346b4a..29f7d1036 100644 --- a/retroshare-gui/src/gui/qss/stylesheet/Standard.qss +++ b/retroshare-gui/src/gui/qss/stylesheet/Standard.qss @@ -28,7 +28,7 @@ GenCertDialog QLabel#genprofileinfo_label, QLabel#header_label, QLabel#entropy_l background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #FFFFD7, stop:1 #FFFFB2); } -GenCertDialog QLabel#label_hiddenaddr2 { +GenCertDialog QLabel#label_hiddenaddr { border: 1px solid #50FF5B; border-radius: 6px; background: #CCFFCC; @@ -52,19 +52,6 @@ GenCertDialog > QFrame#frame { border: 1px solid #CCCCCC; } -GenCertDialog QPushButton#genButton { - border-image: url(:/images/btn_blue.png) 4; - border-width: 4; - padding: 0px 6px; - font-size: 14px; - font: bold; - color: white; -} - -GenCertDialog QPushButton#genButton:hover { - border-image: url(:/images/btn_blue_hover.png) 4; -} - /* ConnectFriendWizard */ ConnectFriendWizard { diff --git a/retroshare-gui/src/main.cpp b/retroshare-gui/src/main.cpp index e0ddf3796..43031a4ec 100644 --- a/retroshare-gui/src/main.cpp +++ b/retroshare-gui/src/main.cpp @@ -22,29 +22,32 @@ #include #include #include + #include -#include "gui/MainWindow.h" #include "gui/FriendsDialog.h" +#include "gui/GenCertDialog.h" +#include "gui/MainWindow.h" +#include "gui/MessengerWindow.h" +#include "gui/NetworkDialog.h" +#include "gui/NetworkView.h" +#include "gui/QuickStartWizard.h" +#include "gui/RetroShareLink.h" +#include "gui/SharedFilesDialog.h" +#include "gui/SoundManager.h" +#include "gui/StartDialog.h" +#include "gui/chat/ChatDialog.h" +#include "gui/connect/ConfCertDialog.h" +#include "gui/common/Emoticons.h" #include "gui/FileTransfer/SearchDialog.h" #include "gui/FileTransfer/TransfersDialog.h" -#include "gui/SharedFilesDialog.h" -#include "gui/NetworkDialog.h" -#include "gui/chat/ChatDialog.h" -#include "gui/QuickStartWizard.h" -#include "gui/MessengerWindow.h" -#include "gui/StartDialog.h" -#include "gui/GenCertDialog.h" -#include "gui/settings/rsharesettings.h" #include "gui/settings/RsharePeerSettings.h" -#include "gui/connect/ConfCertDialog.h" +#include "gui/settings/rsharesettings.h" +#include "gui/settings/WebuiPage.h" #include "idle/idle.h" -#include "gui/common/Emoticons.h" -#include "gui/RetroShareLink.h" -#include "gui/SoundManager.h" -#include "gui/NetworkView.h" #include "lang/languagesupport.h" #include "util/RsGxsUpdateBroadcast.h" -#include "gui/settings/WebuiPage.h" + +#include "retroshare/rsidentity.h" #ifdef SIGFPE_DEBUG #include @@ -250,6 +253,7 @@ feenableexcept(FE_INVALID | FE_DIVBYZERO); /* Start RetroShare */ QSplashScreen splashScreen(QPixmap(":/images/logo/logo_splash.png")/* , Qt::WindowStaysOnTopHint*/); + QString sDefaultGXSIdToCreate = ""; switch (initResult) { case RS_INIT_OK: { @@ -278,6 +282,7 @@ feenableexcept(FE_INVALID | FE_DIVBYZERO); if (gd.exec () == QDialog::Rejected) { return 1; } + sDefaultGXSIdToCreate = gd.getGXSNickname(); } splashScreen.show(); @@ -356,6 +361,15 @@ feenableexcept(FE_INVALID | FE_DIVBYZERO); w->processLastArgs(); + if (!sDefaultGXSIdToCreate.isEmpty()) { + RsIdentityParameters params; + params.nickname = sDefaultGXSIdToCreate.toUtf8().constData(); + params.isPgpLinked = true; + params.mImage.clear(); + uint32_t token = 0; + rsIdentity->createIdentity(token, params); + } + // I'm using a signal to transfer the hashing info to the mainwindow, because Qt schedules signals properly to // avoid clashes between infos from threads. // diff --git a/retroshare-nogui/src/notifytxt.cc b/retroshare-nogui/src/notifytxt.cc index 4327700ff..fbd9decaf 100644 --- a/retroshare-nogui/src/notifytxt.cc +++ b/retroshare-nogui/src/notifytxt.cc @@ -101,9 +101,9 @@ bool NotifyTxt::askForPluginConfirmation(const std::string& plugin_file_name, co return a == 'y' ; } -bool NotifyTxt::askForPassword(const std::string& question, bool /* prev_is_bad */, std::string& password,bool& cancel) +bool NotifyTxt::askForPassword(const std::string& title, const std::string& question, bool /* prev_is_bad */, std::string& password,bool& cancel) { - std::string question1="Please enter your PGP password for key:\n " + question + " :"; + std::string question1=title + "\nPlease enter your PGP password for key:\n " + question + " :"; char *passwd = getpass(question1.c_str()) ; password = passwd; cancel = false ; diff --git a/retroshare-nogui/src/notifytxt.h b/retroshare-nogui/src/notifytxt.h index 72a6f5771..6fc88bdf8 100644 --- a/retroshare-nogui/src/notifytxt.h +++ b/retroshare-nogui/src/notifytxt.h @@ -41,7 +41,7 @@ class NotifyTxt: public NotifyClient virtual void notifyListChange(int list, int type); virtual void notifyErrorMsg(int list, int sev, std::string msg); virtual void notifyChat(); - virtual bool askForPassword(const std::string& question, bool prev_is_bad, std::string& password,bool& cancel); + virtual bool askForPassword(const std::string& title, const std::string& question, bool prev_is_bad, std::string& password,bool& cancel); virtual bool askForPluginConfirmation(const std::string& plugin_file, const std::string& plugin_hash); virtual void notifyTurtleSearchResult(uint32_t search_id,const std::list& found_files); diff --git a/retroshare-nogui/src/retroshare.cc b/retroshare-nogui/src/retroshare.cc index 7ad45b0eb..75b9e17d8 100644 --- a/retroshare-nogui/src/retroshare.cc +++ b/retroshare-nogui/src/retroshare.cc @@ -442,7 +442,7 @@ void generatePasswordHash() std::string passwd1,passwd2 ; bool cancel ; - if(!NotifyTxt().askForPassword("Type your password (at least 8 chars) : ",false,passwd1,cancel)) exit(1) ; + if(!NotifyTxt().askForPassword("","Type your password (at least 8 chars) : ",false,passwd1,cancel)) exit(1) ; if(passwd1.length() < 8) { @@ -450,7 +450,7 @@ void generatePasswordHash() exit(1); } - if(!NotifyTxt().askForPassword("Type your password (checking) : ",false,passwd2,cancel)) exit(1) ; + if(!NotifyTxt().askForPassword("","Type your password (checking) : ",false,passwd2,cancel)) exit(1) ; if(passwd1 != passwd2) { diff --git a/tests/unittests/libretroshare/gxs/nxs_test/nxsdummyservices.cc b/tests/unittests/libretroshare/gxs/nxs_test/nxsdummyservices.cc index 38aa9f5d7..7b22d4e3a 100644 --- a/tests/unittests/libretroshare/gxs/nxs_test/nxsdummyservices.cc +++ b/tests/unittests/libretroshare/gxs/nxs_test/nxsdummyservices.cc @@ -155,7 +155,8 @@ bool rs_nxs_test::RsDummyPgpUtils::askForDeferredSelfSignature(const void* /*dat const uint32_t /*len*/, unsigned char* /*sign*/, unsigned int* /*signlen*/, - int& /*signature_result*/ + int& /*signature_result*/, + std::string /*reason*/ ) { return true; } diff --git a/tests/unittests/libretroshare/gxs/nxs_test/nxsdummyservices.h b/tests/unittests/libretroshare/gxs/nxs_test/nxsdummyservices.h index c8d43d944..23420bad1 100644 --- a/tests/unittests/libretroshare/gxs/nxs_test/nxsdummyservices.h +++ b/tests/unittests/libretroshare/gxs/nxs_test/nxsdummyservices.h @@ -155,7 +155,7 @@ namespace rs_nxs_test bool parseSignature(unsigned char *sign, unsigned int signlen, RsPgpId& issuer) const; bool VerifySignBin(const void *data, uint32_t len, unsigned char *sign, unsigned int signlen, const PGPFingerprintType& withfingerprint); - bool askForDeferredSelfSignature(const void *data, const uint32_t len, unsigned char *sign, unsigned int *signlen,int& signature_result ); + bool askForDeferredSelfSignature(const void *data, const uint32_t len, unsigned char *sign, unsigned int *signlen, int& signature_result , std::string reason = ""); private: diff --git a/tests/unittests/libretroshare/services/gxs/FakePgpAuxUtils.cc b/tests/unittests/libretroshare/services/gxs/FakePgpAuxUtils.cc index 8bcda2551..2b31d53d1 100644 --- a/tests/unittests/libretroshare/services/gxs/FakePgpAuxUtils.cc +++ b/tests/unittests/libretroshare/services/gxs/FakePgpAuxUtils.cc @@ -106,7 +106,7 @@ bool FakePgpAuxUtils::getGPGAllList(std::list &ids) return true; } -bool FakePgpAuxUtils::askForDeferredSelfSignature(const void* /*data*/, const uint32_t /*len*/, unsigned char *sign, unsigned int *signlen,int& signature_result ) +bool FakePgpAuxUtils::askForDeferredSelfSignature(const void* /*data*/, const uint32_t /*len*/, unsigned char *sign, unsigned int *signlen,int& signature_result, std::string /*reason = ""*/ ) { for(int i = 0; i < *signlen; i++) { diff --git a/tests/unittests/libretroshare/services/gxs/FakePgpAuxUtils.h b/tests/unittests/libretroshare/services/gxs/FakePgpAuxUtils.h index 6f40d622b..9866c3ee3 100644 --- a/tests/unittests/libretroshare/services/gxs/FakePgpAuxUtils.h +++ b/tests/unittests/libretroshare/services/gxs/FakePgpAuxUtils.h @@ -38,7 +38,7 @@ public: virtual bool parseSignature(unsigned char *sign, unsigned int signlen, RsPgpId& issuer) const; virtual bool VerifySignBin(const void *data, uint32_t len, unsigned char *sign, unsigned int signlen, const PGPFingerprintType& withfingerprint); - virtual bool askForDeferredSelfSignature(const void *data, const uint32_t len, unsigned char *sign, unsigned int *signlen,int& signature_result ); + virtual bool askForDeferredSelfSignature(const void *data, const uint32_t len, unsigned char *sign, unsigned int *signlen, int& signature_result , std::string reason); virtual void addPeerListToPgpList(const std::list &ids); virtual void addPeerIdToPgpList(const RsPeerId &id);