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

kgpg

  • sources
  • kde-4.14
  • kdeutils
  • kgpg
  • transactions
kgpgencrypt.cpp
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2011,2012,2013 Rolf Eike Beer <kde@opensource.sf-tec.de>
3  */
4 
5 /***************************************************************************
6  * *
7  * This program is free software; you can redistribute it and/or modify *
8  * it under the terms of the GNU General Public License as published by *
9  * the Free Software Foundation; either version 2 of the License, or *
10  * (at your option) any later version. *
11  * *
12  ***************************************************************************/
13 
14 #include "kgpgencrypt.h"
15 
16 #include "kgpgsettings.h"
17 #include "gpgproc.h"
18 
19 static QStringList trustOptions(const QString &binary)
20 {
21  const int gpgver = GPGProc::gpgVersion(GPGProc::gpgVersionString(binary));
22  QStringList args;
23  if (gpgver >= 0x10302)
24  args << QLatin1String("--trust-model")
25  << QLatin1String("always");
26  else
27  args << QLatin1String("--always-trust");
28 
29  return args;
30 }
31 
32 KGpgEncrypt::KGpgEncrypt(QObject *parent, const QStringList &userIds, const QString &text, const EncryptOptions &options, const QStringList &extraOptions)
33  : KGpgTextOrFileTransaction(parent, text),
34  m_fileIndex(-1),
35  m_options(options),
36  m_userIds(userIds),
37  m_extraOptions(extraOptions)
38 {
39  if ((m_options & AllowUntrustedEncryption) && !m_userIds.isEmpty())
40  m_extraOptions << trustOptions(getProcess()->program().at(0));
41 }
42 
43 KGpgEncrypt::KGpgEncrypt(QObject *parent, const QStringList &userIds, const KUrl::List &files, const EncryptOptions &options, const QStringList &extraOptions)
44  : KGpgTextOrFileTransaction(parent, files),
45  m_fileIndex(0),
46  m_options(options),
47  m_userIds(userIds),
48  m_extraOptions(extraOptions)
49 {
50  if ((m_options & AllowUntrustedEncryption) && !m_userIds.isEmpty())
51  m_extraOptions << trustOptions(getProcess()->program().at(0));
52 }
53 
54 KGpgEncrypt::~KGpgEncrypt()
55 {
56 }
57 
58 QStringList
59 KGpgEncrypt::command() const
60 {
61  QStringList ret = m_extraOptions;
62 
63  if (m_options.testFlag(AsciiArmored))
64  ret << QLatin1String("--armor");
65 
66  if (m_userIds.isEmpty()) {
67  ret << QLatin1String( "--symmetric" );
68  } else {
69  if (m_options.testFlag(HideKeyId))
70  ret << QLatin1String("--throw-keyid");
71 
72  foreach (const QString &uid, m_userIds)
73  ret << QLatin1String( "--recipient" ) << uid;
74  ret << QLatin1String( "--encrypt" );
75  }
76 
77  return ret;
78 }
79 
80 QStringList
81 KGpgEncrypt::encryptedText() const
82 {
83  QStringList result;
84  int txtlength = 0;
85 
86  foreach (const QString &line, getMessages())
87  if (!line.startsWith(QLatin1String("[GNUPG:] "))) {
88  result.append(line);
89  txtlength += line.length() + 1;
90  }
91 
92  return result;
93 }
94 
95 bool
96 KGpgEncrypt::nextLine(const QString &line)
97 {
98  const KUrl::List &inputFiles = getInputFiles();
99 
100  if (!inputFiles.isEmpty()) {
101  static const QString encStart = QLatin1String("[GNUPG:] FILE_START 2 ");
102  static const QString encDone = QLatin1String("[GNUPG:] FILE_DONE");
103 
104  if (line.startsWith(encStart)) {
105  m_currentFile = line.mid(encStart.length());
106  emit statusMessage(i18nc("Status message 'Encrypting <filename>' (operation starts)", "Encrypting %1", m_currentFile));
107  emit infoProgress(2 * m_fileIndex + 1, inputFiles.count() * 2);
108  } else if (line == encDone) {
109  emit statusMessage(i18nc("Status message 'Encrypted <filename>' (operation was completed)", "Encrypted %1", m_currentFile));
110  m_fileIndex++;
111  emit infoProgress(2 * m_fileIndex, inputFiles.count() * 2);
112  }
113  }
114 
115  return KGpgTextOrFileTransaction::nextLine(line);
116 }
117 
118 KGpgTransaction::ts_boolanswer
119 KGpgEncrypt::confirmOverwrite(KUrl &currentFile)
120 {
121  const QString ext = encryptExtension(m_options.testFlag(AsciiArmored));
122 
123  if (m_currentFile.isEmpty())
124  currentFile = KUrl::fromLocalFile(getInputFiles().at(m_fileIndex).toLocalFile() + ext);
125  else
126  currentFile = KUrl::fromLocalFile(m_currentFile + ext);
127  return BA_UNKNOWN;
128 }
129 
130 
131 QString
132 KGpgEncrypt::encryptExtension(const bool ascii)
133 {
134  if (ascii)
135  return QLatin1String( ".asc" );
136  else if (KGpgSettings::pgpExtension())
137  return QLatin1String( ".pgp" );
138  else
139  return QLatin1String( ".gpg" );
140 }
141 
142 #include "kgpgencrypt.moc"
KGpgTextOrFileTransaction
feed a text or file through gpg
Definition: kgpgtextorfiletransaction.h:29
KGpgEncrypt::AsciiArmored
output the data as printable ASCII as opposed to binary data
Definition: kgpgencrypt.h:38
KGpgEncrypt::nextLine
virtual bool nextLine(const QString &line)
Called for every line the gpg process writes.
Definition: kgpgencrypt.cpp:96
KGpgEncrypt::confirmOverwrite
virtual ts_boolanswer confirmOverwrite(KUrl &currentFile)
called when GnuPG asks for confirmation for overwriting a file
Definition: kgpgencrypt.cpp:119
KGpgEncrypt::command
virtual QStringList command() const
Definition: kgpgencrypt.cpp:59
KGpgTransaction::infoProgress
void infoProgress(qulonglong processedAmount, qulonglong totalAmount)
emits procentual status information
KGpgSettings::pgpExtension
static bool pgpExtension()
Get Use *.pgp extension for encrypted files.
Definition: kgpgsettings.h:269
KGpgTransaction::getProcess
GPGProc * getProcess()
get a reference to the gpg process object
Definition: kgpgtransaction.cpp:556
QList::append
void append(const T &value)
trustOptions
static QStringList trustOptions(const QString &binary)
Definition: kgpgencrypt.cpp:19
KGpgTransaction::statusMessage
void statusMessage(const QString &msg)
emits textual status information
QObject
QList::isEmpty
bool isEmpty() const
GPGProc::gpgVersion
static int gpgVersion(const QString &vstr)
parse GnuPG version string and return version as number
Definition: gpgproc.cpp:288
kgpgencrypt.h
QString::isEmpty
bool isEmpty() const
QString::startsWith
bool startsWith(const QString &s, Qt::CaseSensitivity cs) const
gpgproc.h
QString
KGpgTransaction::BA_UNKNOWN
the question is not supported (this is an error)
Definition: kgpgtransaction.h:74
KGpgTextOrFileTransaction::getInputFiles
const KUrl::List & getInputFiles() const
Definition: kgpgtextorfiletransaction.cpp:176
KGpgEncrypt::HideKeyId
remove anything that shows which key ids this data is encrypted to, ignored for symmetric encryption ...
Definition: kgpgencrypt.h:40
QStringList
KGpgTransaction::ts_boolanswer
ts_boolanswer
result codes for GnuPG boolean questions
Definition: kgpgtransaction.h:73
KGpgEncrypt::encryptedText
QStringList encryptedText() const
get decryption result
Definition: kgpgencrypt.cpp:81
KGpgTextOrFileTransaction::nextLine
virtual bool nextLine(const QString &line)
Called for every line the gpg process writes.
Definition: kgpgtextorfiletransaction.cpp:143
KGpgEncrypt::~KGpgEncrypt
virtual ~KGpgEncrypt()
destructor
Definition: kgpgencrypt.cpp:54
kgpgsettings.h
QString::mid
QString mid(int position, int n) const
QLatin1String
GPGProc::gpgVersionString
static QString gpgVersionString(const QString &binary)
get the GnuPG version string of the given binary
Definition: gpgproc.cpp:300
QString::length
int length() const
KGpgEncrypt::encryptExtension
static QString encryptExtension(const bool ascii)
return the preferred extension for encrypted files
Definition: kgpgencrypt.cpp:132
KGpgTextOrFileTransaction::getMessages
const QStringList & getMessages() const
get gpg info message
Definition: kgpgtextorfiletransaction.cpp:159
KGpgEncrypt::AllowUntrustedEncryption
allow encryption with untrusted keys, ignored for symmetric encryption
Definition: kgpgencrypt.h:39
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:42:08 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
  • ktimer
  • kwallet
  • 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