UNPKG

catproxy

Version:

a node proxy or host change tools

208 lines (177 loc) 5.36 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.remoteUpdateRule = exports.saveConfig = exports.fetchConfig = exports.success = exports.error = undefined; var _status = require('./status'); var status = _interopRequireWildcard(_status); var _log = require('../log'); var _log2 = _interopRequireDefault(_log); var _config = require('../config/config'); var config = _interopRequireWildcard(_config); var _rule = require('../config/rule'); var rule = _interopRequireWildcard(_rule); var _sendType = require('./sendType'); var sendType = _interopRequireWildcard(_sendType); var _url = require('url'); var _url2 = _interopRequireDefault(_url); var _http = require('http'); var _http2 = _interopRequireDefault(_http); var _https = require('https'); var _https2 = _interopRequireDefault(_https); var _promise = require('promise'); var _promise2 = _interopRequireDefault(_promise); var _buffer = require('buffer'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } /* * * 所有接受到得消息是一个Object * * data:{ * path: "数据访问路径,相同type下的不同逻辑处理可以用不同的path", * param: "相同type下相同的path,不同的参数可以通过这个处理" * } * * * 所有发出的消息是一个Object * * data:{ * //当前请求的状态,如果不是100表示出现错误了 * status: 100, * result: {'当前返回的数据'} * } * */ var error = exports.error = function error(msg) { msg = msg || "出现系统异常,请稍后再试"; var data = { status: status.ERROR, result: msg }; _log2.default.error(msg); return data; }; var success = exports.success = function success(msg) { msg = msg || "成功"; var data = { status: status.SUCC, result: msg }; return data; }; /** * 请求数据,返回所有的数据 * @return {[object]} [请求到得 config数据] */ var fetchConfig = exports.fetchConfig = function fetchConfig() { var data = { status: status.SUCC }; try { data.result = config.get(); if (!data.result.hosts) { data.result.hosts = []; } return data; } catch (e) { return error(); } }; var updateRule = function updateRule(rules, ws) { try { rule.saveRules(rules); // ws.broadcast.emit(sendType.updateRule, { // status: status.SUCC, // result: { // hosts: rules // } // }); return success('更新规则成功'); } catch (e) { _log2.default.error(e); return error('更新规则失败'); } }; var disCache = function disCache(status, ws) { try { config.set('disCache', status); config.save('disCache'); return success('更新配置成功'); } catch (e) { _log2.default.error(e); return error('更新配置失败'); } }; var saveConfig = exports.saveConfig = function saveConfig() { var msg = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; var ws = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; var path = msg.path; var param = msg.param; if (path) { switch (msg.path) { case "rule": if (param && param.rules) { return updateRule(param.rules, ws); } else { return error('更新规则必须有rules属性'); } case 'disCache': return disCache(!!param.status, ws); default: return error('未知的保存数据'); } } else { return error('未知的保存数据'); } }; // 通过远程地址更新文档 var remoteUpdateRule = exports.remoteUpdateRule = function remoteUpdateRule() { var msg = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; var ws = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; var visUrl = msg.param.url; return new _promise2.default(function (resolve, reject) { config.set('remoteRuleUrl', visUrl); visUrl = _url2.default.parse(visUrl); var req = (visUrl.protocol === 'http:' ? _http2.default : _https2.default).request({ hostname: visUrl.hostname, port: visUrl.port ? visUrl.port : visUrl.protocol === 'http:' ? 80 : 443, path: visUrl.path, method: 'GET', headers: {} }, function (res) { if (+res.statusCode !== 200) { return reject(error('服务器获取数据错误')); } res.setEncoding('utf8'); var data = []; res.on('data', function (chunk) { data.push(chunk); }); res.on('end', function () { var isBuffer = _buffer.Buffer.isBuffer(data[0]); var result = isBuffer ? _buffer.Buffer.concat(data) : data.join(''); try { result = JSON.parse(result); if (!(0, _rule.checkHosts)(result)) { return reject(error('数据格式错误')); } config.set("hosts", result); config.save(["hosts", "remoteRuleUrl"]); return resolve(success({ data: result, msg: "更新数据成功" })); } catch (e) { _log2.default.error(e.message); return reject(error('数据格式错误')); } }); }); req.on('error', function (e) { _log2.default.error(e.message); reject(error(e.message)); }); req.end(); }); };