backup + decriptare toate fisiere done
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
const express = require('express');
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const Joi = require('joi');
|
||||
const fetch = require('node-fetch');
|
||||
const { httpStatus } = require('../helpers/http_status');
|
||||
|
||||
const app = express();
|
||||
app.use(express.json());
|
||||
|
||||
const filePathSchema = Joi.object({
|
||||
filePath: Joi.string().required()
|
||||
});
|
||||
|
||||
async function getBaseDirectory() {
|
||||
const filePath = path.join(__dirname, '..', 'dirBackup.json');
|
||||
try {
|
||||
const data = await fs.promises.readFile(filePath, 'utf8');
|
||||
const jsonData = JSON.parse(data);
|
||||
return jsonData.path;
|
||||
} catch (error) {
|
||||
console.error('Error reading the base directory:', error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
app.post('/file_path', async (req, res) => {
|
||||
const { error, value } = filePathSchema.validate(req.body);
|
||||
if (error) {
|
||||
return res.status(httpStatus.BAD_REQUEST).json({
|
||||
message: 'Invalid input',
|
||||
data: error.details
|
||||
});
|
||||
}
|
||||
|
||||
try {
|
||||
const basePath = await getBaseDirectory();
|
||||
let { filePath } = value;
|
||||
const baseDirName = path.basename(basePath);
|
||||
if (filePath.startsWith(baseDirName + path.sep)) {
|
||||
filePath = filePath.slice(baseDirName.length + 1);
|
||||
}
|
||||
const fullPath = path.resolve(basePath, filePath);
|
||||
|
||||
fs.stat(fullPath, (err, stats) => {
|
||||
if (err) {
|
||||
if (err.code === 'ENOENT') {
|
||||
return res.status(httpStatus.NOT_FOUND).json({
|
||||
message: 'File not found'
|
||||
});
|
||||
}
|
||||
return res.status(httpStatus.INTERNAL_SERVER_ERROR).json({
|
||||
message: 'Error accessing the file'
|
||||
});
|
||||
}
|
||||
|
||||
if (!stats.isFile()) {
|
||||
return res.status(httpStatus.BAD_REQUEST).json({
|
||||
message: 'Path is not a file'
|
||||
});
|
||||
}
|
||||
|
||||
// Stream the file as binary data
|
||||
res.writeHead(httpStatus.OK, {
|
||||
'Content-Type': 'application/octet-stream',
|
||||
'Content-Disposition': `attachment; filename="${path.basename(fullPath)}"`
|
||||
});
|
||||
const fileStream = fs.createReadStream(fullPath);
|
||||
fileStream.pipe(res);
|
||||
});
|
||||
} catch (error) {
|
||||
return res.status(httpStatus.INTERNAL_SERVER_ERROR).json({
|
||||
message: 'Error processing request'
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
const PORT = process.env.PORT || 3000;
|
||||
app.listen(PORT, () => console.log(`Server running on port ${PORT}`));
|
||||
Reference in New Issue
Block a user