TheBin/index.js

129 lines
4.7 KiB
JavaScript

const express = require('express');
const bodyParser = require('body-parser');
const crypto = require('crypto');
const app = express();
const fs = require('fs');
app.use(bodyParser.json());
app.set('view engine', 'ejs');
app.use(express.static('static'));
app.get('/', (req, res) => {
res.setHeader('X-Powered-By', 'got-hacked.rip magic software');
res.render('index.ejs');
});
app.post('/write', (req, res) => {
res.setHeader('X-Powered-By', 'got-hacked.rip magic software');
let filename = crypto.randomBytes(16).toString('hex');
let datainput = req.body;
if(datainput.text == undefined || datainput.text == "") return res.send('Error: Text is invalid').status(403);
if(fs.existsSync(__dirname+'/bin/'+filename+'.json')) {
console.log(`EYO WHAT THE HELL HAPPENED, WE JUST GOT THE MOST STUPID OCCURENCE EVER - RANDOMLY GENERATED ID OCCURS AGAIN ${Date.now()} ${filename}`);
res.send('WHAT? Internal error - randomly generated ID already exists? Try again.').status(500);
return;
}
if(typeof datainput.status != "boolean") {
res.status(500).render('error',{error:'STATUS IS NOT BOOLEAN'});
return;
}
// Encryption
let key = "";
let iv = [];
let text = datainput.text;
if(datainput.status == true) {
key = crypto.randomBytes(32);
iv = crypto.randomBytes(16);
let cipher = crypto.createCipheriv('aes-256-gcm', key, iv);
let updated = cipher.update(datainput.text);
text = updated.toJSON().data;
}
let data = {
name: datainput.name == undefined ? '' : datainput.name,
text: text,
status: datainput.status == undefined ? false : datainput.status
}
fs.writeFile(__dirname+'/bin/'+filename+'.json', JSON.stringify(data), (err) => {
if (err) {
console.log(err);
res.render('error',{error:'Major internal error has happened, error written in console.'}).status(500);
} else {
console.log(filename, key, iv);
res.send({filename: filename, key: key.toString('hex'), iv: iv.toString('hex')}).status(200);
}
});
});
app.get('/new', (req, res) => {
res.setHeader('X-Powered-By', 'got-hacked.rip magic software');
res.render('new.ejs');
});
app.get('/paste/:id', (req, res) => {
res.setHeader('X-Powered-By', 'got-hacked.rip magic software');
let fs = require('fs');
let filename = req.params.id;
if(!fs.existsSync(__dirname+'/bin/'+filename+'.json')) return res.status(404).render('error',{error:'Error: Paste not found'});
let data = JSON.parse(fs.readFileSync(__dirname+'/bin/'+filename+'.json', 'utf8'));
let text = data.text;
if(data.status == true) {
// We need to decrypt the paste and send it using the ?e= argument
if(req.query?.e == undefined || req.query?.iv == undefined) {
res.status(500).render('error',{error:"Error - tried to read encrypted paste without required arguments!"});
return;
}
let key = req.query.e;
let iv = req.query.iv;
// attempt to decrypt the paste using crypto
try {
let decipher = crypto.createDecipheriv('aes-256-gcm', Buffer.from(key, 'hex'), Buffer.from(iv, 'hex'));
let updated = decipher.update(Buffer.from(data.text));
text = updated;
} catch(e) {
res.status(500).render('error',{error:"An internal error occured, please read console if you are a system administrator! If you are just a regular user, DM me on Discord: ♫ The Red ♫#7227 you may also report the issue on my personal website feedback box (thered.sh)"});
console.log(e);
return;
}
}
res.render('paste.ejs', {
name: data.name,
text: text,
status: data.public ? "Public" : (data.status ? "Link Encryption Enabled" : "Link Encryption Disabled"),
id: filename
});
});
app.get('/admin', (req, res) => {
res.setHeader('X-Powered-By', 'got-hacked.rip magic software');
res.render('error',{error:"Page not complete yet. An average user is not meant to access this anyway, however, lol"});
});
app.get('/api', (req, res) => {
res.setHeader('X-Powered-By', 'got-hacked.rip magic software');
res.render('error',{error:"Unfortunately, there is no official API as of right now. This is planned to release soon, however."})
});
// app.get('/newdesign', (req, res) => {
// res.render('newdesign.ejs');
// });
app.get('*', (req, res) => {
res.setHeader('X-Powered-By', 'got-hacked.rip magic software');
res.status(404).render('error',{error:"The page you were trying to access couldn't be found, or some uncaught internal error has happened. However, this error is marked as a 404."})
});
app.listen(30180);