• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdeutils API Reference
  • KDE Home
  • Contact Us
 

kgpg

  • sources
  • kde-4.12
  • kdeutils
  • kgpg
kgpgoptions.cpp
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2002 Jean-Baptiste Mardelle <bj@altern.org>
3  * Copyright (C) 2006,2007,2008,2009,2010,2011,2012,2013
4  * Rolf Eike Beer <kde@opensource.sf-tec.de>
5  */
6 /***************************************************************************
7  * *
8  * This program is free software; you can redistribute it and/or modify *
9  * it under the terms of the GNU General Public License as published by *
10  * the Free Software Foundation; either version 2 of the License, or *
11  * (at your option) any later version. *
12  * *
13  ***************************************************************************/
14 
15 #include "kgpgoptions.h"
16 
17 #include "kgpgsettings.h"
18 #include "kgpginterface.h"
19 #include "conf_encryption.h"
20 #include "core/images.h"
21 #include "model/keylistproxymodel.h"
22 #include "model/kgpgitemmodel.h"
23 
24 #include <KConfig>
25 #include <KDesktopFile>
26 #include <KFileDialog>
27 #include <KFontChooser>
28 #include <KInputDialog>
29 #include <KLocale>
30 #include <KMessageBox>
31 #include <KProcess>
32 #include <KStandardDirs>
33 #include <QCheckBox>
34 #include <QFile>
35 #include <QTextStream>
36 #include <QVBoxLayout>
37 #include <kdefakes.h>
38 
39 using namespace KgpgCore;
40 
41 // main window
42 kgpgOptions::kgpgOptions(QWidget *parent, KGpgItemModel *model)
43  : KConfigDialog(parent, QLatin1String( "settings" ), KGpgSettings::self()),
44  m_config(new KConfig( QLatin1String( "kgpgrc" ), KConfig::SimpleConfig)),
45  m_page1(new Encryption()),
46  m_page2(new Decryption()),
47  m_page3(new UIConf()),
48  m_page4(new GPGConf()),
49  m_page6(new ServerConf()),
50  m_page7(new MiscConf()),
51  m_fontchooser(new KFontChooser(m_page3->tabWidget3->widget(1), KFontChooser::NoDisplayFlags, QStringList())),
52  m_model(model),
53  m_combomodel(new KeyListProxyModel(this, KeyListProxyModel::SingleColumnIdFirst))
54 {
55  m_page7->EmailTemplateEdit->setPlainText(KGpgSettings::emailTemplate());
56 
57  m_combomodel->setKeyModel(m_model);
58  m_combomodel->setTrustFilter(KgpgCore::TRUST_MARGINAL);
59  m_combomodel->setEncryptionKeyFilter(true);
60  m_combomodel->sort(0);
61 
62  // Initialize the default server and the default server list.
63  defaultKeyServer = QLatin1String("hkp://wwwkeys.pgp.net");
64  defaultServerList << defaultKeyServer
65  << QLatin1String("hkp://search.keyserver.net")
66  << QLatin1String("hkp://pgp.dtype.org")
67  << QLatin1String("hkp://subkeys.pgp.net");
68 
69  // Read the default keyserver from the GnuPG settings.
70  keyServer = KgpgInterface::getGpgSetting(QLatin1String( "keyserver" ), KGpgSettings::gpgConfigPath());
71 
72  // Read the servers stored in kgpgrc
73  serverList = KGpgSettings::keyServers();
74 
75  // Remove everything after a whitespace. This will normally be
76  // ' (Default)' from KDE 3.x.x
77  serverList.replaceInStrings(QRegExp( QLatin1String( " .*") ), QLatin1String( "" ) );
78 
79  defaultConfigPath = KUrl::fromPath(gpgConfigPath).fileName();
80  defaultHomePath = KUrl::fromPath(gpgConfigPath).directory(KUrl::AppendTrailingSlash);
81  defaultBinPath = KGpgSettings::gpgBinaryPath();
82 
83  m_showsystray = KGpgSettings::showSystray();
84  m_trayaction = KGpgSettings::leftClick();
85  m_mailUats = KGpgSettings::mailUats();
86 
87  QVBoxLayout *fontlayout = new QVBoxLayout(m_page3->tabWidget3->widget(1));
88  fontlayout->setSpacing(spacingHint());
89 
90  m_fontchooser->setObjectName( QLatin1String("kcfg_Font" ));
91  fontlayout->addWidget(m_fontchooser);
92 
93  m_page3->kcfg_EmailSorting->addItem(i18n("Left to right, account first"));
94  m_page3->kcfg_EmailSorting->addItem(i18n("Right to left, TLD first"));
95  m_page3->kcfg_EmailSorting->addItem(i18n("Right to left, domain first"));
96  m_page3->kcfg_EmailSorting->addItem(i18n("Right to left, FQDN first"));
97  m_emailSortingIndex = KGpgSettings::emailSorting();
98 
99  pixkeySingle = Images::single();
100  pixkeyDouble = Images::pair();
101  addPage(m_page1, i18n("Encryption"), QLatin1String( "document-encrypt" ));
102  addPage(m_page2, i18n("Decryption"), QLatin1String( "document-decrypt") );
103  addPage(m_page3, i18n("Appearance"), QLatin1String( "preferences-desktop-theme" ));
104  addPage(m_page4, i18n("GnuPG Settings"), QLatin1String( "kgpg" ));
105  addPage(m_page6, i18n("Key Servers"), QLatin1String( "network-wired" ));
106  addPage(m_page7, i18n("Misc"), QLatin1String( "preferences-other" ));
107 
108  // The following widgets are managed manually.
109  connect(m_page1->encrypt_to_always, SIGNAL(toggled(bool)), this, SLOT(slotChangeEncryptTo()));
110  connect(m_page4->changeHome, SIGNAL(clicked()), this, SLOT(slotChangeHome()));
111  connect(m_page6->server_add, SIGNAL(clicked()), this, SLOT(slotAddKeyServer()));
112  connect(m_page6->server_del, SIGNAL(clicked()), this, SLOT(slotDelKeyServer()));
113  connect(m_page6->server_edit, SIGNAL(clicked()), this, SLOT(slotEditKeyServer()));
114  connect(m_page6->server_default, SIGNAL(clicked()), this, SLOT(slotDefaultKeyServer()));
115  connect(m_page6->ServerBox, SIGNAL(itemSelectionChanged()), this, SLOT(slotChangeKeyServerButtonEnable()));
116  connect(m_page6->ServerBox, SIGNAL(executed(QListWidgetItem*)), this, SLOT(slotEditKeyServer(QListWidgetItem*)));
117  connect(m_page7->kcfg_ShowSystray, SIGNAL(clicked()), SLOT(slotSystrayEnable()));
118 
119  keyUltimate = KGpgSettings::colorUltimate();
120  keyGood = KGpgSettings::colorGood();
121  keyMarginal = KGpgSettings::colorMarginal();
122  keyExpired = KGpgSettings::colorExpired();
123  keyUnknown = KGpgSettings::colorUnknown();
124  keyRev = KGpgSettings::colorRev();
125  keyBad = KGpgSettings::colorBad();
126 }
127 
128 kgpgOptions::~kgpgOptions()
129 {
130  delete m_config;
131  delete m_page1;
132  delete m_page2;
133  delete m_page3;
134  delete m_page4;
135  delete m_page6;
136  delete m_page7;
137 }
138 
139 void kgpgOptions::slotChangeHome()
140 {
141  QString gpgHome = KFileDialog::getExistingDirectory(m_page4->gpg_home_path->text(), this, i18n("New GnuPG Home Location"));
142  if (gpgHome.isEmpty())
143  return;
144 
145  if (!gpgHome.endsWith(QLatin1Char( '/' )))
146  gpgHome.append(QLatin1Char( '/' ));
147 
148  QString confPath = QLatin1String( "options" );
149  if (!QFile(gpgHome + confPath).exists()) {
150  confPath = QLatin1String( "gpg.conf" );
151  if (!QFile(gpgHome + confPath).exists()) {
152  // Try to create config File by running gpg once
153  if (KMessageBox::Yes == KMessageBox::questionYesNo(this,
154  i18n("No configuration file was found in the selected location.\nDo you want to create it now?\n\nWithout a configuration file, neither KGpg nor GnuPG will work properly."),
155  i18n("No Configuration File Found"),
156  KGuiItem(i18n("Create")),
157  KGuiItem(i18n("Ignore")))) {
158  // start GnuPG so that it will create a config file
159  QString gpgbin = m_page4->kcfg_GpgBinaryPath->text();
160  if (!QFile::exists(gpgbin))
161  gpgbin = QLatin1String( "gpg" );
162 
163  KProcess p;
164  p << gpgbin << QLatin1String( "--homedir" ) << gpgHome << QLatin1String( "--no-tty" ) << QLatin1String( "--list-secret-keys" );
165  p.execute();
166  // end of creating config file
167 
168  confPath = QLatin1String( "gpg.conf" );
169  QFile confFile(gpgHome + confPath);
170  if (!confFile.open(QIODevice::WriteOnly)) {
171  KMessageBox::sorry(this, i18n("Cannot create configuration file. Please check if destination media is mounted and if you have write access."));
172  return;
173  } else {
174  QTextStream stream(&confFile);
175  stream << "# Config file created by KGpg\n\n";
176  confFile.close();
177  }
178  } else {
179  confPath.clear();
180  }
181  }
182  }
183 
184  m_page4->gpg_conf_path->setText(confPath);
185  m_page4->gpg_home_path->setText(gpgHome);
186 }
187 
188 bool kgpgOptions::isValidKeyserver(const QString &server)
189 {
190  if (server.isEmpty())
191  return false;
192 
193  if (server.contains(QLatin1Char( ' ' ))) {
194  KMessageBox::sorry(this, i18n("Key server URLs may not contain whitespace."));
195  return false;
196  }
197 
198  if (serverList.contains(server)) {
199  KMessageBox::sorry(this, i18n("Key server already in the list."));
200  return false;
201  }
202 
203  return true;
204 }
205 
206 void kgpgOptions::slotAddKeyServer()
207 {
208  const QString newServer(KInputDialog::getText(i18n("Add New Key Server"), i18n("Server URL:")));
209 
210  if (!isValidKeyserver(newServer))
211  return;
212 
213  serverList << newServer;
214  QListWidgetItem *item = new QListWidgetItem(newServer, m_page6->ServerBox);
215  m_page6->ServerBox->setCurrentItem(item);
216 
217  enableButtonApply(true);
218 }
219 
220 void kgpgOptions::slotChangeEncryptTo()
221 {
222  bool enable = (m_page1->encrypt_to_always->isChecked() != m_encrypttoalways);
223  enableButtonApply(enable);
224 }
225 
226 void kgpgOptions::slotDelKeyServer()
227 {
228  QListWidgetItem *cur = m_page6->ServerBox->takeItem(m_page6->ServerBox->currentRow());
229  bool defaultDeleted = cur->text().contains(QLatin1Char( ' ' ));
230 
231  // Are there any items left now we've took one out of the list?
232  cur = m_page6->ServerBox->currentItem();
233  if (cur == NULL)
234  return;
235 
236  cur->setSelected(true);
237  if (defaultDeleted)
238  slotDefaultKeyServer();
239  enableButtonApply(true);
240 }
241 
242 void kgpgOptions::slotEditKeyServer()
243 {
244  QListWidgetItem *cur = m_page6->ServerBox->currentItem();
245  slotEditKeyServer(cur);
246 }
247 
248 void kgpgOptions::slotEditKeyServer(QListWidgetItem *cur)
249 {
250  if (cur == NULL)
251  return;
252 
253  QString oldServer(cur->text());
254  bool isDefault = false;
255  if (oldServer.contains(QLatin1Char( ' ' ))) {
256  isDefault = true;
257  oldServer = oldServer.section(QLatin1Char( ' ' ), 0, 0);
258  }
259 
260  QString newServer(KInputDialog::getText(i18n("Edit Key Server"), i18n("Server URL:"), oldServer).simplified());
261  if (!isValidKeyserver(newServer))
262  return;
263  if (isDefault)
264  newServer = i18nc("Mark default keyserver in GUI", "%1 (Default)", newServer);
265  cur->setText(newServer);
266 
267  enableButtonApply(true);
268 }
269 
270 void kgpgOptions::slotDefaultKeyServer()
271 {
272  QListWidgetItem *curr = m_page6->ServerBox->currentItem();
273  if (!curr->text().contains(QLatin1Char( ' ' ))) {
274  // The current item is not already the default one so a couple of things
275  // must be changed now:
276  // 1. The "(Default)" mark must be removed in the GUI list.
277  // 2. keyServer must be updated to the new default server.
278  // 3. The new default keyServer must have the "(Default)" mark in the GUI.
279  if (m_page6->ServerBox->findItems(keyServer, Qt::MatchContains).size() > 0) {
280  QListWidgetItem *prev = m_page6->ServerBox->findItems(keyServer, Qt::MatchContains).first();
281  prev->setText(prev->text().remove(QLatin1Char( ' ' ) + i18nc("Mark default keyserver in GUI", "(Default)"))); // 1
282  }
283 
284  keyServer = curr->text(); // 2
285  curr->setText(i18nc("Mark default keyserver in GUI", "%1 (Default)", curr->text())); // 3
286 
287  enableButtonApply(true);
288  }
289 }
290 
291 void kgpgOptions::slotChangeKeyServerButtonEnable()
292 {
293  const bool empty = m_page6->ServerBox->selectedItems().isEmpty();
294 
295  m_page6->server_del->setEnabled(!empty);
296  m_page6->server_default->setEnabled(!empty);
297 }
298 
299 void kgpgOptions::updateWidgets()
300 {
301  alwaysKeyID = KgpgInterface::getGpgSetting(QLatin1String( "encrypt-to" ), KGpgSettings::gpgConfigPath());
302 
303  m_page7->EmailTemplateEdit->setPlainText(KGpgSettings::emailTemplate());
304 
305  m_encrypttoalways = !alwaysKeyID.isEmpty();
306  m_defaultencrypttoalways = false;
307 
308  m_page1->encrypt_to_always->setChecked(m_encrypttoalways);
309 
310  listKeys();
311  fileEncryptionKey = KGpgSettings::fileEncryptionKey();
312  // the contents are totally mess. There were key id, name and email stored
313  // try to extract the key id, that's the only thing we really need
314  if (!fileEncryptionKey.isEmpty()) {
315  int idpos = m_page1->file_key->findText(fileEncryptionKey);
316  if (idpos == -1) {
317  idpos = fileEncryptionKey.indexOf(QRegExp( QLatin1String( "([0-9A-Fa-F]{8})+" )));
318  if (idpos >= 0) {
319  QString fileId = fileEncryptionKey.mid(idpos);
320  idpos = fileId.indexOf(QRegExp( QLatin1String( "[^a-fA-F0-9]" )));
321  if (idpos >= 0) {
322  fileId = fileId.left(idpos);
323  fileId.chop(fileId.length() % 8);
324  }
325 
326  KGpgKeyNode *anode = m_combomodel->getModel()->findKeyNode(fileId);
327 
328  if (anode != NULL)
329  idpos = m_combomodel->nodeIndex(anode).row();
330  }
331  }
332  m_page1->file_key->setCurrentIndex(idpos);
333  }
334 
335  if (!alwaysKeyID.isEmpty()) {
336  KGpgKeyNode *anode = m_combomodel->getModel()->findKeyNode(alwaysKeyID);
337  if (anode != NULL) {
338  const QModelIndex midx(m_combomodel->nodeIndex(anode));
339  m_page1->always_key->setCurrentIndex(midx.row());
340  }
341  }
342 
343  gpgConfigPath = KGpgSettings::gpgConfigPath();
344  m_page4->gpg_conf_path->setText(KUrl::fromPath(gpgConfigPath).fileName());
345  m_page4->gpg_home_path->setText(KUrl::fromPath(gpgConfigPath).directory(KUrl::AppendTrailingSlash));
346 
347  m_useagent = KgpgInterface::getGpgBoolSetting(QLatin1String( "use-agent" ), KGpgSettings::gpgConfigPath());
348  m_defaultuseagent = false;
349 
350  m_page4->use_agent->setChecked(m_useagent);
351 
352  m_emailSortingIndex = KGpgSettings::emailSorting();
353  m_page3->kcfg_EmailSorting->setCurrentIndex(m_emailSortingIndex);
354 
355  m_page6->ServerBox->clear();
356  QStringList servers(serverList);
357 
358  if (!servers.isEmpty()) {
359  const QString defaultServer(servers.takeFirst());
360  servers.prepend(i18nc("Mark default keyserver in GUI", "%1 (Default)", defaultServer));
361  m_page6->ServerBox->addItems(servers);
362  }
363 
364  kDebug(2100) << "Finishing options" ;
365 }
366 
367 void kgpgOptions::updateWidgetsDefault()
368 {
369  m_page7->EmailTemplateEdit->setPlainText(m_emailTemplate);
370 
371  m_page1->encrypt_to_always->setChecked(m_defaultencrypttoalways);
372  m_page4->use_agent->setChecked(m_defaultuseagent);
373 
374  m_page4->gpg_conf_path->setText(defaultConfigPath);
375  m_page4->gpg_home_path->setText(defaultHomePath);
376 
377  m_page6->ServerBox->clear();
378  m_page6->ServerBox->addItem(i18nc("Mark default keyserver in GUI", "%1 (Default)", defaultKeyServer));
379  m_page6->ServerBox->addItems(defaultServerList);
380 
381  m_page3->kcfg_EmailSorting->setCurrentIndex(KGpgSettings::EnumEmailSorting::Alphabetical);
382 
383  kDebug(2100) << "Finishing default options" ;
384 }
385 
386 void kgpgOptions::updateSettings()
387 {
388  // Update config path first!
389  const QString newConfigFile = m_page4->gpg_home_path->text() + m_page4->gpg_conf_path->text();
390  if (newConfigFile != gpgConfigPath) {
391  KGpgSettings::setGpgConfigPath(newConfigFile);
392  emit homeChanged();
393 
394  gpgConfigPath = newConfigFile;
395  }
396 
397  // save selected keys for file encryption & always encrypt with
398  if (m_page1->kcfg_EncryptFilesTo->isChecked())
399  fileEncryptionKey = m_page1->file_key->itemData(m_page1->file_key->currentIndex(), Qt::ToolTipRole).toString();
400  else
401  fileEncryptionKey.clear();
402 
403  if (fileEncryptionKey != KGpgSettings::fileEncryptionKey())
404  KGpgSettings::setFileEncryptionKey(fileEncryptionKey);
405 
406  m_encrypttoalways = m_page1->encrypt_to_always->isChecked();
407 
408  if (m_encrypttoalways)
409  alwaysKeyID = m_page1->always_key->itemData(m_page1->always_key->currentIndex(), Qt::ToolTipRole).toString();
410  else
411  alwaysKeyID.clear();
412 
413  KgpgInterface::setGpgSetting(QLatin1String( "encrypt-to" ), alwaysKeyID, KGpgSettings::gpgConfigPath());
414 
415  emit changeFont(m_fontchooser->font());
416 
417  // install service menus
418  if (m_page7->kcfg_SignMenu->currentIndex() == KGpgSettings::EnumSignMenu::AllFiles)
419  slotInstallSign(QLatin1String( "application/octet-stream" ));
420  else
421  slotRemoveMenu(QLatin1String( "signfile.desktop" ));
422 
423  if (m_page7->kcfg_DecryptMenu->currentIndex() == KGpgSettings::EnumDecryptMenu::AllFiles)
424  slotInstallDecrypt(QLatin1String( "application/octet-stream" ));
425  else
426  if (m_page7->kcfg_DecryptMenu->currentIndex() == KGpgSettings::EnumDecryptMenu::EncryptedFiles)
427  slotInstallDecrypt(QLatin1String( "application/pgp-encrypted,application/pgp-signature,application/pgp-keys" ));
428  else
429  slotRemoveMenu(QLatin1String( "decryptfile.desktop" ));
430 
431  m_useagent = m_page4->use_agent->isChecked();
432 
433  if (m_useagent) {
434  KgpgInterface::setGpgBoolSetting(QLatin1String( "use-agent" ), true, KGpgSettings::gpgConfigPath());
435  KgpgInterface::setGpgBoolSetting(QLatin1String( "no-use-agent" ), false, KGpgSettings::gpgConfigPath());
436  } else {
437  KgpgInterface::setGpgBoolSetting(QLatin1String( "use-agent" ), false, KGpgSettings::gpgConfigPath());
438  }
439 
440  // Store the default server in ~/.gnupg
441  KgpgInterface::setGpgSetting(QLatin1String( "keyserver" ), keyServer, KGpgSettings::gpgConfigPath());
442 
443  // Store additional servers in kgpgrc.
444  serverList.clear();
445  for (int i = 0; i < m_page6->ServerBox->count(); i++) {
446  QString server(m_page6->ServerBox->item(i)->text());
447 
448  // Only store the additional servers in the config file.
449  if (!server.contains(QLatin1Char( ' ' ))) {
450  serverList.append(server);
451  } else {
452  server.remove(QRegExp( QLatin1String( " .*")) ); // Remove the " (Default)" ) section.
453  serverList.prepend(server); // Make it the first item in the list.
454  }
455  }
456  KGpgSettings::setKeyServers(serverList);
457 
458  if (keyUltimate != m_page3->kcfg_ColorUltimate->color())
459  emit refreshTrust(TRUST_ULTIMATE, m_page3->kcfg_ColorUltimate->color());
460 
461  if (keyGood != m_page3->kcfg_ColorGood->color())
462  emit refreshTrust(TRUST_FULL, m_page3->kcfg_ColorGood->color());
463 
464  if (keyExpired != m_page3->kcfg_ColorExpired->color())
465  emit refreshTrust(TRUST_EXPIRED, m_page3->kcfg_ColorExpired->color());
466 
467  if (keyMarginal != m_page3->kcfg_ColorMarginal->color())
468  emit refreshTrust(TRUST_MARGINAL, m_page3->kcfg_ColorMarginal->color());
469 
470  if (keyBad != m_page3->kcfg_ColorBad->color()) {
471  emit refreshTrust(TRUST_INVALID, m_page3->kcfg_ColorBad->color());
472  emit refreshTrust(TRUST_DISABLED, m_page3->kcfg_ColorBad->color());
473  }
474 
475  if (keyUnknown != m_page3->kcfg_ColorUnknown->color()) {
476  emit refreshTrust(TRUST_UNDEFINED, m_page3->kcfg_ColorUnknown->color());
477  emit refreshTrust(TRUST_NONE, m_page3->kcfg_ColorUnknown->color());
478  emit refreshTrust(TRUST_UNKNOWN, m_page3->kcfg_ColorUnknown->color());
479  }
480 
481  if (keyRev != m_page3->kcfg_ColorRev->color())
482  emit refreshTrust(TRUST_REVOKED, m_page3->kcfg_ColorRev->color());
483 
484  m_showsystray = m_page7->kcfg_ShowSystray->isChecked();
485  KGpgSettings::setShowSystray(m_showsystray);
486 
487  m_trayaction = m_page7->kcfg_LeftClick->currentIndex();
488  KGpgSettings::setLeftClick(m_trayaction);
489 
490  m_mailUats = m_page7->kcfg_MailUats->currentIndex();
491  KGpgSettings::setMailUats(m_mailUats);
492 
493  m_emailTemplate = m_page7->EmailTemplateEdit->toPlainText();
494  KGpgSettings::setEmailTemplate(m_emailTemplate);
495 
496  m_emailSortingIndex = m_page3->kcfg_EmailSorting->currentIndex();
497  KGpgSettings::setEmailSorting(m_emailSortingIndex);
498 
499  KGpgSettings::self()->writeConfig();
500  m_config->sync();
501 
502  emit settingsUpdated();
503 }
504 
505 void kgpgOptions::listKeys()
506 {
507  if (m_model->rowCount(QModelIndex()) == 0) {
508  ids += QLatin1String("0");
509  m_page1->file_key->addItem(i18nc("no key available", "none"));
510  m_page1->file_key->setModel(NULL);
511  m_page1->always_key->addItem(i18nc("no key available", "none"));
512  m_page1->always_key->setModel(NULL);
513  } else {
514  m_page1->file_key->setModel(m_combomodel);
515  m_page1->always_key->setModel(m_combomodel);
516  }
517 }
518 
519 void kgpgOptions::slotInstallDecrypt(const QString &mimetype)
520 {
521  const QString path(KStandardDirs::locateLocal("data", QLatin1String( "konqueror/servicemenus/decryptfile.desktop" )));
522  KDesktopFile configl2(path);
523  if (!configl2.isImmutable()) {
524  KConfigGroup gr(configl2.group("Desktop Entry"));
525 
526  gr.writeXdgListEntry("MimeType", QStringList(mimetype));
527  gr.writeEntry("X-KDE-ServiceTypes", "KonqPopupMenu/Plugin");
528  gr.writeEntry("Actions", "decrypt");
529 
530  gr = configl2.group("Desktop Action decrypt");
531  gr.writeEntry("Name", i18n("Decrypt File"));
532  //gr.writeEntry("Icon", "decrypt_file");
533  gr.writeEntry("Exec", "kgpg %U");
534  }
535 }
536 
537 void kgpgOptions::slotInstallSign(const QString &mimetype)
538 {
539  QString path(KStandardDirs::locateLocal("services", QLatin1String( "ServiceMenus/signfile.desktop" )));
540  KDesktopFile configl2(path);
541  if (!configl2.isImmutable()) {
542  KConfigGroup gr = configl2.group("Desktop Entry");
543  gr.writeXdgListEntry("MimeType", QStringList(mimetype));
544  gr.writeEntry("X-KDE-ServiceTypes", "KonqPopupMenu/Plugin");
545  gr.writeEntry("Actions", "sign");
546 
547  gr = configl2.group("Desktop Action sign");
548  gr.writeEntry("Name", i18n("Sign File"));
549  //gr.writeEntry("Icon", "sign_file");
550  gr.writeEntry("Exec","kgpg -S %F");
551  }
552 }
553 
554 void kgpgOptions::slotRemoveMenu(const QString &menu)
555 {
556  QString path = KStandardDirs::locateLocal("services", QLatin1String( "ServiceMenus/" ) + menu);
557  QFile qfile(path);
558  if (qfile.exists())
559  qfile.remove();
560 }
561 
562 bool kgpgOptions::hasChanged()
563 {
564  if (m_page1->kcfg_EncryptFilesTo->isChecked() && (m_page1->file_key->currentText() != fileEncryptionKey))
565  return true;
566 
567  if (m_page1->encrypt_to_always->isChecked() != m_encrypttoalways)
568  return true;
569 
570  if (m_page1->encrypt_to_always->isChecked() &&
571  (m_page1->always_key->itemData(m_page1->always_key->currentIndex(), Qt::ToolTipRole).toString()) != alwaysKeyID)
572  return true;
573 
574  if (m_page4->gpg_conf_path->text() != KUrl::fromPath(gpgConfigPath).fileName())
575  return true;
576 
577  if (m_page4->gpg_home_path->text() != KUrl::fromPath(gpgConfigPath).directory(KUrl::AppendTrailingSlash))
578  return true;
579 
580  if (m_page4->use_agent->isChecked() != m_useagent)
581  return true;
582 
583  // Did the number of servers change?
584  if (m_page6->ServerBox->count() != serverList.size())
585  return true;
586 
587  // Did the actual value of the servers change than?
588  for (int i = 0; i < m_page6->ServerBox->count(); i++) {
589  QString server(m_page6->ServerBox->item(i)->text());
590 
591  if (server.contains(QLatin1Char( ' ' ))) {
592  // This is the current server marked as default in the GUI.
593  server.remove(QLatin1Char( ' ' ) + i18nc( "Remove default marker from GUI if it is there", "(Default)"));
594  if (keyServer != server)
595  return true;
596  } else if (!serverList.contains(server)) {
597  return true;
598  }
599  }
600 
601  if (m_page7->kcfg_ShowSystray->isChecked() != m_showsystray)
602  return true;
603 
604  if (m_page7->kcfg_LeftClick->currentIndex() != m_trayaction)
605  return true;
606 
607  if (m_page7->kcfg_MailUats->currentIndex() != m_mailUats)
608  return true;
609 
610  if (m_page3->kcfg_EmailSorting->currentIndex() != m_emailSortingIndex)
611  return true;
612 
613  return false;
614 }
615 
616 bool kgpgOptions::isDefault()
617 {
618  if (m_page1->encrypt_to_always->isChecked() != m_defaultencrypttoalways)
619  return false;
620 
621  if (m_page4->gpg_conf_path->text() != defaultConfigPath)
622  return false;
623 
624  if (m_page4->gpg_home_path->text() != defaultHomePath)
625  return false;
626 
627  if (m_page4->use_agent->isChecked() != m_defaultuseagent)
628  return false;
629 
630  for (int i = 0; i < m_page6->ServerBox->count(); i++) {
631  QString server(m_page6->ServerBox->item(i)->text());
632 
633  if (server.contains(QLatin1Char( ' ' ))) {
634  // This is the current server marked as default in the GUI.
635  server.remove(QLatin1Char( ' ' ) + i18nc( "Remove default marker from GUI if it is there", "(Default)"));
636  if (defaultKeyServer != server)
637  return false;
638  } else if (!defaultServerList.contains(server)) {
639  return false;
640  }
641  }
642 
643  if (m_page7->kcfg_ShowSystray->isChecked() != m_showsystray)
644  return false;
645 
646  if (m_page7->kcfg_LeftClick->currentIndex() != KGpgSettings::EnumLeftClick::KeyManager)
647  return false;
648 
649  if (m_page7->kcfg_MailUats->currentIndex() != KGpgSettings::EnumMailUats::All)
650  return false;
651 
652  if (m_page3->kcfg_EmailSorting->currentIndex() != KGpgSettings::EnumEmailSorting::Alphabetical)
653  return false;
654 
655  return true;
656 }
657 
658 void kgpgOptions::slotSystrayEnable()
659 {
660  m_page7->kcfg_LeftClick->setEnabled(m_page7->kcfg_ShowSystray->isChecked());
661 }
662 
663 #include "kgpgoptions.moc"
Encryption
Definition: conf_encryption.h:23
KGpgItemModel
Definition: kgpgitemmodel.h:44
KGpgSettings::leftClick
static int leftClick()
Get Choose default left-click behavior.
Definition: kgpgsettings.h:573
KgpgCore::TRUST_MARGINAL
there is a minimal level of trust
Definition: kgpgkey.h:61
KProcess
KGpgSettings::mailUats
static int mailUats()
Get Mail_Uats.
Definition: kgpgsettings.h:972
KGpgSettings::colorExpired
static QColor colorExpired()
Get Color used for expired keys.
Definition: kgpgsettings.h:839
KGpgSettings::gpgConfigPath
static QString gpgConfigPath()
Get The path of the gpg configuration file.
Definition: kgpgsettings.h:288
KGpgSettings::setEmailSorting
static void setEmailSorting(int v)
Set EmailSorting.
Definition: kgpgsettings.h:867
KgpgInterface::setGpgBoolSetting
void setGpgBoolSetting(const QString &name, const bool enable, const QString &url)
Definition: kgpginterface.cpp:106
kgpgOptions::~kgpgOptions
~kgpgOptions()
Definition: kgpgoptions.cpp:128
KGpgSettings::setShowSystray
static void setShowSystray(bool v)
Set Show the systray icon.
Definition: kgpgsettings.h:658
KGpgSettings::EnumMailUats::All
Definition: kgpgsettings.h:59
KGpgSettings::EnumEmailSorting::Alphabetical
Definition: kgpgsettings.h:54
kgpgOptions::isDefault
virtual bool isDefault()
Definition: kgpgoptions.cpp:616
KGpgSettings::colorUnknown
static QColor colorUnknown()
Get Color used for unknown keys.
Definition: kgpgsettings.h:763
KgpgInterface::getGpgBoolSetting
bool getGpgBoolSetting(const QString &name, const QString &configfile)
Definition: kgpginterface.cpp:92
KGpgSettings::showSystray
static bool showSystray()
Get Show the systray icon.
Definition: kgpgsettings.h:668
KeyListProxyModel::setEncryptionKeyFilter
void setEncryptionKeyFilter(bool b)
show only keys capable of encryption
Definition: keylistproxymodel.cpp:475
QWidget
KGpgSettings::EnumDecryptMenu::AllFiles
Definition: kgpgsettings.h:49
KGpgSettings::EnumLeftClick::KeyManager
Definition: kgpgsettings.h:29
images.h
KGpgSettings::colorRev
static QColor colorRev()
Get Color used for revoked keys.
Definition: kgpgsettings.h:744
kgpgOptions::settingsUpdated
void settingsUpdated()
KGpgSettings::setKeyServers
static void setKeyServers(const QStringList &v)
Set Key servers used by KGpg.
Definition: kgpgsettings.h:886
KeyListProxyModel::setKeyModel
void setKeyModel(KGpgItemModel *)
Definition: keylistproxymodel.cpp:253
KgpgInterface::setGpgSetting
void setGpgSetting(const QString &name, const QString &value, const QString &url)
Definition: kgpginterface.cpp:57
KGpgKeyNode
A public key with or without corresponding secret key.
Definition: KGpgKeyNode.h:33
KGpgItemModel::rowCount
virtual int rowCount(const QModelIndex &parent=QModelIndex()) const
Definition: kgpgitemmodel.cpp:73
KGpgSettings::EnumDecryptMenu::EncryptedFiles
Definition: kgpgsettings.h:49
KGpgSettings::emailSorting
static int emailSorting()
Get EmailSorting.
Definition: kgpgsettings.h:877
KConfigDialog
KGpgItemModel::findKeyNode
KGpgKeyNode * findKeyNode(const QString &id) const
Definition: kgpgitemmodel.cpp:238
KeyListProxyModel::setTrustFilter
void setTrustFilter(const KgpgCore::KgpgKeyTrustFlag t)
set the minimum trust level to be shown
Definition: keylistproxymodel.cpp:466
kgpgOptions::refreshTrust
void refreshTrust(KgpgCore::KgpgKeyTrust, QColor)
KGpgSettings::gpgBinaryPath
static QString gpgBinaryPath()
Get The path of the gpg binary used by KGpg.
Definition: kgpgsettings.h:307
KgpgCore::TRUST_DISABLED
key is disabled by user (not owner)
Definition: kgpgkey.h:55
KGpgSettings::emailTemplate
static QString emailTemplate()
Get This is the text of the email sent by the "Sign and Mail User ID" action.
Definition: kgpgsettings.h:953
kgpgitemmodel.h
KGpgSettings::colorUltimate
static QColor colorUltimate()
Get Color used for ultimately trusted keys.
Definition: kgpgsettings.h:801
KGpgSettings::fileEncryptionKey
static QString fileEncryptionKey()
Get File encryption key.
Definition: kgpgsettings.h:136
KGpgSettings::setEmailTemplate
static void setEmailTemplate(const QString &v)
Set This is the text of the email sent by the "Sign and Mail User ID" action.
Definition: kgpgsettings.h:943
kgpgOptions::kgpgOptions
kgpgOptions(QWidget *parent=0, KGpgItemModel *model=0)
Definition: kgpgoptions.cpp:42
KgpgCore::Convert::toString
QString toString(const KgpgKeyAlgo algorithm)
Definition: convert.cpp:37
kgpginterface.h
KGpgSettings::setFileEncryptionKey
static void setFileEncryptionKey(const QString &v)
Set File encryption key.
Definition: kgpgsettings.h:126
KgpgCore::TRUST_FULL
you can fully trust this key
Definition: kgpgkey.h:62
KGpgSettings::setLeftClick
static void setLeftClick(int v)
Set Choose default left-click behavior.
Definition: kgpgsettings.h:563
KGpgSettings::setMailUats
static void setMailUats(int v)
Set Mail_Uats.
Definition: kgpgsettings.h:962
KGpgSettings::setGpgConfigPath
static void setGpgConfigPath(const QString &v)
Set The path of the gpg configuration file.
Definition: kgpgsettings.h:278
KgpgCore::TRUST_EXPIRED
key is beyond it's expiry date
Definition: kgpgkey.h:57
KgpgCore::TRUST_UNDEFINED
trust value undefined (i.e. you did not set a trust level)
Definition: kgpgkey.h:58
kgpgoptions.h
KgpgCore::TRUST_REVOKED
key is revoked by owner
Definition: kgpgkey.h:56
KGpgSettings::colorGood
static QColor colorGood()
Get Color used for trusted keys.
Definition: kgpgsettings.h:725
kgpgsettings.h
KeyListProxyModel
Definition: keylistproxymodel.h:30
KGpgSettings::self
static KGpgSettings * self()
Definition: kgpgsettings.cpp:17
KGpgSettings
Definition: kgpgsettings.h:13
KGpgSettings::keyServers
static QStringList keyServers()
Get Key servers used by KGpg.
Definition: kgpgsettings.h:896
KeyListProxyModel::getModel
KGpgItemModel * getModel() const
Definition: keylistproxymodel.cpp:533
KGpgSettings::colorMarginal
static QColor colorMarginal()
Get Color used for marginally trusted keys.
Definition: kgpgsettings.h:820
KGpgSettings::EnumSignMenu::AllFiles
Definition: kgpgsettings.h:44
conf_encryption.h
kgpgOptions::changeFont
void changeFont(QFont)
kgpgOptions::homeChanged
void homeChanged()
KeyListProxyModel::nodeIndex
QModelIndex nodeIndex(KGpgNode *node)
Definition: keylistproxymodel.cpp:492
KGpgItemModel::parent
virtual QModelIndex parent(const QModelIndex &child) const
Definition: kgpgitemmodel.cpp:55
KgpgCore::TRUST_UNKNOWN
trust value unknown (i.e. no entry in gpg's trust database)
Definition: kgpgkey.h:59
kgpgOptions::hasChanged
virtual bool hasChanged()
Definition: kgpgoptions.cpp:562
KgpgCore::TRUST_ULTIMATE
this key has highest possible level of trust (e.g. your own secret keys)
Definition: kgpgkey.h:63
KgpgCore::Images::pair
QPixmap pair()
Definition: images.cpp:40
KgpgCore::TRUST_INVALID
key is invalid
Definition: kgpgkey.h:54
KgpgCore::TRUST_NONE
there is no trusted path to this key
Definition: kgpgkey.h:60
KgpgInterface::getGpgSetting
QString getGpgSetting(const QString &name, const QString &configfile)
Definition: kgpginterface.cpp:37
KGpgSettings::colorBad
static QColor colorBad()
Get Color used for untrusted keys.
Definition: kgpgsettings.h:782
keylistproxymodel.h
KgpgCore::Images::single
QPixmap single()
Definition: images.cpp:32
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 23:07:51 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

kgpg

Skip menu "kgpg"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdeutils API Reference

Skip menu "kdeutils API Reference"
  • ark
  • filelight
  • kcalc
  • kcharselect
  • kdf
  • kfloppy
  • kgpg
  • kremotecontrol
  • ktimer
  • kwallet
  • superkaramba
  • sweeper

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal