catproxy
Version:
a node proxy or host change tools
278 lines (242 loc) • 7.31 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.remoteUpdateRule = exports.saveConfig = exports.getConDetail = 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');
var _sendMsg = require('./sendMsg');
var _cacheFile = require('../monitor/cacheFile');
var _dataHelper = require('../dataHelper');
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.cacheFlush === 'undefined') {
data.result.cacheFlush = false;
}
if (data.result.disCache === 'undefined') {
data.result.disCache = true;
}
if (!data.result.hosts) {
data.result.hosts = [];
}
return data;
} catch (e) {
return error();
}
};
var updateRule = function updateRule(rules, ws) {
try {
rule.saveRules(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 cacheFlush = function cacheFlush(status, ws) {
try {
config.set('cacheFlush', status);
config.save('cacheFlush');
return success('更新配置成功');
} catch (e) {
_log2.default.error(e);
return error('更新配置失败');
}
};
var monitor = function monitor(_monitor, ws) {
try {
config.setRecursive('monitor', _monitor);
config.save('monitor');
return success('更新配置成功');
} catch (e) {
_log2.default.error(e);
return error('更新配置失败');
}
};
var getConDetail = exports.getConDetail = function getConDetail() {
var msg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : { param: {} };
var ws = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var _msg$param = msg.param,
id = _msg$param.id,
ext = _msg$param.ext,
contentType = _msg$param.contentType,
charset = _msg$param.charset,
formatCode = _msg$param.formatCode;
if (id) {
(0, _cacheFile.getCacheFile)(id).then(function (data) {
// 不是2进制数据就解码数据
return (0, _dataHelper.isBinary)(data) ? data : (0, _dataHelper.decodeData)(data, charset);
}).then(function (data) {
if (typeof data === 'string' && data) {
ext = (0, _dataHelper.updateExt)(ext, contentType, data);
}
return data;
}).then(function (data) {
if (typeof data === 'string' && formatCode) {
return (0, _dataHelper.betuifyCode)(data, ext);
}
data = data || '';
return data;
}).then(function (data) {
data = data || '';
(0, _sendMsg.sendConnDetail)({
id: id,
data: data,
ext: ext
});
}, function (data) {
data = data || '';
(0, _sendMsg.sendConnDetail)({
id: id,
data: data,
ext: ext
});
});
}
};
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,
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);
case 'cacheFlush':
return cacheFlush(!!param.status, ws);
case 'monitor':
return monitor(param, 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);
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();
});
};