From b2cc83538baa69e32aab76b109772e470acd8583 Mon Sep 17 00:00:00 2001 From: nate Date: Sat, 11 Apr 2026 04:36:14 +0400 Subject: [PATCH] add feistel encryption --- .env.example | 3 +++ apps/pay/src/receipt.ts | 5 ++-- apps/pay/src/routes.ts | 11 +++++--- apps/shared/feistel.ts | 45 ++++++++++++++++++++++++++++++++ apps/web/src/routes/dashboard.ts | 2 ++ apps/web/src/views/settings.ejs | 4 +-- 6 files changed, 62 insertions(+), 8 deletions(-) create mode 100644 apps/shared/feistel.ts diff --git a/.env.example b/.env.example index eae5169..24485c2 100644 --- a/.env.example +++ b/.env.example @@ -10,6 +10,9 @@ COORDINATOR_URL=http://localhost:3000 MONITOR_TOKEN=changeme-use-a-random-secret RUST_LOG=info +# Feistel cipher for payment IDs (shared between pay + web) +FEISTEL_SECRET=changeme-use-a-random-secret + # Pay app — crypto payments FREEDOM_API=https://api-v1.freedom.st XPUB_BTC= diff --git a/apps/pay/src/receipt.ts b/apps/pay/src/receipt.ts index 602b672..a46e0b6 100644 --- a/apps/pay/src/receipt.ts +++ b/apps/pay/src/receipt.ts @@ -1,5 +1,6 @@ import sql from "./db"; import { COINS } from "../../shared/plans"; +import { encodeId } from "../../shared/feistel"; export async function generateReceipt(paymentId: number): Promise { const [payment] = await sql`SELECT * FROM payments WHERE id = ${paymentId}`; @@ -40,7 +41,7 @@ export async function generateReceipt(paymentId: number): Promise { - PingQL Receipt #${payment.id} + PingQL Receipt #${encodeId(payment.id)}