forked from
rocksky.app/rocksky
A decentralized music tracking and discovery platform built on AT Protocol 馃幍
1import { env } from "lib/env";
2import crypto from "node:crypto";
3
4export function generateLastfmSignature(
5 params: Record<string, string>,
6): string {
7 const sortedKeys = Object.keys(params).sort();
8 let signatureString = "";
9 for (const key of sortedKeys) {
10 if (key !== "format" && key !== "callback") {
11 signatureString += key + params[key];
12 }
13 }
14 signatureString += env.ROCKSKY_SHARED_SECRET;
15 return crypto.createHash("md5").update(signatureString, "utf8").digest("hex");
16}
17
18export function validateLastfmSignature(
19 params: Record<string, string>,
20): boolean {
21 const providedSignature = params.api_sig;
22 if (!providedSignature) return false;
23
24 const expectedSignature = generateLastfmSignature(params);
25 return providedSignature === expectedSignature;
26}