Page Menu
Home
GnuPG
Search
Configure Global Search
Log In
Files
F34183612
smartcardactions.cpp
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Size
7 KB
Subscribers
None
smartcardactions.cpp
View Options
/* view/smartcardactions.cpp
This file is part of Kleopatra, the KDE keymanager
SPDX-FileCopyrightText: 2024 g10 Code GmbH
SPDX-FileContributor: Ingo Klöcker <dev@ingo-kloecker.de>
SPDX-License-Identifier: GPL-2.0-or-later
*/
#include
"smartcardactions.h"
#include
<commands/createopenpgpkeyfromcardkeyscommand.h>
#include
<utils/qt6compat.h>
#include
<KActionCollection>
#include
<KLocalizedString>
#include
<algorithm>
using
namespace
Kleo
::
Commands
;
using
namespace
Qt
::
Literals
::
StringLiterals
;
SmartCardActions
::
SmartCardActions
()
:
mActionCollection
{
std
::
make_unique
<
KActionCollection
>
(
nullptr
,
u
"smartcards"
_s
)}
{
mActionCollection
->
setComponentDisplayName
(
i18n
(
"Smart Card Management"
));
// window actions
mActionCollection
->
addAction
(
KStandardAction
::
StandardAction
::
Close
,
u
"window_close"
_s
);
// general actions
{
QAction
*
action
=
mActionCollection
->
addAction
(
KStandardAction
::
StandardAction
::
Redisplay
,
u
"reload"
_s
);
action
->
setText
(
i18nc
(
"@action"
,
"Reload"
));
action
->
setToolTip
(
i18nc
(
"@info:tooltip"
,
"Reload smart cards"
));
}
// card actions
if
(
CreateOpenPGPKeyFromCardKeysCommand
::
isSupported
())
{
addAction
(
u
"card_all_create_openpgp_certificate"
_s
,
//
i18nc
(
"@action"
,
"Create OpenPGP Certificate"
),
i18nc
(
"@info:tooltip"
,
"Create an OpenPGP certificate for the keys stored on the card."
));
}
// NetKey-specific card actions
addAction
(
u
"card_netkey_set_nks_pin"
_s
,
//
i18nc
(
"@action NKS is an identifier for a type of keys on a NetKey card"
,
"Set NKS PIN"
));
addAction
(
u
"card_netkey_set_sigg_pin"
_s
,
//
i18nc
(
"@action SigG is an identifier for a type of keys on a NetKey card"
,
"Set SigG PIN"
));
// OpenPGP-specific card actions
addAction
(
u
"card_pgp_generate_keys_and_certificate"
_s
,
//
i18nc
(
"@action"
,
"Generate New Keys"
),
xi18nc
(
"@info:tooltip"
,
"<para>Generate three new keys on the smart card and create a new OpenPGP "
"certificate with those keys. Optionally, the encryption key is generated "
"off-card and a backup is created so that you can still access data encrypted "
"with this key in case the card is lost or damaged.</para>"
"<para><emphasis strong='true'>"
"Existing keys on the smart card will be overwritten."
"</emphasis></para>"
));
addAction
(
u
"card_pgp_change_pin"
_s
,
//
i18nc
(
"@action"
,
"Change PIN"
),
i18nc
(
"@info:tooltip"
,
"Change the PIN required for using the keys on the smart card. "
"The PIN must contain at least six characters."
));
addAction
(
u
"card_pgp_unblock_card"
_s
,
//
i18nc
(
"@action"
,
"Unblock Card"
),
i18nc
(
"@info:tooltip"
,
"Unblock the smart card with the PUK (if available) or the Admin PIN."
));
addAction
(
u
"card_pgp_change_admin_pin"
_s
,
//
i18nc
(
"@action"
,
"Change Admin PIN"
),
i18nc
(
"@info:tooltip"
,
"Change the PIN required for administrative operations."
));
addAction
(
u
"card_pgp_change_puk"
_s
,
//
i18nc
(
"@action"
,
"Change PUK"
),
i18nc
(
"@info:tooltip"
,
"Set or change the PUK that can be used to unblock the smart card. "
"The PUK must contain at least eight characters."
));
addAction
(
u
"card_pgp_change_cardholder"
_s
,
//
i18nc
(
"@action"
,
"Change Cardholder"
),
i18nc
(
"@info:tooltip"
,
"Change the cardholder's name."
));
addAction
(
u
"card_pgp_change_publickeyurl"
_s
,
//
i18nc
(
"@action"
,
"Change Public Key URL"
),
i18nc
(
"@info:tooltip"
,
"Change the URL where the public key for the keys on this smartcard can be downloaded."
));
// PIV-specific card actions
addAction
(
u
"card_piv_change_pin"
_s
,
//
i18nc
(
"@action"
,
"Change PIN"
),
i18nc
(
"@info:tooltip"
,
"Change the PIN required for using the keys on the smart card."
));
addAction
(
u
"card_piv_change_puk"
_s
,
//
i18nc
(
"@action"
,
"Change PUK"
),
i18nc
(
"@info:tooltip"
,
"Change the PIN Unblocking Key (PUK) that can be used to unblock the smart card "
"after a wrong PIN has been entered too many times."
));
addAction
(
u
"card_piv_change_admin_key"
_s
,
//
i18nc
(
"@action"
,
"Change Admin Key"
),
i18nc
(
"@info:tooltip"
,
"Change the PIV Card Application Administration Key that is used by the "
"PIV Card Application to authenticate the PIV Card Application Administrator and by the "
"administrator (resp. Kleopatra) to authenticate the PIV Card Application."
));
// card slot actions
addAction
(
u
"card_slot_show_certificate_details"
_s
,
//
i18nc
(
"@action"
,
"Show Certificate Details"
),
{},
QIcon
::
fromTheme
(
u
"dialog-information"
_s
));
addAction
(
u
"card_slot_generate_key"
_s
,
//
i18nc
(
"@action"
,
"Generate New Key"
),
i18nc
(
"@info:tooltip"
,
"If the card slot already contains a key then the new key will irrevocably replace the old key."
),
QIcon
::
fromTheme
(
u
"view-certificate-add"
_s
));
addAction
(
u
"card_slot_write_key"
_s
,
//
i18nc
(
"@action"
,
"Write Key to Card"
),
i18nc
(
"@info:tooltip"
,
"Write the key pair of a certificate to the card"
),
QIcon
::
fromTheme
(
u
"view-certificate-export"
_s
));
addAction
(
u
"card_slot_write_certificate"
_s
,
//
i18nc
(
"@action"
,
"Write Certificate to Card"
),
i18nc
(
"@info:tooltip"
,
"Write the certificate corresponding to this key to the card"
),
QIcon
::
fromTheme
(
u
"view-certificate-export"
_s
));
addAction
(
u
"card_slot_read_certificate"
_s
,
//
i18nc
(
"@action"
,
"Import Certificate from Card"
),
i18nc
(
"@info:tooltip"
,
"Import the certificate stored on the card"
),
QIcon
::
fromTheme
(
u
"view-certificate-import"
_s
));
addAction
(
u
"card_slot_create_csr"
_s
,
//
i18nc
(
"@action"
,
"Create S/MIME Certification Request"
),
i18nc
(
"@info:tooltip"
,
"Create an S/MIME certificate signing request for this key"
),
QIcon
::
fromTheme
(
u
"view-certificate-add"
_s
));
}
SmartCardActions
::~
SmartCardActions
()
=
default
;
void
SmartCardActions
::
addAction
(
const
QString
&
id
,
const
QString
&
text
,
const
QString
&
toolTip
,
const
QIcon
&
icon
)
{
QAction
*
action
=
mActionCollection
->
addAction
(
id
);
action
->
setText
(
text
);
action
->
setToolTip
(
toolTip
);
action
->
setIcon
(
icon
);
}
std
::
shared_ptr
<
const
SmartCardActions
>
SmartCardActions
::
instance
()
{
return
mutableInstance
();
}
std
::
shared_ptr
<
SmartCardActions
>
SmartCardActions
::
mutableInstance
()
{
static
std
::
weak_ptr
<
SmartCardActions
>
self
;
if
(
std
::
shared_ptr
<
SmartCardActions
>
shared
=
self
.
lock
())
{
return
shared
;
}
else
{
const
std
::
shared_ptr
<
SmartCardActions
>
s
{
new
SmartCardActions
};
self
=
s
;
return
s
;
}
}
// static
QAction
*
SmartCardActions
::
createProxyAction
(
QAction
*
action
,
QObject
*
parent
)
{
Q_ASSERT
(
action
);
auto
proxyAction
=
new
QAction
{
parent
};
proxyAction
->
setObjectName
(
action
->
objectName
());
proxyAction
->
setText
(
action
->
text
());
proxyAction
->
setToolTip
(
action
->
toolTip
());
proxyAction
->
setIcon
(
action
->
icon
());
QObject
::
connect
(
proxyAction
,
&
QAction
::
triggered
,
action
,
&
QAction
::
trigger
);
return
proxyAction
;
}
QAction
*
SmartCardActions
::
action
(
const
QString
&
name
)
const
{
return
mActionCollection
->
action
(
name
);
}
std
::
vector
<
QAction
*>
SmartCardActions
::
actions
(
const
std
::
vector
<
QString
>
&
names
)
const
{
std
::
vector
<
QAction
*>
result
;
result
.
reserve
(
names
.
size
());
std
::
ranges
::
transform
(
names
,
std
::
back_inserter
(
result
),
[
this
](
const
QString
&
name
)
{
return
action
(
name
);
});
std
::
erase
(
result
,
nullptr
);
return
result
;
}
File Metadata
Details
Attached
Mime Type
text/x-c
Expires
Sun, Dec 14, 10:13 AM (1 d, 13 h)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
4c/7d/189c1768ffa92d54334b5d62a098
Attached To
rKLEOPATRA Kleopatra
Event Timeline
Log In to Comment