From 4063ccd706bcf3736344976205fe53e0bedd1622 Mon Sep 17 00:00:00 2001 From: Flummi Date: Mon, 15 Aug 2016 09:18:09 +0200 Subject: [PATCH] Repostcheck via Checksum --- src/main.js | 57 ++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 45 insertions(+), 12 deletions(-) diff --git a/src/main.js b/src/main.js index 9252b8f..be54df8 100644 --- a/src/main.js +++ b/src/main.js @@ -5,6 +5,7 @@ var https = require('https'); var mysql = require('mysql'); var bot = require('coffea')(); var uuid = require('uuid'); +var crypto = require('crypto'); const path = require('path'); var sql; @@ -48,18 +49,29 @@ bot.on('message', (e) => { dl(entry, "./b/"+tmpdest, (cb) => { // download item if(cb.status === true) { var tmpuser = getUser(e.user.getNick(), e.network); - sql.query("insert into `f0ck`.`items` (`src`,`dest`,`username`,`userchannel`,`usernetwork`,`stamp`,`active`) values (?,?,?,?,?,?,?)", [ - entry, - "./b/"+tmpdest+"."+cb.infos.ext, - tmpuser['nick'], - e.channel.getName(), - e.network, - Math.floor(new Date() / 1000), - 0 - ]).on('result', (result) => { - e.reply("https://f0ck.me/"+result.insertId+" - "+path.parse(entry).base+" ("+cb.infos.mime+", ~"+formatSize(cb.infos.size)+") from "+tmpuser['nick']+" ("+tmpuser['username']+"@"+tmpuser['hostname']+")"); - }).on('error', (msg) => { - e.reply(msg); + getCheckSum("./b/"+tmpdest+"."+cb.infos.ext, (cbcs) => { + checkRepostCheckSum(cbcs, (cbcrcs) => { + if(cbcrcs) { + sql.query("insert into `f0ck`.`items` (`src`,`dest`,`mime`,`size`,`checksum`,`username`,`userchannel`,`usernetwork`,`stamp`,`active`) values (?,?,?,?,?,?,?,?,?,?)", [ + entry, + "./b/"+tmpdest+"."+cb.infos.ext, + cb.infos.mime, + cb.infos.size, + cbcs, + tmpuser['nick'], + e.channel.getName(), + e.network, + Math.floor(new Date() / 1000), + 0 + ]).on('result', (result) => { + e.reply("https://f0ck.me/"+result.insertId+" - "+path.parse(entry).base+" ("+cb.infos.mime+", ~"+formatSize(cb.infos.size)+") from "+tmpuser['nick']+" ("+tmpuser['username']+"@"+tmpuser['hostname']+")"); + }).on('error', (msg) => { + e.reply(msg); + }); + } + else + e.reply("repost motherf0cker"); + }); }); } else @@ -80,6 +92,11 @@ bot.on('message', (e) => { e.reply(msg); }); } + else if(orig.match(/^\.hash/) && e.channel.getName() == "#f0ck") { + getCheckSum('./b/1fbd8b80.png', (cbcs) => { + e.reply(cbcs); + }); + } }); var getUser = (u, n) => { @@ -127,12 +144,28 @@ var checkRepost = (url, cbcr) => { cbcr((rows[0].count == 0)?true:false); }); }; +var checkRepostCheckSum = (cs, cbcrcs) => { + sql.query("select count(*) as count from `f0ck`.`items` where `checksum` = ?", cs, (err, rows, fields) => { + cbcrcs((rows[0].count == 0)?true:false); + }); +}; var formatSize = (size) => { var i = Math.floor(Math.log(size) / Math.log(1024)); return (size / Math.pow(1024, i)).toFixed(2) * 1 + ' ' + ['B', 'kB', 'MB', 'GB', 'TB'][i]; }; +var getCheckSum = (file, cbcs) => { + var sha256sum = crypto.createHash('sha256'); + var s = fs.ReadStream(file); + s.on('data', (d) => { + sha256sum.update(d); + }); + s.on('end', () => { + var generated_hash = sha256sum.digest('hex'); + cbcs(generated_hash); + }); +}; // Webserver