Files
madbase/scripts/generate_jwt_keys.sh
Vlad Durnea a66d908eff
Some checks failed
CI / podman-build (push) Has been cancelled
CI / rust (push) Has been cancelled
chore: full stack stability and migration fixes, plus react UI progress
2026-03-18 09:01:38 +02:00

80 lines
2.2 KiB
Bash
Executable File

#!/bin/bash
set -e
echo "Generating JWT keys from JWT_SECRET..."
# Load environment variables
if [ -f .env ]; then
export $(cat .env | grep -v '^#' | xargs)
else
echo "Error: .env file not found"
exit 1
fi
# Validate required environment variable
if [ -z "$JWT_SECRET" ]; then
echo "Error: JWT_SECRET not set"
exit 1
fi
echo "Using JWT_SECRET (first 8 chars): ${JWT_SECRET:0:8}..."
echo "Using JWT_ISSUER: ${JWT_ISSUER:-madbase}..."
# Create a temporary TypeScript script to generate keys
cat > /tmp/generate_keys.ts << 'EOF'
import jwt from 'jsonwebtoken';
const secret = process.env.JWT_SECRET || '';
const issuer = process.env.JWT_ISSUER || 'madbase';
if (!secret) {
console.error('JWT_SECRET not provided');
process.exit(1);
}
const exp = Math.floor(Date.now() / 1000) + 60 * 60 * 24 * 7; // 7 days from now
const anonPayload = {
sub: 'anon',
role: 'anon',
iss: issuer,
iat: Math.floor(Date.now() / 1000),
exp: exp
};
const servicePayload = {
sub: 'service_role',
role: 'service_role',
iss: issuer,
iat: Math.floor(Date.now() / 1000),
exp: exp
};
const anonKey = jwt.sign(anonPayload, secret, { algorithm: 'HS256' });
const serviceKey = jwt.sign(servicePayload, secret, { algorithm: 'HS256' });
console.log('Generated Keys:');
console.log(`MADBASE_ANON_KEY=${anonKey}`);
console.log(`MADBASE_SERVICE_ROLE_KEY=${serviceKey}`);
EOF
# Run the script using ts-node or node
if command -v tsx &> /dev/null; then
JWT_SECRET="$JWT_SECRET" JWT_ISSUER="${JWT_ISSUER:-madbase}" tsx /tmp/generate_keys.ts
elif command -v ts-node &> /dev/null; then
JWT_SECRET="$JWT_SECRET" JWT_ISSUER="${JWT_ISSUER:-madbase}" ts-node /tmp/generate_keys.ts
else
echo "Error: tsx or ts-node not found. Please install one of them:"
echo " npm install -g tsx"
echo " npm install -g ts-node"
exit 1
fi
# Clean up
rm /tmp/generate_keys.ts
echo ""
echo "To update your .env file with these keys, run:"
echo " scripts/generate_jwt_keys.sh | grep 'MADBASE_ANON_KEY=' | cut -d'=' -f2- | xargs -I {} sed -i '' 's/^MADBASE_ANON_KEY=.*/MADBASE_ANON_KEY={}/' .env"
echo " scripts/generate_jwt_keys.sh | grep 'MADBASE_SERVICE_ROLE_KEY=' | cut -d'=' -f2- | xargs -I {} sed -i '' 's/^MADBASE_SERVICE_ROLE_KEY=.*/MADBASE_SERVICE_ROLE_KEY={}/' .env"