diff options
Diffstat (limited to 'src/lib/pgp/verify.ts')
-rw-r--r-- | src/lib/pgp/verify.ts | 39 |
1 files changed, 5 insertions, 34 deletions
diff --git a/src/lib/pgp/verify.ts b/src/lib/pgp/verify.ts index da2de7f..f37c0bb 100644 --- a/src/lib/pgp/verify.ts +++ b/src/lib/pgp/verify.ts @@ -3,7 +3,7 @@ import { PublicKey, readSignature, type Subkey, - UserIDPacket, + type UserIDPacket, verify, } from "openpgp"; import { @@ -18,11 +18,12 @@ import { type KeyFileFormat, } from "./create.ts"; import { getLastCommitForOneOfFiles } from "../git/log.ts"; -import { defined, get, instanciate } from "../../utils/anonymous.ts"; +import { get, instanciate } from "../../utils/anonymous.ts"; import { Packet, Signature } from "./sign.ts"; import type { Commit } from "../git/types.ts"; -import { TRUSTED_KEYS_DIR } from "../../consts.ts"; import { findMapAsync, type MaybeIterable } from "../../utils/iterator.ts"; +import { getUserIDsFromKey } from "./user.ts"; +import { env } from "../env.ts"; type DataURL = [URL, URL?]; type Corrupted = [false] | [true, Error]; @@ -251,7 +252,7 @@ export class SignatureVerifier { public static async instance(): Promise<SignatureVerifier> { if (!SignatureVerifier.#instance) { SignatureVerifier.#instance = new SignatureVerifier(); - await SignatureVerifier.#instance.addKeysFromDir(TRUSTED_KEYS_DIR); + await SignatureVerifier.#instance.addKeysFromDir(env.TRUSTED_KEYS_DIR); } return SignatureVerifier.#instance; @@ -270,36 +271,6 @@ export class SignatureVerifier { export const verifier = SignatureVerifier.instance(); -function getUserIDsFromKey( - signature: Signature, - key: PublicKey | Subkey, -): UserIDPacket[] { - const packet = signature.getPackets()[0]; - const userID = packet.signersUserID; - - if (userID) { - return [UserIDPacket.fromObject(parseUserID(userID))]; - } - - key = key instanceof PublicKey ? key : key.mainKey; - return key.users.map(get("userID")).filter(defined); -} - -function parseUserID(input: string) { - const regex = /^(.*?)\s*(?:\((.*?)\))?\s*(?:<(.+?)>)?$/; - const match = input.match(regex); - - if (!match) return {}; - - const [, name, comment, email] = match; - - return { - name: name?.trim() || undefined, - comment: comment?.trim() || undefined, - email: email?.trim() || undefined, - }; -} - async function isSignatureCorrupted( verified: Awaited< ReturnType<typeof verify> |