From e74fbd894877332da7a4c06774bd1cb0cec22401 Mon Sep 17 00:00:00 2001 From: MOHAN Date: Fri, 20 Mar 2026 15:13:08 +0530 Subject: [PATCH] Changed Vertiflo to Veriflo --- .env.example | 23 ++++++++++++----------- database.sqlite | Bin 57344 -> 86016 bytes database.sqlite-shm | Bin 32768 -> 0 bytes database.sqlite-wal | Bin 597432 -> 0 bytes index.js | 7 ++++--- src/db.js | 11 ++++++----- src/middlewares/auth.js | 3 ++- src/routes/user.js | 13 +++++++------ src/utils/messageTemplate.js | 3 ++- src/utils/sandbox.js | 5 +++-- 10 files changed, 36 insertions(+), 29 deletions(-) delete mode 100644 database.sqlite-shm delete mode 100644 database.sqlite-wal diff --git a/.env.example b/.env.example index a989f89..c894833 100644 --- a/.env.example +++ b/.env.example @@ -1,12 +1,13 @@ PORT=3000 -VERTIFLO_DASHBOARD_ORIGIN="http://localhost:5174" -VERTIFLO_ENABLE_WHATSAPP_CLIENT=true -VERTIFLO_MESSAGE_TEMPLATE_MAX_CHARS=320 -VERTIFLO_SANDBOX_MONTHLY_MESSAGE_LIMIT=500 -VERTIFLO_LIVE_MONTHLY_MESSAGE_LIMIT=100 -VERTIFLO_SANDBOX_INTEGRATION_QUOTA_UNITS=1 -VERTIFLO_UPI_ID="your-upi-id@bank" -VERTIFLO_UPI_NAME="Veriflo" -VERTIFLO_SUPERADMIN_EMAIL="superadmin@veriflo.local" -VERTIFLO_SUPERADMIN_PASSWORD="SuperAdmin@123" -VERTIFLO_SUPERADMIN_NAME="Super Admin" +VERIFLO_DASHBOARD_ORIGIN="http://localhost:5174" +VERIFLO_ENABLE_WHATSAPP_CLIENT=true +VERIFLO_MESSAGE_TEMPLATE_MAX_CHARS=320 +VERIFLO_SANDBOX_MONTHLY_MESSAGE_LIMIT=500 +VERIFLO_LIVE_MONTHLY_MESSAGE_LIMIT=100 +VERIFLO_SANDBOX_INTEGRATION_QUOTA_UNITS=1 +VERIFLO_UPI_ID="your-upi-id@bank" +VERIFLO_UPI_NAME="Veriflo" +VERIFLO_SUPERADMIN_EMAIL="superadmin@veriflo.local" +VERIFLO_SUPERADMIN_PASSWORD="SuperAdmin@123" +VERIFLO_SUPERADMIN_NAME="Super Admin" + diff --git a/database.sqlite b/database.sqlite index 850ef29de50cef24ca14926bd34e576698d7b7d9..3687a213789658e646efc6a482622787abcd4d40 100644 GIT binary patch literal 86016 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 diff --git a/database.sqlite-shm b/database.sqlite-shm deleted file mode 100644 index 1e87772f980470f04d9b4c16b808048b531aadd1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 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 diff --git a/index.js b/index.js index 6daccbd..8992a51 100644 --- a/index.js +++ b/index.js @@ -12,8 +12,8 @@ loadEnvFile(); const app = express(); const PORT = process.env.PORT || 3000; -const dashboardOrigin = process.env.VERTIFLO_DASHBOARD_ORIGIN || 'http://localhost:5174'; -const whatsappEnabled = process.env.VERTIFLO_ENABLE_WHATSAPP_CLIENT !== 'false'; +const dashboardOrigin = process.env.VERIFLO_DASHBOARD_ORIGIN || 'http://localhost:5174'; +const whatsappEnabled = process.env.VERIFLO_ENABLE_WHATSAPP_CLIENT !== 'false'; // Initialize SQLite Schema initSchema(); @@ -106,7 +106,7 @@ if (whatsappEnabled) { app.locals.waClient = client; } else { app.locals.waInitError = 'WhatsApp client disabled by configuration.'; - console.log('WhatsApp client initialization skipped because VERTIFLO_ENABLE_WHATSAPP_CLIENT=false'); + console.log('WhatsApp client initialization skipped because VERIFLO_ENABLE_WHATSAPP_CLIENT=false'); } // --- Express Routes --- @@ -142,3 +142,4 @@ app.post("/send", async (req, res) => { app.listen(PORT, () => { console.log(`Veriflo API server running on http://localhost:${PORT}`); }); + diff --git a/src/db.js b/src/db.js index 8b251f9..065e2c7 100644 --- a/src/db.js +++ b/src/db.js @@ -217,15 +217,15 @@ function initSchema() { INSERT INTO payment_config (id, payments_enabled, upi_id, upi_name, payment_note) VALUES (1, 1, ?, ?, ?) `).run( - (process.env.VERTIFLO_UPI_ID || '').trim(), - process.env.VERTIFLO_UPI_NAME || 'Veriflo', + (process.env.VERIFLO_UPI_ID || '').trim(), + process.env.VERIFLO_UPI_NAME || 'Veriflo', 'Pay via UPI and submit UTR for admin approval.' ); } - const superAdminEmail = (process.env.VERTIFLO_SUPERADMIN_EMAIL || 'superadmin@veriflo.local').trim().toLowerCase(); - const superAdminPassword = process.env.VERTIFLO_SUPERADMIN_PASSWORD || 'SuperAdmin@123'; - const superAdminName = process.env.VERTIFLO_SUPERADMIN_NAME || 'Super Admin'; + const superAdminEmail = (process.env.VERIFLO_SUPERADMIN_EMAIL || 'superadmin@veriflo.local').trim().toLowerCase(); + const superAdminPassword = process.env.VERIFLO_SUPERADMIN_PASSWORD || 'SuperAdmin@123'; + const superAdminName = process.env.VERIFLO_SUPERADMIN_NAME || 'Super Admin'; const existingAdmin = db.prepare('SELECT id FROM users WHERE email = ?').get(superAdminEmail); if (!existingAdmin) { const hash = bcrypt.hashSync(superAdminPassword, 10); @@ -247,3 +247,4 @@ module.exports = { db, initSchema }; + diff --git a/src/middlewares/auth.js b/src/middlewares/auth.js index 4bfd0de..4468eee 100644 --- a/src/middlewares/auth.js +++ b/src/middlewares/auth.js @@ -1,7 +1,7 @@ const jwt = require('jsonwebtoken'); // Hardcoded for development, should be env var in production -const JWT_SECRET = process.env.JWT_SECRET || 'vertiflo_super_secret_key_2026'; +const JWT_SECRET = process.env.JWT_SECRET || 'veriflo_super_secret_key_2026'; function generateToken(user, expiresIn = '7d') { return jwt.sign( @@ -33,3 +33,4 @@ module.exports = { generateToken, verifyToken }; + diff --git a/src/routes/user.js b/src/routes/user.js index 05f0859..61870fb 100644 --- a/src/routes/user.js +++ b/src/routes/user.js @@ -21,8 +21,8 @@ const { const { resolveWhatsAppChatId } = require('../utils/whatsapp'); const router = express.Router(); -const TEST_OTP_USER_PER_MIN = Number(process.env.VERTIFLO_TEST_OTP_USER_PER_MIN || 8); -const TEST_OTP_IP_PER_MIN = Number(process.env.VERTIFLO_TEST_OTP_IP_PER_MIN || 20); +const TEST_OTP_USER_PER_MIN = Number(process.env.VERIFLO_TEST_OTP_USER_PER_MIN || 8); +const TEST_OTP_IP_PER_MIN = Number(process.env.VERIFLO_TEST_OTP_IP_PER_MIN || 20); function getRateLimitIpKey(req) { return ipKeyGenerator(req.ip || req.socket?.remoteAddress || '0.0.0.0'); @@ -132,8 +132,8 @@ router.post('/billing/payment-request', verifyToken, (req, res) => { WHERE id = 1 `).get(); const paymentsEnabled = Number(paymentConfig?.payments_enabled || 0) === 1; - const upiId = String(paymentConfig?.upi_id || process.env.VERTIFLO_UPI_ID || '').trim(); - const payeeName = encodeURIComponent(paymentConfig?.upi_name || process.env.VERTIFLO_UPI_NAME || 'Veriflo'); + const upiId = String(paymentConfig?.upi_id || process.env.VERIFLO_UPI_ID || '').trim(); + const payeeName = encodeURIComponent(paymentConfig?.upi_name || process.env.VERIFLO_UPI_NAME || 'Veriflo'); if (!paymentsEnabled) { return res.status(503).json({ error: 'Payments are currently disabled. Please contact admin.' }); @@ -184,13 +184,13 @@ router.get('/billing/config', verifyToken, (req, res) => { WHERE id = 1 `).get(); - const upiId = String(paymentConfig?.upi_id || process.env.VERTIFLO_UPI_ID || '').trim(); + const upiId = String(paymentConfig?.upi_id || process.env.VERIFLO_UPI_ID || '').trim(); return res.json({ config: { payments_enabled: Number(paymentConfig?.payments_enabled || 0) === 1, upi_available: Boolean(upiId), - upi_name: paymentConfig?.upi_name || process.env.VERTIFLO_UPI_NAME || 'Veriflo', + upi_name: paymentConfig?.upi_name || process.env.VERIFLO_UPI_NAME || 'Veriflo', payment_note: paymentConfig?.payment_note || 'Pay via UPI and submit UTR for admin approval.' } }); @@ -669,3 +669,4 @@ router.post('/test-webhook', verifyToken, async (req, res) => { }); module.exports = router; + diff --git a/src/utils/messageTemplate.js b/src/utils/messageTemplate.js index 1b19647..b97b866 100644 --- a/src/utils/messageTemplate.js +++ b/src/utils/messageTemplate.js @@ -7,7 +7,7 @@ This code expires in {expiry_seconds} seconds. Do not share it.`; const ALLOWED_VARIABLES = ['greeting', 'sender_name', 'otp', 'expiry_seconds']; function getTemplateMaxChars() { - const value = Number(process.env.VERTIFLO_MESSAGE_TEMPLATE_MAX_CHARS || 320); + const value = Number(process.env.VERIFLO_MESSAGE_TEMPLATE_MAX_CHARS || 320); return Number.isFinite(value) && value > 0 ? value : 320; } @@ -56,3 +56,4 @@ module.exports = { renderMessageTemplate, validateMessageTemplate }; + diff --git a/src/utils/sandbox.js b/src/utils/sandbox.js index ea57263..2440f71 100644 --- a/src/utils/sandbox.js +++ b/src/utils/sandbox.js @@ -1,12 +1,12 @@ const { db } = require('../db'); function getSandboxMonthlyMessageLimit() { - const value = Number(process.env.VERTIFLO_SANDBOX_MONTHLY_MESSAGE_LIMIT || 500); + const value = Number(process.env.VERIFLO_SANDBOX_MONTHLY_MESSAGE_LIMIT || 500); return Number.isFinite(value) && value > 0 ? value : 500; } function getLiveMonthlyMessageLimit() { - const value = Number(process.env.VERTIFLO_LIVE_MONTHLY_MESSAGE_LIMIT || 100); + const value = Number(process.env.VERIFLO_LIVE_MONTHLY_MESSAGE_LIMIT || 100); return Number.isFinite(value) && value > 0 ? value : 100; } @@ -74,3 +74,4 @@ module.exports = { getSandboxUsageThisMonth, getLiveUsageThisMonth }; +