67 lines
2.6 KiB
JavaScript
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 };
|