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 850ef29..3687a21 100644 Binary files a/database.sqlite and b/database.sqlite differ diff --git a/database.sqlite-shm b/database.sqlite-shm deleted file mode 100644 index 1e87772..0000000 Binary files a/database.sqlite-shm and /dev/null differ diff --git a/database.sqlite-wal b/database.sqlite-wal deleted file mode 100644 index 68eb91e..0000000 Binary files a/database.sqlite-wal and /dev/null differ 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 }; +