This commit is contained in:
aozhiwei 2022-05-03 10:15:16 +08:00
parent a14422870f
commit 49d5a27ab3
14 changed files with 363 additions and 0 deletions

View File

@ -0,0 +1,14 @@
const app = require('j7/app');
const event = require('j7/event');
const config = require('j7/config');
event.addListener(event.APP_INITIALIZED_EVENT, () => {
require('./metamgr').init();
require('./middlewares/factory').init();
require('./controllers/factory').init();
require('./models/factory').init();
require('./services/factory').init();
app.injectionSession(require('./session'));
app.listen(config('listen_port'));
});
app.init();

View File

View File

@ -0,0 +1,17 @@
const controllers = {};
function add(name) {
controllers[name] = require('./' + name);
controllers[name].init();
}
function init() {
add('proxy');
}
function create(name) {
}
exports.init = init;
exports.create = create;

View File

@ -0,0 +1,41 @@
const https = require('https');
const app = require('j7/app');
const utils = require('j7/utils');
const http = require('j7/http');
const serviceFactory = require('../services/factory');
async function get(session) {
const seqId = session.request('seq_id');
const targetUrl = session.request('target_url');
const cbUrl = session.request('cb_url');
const reqJson = session.requestToJson();
new Promise(async (resolve) => {
const params = utils.jsonDecode(session.request('params'));
const {err, data} = await http.get(targetUrl, params);
const rspJson = {
'errcode': 0,
'errmsg': '',
'seq_id': seqId,
'req_json': reqJson,
'data': data
};
if (err) {
rspJson['errcode'] = 1;
rspJson['errmsg'] = '' + err;
}
console.log('data', data);
console.log('rspJson:' + utils.jsonEncode(rspJson));
await http.get(cbUrl, rspJson);
});
session.rspOk();
};
async function post(session) {
}
function init() {
app.registerHandler('Proxy', 'get', get);
app.registerHandler('Proxy', 'post', post);
}
exports.init = init;

View File

@ -0,0 +1,80 @@
const app = require('j7/app');
const utils = require('j7/utils');
const log = require('j7/log');
const metawrap = require('./metawrap');
const metaClasses = [];
const MT_CONFIG = 0;
function registerMetaClass(fileName, idx, primKey, wrapClass) {
metaClasses.push({
'fileName' : fileName,
'idx' : idx,
'primKey' : primKey,
'wrapClass': wrapClass,
'rawList' : [],
'rawHash' : {},
'wrapList' : [],
'wrapHash' : {},
});
}
function load() {
metaClasses.forEach(function (metaClass) {
const json = utils.readJsonFromFile(metaClass['fileName']);
if (!json) {
throw new Error('读取配置' + metaClass['fileName'] + '失败');
}
if (Array.isArray(json)) {
metaClass['rawList'] = json;
} else {
metaClass['rawList'].push(json);
}
let idx = 0;
metaClass['rawList'].forEach(function (item) {
const wrapOjb = new metawrap[metaClass['wrapClass']](item);
const wrapProxy = new Proxy(wrapOjb, wrapOjb._getHandler());
metaClass['wrapList'] = wrapProxy;
if (metaClass['primKey'] == '') {
metaClass['rawHash'][idx] = item;
metaClass['wrapHash'][idx] = wrapProxy;
} else {
metaClass['rawHash'][item[metaClass['primKey']]] = item;
metaClass['wrapHash'][item[metaClass['primKey']]] = wrapProxy;
}
++idx;
});
//log.debug(utils.jsonEncode(metaClass));
});
}
function init() {
let configDir = './config/';
if (utils.isOnlineEnv()) {
configDir = '../config/';
}
registerMetaClass(configDir + 'config.json',
MT_CONFIG,
'',
'Config'
);
load();
}
function getMetaClass(metaIdx) {
return metaIdx >= 0 && metaIdx < metaClasses.length ? metaClasses[metaIdx] : null;
}
function getMetaByKey(metaIdx, key) {
const metaClass = getMetaClass(metaIdx);
return metaClass && key in metaClass['wrapHash'] ? metaClass['wrapHash'][key] : null;
}
function getMetaList(metaIdx) {
const metaClass = getMetaClass(metaIdx);
return metaClass ? metaClass['rawList'] : null;
}
exports.init = init;

View File

@ -0,0 +1,44 @@
const utils = require('j7/utils');
class BaseWrap {
constructor(json) {
this._json = json;
}
_getHandler() {
return {
get: (obj, prop) => {
if (prop in obj._json) {
let val = obj._json[prop];
if (utils.isArray(val)) {
return new Proxy(val, {
set: () => {
console.log(33333);
}
});
} else if (utils.isObject(val)) {
return new Proxy(val, {
set: () => {
console.log(33333);
}
});
} else {
return val;
}
}
return prop in obj ? obj[prop] : null;
},
set: () => {
console.log(111111);
}
};
}
}
class Config extends BaseWrap {
}
exports.Config = Config;

View File

@ -0,0 +1,10 @@
const app = require('j7/app');
async function authenticate(session) {
}
function init() {
app.addMiddleware('authenticate', authenticate);
}
exports.init = init;

View File

@ -0,0 +1,12 @@
const middlewares = {};
function add(name) {
middlewares[name] = require('./' + name);
middlewares[name].init();
}
function init() {
add('authenticate');
}
exports.init = init;

View File

@ -0,0 +1,5 @@
function init() {
}
exports.init = init;

43
server/httpgate/client/package-lock.json generated Normal file
View File

@ -0,0 +1,43 @@
{
"name": "httpproxy",
"version": "1.0.0",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "httpproxy",
"version": "1.0.0",
"dependencies": {
"j7": "file:../../third_party/j7"
}
},
"../../third_party/j7": {
"version": "1.0.0",
"dependencies": {
"axios": "^0.26.1",
"crc-32": "^1.2.1",
"express": "^4.17.2",
"mysql": "~2.18.1",
"querystring": "^0.2.1",
"urlencode": "^1.1.0"
}
},
"node_modules/j7": {
"resolved": "../../third_party/j7",
"link": true
}
},
"dependencies": {
"j7": {
"version": "file:../../third_party/j7",
"requires": {
"axios": "^0.26.1",
"crc-32": "^1.2.1",
"express": "^4.17.2",
"mysql": "~2.18.1",
"querystring": "^0.2.1",
"urlencode": "^1.1.0"
}
}
}
}

View File

@ -0,0 +1,10 @@
{
"name": "httpgate_cli",
"version": "1.0.0",
"description": "",
"private": true,
"scripts": {},
"dependencies": {
"j7": "file:../../third_party/j7"
}
}

View File

@ -0,0 +1,13 @@
class BaseService {
constructor(session) {
this.session = session;
}
getSession() {
return this.session;
}
}
module.exports = BaseService;

View File

@ -0,0 +1,24 @@
const channelDef = require('j7/channel')
const services = {};
function add(clsNames, modName) {
const modClass = require('./' + modName);
clsNames.forEach((clsName) => {
services[clsName] = {
'clsName': clsName,
'modName': modName,
'class': modClass
};
});
}
function init() {
}
function create(name, session) {
const module = services[name];
return new module['class'](session);
}
exports.init = init;
exports.create = create;

View File

@ -0,0 +1,50 @@
const utils = require('j7/utils');
const app = require('j7/app');
class Session {
constructor(req, rsp) {
this.req = req;
this.rsp = rsp;
this.nowTime = utils.getUtcTime();
}
getNowTime() {
return this.nowTime;
}
getNowDaySeconds() {
return this.getNowDaySeconds(this.getNowTime());
}
getDaySeconds(utcTime) {
}
rspErr(errCode, errMsg) {
utils.rspErr(this.rsp, errCode, errMsg);
}
rspOk() {
utils.rspOk(this.rsp);
}
rspData(data) {
utils.rspData(this.rsp, data);
}
dieErr(errCode, errMsg) {
this.rspErr(errCode, errMsg);
}
request(name, defVal = null) {
return name in this.req.query ? this.req.query[name] : defVal;
}
requestToJson() {
return utils.jsonEncode(this.req.query);
}
}
module.exports = Session;