Don't throw error when finding pgp key

This commit is contained in:
the-djmaze 2026-11-03 21:57:10 +01:00
parent 7e4733e6d9
commit fba1ab0c46
3 changed files with 16 additions and 10 deletions

View file

@ -445,7 +445,13 @@ class PGP extends Base implements \SnappyMail\PGP\PGPInterface
$arguments[] = \escapeshellarg($pattern); $arguments[] = \escapeshellarg($pattern);
} }
$result = $this->exec($arguments); try {
$result = $this->exec($arguments);
} catch (\RuntimeException $e) {
if (!\str_contains($e->getMessage(), 'No public key')) {
throw $e;
}
}
$keys = []; $keys = [];
if ($result) { if ($result) {
@ -565,13 +571,13 @@ class PGP extends Base implements \SnappyMail\PGP\PGPInterface
'private' => [] 'private' => []
]; ];
// Public // Public
foreach (($this->keyinfo($pattern) ?: []) as $key) { foreach (($this->keyInfo($pattern) ?: []) as $key) {
$key['can_verify'] = $key['can_sign']; $key['can_verify'] = $key['can_sign'];
unset($key['can_sign']); unset($key['can_sign']);
$keys['public'][] = $key; $keys['public'][] = $key;
} }
// Private, read https://github.com/php-gnupg/php-gnupg/issues/5 // Private, read https://github.com/php-gnupg/php-gnupg/issues/5
foreach (($this->keyinfo($pattern, 1) ?: []) as $key) { foreach (($this->keyInfo($pattern, 1) ?: []) as $key) {
$key['can_decrypt'] = $key['can_encrypt']; $key['can_decrypt'] = $key['can_encrypt'];
unset($key['can_encrypt']); unset($key['can_encrypt']);
$keys['private'][] = $key; $keys['private'][] = $key;

View file

@ -285,7 +285,7 @@ class PECL implements \SnappyMail\PGP\PGPInterface
public function keyInfo(string $pattern, bool $private = false): array public function keyInfo(string $pattern, bool $private = false): array
{ {
return $this->GnuPG->keyinfo($pattern, $private ? 1 : 0); return $this->GnuPG->keyInfo($pattern, $private ? 1 : 0);
} }
/** /**
@ -298,13 +298,13 @@ class PECL implements \SnappyMail\PGP\PGPInterface
'private' => [] 'private' => []
]; ];
// Public // Public
foreach (($this->GnuPG->keyinfo($pattern) ?: []) as $key) { foreach (($this->GnuPG->keyInfo($pattern) ?: []) as $key) {
$key['can_verify'] = $key['can_sign']; $key['can_verify'] = $key['can_sign'];
unset($key['can_sign']); unset($key['can_sign']);
$keys['public'][] = $key; $keys['public'][] = $key;
} }
// Private, read https://github.com/php-gnupg/php-gnupg/issues/5 // Private, read https://github.com/php-gnupg/php-gnupg/issues/5
foreach (($this->GnuPG->keyinfo($pattern, 1) ?: []) as $key) { foreach (($this->GnuPG->keyInfo($pattern, 1) ?: []) as $key) {
$key['can_decrypt'] = $key['can_encrypt']; $key['can_decrypt'] = $key['can_encrypt'];
unset($key['can_encrypt']); unset($key['can_encrypt']);
$keys['private'][] = $key; $keys['private'][] = $key;

View file

@ -41,7 +41,7 @@ abstract class Signature
private static function importKey($gnupg): void private static function importKey($gnupg): void
{ {
if (!\count($gnupg->keyinfo(static::KEY_FINGERPRINT))) { if (!\count($gnupg->keyInfo(static::KEY_FINGERPRINT))) {
// Try local key // Try local key
$file = __DIR__ . '/repository/releases.asc'; $file = __DIR__ . '/repository/releases.asc';
if (\is_readable($file)) { if (\is_readable($file)) {
@ -50,16 +50,16 @@ abstract class Signature
} }
$gnupg->importFile($file); $gnupg->importFile($file);
} }
if (!\count($gnupg->keyinfo(static::KEY_FINGERPRINT))) { if (!\count($gnupg->keyInfo(static::KEY_FINGERPRINT))) {
// Try to fetch from WKD server // Try to fetch from WKD server
// https://snappymail.eu/.well-known/openpgpkey/hu/i4cdqgcarfjdjnba6y4jnf498asg8c6p // https://snappymail.eu/.well-known/openpgpkey/hu/i4cdqgcarfjdjnba6y4jnf498asg8c6p
$sKey = Keyservers::wkd('releases@snappymail.eu'); $sKey = Keyservers::wkd('releases@snappymail.eu');
$sKey && $gnupg->import($sKey); $sKey && $gnupg->import($sKey);
// Try to fetch from HKPS server // Try to fetch from HKPS server
if (!\count($gnupg->keyinfo(static::KEY_FINGERPRINT))) { if (!\count($gnupg->keyInfo(static::KEY_FINGERPRINT))) {
$sKey = Keyservers::get(static::KEY_FINGERPRINT); $sKey = Keyservers::get(static::KEY_FINGERPRINT);
$sKey && $gnupg->import($sKey); $sKey && $gnupg->import($sKey);
if (!\count($gnupg->keyinfo(static::KEY_FINGERPRINT))) { if (!\count($gnupg->keyInfo(static::KEY_FINGERPRINT))) {
throw new \Exception('Repository PGP public key is missing'); throw new \Exception('Repository PGP public key is missing');
/* /*
$aKeys = Keyservers::index('releases@snappymail.eu'); $aKeys = Keyservers::index('releases@snappymail.eu');