diff options
author | João Augusto Costa Branco Marado Torres <torres.dev@disroot.org> | 2025-06-28 18:14:22 -0300 |
---|---|---|
committer | João Augusto Costa Branco Marado Torres <torres.dev@disroot.org> | 2025-06-28 18:14:22 -0300 |
commit | 79fd506d30eef3d113f4a8e3ab9ebd9004f1e8cc (patch) | |
tree | 96ff57c92e897c3cc3331e23043d20f1665c7d0a /src/lib/pgp/user.ts | |
parent | a1eac976b20e39f86d5944fbec68e2a0f8ffb746 (diff) |
feat: index page
Signed-off-by: João Augusto Costa Branco Marado Torres <torres.dev@disroot.org>
Diffstat (limited to 'src/lib/pgp/user.ts')
-rw-r--r-- | src/lib/pgp/user.ts | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/lib/pgp/user.ts b/src/lib/pgp/user.ts new file mode 100644 index 0000000..334fbde --- /dev/null +++ b/src/lib/pgp/user.ts @@ -0,0 +1,33 @@ +import { PublicKey, type Subkey, UserIDPacket } from "openpgp"; +import type { Signature } from "./sign.ts"; +import { defined, get } from "../../utils/anonymous.ts"; + +export function getUserIDsFromKey( + signature: Signature | undefined, + 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, + }; +} |