catproxy
Version:
a node proxy or host change tools
208 lines (177 loc) • 5.36 kB
JavaScript
;
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();
});
};