2007-11-14 22:18:48 -05:00
/****************************************************************
* RetroShare is distributed under the following license :
*
* Copyright ( C ) 2006 , crypton
*
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation ; either version 2
* of the License , or ( at your option ) any later version .
*
* This program 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 General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
2009-07-17 17:41:20 -04:00
* Foundation , Inc . , 51 Franklin Street , Fifth Floor ,
2007-11-14 22:18:48 -05:00
* Boston , MA 02110 - 1301 , USA .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
# include "ConfCertDialog.h"
# include "rsiface/rsiface.h"
2008-01-25 03:49:40 -05:00
# include "rsiface/rspeers.h"
2009-07-17 17:41:20 -04:00
# include "rsiface/rsdisc.h"
2007-11-14 22:18:48 -05:00
2009-01-01 19:55:03 -05:00
# include <QTime>
2010-01-13 16:11:02 -05:00
# include <QtGui>
2009-01-01 19:55:03 -05:00
2009-05-07 18:43:11 -04:00
ConfCertDialog * ConfCertDialog : : instance ( )
{
static ConfCertDialog * confdialog = new ConfCertDialog ;
return confdialog ;
}
2009-01-01 19:55:03 -05:00
2007-11-14 22:18:48 -05:00
/* Define the format used for displaying the date and time */
# define DATETIME_FMT "MMM dd hh:mm:ss"
/** Default constructor */
ConfCertDialog : : ConfCertDialog ( QWidget * parent , Qt : : WFlags flags )
2008-04-07 20:31:46 -04:00
: QDialog ( parent , flags )
2007-11-14 22:18:48 -05:00
{
/* Invoke Qt Designer generated QObject setup routine */
ui . setupUi ( this ) ;
connect ( ui . applyButton , SIGNAL ( clicked ( ) ) , this , SLOT ( applyDialog ( ) ) ) ;
connect ( ui . cancelButton , SIGNAL ( clicked ( ) ) , this , SLOT ( closeinfodlg ( ) ) ) ;
2010-01-13 16:11:02 -05:00
connect ( ui . sign_button , SIGNAL ( clicked ( ) ) , this , SLOT ( makeFriend ( ) ) ) ;
2007-11-14 22:18:48 -05:00
2009-07-17 17:41:20 -04:00
2009-05-16 13:17:46 -04:00
ui . applyButton - > setToolTip ( tr ( " Apply and Close " ) ) ;
2007-11-14 22:18:48 -05:00
}
2009-05-07 18:43:11 -04:00
void ConfCertDialog : : show ( const std : : string & peer_id )
{
/* set the Id */
instance ( ) - > loadId ( peer_id ) ;
instance ( ) - > show ( ) ;
}
2007-11-14 22:18:48 -05:00
2009-07-17 17:41:20 -04:00
/**
2007-11-14 22:18:48 -05:00
Overloads the default show ( ) slot so we can set opacity */
void
ConfCertDialog : : show ( )
{
//loadSettings();
if ( ! this - > isVisible ( ) ) {
2008-04-07 20:31:46 -04:00
QDialog : : show ( ) ;
2007-11-14 22:18:48 -05:00
}
}
void ConfCertDialog : : closeEvent ( QCloseEvent * event )
{
QWidget : : closeEvent ( event ) ;
}
void ConfCertDialog : : closeinfodlg ( )
{
close ( ) ;
}
void ConfCertDialog : : loadId ( std : : string id )
{
mId = id ;
loadDialog ( ) ;
}
void ConfCertDialog : : loadDialog ( )
{
2008-01-25 03:49:40 -05:00
RsPeerDetails detail ;
if ( ! rsPeers - > getPeerDetails ( mId , detail ) )
2007-11-14 22:18:48 -05:00
{
2010-01-13 16:14:49 -05:00
QMessageBox : : information ( this ,
tr ( " RetroShare " ) ,
tr ( " Error : cannot get peer details. " ) ) ;
closeinfodlg ( ) ;
2010-01-13 16:11:02 -05:00
}
2009-07-17 17:41:20 -04:00
2008-01-25 03:49:40 -05:00
ui . name - > setText ( QString : : fromStdString ( detail . name ) ) ;
2009-01-01 19:55:03 -05:00
ui . peerid - > setText ( QString : : fromStdString ( detail . id ) ) ;
2010-01-13 16:14:49 -05:00
if ( ! detail . isOnlyGPGdetail ) {
2010-01-13 16:22:52 -05:00
ui . loc - > setText ( QString : : fromStdString ( detail . location ) ) ;
2010-01-13 16:11:02 -05:00
// Dont Show a timestamp in RS calculate the day
QDateTime date = QDateTime : : fromTime_t ( detail . lastConnect ) ;
QString stime = date . toString ( Qt : : LocalDate ) ;
ui . lastcontact - > setText ( stime ) ;
/* set retroshare version */
std : : map < std : : string , std : : string > : : iterator vit ;
std : : map < std : : string , std : : string > versions ;
bool retv = rsDisc - > getDiscVersions ( versions ) ;
if ( retv & & versions . end ( ) ! = ( vit = versions . find ( detail . id ) ) )
{
ui . version - > setText ( QString : : fromStdString ( vit - > second ) ) ;
}
/* set local address */
ui . localAddress - > setText ( QString : : fromStdString ( detail . localAddr ) ) ;
ui . localPort - > setValue ( detail . localPort ) ;
/* set the server address */
ui . extAddress - > setText ( QString : : fromStdString ( detail . extAddr ) ) ;
ui . extPort - > setValue ( detail . extPort ) ;
ui . ipAddressList - > clear ( ) ;
for ( std : : list < std : : string > : : const_iterator it ( detail . ipAddressList . begin ( ) ) ; it ! = detail . ipAddressList . end ( ) ; + + it )
ui . ipAddressList - > addItem ( QString : : fromStdString ( * it ) ) ;
2010-01-13 16:12:56 -05:00
2010-01-13 16:22:52 -05:00
ui . loc - > show ( ) ;
ui . label_loc - > show ( ) ;
2010-01-13 16:12:56 -05:00
ui . lastcontact - > show ( ) ;
2010-01-13 16:22:52 -05:00
ui . label_last_contact - > show ( ) ;
2010-01-13 16:12:56 -05:00
ui . version - > show ( ) ;
2010-01-13 16:22:52 -05:00
ui . label_version - > show ( ) ;
2010-01-13 16:12:56 -05:00
ui . groupBox - > show ( ) ;
2010-01-13 16:11:02 -05:00
} else {
2010-01-13 16:22:52 -05:00
ui . loc - > hide ( ) ;
ui . label_loc - > hide ( ) ;
2010-01-13 16:11:02 -05:00
ui . lastcontact - > hide ( ) ;
2010-01-13 16:22:52 -05:00
ui . label_last_contact - > hide ( ) ;
2010-01-13 16:11:02 -05:00
ui . version - > hide ( ) ;
2010-01-13 16:22:52 -05:00
ui . label_version - > hide ( ) ;
2010-01-13 16:11:02 -05:00
ui . groupBox - > hide ( ) ;
}
2009-11-11 17:12:50 -05:00
2010-01-13 16:11:02 -05:00
if ( detail . ownsign ) {
ui . sign_button - > hide ( ) ;
ui . signed_already_label - > show ( ) ;
} else {
2010-01-13 16:12:56 -05:00
ui . sign_button - > show ( ) ;
2010-01-13 16:11:02 -05:00
ui . signed_already_label - > hide ( ) ;
}
2010-01-13 16:12:56 -05:00
if ( detail . hasSignedMe ) {
2010-01-13 16:14:49 -05:00
ui . is_signing_me - > setText ( tr ( " Peer has authenticated me as a friend and did sign my GPG key " ) ) ;
2010-01-13 16:11:02 -05:00
} else {
2010-01-13 16:14:49 -05:00
ui . is_signing_me - > setText ( tr ( " Peer has not authenticated me as a friend and did not sign my GPG key " ) ) ;
}
//web of trust
if ( detail . trustLvl = = 5 ) {
//trust is ultimate, it means it's one of our own keys
ui . web_of_trust_label - > setText ( tr ( " Your trust in this peer is ultimate, it's probably a key you own. " ) ) ;
ui . radioButton_trust_fully - > hide ( ) ;
ui . radioButton_trust_marginnaly - > hide ( ) ;
ui . radioButton_trust_never - > hide ( ) ;
} else {
ui . radioButton_trust_fully - > show ( ) ;
ui . radioButton_trust_marginnaly - > show ( ) ;
ui . radioButton_trust_never - > show ( ) ;
if ( detail . trustLvl = = 4 ) {
ui . web_of_trust_label - > setText ( tr ( " Your trust in this peer is full, it means he has an excellent understanding of key signing, and his signature on a key would be as good as your own. " ) ) ;
ui . radioButton_trust_fully - > setChecked ( true ) ;
} else if ( detail . trustLvl = = 3 ) {
ui . web_of_trust_label - > setText ( tr ( " Your trust in this peer is marginal, it means he understands the implications of key signing and properly check keys before signing them. " ) ) ;
ui . radioButton_trust_marginnaly - > setChecked ( true ) ;
} else if ( detail . trustLvl = = 2 ) {
ui . web_of_trust_label - > setText ( tr ( " Your trust in this peer is none, it means he is known to improperly sign other keys. " ) ) ;
ui . radioButton_trust_never - > setChecked ( true ) ;
} else {
ui . web_of_trust_label - > setText ( tr ( " Your trust in this peer is not set. " ) ) ;
ui . radioButton_trust_fully - > setChecked ( false ) ;
ui . radioButton_trust_marginnaly - > setChecked ( false ) ;
ui . radioButton_trust_never - > setChecked ( false ) ;
}
2010-01-13 16:11:02 -05:00
}
ui . signers - > clear ( ) ;
for ( std : : list < std : : string > : : const_iterator it ( detail . gpgSigners . begin ( ) ) ; it ! = detail . gpgSigners . end ( ) ; + + it ) {
RsPeerDetails signerDetail ;
2010-01-13 16:22:52 -05:00
if ( rsPeers - > getGPGDetails ( * it , signerDetail ) ) {
2010-01-13 16:11:02 -05:00
ui . signers - > append ( QString : : fromStdString ( signerDetail . name ) ) ;
}
}
2007-11-14 22:18:48 -05:00
}
void ConfCertDialog : : applyDialog ( )
{
2010-01-13 16:14:49 -05:00
std : : cerr < < " ConfCertDialog::applyDialog() called " < < std : : endl ;
RsPeerDetails detail ;
2008-01-25 03:49:40 -05:00
if ( ! rsPeers - > getPeerDetails ( mId , detail ) )
2007-11-14 22:18:48 -05:00
{
2010-01-13 16:22:52 -05:00
if ( ! rsPeers - > getGPGDetails ( mId , detail ) ) {
2010-01-13 16:14:49 -05:00
QMessageBox : : information ( this ,
tr ( " RetroShare " ) ,
tr ( " Error : cannot get peer details. " ) ) ;
closeinfodlg ( ) ;
}
}
2009-07-17 17:41:20 -04:00
2010-01-13 16:14:49 -05:00
//check the GPG trustlvl
if ( ui . radioButton_trust_fully - > isChecked ( ) & & detail . trustLvl ! = 4 ) {
//trust has changed to fully
2010-01-13 16:22:52 -05:00
rsPeers - > trustGPGCertificate ( detail . id , 4 ) ;
2010-01-13 16:14:49 -05:00
} else if ( ui . radioButton_trust_marginnaly - > isChecked ( ) & & detail . trustLvl ! = 3 ) {
2010-01-13 16:22:52 -05:00
rsPeers - > trustGPGCertificate ( detail . id , 3 ) ;
2010-01-13 16:14:49 -05:00
} else if ( ui . radioButton_trust_never - > isChecked ( ) & & detail . trustLvl ! = 2 ) {
2010-01-13 16:22:52 -05:00
rsPeers - > trustGPGCertificate ( detail . id , 2 ) ;
2010-01-13 16:14:49 -05:00
}
2007-11-14 22:18:48 -05:00
2010-01-13 16:14:49 -05:00
if ( ! detail . isOnlyGPGdetail ) {
/* check if the data is the same */
bool localChanged = false ;
bool extChanged = false ;
bool fwChanged = false ;
2007-11-14 22:18:48 -05:00
2010-01-13 16:14:49 -05:00
/* set local address */
if ( ( detail . localAddr ! = ui . localAddress - > text ( ) . toStdString ( ) ) | | ( detail . localPort ! = ui . localPort - > value ( ) ) )
localChanged = true ;
2007-11-14 22:18:48 -05:00
2010-01-13 16:14:49 -05:00
if ( ( detail . extAddr ! = ui . extAddress - > text ( ) . toStdString ( ) ) | | ( detail . extPort ! = ui . extPort - > value ( ) ) )
extChanged = true ;
2007-11-14 22:18:48 -05:00
2010-01-13 16:14:49 -05:00
/* now we can action the changes */
if ( localChanged )
rsPeers - > setLocalAddress ( mId , ui . localAddress - > text ( ) . toStdString ( ) , ui . localPort - > value ( ) ) ;
2009-07-17 17:41:20 -04:00
2010-01-13 16:14:49 -05:00
if ( extChanged )
rsPeers - > setExtAddress ( mId , ui . extAddress - > text ( ) . toStdString ( ) , ui . extPort - > value ( ) ) ;
if ( localChanged | | extChanged )
emit configChanged ( ) ;
}
2009-05-07 18:43:11 -04:00
2010-01-13 16:14:49 -05:00
closeinfodlg ( ) ;
2007-11-14 22:18:48 -05:00
}
2009-05-07 18:43:11 -04:00
void ConfCertDialog : : makeFriend ( )
{
2010-01-13 16:22:52 -05:00
rsPeers - > signGPGCertificate ( mId ) ;
2010-01-13 16:11:02 -05:00
loadDialog ( ) ;
2007-11-14 22:18:48 -05:00
}