@opengis/fastify-table
Version:
core-plugins
109 lines (97 loc) • 2.86 kB
JavaScript
import {
config, dataUpdate, logger, pgClients,
} from '../../../../utils.js';
const resp = { message: 'File not found', status: 404 };
/**
* Апі використовується для видалення файлів за допомогою fs або s3
*
* @method GET
* @summary Видалення файлів і оновлення логів в БД
* @priority 5
* @alias deleteFileAPI
* @type api
* @tag file
* @requires deleteFile
* @param {Object} params Параметри URL
* @param {String} params[0] Шлях до файла
* @errors 403,500
* @returns {Number} status Номер помилки
* @returns {String|Object} error Опис помилки
* @returns {Object} headers Заголовки HTTP
* @returns {String} message Повідомлення про успішне виконання або об'єкт з параметрами
*/
export default async function deleteFileAPI(req) {
const {
pg = pgClients.client, params = {}, user = {},
} = req;
if (!params['*']) {
return resp;
}
const filename = params['*'].startsWith('/') || /^[0-9]+$/.test(params['*']) ? params['*'] : `/${params['*']}`;
const { uid, user_rnokpp: rnokpp } = user;
if (!filename) {
logger.file('file', {
level: 'INFO',
type: 'delete',
message: 'No required param "filename"',
file: params['*'],
uid,
rnokpp,
});
return resp;
}
if (filename.includes('..')) {
logger.file('file', {
level: 'WARN',
type: 'delete',
message: 'injection attempt',
file: params['*'],
uid,
rnokpp,
});
return resp;
}
try {
const result = await pg.query('select file_id, file_path as fpath, uid from crm.files where $1 in (file_path, file_id)', [filename])
.then((res1) => res1.rows?.[0] || {});
const res = await dataUpdate({
pg,
table: 'crm.files',
id: result?.file_id,
data: { file_status: 3 },
uid,
});
if (!res) {
logger.file('file', {
level: 'INFO',
type: 'delete',
message: resp.message,
file: params['*'],
uid,
rnokpp,
});
return resp;
}
const message = { id: res.file_id, filepath: res.file_path };
logger.file('file', {
level: 'INFO',
type: 'delete',
message,
file: params['*'],
uid,
rnokpp,
});
return { message, status: 200 };
}
catch (err) {
logger.file('file', {
level: 'ERROR',
type: 'delete',
message: err.toString(),
file: params['*'],
uid,
rnokpp,
});
return { error: config?.local ? err.toString() : 'Помилка видалення файлу', status: 500 };
}
}