vesh
Version:
码农nodejs版本VESH框架,使用函数责任链模式 实现了 默认文件跳转,自定义错误页,空文件处理,URL解析,Querystring与Form参数解析,PostFiles解析,MVC自动映射,SQL自动服务化,可继承页面,静态文件,json,tjson,jsonp,tjsonp,string,void,xjson,xjosnp等等6种JSON格式,http与https等等操作
1,838 lines (1,543 loc) • 96.5 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.SessionDataAdapter = exports.NoStoreSessionSource = exports.NiSessionSource = exports.SecuritySessionSourceDecorator = exports.CookieSessionSource = exports.ConstSessionSource = exports.ASessionSource = exports.SessionDataManager = exports.SessionDataManagerFactory = exports.CreateID = exports.User = exports.SessionData = undefined;
var _regenerator = require("babel-runtime/regenerator");
var _regenerator2 = _interopRequireDefault(_regenerator);
var _asyncToGenerator2 = require("babel-runtime/helpers/asyncToGenerator");
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
var _getPrototypeOf = require("babel-runtime/core-js/object/get-prototype-of");
var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
var _possibleConstructorReturn2 = require("babel-runtime/helpers/possibleConstructorReturn");
var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
var _get2 = require("babel-runtime/helpers/get");
var _get3 = _interopRequireDefault(_get2);
var _inherits2 = require("babel-runtime/helpers/inherits");
var _inherits3 = _interopRequireDefault(_inherits2);
var _typeof2 = require("babel-runtime/helpers/typeof");
var _typeof3 = _interopRequireDefault(_typeof2);
var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck");
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = require("babel-runtime/helpers/createClass");
var _createClass3 = _interopRequireDefault(_createClass2);
var _gcl = require("gcl");
var _gcl2 = _interopRequireDefault(_gcl);
var _zlib = require("zlib");
var _zlib2 = _interopRequireDefault(_zlib);
var _config = require("gcl/com/coooders/io/config");
var _config2 = _interopRequireDefault(_config);
var _cookie = require("gcl/com/coooders/net/cookie");
var _cookie2 = _interopRequireDefault(_cookie);
var _mime = require("gcl/com/coooders/net/mime");
var _ni = require("gcl/com/coooders/db/ni");
var _ni2 = _interopRequireDefault(_ni);
var _querystring = require("querystring");
var _querystring2 = _interopRequireDefault(_querystring);
var _nodeXlsx = require("node-xlsx");
var _nodeXlsx2 = _interopRequireDefault(_nodeXlsx);
var _ws = require("ws");
var _ws2 = _interopRequireDefault(_ws);
var _tool = require("gcl/com/coooders/common/tool");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* session:VESH V层会话管理器删除会话信息
*/
var SessionData = exports.SessionData = function () {
function SessionData(id, name) {
(0, _classCallCheck3.default)(this, SessionData);
var _pri = pri(this, {
name: name,
idic: {},
isClear: false,
isClearCache: false,
id: id,
manager: null
}),
_ = _pri._,
__ = _pri.__;
}
(0, _createClass3.default)(SessionData, [{
key: "clear",
value: function clear() {
var _pri2 = pri(this),
_ = _pri2._,
__ = _pri2.__;
__.isClear = true;
__.idic = {};
}
}, {
key: "clearCache",
value: function clearCache() {
var _pri3 = pri(this),
_ = _pri3._,
__ = _pri3.__;
__.isClearCache = true;
}
}, {
key: "data",
value: function data(k, v) {
var _pri4 = pri(this),
_ = _pri4._,
__ = _pri4.__;
if (typeof v != "undefined") __.idic[k] = v;else return __.idic[k];
}
}, {
key: "remove",
value: function remove(k) {
var _pri5 = pri(this),
_ = _pri5._,
__ = _pri5.__;
delete __.idic[k];
}
}, {
key: "serialize",
value: function serialize() {
var _pri6 = pri(this),
_ = _pri6._,
__ = _pri6.__;
return _gcl2.default.merge({}, __.idic);
}
}, {
key: "toString",
value: function toString() {
return _gcl2.default.toJsonString(this.serialize());
}
}, {
key: "deserialize",
value: function deserialize(data, clear) {
var _pri7 = pri(this),
_ = _pri7._,
__ = _pri7.__;
if (clear) __.idic = {};
if (data && data.split) {
var _data = _querystring2.default.parse(data);
for (var i in _data) {
if (typeof _data[i] != "function") __.idic[i] = _data[i];
}
} else if ((typeof data === "undefined" ? "undefined" : (0, _typeof3.default)(data)) == "object") _gcl2.default.merge(__.idic, data, true);
return;
}
}, {
key: "dispose",
value: function dispose() {
clear();
}
}, {
key: "SessionID",
get: function get() {
var _pri8 = pri(this),
_ = _pri8._,
__ = _pri8.__;
return __.id;
},
set: function set(id) {
var _pri9 = pri(this),
_ = _pri9._,
__ = _pri9.__;
if (__.id && __.id != id) throw new Error("SessionID 只能设置一次");
__.id = id;
}
}, {
key: "Name",
get: function get() {
var _pri10 = pri(this),
_ = _pri10._,
__ = _pri10.__;
return __.name;
}
}, {
key: "IsClear",
get: function get() {
var _pri11 = pri(this),
_ = _pri11._,
__ = _pri11.__;
return __.isClear;
}
}, {
key: "IsClearCache",
get: function get() {
var _pri12 = pri(this),
_ = _pri12._,
__ = _pri12.__;
return __.isClearCache;
}
}, {
key: "Manager",
get: function get() {
var _pri13 = pri(this),
_ = _pri13._,
__ = _pri13.__;
return __.manager;
},
set: function set(sdm) {
var _pri14 = pri(this),
_ = _pri14._,
__ = _pri14.__;
if (__.manager) throw new Error("manager 只能设置一次");
__.manager = sdm;
}
}]);
return SessionData;
}();
var User = exports.User = function (_SessionData) {
(0, _inherits3.default)(User, _SessionData);
function User() {
(0, _classCallCheck3.default)(this, User);
return (0, _possibleConstructorReturn3.default)(this, (User.__proto__ || (0, _getPrototypeOf2.default)(User)).call(this, null, ".User"));
}
(0, _createClass3.default)(User, [{
key: "serialize",
value: function serialize() {
var _pri15 = pri(this),
_ = _pri15._,
__ = _pri15.__,
id = (0, _get3.default)(User.prototype.__proto__ || (0, _getPrototypeOf2.default)(User.prototype), "SessionID", this);
if (!_gcl2.default.isValid(id)) throw new Error("必须定义SessionID");
if (_.Login) {
if (!_gcl2.default.isValid(_.UserID)) throw new Error("必须定义UserID");
this.LoginTime = new Date();
}
var ret = (0, _get3.default)(User.prototype.__proto__ || (0, _getPrototypeOf2.default)(User.prototype), "serialize", this).call(this);
if (this.LoginTime) ret["LT"] = this.LoginTime.getTime();
ret[".ID"] = id;
return ret;
}
}, {
key: "deserialize",
value: function deserialize(data, clear) {
var _pri16 = pri(this),
_ = _pri16._,
__ = _pri16.__;
(0, _get3.default)(User.prototype.__proto__ || (0, _getPrototypeOf2.default)(User.prototype), "deserialize", this).call(this, data, clear);
if (this.LoginTime) this.LoginTime = new Date(parseInt(this.LoginTime));
if ((0, _get3.default)(User.prototype.__proto__ || (0, _getPrototypeOf2.default)(User.prototype), "data", this).call(this, ".ID") && _.SessionID && _.SessionID != _.data(".ID")) throw new Error("SessionID 不同!不能重复设置!");else _.SessionID = (0, _get3.default)(User.prototype.__proto__ || (0, _getPrototypeOf2.default)(User.prototype), "data", this).call(this, ".ID");
_.remove(".ID");
}
}, {
key: "toString",
value: function () {
var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee() {
var _pri17, _, __, ret;
return _regenerator2.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_pri17 = pri(this), _ = _pri17._, __ = _pri17.__;
ret = this.serialize();
delete ret[".ID"];
delete ret["UID"];
delete ret["SID"];
delete ret["EID"];
delete ret["LT"];
delete ret["lin"];
ret.UserID = this.UserID;
ret.SessionID = this.SessionID;
ret.EntityID = this.EntityID;
ret.SystemID = this.SystemID;
ret.LoginTime = this.LoginTime;
ret.Login = this.Login;
if (!_.Manager) {
_context.next = 27;
break;
}
_context.next = 17;
return _.Manager.EIDS.get();
case 17:
ret.EIDS = _context.sent;
_context.next = 20;
return _.Manager.MEIDS.get();
case 20:
ret.MEIDS = _context.sent;
_context.next = 23;
return _.Manager.Permission.get();
case 23:
ret.PIDS = _context.sent;
_context.next = 26;
return _.Manager.MENUS.get();
case 26:
ret.MENUS = _context.sent;
case 27:
return _context.abrupt("return", _gcl2.default.toJsonString(ret));
case 28:
case "end":
return _context.stop();
}
}
}, _callee, this);
}));
function toString() {
return _ref.apply(this, arguments);
}
return toString;
}()
}, {
key: "Login",
get: function get() {
return (0, _get3.default)(User.prototype.__proto__ || (0, _getPrototypeOf2.default)(User.prototype), "data", this).call(this, "lin") == 1;
},
set: function set(v) {
var _pri18 = pri(this),
_ = _pri18._,
__ = _pri18.__;
if (v != this.Login) {
(0, _get3.default)(User.prototype.__proto__ || (0, _getPrototypeOf2.default)(User.prototype), "data", this).call(this, "lin", v ? 1 : 0);
if (v) {
_.LoginTime = new Date();
} else {
(0, _get3.default)(User.prototype.__proto__ || (0, _getPrototypeOf2.default)(User.prototype), "clear", this).call(this);
_.Manager.EIDS.clear();
_.Manager.MEIDS.clear();
_.Manager.MENUS.clear();
_.Manager.Permission.clear();
}
}
}
}, {
key: "UserID",
get: function get() {
return (0, _get3.default)(User.prototype.__proto__ || (0, _getPrototypeOf2.default)(User.prototype), "data", this).call(this, "UID");
},
set: function set(v) {
(0, _get3.default)(User.prototype.__proto__ || (0, _getPrototypeOf2.default)(User.prototype), "data", this).call(this, "UID", v);
}
}, {
key: "SystemID",
get: function get() {
return (0, _get3.default)(User.prototype.__proto__ || (0, _getPrototypeOf2.default)(User.prototype), "data", this).call(this, "SID");
},
set: function set(v) {
(0, _get3.default)(User.prototype.__proto__ || (0, _getPrototypeOf2.default)(User.prototype), "data", this).call(this, "SID", v);
}
}, {
key: "EntityID",
get: function get() {
return (0, _get3.default)(User.prototype.__proto__ || (0, _getPrototypeOf2.default)(User.prototype), "data", this).call(this, "EID");
},
set: function set(v) {
(0, _get3.default)(User.prototype.__proto__ || (0, _getPrototypeOf2.default)(User.prototype), "data", this).call(this, "EID", v);
}
}, {
key: "LoginTime",
get: function get() {
return (0, _get3.default)(User.prototype.__proto__ || (0, _getPrototypeOf2.default)(User.prototype), "data", this).call(this, "LT");
},
set: function set(v) {
(0, _get3.default)(User.prototype.__proto__ || (0, _getPrototypeOf2.default)(User.prototype), "data", this).call(this, "LT", v);
}
}]);
return User;
}(SessionData);
var CreateID = exports.CreateID = function CreateID() {
return (0, _tool.GUID)();
};
var SessionDataManagerFactory = exports.SessionDataManagerFactory = function () {
function SessionDataManagerFactory(adapter, security, language) {
(0, _classCallCheck3.default)(this, SessionDataManagerFactory);
pri(this, { adapter: adapter, security: security, language: language });
}
(0, _createClass3.default)(SessionDataManagerFactory, [{
key: "getValue",
value: function getValue() {
var _pri19 = pri(this),
_ = _pri19._,
__ = _pri19.__;
return new SessionDataManager(__.adapter, __.security, __.language);
}
}, {
key: "setValue",
value: function setValue(sdm) {
if (sdm && sdm.dispose) sdm.dispose();
}
}]);
return SessionDataManagerFactory;
}();
/**
* SessionDataManager:会话管理 每次请求都会新建一个会话管理用于管理这个会话上下文,改造为prototype模式以方面快速new
*/
var SessionDataManager = exports.SessionDataManager = function () {
function SessionDataManager(adapter, passtime, language) {
var _this2 = this;
(0, _classCallCheck3.default)(this, SessionDataManager);
this.testRequired = function (key, error) {
_gcl2.default.testRequired(_this2.param(key), error || "\u9650\u5236" + key + "\u8981\u6C42\u4E3A\u5FC5\u586B");
return _this2.param(key);
};
this.testRequired = function (key, error) {
_gcl2.default.testRequired(_this2.param(key), error || "\u9650\u5236" + key + "\u8981\u6C42\u4E3A\u5FC5\u586B");
return _this2.param(key);
};
var _pri20 = pri(this, {
adapter: adapter,
passtime: passtime || 8,
lang: language,
idic: {},
user: new User(),
wxuser: null,
end: false,
sb: _gcl2.default.sb(),
streams: []
}),
_ = _pri20._,
__ = _pri20.__;
__.user.Manager = _;
this.status = "";
this.encoding = "UTF-8";
}
/**
* 最重要的属性 用于决定是否结束moduler链的处理
*/
(0, _createClass3.default)(SessionDataManager, [{
key: "end",
value: function end(statusCode, desc) {
var _pri21 = pri(this),
_ = _pri21._,
__ = _pri21.__;
__.end = true;
if (__.interrupt) {
desc && (this.status = desc);
return;
}
this.Response.statusCode = statusCode;
if (desc) _.write(desc, null, true);
}
}, {
key: "redirect",
/**
* @param {重定向URL} url
*/
value: function redirect(url) {
var _pri22 = pri(this),
_ = _pri22._,
__ = _pri22.__;
__.end = true;
if (__.interrupt) return;
this.Response.statusCode = 302;
this.Response.setHeader("Location", url);
}
/**
*
* @param {gcl config对象} config
* @param {gcl middler对象} middler
* @param {gcl log对象} log
* @param {gcl ni对象} ni
* @param {node req对象} req
* @param {node rep对象} rep
*/
}, {
key: "init",
value: function init(config, middler, log, ni, req, rep, wsSessionIdic) {
var _pri23 = pri(this, { config: config, middler: middler, log: log, ni: ni, req: req, rep: rep }),
_ = _pri23._,
__ = _pri23.__;
_.WSSessionMap = wsSessionIdic;
}
/**
* 重新初始化会话纤细
* @param {会话ID} sessionID
*/
}, {
key: "reInit",
value: function reInit(sessionID) {
var _pri24 = pri(this),
_ = _pri24._,
__ = _pri24.__;
for (var k in __) {
switch (k) {
case "adapter":
case "config":
case "middler":
case "log":
case "ni":
case "req":
case "rep":
case "lang":
case "passtime":
break;
default:
delete __[k];
break;
}
}var user = new User();
user.SessionID = sessionID;
user.Manager = _;
__.user = user;
__.idic = {};
__.end = false;
__.sb = _gcl2.default.sb();
__.streams = [];
}
/**
* 不能和init一起运行,因为init运行时没有Cookie等信息
*/
}, {
key: "initSession",
value: function () {
var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(ID) {
var _pri25, _, __;
return _regenerator2.default.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
_pri25 = pri(this), _ = _pri25._, __ = _pri25.__;
_context2.next = 3;
return __.adapter.fillSessionData(__.user);
case 3:
if (!__.user.SessionID) __.user.SessionID = ID || CreateID();
if (__.user.Login && (!__.user.LoginTime || new Date().sub("h", __.user.LoginTime) >= __.passtime)) __.user.Login = false;
case 5:
case "end":
return _context2.stop();
}
}
}, _callee2, this);
}));
function initSession(_x) {
return _ref2.apply(this, arguments);
}
return initSession;
}()
/**
*
* @param {文件路径} file
*/
}, {
key: "map",
value: function map(file) {
//需要知道__dirname;
}
}, {
key: "write",
value: function write(data, encoding) {
var clear = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
var _pri26 = pri(this),
_ = _pri26._,
__ = _pri26.__;
_.encoding = encoding || _.encoding;
if (clear) __.sb.clear();
__.sb.append(data);
}
}, {
key: "clearWrite",
value: function clearWrite() {
var _pri27 = pri(this),
_ = _pri27._,
__ = _pri27.__;
__.sb.clear();
}
}, {
key: "writeStream",
value: function writeStream(stream) {
var _pri28 = pri(this),
_ = _pri28._,
__ = _pri28.__;
__.streams.push(stream);
}
/**
* 用于生成符合结构的dbresult;
* @param {Object/Array} obj
*/
}, {
key: "exportDBResult",
value: function () {
var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3() {
var obj = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var dbresult, _obj, level;
return _regenerator2.default.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
dbresult = obj;
_obj = obj, level = 0;
while (_gcl2.default.isArray(_obj || {})) {
//开始剥葱
_obj = _obj[0];
level++;
}
while (level++ < 3) {
dbresult = [dbresult];
}this.dbresult = dbresult;
case 5:
case "end":
return _context3.stop();
}
}
}, _callee3, this);
}));
function exportDBResult() {
return _ref3.apply(this, arguments);
}
return exportDBResult;
}()
/**
* 用于生成返回的string
* @param {Object/Array/Error} obj
*/
}, {
key: "exportString",
value: function () {
var _ref4 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee4() {
var obj = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var iserror;
return _regenerator2.default.wrap(function _callee4$(_context4) {
while (1) {
switch (_context4.prev = _context4.next) {
case 0:
iserror = obj.toString().startsWith("Error");
this.status = typeof obj == "string" ? obj : _gcl2.default.toJsonString([[[iserror ? {
success: false,
error: obj.message || obj.err_msg || obj.errmsg
} : {
success: true,
data: _gcl2.default.isArray(obj) ? obj : [obj]
}]]]);
case 2:
case "end":
return _context4.stop();
}
}
}, _callee4, this);
}));
function exportString() {
return _ref4.apply(this, arguments);
}
return exportString;
}()
/**
* 导出文件
* @param {流或者Buffer} obj
* @param {附件文件名} name
*/
}, {
key: "exportFile",
value: function () {
var _ref5 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee5(obj, name) {
var _pri29, _, __, stream;
return _regenerator2.default.wrap(function _callee5$(_context5) {
while (1) {
switch (_context5.prev = _context5.next) {
case 0:
_pri29 = pri(this), _ = _pri29._, __ = _pri29.__;
if (!__.interrupt) {
_context5.next = 3;
break;
}
return _context5.abrupt("return");
case 3:
this.Response.setHeader("content-type", (0, _mime.get)(name));
this.Response.setHeader("Content-Disposition", encodeURI("attachment;filename=" + name));
if (typeof obj == "string") _.write(obj, "utf-8");else if (obj.on) _.writeStream(obj);else {
//_.getResponseStream.write(obj);
stream = new _gcl2.default.ArrayStream();
stream.write(obj);
_.writeStream(stream);
}
case 6:
case "end":
return _context5.stop();
}
}
}, _callee5, this);
}));
function exportFile(_x5, _x6) {
return _ref5.apply(this, arguments);
}
return exportFile;
}()
/**
* 导出文件
* @param {[[name,name],[value,value],[value,value]]} obj
* @param {附件文件名} name
*/
}, {
key: "exportExcel",
value: function () {
var _ref6 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee6(db, name) {
var count, _db, i, buffer;
return _regenerator2.default.wrap(function _callee6$(_context6) {
while (1) {
switch (_context6.prev = _context6.next) {
case 0:
count = 0, _db = db, i = 0;
while (_gcl2.default.isArray(_db[0])) {
_db = _db[0];
count++;
}
count == 1 && (db = [db]); //1维要升级成2维
count == 0 && (db = [[]]);
i = 0;
buffer = _nodeXlsx2.default.build(db.map(function (v) {
return {
name: "sheet" + ++i,
data: v
};
}));
// console.log(350,name);
_context6.next = 8;
return this.exportFile(buffer, name);
case 8:
case "end":
return _context6.stop();
}
}
}, _callee6, this);
}));
function exportExcel(_x7, _x8) {
return _ref6.apply(this, arguments);
}
return exportExcel;
}()
}, {
key: "clearStream",
value: function clearStream() {
var _pri30 = pri(this),
_ = _pri30._,
__ = _pri30.__;
var ret = __.streams;
__.streams = [];
return ret;
}
}, {
key: "getResponseStream",
value: function getResponseStream() {
var _pri31 = pri(this),
_ = _pri31._,
__ = _pri31.__;
if (__.interrupt) return;
return __.stream || function () {
var encodings = (__.req.headers["vesh-encoding"] || __.req.headers["accept-encoding-vesh"] || __.req.headers["accept-encoding"] || "text/plain").replace(/\s/g, "").split(",").filter(function (v) {
return _gcl2.default.isValid(v);
}),
stream = null;
for (var i = 0; i < encodings.length; i++) {
var v = encodings[i];
//todo 因为gzip和deflate导致发送压缩计算 影响速度
switch (v.toLowerCase()) {
case "gzip":
_.Response.setHeader("content-encoding", "gzip");
stream = _zlib2.default.createGzip();
stream.pipe(_.Response);
__.stream = stream;
return __.stream;
case "deflate":
_.Response.setHeader("content-encoding", "deflate");
stream = _zlib2.default.Deflate();
stream.pipe(_.Response);
__.stream = stream;
return __.stream;
case "ws":
case "mqtt":
return _.Response;
}
}
//_.Response.setHeader("content-encoding", "text/plain");
__.stream = _.Response;
return __.stream;
}();
}
}, {
key: "flush",
value: function () {
var _ref7 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee7() {
var _pri32, _, __, st, stream;
return _regenerator2.default.wrap(function _callee7$(_context7) {
while (1) {
switch (_context7.prev = _context7.next) {
case 0:
_pri32 = pri(this), _ = _pri32._, __ = _pri32.__;
if (!__.interrupt) {
_context7.next = 3;
break;
}
return _context7.abrupt("return", false);
case 3:
if (!(__.sb && __.sb.length > 0)) {
_context7.next = 10;
break;
}
st = _.getResponseStream();
//console.log(394, __.interrupt, __.sb && __.sb.toString(), __.streams && __.streams.length);
_context7.next = 7;
return _gcl2.default.callback(function (call) {
return st.end(__.sb.clear(), _.encoding, call);
});
case 7:
return _context7.abrupt("return", false);
case 10:
if (!(__.streams && __.streams.length > 0)) {
_context7.next = 17;
break;
}
stream = _.getResponseStream();
_context7.next = 14;
return _gcl2.default.each(__.streams, function (v, next) {
v.on("error", function (err) {
__.log.error("VESH:" + err.stack);
next();
});
v.on("end", next);
//写入文件
v.pipe(stream, { end: false });
}).then(function () {
return _gcl2.default.callback(function (call) {
_.Response.on("finish", function (err) {
if (err) call(err);
_.Response.removeAllListeners("finish");
_.Response.end();
call(null, true);
});
__.stream.end();
__.streams = [];
});
});
case 14:
return _context7.abrupt("return", false);
case 17:
if (!__.stream) {
_context7.next = 23;
break;
}
_context7.next = 20;
return _gcl2.default.callback(function (call) {
_.Response.on("finish", function () {
_.Response.removeAllListeners("finish");
_.Response.end();
call();
});
__.stream.end();
});
case 20:
return _context7.abrupt("return", false);
case 23:
return _context7.abrupt("return", true);
case 24:
case "end":
return _context7.stop();
}
}
}, _callee7, this);
}));
function flush() {
return _ref7.apply(this, arguments);
}
return flush;
}()
/**
* 中止后续session操作 ,MSocket方法专用
*/
}, {
key: "interrupt",
value: function () {
var _ref8 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee8() {
return _regenerator2.default.wrap(function _callee8$(_context8) {
while (1) {
switch (_context8.prev = _context8.next) {
case 0:
pri(this, { interrupt: true });
case 1:
case "end":
return _context8.stop();
}
}
}, _callee8, this);
}));
function interrupt() {
return _ref8.apply(this, arguments);
}
return interrupt;
}()
}, {
key: "isInterrupt",
value: function isInterrupt() {
return !!pri(this).__.interrupt;
}
/**
* 从QueryString和Form中获取数据
* @param {从QueryString和Form中获取数据} k
*/
}, {
key: "param",
value: function param(k) {
var _pri33 = pri(this),
_ = _pri33._,
__ = _pri33.__;
return k ? (_.querystring ? _.querystring[k] : null) || (_.form ? _.form[k] : null) : null;
}
}, {
key: "send",
/**
* 主动下行其它SessionID 并返回下行成功的sessionID
* @param {*} sessionIDs
*/
value: function send(sessionIDs) {
var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var _pri34 = pri(this),
_ = _pri34._,
__ = _pri34.__;
sessionIDs = _gcl2.default.isArray(sessionIDs) ? sessionIDs : typeof sessionIDs == "string" ? sessionIDs.split(",") : null;
var rets = [];
// console.log(623, sessionIDs, data);
if (sessionIDs && _.WSSessionMap) {
sessionIDs.map(function (id) {
var client = _.WSSessionMap[id];
if (client && client.readyState == _ws2.default.OPEN) {
client.send(_gcl2.default.toJsonString(_gcl2.default.merge({
event: "send",
ID: _gcl2.default.SNOWID(),
data: ""
}, data)));
rets.push(id);
}
});
} else throw Error("不是webSocket会话!");
return rets;
}
}, {
key: "closeWS",
value: function closeWS(id) {
var _pri35 = pri(this),
_ = _pri35._,
__ = _pri35.__;
if (id && _.WSSessionMap) {
var client = _.WSSessionMap[id];
try {
client.close();
} catch (e) {}
delete _.WSSessionMap[id];
}
}
}, {
key: "AppSettings",
value: function AppSettings(k) {
var _pri36 = pri(this),
_ = _pri36._,
__ = _pri36.__;
return _config2.default.AppSettings(__.config, k);
}
/**
* 用户信息
*/
}, {
key: "hasRight",
value: function () {
var _ref9 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee9(key) {
var value;
return _regenerator2.default.wrap(function _callee9$(_context9) {
while (1) {
switch (_context9.prev = _context9.next) {
case 0:
_context9.next = 2;
return this.data(".Permissions");
case 2:
value = _context9.sent;
if (!_gcl2.default.isArray(value.data(key))) {
_context9.next = 5;
break;
}
throw new Error(key + "\u7684\u6743\u9650\u503C\u91CD\u590D!");
case 5:
if (!(_gcl2.default.isValid(value) && value.data(key))) {
_context9.next = 11;
break;
}
_context9.next = 8;
return this.Permission.hasRight(value.data(key));
case 8:
_context9.t0 = _context9.sent;
_context9.next = 12;
break;
case 11:
_context9.t0 = false;
case 12:
return _context9.abrupt("return", _context9.t0);
case 13:
case "end":
return _context9.stop();
}
}
}, _callee9, this);
}));
function hasRight(_x10) {
return _ref9.apply(this, arguments);
}
return hasRight;
}()
}, {
key: "data",
value: function () {
var _ref10 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee10(k) {
var _pri37, _, __, _data2;
return _regenerator2.default.wrap(function _callee10$(_context10) {
while (1) {
switch (_context10.prev = _context10.next) {
case 0:
_pri37 = pri(this), _ = _pri37._, __ = _pri37.__;
if (!(k.toLowerCase() == _.User.Name.toLowerCase())) {
_context10.next = 5;
break;
}
return _context10.abrupt("return", _.User);
case 5:
if (!__.idic[k]) {
_context10.next = 9;
break;
}
return _context10.abrupt("return", __.idic[k]);
case 9:
_context10.next = 11;
return __.adapter.getSessionData(this, _.User.SessionID, k);
case 11:
_data2 = _context10.sent;
__.idic[k] = _data2;
return _context10.abrupt("return", __.idic[k]);
case 14:
case "end":
return _context10.stop();
}
}
}, _callee10, this);
}));
function data(_x11) {
return _ref10.apply(this, arguments);
}
return data;
}()
}, {
key: "update",
value: function () {
var _ref11 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee12() {
var _this3 = this;
var _pri38, _, __;
return _regenerator2.default.wrap(function _callee12$(_context12) {
while (1) {
switch (_context12.prev = _context12.next) {
case 0:
_pri38 = pri(this), _ = _pri38._, __ = _pri38.__;
if (_.isStatic) {
_context12.next = 11;
break;
}
_context12.next = 4;
return _gcl2.default.forC(__.idic, function () {
var _ref12 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee11(k, v) {
return _regenerator2.default.wrap(function _callee11$(_context11) {
while (1) {
switch (_context11.prev = _context11.next) {
case 0:
if (!v.IsClear) {
_context11.next = 5;
break;
}
_context11.next = 3;
return __.adapter.clearSessionData(v);
case 3:
_context11.next = 7;
break;
case 5:
_context11.next = 7;
return __.adapter.saveSessionData(v);
case 7:
return _context11.abrupt("return", false);
case 8:
case "end":
return _context11.stop();
}
}
}, _callee11, _this3);
}));
return function (_x12, _x13) {
return _ref12.apply(this, arguments);
};
}());
case 4:
if (!__.user.IsClear) {
_context12.next = 9;
break;
}
_context12.next = 7;
return __.adapter.clearSessionData(__.user);
case 7:
_context12.next = 11;
break;
case 9:
_context12.next = 11;
return __.adapter.saveSessionData(__.user);
case 11:
return _context12.abrupt("return");
case 12:
case "end":
return _context12.stop();
}
}
}, _callee12, this);
}));
function update() {
return _ref11.apply(this, arguments);
}
return update;
}()
}, {
key: "dispose",
value: function dispose() {
var _pri39 = pri(this),
_ = _pri39._,
__ = _pri39.__;
__.user.dispose();
for (var k in __.idic) {
__.idic[k].dispose();
}
}
/**
* 根据键值进行正则判断
* @param {*} key
* @param {*} regex
* @param {*} error
* @param {*} isRequire
*/
}, {
key: "testRegex",
value: function testRegex(key, regex, error, isRequire) {
_gcl2.default.testRegex(this.param(key), regex, error, key, isRequire);
return this.param(key);
}
/**
* 限制参数满足是数字
* @param {要判断的值} value
* @param {错误说明} error
* @param {是否必填} isRequire
*/
}, {
key: "testNumber",
value: function testNumber(key, error, isRequire) {
_gcl2.default.testNumber(this.param(key), error, key, isRequire);
return this.param(key);
}
/**
* 限制参数满足是数字
* @param {要判断的值} value
* @param {错误说明} error
* @param {是否必填} testRequire
*/
}, {
key: "testInt",
value: function testInt(key, error, isRequire) {
_gcl2.default.testInt(this.param(key), error, key, isRequire);
return this.param(key);
}
/**
* 限制参数满足是字母
* @param {要判断的值} value
* @param {错误说明} error
* @param {是否必填} testRequire
*/
}, {
key: "testLetter",
value: function testLetter(key, error, isRequire) {
_gcl2.default.testLetter(this.param(key), error, key, isRequire);
return this.param(key);
}
/**
* 限制参数满足是数字
* @param {要判断的值} value
* @param {错误说明} error
* @param {是否必填} testRequire
*/
}, {
key: "testPassword",
value: function testPassword(key, error, isRequire) {
_gcl2.default.testPassword(this.param(key), error, key, isRequire);
return this.param(key);
}
/**
* 限制参数满足是非空必填
* @param {要判断的值} value
* @param {错误说明} error
* @param {是否必填} testRequire
*/
}, {
key: "testCard",
/**
* 限制参数满足是身份证
* @param {要判断的值} value
* @param {错误说明} error
* @param {是否必填} testRequire
*/
value: function testCard(key, error, isRequire) {
_gcl2.default.testCard(this.param(key), error, key, isRequire);
return this.param(key);
}
/**
* 限制参数满足是手机号
* @param {要判断的值} value
* @param {错误说明} error
* @param {是否必填} testRequire
*/
}, {
key: "testMobile",
value: function testMobile(key, error, isRequire) {
_gcl2.default.testMobile(this.param(key), error, key, isRequire);
return this.param(key);
}
/**
* 限制参数满足是座机
* @param {要判断的值} value
* @param {错误说明} error
* @param {是否必填} testRequire
*/
}, {
key: "testPhone",
value: function testPhone(key, error, isRequire) {
_gcl2.default.testPhone(this.param(key), error, key, isRequire);
return this.param(key);
}
/**
* 限制参数满足是网络地址
* @param {要判断的值} value
* @param {错误说明} error
* @param {是否必填} testRequire
*/
}, {
key: "testUrl",
value: function testUrl(key, error, isRequire) {
_gcl2.default.testUrl(this.param(key), error, key, isRequire);
return this.param(key);
}
/**
* 限制参数满足是电子邮箱
* @param {要判断的值} value
* @param {错误说明} error
* @param {是否必填} testRequire
*/
}, {
key: "testEmail",
value: function testEmail(key, error, isRequire) {
_gcl2.default.testEmail(this.param(key), error, key, isRequire);
return this.param(key);
}
/**
* 限制参数满足是中文
* @param {要判断的值} value
* @param {错误说明} error
* @param {是否必填} testRequire
*/
}, {
key: "testChinese",
value: function testChinese(key, error, isRequire) {
_gcl2.default.testChinese(this.param(key), error, key, isRequire);
return this.param(key);
}
/**
* 限制参数满足是QQ
* @param {要判断的值} value
* @param {错误说明} error
* @param {是否必填} testRequire
*/
}, {
key: "testQQ",
value: function testQQ(key, error, isRequire) {
_gcl2.default.testQQ(this.param(key), error, key, isRequire);
return this.param(key);
}
/**
* 限制参数满足是邮政编码
* @param {要判断的值} value
* @param {错误说明} error
* @param {是否必填} testRequire
*/
}, {
key: "testZipCode",
value: function testZipCode(key, error, isRequire) {
_gcl2.default.testZipCode(this.param(key), error, key, isRequire);
return this.param(key);
}
/**
* 限制参数满足是IP
* @param {要判断的值} value
* @param {错误说明} error
* @param {是否必填} testRequire
*/
}, {
key: "testIP",
value: function testIP(key, error, isRequire) {
_gcl2.default.testIP(this.param(key), error, key, isRequire);
return this.param(key);
}
/**
* 限制参数满足是金额(2位小数)
* @param {要判断的值} value
* @param {错误说明} error
* @param {是否必填} testRequire
*/
}, {
key: "testCurreny",
value: function testCurreny(key, error, isRequire) {
_gcl2.default.testCurreny(this.param(key), error, key, isRequire);
return this.param(key);
}
/**
* 限制参数满足是数字
* @param {要判断的值} value
* @param {错误说明} error
* @param {是否必填} isRequire
*/
}, {
key: "testNumberOrNull",
value: function testNumberOrNull(key, error, isRequire) {
_gcl2.default.testNumberOrNull(this.param(key), error, key, isRequire);
return this.param(key);
}
/**
* 限制参数满足是数字
* @param {要判断的值} value
* @param {错误说明} error
* @param {是否必填} testRequire
*/
}, {
key: "testIntOrNull",
value: function testIntOrNull(key, error, isRequire) {
_gcl2.default.testIntOrNull(this.param(key), error, key, isRequire);
return this.param(key);
}
/**
* 限制参数满足是字母
* @param {要判断的值} value
* @param {错误说明} error
* @param {是否必填} testRequire
*/
}, {
key: "testLetterOrNull",
value: function testLetterOrNull(key, error, isRequire) {
_gcl2.default.testLetterOrNull(this.param(key), error, key, isRequire);
return this.param(key);
}
/**
* 限制参数满足是数字
* @param {要判断的值} value
* @param {错误说明} error
* @param {是否必填} testRequire
*/
}, {
key: "testPasswordOrNull",
value: function testPasswordOrNull(key, error, isRequire) {
_gcl2.default.testPasswordOrNull(this.param(key), error, key, isRequire);
return this.param(key);
}
/**
* 限制参数满足是非空必填
* @param {要判断的值} value
* @param {错误说明} error
* @param {是否必填} testRequire
*/
}, {
key: "testCardOrNull",
/**
* 限制参数满足是身份证
* @param {要判断的值} value
* @param {错误说明} error
* @param {是否必填} testRequire
*/
value: function testCardOrNull(key, error, isRequire) {
_gcl2.default.testCardOrNull(this.param(key), error, key, isRequire);
return this.param(key);
}
/**
* 限制参数满足是手机号
* @param {要判断的值} value
* @param {错误说明} error
* @param {是否必填} testRequire
*/
}, {
key: "testMobileOrNull",
value: function testMobileOrNull(key, error, isRequire) {
_gcl2.default.testMobileOrNull(this.param(key), error, key, isRequire);
return this.param(key);
}
/**
* 限制参数满足是座机
* @param {要判断的值} value
* @param {错误说明} error
* @param {是否必填} testRequire
*/
}, {
key: "testPhoneOrNull",
value: function testPhoneOrNull(key, error, isRequire) {
_gcl2.default.testPhoneOrNull(this.param(key), error, key, isRequire);
return this.param(key);
}
/**
* 限制参数满足是网络地址
* @param {要判断的值} value
* @param {错误说明} error
* @param {是否必填} testRequire
*/
}, {
key: "testUrlOrNull",
value: function testUrlOrNull(key, error, isRequire) {
_gcl2.default.testUrlOrNull(this.param(key), error, key, isRequire);
return this.param(key);
}
/**
* 限制参数满足是电子邮箱
* @param {要判断的值} value
* @param {错误说明} error
* @param {是否必填} testRequire
*/
}, {
key: "testEmailOrNull",
value: function testEmailOrNull(key, error, isRequire) {
_gcl2.default.testEmailOrNull(this.param(key), error, key, isRequire);
return this.param(key);
}
/**
* 限制参数满足是中文
* @param {要判断的值} value
* @param {错误说明} error
* @param {是否必填} testRequire
*/
}, {
key: "testChineseOrNull",
value: function testChineseOrNull(key, error, isRequire) {
_gcl2.default.testChineseOrNull(this.param(key), error, key, isRequire);
return this.param(key);
}
/**
* 限制参数满足是QQ
* @param {要判断的值} value
* @param {错误说明} error
* @param {是否必填} testRequire
*/
}, {
key: "testQQOrNull",
value: function testQQOrNull(key, error, isRequire) {
_gcl2.default.testQQOrNull(this.param(key), error, key, isRequire);
return this.param(key);
}
/**
* 限制参数满足是邮政编码
* @param {要判断的值} value
* @param {错误说明} error
* @param {是否必填} testRequire
*/
}, {
key: "testZipCodeOrNull",
value: function testZipCodeOrNull(key, error, isRequire) {
_gcl2.default.testZipCodeOrNull(this.param(key), error, key, isRequire);
return this.param(key);
}
/**
* 限制参数满足是IP
* @param {要判断的值} value
* @param {错误说明} error
* @param {是否必填} testRequire
*/
}, {
key: "testIPOrNull",
value: function testIPOrNull(key, error, isRequire) {
_gcl2.default.testIPOrNull(this.param(key), error, key, isRequire);
return this.param(key);
}
/**
* 限制参数满足是金额(2位小数)
* @param {要判断的值} value
* @param {错误说明} error
* @param {是否必填} testRequire
*/
}, {
key: "testCurrenyOrNull",
value: function testCurrenyOrNull(key, error, isRequire) {
_gcl2.default.testCurrenyOrNull(this.param(key), error, key, isRequire);
return this.param(key);
}
/**
* 测试访问方法 多个为;号隔开
*/
}, {
key: "testMethod",
value: function testMethod() {
var methods = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "GET";
var method = {};
methods = methods.toUpperCase();
methods.split(";").forEach(function (v) {
return method[v] = true;
});
if (!method[this.Request.method]) {
var e = new Error("限制的Method为" + methods);
e.status = 401;
throw e;
}
return true;
}
/**
* 测试访问方法为GET
*/
}, {
key: "testGet",
value: function testGet() {
return this.testMethod("get");
}
/**
* 测试访问方法为POST
*/
}, {
key: "testPost",
value: function testPost() {
return this.testMethod("post");
}
/**
* 限制Restful几个方法
*/
}, {
key: "testRestful",
value: function testRestful() {
return this.testMethod("get;post;put;delete");
}
/**
*
* @param {权限名,号隔开} key
* @param {错误说明} error
*/
}, {
key: "testPermission",
value: function () {
var _ref13 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee14(key, error) {
var _this4 = this;
var _pri40, _, __, val, e;
return _regenerator2.default.wrap(function _callee14$(_context14) {
while (1) {
switch (_context14.prev = _context14.next) {
case 0:
_pri40 = pri(this), _ = _pri40._, __ = _pri40.__;
val = false;
_context14.next = 4;
return _gcl2.default.each(key.split(","), function () {
var _ref14 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee13(v) {
return _regenerator2.default.wrap(function _callee13$(_context13) {
while (1) {
switch (_context13.prev = _context13.next) {
case 0:
_context13.t0 = val;
if (_context13.t0) {
_context13.next = 5;
break;
}
_context13.next = 4;
return _.hasRight(v);
case 4:
_context13.t0 = _context13.sent;
case 5:
val = _context13.t0;
return _context13.abrupt("return", false);
case 7:
case "end":
return _context13.stop();
}
}
}, _callee13, _this4);
}));
return function (_x17) {
return _ref14.apply(this, arguments);
};
}(), true);
case 4:
if (val) {
_con