From 3d73f9fa950fda63466b75ccce95670c8da9a466 Mon Sep 17 00:00:00 2001 From: Benjamin Palko Date: Wed, 8 Jan 2025 17:02:58 -0500 Subject: [PATCH] generate secret and validate iv position is number --- package.json | 3 ++- scripts/generate-secret.ts | 6 ++++++ scripts/validate-env.ts | 19 +++++++++++++++++-- src/routes/app/settings/+page.svelte | 4 ++++ 4 files changed, 29 insertions(+), 3 deletions(-) create mode 100644 scripts/generate-secret.ts create mode 100644 src/routes/app/settings/+page.svelte diff --git a/package.json b/package.json index b7fe197..1602198 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", "format": "prettier --write .", + "generate-secret": "bun ./scripts/generate-secret.ts", "lint": "prettier --check . && eslint .", "test:unit": "vitest", "test": "bun run test:unit -- --run && bun run test:e2e", @@ -44,7 +45,7 @@ "@sveltejs/adapter-auto": "^3.0.0", "@sveltejs/kit": "^2.15.3", "@sveltejs/vite-plugin-svelte": "^5.0.3", - "@types/bun": "^1.1.14", + "@types/bun": "^1.1.15", "autoprefixer": "^10.4.20", "daisyui": "^4.12.22", "eslint": "^9.7.0", diff --git a/scripts/generate-secret.ts b/scripts/generate-secret.ts new file mode 100644 index 0000000..2dce9de --- /dev/null +++ b/scripts/generate-secret.ts @@ -0,0 +1,6 @@ +import { randomBytes } from 'node:crypto'; + +console.log('SECRET: ', { + password: randomBytes(16).toString('hex'), + salt: randomBytes(16).toString('hex'), +}); diff --git a/scripts/validate-env.ts b/scripts/validate-env.ts index 888b6fd..cb121e8 100644 --- a/scripts/validate-env.ts +++ b/scripts/validate-env.ts @@ -1,5 +1,5 @@ -import { PhoneRegex } from '../src/lib/regex/phone'; import { z } from 'zod'; +import { PhoneRegex } from '../src/lib/regex/phone'; const ValidateEnvironment = () => { const { success, error } = z @@ -9,7 +9,22 @@ const ValidateEnvironment = () => { TWILIO_PHONE_NUMBER: z.string().regex(PhoneRegex), SECRETS_PASSWORD: z.string().length(32), SECRETS_SALT: z.string().min(16), - SECRETS_IV_POSITION: z.number().positive(), + SECRETS_IV_POSITION: z.string().transform((val, ctx) => { + const parsed = parseInt(val); + if (isNaN(parsed)) { + ctx.addIssue({ + code: z.ZodIssueCode.custom, + message: 'Not a number', + }); + + // This is a special symbol you can use to + // return early from the transform function. + // It has type `never` so it does not affect the + // inferred return type. + return z.NEVER; + } + return parsed; + }), }) .safeParse(process.env); diff --git a/src/routes/app/settings/+page.svelte b/src/routes/app/settings/+page.svelte new file mode 100644 index 0000000..b637efa --- /dev/null +++ b/src/routes/app/settings/+page.svelte @@ -0,0 +1,4 @@ + + +