diff --git a/.env b/.env deleted file mode 100644 index c514433..0000000 --- a/.env +++ /dev/null @@ -1,50 +0,0 @@ -# Archivo de variables de entorno para la configuración de Google Sheets -GOOGLE_SERVICE_ACCOUNT_EMAIL=dbsheets@dbsheets-487314.iam.gserviceaccount.com -GOOGLE_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCi2DVTbgH5WzE4\nrsT4BLcjplwszwkiZmhUxcVma/xI/6G+LQpzWTmmETmPWGFBpPukcoEDJDIugSFF\nuiKM+cSJIJJTYYWb5sBGXC6bi36AiA3W/zuRYGoFdNP+34iqepWpXpjKY8T0bbJJ\njhIgjW/SN2fYZeVBZqLATEzRqCcPYXI5gs9fyb2bzTEjiB3kCklVCudl/JDoxAWm\nJ9vO/OOXEgt/t97v9cMoo9OZ4Y3txqiQB41UdS97btDvpezc59u+8K9s5FT+yljC\nMyfRiRM+4MpycCoJobiT8NnCaNblMTd8mkfuujrFvnT/k9O794gBOJ2sgF7AYej4\nzm9tXpknAgMBAAECggEAM50bqcngTkydGT4rqAC2m1ILPRiR6JlU0CmvG3t2hxyf\nA0v7V/wbzYsAF3MHwGquZ7zzLy+1yA+doCAS+2Pe6yeruUnbs0I8BxEIpLxd6Bc3\na8GR+833TKtu1gW7p20bKoeVHfDpaB+stquVC0RJAPQWsfv54fTJ+PE2F+2YE8Np\njhWvM4OkUNZVBPZxG+RF0gzylIx2tw3QpLN3DMSr9Z2wGfohp7yryP96qqC1RFGQ\nCsaHsPRfzv+UNinGmA0Yzv79Stuqgsg+J3V/01Pm4ANutHix/kP0YAYCyg29UtVZ\nIJZtPOAfHWICYw+hQMpcfSLWzbkUQpwTTG0Bk6xmwQKBgQDUNf226UzdAm/V2Pag\nc1YF4P6Bru1A5jiFTpyrAYPSN+Wk84Gkl8XtuDDb7zXL+MaVb8aIVXTKhM2b0RDw\nHtDayoCCXci8VfP4sDRzjEGB1O1OPOl/wPD6L94CmNB0QeepNs4Q5xD0HEsoNN6s\nZGafIkIbVVUBCkuZwNxoLVXSKQKBgQDEcnKkgE/ror9vXSj0XY9Rn0wU2W6DreUt\nMizWyH9R0wBbaSJQ/4Wd3F6co2H2DSuZgXxLJvsPlqffUivs/oZnlx8HhWi6vjLL\nvSiqNC1D+Bh5TT7PEonENU99lruKtZfKcMpRtVF6WycW5ZlYok4lRCEBBvbjtGgr\nIHnqc8WazwKBgD0oHilDjQI4fJBtiY3uD0F8ePxYtEk6z9kjMaVat2my8DycbKVJ\nlCIRLguEIcXZuSlB4D5UGmdu5G5eTvpUdy5Go8huTLZyMvBdn5AZQJuxCH6+sTA/\nI3OGrf2jmpeWkrPCdpqKbOlc6g/5RJ78BFMiJVkJO4kkNWtnGF3xisUZAoGAJ8VT\n2GHxzC7CuvUNWYunfErXyFDMwvPttdy2nzUwMYyaQedi/yr8Dh2TOfsJ1hqMfSNt\n2nkl0t4ZVmj4Y56T71z09zzXGxduiTjehrbRgzUzHzu4P4vtQD/au/5MMaTZ+i4j\nh69Bs5fIriYFiaAyWfEVDXQvf6IChNiqVgDiPJkCgYEAooIiW4HHVUNGMnIeB7UI\nBXv5gSs2heHYSmEK+Er7In5cfJQzkcJvwiOMfOPCNuwVPn+ow5IN8le1acDon5I2\n0OsXhWmgyg9zmgguj273mH3h6+o6XTg5GrEYgPVpU3m2dJkd05oWhQvzy7/OxHs8\nE4ZMz97uqmU2r8XJCo//tv8=\n-----END PRIVATE KEY-----\n" -GOOGLE_SHEET_ID=12X6qeU0W4ZDw00vS4OreyC4nFjKBeBYo7rq3wyRsrNQ - -# Archivo de variables de entorno para la configuración de envío de emails -EMAIL_API_KEY=9UShpS8oh5Iun92TJSfevElI3Lp99TCv - -# This was inserted by prisma init: -# Environment variables declared in this file are NOT automatically loaded by Prisma. -# Please add import "dotenv/config"; to your prisma.config.ts file, or use the Prisma CLI with Bun -# to load environment variables from .env files: https://pris.ly/prisma-config-env-vars. - -# Prisma supports the native connection string format for PostgreSQL, MySQL, SQLite, SQL Server, MongoDB and CockroachDB. -# See the documentation for all the connection string options: https://pris.ly/d/connection-strings - -# The following prisma+postgres URL is similar to the URL produced by running a local Prisma Postgres -# server with the prisma dev CLI command, when not choosing any non-default ports or settings. The API key, unlike the -# one found in a remote Prisma Postgres URL, does not contain any sensitive information. - -N8N_WEBHOOK_URL="https://flows2.carpa.com/webhook/news-summary" -N8N_API_KEY="sk_live_JwjpTdZrLVvijCKuWylWZbUuhBm6zPDH" - -# Cloudflare Email Sending -CLOUDFLARE_API_TOKEN=cfut_8Y0Tcwiv3v0K1LDK9QSvc3BjlU1lZFs1zikACgTw33977b37 -CLOUDFLARE_ACCOUNT_ID=3e689750123db91e81d3542d2930a907 - -# Cloudflare Turnstile — public key (visible in frontend) -TURNSTILE_SITE_KEY=0x4AAAAAAD9IYWC6HPflpneO - -# Cloudflare Turnstile — secret key (server-side, keep safe!) -# In production, set this as a Gitea Actions secret named TURNSTILE_SECRET_KEY -TURNSTILE_SECRET_KEY=0x4AAAAAAD9IYXASjQSpmo2iS902SDoXnT4 - -# Supabase PostgreSQL -# <<<<<<< Updated upstream -# DATABASE_URL="postgresql://postgres:postgres@localhost:5432/postgres?schema=public" -# DIRECT_URL="postgresql://postgres:postgres@localhost:5432/postgres?schema=public" -# SUPABASE_URL="http://localhost:8000" -# SUPABASE_ANON_KEY="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyAgCiAgICAicm9sZSI6ICJhbm9uIiwKICAgICJpc3MiOiAic3VwYWJhc2UtZGVtbyIsCiAgICAiaWF0IjogMTY0MTc2OTIwMCwKICAgICJleHAiOiAxNzk5NTM1NjAwCn0.dc_X5iR_VP_qT0zsiyj_I_OZ2T9FtRU2BBNWN8Bu4GE" -# SUPABASE_SERVICE_ROLE_KEY="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyAgCiAgICAicm9sZSI6ICJzZXJ2aWNlX3JvbGUiLAogICAgImlzcyI6ICJzdXBhYmFzZS1kZW1vIiwKICAgICJpYXQiOiAxNjQxNzY5MjAwLAogICAgImV4cCI6IDE3OTk1MzU2MDAKfQ.DaYlNEoUrrEn2Ig7tqibS-PHK5vgusbcbo7X36XVt4Q" -# POSTGRES_PASSWORD=postgres -# ======= -DATABASE_URL="postgresql://postgres:13730fbbdb2e76c904b228bd93bedd7f@vps1.carpa.com:5432/postgres?schema=public" -DIRECT_URL="postgresql://postgres:13730fbbdb2e76c904b228bd93bedd7f@vps1.carpa.com:5432/postgres?schema=public" -SUPABASE_URL="http://vps1.carpa.com" -SUPABASE_ANON_KEY="eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IjNhMWFiMzE3LWJhOWQtNGVlMy1hY2Y4LTgzNjVmNmE5ZTBiNyJ9.eyJyb2xlIjoiYW5vbiIsImlzcyI6InN1cGFiYXNlIiwiaWF0IjoxNzgyODU4MjA4LCJleHAiOjE5NDA1MzgyMDh9.53Jkizte60-Hos40tOz0Ld7ffHe6DAG6Nt033XDZHPCnanjYOpgaLfC2QlbY4mFWw9Z2hCd8bUgxWsGpwFNcPg" -SUPABASE_SERVICE_ROLE_KEY="eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IjNhMWFiMzE3LWJhOWQtNGVlMy1hY2Y4LTgzNjVmNmE5ZTBiNyJ9.eyJyb2xlIjoic2VydmljZV9yb2xlIiwiaXNzIjoic3VwYWJhc2UiLCJpYXQiOjE3ODI4NTgyMDgsImV4cCI6MTk0MDUzODIwOH0.f4ZWyQj0fGpEAKXWvL97b1w_4eaBfXRC13b5Mtac9UhJNbMFKIJJn1x_-8Kds-1PfIv590xlumN4sp_3X_tZeg" -POSTGRES_PASSWORD=13730fbbdb2e76c904b228bd93bedd7f -# >>>>>>> Stashed changes diff --git a/.gitea/workflows/deploy.yaml b/.gitea/workflows/deploy.yaml index c710ad6..9636a0e 100644 --- a/.gitea/workflows/deploy.yaml +++ b/.gitea/workflows/deploy.yaml @@ -53,9 +53,16 @@ jobs: npm install -g pnpm@11 2>&1 cd ${{ env.TARGET_DIR }} pnpm install --prod 2>&1 - sed -i "s|TURNSTILE_SITE_KEY: \"\"|TURNSTILE_SITE_KEY: \"${{ secrets.TURNSTILE_SITE_KEY }}\"|g" ecosystem.config.cjs - sed -i "s|TURNSTILE_SECRET_KEY: \"\"|TURNSTILE_SECRET_KEY: \"${{ secrets.TURNSTILE_SECRET_KEY }}\"|g" ecosystem.config.cjs - sed -i "s|CLOUDFLARE_API_TOKEN: \"\"|CLOUDFLARE_API_TOKEN: \"${{ secrets.CLOUDFLARE_API_TOKEN }}\"|g" ecosystem.config.cjs - sed -i "s|CLOUDFLARE_ACCOUNT_ID: \"\"|CLOUDFLARE_ACCOUNT_ID: \"${{ secrets.CLOUDFLARE_ACCOUNT_ID }}\"|g" ecosystem.config.cjs + cat > .env <<'ENVEOF' + DATABASE_URL="${{ secrets.DATABASE_URL }}" + GOOGLE_SERVICE_ACCOUNT_EMAIL="${{ secrets.GOOGLE_SERVICE_ACCOUNT_EMAIL }}" + GOOGLE_PRIVATE_KEY="${{ secrets.GOOGLE_PRIVATE_KEY }}" + GOOGLE_SHEET_ID="${{ secrets.GOOGLE_SHEET_ID }}" + EMAIL_API_KEY="${{ secrets.EMAIL_API_KEY }}" + TURNSTILE_SITE_KEY="${{ secrets.TURNSTILE_SITE_KEY }}" + TURNSTILE_SECRET_KEY="${{ secrets.TURNSTILE_SECRET_KEY }}" + CLOUDFLARE_API_TOKEN="${{ secrets.CLOUDFLARE_API_TOKEN }}" + CLOUDFLARE_ACCOUNT_ID="${{ secrets.CLOUDFLARE_ACCOUNT_ID }}" + ENVEOF pm2 reload ecosystem.config.cjs --only ${{ env.APP_NAME }} --update-env || \ pm2 start ecosystem.config.cjs --only ${{ env.APP_NAME }} --update-env diff --git a/.gitignore b/.gitignore index 291f341..e6be9db 100644 --- a/.gitignore +++ b/.gitignore @@ -14,6 +14,7 @@ pnpm-debug.log* # environment variables +.env .env.keys # macOS-specific files diff --git a/ecosystem.config.cjs b/ecosystem.config.cjs index 51ab06c..d03dcdb 100644 --- a/ecosystem.config.cjs +++ b/ecosystem.config.cjs @@ -2,26 +2,22 @@ module.exports = { apps: [ { name: "cdrdpyj", + cwd: __dirname, script: "dist/server/entry.mjs", + interpreter_args: "--env-file=.env", env: { NODE_ENV: "staging", PORT: 3310, - TURNSTILE_SITE_KEY: "", - TURNSTILE_SECRET_KEY: "", - CLOUDFLARE_API_TOKEN: "", - CLOUDFLARE_ACCOUNT_ID: "", } }, { name: "cdrdpyj-live", + cwd: __dirname, script: "dist/server/entry.mjs", + interpreter_args: "--env-file=.env", env: { NODE_ENV: "production", PORT: 4321, - TURNSTILE_SITE_KEY: "", - TURNSTILE_SECRET_KEY: "", - CLOUDFLARE_API_TOKEN: "", - CLOUDFLARE_ACCOUNT_ID: "", } } ] diff --git a/src/pages/[locale]/[section]/index.astro b/src/pages/[locale]/[section]/index.astro index 73d4194..ea1dd16 100644 --- a/src/pages/[locale]/[section]/index.astro +++ b/src/pages/[locale]/[section]/index.astro @@ -11,6 +11,7 @@ const tl = createTranslator(Astro.currentLocale); const { locale, section } = Astro.params; const routeKey = getRouteKeyFromSlug(section); +const turnstileSiteKey = process.env.TURNSTILE_SITE_KEY; if (routeKey === "formulario") { if (!["es", "en", "pt"].includes(Astro.currentLocale)) { @@ -62,7 +63,7 @@ if (routeKey === "formulario") {

{tl("form.page_title")}

- + )} diff --git a/src/pages/api/formulario/send.ts b/src/pages/api/formulario/send.ts index b33c10d..322870e 100644 --- a/src/pages/api/formulario/send.ts +++ b/src/pages/api/formulario/send.ts @@ -79,7 +79,7 @@ export const POST: APIRoute = async ({ request }) => { } const turnstileToken = body.turnstileToken || ""; - const turnstileSecret = import.meta.env.TURNSTILE_SECRET_KEY; + const turnstileSecret = process.env.TURNSTILE_SECRET_KEY; if (turnstileSecret && turnstileToken) { const verify = await fetch( "https://challenges.cloudflare.com/turnstile/v0/siteverify", diff --git a/src/pages/api/lib/email.ts b/src/pages/api/lib/email.ts index 27ab5aa..82af266 100644 --- a/src/pages/api/lib/email.ts +++ b/src/pages/api/lib/email.ts @@ -3,7 +3,7 @@ import Cloudflare from "cloudflare"; type TypeEmailData = "CENTRO_DEL_REINO_PAZ_Y_JUSTICIA_INFO" | "CENTRO_DEL_REINO_PAZ_Y_JUSTICIA_POSTULACION"; export async function sendEmail(data: object, to: string, type: TypeEmailData) { - const emailApiKey = import.meta.env.EMAIL_API_KEY; + const emailApiKey = process.env.EMAIL_API_KEY; const dataFinal = { ...data, @@ -77,8 +77,8 @@ function stripHtml(html: string): string { } export async function sendEmailCf(data: Record, to: string, type: TypeEmailData) { - const apiToken = import.meta.env.CLOUDFLARE_API_TOKEN; - const accountId = import.meta.env.CLOUDFLARE_ACCOUNT_ID; + const apiToken = process.env.CLOUDFLARE_API_TOKEN; + const accountId = process.env.CLOUDFLARE_ACCOUNT_ID; try { const client = new Cloudflare({ apiToken }); @@ -122,7 +122,7 @@ export async function sendEmailCf(data: Record, to: string, type // to: string, // type: TypeEmailData // ) { -// const apiKey = import.meta.env.BREVO_API_KEY; +// const apiKey = process.env.BREVO_API_KEY; // const { subject } = TEMPLATE_URLS[type]; // const rawHtml = await fetchTemplate(type); // const html = renderTemplate(rawHtml, data); diff --git a/src/pages/api/lib/googleSheets.ts b/src/pages/api/lib/googleSheets.ts index dcf8271..e4f2c79 100644 --- a/src/pages/api/lib/googleSheets.ts +++ b/src/pages/api/lib/googleSheets.ts @@ -2,14 +2,14 @@ import { google } from 'googleapis'; const auth = new google.auth.GoogleAuth({ credentials: { - client_email: import.meta.env.GOOGLE_SERVICE_ACCOUNT_EMAIL, - private_key: import.meta.env.GOOGLE_PRIVATE_KEY?.replace(/\\n/g, '\n'), + client_email: process.env.GOOGLE_SERVICE_ACCOUNT_EMAIL, + private_key: process.env.GOOGLE_PRIVATE_KEY?.replace(/\\n/g, '\n'), }, scopes: ['https://www.googleapis.com/auth/spreadsheets'], }); const sheets = google.sheets({ version: 'v4', auth }); -const SPREADSHEET_ID = import.meta.env.GOOGLE_SHEET_ID; +const SPREADSHEET_ID = process.env.GOOGLE_SHEET_ID; export async function emailExists(email: string): Promise { const formula = `=COUNTIF(G:G,"${email}")`;