Unverified Commit 6b297204 authored by Hong Minhee's avatar Hong Minhee
Browse files

Cache signed key

parent 4d459c5d
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -179,6 +179,8 @@ Deno.test("Federation.createContext()", async (t) => {
    assertEquals(ctx.url, new URL("https://example.com/"));
    assertEquals(ctx.data, 123);
    assertEquals(await ctx.getSignedKey(), null);
    // Multiple calls should return the same result:
    assertEquals(await ctx.getSignedKey(), null);

    const signedReq = await sign(
      new Request("https://example.com/"),
@@ -190,6 +192,8 @@ Deno.test("Federation.createContext()", async (t) => {
    assertEquals(signedCtx.url, new URL("https://example.com/"));
    assertEquals(signedCtx.data, 456);
    assertEquals(await signedCtx.getSignedKey(), publicKey2);
    // Multiple calls should return the same result:
    assertEquals(await signedCtx.getSignedKey(), publicKey2);
  });

  mf.uninstall();
+4 −2
Original line number Diff line number Diff line
@@ -390,12 +390,14 @@ export class Federation<TContextData> {
      },
    };
    if (request == null) return context;
    let signedKey: CryptographicKey | null | undefined = undefined;
    const reqCtx: RequestContext<TContextData> = {
      ...context,
      request,
      url,
      getSignedKey() {
        return verify(request, context.documentLoader);
      async getSignedKey() {
        if (signedKey !== undefined) return signedKey;
        return signedKey = await verify(request, context.documentLoader);
      },
    };
    return reqCtx;