cky-image-public
Version:
public image to public host
93 lines (82 loc) • 2.59 kB
JavaScript
const fs = require("fs");
const cheerio = require('cheerio');
const async = require('async');
const _ = require('lodash');
const request = require('request').defaults({
headers: {
// 'upgrade-insecure-requests': 1,
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'
},
jar: true
})
let helper = require('../helper');
class Imgeto {
constructor (options = {}) {
this.cookie = request.jar();
}
upload (imgPath, callback) {
async.waterfall([
(next) => {
request({
url: 'https://imge.to/',
method: 'GET',
jar: this.cookie
}, (err, response, body) => {
if (err) return next('EGETHOMEPAGE', err);
let $ = cheerio.load(body);
let scripts = $('script');
let _find = null;
_.forEach(scripts, (s) => {
let content = $(s).html();
if (content && content.indexOf('token') > -1) {
_find = s;
return false;
}
});
if (!_find) return next('EPARSETOKEN');
let token = $(_find).html();
token = token.substr(token.indexOf('token'));
token = token.substr(0, token.indexOf(';'))
console.log('token=', token);
token = token.substr(token.indexOf('"')+1, token.lastIndexOf('"')-1);
token = token.replace(/\"/g, '');
console.log('token=', token);
return next(null, token);
});
},
(auth_token, next) => {
request({
url: 'https://imge.to/json',
method: 'POST',
headers: {
origin: 'https://imge.to',
'accept-language': 'en-US,en;q=0.9,vi;q=0.8',
'content-type': 'multipart/form-data',
accept: 'application/json',
referer: 'https://imge.to',
authority: 'imge.to'
},
jar: this.cookie,
formData: {
source: {
value: fs.createReadStream(imgPath),
options: {
filename: imgPath,
contentType: 'image/jpeg'
}
},
type: 'file',
action: 'upload',
timestamp: new Date().getTime(),
auth_token
}
}, (err, response, body) => {
if (err) return next('EUPLOAD', err);
body = helper.safeParse(body);
return next(null, body);
});
}
], callback);
}
}
module.exports = Imgeto;