EventBuzz_Backend/src/controllers/platformPayment.controller.js

67 lines
2.6 KiB
JavaScript

const PlatformPaymentConfig = require('../models/PlatformPaymentConfig');
const { success, error } = require('../utils/response');
const { encryptObject, encryptString, decryptObject, decryptString } = require('../utils/paymentCrypto');
const { maskKeyId } = require('../services/payments/maskCredentials');
const getPlatformPaymentConfig = async (request, h) => {
if (request.auth.credentials.user.role !== 'super_admin') {
return h.response(error('FORBIDDEN', 'Only super administrators can view platform payment settings')).code(403);
}
let doc = await PlatformPaymentConfig.findOne({ key: 'default' });
if (!doc) {
doc = await PlatformPaymentConfig.create({ key: 'default' });
}
const out = doc.toObject();
const webhookConfigured = Boolean(doc.webhookSecretEnc && String(doc.webhookSecretEnc).length > 4);
let cred = {};
try {
if (out.razorpayCredentialsEnc) cred = decryptObject(out.razorpayCredentialsEnc);
} catch {
cred = {};
}
delete out.razorpayCredentialsEnc;
delete out.webhookSecretEnc;
out.razorpayKeyIdMasked = cred.keyId ? maskKeyId(cred.keyId) : '';
out.webhookConfigured = webhookConfigured;
return h.response(success(out));
};
const updatePlatformPaymentConfig = async (request, h) => {
if (request.auth.credentials.user.role !== 'super_admin') {
return h.response(error('FORBIDDEN', 'Only super administrators can update platform payment settings')).code(403);
}
let doc = await PlatformPaymentConfig.findOne({ key: 'default' });
if (!doc) doc = await PlatformPaymentConfig.create({ key: 'default' });
const p = request.payload;
if (p.enabled != null) doc.enabled = Boolean(p.enabled);
if (p.testMode != null) doc.testMode = Boolean(p.testMode);
if (p.defaultCommissionBps != null) doc.defaultCommissionBps = Number(p.defaultCommissionBps);
if (p.razorpayKeyId != null || p.razorpayKeySecret != null) {
let cur = {};
try {
if (doc.razorpayCredentialsEnc) cur = decryptObject(doc.razorpayCredentialsEnc);
} catch {
cur = {};
}
const next = { ...cur };
if (p.razorpayKeyId != null) next.keyId = String(p.razorpayKeyId).trim();
if (p.razorpayKeySecret != null && String(p.razorpayKeySecret).length > 0) {
next.keySecret = String(p.razorpayKeySecret).trim();
}
if (next.keyId && next.keySecret) {
doc.razorpayCredentialsEnc = encryptObject(next);
}
}
if (p.webhookSecret != null && String(p.webhookSecret).trim().length > 0) {
doc.webhookSecretEnc = encryptString(String(p.webhookSecret).trim());
}
await doc.save();
return getPlatformPaymentConfig(request, h);
};
module.exports = { getPlatformPaymentConfig, updatePlatformPaymentConfig };