diff --git a/index.js b/index.js index 7020b2a..3c3c42e 100644 --- a/index.js +++ b/index.js @@ -1,90 +1,90 @@ -const express = require('express'); -const axios = require('axios'); -const path = require('path'); -const ejs = require('ejs'); -const app = express(); -const port = 8080; - -app.set('view engine', 'ejs'); -app.set('views', path.join(__dirname, 'views')); - -app.use(express.static(path.join(__dirname, 'public'))); - -app.get('/proxy', async (req, res) => { - const url = req.query.url; - const whitelisted_urls = [ - "https://api-cdn.rule34.xxx/", - "https://api-cdn-mp4.rule34.xxx/" - ]; - - try { - const isWhitelisted = whitelisted_urls.some((base) => url.startsWith(base)); - - if (!isWhitelisted) { - return res.status(403).send('URL is not allowed.'); - } - - const response = await axios.get(url, { responseType: 'arraybuffer' }); - - const contentType = response.headers['content-type']; - if (!contentType) { - return res.status(400).send('Invalid content type.'); - } - - console.log(`Proxied Content-Type: ${contentType}`); - - res.set('Content-Type', contentType); - res.send(response.data); - } catch (error) { - console.error('Error fetching media:', error.message); - res.status(500).send('Error fetching media.'); - } -}); - -app.get('/', (req, res) => { - res.render('index', { - searchTerm: '', - }); -}); - -app.get('/donate', (req, res) => { - res.render('donate', { - searchTerm: '', - }); -}); - -app.get('/monero', (req, res) => { - res.status(200).send('86kNVqWXqTvAYnW97rPCLkGJL1pLyZZAreGa4NgMesEjggvBXso7JQ5TxWVdmu6FgA9zhKk2gvPEwRE2myZwQD4hANE7Pbw') //Please dont change that <3 -}); - -app.get('/posts', async (req, res) => { - const search = req.query.search || ''; - const page = parseInt(req.query.page) || 1; - const limit = 10; - const offset = (page - 1) * limit; - - try { - const apiUrl = search - ? `https://api.rule34.xxx/index.php?page=dapi&s=post&q=index&json=1&tags=${encodeURIComponent(search)}&limit=${limit}&pid=${page - 1}` - : `https://api.rule34.xxx/index.php?page=dapi&s=post&q=index&json=1&limit=${limit}&pid=${page - 1}`; - - const response = await axios.get(apiUrl, { - headers: { 'User-Agent': 'Mozilla/5.0' }, - }); - - const posts = response.data || []; - - res.render('posts', { - posts, - search, - page, - }); - } catch (error) { - console.error('Error fetching posts:', error.message); - res.status(500).send('Error fetching posts. Please try again later.'); - } -}); - -app.listen(port, () => { - console.log(`Server running at http://localhost:${port}`); -}); +const express = require('express'); +const axios = require('axios'); +const path = require('path'); +const ejs = require('ejs'); +const app = express(); +const port = 8080; + +app.set('view engine', 'ejs'); +app.set('views', path.join(__dirname, 'views')); + +app.use(express.static(path.join(__dirname, 'public'))); + +app.get('/proxy', async (req, res) => { + const url = req.query.url; + const whitelisted_urls = [ + "https://api-cdn.rule34.xxx/", + "https://api-cdn-mp4.rule34.xxx/" + ]; + + try { + const isWhitelisted = whitelisted_urls.some((base) => url.startsWith(base)); + + if (!isWhitelisted) { + return res.status(403).send('URL is not allowed.'); + } + + const response = await axios.get(url, { responseType: 'arraybuffer' }); + + const contentType = response.headers['content-type']; + if (!contentType) { + return res.status(400).send('Invalid content type.'); + } + + console.log(`Proxied Content-Type: ${contentType}`); //Forgot to remove it but ima left it for debugging purposes. + + res.set('Content-Type', contentType); + res.send(response.data); + } catch (error) { + console.error('Error fetching media:', error.message); + res.status(500).send('Error fetching media.'); + } +}); + +app.get('/', (req, res) => { + res.render('index', { + searchTerm: '', + }); +}); + +app.get('/donate', (req, res) => { + res.render('donate', { + searchTerm: '', + }); +}); + +app.get('/monero', (req, res) => { + res.status(200).send('86kNVqWXqTvAYnW97rPCLkGJL1pLyZZAreGa4NgMesEjggvBXso7JQ5TxWVdmu6FgA9zhKk2gvPEwRE2myZwQD4hANE7Pbw') //Please dont change that <3 +}); + +app.get('/posts', async (req, res) => { + const search = req.query.search || ''; + const page = parseInt(req.query.page) || 1; + const limit = 10; + const offset = (page - 1) * limit; + + try { + const apiUrl = search + ? `https://api.rule34.xxx/index.php?page=dapi&s=post&q=index&json=1&tags=${encodeURIComponent(search)}&limit=${limit}&pid=${page - 1}` + : `https://api.rule34.xxx/index.php?page=dapi&s=post&q=index&json=1&limit=${limit}&pid=${page - 1}`; + + const response = await axios.get(apiUrl, { + headers: { 'User-Agent': 'Mozilla/5.0' }, + }); + + const posts = response.data || []; + + res.render('posts', { + posts, + search, + page, + }); + } catch (error) { + console.error('Error fetching posts:', error.message); + res.status(500).send('Error fetching posts. Please try again later.'); + } +}); + +app.listen(port, () => { + console.log(`Server running at http://localhost:${port}`); +});