cgserver 5.4.12 → 5.4.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (205) hide show
  1. package/lib/Framework/AI/AiObject.d.ts +5 -0
  2. package/lib/Framework/AI/AiObject.js +11 -0
  3. package/lib/Framework/AI/AiObject.js.map +1 -0
  4. package/lib/Framework/AI/Astar.d.ts +38 -0
  5. package/lib/Framework/AI/Astar.js +134 -0
  6. package/lib/Framework/AI/Astar.js.map +1 -0
  7. package/lib/Framework/AI/BehaviorAI.d.ts +24 -0
  8. package/lib/Framework/AI/BehaviorAI.js +308 -0
  9. package/lib/Framework/AI/BehaviorAI.js.map +1 -0
  10. package/lib/Framework/AI/Entity.d.ts +12 -0
  11. package/lib/Framework/AI/Entity.js +34 -0
  12. package/lib/Framework/AI/Entity.js.map +1 -0
  13. package/lib/Framework/AI/Point.d.ts +17 -0
  14. package/lib/Framework/AI/Point.js +69 -0
  15. package/lib/Framework/AI/Point.js.map +1 -0
  16. package/lib/Framework/AI/TriggerMgr.d.ts +52 -0
  17. package/lib/Framework/AI/TriggerMgr.js +202 -0
  18. package/lib/Framework/AI/TriggerMgr.js.map +1 -0
  19. package/lib/Framework/Config/Config.d.ts +7 -0
  20. package/lib/Framework/Config/Config.js +38 -0
  21. package/lib/Framework/Config/Config.js.map +1 -0
  22. package/lib/Framework/Config/FrameworkConfig.d.ts +219 -0
  23. package/lib/Framework/Config/FrameworkConfig.js +225 -0
  24. package/lib/Framework/Config/FrameworkConfig.js.map +1 -0
  25. package/lib/Framework/Config/ServerConfig.d.ts +9 -0
  26. package/lib/Framework/Config/ServerConfig.js +19 -0
  27. package/lib/Framework/Config/ServerConfig.js.map +1 -0
  28. package/lib/Framework/Config/_error_.d.ts +95 -0
  29. package/lib/Framework/Config/_error_.js +35 -0
  30. package/lib/Framework/Config/_error_.js.map +1 -0
  31. package/lib/Framework/Core/Core.d.ts +101 -0
  32. package/lib/Framework/Core/Core.js +562 -0
  33. package/lib/Framework/Core/Core.js.map +1 -0
  34. package/lib/Framework/Core/Timer.d.ts +16 -0
  35. package/lib/Framework/Core/Timer.js +117 -0
  36. package/lib/Framework/Core/Timer.js.map +1 -0
  37. package/lib/Framework/Database/BaseMongoService.d.ts +67 -0
  38. package/lib/Framework/Database/BaseMongoService.js +80 -0
  39. package/lib/Framework/Database/BaseMongoService.js.map +1 -0
  40. package/lib/Framework/Database/BaseService.d.ts +34 -0
  41. package/lib/Framework/Database/BaseService.js +282 -0
  42. package/lib/Framework/Database/BaseService.js.map +1 -0
  43. package/lib/Framework/Database/Decorator/AutoIncrement.d.ts +1 -0
  44. package/lib/Framework/Database/Decorator/AutoIncrement.js +12 -0
  45. package/lib/Framework/Database/Decorator/AutoIncrement.js.map +1 -0
  46. package/lib/Framework/Database/Decorator/DBCache.d.ts +21 -0
  47. package/lib/Framework/Database/Decorator/DBCache.js +65 -0
  48. package/lib/Framework/Database/Decorator/DBCache.js.map +1 -0
  49. package/lib/Framework/Database/Decorator/NotNull.d.ts +1 -0
  50. package/lib/Framework/Database/Decorator/NotNull.js +12 -0
  51. package/lib/Framework/Database/Decorator/NotNull.js.map +1 -0
  52. package/lib/Framework/Database/Decorator/PrimaryKey.d.ts +1 -0
  53. package/lib/Framework/Database/Decorator/PrimaryKey.js +12 -0
  54. package/lib/Framework/Database/Decorator/PrimaryKey.js.map +1 -0
  55. package/lib/Framework/Database/Decorator/Property.d.ts +55 -0
  56. package/lib/Framework/Database/Decorator/Property.js +62 -0
  57. package/lib/Framework/Database/Decorator/Property.js.map +1 -0
  58. package/lib/Framework/Database/Decorator/Table.d.ts +1 -0
  59. package/lib/Framework/Database/Decorator/Table.js +16 -0
  60. package/lib/Framework/Database/Decorator/Table.js.map +1 -0
  61. package/lib/Framework/Database/Decorator/Type.d.ts +1 -0
  62. package/lib/Framework/Database/Decorator/Type.js +21 -0
  63. package/lib/Framework/Database/Decorator/Type.js.map +1 -0
  64. package/lib/Framework/Database/MongoManager.d.ts +135 -0
  65. package/lib/Framework/Database/MongoManager.js +407 -0
  66. package/lib/Framework/Database/MongoManager.js.map +1 -0
  67. package/lib/Framework/Database/MysqlManager.d.ts +41 -0
  68. package/lib/Framework/Database/MysqlManager.js +181 -0
  69. package/lib/Framework/Database/MysqlManager.js.map +1 -0
  70. package/lib/Framework/Database/RedisManager.d.ts +64 -0
  71. package/lib/Framework/Database/RedisManager.js +409 -0
  72. package/lib/Framework/Database/RedisManager.js.map +1 -0
  73. package/lib/Framework/Logic/CacheTool.d.ts +25 -0
  74. package/lib/Framework/Logic/CacheTool.js +74 -0
  75. package/lib/Framework/Logic/CacheTool.js.map +1 -0
  76. package/lib/Framework/Logic/HttpTool.d.ts +14 -0
  77. package/lib/Framework/Logic/HttpTool.js +59 -0
  78. package/lib/Framework/Logic/HttpTool.js.map +1 -0
  79. package/lib/Framework/Logic/Log.d.ts +15 -0
  80. package/lib/Framework/Logic/Log.js +78 -0
  81. package/lib/Framework/Logic/Log.js.map +1 -0
  82. package/lib/Framework/Service/AccountService.d.ts +77 -0
  83. package/lib/Framework/Service/AccountService.js +474 -0
  84. package/lib/Framework/Service/AccountService.js.map +1 -0
  85. package/lib/Framework/Service/MongoAccountService.d.ts +78 -0
  86. package/lib/Framework/Service/MongoAccountService.js +397 -0
  87. package/lib/Framework/Service/MongoAccountService.js.map +1 -0
  88. package/lib/Framework/Service/MongoCacheService.d.ts +13 -0
  89. package/lib/Framework/Service/MongoCacheService.js +28 -0
  90. package/lib/Framework/Service/MongoCacheService.js.map +1 -0
  91. package/lib/Framework/Service/MongoUserService.d.ts +36 -0
  92. package/lib/Framework/Service/MongoUserService.js +94 -0
  93. package/lib/Framework/Service/MongoUserService.js.map +1 -0
  94. package/lib/Framework/Service/UserService.d.ts +36 -0
  95. package/lib/Framework/Service/UserService.js +185 -0
  96. package/lib/Framework/Service/UserService.js.map +1 -0
  97. package/lib/Framework/Service/ini.d.ts +28 -0
  98. package/lib/Framework/Service/ini.js +36 -0
  99. package/lib/Framework/Service/ini.js.map +1 -0
  100. package/lib/Framework/SocketServer/IClientWebSocket.d.ts +24 -0
  101. package/lib/Framework/SocketServer/IClientWebSocket.js +72 -0
  102. package/lib/Framework/SocketServer/IClientWebSocket.js.map +1 -0
  103. package/lib/Framework/SocketServer/IServerWebSocket.d.ts +13 -0
  104. package/lib/Framework/SocketServer/IServerWebSocket.js +42 -0
  105. package/lib/Framework/SocketServer/IServerWebSocket.js.map +1 -0
  106. package/lib/Framework/SocketServer/ISocket.d.ts +44 -0
  107. package/lib/Framework/SocketServer/ISocket.js +224 -0
  108. package/lib/Framework/SocketServer/ISocket.js.map +1 -0
  109. package/lib/Framework/SocketServer/ISocketServer.d.ts +36 -0
  110. package/lib/Framework/SocketServer/ISocketServer.js +189 -0
  111. package/lib/Framework/SocketServer/ISocketServer.js.map +1 -0
  112. package/lib/Framework/SocketServer/IWebSocket copy.d.ts +44 -0
  113. package/lib/Framework/SocketServer/IWebSocket copy.js +224 -0
  114. package/lib/Framework/SocketServer/IWebSocket copy.js.map +1 -0
  115. package/lib/Framework/SocketServer/IWebSocket.d.ts +44 -0
  116. package/lib/Framework/SocketServer/IWebSocket.js +224 -0
  117. package/lib/Framework/SocketServer/IWebSocket.js.map +1 -0
  118. package/lib/Framework/SocketServer/ProtoFilter/GoogleProtoFilter.d.ts +9 -0
  119. package/lib/Framework/SocketServer/ProtoFilter/GoogleProtoFilter.js +58 -0
  120. package/lib/Framework/SocketServer/ProtoFilter/GoogleProtoFilter.js.map +1 -0
  121. package/lib/Framework/SocketServer/ProtoFilter/IProtoFilter.d.ts +9 -0
  122. package/lib/Framework/SocketServer/ProtoFilter/IProtoFilter.js +9 -0
  123. package/lib/Framework/SocketServer/ProtoFilter/IProtoFilter.js.map +1 -0
  124. package/lib/Framework/SocketServer/ProtoFilter/JsonProtoFilter.d.ts +6 -0
  125. package/lib/Framework/SocketServer/ProtoFilter/JsonProtoFilter.js +30 -0
  126. package/lib/Framework/SocketServer/ProtoFilter/JsonProtoFilter.js.map +1 -0
  127. package/lib/Framework/SocketServer/ProtoFilter/ProtoFactory.d.ts +8 -0
  128. package/lib/Framework/SocketServer/ProtoFilter/ProtoFactory.js +32 -0
  129. package/lib/Framework/SocketServer/ProtoFilter/ProtoFactory.js.map +1 -0
  130. package/lib/Framework/ThirdParty/AlipayTool.d.ts +40 -0
  131. package/lib/Framework/ThirdParty/AlipayTool.js +123 -0
  132. package/lib/Framework/ThirdParty/AlipayTool.js.map +1 -0
  133. package/lib/Framework/ThirdParty/Alisms.d.ts +14 -0
  134. package/lib/Framework/ThirdParty/Alisms.js +47 -0
  135. package/lib/Framework/ThirdParty/Alisms.js.map +1 -0
  136. package/lib/Framework/ThirdParty/AppleTool.d.ts +131 -0
  137. package/lib/Framework/ThirdParty/AppleTool.js +235 -0
  138. package/lib/Framework/ThirdParty/AppleTool.js.map +1 -0
  139. package/lib/Framework/ThirdParty/EmailTool.d.ts +5 -0
  140. package/lib/Framework/ThirdParty/EmailTool.js +34 -0
  141. package/lib/Framework/ThirdParty/EmailTool.js.map +1 -0
  142. package/lib/Framework/ThirdParty/OpenSocial.d.ts +7 -0
  143. package/lib/Framework/ThirdParty/OpenSocial.js +33 -0
  144. package/lib/Framework/ThirdParty/OpenSocial.js.map +1 -0
  145. package/lib/Framework/ThirdParty/QQTool.d.ts +41 -0
  146. package/lib/Framework/ThirdParty/QQTool.js +116 -0
  147. package/lib/Framework/ThirdParty/QQTool.js.map +1 -0
  148. package/lib/Framework/ThirdParty/QiniuTool.d.ts +6 -0
  149. package/lib/Framework/ThirdParty/QiniuTool.js +22 -0
  150. package/lib/Framework/ThirdParty/QiniuTool.js.map +1 -0
  151. package/lib/Framework/ThirdParty/WechatOATool.d.ts +13 -0
  152. package/lib/Framework/ThirdParty/WechatOATool.js +62 -0
  153. package/lib/Framework/ThirdParty/WechatOATool.js.map +1 -0
  154. package/lib/Framework/ThirdParty/WechatTool.d.ts +20 -0
  155. package/lib/Framework/ThirdParty/WechatTool.js +75 -0
  156. package/lib/Framework/ThirdParty/WechatTool.js.map +1 -0
  157. package/lib/Framework/WebServer/Controller/BaseController.d.ts +33 -0
  158. package/lib/Framework/WebServer/Controller/BaseController.js +113 -0
  159. package/lib/Framework/WebServer/Controller/BaseController.js.map +1 -0
  160. package/lib/Framework/WebServer/Controller/BaseUserController.d.ts +26 -0
  161. package/lib/Framework/WebServer/Controller/BaseUserController.js +169 -0
  162. package/lib/Framework/WebServer/Controller/BaseUserController.js.map +1 -0
  163. package/lib/Framework/WebServer/Controller/MongoBaseUserController.d.ts +26 -0
  164. package/lib/Framework/WebServer/Controller/MongoBaseUserController.js +169 -0
  165. package/lib/Framework/WebServer/Controller/MongoBaseUserController.js.map +1 -0
  166. package/lib/Framework/WebServer/Decorator/AdminValidate.d.ts +1 -0
  167. package/lib/Framework/WebServer/Decorator/AdminValidate.js +20 -0
  168. package/lib/Framework/WebServer/Decorator/AdminValidate.js.map +1 -0
  169. package/lib/Framework/WebServer/Decorator/AuthorityValidate.d.ts +2 -0
  170. package/lib/Framework/WebServer/Decorator/AuthorityValidate.js +23 -0
  171. package/lib/Framework/WebServer/Decorator/AuthorityValidate.js.map +1 -0
  172. package/lib/Framework/WebServer/Decorator/CreatorValidate.d.ts +1 -0
  173. package/lib/Framework/WebServer/Decorator/CreatorValidate.js +20 -0
  174. package/lib/Framework/WebServer/Decorator/CreatorValidate.js.map +1 -0
  175. package/lib/Framework/WebServer/Decorator/JsonAdminValidate.d.ts +1 -0
  176. package/lib/Framework/WebServer/Decorator/JsonAdminValidate.js +16 -0
  177. package/lib/Framework/WebServer/Decorator/JsonAdminValidate.js.map +1 -0
  178. package/lib/Framework/WebServer/Decorator/JsonAuthorityValidate.d.ts +2 -0
  179. package/lib/Framework/WebServer/Decorator/JsonAuthorityValidate.js +21 -0
  180. package/lib/Framework/WebServer/Decorator/JsonAuthorityValidate.js.map +1 -0
  181. package/lib/Framework/WebServer/Decorator/JsonCreatorValidate.d.ts +1 -0
  182. package/lib/Framework/WebServer/Decorator/JsonCreatorValidate.js +20 -0
  183. package/lib/Framework/WebServer/Decorator/JsonCreatorValidate.js.map +1 -0
  184. package/lib/Framework/WebServer/Engine/ControllerManager.d.ts +21 -0
  185. package/lib/Framework/WebServer/Engine/ControllerManager.js +113 -0
  186. package/lib/Framework/WebServer/Engine/ControllerManager.js.map +1 -0
  187. package/lib/Framework/WebServer/Engine/Engine.d.ts +21 -0
  188. package/lib/Framework/WebServer/Engine/Engine.js +135 -0
  189. package/lib/Framework/WebServer/Engine/Engine.js.map +1 -0
  190. package/lib/Framework/WebServer/Engine/RazorJs.d.ts +21 -0
  191. package/lib/Framework/WebServer/Engine/RazorJs.js +545 -0
  192. package/lib/Framework/WebServer/Engine/RazorJs.js.map +1 -0
  193. package/lib/Framework/WebServer/Engine/Request.d.ts +35 -0
  194. package/lib/Framework/WebServer/Engine/Request.js +215 -0
  195. package/lib/Framework/WebServer/Engine/Request.js.map +1 -0
  196. package/lib/Framework/WebServer/Engine/Response.d.ts +28 -0
  197. package/lib/Framework/WebServer/Engine/Response.js +95 -0
  198. package/lib/Framework/WebServer/Engine/Response.js.map +1 -0
  199. package/lib/Framework/WebServer/IWebServer.d.ts +20 -0
  200. package/lib/Framework/WebServer/IWebServer.js +50 -0
  201. package/lib/Framework/WebServer/IWebServer.js.map +1 -0
  202. package/lib/index.d.ts +4 -0
  203. package/lib/index.js +8 -0
  204. package/lib/index.js.map +1 -0
  205. package/package.json +1 -1
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GEmailTool = void 0;
4
+ const nodeMailer = require("nodemailer");
5
+ const Log_1 = require("../Logic/Log");
6
+ const FrameworkConfig_1 = require("../Config/FrameworkConfig");
7
+ exports.GEmailTool = null;
8
+ class EmailTool {
9
+ send(to, subject, html) {
10
+ return new Promise((resolve, reject) => {
11
+ let transport = nodeMailer.createTransport({
12
+ host: FrameworkConfig_1.GFCfg.third_cfg.email.host,
13
+ port: FrameworkConfig_1.GFCfg.third_cfg.email.port,
14
+ secure: FrameworkConfig_1.GFCfg.third_cfg.email.secure,
15
+ auth: {
16
+ user: FrameworkConfig_1.GFCfg.third_cfg.email.auth.user,
17
+ pass: FrameworkConfig_1.GFCfg.third_cfg.email.auth.pass
18
+ }
19
+ });
20
+ let mail = {
21
+ from: FrameworkConfig_1.GFCfg.third_cfg.email.from,
22
+ to: to,
23
+ subject: subject,
24
+ html: html
25
+ };
26
+ transport.sendMail(mail, (_err, msg) => {
27
+ Log_1.GLog.error(JSON.stringify(_err));
28
+ resolve(_err);
29
+ });
30
+ });
31
+ }
32
+ }
33
+ exports.GEmailTool = new EmailTool();
34
+ //# sourceMappingURL=EmailTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EmailTool.js","sourceRoot":"","sources":["../../../Framework/ThirdParty/EmailTool.ts"],"names":[],"mappings":";;;AACA,yCAAyC;AACzC,sCAAoC;AACpC,+DAAkD;AACvC,QAAA,UAAU,GAAW,IAAI,CAAA;AACpC,MAAM,SAAS;IAEX,IAAI,CAAC,EAAS,EAAC,OAAc,EAAC,IAAW;QAErC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAC,MAAM,EAAC,EAAE;YAEjC,IAAI,SAAS,GAAG,UAAU,CAAC,eAAe,CAAC;gBACnC,IAAI,EAAE,uBAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI;gBAChC,IAAI,EAAE,uBAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI;gBAChC,MAAM,EAAE,uBAAK,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM;gBACpC,IAAI,EACJ;oBACI,IAAI,EAAE,uBAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI;oBACrC,IAAI,EAAE,uBAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI;iBACxC;aACR,CAAC,CAAA;YACF,IAAI,IAAI,GACR;gBACI,IAAI,EAAE,uBAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI;gBAChC,EAAE,EAAE,EAAE;gBACN,OAAO,EAAE,OAAO;gBAChB,IAAI,EAAE,IAAI;aACb,CAAA;YACD,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAC,CAAC,IAAI,EAAC,GAAG,EAAC,EAAE;gBAEhC,UAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAA;gBAChC,OAAO,CAAC,IAAI,CAAC,CAAA;YACjB,CAAC,CAAC,CAAA;QACN,CAAC,CAAC,CAAA;IACN,CAAC;CACJ;AACD,kBAAU,GAAG,IAAI,SAAS,EAAE,CAAA"}
@@ -0,0 +1,7 @@
1
+ export declare let GOpenSocial: OpenSocial;
2
+ declare class OpenSocial {
3
+ protected _getNewMsg(): any;
4
+ getUser(unionid: string, openid: string): Promise<any>;
5
+ updatePwd(unionid: string, openid: string, new_pwd: string): Promise<any>;
6
+ }
7
+ export {};
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GOpenSocial = void 0;
4
+ const HttpTool_1 = require("../Logic/HttpTool");
5
+ const FrameworkConfig_1 = require("../Config/FrameworkConfig");
6
+ exports.GOpenSocial = null;
7
+ class OpenSocial {
8
+ _getNewMsg() {
9
+ return {
10
+ app_id: FrameworkConfig_1.GFCfg.third_cfg.open_social.app_id,
11
+ app_secret: FrameworkConfig_1.GFCfg.third_cfg.open_social.app_secret
12
+ };
13
+ }
14
+ async getUser(unionid, openid) {
15
+ let msg = {
16
+ unionid: unionid,
17
+ openid: openid
18
+ };
19
+ let rs = await HttpTool_1.GHttpTool.httpPost(FrameworkConfig_1.GFCfg.third_cfg.open_social.user_url, msg);
20
+ return rs.body;
21
+ }
22
+ async updatePwd(unionid, openid, new_pwd) {
23
+ let msg = {
24
+ unionid: unionid,
25
+ openid: openid,
26
+ password: new_pwd
27
+ };
28
+ let jsonData = await HttpTool_1.GHttpTool.httpPost(FrameworkConfig_1.GFCfg.third_cfg.open_social.update_pwd_url, msg);
29
+ return jsonData.body || jsonData.error;
30
+ }
31
+ }
32
+ exports.GOpenSocial = new OpenSocial();
33
+ //# sourceMappingURL=OpenSocial.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpenSocial.js","sourceRoot":"","sources":["../../../Framework/ThirdParty/OpenSocial.ts"],"names":[],"mappings":";;;AAAA,gDAA8C;AAC9C,+DAAkD;AAEvC,QAAA,WAAW,GAAY,IAAI,CAAA;AACtC,MAAM,UAAU;IAEF,UAAU;QAEhB,OAAO;YACH,MAAM,EAAC,uBAAK,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM;YACzC,UAAU,EAAC,uBAAK,CAAC,SAAS,CAAC,WAAW,CAAC,UAAU;SACpD,CAAA;IACL,CAAC;IACD,KAAK,CAAC,OAAO,CAAC,OAAc,EAAC,MAAa;QAEtC,IAAI,GAAG,GACP;YACI,OAAO,EAAC,OAAO;YACf,MAAM,EAAC,MAAM;SAChB,CAAA;QACD,IAAI,EAAE,GAAC,MAAM,oBAAS,CAAC,QAAQ,CAAC,uBAAK,CAAC,SAAS,CAAC,WAAW,CAAC,QAAQ,EAAC,GAAG,CAAC,CAAA;QACzE,OAAO,EAAE,CAAC,IAAI,CAAA;IAClB,CAAC;IACD,KAAK,CAAC,SAAS,CAAC,OAAc,EAAC,MAAa,EAAC,OAAc;QAEvD,IAAI,GAAG,GACP;YACI,OAAO,EAAC,OAAO;YACf,MAAM,EAAC,MAAM;YACb,QAAQ,EAAC,OAAO;SACnB,CAAA;QACD,IAAI,QAAQ,GAAG,MAAM,oBAAS,CAAC,QAAQ,CAAC,uBAAK,CAAC,SAAS,CAAC,WAAW,CAAC,cAAc,EAAC,GAAG,CAAC,CAAA;QACvF,OAAO,QAAQ,CAAC,IAAI,IAAE,QAAQ,CAAC,KAAK,CAAA;IACxC,CAAC;CACJ;AACD,mBAAW,GAAG,IAAI,UAAU,EAAE,CAAA"}
@@ -0,0 +1,41 @@
1
+ export declare class QQUserInfo {
2
+ ret: number;
3
+ msg: string;
4
+ is_lost: number;
5
+ nickname: string;
6
+ gender: string;
7
+ province: string;
8
+ city: string;
9
+ year: string;
10
+ constellation: string;
11
+ figureurl: string;
12
+ figureurl_1: string;
13
+ figureurl_2: string;
14
+ figureurl_qq_1: string;
15
+ figureurl_qq_2: string;
16
+ figureurl_qq: string;
17
+ figureurl_type: string;
18
+ is_yellow_vip: "";
19
+ vip: string;
20
+ yellow_vip_level: string;
21
+ level: string;
22
+ is_yellow_year_vip: string;
23
+ }
24
+ export declare let GQQTool: QQTool;
25
+ export declare class QQTool {
26
+ /**
27
+ * 获取Authorization Code
28
+ * @param scope 可选 请求用户授权时向用户显示的可进行授权的列表。
29
+ 可填写的值是API文档中列出的接口,以及一些动作型的授权(目前仅有:do_like),如果要填写多个接口名称,请用逗号隔开。
30
+ 例如:scope=get_user_info,list_album,upload_pic,do_like
31
+ 不传则默认请求对接口get_user_info进行授权。
32
+ 建议控制授权项的数量,只传入必要的接口名称,因为授权项越多,用户越可能拒绝进行任何授权。
33
+ * @param display 仅PC网站接入时使用。
34
+ 用于展示的样式。不传则默认展示为PC下的样式。
35
+ 如果传入“mobile”,则展示为mobile端下的样式。
36
+ */
37
+ getAuthCodeUrl(scope?: string, display?: string): string;
38
+ getAccessToken(auth_code: string): Promise<string>;
39
+ getOpenId(access_token: string): Promise<string>;
40
+ getUserInfo(access_token: string, openid: string): Promise<QQUserInfo>;
41
+ }
@@ -0,0 +1,116 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.QQTool = exports.GQQTool = exports.QQUserInfo = void 0;
4
+ const _ = require("underscore");
5
+ const URLEncode = require("urlencode");
6
+ const HttpTool_1 = require("../Logic/HttpTool");
7
+ const FrameworkConfig_1 = require("../Config/FrameworkConfig");
8
+ const Log_1 = require("../Logic/Log");
9
+ class QQUserInfo {
10
+ ret = 0;
11
+ msg = "";
12
+ is_lost = 0;
13
+ nickname = "";
14
+ gender = ""; //"男"
15
+ province = ""; //"四川"
16
+ city = ""; //"成都"
17
+ year = ""; //"1988"
18
+ constellation = "";
19
+ figureurl = ""; //http://qzapp.qlogo.cn/qzapp/101775753/B5EA2E2138715A07DE91B5BACBA0CCE5/30
20
+ figureurl_1 = ""; //http://qzapp.qlogo.cn/qzapp/101775753/B5EA2E2138715A07DE91B5BACBA0CCE5/50
21
+ figureurl_2 = ""; //http://qzapp.qlogo.cn/qzapp/101775753/B5EA2E2138715A07DE91B5BACBA0CCE5/100
22
+ figureurl_qq_1 = ""; //http://thirdqq.qlogo.cn/g?b=oidb&k=jgOibQ4eLHDBT57oAib1DrOg&s=40&t=1556419177
23
+ figureurl_qq_2 = ""; //http://thirdqq.qlogo.cn/g?b=oidb&k=jgOibQ4eLHDBT57oAib1DrOg&s=100&t=1556419177
24
+ figureurl_qq = ""; //http://thirdqq.qlogo.cn/g?b=oidb&k=jgOibQ4eLHDBT57oAib1DrOg&s=140&t=1556419177
25
+ figureurl_type = ""; //"1"
26
+ is_yellow_vip; //"0"
27
+ vip = ""; //"0"
28
+ yellow_vip_level = ""; //"0"
29
+ level = ""; //"0"
30
+ is_yellow_year_vip = ""; //"0"
31
+ }
32
+ exports.QQUserInfo = QQUserInfo;
33
+ exports.GQQTool = null;
34
+ class QQTool {
35
+ /**
36
+ * 获取Authorization Code
37
+ * @param scope 可选 请求用户授权时向用户显示的可进行授权的列表。
38
+ 可填写的值是API文档中列出的接口,以及一些动作型的授权(目前仅有:do_like),如果要填写多个接口名称,请用逗号隔开。
39
+ 例如:scope=get_user_info,list_album,upload_pic,do_like
40
+ 不传则默认请求对接口get_user_info进行授权。
41
+ 建议控制授权项的数量,只传入必要的接口名称,因为授权项越多,用户越可能拒绝进行任何授权。
42
+ * @param display 仅PC网站接入时使用。
43
+ 用于展示的样式。不传则默认展示为PC下的样式。
44
+ 如果传入“mobile”,则展示为mobile端下的样式。
45
+ */
46
+ getAuthCodeUrl(scope, display) {
47
+ //必须 成功授权后的回调地址,必须是注册appid时填写的主域名下的地址,建议设置为网站首页或网站的用户中心
48
+ let redirect_uri = URLEncode.encode(FrameworkConfig_1.GFCfg.third_cfg.qq.redirect_uri);
49
+ //必须 申请QQ登录成功后,分配给应用的appid。
50
+ let client_id = FrameworkConfig_1.GFCfg.third_cfg.qq.app_id;
51
+ //必须 授权类型,此值固定为“code”。
52
+ let response_type = "code";
53
+ //必须 client端的状态值。用于第三方应用防止CSRF攻击,成功授权后回调时会原样带回。请务必严格按照流程检查用户与state参数状态的绑定。
54
+ let state = _.random(1000000, 9999999);
55
+ //PC网站
56
+ let url = "https://graph.qq.com/oauth2.0/authorize?redirect_uri=" + redirect_uri + "&response_type=" + response_type + "&state=" + state + "&client_id=" + client_id;
57
+ if (scope) {
58
+ url += "&scope=" + scope;
59
+ }
60
+ if (display) {
61
+ url += "&display=" + display;
62
+ }
63
+ return url;
64
+ }
65
+ async getAccessToken(auth_code) {
66
+ if (!auth_code) {
67
+ return null;
68
+ }
69
+ //必须 授权类型,在本步骤中,此值为“authorization_code”。
70
+ let grant_type = "authorization_code";
71
+ //必须 申请QQ登录成功后,分配给应用的appid。
72
+ let client_id = FrameworkConfig_1.GFCfg.third_cfg.qq.app_id;
73
+ //必须 申请QQ登录成功后,分配给网站的appkey。
74
+ let client_secret = FrameworkConfig_1.GFCfg.third_cfg.qq.app_key;
75
+ //必须 成功授权后的回调地址,必须是注册appid时填写的主域名下的地址,建议设置为网站首页或网站的用户中心
76
+ let redirect_uri = URLEncode.encode(FrameworkConfig_1.GFCfg.third_cfg.qq.redirect_uri);
77
+ let url = "https://graph.qq.com/oauth2.0/token?code=" + auth_code + "&grant_type=" + grant_type + "&client_id=" + client_id + "&client_secret=" + client_secret + "&redirect_uri=" + redirect_uri;
78
+ let rs = await HttpTool_1.GHttpTool.httpRequest(url);
79
+ if (rs.body && rs.body.access_token) {
80
+ return rs.body.access_token;
81
+ }
82
+ else {
83
+ Log_1.GLog.error(rs.body);
84
+ }
85
+ return null;
86
+ }
87
+ async getOpenId(access_token) {
88
+ let url = "https://graph.qq.com/oauth2.0/me?access_token=" + access_token;
89
+ let rs = await HttpTool_1.GHttpTool.httpRequest(url);
90
+ let body = rs.response ? rs.response.body : null;
91
+ if (body) {
92
+ body = body.replace("callback( ", "");
93
+ body = body.replace(" );\n", "");
94
+ try {
95
+ body = JSON.parse(body);
96
+ }
97
+ catch (e) { }
98
+ if (!body.openid) {
99
+ Log_1.GLog.error(rs.response.body);
100
+ }
101
+ return body.openid;
102
+ }
103
+ return null;
104
+ }
105
+ async getUserInfo(access_token, openid) {
106
+ let url = "https://graph.qq.com/user/get_user_info?access_token=" + access_token + "&oauth_consumer_key=" + FrameworkConfig_1.GFCfg.third_cfg.qq.app_id + "&openid=" + openid;
107
+ let rs = await HttpTool_1.GHttpTool.httpRequest(url);
108
+ if (rs.body) {
109
+ return rs.body;
110
+ }
111
+ return null;
112
+ }
113
+ }
114
+ exports.QQTool = QQTool;
115
+ exports.GQQTool = new QQTool();
116
+ //# sourceMappingURL=QQTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QQTool.js","sourceRoot":"","sources":["../../../Framework/ThirdParty/QQTool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export declare let GQiniuTool: QiniuTool;
2
+ declare class QiniuTool {
3
+ get host(): string;
4
+ getUploadToken(filename: any): string;
5
+ }
6
+ export {};
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GQiniuTool = void 0;
4
+ const qiniu = require("qiniu");
5
+ const FrameworkConfig_1 = require("../Config/FrameworkConfig");
6
+ exports.GQiniuTool = null;
7
+ class QiniuTool {
8
+ get host() {
9
+ return FrameworkConfig_1.GFCfg.third_cfg.qiniu.host;
10
+ }
11
+ getUploadToken(filename) {
12
+ let mac = new qiniu.auth.digest.Mac(FrameworkConfig_1.GFCfg.third_cfg.qiniu.accessKey, FrameworkConfig_1.GFCfg.third_cfg.qiniu.secretKey);
13
+ let options = {
14
+ scope: FrameworkConfig_1.GFCfg.third_cfg.qiniu.bucket + ":" + filename,
15
+ };
16
+ let putPolicy = new qiniu.rs.PutPolicy(options);
17
+ let uploadToken = putPolicy.uploadToken(mac);
18
+ return uploadToken;
19
+ }
20
+ }
21
+ exports.GQiniuTool = new QiniuTool();
22
+ //# sourceMappingURL=QiniuTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QiniuTool.js","sourceRoot":"","sources":["../../../Framework/ThirdParty/QiniuTool.ts"],"names":[],"mappings":";;;AAAA,+BAA+B;AAC/B,+DAAkD;AAEvC,QAAA,UAAU,GAAa,IAAI,CAAA;AACtC,MAAM,SAAS;IAEX,IAAI,IAAI;QAEJ,OAAO,uBAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAA;IACrC,CAAC;IACD,cAAc,CAAC,QAAQ;QAEnB,IAAI,GAAG,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,uBAAK,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE,uBAAK,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QACrG,IAAI,OAAO,GACX;YACI,KAAK,EAAE,uBAAK,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,GAAC,GAAG,GAAC,QAAQ;SACnD,CAAA;QACD,IAAI,SAAS,GAAG,IAAI,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;QAC/C,IAAI,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;QAC5C,OAAO,WAAW,CAAA;IACtB,CAAC;CACJ;AACD,kBAAU,GAAG,IAAI,SAAS,EAAE,CAAA"}
@@ -0,0 +1,13 @@
1
+ export declare class WechatOAMsg {
2
+ toUserName: string;
3
+ fromUserName: string;
4
+ createTime: number;
5
+ msgType: string;
6
+ content: string;
7
+ msgId: number;
8
+ }
9
+ export declare let GWechatOATool: WechatOATool;
10
+ export declare class WechatOATool {
11
+ convertMsg(xmlStr: string): WechatOAMsg;
12
+ toReplyXmlStr(msg: WechatOAMsg): string;
13
+ }
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WechatOATool = exports.GWechatOATool = exports.WechatOAMsg = void 0;
4
+ //OA=offical account公众号
5
+ class WechatOAMsg {
6
+ // <xml>
7
+ // <ToUserName><![CDATA[toUser]]></ToUserName>
8
+ // <FromUserName><![CDATA[fromUser]]></FromUserName>
9
+ // <CreateTime>1348831860</CreateTime>
10
+ // <MsgType><![CDATA[text]]></MsgType>
11
+ // <Content><![CDATA[this is a test]]></Content>
12
+ // <MsgId>1234567890123456</MsgId>
13
+ // </xml>
14
+ toUserName = "";
15
+ fromUserName = ""; //其实是一个userid
16
+ createTime = -1;
17
+ msgType = ""; //text文本
18
+ content = "";
19
+ msgId = -1; //只有收到消息才会有
20
+ }
21
+ exports.WechatOAMsg = WechatOAMsg;
22
+ exports.GWechatOATool = null;
23
+ class WechatOATool {
24
+ convertMsg(xmlStr) {
25
+ if (!xmlStr) {
26
+ return null;
27
+ }
28
+ let msg = new WechatOAMsg();
29
+ let pre = "<ToUserName><![CDATA[";
30
+ xmlStr = xmlStr.substr(xmlStr.indexOf(pre) + pre.length);
31
+ msg.toUserName = xmlStr.substr(0, xmlStr.indexOf("]"));
32
+ pre = "<FromUserName><![CDATA[";
33
+ xmlStr = xmlStr.substr(xmlStr.indexOf(pre) + pre.length);
34
+ msg.fromUserName = xmlStr.substr(0, xmlStr.indexOf("]"));
35
+ pre = "<CreateTime>";
36
+ xmlStr = xmlStr.substr(xmlStr.indexOf(pre) + pre.length);
37
+ msg.createTime = parseInt(xmlStr.substr(0, xmlStr.indexOf("<")));
38
+ pre = "<MsgType><![CDATA[";
39
+ xmlStr = xmlStr.substr(xmlStr.indexOf(pre) + pre.length);
40
+ msg.msgType = xmlStr.substr(0, xmlStr.indexOf("]"));
41
+ pre = "<Content><![CDATA[";
42
+ xmlStr = xmlStr.substr(xmlStr.indexOf(pre) + pre.length);
43
+ msg.content = xmlStr.substr(0, xmlStr.indexOf("]"));
44
+ pre = "<MsgId>";
45
+ xmlStr = xmlStr.substr(xmlStr.indexOf(pre) + pre.length);
46
+ msg.msgId = parseInt(xmlStr.substr(0, xmlStr.indexOf("<")));
47
+ return msg;
48
+ }
49
+ toReplyXmlStr(msg) {
50
+ let xmlStr = "<xml>";
51
+ xmlStr += "<ToUserName><![CDATA[" + msg.toUserName + "]]></ToUserName>";
52
+ xmlStr += "<FromUserName><![CDATA[" + msg.fromUserName + "]]></FromUserName>";
53
+ xmlStr += "<CreateTime>" + msg.createTime + "</CreateTime>";
54
+ xmlStr += "<MsgType><![CDATA[" + msg.msgType + "]]></MsgType>";
55
+ xmlStr += "<Content><![CDATA[" + msg.content + "]]></Content>";
56
+ xmlStr += "</xml>";
57
+ return xmlStr;
58
+ }
59
+ }
60
+ exports.WechatOATool = WechatOATool;
61
+ exports.GWechatOATool = new WechatOATool();
62
+ //# sourceMappingURL=WechatOATool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WechatOATool.js","sourceRoot":"","sources":["../../../Framework/ThirdParty/WechatOATool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ export declare class WechatUserInfo {
2
+ openid: string;
3
+ nickname: string;
4
+ sex: number;
5
+ province: string;
6
+ city: string;
7
+ country: string;
8
+ headimgurl: string;
9
+ privilege: string[];
10
+ unionid: string;
11
+ }
12
+ export declare let GWechatTool: WechatTool;
13
+ export declare class WechatTool {
14
+ /**
15
+ * 获取获取code的url
16
+ */
17
+ getAuthCodeUrl(): string;
18
+ getAccessInfo(auth_code: string): Promise<any>;
19
+ getUserInfo(access_token: string, openid: string): Promise<WechatUserInfo>;
20
+ }
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WechatTool = exports.GWechatTool = exports.WechatUserInfo = void 0;
4
+ const _ = require("underscore");
5
+ const URLEncode = require("urlencode");
6
+ const HttpTool_1 = require("../Logic/HttpTool");
7
+ const FrameworkConfig_1 = require("../Config/FrameworkConfig");
8
+ const Log_1 = require("../Logic/Log");
9
+ class WechatUserInfo {
10
+ openid = "OPENID";
11
+ nickname = "NICKNAME";
12
+ sex = 1;
13
+ province = "PROVINCE";
14
+ city = "CITY";
15
+ country = "COUNTRY";
16
+ headimgurl = "http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0";
17
+ privilege = [
18
+ "PRIVILEGE1",
19
+ "PRIVILEGE2"
20
+ ];
21
+ unionid = "o6_bmasdasdsad6_2sgVt7hMZOPfL";
22
+ }
23
+ exports.WechatUserInfo = WechatUserInfo;
24
+ exports.GWechatTool = null;
25
+ class WechatTool {
26
+ /**
27
+ * 获取获取code的url
28
+ */
29
+ getAuthCodeUrl() {
30
+ let appid = "wx80f0f10fe1304e9d";
31
+ let url = "https://open.weixin.qq.com/connect/qrconnect?appid=" + FrameworkConfig_1.GFCfg.third_cfg.wechat.app_id;
32
+ url += "&redirect_uri=" + URLEncode.encode(FrameworkConfig_1.GFCfg.third_cfg.wechat.redirect_uri);
33
+ url += "&response_type=code&scope=snsapi_login";
34
+ //必须 client端的状态值。用于第三方应用防止CSRF攻击,成功授权后回调时会原样带回。请务必严格按照流程检查用户与state参数状态的绑定。
35
+ let state = _.random(1000000, 9999999);
36
+ url += "&state=" + state;
37
+ return url;
38
+ }
39
+ async getAccessInfo(auth_code) {
40
+ if (!auth_code) {
41
+ return null;
42
+ }
43
+ let url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + FrameworkConfig_1.GFCfg.third_cfg.wechat.app_id + "&secret=" + FrameworkConfig_1.GFCfg.third_cfg.wechat.app_key + "&code=" + auth_code + "&grant_type=authorization_code";
44
+ let rs = await HttpTool_1.GHttpTool.httpRequest(url);
45
+ /*
46
+ {
47
+ "access_token":"ACCESS_TOKEN",
48
+ "expires_in":7200,
49
+ "refresh_token":"REFRESH_TOKEN",
50
+ "openid":"OPENID",
51
+ "scope":"SCOPE",
52
+ "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
53
+ }
54
+ {"errcode":40029,"errmsg":"invalid code"}
55
+ */
56
+ if (rs.body && rs.body.access_token) {
57
+ return rs.body;
58
+ }
59
+ else {
60
+ Log_1.GLog.error(rs.body);
61
+ }
62
+ return null;
63
+ }
64
+ async getUserInfo(access_token, openid) {
65
+ let url = "https://api.weixin.qq.com/sns/userinfo?access_token=" + access_token + "&openid=" + openid;
66
+ let rs = await HttpTool_1.GHttpTool.httpRequest(url);
67
+ if (rs.body) {
68
+ return rs.body;
69
+ }
70
+ return null;
71
+ }
72
+ }
73
+ exports.WechatTool = WechatTool;
74
+ exports.GWechatTool = new WechatTool();
75
+ //# sourceMappingURL=WechatTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WechatTool.js","sourceRoot":"","sources":["../../../Framework/ThirdParty/WechatTool.ts"],"names":[],"mappings":";;;AAAA,gCAAgC;AAChC,uCAAuC;AACvC,gDAA8C;AAC9C,+DAAkD;AAClD,sCAAoC;AAEpC,MAAa,cAAc;IAEvB,MAAM,GAAC,QAAQ,CAAA;IACf,QAAQ,GAAC,UAAU,CAAA;IACnB,GAAG,GAAC,CAAC,CAAA;IACL,QAAQ,GAAC,UAAU,CAAA;IACnB,IAAI,GAAC,MAAM,CAAA;IACX,OAAO,GAAC,SAAS,CAAA;IACjB,UAAU,GAAE,qIAAqI,CAAA;IACjJ,SAAS,GAAC;QACN,YAAY;QACZ,YAAY;KACf,CAAA;IACD,OAAO,GAAC,+BAA+B,CAAA;CAC1C;AAdD,wCAcC;AAEU,QAAA,WAAW,GAAY,IAAI,CAAA;AACtC,MAAa,UAAU;IAEnB;;OAEG;IACH,cAAc;QAEV,IAAI,KAAK,GAAC,oBAAoB,CAAA;QAC9B,IAAI,GAAG,GAAG,qDAAqD,GAAE,uBAAK,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAA;QAC9F,GAAG,IAAE,gBAAgB,GAAC,SAAS,CAAC,MAAM,CAAC,uBAAK,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;QAC3E,GAAG,IAAE,wCAAwC,CAAA;QAC7C,0EAA0E;QAC1E,IAAI,KAAK,GAAC,CAAC,CAAC,MAAM,CAAC,OAAO,EAAC,OAAO,CAAC,CAAA;QACnC,GAAG,IAAE,SAAS,GAAC,KAAK,CAAA;QACpB,OAAO,GAAG,CAAA;IACd,CAAC;IACD,KAAK,CAAC,aAAa,CAAC,SAAgB;QAEhC,IAAG,CAAC,SAAS,EACb;YACI,OAAO,IAAI,CAAA;SACd;QACD,IAAI,GAAG,GAAC,0DAA0D,GAAC,uBAAK,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,GAAC,UAAU,GAAC,uBAAK,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,GAAC,QAAQ,GAAC,SAAS,GAAC,gCAAgC,CAAA;QAC9L,IAAI,EAAE,GAAG,MAAM,oBAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;QACzC;;;;;;;;;;UAUE;QACF,IAAG,EAAE,CAAC,IAAI,IAAE,EAAE,CAAC,IAAI,CAAC,YAAY,EAChC;YACI,OAAO,EAAE,CAAC,IAAI,CAAA;SACjB;aAED;YACI,UAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA;SACtB;QACD,OAAO,IAAI,CAAA;IACf,CAAC;IACD,KAAK,CAAC,WAAW,CAAC,YAAmB,EAAC,MAAa;QAE/C,IAAI,GAAG,GAAG,sDAAsD,GAAC,YAAY,GAAC,UAAU,GAAC,MAAM,CAAA;QAC/F,IAAI,EAAE,GAAG,MAAM,oBAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;QACzC,IAAG,EAAE,CAAC,IAAI,EACV;YACI,OAAO,EAAE,CAAC,IAAI,CAAA;SACjB;QACD,OAAO,IAAI,CAAA;IACf,CAAC;CACJ;AAvDD,gCAuDC;AACD,mBAAW,GAAC,IAAI,UAAU,EAAE,CAAA"}
@@ -0,0 +1,33 @@
1
+ import { Engine } from './../Engine/Engine';
2
+ import { Request } from '../Engine/Request';
3
+ import { Response } from '../Engine/Response';
4
+ export declare class BaseController {
5
+ protected _request: Request;
6
+ get request(): Request;
7
+ protected _response: Response;
8
+ get response(): Response;
9
+ protected _module: string;
10
+ protected _ctr_name: string;
11
+ get ctrName(): string;
12
+ protected _engine: Engine;
13
+ get postData(): any;
14
+ get paramData(): any;
15
+ constructor(req: Request, res: Response, engine: Engine);
16
+ init(): Promise<void>;
17
+ /**
18
+ * 方便static ctr使用
19
+ * @param req
20
+ * @param res
21
+ * @param engine
22
+ */
23
+ initStatic(req: Request, res: Response, engine: Engine): void;
24
+ protected _init_data(model?: any): {
25
+ model: any;
26
+ };
27
+ showJson(model?: any): void;
28
+ show(model?: any): void;
29
+ showText(text: any, noMeta?: boolean): void;
30
+ redirect(module?: string, controller?: string, action?: string, params?: any): void;
31
+ parseFullUrl(module: string, controller: string, action: string): string;
32
+ get remoteHost(): string;
33
+ }
@@ -0,0 +1,113 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BaseController = void 0;
4
+ class BaseController {
5
+ _request = null;
6
+ get request() {
7
+ return this._request;
8
+ }
9
+ _response = null;
10
+ get response() {
11
+ return this._response;
12
+ }
13
+ //模块名称
14
+ _module = "";
15
+ _ctr_name = "";
16
+ get ctrName() {
17
+ return this._ctr_name;
18
+ }
19
+ _engine = null;
20
+ get postData() {
21
+ if (!this._request) {
22
+ return {};
23
+ }
24
+ return this._request.postData || {};
25
+ }
26
+ get paramData() {
27
+ if (!this._request) {
28
+ return {};
29
+ }
30
+ return this._request.params || {};
31
+ }
32
+ constructor(req, res, engine) {
33
+ this._engine = engine;
34
+ this._request = req;
35
+ this._response = res;
36
+ //静态控制器,传过来全是空
37
+ if (this._request) {
38
+ this._request.debugInfo();
39
+ }
40
+ }
41
+ async init() {
42
+ }
43
+ /**
44
+ * 方便static ctr使用
45
+ * @param req
46
+ * @param res
47
+ * @param engine
48
+ */
49
+ initStatic(req, res, engine) {
50
+ this._engine = engine;
51
+ this._request = req;
52
+ this._response = res;
53
+ this._request.debugInfo();
54
+ }
55
+ //填充每个页面需要的通用数据
56
+ _init_data(model) {
57
+ model = model || {};
58
+ model.webName = this._engine.cfg.web_name;
59
+ return { model };
60
+ }
61
+ showJson(model) {
62
+ this._response.renderJson(model, this._request.headers.origin);
63
+ }
64
+ show(model) {
65
+ let html = this._engine.getRenderHtml(this._request, this._response, this._init_data(model));
66
+ this._response.renderHtml(html);
67
+ }
68
+ showText(text, noMeta) {
69
+ if (!noMeta) {
70
+ text = "<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />" + text;
71
+ }
72
+ this._response.renderHtml(text);
73
+ }
74
+ redirect(module, controller, action, params) {
75
+ module = module || this._module;
76
+ controller = controller || this._ctr_name;
77
+ let url = this.parseFullUrl(module, controller, action);
78
+ params = params || {};
79
+ let str_p = "";
80
+ for (let key in params) {
81
+ str_p += "&" + key + "=" + params[key];
82
+ }
83
+ if (str_p.length > 0) {
84
+ str_p = "?" + str_p.substring(1);
85
+ }
86
+ url += str_p;
87
+ this._response.redirect(url);
88
+ }
89
+ parseFullUrl(module, controller, action) {
90
+ if (typeof action === "undefined" || !action) {
91
+ action = "index";
92
+ if (this._engine.cfg.routs.defaults.action == action) {
93
+ action = null;
94
+ }
95
+ }
96
+ let url = "";
97
+ if (this._engine.cfg.routs.onlyModule) {
98
+ url = this._request.root + "/" + controller;
99
+ }
100
+ else {
101
+ url = this._request.root + "/" + module + "/" + controller;
102
+ }
103
+ if (action) {
104
+ url += "/" + action;
105
+ }
106
+ return url;
107
+ }
108
+ get remoteHost() {
109
+ return this._request.remoteHost;
110
+ }
111
+ }
112
+ exports.BaseController = BaseController;
113
+ //# sourceMappingURL=BaseController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseController.js","sourceRoot":"","sources":["../../../../Framework/WebServer/Controller/BaseController.ts"],"names":[],"mappings":"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"}