Page Menu
Home
GnuPG
Search
Configure Global Search
Log In
Files
F35155877
test_keyresolver.cpp
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Size
4 KB
Subscribers
None
test_keyresolver.cpp
View Options
/*
test_keyresolver.cpp
This file is part of libkleopatra's test suite.
SPDX-FileCopyrightText: 2018 Intevation GmbH
SPDX-License-Identifier: GPL-2.0-only
*/
#include
"kleo/keyresolver.h"
#include
"utils/formatting.h"
#include
<QCommandLineParser>
#include
<QApplication>
#include
<QDebug>
#include
<QTimer>
#include
<gpgme++/key.h>
#include
<chrono>
using
namespace
std
::
chrono_literals
;
using
namespace
Kleo
;
using
namespace
GpgME
;
void
dumpKeys
(
const
QMap
<
QString
,
std
::
vector
<
Key
>>
&
keysMap
)
{
for
(
auto
it
=
std
::
begin
(
keysMap
);
it
!=
std
::
end
(
keysMap
);
++
it
)
{
const
auto
&
address
=
it
.
key
();
const
auto
&
keys
=
it
.
value
();
qDebug
()
<<
"Address:"
<<
address
;
qDebug
()
<<
"Keys:"
;
for
(
const
auto
&
key
:
keys
)
{
qDebug
()
<<
key
.
primaryFingerprint
();
}
}
}
void
dumpSigKeys
(
const
std
::
vector
<
Key
>
&
keys
)
{
for
(
const
auto
&
key
:
keys
)
{
qDebug
()
<<
key
.
primaryFingerprint
();
}
}
class
SignalRecipient
:
public
QObject
{
Q_OBJECT
public
:
SignalRecipient
(
KeyResolver
*
res
)
:
resolver
(
res
)
{}
void
keysResolved
(
bool
success
,
bool
sendUnencrypted
)
{
if
(
!
success
)
{
qDebug
()
<<
"Canceled"
;
exit
(
1
);
}
const
auto
result
=
resolver
->
result
();
qDebug
()
<<
"Resolved Signing keys:"
;
dumpSigKeys
(
result
.
signingKeys
);
qDebug
()
<<
"Resolved Encryption keys:"
;
dumpKeys
(
result
.
encryptionKeys
);
qDebug
()
<<
"Send Unencrypted:"
<<
sendUnencrypted
;
exit
(
0
);
}
private
:
KeyResolver
*
resolver
;
};
int
main
(
int
argc
,
char
**
argv
)
{
QApplication
app
(
argc
,
argv
);
QCommandLineParser
parser
;
parser
.
setApplicationDescription
(
QStringLiteral
(
"Test KeyResolver class"
));
parser
.
addHelpOption
();
parser
.
addPositionalArgument
(
QStringLiteral
(
"recipients"
),
QStringLiteral
(
"Recipients to resolve"
),
QStringLiteral
(
"[mailboxes]"
));
parser
.
addOption
(
QCommandLineOption
({
QStringLiteral
(
"overrides"
),
QStringLiteral
(
"o"
)},
QStringLiteral
(
"Override where format can be:
\n
"
"OpenPGP
\n
"
"SMIME
\n
"
"Auto"
),
QStringLiteral
(
"mailbox:fpr,fpr,...[:format]"
)));
parser
.
addOption
(
QCommandLineOption
({
QStringLiteral
(
"sender"
),
QStringLiteral
(
"s"
)},
QStringLiteral
(
"Mailbox of the sender"
),
QStringLiteral
(
"mailbox"
)));
parser
.
addOption
(
QCommandLineOption
({
QStringLiteral
(
"sigkeys"
),
QStringLiteral
(
"k"
)},
QStringLiteral
(
"Explicit signing keys"
),
QStringLiteral
(
"signing key"
)));
parser
.
addOption
(
QCommandLineOption
({
QStringLiteral
(
"encrypt"
),
QStringLiteral
(
"e"
)},
QStringLiteral
(
"Only select encryption keys"
)));
parser
.
addOption
(
QCommandLineOption
({
QStringLiteral
(
"approval"
),
QStringLiteral
(
"a"
)},
QStringLiteral
(
"Always show approval dlg"
)));
parser
.
process
(
app
);
const
QStringList
recps
=
parser
.
positionalArguments
();
if
(
recps
.
size
()
<
1
)
{
parser
.
showHelp
(
1
);
}
KeyResolver
resolver
(
true
,
!
parser
.
isSet
(
QStringLiteral
(
"encrypt"
)));
resolver
.
setRecipients
(
recps
);
resolver
.
setSender
(
parser
.
value
(
QStringLiteral
(
"sender"
)));
QMap
<
Protocol
,
QMap
<
QString
,
QStringList
>
>
overrides
;
for
(
const
QString
&
oride
:
parser
.
values
(
QStringLiteral
(
"overrides"
)))
{
const
QStringList
split
=
oride
.
split
(
QLatin1Char
(
':'
));
Protocol
fmt
=
UnknownProtocol
;
if
(
split
.
size
()
<
2
||
split
.
size
()
>
3
)
{
parser
.
showHelp
(
1
);
}
if
(
split
.
size
()
==
3
)
{
const
QString
fmtStr
=
split
[
2
].
toLower
();
if
(
fmtStr
==
QLatin1String
(
"openpgp"
))
{
fmt
=
OpenPGP
;
}
else
if
(
fmtStr
==
QLatin1String
(
"smime"
))
{
fmt
=
CMS
;
}
else
if
(
fmtStr
==
QLatin1String
(
"auto"
))
{
fmt
=
UnknownProtocol
;
}
else
{
parser
.
showHelp
(
1
);
}
}
const
QStringList
fingerprints
=
split
[
1
].
split
(
QLatin1Char
(
','
));
auto
map
=
overrides
.
value
(
fmt
);
map
.
insert
(
split
[
0
],
fingerprints
);
overrides
.
insert
(
fmt
,
map
);
}
resolver
.
setOverrideKeys
(
overrides
);
auto
recp
=
new
SignalRecipient
(
&
resolver
);
QObject
::
connect
(
&
resolver
,
&
KeyResolver
::
keysResolved
,
recp
,
&
SignalRecipient
::
keysResolved
);
QTimer
::
singleShot
(
1
s
,
[
&
parser
,
&
resolver
]()
{
resolver
.
start
(
parser
.
isSet
(
QStringLiteral
(
"approval"
)));
});
app
.
exec
();
return
0
;
}
#include
"test_keyresolver.moc"
File Metadata
Details
Attached
Mime Type
text/x-c++
Expires
Mon, Feb 2, 8:08 AM (11 h, 28 m)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
05/79/2989926e3f6ee6fedd8f6e9c73a8
Attached To
rLIBKLEO Libkleo
Event Timeline
Log In to Comment