summaryrefslogtreecommitdiff
path: root/src/lib/pgp/trust.ts
blob: a79a2b6dac62b57a69c63929539b3f0d14f25d11 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import type { Key } from "npm:openpgp@^6.1.1";
import { createKeysFromDir } from "./create.ts";
import type { AsyncYieldType } from "../../utils/iterator.ts";
import { equal, getCall } from "../../utils/anonymous.ts";
import { env } from "../environment.ts";

let trusted:
  | Iterable<AsyncYieldType<ReturnType<typeof createKeysFromDir>>>
  | undefined = undefined;

const fingerprints = () =>
  // deno-lint-ignore no-undef
  Iterator.from(trusted ?? []).map(getCall("getFingerprint"));

export async function keyTrust(key: Key): Promise<number> {
  if (trusted === undefined) {
    trusted = await Array.fromAsync(createKeysFromDir(env.TRUSTED_KEYS_DIR));
  }
  return fingerprints().some(equal(key.getFingerprint())) ? 255 : 0;
}