artemx32

курлюк

Aug 7th, 2021
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const express    = require('express');
  2. const bodyParser = require('body-parser');
  3. const url        = require('url');
  4. const Jimp       = require('jimp');
  5. const fs         = require('fs');
  6. const path       = require('path');
  7. const crypto     = require('crypto');
  8.  
  9. const pip        = require('public-ip');
  10.  
  11. const port       = 11111;
  12. const password   = 'wC2Gs@cHG_artybyte_gBLcW7@d$s^';
  13.  
  14. const FGBLACK = "\x1b[30m"
  15. const FGRED = "\x1b[31m"
  16. const FBGREEN = "\x1b[32m"
  17. const FGYELLOW = "\x1b[33m"
  18. const FGBLUE = "\x1b[34m"
  19. const FGMAGENTA = "\x1b[35m"
  20. const FGCYAN = "\x1b[36m"
  21. const FGWHITE = "\x1b[37m"
  22.  
  23. const BGBLACK = "\x1b[40m"
  24. const BGRED = "\x1b[41m"
  25. const BGGREEN = "\x1b[42m"
  26. const BGYELLOW = "\x1b[43m"
  27. const BGBLUE = "\x1b[44m"
  28. const BGMAGENTA = "\x1b[45m"
  29. const BGCYAN = "\x1b[46m"
  30. const BGWHITE = "\x1b[47m"
  31.  
  32. const EOL = '\x1b[0m';
  33.  
  34. var PUBLIC_IP  = "";
  35.  
  36. pip.v4().then(ip => {
  37.   PUBLIC_IP = ip;
  38. });
  39.  
  40. // Create a new instance of express
  41. const app = express();
  42.  
  43. const BaseDirectory = path.join(__dirname, 'public');
  44. const WorkDir = "public/repository/";
  45.  
  46. // Tell express to use the body-parser middleware and to not parse extended bodies
  47. app.use(bodyParser.urlencoded({ extended: true, limit: "50mb" }));
  48. app.use(express.static(BaseDirectory));
  49.  
  50. function GUD(sid){ // get user directory
  51.  
  52.     return crypto.createHash('md5').update(sid).digest('hex');
  53.  
  54. }
  55.  
  56. function validateClientFolder(sid, username){
  57.  
  58.     // var hash = crypto.createHash('md5').update(name).digest('hex');
  59.     var hash = GUD(sid);
  60.  
  61.     var dir = path.join(WorkDir, hash);
  62.  
  63.     if (!fs.existsSync(dir)) {
  64.  
  65.         fs.mkdirSync(dir);
  66.  
  67.     }
  68.  
  69.     let jsonFile = path.join(dir, 'manifest.json');
  70.  
  71.     if (!fs.existsSync(jsonFile)){
  72.  
  73.     var arr = new Array();
  74.     arr[0] = {};
  75.  
  76.     var pics = [];
  77.  
  78.     var p = path.join(WorkDir, GUD(sid));
  79.  
  80.     if (fs.existsSync(p)){
  81.  
  82.         fs.readdir(p, (err, files) => {
  83.  
  84.             files.forEach((file) => {
  85.  
  86.                 pics.push(file);
  87.                
  88.             });
  89.  
  90.         });
  91.  
  92.     }
  93.  
  94.     arr[0]['sid'] = sid;
  95.     arr[0]['username'] = username;
  96.     arr[0]['pictures'] = pics;
  97.  
  98.     var str = JSON.stringify(arr);
  99.  
  100.         fs.writeFile(jsonFile, str, (err) => {
  101.             console.log(err);
  102.         });
  103.  
  104.         // file not found
  105.  
  106.     } else {
  107.  
  108.         // do something if file found
  109.  
  110.     }
  111.  
  112. }
  113.  
  114. function performJSONData(sid, filename, description){
  115.  
  116.     var hash = GUD(sid);
  117.     var pah_ = path.join(hash, 'manifest.json');
  118.     var path_ = path.join(WorkDir, pah_);
  119.  
  120.     var file = '';
  121.  
  122.     if (fs.existsSync(path_)){
  123.  
  124.             fs.readFile(path_, 'utf8', function (err,data) {
  125.             if (err) {
  126.                 return console.log(err);
  127.             }
  128.             file = data;
  129.  
  130.             var data = JSON.parse(file);
  131.  
  132.             let pth = path.join(WorkDir, hash);
  133.             let date_ob = new Date();
  134.  
  135.             let date = ("0" + date_ob.getDate()).slice(-2);
  136.             let month = ("0" + (date_ob.getMonth() + 1)).slice(-2);
  137.             let year = date_ob.getFullYear();
  138.  
  139.             let hours = date_ob.getHours();
  140.             let minutes = date_ob.getMinutes();
  141.             let seconds = date_ob.getSeconds();
  142.  
  143.             let arr = new Array();
  144.             arr[0] = {};
  145.  
  146.             arr[0]['filename'] = filename;
  147.             arr[0]['creation_date'] = ( date + "." + month + "." + year + "-"+hours+":"+minutes+":"+seconds );
  148.             arr[0]['description'] = description;
  149.  
  150.             //data['pictures'].push(arr);
  151.  
  152.             data[0]['pictures'].push(arr);
  153.  
  154.             let convert = JSON.stringify(data);
  155.  
  156.             fs.writeFile(path_, convert, (err) => {
  157.                 console.log(err);
  158.             });
  159.  
  160.         });
  161.  
  162.     }
  163.  
  164. }
  165.  
  166. // todo: fix crash after updatePicturesInJSON
  167.  
  168. function generateLink(){
  169.  
  170.     return "http://" + PUBLIC_IP + ":" + port;
  171.  
  172. }
  173.  
  174. function generateImage(raw_json, w, h, res, sid, username, descr){
  175.  
  176.     validateClientFolder(sid, username);
  177.  
  178.     var imageData = JSON.parse(raw_json);
  179.  
  180.     var width = Number.parseInt(w);
  181.     var height = Number.parseInt(h);
  182.  
  183.     var count = 0;
  184.  
  185.     var p = path.join(WorkDir, GUD(sid));
  186.  
  187.     fs.readdir(p, (err, f) => {
  188.        
  189.         let files = f.filter(file => {
  190.             return path.extname(file).toLowerCase() === '.png';
  191.         });
  192.  
  193.         count = files.length;
  194.         count = count + 1;
  195.  
  196.         var filename = 'screenshot'+count+'.png';
  197.  
  198.         let image = new Jimp(width, height, function (err, image) {
  199.             if (err) throw err;
  200.  
  201.             imageData.forEach((row, y) => {
  202.                 row.forEach((color, x) => {
  203.                     image.setPixelColor(Number.parseInt(color), Number.parseInt(y), Number.parseInt(x));
  204.                 });
  205.             });
  206.  
  207.             image.write(p+'/'+filename, (err) => {
  208.                 if (err) throw err;
  209.             });
  210.            
  211.             //res.download(__dirname + "/img/" + filename, filename);
  212.  
  213.         });
  214.  
  215.         console.log('successfully created image');
  216.  
  217.         var URL = generateLink() + "/getimage?key=" + password + "&name=" + filename + "&sid=" + sid;
  218.        
  219.         res.send(URL);
  220.  
  221.         performJSONData(sid, filename, descr);
  222.  
  223.     });
  224.  
  225. }
  226.  
  227. app.get('/getimage', (req, res) => {
  228.  
  229.     console.log(FGRED, 'GET /getimage', FGCYAN, "IP: ", FGRED, req.ip, EOL)
  230.  
  231.     const data = url.parse(req.url,true).query;
  232.  
  233.     var key = data['key'];
  234.     if (key == null) {
  235.         key = '';
  236.     }
  237.  
  238.     if (key.localeCompare(password) != 0){
  239.  
  240.         res.status(404).end('<h1>Access denied</h1>');
  241.  
  242.     } else {
  243.  
  244.         var name = data['name'];
  245.         var sid = data['sid'];
  246.  
  247.         if (name != null & sid != null) {
  248.  
  249.             var p = path.join(WorkDir, GUD(sid));
  250.  
  251.             fs.readdir(p, (err, files) => {
  252.  
  253.                 var cfile = "";
  254.  
  255.                 files.forEach((file) => {
  256.  
  257.                     if ( name.localeCompare(file) == 0 ) {
  258.  
  259.                         cfile = file;
  260.  
  261.                     }
  262.  
  263.                 });
  264.  
  265.                 if (cfile != ""){
  266.  
  267.                     let p1 = path.join(WorkDir, GUD(sid));
  268.                     let p = path.join(p1, cfile);
  269.  
  270.                     res.sendFile(p, {root: __dirname});
  271.  
  272.                 } else {
  273.                    
  274.                     res.status(404).end('<h1>Access denied</h1>');
  275.  
  276.                 }
  277.  
  278.             });
  279.  
  280.         } else {
  281.  
  282.             res.status(404).end('<h1>Access denied</h1>');
  283.  
  284.         }
  285.  
  286.     }
  287.  
  288.   //res.sendFile(path.join(__dirname, 'img/screenshot1.png'));
  289. });
  290.  
  291. app.get('/poolgallery', function(req, res) {
  292.  
  293.     var data = [];
  294.  
  295.     fs.readdirSync(WorkDir, (err, files) => {
  296.  
  297.         // here we have a user directories (hash-named)
  298.  
  299.         console.log('a: ' + files.length);
  300.  
  301.         files.forEach((personal_dir) => {
  302.  
  303.             console.log('a: ' + personal_dir);
  304.  
  305.             let manifest = '';
  306.  
  307.             fs.readFileSync(path.join(WorkDir, personal_dir) + '/manifest.json', 'utf8', (err,d) => {
  308.                 if (err) {
  309.                     return console.log(err);
  310.                 }
  311.                 manifest = d;
  312.  
  313.                 let parsed_manifest = JSON.parse(manifest);
  314.  
  315.                 let pics = [];
  316.  
  317.                 parsed_manifest[0]['pictures'].forEach((pic) => {
  318.  
  319.                     let p = pic;
  320.  
  321.                     p['url'] = generateLink() + '/repository/' + personal_dir + '/'+pic[0]['filename'];
  322.  
  323.                     pics.push(p);
  324.  
  325.                 });
  326.  
  327.                 let user_arr = [{
  328.                     username: m[0]['username'],
  329.                     steamid: m[0]['sid'],
  330.                     pictures: pics
  331.                 }]
  332.  
  333.                 console.log(user_arr);
  334.  
  335.                 res.end('+joj');
  336.  
  337.             });
  338.  
  339.         });
  340.  
  341.     });
  342.  
  343. });
  344.  
  345. // Route that receives a POST request to /sms
  346. app.post('/saveimage', function (req, res) {
  347.  
  348.     console.log(FBGREEN, BGYELLOW, 'Request IP: ' + req.ip, EOL)
  349.     console.log(FGRED, 'POST /saveimage', FGCYAN, "IP: ", FGRED, req.ip, EOL)
  350.  
  351.     const body = req.body.Body
  352.  
  353.     let key = req.body['key'];
  354.  
  355.     if ( key.localeCompare(password) == 0 ) {
  356.        
  357.         var pixeldata = req.body['pixeldata']
  358.         var w_        = req.body['width']
  359.         var h_        = req.body['height']
  360.         var sid       = req.body['sid']
  361.         var username  = req.body['username']
  362.         var descr     = req.body['description']
  363.  
  364.         if ( pixeldata == null | w_ == null | h_ == null | sid == null | username == null | descr == null ) {
  365.  
  366.             res.status(404).end('<h1>Wrong ray</h1>');
  367.  
  368.         } else {
  369.  
  370.             console.log(FGMAGENTA, descr, EOL);
  371.  
  372.             var binaryData = Buffer.from(pixeldata, "base64");
  373.             var decJson = binaryData.toString("utf8");
  374.  
  375.             //checkDataFile(sid, username);
  376.             generateImage(decJson, w_, h_, res, sid, username, descr);
  377.  
  378.         }
  379.  
  380.     } else {
  381.  
  382.         res.status(404).end('<h1>Access denied</h1>');
  383.  
  384.     }
  385.  
  386. });
  387.  
  388. // Tell our app to listen on port 3000
  389. app.listen(port, function (err) {
  390.     if (err) {
  391.         throw err
  392.     }
  393.  
  394.     console.log(FGCYAN, BGMAGENTA, 'Server started on port: ' + port, EOL)
  395. });
  396.  
  397. process.on('uncaughtException', function (err) {
  398.   console.error(err);
  399.   console.log(FGRED, BGWHITE, "Node NOT Exiting...", EOL);
  400. });
Add Comment
Please, Sign In to add comment