Something went wrong. Try again.
Monorepo for Tangled forked from tangled.org/core
Something went wrong. Try again.
1234567891011121314151617181920212223242526272829303132333435363738394041import { createHmac } from "node:crypto";import { describe, expect, it } from "vitest";import { signAvatarSrcs, signedAvatarUrl } from "#lib/server/avatar.ts";
const SERVICE = "https://avatar.test";const sig = (did: string) => createHmac("sha256", "s3cret").update(did).digest("hex");
describe("signedAvatarUrl", () => { it("signs the did and keeps only size, format and v", () => { const search = new URLSearchParams("size=42&v=3&evil=1"); expect(signedAvatarUrl(SERVICE, "s3cret", "did:plc:alice", search)).toBe( `${SERVICE}/${sig("did:plc:alice")}/did:plc:alice?size=42&v=3` ); });});
describe("signAvatarSrcs", () => { it("points server rendered avatars at the service", () => { const html = '<img src="https://avatar.tangled.sh/1dc0ce22be126c39ff28aa9caf79be717b0407c0909343163ed5b05d03e19540/did:plc:alice?size=42" alt="">'; expect(signAvatarSrcs(html, SERVICE, "s3cret")).toBe( `<img src="${SERVICE}/${sig("did:plc:alice")}/did:plc:alice?size=42&v=3" alt="">` ); });
it("handles a src without a query", () => { expect(signAvatarSrcs('<img src="https://avatar.tangled.sh/dfd0b89bed8d85ca834fa0458e4d880e82118522f9d668a3dac7b094b15133b7/did:plc:bob">', SERVICE, "s3cret")).toBe( `<img src="${SERVICE}/${sig("did:plc:bob")}/did:plc:bob">` ); });
it.each([ '<img src="/avatar/%zz">', '<img src="/avatar/not-a-did?size=42">', '<a href="/avatar/did%3Aplc%3Aalice">', '{"avatar":"/avatar/did%3Aplc%3Aalice"}', '<meta content="https://next.tangled.org/avatar/did%3Aplc%3Aalice?size=256">' ])("leaves %s alone", (html) => { expect(signAvatarSrcs(html, SERVICE, "s3cret")).toBe(html); });});