xerrus / index.js
mydapitt
port
0806a3e
Raw
History Blame Contribute Delete
3.61 kB
const express = require('express');
const multer = require('multer');
const AWS = require('aws-sdk');
const path = require('path');
const axios = require('axios');
const app = express();
const port = process.env.PORT || 7860 || 7861 || 8000 || 3000 || 8080 || 2022;
// Configure AWS R2
const r2 = new AWS.S3({
endpoint: 'https://90ea285cb6b03a79a36923f11a34c3a2.r2.cloudflarestorage.com',
accessKeyId: '769433fbf8d0d975144746b83eb2619e',
secretAccessKey: '1679293fecd820a92788bbc6825ff948117284e0a5bcdea025903f06bfc57716',
region: 'auto',
signatureVersion: 'v4',
});
// Use memory storage for multer
const upload = multer({ storage: multer.memoryStorage() });
// Function to upload buffer to R2
async function uploadToR2(buffer, filename) {
const params = {
Bucket: 'bookworm',
Key: `file/${filename}`, // Path in bucket
Body: buffer,
ACL: 'public-read',
};
return r2.upload(params).promise();
}
// Handle GET requests at /
app.get('/', (req, res) => {
res.sendFile(path.join(__dirname, 'index.html'), (err) => {
if (err) {
res.status(err.status).end();
}
});
});
// Handle GET requests at /upload
app.get('/upload', (req, res) => {
res.status(405).json({
status: false,
message: "Method not allowed. Please use POST to upload files."
});
});
// Handle POST requests at /upload
app.post('/upload', upload.single('file'), async (req, res) => {
if (!req.file) {
return res.status(400).json({ status: false, message: "No file uploaded" });
}
const encodedOriginalName = encodeURIComponent(req.file.originalname);
const filename = `v-${randomName(4)}-${encodedOriginalName}`;
try {
const r2Response = await uploadToR2(req.file.buffer, filename);
res.status(200).json({
status: true,
message: "File uploaded successfully",
result: {
size: req.file.size,
original_name: req.file.originalname,
mimetype: req.file.mimetype,
url: `https://file.curvee.eu.org/file/${filename}`,
}
});
} catch (error) {
console.error(error);
res.status(500).json({
status: false,
message: "Error uploading to R2",
error: error.message,
});
}
});
// Fetcher
app.get('/get', async (req, res) => {
const userAgent = req.get('User-Agent');
const { url } = req.query;
// Validasi parameter url
if (!url) {
return res.status(400).json({
status: 400,
message: "Please input parameter url!"
});
}
try {
// Ambil data dari URL menggunakan axios
const response = await axios.get(url, {
headers: {
"User-Agent": userAgent
}
});
// Kirimkan data hasil fetch
res.status(200).send(response.data);
} catch (e) {
// Tangani error jika ada
res.status(500).json({
status: 500,
message: "Error fetching the URL.",
error: e.message
});
console.log(e);
}
});
// Handle 404 and redirect to /
app.use((req, res) => {
res.redirect('/');
});
// Start server
app.listen(port, () => {
console.log(`App listening at http://localhost:${port}`);
});
// Function to generate random name
function randomName(length) {
let result = '';
const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
for (let i = 0; i < length; i++) {
result += characters.charAt(Math.floor(Math.random() * characters.length));
}
return result;
}