Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env node
- var createHmac = require('crypto').createHmac;
- var fs = require('fs');
- var https = require('https');
- var http = require('http');
- var path = require('path');
- var stringify = require('querystring').stringify;
- var url = require('url');
- var USER_AGENT = 'Monazilla/1.00 (JaneStyle/3.81)';
- var APP_KEY = 'aqMBM5paukkx5FOVcSfisMTMj8I4Dm';
- var HM_KEY = 'CPGjWLXxFojVtO7tiu3Lrwm1yLqtk1';
- var PORT = 8088;
- var sessionFile = path.join(__dirname, 'session.txt');
- var sessionExpire = 24 * 60 * 60 * 1000;
- var headerList = [
- 'accept-encoding',
- 'if-modified-since',
- 'range'
- ];
- var _sid;
- function authenticate() {
- var ct = '1234567890';
- var message = APP_KEY + ct;
- var hb = createHmac('sha256', HM_KEY).update(message).digest('hex');
- var data = { ID: '', PW: '', KY: APP_KEY, CT: ct, HB: hb };
- var headers = {
- 'User-Agent': 'Monazilla/1.3',
- 'X-2ch-UA': 'JaneStyle/3.81',
- 'Content-Type': 'application/x-www-form-urlencoded'
- };
- var options = {
- 'method': 'POST',
- 'hostname': 'api.2ch.net',
- 'path': '/v1/auth/',
- 'headers': headers
- };
- https.request(options, function(response) {
- console.log('POST %s - %s', options.path, response.statusCode);
- var writeStream = fs.createWriteStream(sessionFile);
- writeStream.on('close', readSessionFile);
- response.pipe(writeStream);
- }).end(stringify(data));
- }
- function readSessionFile() {
- fs.readFile(sessionFile, { encoding: 'utf8' }, function(err, data) {
- _sid = data.split(':')[1];
- });
- }
- fs.stat(sessionFile, function(err, stat) {
- if (!err && stat && stat.mtime > new Date() - sessionExpire) {
- readSessionFile();
- } else {
- authenticate();
- }
- });
- var proxy = http.createServer(function(req, res) {
- var o = url.parse(req.url);
- if (o.href.match(/http:\/\/(\w+)\.2ch\.net\/(\w+)\/dat\/(\d+)\.dat/)) {
- var server = RegExp.$1;
- var board = RegExp.$2;
- var threadID = RegExp.$3;
- var message = '/v1/' + server + '/' + board + '/' + threadID;
- message += _sid + APP_KEY;
- var hobo = createHmac('sha256', HM_KEY).update(message).digest('hex');
- var data = { sid: _sid, hobo: hobo, appkey: APP_KEY };
- var headers = {
- 'User-Agent': USER_AGENT,
- 'Content-Type': 'application/x-www-form-urlencoded'
- };
- headerList.forEach(function(key) {
- if (key in req.headers) headers[key] = req.headers[key];
- });
- var options = {
- 'method': 'POST',
- 'hostname': 'api.2ch.net',
- 'path': '/v1/' + server + '/' + board + '/' + threadID,
- 'headers': headers
- };
- return https.request(options, function(response) {
- console.log('POST %s - %s', options.path, response.statusCode);
- res.writeHead(response.statusCode, response.headers);
- response.pipe(res);
- }).end(stringify(data));
- }
- o.method = req.method;
- o.headers = req.headers;
- req.pipe(http.request(o, function(response) {
- res.writeHead(response.statusCode, response.headers);
- response.pipe(res);
- }));
- });
- proxy.on('clientError', function(err, sock) {
- console.log(err);
- sock.end();
- });
- proxy.listen(PORT, function() {
- console.log('proxy server is listening on port %d', proxy.address().port);
- });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement