UNPKG

@luminati-io/luminati-proxy

Version:

A configurable local proxy for luminati.io

71 lines (68 loc) 2.55 kB
// LICENSE_CODE ZON ISC 'use strict'; /*jslint node:true, esnext:true, evil: true*/ const {write_http_reply} = require('./util.js'); const {SESSION_TERMINATED_BODY} = require('./consts.js'); const {res_util} = require('./util.js'); class Router { constructor(opt){ this.opt = opt; } is_bypass_proxy(req){ return req.ctx.is_bypass_proxy; } is_fake_request(req){ return !!req.headers['x-lpm-fake']; } send_null_response(req, res){ const status = req.method=='CONNECT' ? 501 : 200; write_http_reply(res, {statusCode: status, statusMessage: 'NULL'}, {}, {debug: this.opt.debug}); res.end(); req.ctx.response.status_code = status; req.ctx.response.status_message = 'NULL'; return req.ctx.response; } send_cached(req, res, cached){ const {res_data, headers} = cached; write_http_reply(res, {statusCode: 200, statusMessage: 'OK'}, headers, {debug: this.opt.debug}); for (let i=0; i<res_data.length; i++) res.write(res_data[i]); res.end(); const har_limit = res_util.is_image({headers}) ? -1 : this.opt.har_limit; req.ctx.response.status_code = 200; req.ctx.response.status_message = 'OK'; req.ctx.response.headers = headers; req.ctx.response.body_size = 0; for (let i=0; i<res_data.length; i++) { if (req.ctx.response.body_size>=har_limit) break; const l = har_limit-req.ctx.response.body_size; req.ctx.response.body.push(res_data[i].slice(0, l)); req.ctx.response.body_size += l; } return req.ctx.response; } send_internal_redirection(req, res){ const _url = encodeURIComponent(req.ctx.response.request.url_full); const headers = { 'content-type': 'text/html', 'content-length': SESSION_TERMINATED_BODY.length, 'x-lpm-redirect': _url, }; if (this.opt.debug=='full') headers['x-lpm-port'] = this.opt.port; write_http_reply(res, { statusCode: 400, statusMessage: 'Session terminated', }, headers, {debug: this.opt.debug}); res.write(SESSION_TERMINATED_BODY, ()=>{ res.end(); }); req.ctx.response.status_code = 400; req.ctx.response.status_message = 'Session terminated'; req.ctx.response.headers = headers; return req.ctx.response; } } module.exports = Router;