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; }