summaryrefslogtreecommitdiffstats
path: root/kgpg/kgpglibrary.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kgpg/kgpglibrary.cpp')
-rw-r--r--kgpg/kgpglibrary.cpp245
1 files changed, 245 insertions, 0 deletions
diff --git a/kgpg/kgpglibrary.cpp b/kgpg/kgpglibrary.cpp
new file mode 100644
index 0000000..55455f9
--- /dev/null
+++ b/kgpg/kgpglibrary.cpp
@@ -0,0 +1,245 @@
+/***************************************************************************
+ kgpglibrary.cpp - description
+ -------------------
+ begin : Mon Jul 8 2002
+ copyright : (C) 2002 by Jean-Baptiste Mardelle
+ email : bj@altern.org
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include <qhbox.h>
+#include <qvbox.h>
+
+#include <klocale.h>
+#include <kapplication.h>
+#include <kconfig.h>
+#include <kmessagebox.h>
+#include <krun.h>
+#include <qfile.h>
+#include <kpassivepopup.h>
+#include <kiconloader.h>
+#include "kgpglibrary.h"
+#include "popuppublic.h"
+#include "kgpginterface.h"
+#include <kio/renamedlg.h>
+
+KgpgLibrary::KgpgLibrary(QWidget *parent, bool pgpExtension)
+{
+ if (pgpExtension)
+ extension=".pgp";
+ else
+ extension=".gpg";
+ popIsActive=false;
+ panel=parent;
+}
+
+KgpgLibrary::~KgpgLibrary()
+{}
+
+
+void KgpgLibrary::slotFileEnc(KURL::List urls,QStringList opts,QStringList defaultKey,KShortcut goDefaultKey)
+{
+ ///////////////////////////////////////////////////////////////////////// encode file file
+ if (!urls.empty()) {
+ urlselecteds=urls;
+ if (defaultKey.isEmpty()) {
+ QString fileNames=urls.first().fileName();
+ if (urls.count()>1) fileNames+=",...";
+ popupPublic *dialogue=new popupPublic(0,"Public keys",fileNames,true,goDefaultKey);
+ connect(dialogue,SIGNAL(selectedKey(QStringList,QStringList,bool,bool)),this,SLOT(startencode(QStringList,QStringList,bool,bool)));
+ dialogue->exec();
+ delete dialogue;
+ } else
+ startencode(defaultKey,opts,false,false);
+ }
+}
+
+void KgpgLibrary::startencode(QStringList encryptKeys,QStringList encryptOptions,bool shred,bool symetric)
+{
+ popIsActive=false;
+ //KURL::List::iterator it;
+ //filesToEncode=urlselecteds.count();
+ _encryptKeys=encryptKeys;
+ _encryptOptions=encryptOptions;
+ _shred=shred;
+ _symetric=symetric;
+ fastencode(urlselecteds.first(),encryptKeys,encryptOptions,symetric);
+}
+
+
+void KgpgLibrary::fastencode(KURL &fileToCrypt,QStringList selec,QStringList encryptOptions,bool symetric)
+{
+ ////////////////// encode from file
+ if ((selec.isEmpty()) && (!symetric)) {
+ KMessageBox::sorry(0,i18n("You have not chosen an encryption key."));
+ return;
+ }
+ urlselected=fileToCrypt;
+ KURL dest;
+ if (encryptOptions.find("--armor")!=encryptOptions.end())
+ dest.setPath(urlselected.path()+".asc");
+ else
+ dest.setPath(urlselected.path()+extension);
+
+ QFile fgpg(dest.path());
+
+ if (fgpg.exists()) {
+ KIO::RenameDlg *over=new KIO::RenameDlg(0,i18n("File Already Exists"),QString::null,dest.path(),KIO::M_OVERWRITE);
+ if (over->exec()==QDialog::Rejected)
+ {
+ delete over;
+ emit systemMessage(QString::null,true);
+ return;
+ }
+ dest=over->newDestURL();
+ delete over;
+ }
+ int filesToEncode=urlselecteds.count();
+ if (filesToEncode>1)
+ emit systemMessage(i18n("<b>%1 Files left.</b>\nEncrypting </b>%2").arg(filesToEncode).arg(urlselecteds.first().path()));
+ else emit systemMessage(i18n("<b>Encrypting </b>%2").arg(urlselecteds.first().path()));
+ KgpgInterface *cryptFileProcess=new KgpgInterface();
+ pop = new KPassivePopup(panel);
+ cryptFileProcess->KgpgEncryptFile(selec,urlselected,dest,encryptOptions,symetric);
+ if (!popIsActive)
+ {
+ //connect(cryptFileProcess,SIGNAL(processstarted(QString)),this,SLOT(processpopup2(QString)));
+ popIsActive=true;
+ }
+ connect(cryptFileProcess,SIGNAL(encryptionfinished(KURL)),this,SLOT(processenc(KURL)));
+ connect(cryptFileProcess,SIGNAL(errormessage(QString)),this,SLOT(processencerror(QString)));
+}
+
+void KgpgLibrary::processpopup2(QString fileName)
+{
+
+ //pop->setTimeout(0);
+ pop->setView(i18n("Processing encryption (%1)").arg(fileName),i18n("Please wait..."),KGlobal::iconLoader()->loadIcon("kgpg",KIcon::Desktop));
+ pop->show();
+ /*QRect qRect(QApplication::desktop()->screenGeometry());
+ int iXpos=qRect.width()/2-pop->width()/2;
+ int iYpos=qRect.height()/2-pop->height()/2;
+ pop->move(iXpos,iYpos);*/
+
+}
+
+void KgpgLibrary::shredpreprocessenc(KURL fileToShred)
+{
+ popIsActive=false;
+ emit systemMessage(QString::null);
+ shredprocessenc(fileToShred);
+}
+
+void KgpgLibrary::shredprocessenc(KURL::List filesToShred)
+{
+emit systemMessage(i18n("Shredding %n file","Shredding %n files",filesToShred.count()));
+
+KIO::Job *job;
+job = KIO::del( filesToShred, true );
+connect( job, SIGNAL( result( KIO::Job * ) ),SLOT( slotShredResult( KIO::Job * ) ) );
+}
+
+void KgpgLibrary::slotShredResult( KIO::Job * job )
+{
+ emit systemMessage(QString::null);
+ if (job && job->error())
+ {
+ job->showErrorDialog( (QWidget*)parent() );
+ emit systemMessage(QString::null,true);
+ KPassivePopup::message(i18n("KGpg Error"),i18n("Process halted, not all files were shredded."),KGlobal::iconLoader()->loadIcon("kgpg",KIcon::Desktop),panel,"kgpg_error",0);
+ }
+}
+
+
+void KgpgLibrary::processenc(KURL)
+{
+ emit systemMessage(QString::null);
+ if (_shred) shredprocessenc(urlselecteds.first());
+ urlselecteds.pop_front ();
+ if (urlselecteds.count()>0)
+ fastencode(urlselecteds.first(),_encryptKeys,_encryptOptions,_symetric);
+}
+
+void KgpgLibrary::processencerror(QString mssge)
+{
+ popIsActive=false;
+ emit systemMessage(QString::null,true);
+ KMessageBox::detailedSorry(panel,i18n("<b>Process halted</b>.<br>Not all files were encrypted."),mssge);
+}
+
+
+
+void KgpgLibrary::slotFileDec(KURL srcUrl,KURL destUrl,QStringList customDecryptOption)
+{
+ ////////////////////////////////////////////////////////////////// decode file from konqueror or menu
+ KgpgInterface *decryptFileProcess=new KgpgInterface();
+ pop = new KPassivePopup();
+ urlselected=srcUrl;
+ decryptFileProcess->KgpgDecryptFile(srcUrl,destUrl,customDecryptOption);
+ connect(decryptFileProcess,SIGNAL(processaborted(bool)),this,SLOT(processdecover()));
+ connect(decryptFileProcess,SIGNAL(processstarted(QString)),this,SLOT(processpopup(QString)));
+ connect(decryptFileProcess,SIGNAL(decryptionfinished()),this,SLOT(processdecover()));
+ connect(decryptFileProcess,SIGNAL(errormessage(QString)),this,SLOT(processdecerror(QString)));
+}
+
+void KgpgLibrary::processpopup(QString fileName)
+{
+ emit systemMessage(i18n("Decrypting %1").arg(fileName));
+ pop->setTimeout(0);
+ pop->setView(i18n("Processing decryption"),i18n("Please wait..."),KGlobal::iconLoader()->loadIcon("kgpg",KIcon::Desktop));
+ pop->show();
+ QRect qRect(QApplication::desktop()->screenGeometry());
+ int iXpos=qRect.width()/2-pop->width()/2;
+ int iYpos=qRect.height()/2-pop->height()/2;
+ pop->move(iXpos,iYpos);
+}
+
+void KgpgLibrary::processdecover()
+{
+ emit systemMessage(QString::null);
+ delete pop;
+ emit decryptionOver();
+}
+
+
+void KgpgLibrary::processdecerror(QString mssge)
+{
+ delete pop;
+ emit systemMessage(QString::null);
+ ///// test if file is a public key
+ QFile qfile(QFile::encodeName(urlselected.path()));
+ if (qfile.open(IO_ReadOnly)) {
+ QTextStream t( &qfile );
+ QString result(t.read());
+ qfile.close();
+ ////////////// if pgp data found, decode it
+ if (result.startsWith("-----BEGIN PGP PUBLIC KEY BLOCK")) {////// dropped file is a public key, ask for import
+ int result=KMessageBox::warningContinueCancel(0,i18n("<p>The file <b>%1</b> is a public key.<br>Do you want to import it ?</p>").arg(urlselected.path()),i18n("Warning"));
+ if (result==KMessageBox::Cancel)
+ return;
+ else {
+ KgpgInterface *importKeyProcess=new KgpgInterface();
+ importKeyProcess->importKeyURL(urlselected);
+ connect(importKeyProcess,SIGNAL(importfinished(QStringList)),this,SIGNAL(importOver(QStringList)));
+ return;
+ }
+ } else if (result.startsWith("-----BEGIN PGP PRIVATE KEY BLOCK")) {////// dropped file is a public key, ask for import
+ qfile.close();
+ KMessageBox::information(0,i18n("<p>The file <b>%1</b> is a private key block. Please use KGpg key manager to import it.</p>").arg(urlselected.path()));
+ return;
+ }
+ }
+ KMessageBox::detailedSorry(0,i18n("Decryption failed."),mssge);
+}
+
+
+
+#include "kgpglibrary.moc"