mirror of
https://github.com/Hessenuk/DiscordTickets.git
synced 2025-09-04 09:21:25 +03:00
Add support for SQLite and PostgreSQL. Also add/fix encryption...
...for a smaller number of fields
This commit is contained in:
49
src/lib/middleware/prisma-encryption.js
Normal file
49
src/lib/middleware/prisma-encryption.js
Normal file
@@ -0,0 +1,49 @@
|
||||
const Cryptr = require('cryptr');
|
||||
const cryptr = new Cryptr(process.env.ENCRYPTION_KEY);
|
||||
const encryptedFields = [
|
||||
// 'name',
|
||||
'content',
|
||||
'username',
|
||||
'displayName',
|
||||
// 'channelName',
|
||||
// 'openingMessage',
|
||||
// 'description',
|
||||
'value',
|
||||
// 'placeholder',
|
||||
'closedReason',
|
||||
'topic',
|
||||
'comment',
|
||||
// 'label',
|
||||
// 'regex',
|
||||
];
|
||||
|
||||
const encrypt = obj => {
|
||||
for (const prop in obj) {
|
||||
if (typeof obj[prop] === 'string' && obj[prop].length !== 0 && encryptedFields.includes(prop)) {
|
||||
obj[prop] = cryptr.encrypt(obj[prop]);
|
||||
} else if (typeof obj[prop] === 'object') {
|
||||
obj[prop] = encrypt(obj[prop]);
|
||||
}
|
||||
}
|
||||
return obj;
|
||||
};
|
||||
|
||||
const decrypt = obj => {
|
||||
for (const prop in obj) {
|
||||
if (typeof obj[prop] === 'string' && obj[prop].length !== 0 && encryptedFields.includes(prop)) {
|
||||
obj[prop] = cryptr.decrypt(obj[prop]);
|
||||
} else if (typeof obj[prop] === 'object') {
|
||||
obj[prop] = decrypt(obj[prop]);
|
||||
}
|
||||
}
|
||||
return obj;
|
||||
};
|
||||
|
||||
module.exports = async (params, next) => {
|
||||
if (params.args.create) params.args.create = encrypt(params.args.create);
|
||||
if (params.args.data) params.args.data = encrypt(params.args.data);
|
||||
if (params.args.update) params.args.update = encrypt(params.args.update);
|
||||
let result = await next(params);
|
||||
if (result) result = decrypt(result);
|
||||
return result;
|
||||
};
|
35
src/lib/middleware/prisma-types.js
Normal file
35
src/lib/middleware/prisma-types.js
Normal file
@@ -0,0 +1,35 @@
|
||||
const jsonFields = [
|
||||
'pingRoles',
|
||||
'requiredRoles',
|
||||
'staffRoles',
|
||||
'autoTag',
|
||||
'blocklist',
|
||||
'workingHours',
|
||||
'options',
|
||||
'pinnedMessages',
|
||||
];
|
||||
|
||||
const traverse = (obj, func) => {
|
||||
for (const prop in obj) {
|
||||
console.log(prop, typeof obj[prop], obj[prop]);
|
||||
if (jsonFields.includes(prop) && obj[prop] !== null && obj[prop] !== undefined) {
|
||||
obj[prop] = func(obj[prop]);
|
||||
} else if (typeof obj[prop] === 'object') {
|
||||
obj[prop] = traverse(obj[prop], func);
|
||||
}
|
||||
}
|
||||
return obj;
|
||||
};
|
||||
|
||||
module.exports = async (params, next) => {
|
||||
if (process.env.DB_PROVIDER === 'sqlite') {
|
||||
if (params.args.create) params.args.create = traverse(params.args.create, val => JSON.stringify(val));
|
||||
if (params.args.data) params.args.data = traverse(params.args.data, val => JSON.stringify(val));
|
||||
if (params.args.update) params.args.update = traverse(params.args.update, val => JSON.stringify(val));
|
||||
let result = await next(params);
|
||||
if (result) result = traverse(result, val => JSON.parse(val));
|
||||
return result;
|
||||
} else {
|
||||
return await next(params);
|
||||
}
|
||||
};
|
Reference in New Issue
Block a user