mas-server 1.0.3 → 2.0.0
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.
- package/.temp/a.ts +4 -0
- package/.temp/as.ts +1 -0
- package/.temp/b.ts +3 -0
- package/{src/index.js → .temp/i.js} +3 -3
- package/.temp/test.ts +2 -0
- package/.temp/validType copy.ts +149 -0
- package/.temp/validType.ts +96 -0
- package/.temp/validTypeOptimize.ts +98 -0
- package/.vscode/settings.json +0 -109
- package/dist/index.js +136 -0
- package/dist/masmysql/checkSqlkey.js +67 -0
- package/dist/masmysql/createSqlForm.js +44 -0
- package/dist/masmysql/esaysql.js +53 -0
- package/dist/masmysql/index.js +111 -0
- package/dist/masmysql/masSql.js +741 -0
- package/dist/masmysql/state.js +5 -0
- package/dist/masmysql/type.js +2 -0
- package/dist/masmysql/utils.js +12 -0
- package/dist/state.js +4 -0
- package/dist/typings/index.js +2 -0
- package/dist/utils/apiDoc.js +18 -0
- package/dist/utils/getLog.js +18 -0
- package/dist/utils/getRouteByApiSrc.js +54 -0
- package/dist/utils/masUtils.js +12 -0
- package/dist/utils/meaToken.js +57 -0
- package/dist/utils/quickSend.js +32 -0
- package/dist/utils/readApi.js +50 -0
- package/dist/utils/validRouteData.js +37 -0
- package/dist/utils/validToken.js +24 -0
- package/dist/utils/validType.js +101 -0
- package/package.json +34 -15
- package/src/apiDoc/assets/empty-907982e4.js +1 -0
- package/src/apiDoc/assets/index-b56e6bc6.js +1414 -0
- package/src/apiDoc/assets/index-bb16d834.css +6 -0
- package/src/{public/doc/img/jsoneditor-icons.256e3abc.svg → apiDoc/assets/jsoneditor-icons-45c98bf0.svg} +213 -357
- package/src/apiDoc/favicon.ico +0 -0
- package/src/apiDoc/index.html +15 -0
- package/src/index.ts +132 -0
- package/src/masmysql/checkSqlkey.ts +55 -0
- package/src/masmysql/createSqlForm.ts +37 -0
- package/src/masmysql/esaysql.ts +44 -0
- package/src/masmysql/index.ts +68 -0
- package/src/masmysql/masSql.ts +736 -0
- package/src/masmysql/state.ts +5 -0
- package/src/masmysql/type.ts +34 -0
- package/src/masmysql/utils.ts +8 -0
- package/src/state.ts +1 -0
- package/src/typings/index.ts +114 -0
- package/src/utils/apiDoc.ts +18 -0
- package/src/utils/getLog.ts +20 -0
- package/src/utils/getRouteByApiSrc.ts +55 -0
- package/src/utils/mas-encrypt.min.js +1 -0
- package/src/utils/masUtils.ts +8 -0
- package/src/utils/meaToken.ts +56 -0
- package/src/utils/quickSend.ts +19 -0
- package/src/utils/readApi.ts +30 -0
- package/src/utils/validRouteData.ts +46 -0
- package/src/utils/validToken.ts +22 -0
- package/src/utils/validType.ts +98 -0
- package/test/apiTemplate/api.temp.ts +6 -0
- package/test/apiTemplate/curd/del.ts +9 -0
- package/test/apiTemplate/curd/get.ts +9 -0
- package/test/apiTemplate/curd/set.ts +9 -0
- package/test/config/api.config.ts +3 -0
- package/test/config/api.key.ts +14 -0
- package/test/config/config.ts +30 -0
- package/test/config/createSqlFormData.ts +14 -0
- package/test/logs/.keep +0 -0
- package/test/main.ts +25 -0
- package/test/scripts/beforeCreated.ts +67 -0
- package/test/scripts/createApiFile.ts +27 -0
- package/test/scripts/createApis.ts +109 -0
- package/test/scripts/createSqlForm.ts +5 -0
- package/test/scripts/getSqlFormType.ts +34 -0
- package/test/scripts/run.ts +4 -0
- package/test/scripts/updateRouter.ts +46 -0
- package/test/src/api/curd/student/del.ts +9 -0
- package/test/src/api/curd/student/get.ts +9 -0
- package/test/src/api/curd/student/set.ts +9 -0
- package/test/src/api/index.ts +4 -0
- package/test/src/api/per.ts +6 -0
- package/test/src/api/person/del.ts +4 -0
- package/test/src/api/person/get.ts +4 -0
- package/test/src/api/person/set.ts +4 -0
- package/test/src/api/test.ts +7 -0
- package/test/src/api/validtest/boolArr.ts +4 -0
- package/test/src/debug.ts +56 -0
- package/test/src/masState.ts +4 -0
- package/test/src/sql/selectStudent.ts +7 -0
- package/test/src/sqlform.json +1 -0
- package/test/test.ts +13 -0
- package/test/typings/.keep +0 -0
- package/test/typings/studentSF.ts +6 -0
- package/test/typings/test11SF.ts +1 -0
- package/test/typings/test22SF.ts +1 -0
- package/test/typings/testformSF.ts +1 -0
- package/test//345/276/205/345/274/200/345/217/221.md +12 -0
- package/tsconfig.json +23 -0
- package/tsconfigschema.json +1263 -0
- package/src/config/api.res.json +0 -1
- package/src/config/api.tree.json +0 -1
- package/src/config/apiModules/del.module +0 -6
- package/src/config/apiModules/get.module +0 -6
- package/src/config/apiModules/set.module +0 -6
- package/src/config/config.schema.js +0 -41
- package/src/public/doc/css/app.722f60c4.css +0 -1
- package/src/public/doc/css/chunk-287b9965.80548a4b.css +0 -1
- package/src/public/doc/css/chunk-vendors.a16c4353.css +0 -1
- package/src/public/doc/favicon.ico +0 -0
- package/src/public/doc/fonts/element-icons.535877f5.woff +0 -0
- package/src/public/doc/fonts/element-icons.732389de.ttf +0 -0
- package/src/public/doc/index.html +0 -1
- package/src/public/doc/js/app.9ce10690.js +0 -2
- package/src/public/doc/js/app.9ce10690.js.map +0 -1
- package/src/public/doc/js/chunk-287b9965.77cfd27f.js +0 -32
- package/src/public/doc/js/chunk-287b9965.77cfd27f.js.map +0 -1
- package/src/public/doc/js/chunk-vendors.7c84e9a7.js +0 -35
- package/src/public/doc/js/chunk-vendors.7c84e9a7.js.map +0 -1
- package/src/public/index.html +0 -15
- package/src/state.js +0 -6
- package/src/utils/DataVerified.js +0 -35
- package/src/utils/beforeCreate.js +0 -19
- package/src/utils/createApi.js +0 -34
- package/src/utils/createApiFile.js +0 -40
- package/src/utils/createSqlForm.js +0 -7
- package/src/utils/encrypt.js +0 -1
- package/src/utils/getDir.js +0 -60
- package/src/utils/logs.js +0 -16
- package/src/utils/masDoc.js +0 -37
- package/src/utils/masRoute.js +0 -29
- package/src/utils/quickSend.js +0 -18
- package/src/utils/token.js +0 -57
- package/test/.utils/api.js +0 -4
- package/test/.utils/apis.js +0 -5
- package/test/.utils/beforeIndex.js +0 -4
- package/test/.utils/createForm.js +0 -4
- package/test/config/api.config.json +0 -7
- package/test/config/api.config.k.json +0 -1
- package/test/config/config.js +0 -22
- package/test/config/sqlform.config.js +0 -23
- package/test/index.js +0 -12
- package/test/public/1.txt +0 -1
- package/test/serverLogs/2022-10-29.log +0 -6
- package/test/serverLogs/2022-10-30.log +0 -58
- package/test/src/$form.js +0 -1
- package/test/src/api/index.js +0 -3
- package/test/src/api/test.js +0 -9
- package/test/src/api/vip/del.js +0 -6
- package/test/src/api/vip/get.js +0 -6
- package/test/src/api/vip/set.js +0 -6
- package/test/src/api/vip666.js +0 -4
- package/test/src/debug.js +0 -2
- /package/{old → .temp/logs/.keep} +0 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export type createSqlForm = {
|
|
2
|
+
/** 字段名 */
|
|
3
|
+
key: string;
|
|
4
|
+
/** 字段类型 */
|
|
5
|
+
type: "str" | "int" | "float";
|
|
6
|
+
/** 字段长度 */
|
|
7
|
+
length?: number;
|
|
8
|
+
/** 是否不能为空 */
|
|
9
|
+
notNull?: boolean;
|
|
10
|
+
/** 字段描述 */
|
|
11
|
+
des?: string;
|
|
12
|
+
}[];
|
|
13
|
+
|
|
14
|
+
export type sqlForm = {
|
|
15
|
+
[key: string]: string[];
|
|
16
|
+
};
|
|
17
|
+
export type sqlState = {
|
|
18
|
+
/** mysql配置 */
|
|
19
|
+
config?: {
|
|
20
|
+
host: string;
|
|
21
|
+
user: string;
|
|
22
|
+
password: string;
|
|
23
|
+
database: string;
|
|
24
|
+
};
|
|
25
|
+
/** 是否需要重启 */
|
|
26
|
+
status: 0 | 1;
|
|
27
|
+
/** mysql connection对象 */
|
|
28
|
+
connection?: any;
|
|
29
|
+
/** 数据库表 */
|
|
30
|
+
sqlForm?: sqlForm;
|
|
31
|
+
/** 数据库表 */
|
|
32
|
+
listKey?: any;
|
|
33
|
+
};
|
|
34
|
+
export type createSqlFormType = { [key: string]: createSqlForm };
|
package/src/state.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const state: any = {};
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import type { Request, Response } from "express";
|
|
2
|
+
|
|
3
|
+
type BasicTypeDescriptor =
|
|
4
|
+
| StringConstructor
|
|
5
|
+
| NumberConstructor
|
|
6
|
+
| BooleanConstructor
|
|
7
|
+
| ObjectConstructor;
|
|
8
|
+
export type TypeDescriptor = BasicTypeDescriptor | Array<any>;
|
|
9
|
+
|
|
10
|
+
export interface TypeMapping {
|
|
11
|
+
[key: string]:
|
|
12
|
+
| TypeDescriptor
|
|
13
|
+
| TypeMapping
|
|
14
|
+
| Array<TypeDescriptor | TypeMapping>;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
type apiConfigTypeItem = {
|
|
18
|
+
/** 接口名称 */
|
|
19
|
+
name: string;
|
|
20
|
+
/** 接口描述 */
|
|
21
|
+
des?: string;
|
|
22
|
+
/** 接口请求方法 */
|
|
23
|
+
methods: "get" | "post" | "all";
|
|
24
|
+
/** 请求头参数 */
|
|
25
|
+
header?: {
|
|
26
|
+
/** 参数名称 */
|
|
27
|
+
name: string;
|
|
28
|
+
/** 是否为空 */
|
|
29
|
+
optional?: boolean;
|
|
30
|
+
/** 请求头描述 */
|
|
31
|
+
des?: string;
|
|
32
|
+
/** 参数类型 */
|
|
33
|
+
type: TypeDescriptor;
|
|
34
|
+
}[];
|
|
35
|
+
/** 是否启用token,默认关闭 */
|
|
36
|
+
token?: boolean;
|
|
37
|
+
/** 允许放行的权限,在启用token的情况下才有效 */
|
|
38
|
+
permission?: string[];
|
|
39
|
+
/** 请求类型 */
|
|
40
|
+
"Content-Type"?:
|
|
41
|
+
| "multipart/form-data"
|
|
42
|
+
| "application/json"
|
|
43
|
+
| "application/x-www-form-urlencoded";
|
|
44
|
+
/** 请求示例 */
|
|
45
|
+
example?: any;
|
|
46
|
+
/** 响应示例 */
|
|
47
|
+
resExample?: any;
|
|
48
|
+
/** 效验数据格式 */
|
|
49
|
+
validFormat?: TypeMapping | TypeDescriptor;
|
|
50
|
+
/** 效验数据严格模式,默认不开启 */
|
|
51
|
+
validFormatStrict?: boolean;
|
|
52
|
+
/** 效验数据格式描述 */
|
|
53
|
+
validFormatDes?:
|
|
54
|
+
| string[]
|
|
55
|
+
| {
|
|
56
|
+
/** 字段名称 */
|
|
57
|
+
name: string;
|
|
58
|
+
/** 字段类型 */
|
|
59
|
+
type: TypeMapping | TypeDescriptor;
|
|
60
|
+
/** 是否为空 */
|
|
61
|
+
optional?: boolean;
|
|
62
|
+
/** 字段描述 */
|
|
63
|
+
des?: string;
|
|
64
|
+
}[];
|
|
65
|
+
};
|
|
66
|
+
export type masRes = Response & {
|
|
67
|
+
/** 响应数据 */
|
|
68
|
+
return: (data: any, status?: any, code?: number, msg?: string) => void;
|
|
69
|
+
token?: { data: any; _permission: string[] };
|
|
70
|
+
};
|
|
71
|
+
export type masReq = Request & {
|
|
72
|
+
body: any;
|
|
73
|
+
};
|
|
74
|
+
export type configType = {
|
|
75
|
+
/** 项目名称 */
|
|
76
|
+
projectName: string;
|
|
77
|
+
/** 端口号 */
|
|
78
|
+
port: number;
|
|
79
|
+
/** 是否开启接口文档 */
|
|
80
|
+
apidoc: boolean;
|
|
81
|
+
/** 接口文档配置 */
|
|
82
|
+
apidocOptions?: {
|
|
83
|
+
/** 默认留空即可 */
|
|
84
|
+
baseUrl: "";
|
|
85
|
+
};
|
|
86
|
+
/** 是否允许跨域 */
|
|
87
|
+
cors: boolean;
|
|
88
|
+
|
|
89
|
+
logs: {
|
|
90
|
+
/** 是否保存日志 */
|
|
91
|
+
open: boolean;
|
|
92
|
+
/** 是否打印访问日志 */
|
|
93
|
+
debug: boolean;
|
|
94
|
+
};
|
|
95
|
+
token: {
|
|
96
|
+
/** 是否使用token */
|
|
97
|
+
open: boolean;
|
|
98
|
+
/** token秘钥 */
|
|
99
|
+
pwd: string;
|
|
100
|
+
};
|
|
101
|
+
/** debug延时时间 */
|
|
102
|
+
debugTime?: number;
|
|
103
|
+
/** 是否使用数据库 */
|
|
104
|
+
useSql: boolean;
|
|
105
|
+
/** 数据库信息 */
|
|
106
|
+
sql: {
|
|
107
|
+
host: string;
|
|
108
|
+
user: string;
|
|
109
|
+
password: string;
|
|
110
|
+
database: string;
|
|
111
|
+
};
|
|
112
|
+
};
|
|
113
|
+
export type apiCallback = Promise<(req: masReq, res: masRes) => void>;
|
|
114
|
+
export type apiConfigType = { [key: string]: apiConfigTypeItem };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { state } from "@/state";
|
|
2
|
+
import type { Express } from "express";
|
|
3
|
+
import { masReq, masRes } from "..";
|
|
4
|
+
export default (app: Express) => {
|
|
5
|
+
const router = JSON.stringify(state.Router, (key, value) => {
|
|
6
|
+
if (typeof value === "function") {
|
|
7
|
+
return value.toString().replace(/function\s+(\w+)\(\)\s+\{.*\}/, "$1");
|
|
8
|
+
}
|
|
9
|
+
return value;
|
|
10
|
+
});
|
|
11
|
+
// console.log(state);
|
|
12
|
+
app.post("/apidoc/router", (req: masReq, res: masRes) => {
|
|
13
|
+
res.return(JSON.parse(router));
|
|
14
|
+
});
|
|
15
|
+
app.post("/apidoc/cn", (req: masReq, res: masRes) => {
|
|
16
|
+
res.return(state.apiCN);
|
|
17
|
+
});
|
|
18
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import { state } from "@/state";
|
|
3
|
+
import moment from "moment";
|
|
4
|
+
|
|
5
|
+
export default (req, res, next) => {
|
|
6
|
+
const { config } = state;
|
|
7
|
+
const date = moment().format("YYYY-MM-DD HH:mm:ss");
|
|
8
|
+
const data = `${date} ${req.method} ${req.ipInfo.ip} ${req.url} ${
|
|
9
|
+
req.body ? JSON.stringify(req.body) : ""
|
|
10
|
+
}\n`;
|
|
11
|
+
fs.appendFileSync(
|
|
12
|
+
state.DIRNAME + `/logs/${moment().format("YYYY-MM-DD")}.log`,
|
|
13
|
+
data
|
|
14
|
+
);
|
|
15
|
+
|
|
16
|
+
if (config.logs.debug) {
|
|
17
|
+
console.info(data);
|
|
18
|
+
}
|
|
19
|
+
next();
|
|
20
|
+
};
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import readApi from "./readApi";
|
|
2
|
+
import c from "ansi-colors";
|
|
3
|
+
import { apiConfigType } from "@/typings";
|
|
4
|
+
|
|
5
|
+
export default function getRouteByApiSrc(
|
|
6
|
+
apiSrc,
|
|
7
|
+
apiConfig: apiConfigType,
|
|
8
|
+
apiKey: { [key: string]: string }
|
|
9
|
+
) {
|
|
10
|
+
const routerArr = readApi(apiSrc, "api");
|
|
11
|
+
const newApiConfig = {};
|
|
12
|
+
apiConfig = { ...apiConfig };
|
|
13
|
+
let isAdd = false;
|
|
14
|
+
for (let v of routerArr) {
|
|
15
|
+
if (!apiConfig[v]) {
|
|
16
|
+
isAdd = true;
|
|
17
|
+
console.info(c.green(`新增接口 ${v}`));
|
|
18
|
+
newApiConfig[v] = {
|
|
19
|
+
name: "新建接口",
|
|
20
|
+
methods: "all",
|
|
21
|
+
des: "",
|
|
22
|
+
validFormat: null,
|
|
23
|
+
};
|
|
24
|
+
} else {
|
|
25
|
+
newApiConfig[v] = apiConfig[v];
|
|
26
|
+
delete apiConfig[v];
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
if (Object.keys(apiConfig).length != 0) {
|
|
30
|
+
console.info(c.red(`删除接口 ${Object.keys(apiConfig)}`));
|
|
31
|
+
isAdd = true;
|
|
32
|
+
}
|
|
33
|
+
// 接口翻译
|
|
34
|
+
let newApiConfigArr = [];
|
|
35
|
+
|
|
36
|
+
for (let item in newApiConfig) {
|
|
37
|
+
for (let v of item.slice(1).split("/")) {
|
|
38
|
+
newApiConfigArr.push(v);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
newApiConfigArr = [...new Set(newApiConfigArr)];
|
|
43
|
+
apiKey = { ...apiKey };
|
|
44
|
+
const newApiKey = {};
|
|
45
|
+
|
|
46
|
+
for (let v of newApiConfigArr) {
|
|
47
|
+
if (apiKey[v] === undefined) {
|
|
48
|
+
isAdd = true;
|
|
49
|
+
newApiKey[v] = "";
|
|
50
|
+
} else {
|
|
51
|
+
newApiKey[v] = apiKey[v];
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return { newApiConfig, isAdd, newApiConfigArr, newApiKey };
|
|
55
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var CryptoJS=CryptoJS||function(h){var r=Object.create||function(t){return e.prototype=t,t=new e,e.prototype=null,t};function e(){}var t={},i=t.lib={},n=i.Base={extend:function(t){var e=r(this);return t&&e.mixIn(t),e.hasOwnProperty("init")&&this.init!==e.init||(e.init=function(){e.$super.init.apply(this,arguments)}),(e.init.prototype=e).$super=this,e},create:function(){var t=this.extend();return t.init.apply(t,arguments),t},init:function(){},mixIn:function(t){for(var e in t)t.hasOwnProperty(e)&&(this[e]=t[e]);t.hasOwnProperty("toString")&&(this.toString=t.toString)},clone:function(){return this.init.prototype.extend(this)}},l=i.WordArray=n.extend({init:function(t,e){t=this.words=t||[],this.sigBytes=null!=e?e:4*t.length},toString:function(t){return(t||s).stringify(this)},concat:function(t){var e=this.words,r=t.words,i=this.sigBytes,n=t.sigBytes;if(this.clamp(),i%4)for(var o=0;o<n;o++){var s=r[o>>>2]>>>24-o%4*8&255;e[i+o>>>2]|=s<<24-(i+o)%4*8}else for(o=0;o<n;o+=4)e[i+o>>>2]=r[o>>>2];return this.sigBytes+=n,this},clamp:function(){var t=this.words,e=this.sigBytes;t[e>>>2]&=4294967295<<32-e%4*8,t.length=h.ceil(e/4)},clone:function(){var t=n.clone.call(this);return t.words=this.words.slice(0),t},random:function(t){for(var e=[],r=0;r<t;r+=4){var i=function(e){var r=987654321,i=4294967295;return function(){var t=((r=36969*(65535&r)+(r>>16)&i)<<16)+(e=18e3*(65535&e)+(e>>16)&i)&i;return(t/4294967296+.5)*(.5<h.random()?1:-1)}}(4294967296*(n||h.random())),n=987654071*i();e.push(4294967296*i()|0)}return new l.init(e,t)}}),o=t.enc={},s=o.Hex={stringify:function(t){for(var e=t.words,r=t.sigBytes,i=[],n=0;n<r;n++){var o=e[n>>>2]>>>24-n%4*8&255;i.push((o>>>4).toString(16)),i.push((15&o).toString(16))}return i.join("")},parse:function(t){for(var e=t.length,r=[],i=0;i<e;i+=2)r[i>>>3]|=parseInt(t.substr(i,2),16)<<24-i%8*4;return new l.init(r,e/2)}},c=o.Latin1={stringify:function(t){for(var e=t.words,r=t.sigBytes,i=[],n=0;n<r;n++){var o=e[n>>>2]>>>24-n%4*8&255;i.push(String.fromCharCode(o))}return i.join("")},parse:function(t){for(var e=t.length,r=[],i=0;i<e;i++)r[i>>>2]|=(255&t.charCodeAt(i))<<24-i%4*8;return new l.init(r,e)}},a=o.Utf8={stringify:function(t){try{return decodeURIComponent(escape(c.stringify(t)))}catch(t){throw new Error("Malformed UTF-8 data")}},parse:function(t){return c.parse(unescape(encodeURIComponent(t)))}},f=i.BufferedBlockAlgorithm=n.extend({reset:function(){this._data=new l.init,this._nDataBytes=0},_append:function(t){"string"==typeof t&&(t=a.parse(t)),this._data.concat(t),this._nDataBytes+=t.sigBytes},_process:function(t){var e=this._data,r=e.words,i=e.sigBytes,n=this.blockSize,o=i/(4*n),s=(o=t?h.ceil(o):h.max((0|o)-this._minBufferSize,0))*n,t=h.min(4*s,i);if(s){for(var c=0;c<s;c+=n)this._doProcessBlock(r,c);var a=r.splice(0,s);e.sigBytes-=t}return new l.init(a,t)},clone:function(){var t=n.clone.call(this);return t._data=this._data.clone(),t},_minBufferSize:0}),d=(i.Hasher=f.extend({cfg:n.extend(),init:function(t){this.cfg=this.cfg.extend(t),this.reset()},reset:function(){f.reset.call(this),this._doReset()},update:function(t){return this._append(t),this._process(),this},finalize:function(t){return t&&this._append(t),this._doFinalize()},blockSize:16,_createHelper:function(r){return function(t,e){return new r.init(e).finalize(t)}},_createHmacHelper:function(r){return function(t,e){return new d.HMAC.init(r,e).finalize(t)}}}),t.algo={});return t}(Math);!function(){var u=CryptoJS.lib.WordArray;CryptoJS.enc.Base64={stringify:function(t){for(var e=t.words,r=t.sigBytes,i=this._map,n=(t.clamp(),[]),o=0;o<r;o+=3)for(var s=(e[o>>>2]>>>24-o%4*8&255)<<16|(e[o+1>>>2]>>>24-(o+1)%4*8&255)<<8|e[o+2>>>2]>>>24-(o+2)%4*8&255,c=0;c<4&&o+.75*c<r;c++)n.push(i.charAt(s>>>6*(3-c)&63));var a=i.charAt(64);if(a)for(;n.length%4;)n.push(a);return n.join("")},parse:function(t){var e=t.length,r=this._map;if(!(i=this._reverseMap))for(var i=this._reverseMap=[],n=0;n<r.length;n++)i[r.charCodeAt(n)]=n;for(var o,s,c=r.charAt(64),a=(c&&-1!==(c=t.indexOf(c))&&(e=c),t),h=e,l=i,f=[],d=0,p=0;p<h;p++)p%4&&(o=l[a.charCodeAt(p-1)]<<p%4*2,s=l[a.charCodeAt(p)]>>>6-p%4*2,f[d>>>2]|=(o|s)<<24-d%4*8,d++);return u.create(f,d)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}}(),function(a){for(var t=CryptoJS,e=t.lib,r=e.WordArray,i=e.Hasher,e=t.algo,x=[],n=0;n<64;n++)x[n]=4294967296*a.abs(a.sin(n+1))|0;e=e.MD5=i.extend({_doReset:function(){this._hash=new r.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(t,e){for(var r=0;r<16;r++){var i=e+r,n=t[i];t[i]=16711935&(n<<8|n>>>24)|4278255360&(n<<24|n>>>8)}var o=this._hash.words,s=t[e+0],c=t[e+1],a=t[e+2],h=t[e+3],l=t[e+4],f=t[e+5],d=t[e+6],p=t[e+7],u=t[e+8],y=t[e+9],_=t[e+10],v=t[e+11],g=t[e+12],S=t[e+13],B=t[e+14],k=t[e+15],w=H(o[0],b=o[1],m=o[2],C=o[3],s,7,x[0]),C=H(C,w,b,m,c,12,x[1]),m=H(m,C,w,b,a,17,x[2]),b=H(b,m,C,w,h,22,x[3]);w=H(w,b,m,C,l,7,x[4]),C=H(C,w,b,m,f,12,x[5]),m=H(m,C,w,b,d,17,x[6]),b=H(b,m,C,w,p,22,x[7]),w=H(w,b,m,C,u,7,x[8]),C=H(C,w,b,m,y,12,x[9]),m=H(m,C,w,b,_,17,x[10]),b=H(b,m,C,w,v,22,x[11]),w=H(w,b,m,C,g,7,x[12]),C=H(C,w,b,m,S,12,x[13]),m=H(m,C,w,b,B,17,x[14]),w=J(w,b=H(b,m,C,w,k,22,x[15]),m,C,c,5,x[16]),C=J(C,w,b,m,d,9,x[17]),m=J(m,C,w,b,v,14,x[18]),b=J(b,m,C,w,s,20,x[19]),w=J(w,b,m,C,f,5,x[20]),C=J(C,w,b,m,_,9,x[21]),m=J(m,C,w,b,k,14,x[22]),b=J(b,m,C,w,l,20,x[23]),w=J(w,b,m,C,y,5,x[24]),C=J(C,w,b,m,B,9,x[25]),m=J(m,C,w,b,h,14,x[26]),b=J(b,m,C,w,u,20,x[27]),w=J(w,b,m,C,S,5,x[28]),C=J(C,w,b,m,a,9,x[29]),m=J(m,C,w,b,p,14,x[30]),w=z(w,b=J(b,m,C,w,g,20,x[31]),m,C,f,4,x[32]),C=z(C,w,b,m,u,11,x[33]),m=z(m,C,w,b,v,16,x[34]),b=z(b,m,C,w,B,23,x[35]),w=z(w,b,m,C,c,4,x[36]),C=z(C,w,b,m,l,11,x[37]),m=z(m,C,w,b,p,16,x[38]),b=z(b,m,C,w,_,23,x[39]),w=z(w,b,m,C,S,4,x[40]),C=z(C,w,b,m,s,11,x[41]),m=z(m,C,w,b,h,16,x[42]),b=z(b,m,C,w,d,23,x[43]),w=z(w,b,m,C,y,4,x[44]),C=z(C,w,b,m,g,11,x[45]),m=z(m,C,w,b,k,16,x[46]),w=A(w,b=z(b,m,C,w,a,23,x[47]),m,C,s,6,x[48]),C=A(C,w,b,m,p,10,x[49]),m=A(m,C,w,b,B,15,x[50]),b=A(b,m,C,w,f,21,x[51]),w=A(w,b,m,C,g,6,x[52]),C=A(C,w,b,m,h,10,x[53]),m=A(m,C,w,b,_,15,x[54]),b=A(b,m,C,w,c,21,x[55]),w=A(w,b,m,C,u,6,x[56]),C=A(C,w,b,m,k,10,x[57]),m=A(m,C,w,b,d,15,x[58]),b=A(b,m,C,w,S,21,x[59]),w=A(w,b,m,C,l,6,x[60]),C=A(C,w,b,m,v,10,x[61]),m=A(m,C,w,b,a,15,x[62]),b=A(b,m,C,w,y,21,x[63]),o[0]=o[0]+w|0,o[1]=o[1]+b|0,o[2]=o[2]+m|0,o[3]=o[3]+C|0},_doFinalize:function(){for(var t=this._data,e=t.words,r=8*this._nDataBytes,i=8*t.sigBytes,n=(e[i>>>5]|=128<<24-i%32,a.floor(r/4294967296)),n=(e[15+(64+i>>>9<<4)]=16711935&(n<<8|n>>>24)|4278255360&(n<<24|n>>>8),e[14+(64+i>>>9<<4)]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8),t.sigBytes=4*(e.length+1),this._process(),this._hash),o=n.words,s=0;s<4;s++){var c=o[s];o[s]=16711935&(c<<8|c>>>24)|4278255360&(c<<24|c>>>8)}return n},clone:function(){var t=i.clone.call(this);return t._hash=this._hash.clone(),t}});function H(t,e,r,i,n,o,s){t=t+(e&r|~e&i)+n+s;return(t<<o|t>>>32-o)+e}function J(t,e,r,i,n,o,s){t=t+(e&i|r&~i)+n+s;return(t<<o|t>>>32-o)+e}function z(t,e,r,i,n,o,s){t=t+(e^r^i)+n+s;return(t<<o|t>>>32-o)+e}function A(t,e,r,i,n,o,s){t=t+(r^(e|~i))+n+s;return(t<<o|t>>>32-o)+e}t.MD5=i._createHelper(e),t.HmacMD5=i._createHmacHelper(e)}(Math),function(){var t=CryptoJS,e=t.lib,r=e.WordArray,i=e.Hasher,e=t.algo,l=[],e=e.SHA1=i.extend({_doReset:function(){this._hash=new r.init([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(t,e){for(var r=this._hash.words,i=r[0],n=r[1],o=r[2],s=r[3],c=r[4],a=0;a<80;a++){l[a]=a<16?0|t[e+a]:(h=l[a-3]^l[a-8]^l[a-14]^l[a-16])<<1|h>>>31;var h=(i<<5|i>>>27)+c+l[a];h+=a<20?1518500249+(n&o|~n&s):a<40?1859775393+(n^o^s):a<60?(n&o|n&s|o&s)-1894007588:(n^o^s)-899497514,c=s,s=o,o=n<<30|n>>>2,n=i,i=h}r[0]=r[0]+i|0,r[1]=r[1]+n|0,r[2]=r[2]+o|0,r[3]=r[3]+s|0,r[4]=r[4]+c|0},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;return e[i>>>5]|=128<<24-i%32,e[14+(64+i>>>9<<4)]=Math.floor(r/4294967296),e[15+(64+i>>>9<<4)]=r,t.sigBytes=4*e.length,this._process(),this._hash},clone:function(){var t=i.clone.call(this);return t._hash=this._hash.clone(),t}});t.SHA1=i._createHelper(e),t.HmacSHA1=i._createHmacHelper(e)}(),function(n){var t=CryptoJS,e=t.lib,r=e.WordArray,i=e.Hasher,e=t.algo,o=[],u=[];function s(t){return 4294967296*(t-(0|t))|0}for(var c=2,a=0;a<64;)!function(t){for(var e=n.sqrt(t),r=2;r<=e;r++)if(!(t%r))return;return 1}(c)||(a<8&&(o[a]=s(n.pow(c,.5))),u[a]=s(n.pow(c,1/3)),a++),c++;var y=[],e=e.SHA256=i.extend({_doReset:function(){this._hash=new r.init(o.slice(0))},_doProcessBlock:function(t,e){for(var r=this._hash.words,i=r[0],n=r[1],o=r[2],s=r[3],c=r[4],a=r[5],h=r[6],l=r[7],f=0;f<64;f++){y[f]=f<16?0|t[e+f]:(((d=y[f-15])<<25|d>>>7)^(d<<14|d>>>18)^d>>>3)+y[f-7]+(((d=y[f-2])<<15|d>>>17)^(d<<13|d>>>19)^d>>>10)+y[f-16];var d=i&n^i&o^n&o,p=l+((c<<26|c>>>6)^(c<<21|c>>>11)^(c<<7|c>>>25))+(c&a^~c&h)+u[f]+y[f],l=h,h=a,a=c,c=s+p|0,s=o,o=n,n=i,i=p+(((i<<30|i>>>2)^(i<<19|i>>>13)^(i<<10|i>>>22))+d)|0}r[0]=r[0]+i|0,r[1]=r[1]+n|0,r[2]=r[2]+o|0,r[3]=r[3]+s|0,r[4]=r[4]+c|0,r[5]=r[5]+a|0,r[6]=r[6]+h|0,r[7]=r[7]+l|0},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;return e[i>>>5]|=128<<24-i%32,e[14+(64+i>>>9<<4)]=n.floor(r/4294967296),e[15+(64+i>>>9<<4)]=r,t.sigBytes=4*e.length,this._process(),this._hash},clone:function(){var t=i.clone.call(this);return t._hash=this._hash.clone(),t}});t.SHA256=i._createHelper(e),t.HmacSHA256=i._createHmacHelper(e)}(Math),function(){var n=CryptoJS.lib.WordArray,t=CryptoJS.enc;t.Utf16=t.Utf16BE={stringify:function(t){for(var e=t.words,r=t.sigBytes,i=[],n=0;n<r;n+=2){var o=e[n>>>2]>>>16-n%4*8&65535;i.push(String.fromCharCode(o))}return i.join("")},parse:function(t){for(var e=t.length,r=[],i=0;i<e;i++)r[i>>>1]|=t.charCodeAt(i)<<16-i%2*16;return n.create(r,2*e)}};function s(t){return t<<8&4278255360|t>>>8&16711935}t.Utf16LE={stringify:function(t){for(var e=t.words,r=t.sigBytes,i=[],n=0;n<r;n+=2){var o=s(e[n>>>2]>>>16-n%4*8&65535);i.push(String.fromCharCode(o))}return i.join("")},parse:function(t){for(var e=t.length,r=[],i=0;i<e;i++)r[i>>>1]|=s(t.charCodeAt(i)<<16-i%2*16);return n.create(r,2*e)}}}(),function(){var t,n;"function"==typeof ArrayBuffer&&(t=CryptoJS.lib.WordArray,n=t.init,(t.init=function(t){if((t=(t=t instanceof ArrayBuffer?new Uint8Array(t):t)instanceof Int8Array||"undefined"!=typeof Uint8ClampedArray&&t instanceof Uint8ClampedArray||t instanceof Int16Array||t instanceof Uint16Array||t instanceof Int32Array||t instanceof Uint32Array||t instanceof Float32Array||t instanceof Float64Array?new Uint8Array(t.buffer,t.byteOffset,t.byteLength):t)instanceof Uint8Array){for(var e=t.byteLength,r=[],i=0;i<e;i++)r[i>>>2]|=t[i]<<24-i%4*8;n.call(this,r,e)}else n.apply(this,arguments)}).prototype=t)}(),function(){var t=CryptoJS,e=t.lib,r=e.WordArray,i=e.Hasher,e=t.algo,C=r.create([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13]),m=r.create([5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11]),b=r.create([11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6]),x=r.create([8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]),H=r.create([0,1518500249,1859775393,2400959708,2840853838]),J=r.create([1352829926,1548603684,1836072691,2053994217,0]),e=e.RIPEMD160=i.extend({_doReset:function(){this._hash=r.create([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(t,e){for(var r=0;r<16;r++){var i=e+r,n=t[i];t[i]=16711935&(n<<8|n>>>24)|4278255360&(n<<24|n>>>8)}for(var o,s,c,a,h,l,f=this._hash.words,d=H.words,p=J.words,u=C.words,y=m.words,_=b.words,v=x.words,g=o=f[0],S=s=f[1],B=c=f[2],k=a=f[3],w=h=f[4],r=0;r<80;r+=1)l=(l=D(l=(l=o+t[e+u[r]]|0)+(r<16?(s^c^a)+d[0]:r<32?z(s,c,a)+d[1]:r<48?((s|~c)^a)+d[2]:r<64?A(s,c,a)+d[3]:(s^(c|~a))+d[4])|0,_[r]))+h|0,o=h,h=a,a=D(c,10),c=s,s=l,l=(l=D(l=(l=g+t[e+y[r]]|0)+(r<16?(S^(B|~k))+p[0]:r<32?A(S,B,k)+p[1]:r<48?((S|~B)^k)+p[2]:r<64?z(S,B,k)+p[3]:(S^B^k)+p[4])|0,v[r]))+w|0,g=w,w=k,k=D(B,10),B=S,S=l;l=f[1]+c+k|0,f[1]=f[2]+a+w|0,f[2]=f[3]+h+g|0,f[3]=f[4]+o+S|0,f[4]=f[0]+s+B|0,f[0]=l},_doFinalize:function(){for(var t=this._data,e=t.words,r=8*this._nDataBytes,i=8*t.sigBytes,i=(e[i>>>5]|=128<<24-i%32,e[14+(64+i>>>9<<4)]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8),t.sigBytes=4*(e.length+1),this._process(),this._hash),n=i.words,o=0;o<5;o++){var s=n[o];n[o]=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8)}return i},clone:function(){var t=i.clone.call(this);return t._hash=this._hash.clone(),t}});function z(t,e,r){return t&e|~t&r}function A(t,e,r){return t&r|e&~r}function D(t,e){return t<<e|t>>>32-e}t.RIPEMD160=i._createHelper(e),t.HmacRIPEMD160=i._createHmacHelper(e)}(Math),function(){var t=CryptoJS.lib.Base,c=CryptoJS.enc.Utf8;CryptoJS.algo.HMAC=t.extend({init:function(t,e){t=this._hasher=new t.init,"string"==typeof e&&(e=c.parse(e));for(var r=t.blockSize,i=4*r,t=((e=e.sigBytes>i?t.finalize(e):e).clamp(),this._oKey=e.clone()),e=this._iKey=e.clone(),n=t.words,o=e.words,s=0;s<r;s++)n[s]^=1549556828,o[s]^=909522486;t.sigBytes=e.sigBytes=i,this.reset()},reset:function(){var t=this._hasher;t.reset(),t.update(this._iKey)},update:function(t){return this._hasher.update(t),this},finalize:function(t){var e=this._hasher,t=e.finalize(t);return e.reset(),e.finalize(this._oKey.clone().concat(t))}})}(),function(){var t=CryptoJS,e=t.lib,r=e.Base,v=e.WordArray,e=t.algo,i=e.SHA1,g=e.HMAC,n=e.PBKDF2=r.extend({cfg:r.extend({keySize:4,hasher:i,iterations:1}),init:function(t){this.cfg=this.cfg.extend(t)},compute:function(t,e){for(var r=this.cfg,i=g.create(r.hasher,t),n=v.create(),o=v.create([1]),s=n.words,c=o.words,a=r.keySize,h=r.iterations;s.length<a;){for(var l=i.update(e).finalize(o),f=(i.reset(),l.words),d=f.length,p=l,u=1;u<h;u++){p=i.finalize(p),i.reset();for(var y=p.words,_=0;_<d;_++)f[_]^=y[_]}n.concat(l),c[0]++}return n.sigBytes=4*a,n}});t.PBKDF2=function(t,e,r){return n.create(r).compute(t,e)}}(),function(){var t=CryptoJS,e=t.lib,r=e.Base,l=e.WordArray,e=t.algo,i=e.MD5,n=e.EvpKDF=r.extend({cfg:r.extend({keySize:4,hasher:i,iterations:1}),init:function(t){this.cfg=this.cfg.extend(t)},compute:function(t,e){for(var r=this.cfg,i=r.hasher.create(),n=l.create(),o=n.words,s=r.keySize,c=r.iterations;o.length<s;){a&&i.update(a);var a=i.update(t).finalize(e);i.reset();for(var h=1;h<c;h++)a=i.finalize(a),i.reset();n.concat(a)}return n.sigBytes=4*s,n}});t.EvpKDF=function(t,e,r){return n.create(r).compute(t,e)}}(),function(){var t=CryptoJS,e=t.lib.WordArray,r=t.algo,i=r.SHA256,r=r.SHA224=i.extend({_doReset:function(){this._hash=new e.init([3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428])},_doFinalize:function(){var t=i._doFinalize.call(this);return t.sigBytes-=4,t}});t.SHA224=i._createHelper(r),t.HmacSHA224=i._createHmacHelper(r)}(),function(){var t=CryptoJS,e=t.lib,n=e.Base,o=e.WordArray,e=t.x64={};e.Word=n.extend({init:function(t,e){this.high=t,this.low=e}}),e.WordArray=n.extend({init:function(t,e){t=this.words=t||[],this.sigBytes=null!=e?e:8*t.length},toX32:function(){for(var t=this.words,e=t.length,r=[],i=0;i<e;i++){var n=t[i];r.push(n.high),r.push(n.low)}return o.create(r,this.sigBytes)},clone:function(){for(var t=n.clone.call(this),e=t.words=this.words.slice(0),r=e.length,i=0;i<r;i++)e[i]=e[i].clone();return t}})}(),function(l){for(var t=CryptoJS,e=t.lib,f=e.WordArray,i=e.Hasher,r=t.x64.Word,e=t.algo,x=[],H=[],J=[],n=1,o=0,s=0;s<24;s++){x[n+5*o]=(s+1)*(s+2)/2%64;var c=(2*n+3*o)%5;n=o%5,o=c}for(n=0;n<5;n++)for(o=0;o<5;o++)H[n+5*o]=o+(2*n+3*o)%5*5;for(var a=1,h=0;h<24;h++){for(var d,p=0,u=0,y=0;y<7;y++)1&a&&((d=(1<<y)-1)<32?u^=1<<d:p^=1<<d-32),128&a?a=a<<1^113:a<<=1;J[h]=r.create(p,u)}for(var z=[],_=0;_<25;_++)z[_]=r.create();e=e.SHA3=i.extend({cfg:i.cfg.extend({outputLength:512}),_doReset:function(){for(var t=this._state=[],e=0;e<25;e++)t[e]=new r.init;this.blockSize=(1600-2*this.cfg.outputLength)/32},_doProcessBlock:function(t,e){for(var r=this._state,i=this.blockSize/2,n=0;n<i;n++){var o=t[e+2*n],s=t[e+2*n+1],o=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8);(w=r[n]).high^=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),w.low^=o}for(var c=0;c<24;c++){for(var a=0;a<5;a++){for(var h=0,l=0,f=0;f<5;f++)h^=(w=r[a+5*f]).high,l^=w.low;var d=z[a];d.high=h,d.low=l}for(a=0;a<5;a++)for(var p=z[(a+4)%5],u=z[(a+1)%5],y=u.high,u=u.low,h=p.high^(y<<1|u>>>31),l=p.low^(u<<1|y>>>31),f=0;f<5;f++)(w=r[a+5*f]).high^=h,w.low^=l;for(var _=1;_<25;_++){var v=(w=r[_]).high,g=w.low,S=x[_],v=(l=S<32?(h=v<<S|g>>>32-S,g<<S|v>>>32-S):(h=g<<S-32|v>>>64-S,v<<S-32|g>>>64-S),z[H[_]]);v.high=h,v.low=l}var B=z[0],k=r[0];B.high=k.high,B.low=k.low;for(a=0;a<5;a++)for(f=0;f<5;f++){var w=r[_=a+5*f],C=z[_],m=z[(a+1)%5+5*f],b=z[(a+2)%5+5*f];w.high=C.high^~m.high&b.high,w.low=C.low^~m.low&b.low}w=r[0],B=J[c];w.high^=B.high,w.low^=B.low}},_doFinalize:function(){for(var t=this._data,e=t.words,r=(this._nDataBytes,8*t.sigBytes),i=32*this.blockSize,n=(e[r>>>5]|=1<<24-r%32,e[(l.ceil((1+r)/i)*i>>>5)-1]|=128,t.sigBytes=4*e.length,this._process(),this._state),r=this.cfg.outputLength/8,o=r/8,s=[],c=0;c<o;c++){var a=n[c],h=a.high,a=a.low,h=16711935&(h<<8|h>>>24)|4278255360&(h<<24|h>>>8);s.push(16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8)),s.push(h)}return new f.init(s,r)},clone:function(){for(var t=i.clone.call(this),e=t._state=this._state.slice(0),r=0;r<25;r++)e[r]=e[r].clone();return t}});t.SHA3=i._createHelper(e),t.HmacSHA3=i._createHmacHelper(e)}(Math),function(){var t=CryptoJS,e=t.lib.Hasher,r=t.x64,i=r.Word,n=r.WordArray,r=t.algo;function o(){return i.create.apply(i,arguments)}for(var e1=[o(1116352408,3609767458),o(1899447441,602891725),o(3049323471,3964484399),o(3921009573,2173295548),o(961987163,4081628472),o(1508970993,3053834265),o(2453635748,2937671579),o(2870763221,3664609560),o(3624381080,2734883394),o(310598401,1164996542),o(607225278,1323610764),o(1426881987,3590304994),o(1925078388,4068182383),o(2162078206,991336113),o(2614888103,633803317),o(3248222580,3479774868),o(3835390401,2666613458),o(4022224774,944711139),o(264347078,2341262773),o(604807628,2007800933),o(770255983,1495990901),o(1249150122,1856431235),o(1555081692,3175218132),o(1996064986,2198950837),o(2554220882,3999719339),o(2821834349,766784016),o(2952996808,2566594879),o(3210313671,3203337956),o(3336571891,1034457026),o(3584528711,2466948901),o(113926993,3758326383),o(338241895,168717936),o(666307205,1188179964),o(773529912,1546045734),o(1294757372,1522805485),o(1396182291,2643833823),o(1695183700,2343527390),o(1986661051,1014477480),o(2177026350,1206759142),o(2456956037,344077627),o(2730485921,1290863460),o(2820302411,3158454273),o(3259730800,3505952657),o(3345764771,106217008),o(3516065817,3606008344),o(3600352804,1432725776),o(4094571909,1467031594),o(275423344,851169720),o(430227734,3100823752),o(506948616,1363258195),o(659060556,3750685593),o(883997877,3785050280),o(958139571,3318307427),o(1322822218,3812723403),o(1537002063,2003034995),o(1747873779,3602036899),o(1955562222,1575990012),o(2024104815,1125592928),o(2227730452,2716904306),o(2361852424,442776044),o(2428436474,593698344),o(2756734187,3733110249),o(3204031479,2999351573),o(3329325298,3815920427),o(3391569614,3928383900),o(3515267271,566280711),o(3940187606,3454069534),o(4118630271,4000239992),o(116418474,1914138554),o(174292421,2731055270),o(289380356,3203993006),o(460393269,320620315),o(685471733,587496836),o(852142971,1086792851),o(1017036298,365543100),o(1126000580,2618297676),o(1288033470,3409855158),o(1501505948,4234509866),o(1607167915,987167468),o(1816402316,1246189591)],r1=[],s=0;s<80;s++)r1[s]=o();r=r.SHA512=e.extend({_doReset:function(){this._hash=new n.init([new i.init(1779033703,4089235720),new i.init(3144134277,2227873595),new i.init(1013904242,4271175723),new i.init(2773480762,1595750129),new i.init(1359893119,2917565137),new i.init(2600822924,725511199),new i.init(528734635,4215389547),new i.init(1541459225,327033209)])},_doProcessBlock:function(F,O){for(var t=this._hash.words,e=t[0],r=t[1],i=t[2],n=t[3],o=t[4],s=t[5],c=t[6],t=t[7],W=e.high,a=e.low,U=r.high,h=r.low,I=i.high,l=i.low,K=n.high,f=n.low,X=o.high,d=o.low,N=s.high,p=s.low,L=c.high,u=c.low,j=t.high,y=t.low,_=W,v=a,g=U,S=h,B=I,k=l,T=K,w=f,C=X,m=d,Z=N,b=p,q=L,G=u,Q=j,V=y,x=0;x<80;x++)var H,J,z=r1[x],A=(x<16?(J=z.high=0|F[O+2*x],H=z.low=0|F[O+2*x+1]):(E=(M=r1[x-15]).high,M=M.low,D=(A=r1[x-2]).high,A=A.low,J=(J=(J=((E>>>1|M<<31)^(E>>>8|M<<24)^E>>>7)+(R=r1[x-7]).high+((H=(M=(M>>>1|E<<31)^(M>>>8|E<<24)^(M>>>7|E<<25))+R.low)>>>0<M>>>0?1:0))+((D>>>19|A<<13)^(D<<3|A>>>29)^D>>>6)+((H=H+(E=(A>>>19|D<<13)^(A<<3|D>>>29)^(A>>>6|D<<26)))>>>0<E>>>0?1:0))+(R=r1[x-16]).high+((H=H+(M=R.low))>>>0<M>>>0?1:0),z.high=J,z.low=H),C&Z^~C&q),D=m&b^~m&G,E=_&g^_&B^g&B,R=(v>>>28|_<<4)^(v<<30|_>>>2)^(v<<25|_>>>7),M=e1[x],z=M.high,Y=M.low,P=V+((m>>>14|C<<18)^(m>>>18|C<<14)^(m<<23|C>>>9)),$=Q+((C>>>14|m<<18)^(C>>>18|m<<14)^(C<<23|m>>>9))+(P>>>0<V>>>0?1:0),t1=R+(v&S^v&k^S&k),Q=q,V=G,q=Z,G=b,Z=C,b=m,C=T+($=$+A+((P=P+D)>>>0<D>>>0?1:0)+z+((P=P+Y)>>>0<Y>>>0?1:0)+J+((P=P+H)>>>0<H>>>0?1:0))+((m=w+P|0)>>>0<w>>>0?1:0)|0,T=B,w=k,B=g,k=S,g=_,S=v,_=$+(((_>>>28|v<<4)^(_<<30|v>>>2)^(_<<25|v>>>7))+E+(t1>>>0<R>>>0?1:0))+((v=P+t1|0)>>>0<P>>>0?1:0)|0;a=e.low=a+v,e.high=W+_+(a>>>0<v>>>0?1:0),h=r.low=h+S,r.high=U+g+(h>>>0<S>>>0?1:0),l=i.low=l+k,i.high=I+B+(l>>>0<k>>>0?1:0),f=n.low=f+w,n.high=K+T+(f>>>0<w>>>0?1:0),d=o.low=d+m,o.high=X+C+(d>>>0<m>>>0?1:0),p=s.low=p+b,s.high=N+Z+(p>>>0<b>>>0?1:0),u=c.low=u+G,c.high=L+q+(u>>>0<G>>>0?1:0),y=t.low=y+V,t.high=j+Q+(y>>>0<V>>>0?1:0)},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;return e[i>>>5]|=128<<24-i%32,e[30+(128+i>>>10<<5)]=Math.floor(r/4294967296),e[31+(128+i>>>10<<5)]=r,t.sigBytes=4*e.length,this._process(),this._hash.toX32()},clone:function(){var t=e.clone.call(this);return t._hash=this._hash.clone(),t},blockSize:32});t.SHA512=e._createHelper(r),t.HmacSHA512=e._createHmacHelper(r)}(),function(){var t=CryptoJS,e=t.x64,r=e.Word,i=e.WordArray,e=t.algo,n=e.SHA512,e=e.SHA384=n.extend({_doReset:function(){this._hash=new i.init([new r.init(3418070365,3238371032),new r.init(1654270250,914150663),new r.init(2438529370,812702999),new r.init(355462360,4144912697),new r.init(1731405415,4290775857),new r.init(2394180231,1750603025),new r.init(3675008525,1694076839),new r.init(1203062813,3204075428)])},_doFinalize:function(){var t=n._doFinalize.call(this);return t.sigBytes-=16,t}});t.SHA384=n._createHelper(e),t.HmacSHA384=n._createHmacHelper(e)}(),CryptoJS.lib.Cipher||function(){var t=CryptoJS,e=t.lib,r=e.Base,s=e.WordArray,i=e.BufferedBlockAlgorithm,n=t.enc,o=(n.Utf8,n.Base64),c=t.algo.EvpKDF,a=e.Cipher=i.extend({cfg:r.extend(),createEncryptor:function(t,e){return this.create(this._ENC_XFORM_MODE,t,e)},createDecryptor:function(t,e){return this.create(this._DEC_XFORM_MODE,t,e)},init:function(t,e,r){this.cfg=this.cfg.extend(r),this._xformMode=t,this._key=e,this.reset()},reset:function(){i.reset.call(this),this._doReset()},process:function(t){return this._append(t),this._process()},finalize:function(t){return t&&this._append(t),this._doFinalize()},keySize:4,ivSize:4,_ENC_XFORM_MODE:1,_DEC_XFORM_MODE:2,_createHelper:function(i){return{encrypt:function(t,e,r){return h(e).encrypt(i,t,e,r)},decrypt:function(t,e,r){return h(e).decrypt(i,t,e,r)}}}});function h(t){return"string"==typeof t?u:p}e.StreamCipher=a.extend({_doFinalize:function(){return this._process(!0)},blockSize:1});var n=t.mode={},l=e.BlockCipherMode=r.extend({createEncryptor:function(t,e){return this.Encryptor.create(t,e)},createDecryptor:function(t,e){return this.Decryptor.create(t,e)},init:function(t,e){this._cipher=t,this._iv=e}}),l=n.CBC=((n=l.extend()).Encryptor=n.extend({processBlock:function(t,e){var r=this._cipher,i=r.blockSize;f.call(this,t,e,i),r.encryptBlock(t,e),this._prevBlock=t.slice(e,e+i)}}),n.Decryptor=n.extend({processBlock:function(t,e){var r=this._cipher,i=r.blockSize,n=t.slice(e,e+i);r.decryptBlock(t,e),f.call(this,t,e,i),this._prevBlock=n}}),n);function f(t,e,r){var i,n=this._iv;n?(i=n,this._iv=void 0):i=this._prevBlock;for(var o=0;o<r;o++)t[e+o]^=i[o]}var n=(t.pad={}).Pkcs7={pad:function(t,e){for(var e=4*e,r=e-t.sigBytes%e,i=r<<24|r<<16|r<<8|r,n=[],o=0;o<r;o+=4)n.push(i);e=s.create(n,r);t.concat(e)},unpad:function(t){var e=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=e}},d=(e.BlockCipher=a.extend({cfg:a.cfg.extend({mode:l,padding:n}),reset:function(){a.reset.call(this);var t,e=this.cfg,r=e.iv,e=e.mode;this._xformMode==this._ENC_XFORM_MODE?t=e.createEncryptor:(t=e.createDecryptor,this._minBufferSize=1),this._mode&&this._mode.__creator==t?this._mode.init(this,r&&r.words):(this._mode=t.call(e,this,r&&r.words),this._mode.__creator=t)},_doProcessBlock:function(t,e){this._mode.processBlock(t,e)},_doFinalize:function(){var t,e=this.cfg.padding;return this._xformMode==this._ENC_XFORM_MODE?(e.pad(this._data,this.blockSize),t=this._process(!0)):(t=this._process(!0),e.unpad(t)),t},blockSize:4}),e.CipherParams=r.extend({init:function(t){this.mixIn(t)},toString:function(t){return(t||this.formatter).stringify(this)}})),l=(t.format={}).OpenSSL={stringify:function(t){var e=t.ciphertext,t=t.salt;return(t?s.create([1398893684,1701076831]).concat(t).concat(e):e).toString(o)},parse:function(t){var e,t=o.parse(t),r=t.words;return 1398893684==r[0]&&1701076831==r[1]&&(e=s.create(r.slice(2,4)),r.splice(0,4),t.sigBytes-=16),d.create({ciphertext:t,salt:e})}},p=e.SerializableCipher=r.extend({cfg:r.extend({format:l}),encrypt:function(t,e,r,i){i=this.cfg.extend(i);var n=t.createEncryptor(r,i),e=n.finalize(e),n=n.cfg;return d.create({ciphertext:e,key:r,iv:n.iv,algorithm:t,mode:n.mode,padding:n.padding,blockSize:t.blockSize,formatter:i.format})},decrypt:function(t,e,r,i){return i=this.cfg.extend(i),e=this._parse(e,i.format),t.createDecryptor(r,i).finalize(e.ciphertext)},_parse:function(t,e){return"string"==typeof t?e.parse(t,this):t}}),n=(t.kdf={}).OpenSSL={execute:function(t,e,r,i){i=i||s.random(8);t=c.create({keySize:e+r}).compute(t,i),r=s.create(t.words.slice(e),4*r);return t.sigBytes=4*e,d.create({key:t,iv:r,salt:i})}},u=e.PasswordBasedCipher=p.extend({cfg:p.cfg.extend({kdf:n}),encrypt:function(t,e,r,i){r=(i=this.cfg.extend(i)).kdf.execute(r,t.keySize,t.ivSize),i.iv=r.iv,t=p.encrypt.call(this,t,e,r.key,i);return t.mixIn(r),t},decrypt:function(t,e,r,i){i=this.cfg.extend(i),e=this._parse(e,i.format);r=i.kdf.execute(r,t.keySize,t.ivSize,e.salt);return i.iv=r.iv,p.decrypt.call(this,t,e,r.key,i)}})}(),CryptoJS.mode.CFB=function(){var t=CryptoJS.lib.BlockCipherMode.extend();function o(t,e,r,i){var n,o=this._iv;o?(n=o.slice(0),this._iv=void 0):n=this._prevBlock,i.encryptBlock(n,0);for(var s=0;s<r;s++)t[e+s]^=n[s]}return t.Encryptor=t.extend({processBlock:function(t,e){var r=this._cipher,i=r.blockSize;o.call(this,t,e,i,r),this._prevBlock=t.slice(e,e+i)}}),t.Decryptor=t.extend({processBlock:function(t,e){var r=this._cipher,i=r.blockSize,n=t.slice(e,e+i);o.call(this,t,e,i,r),this._prevBlock=n}}),t}(),CryptoJS.mode.ECB=function(){var t=CryptoJS.lib.BlockCipherMode.extend();return t.Encryptor=t.extend({processBlock:function(t,e){this._cipher.encryptBlock(t,e)}}),t.Decryptor=t.extend({processBlock:function(t,e){this._cipher.decryptBlock(t,e)}}),t}(),CryptoJS.pad.AnsiX923={pad:function(t,e){var r=t.sigBytes,e=4*e,e=e-r%e,r=r+e-1;t.clamp(),t.words[r>>>2]|=e<<24-r%4*8,t.sigBytes+=e},unpad:function(t){var e=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=e}},CryptoJS.pad.Iso10126={pad:function(t,e){e*=4,e-=t.sigBytes%e;t.concat(CryptoJS.lib.WordArray.random(e-1)).concat(CryptoJS.lib.WordArray.create([e<<24],1))},unpad:function(t){var e=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=e}},CryptoJS.pad.Iso97971={pad:function(t,e){t.concat(CryptoJS.lib.WordArray.create([2147483648],1)),CryptoJS.pad.ZeroPadding.pad(t,e)},unpad:function(t){CryptoJS.pad.ZeroPadding.unpad(t),t.sigBytes--}},CryptoJS.mode.OFB=function(){var t=CryptoJS.lib.BlockCipherMode.extend(),e=t.Encryptor=t.extend({processBlock:function(t,e){var r=this._cipher,i=r.blockSize,n=this._iv,o=this._keystream;n&&(o=this._keystream=n.slice(0),this._iv=void 0),r.encryptBlock(o,0);for(var s=0;s<i;s++)t[e+s]^=o[s]}});return t.Decryptor=e,t}(),CryptoJS.pad.NoPadding={pad:function(){},unpad:function(){}},function(){var e=CryptoJS.lib.CipherParams,r=CryptoJS.enc.Hex;CryptoJS.format.Hex={stringify:function(t){return t.ciphertext.toString(r)},parse:function(t){t=r.parse(t);return e.create({ciphertext:t})}}}(),function(){for(var t=CryptoJS,e=t.lib.BlockCipher,r=t.algo,h=[],i=[],n=[],o=[],s=[],c=[],l=[],f=[],d=[],p=[],a=[],u=0;u<256;u++)a[u]=u<128?u<<1:u<<1^283;for(var y=0,_=0,u=0;u<256;u++){var v=_^_<<1^_<<2^_<<3^_<<4,g=a[i[h[y]=v=v>>>8^255&v^99]=y],S=a[g],B=a[S],k=257*a[v]^16843008*v;n[y]=k<<24|k>>>8,o[y]=k<<16|k>>>16,s[y]=k<<8|k>>>24,c[y]=k,l[v]=(k=16843009*B^65537*S^257*g^16843008*y)<<24|k>>>8,f[v]=k<<16|k>>>16,d[v]=k<<8|k>>>24,p[v]=k,y?(y=g^a[a[a[B^g]]],_^=a[a[_]]):y=_=1}var w=[0,1,2,4,8,16,32,64,128,27,54],r=r.AES=e.extend({_doReset:function(){if(!this._nRounds||this._keyPriorReset!==this._key){for(var t=this._keyPriorReset=this._key,e=t.words,r=t.sigBytes/4,i=4*(1+(this._nRounds=6+r)),n=this._keySchedule=[],o=0;o<i;o++)o<r?n[o]=e[o]:(a=n[o-1],o%r?6<r&&o%r==4&&(a=h[a>>>24]<<24|h[a>>>16&255]<<16|h[a>>>8&255]<<8|h[255&a]):(a=h[(a=a<<8|a>>>24)>>>24]<<24|h[a>>>16&255]<<16|h[a>>>8&255]<<8|h[255&a],a^=w[o/r|0]<<24),n[o]=n[o-r]^a);for(var s=this._invKeySchedule=[],c=0;c<i;c++){var a,o=i-c;a=c%4?n[o]:n[o-4],s[c]=c<4||o<=4?a:l[h[a>>>24]]^f[h[a>>>16&255]]^d[h[a>>>8&255]]^p[h[255&a]]}}},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._keySchedule,n,o,s,c,h)},decryptBlock:function(t,e){var r=t[e+1],r=(t[e+1]=t[e+3],t[e+3]=r,this._doCryptBlock(t,e,this._invKeySchedule,l,f,d,p,i),t[e+1]);t[e+1]=t[e+3],t[e+3]=r},_doCryptBlock:function(t,e,r,i,n,o,s,c){for(var a=this._nRounds,h=t[e]^r[0],l=t[e+1]^r[1],f=t[e+2]^r[2],d=t[e+3]^r[3],p=4,u=1;u<a;u++)var y=i[h>>>24]^n[l>>>16&255]^o[f>>>8&255]^s[255&d]^r[p++],_=i[l>>>24]^n[f>>>16&255]^o[d>>>8&255]^s[255&h]^r[p++],v=i[f>>>24]^n[d>>>16&255]^o[h>>>8&255]^s[255&l]^r[p++],g=i[d>>>24]^n[h>>>16&255]^o[l>>>8&255]^s[255&f]^r[p++],h=y,l=_,f=v,d=g;y=(c[h>>>24]<<24|c[l>>>16&255]<<16|c[f>>>8&255]<<8|c[255&d])^r[p++],_=(c[l>>>24]<<24|c[f>>>16&255]<<16|c[d>>>8&255]<<8|c[255&h])^r[p++],v=(c[f>>>24]<<24|c[d>>>16&255]<<16|c[h>>>8&255]<<8|c[255&l])^r[p++],g=(c[d>>>24]<<24|c[h>>>16&255]<<16|c[l>>>8&255]<<8|c[255&f])^r[p++];t[e]=y,t[e+1]=_,t[e+2]=v,t[e+3]=g},keySize:8});t.AES=e._createHelper(r)}(),function(){var t=CryptoJS,e=t.lib,r=e.WordArray,e=e.BlockCipher,i=t.algo,h=[57,49,41,33,25,17,9,1,58,50,42,34,26,18,10,2,59,51,43,35,27,19,11,3,60,52,44,36,63,55,47,39,31,23,15,7,62,54,46,38,30,22,14,6,61,53,45,37,29,21,13,5,28,20,12,4],l=[14,17,11,24,1,5,3,28,15,6,21,10,23,19,12,4,26,8,16,7,27,20,13,2,41,52,31,37,47,55,30,40,51,45,33,48,44,49,39,56,34,53,46,42,50,36,29,32],f=[1,2,4,6,8,10,12,14,15,17,19,21,23,25,27,28],d=[{0:8421888,268435456:32768,536870912:8421378,805306368:2,1073741824:512,1342177280:8421890,1610612736:8389122,1879048192:8388608,2147483648:514,2415919104:8389120,2684354560:33280,2952790016:8421376,3221225472:32770,3489660928:8388610,3758096384:0,4026531840:33282,134217728:0,402653184:8421890,671088640:33282,939524096:32768,1207959552:8421888,1476395008:512,1744830464:8421378,2013265920:2,2281701376:8389120,2550136832:33280,2818572288:8421376,3087007744:8389122,3355443200:8388610,3623878656:32770,3892314112:514,4160749568:8388608,1:32768,268435457:2,536870913:8421888,805306369:8388608,1073741825:8421378,1342177281:33280,1610612737:512,1879048193:8389122,2147483649:8421890,2415919105:8421376,2684354561:8388610,2952790017:33282,3221225473:514,3489660929:8389120,3758096385:32770,4026531841:0,134217729:8421890,402653185:8421376,671088641:8388608,939524097:512,1207959553:32768,1476395009:8388610,1744830465:2,2013265921:33282,2281701377:32770,2550136833:8389122,2818572289:514,3087007745:8421888,3355443201:8389120,3623878657:0,3892314113:33280,4160749569:8421378},{0:1074282512,16777216:16384,33554432:524288,50331648:1074266128,67108864:1073741840,83886080:1074282496,100663296:1073758208,117440512:16,134217728:540672,150994944:1073758224,167772160:1073741824,184549376:540688,201326592:524304,218103808:0,234881024:16400,251658240:1074266112,8388608:1073758208,25165824:540688,41943040:16,58720256:1073758224,75497472:1074282512,92274688:1073741824,109051904:524288,125829120:1074266128,142606336:524304,159383552:0,176160768:16384,192937984:1074266112,209715200:1073741840,226492416:540672,243269632:1074282496,260046848:16400,268435456:0,285212672:1074266128,301989888:1073758224,318767104:1074282496,335544320:1074266112,352321536:16,369098752:540688,385875968:16384,402653184:16400,419430400:524288,436207616:524304,452984832:1073741840,469762048:540672,486539264:1073758208,503316480:1073741824,520093696:1074282512,276824064:540688,293601280:524288,310378496:1074266112,327155712:16384,343932928:1073758208,360710144:1074282512,377487360:16,394264576:1073741824,411041792:1074282496,427819008:1073741840,444596224:1073758224,461373440:524304,478150656:0,494927872:16400,511705088:1074266128,528482304:540672},{0:260,1048576:0,2097152:67109120,3145728:65796,4194304:65540,5242880:67108868,6291456:67174660,7340032:67174400,8388608:67108864,9437184:67174656,10485760:65792,11534336:67174404,12582912:67109124,13631488:65536,14680064:4,15728640:256,524288:67174656,1572864:67174404,2621440:0,3670016:67109120,4718592:67108868,5767168:65536,6815744:65540,7864320:260,8912896:4,9961472:256,11010048:67174400,12058624:65796,13107200:65792,14155776:67109124,15204352:67174660,16252928:67108864,16777216:67174656,17825792:65540,18874368:65536,19922944:67109120,20971520:256,22020096:67174660,23068672:67108868,24117248:0,25165824:67109124,26214400:67108864,27262976:4,28311552:65792,29360128:67174400,30408704:260,31457280:65796,32505856:67174404,17301504:67108864,18350080:260,19398656:67174656,20447232:0,21495808:65540,22544384:67109120,23592960:256,24641536:67174404,25690112:65536,26738688:67174660,27787264:65796,28835840:67108868,29884416:67109124,30932992:67174400,31981568:4,33030144:65792},{0:2151682048,65536:2147487808,131072:4198464,196608:2151677952,262144:0,327680:4198400,393216:2147483712,458752:4194368,524288:2147483648,589824:4194304,655360:64,720896:2147487744,786432:2151678016,851968:4160,917504:4096,983040:2151682112,32768:2147487808,98304:64,163840:2151678016,229376:2147487744,294912:4198400,360448:2151682112,425984:0,491520:2151677952,557056:4096,622592:2151682048,688128:4194304,753664:4160,819200:2147483648,884736:4194368,950272:4198464,1015808:2147483712,1048576:4194368,1114112:4198400,1179648:2147483712,1245184:0,1310720:4160,1376256:2151678016,1441792:2151682048,1507328:2147487808,1572864:2151682112,1638400:2147483648,1703936:2151677952,1769472:4198464,1835008:2147487744,1900544:4194304,1966080:64,2031616:4096,1081344:2151677952,1146880:2151682112,1212416:0,1277952:4198400,1343488:4194368,1409024:2147483648,1474560:2147487808,1540096:64,1605632:2147483712,1671168:4096,1736704:2147487744,1802240:2151678016,1867776:4160,1933312:2151682048,1998848:4194304,2064384:4198464},{0:128,4096:17039360,8192:262144,12288:536870912,16384:537133184,20480:16777344,24576:553648256,28672:262272,32768:16777216,36864:537133056,40960:536871040,45056:553910400,49152:553910272,53248:0,57344:17039488,61440:553648128,2048:17039488,6144:553648256,10240:128,14336:17039360,18432:262144,22528:537133184,26624:553910272,30720:536870912,34816:537133056,38912:0,43008:553910400,47104:16777344,51200:536871040,55296:553648128,59392:16777216,63488:262272,65536:262144,69632:128,73728:536870912,77824:553648256,81920:16777344,86016:553910272,90112:537133184,94208:16777216,98304:553910400,102400:553648128,106496:17039360,110592:537133056,114688:262272,118784:536871040,122880:0,126976:17039488,67584:553648256,71680:16777216,75776:17039360,79872:537133184,83968:536870912,88064:17039488,92160:128,96256:553910272,100352:262272,104448:553910400,108544:0,112640:553648128,116736:16777344,120832:262144,124928:537133056,129024:536871040},{0:268435464,256:8192,512:270532608,768:270540808,1024:268443648,1280:2097152,1536:2097160,1792:268435456,2048:0,2304:268443656,2560:2105344,2816:8,3072:270532616,3328:2105352,3584:8200,3840:270540800,128:270532608,384:270540808,640:8,896:2097152,1152:2105352,1408:268435464,1664:268443648,1920:8200,2176:2097160,2432:8192,2688:268443656,2944:270532616,3200:0,3456:270540800,3712:2105344,3968:268435456,4096:268443648,4352:270532616,4608:270540808,4864:8200,5120:2097152,5376:268435456,5632:268435464,5888:2105344,6144:2105352,6400:0,6656:8,6912:270532608,7168:8192,7424:268443656,7680:270540800,7936:2097160,4224:8,4480:2105344,4736:2097152,4992:268435464,5248:268443648,5504:8200,5760:270540808,6016:270532608,6272:270540800,6528:270532616,6784:8192,7040:2105352,7296:2097160,7552:0,7808:268435456,8064:268443656},{0:1048576,16:33555457,32:1024,48:1049601,64:34604033,80:0,96:1,112:34603009,128:33555456,144:1048577,160:33554433,176:34604032,192:34603008,208:1025,224:1049600,240:33554432,8:34603009,24:0,40:33555457,56:34604032,72:1048576,88:33554433,104:33554432,120:1025,136:1049601,152:33555456,168:34603008,184:1048577,200:1024,216:34604033,232:1,248:1049600,256:33554432,272:1048576,288:33555457,304:34603009,320:1048577,336:33555456,352:34604032,368:1049601,384:1025,400:34604033,416:1049600,432:1,448:0,464:34603008,480:33554433,496:1024,264:1049600,280:33555457,296:34603009,312:1,328:33554432,344:1048576,360:1025,376:34604032,392:33554433,408:34603008,424:0,440:34604033,456:1049601,472:1024,488:33555456,504:1048577},{0:134219808,1:131072,2:134217728,3:32,4:131104,5:134350880,6:134350848,7:2048,8:134348800,9:134219776,10:133120,11:134348832,12:2080,13:0,14:134217760,15:133152,2147483648:2048,2147483649:134350880,2147483650:134219808,2147483651:134217728,2147483652:134348800,2147483653:133120,2147483654:133152,2147483655:32,2147483656:134217760,2147483657:2080,2147483658:131104,2147483659:134350848,2147483660:0,2147483661:134348832,2147483662:134219776,2147483663:131072,16:133152,17:134350848,18:32,19:2048,20:134219776,21:134217760,22:134348832,23:131072,24:0,25:131104,26:134348800,27:134219808,28:134350880,29:133120,30:2080,31:134217728,2147483664:131072,2147483665:2048,2147483666:134348832,2147483667:133152,2147483668:32,2147483669:134348800,2147483670:134217728,2147483671:134219808,2147483672:134350880,2147483673:134217760,2147483674:134219776,2147483675:0,2147483676:133120,2147483677:2080,2147483678:131104,2147483679:134350848}],p=[4160749569,528482304,33030144,2064384,129024,8064,504,2147483679],n=i.DES=e.extend({_doReset:function(){for(var t=this._key.words,e=[],r=0;r<56;r++){var i=h[r]-1;e[r]=t[i>>>5]>>>31-i%32&1}for(var n=this._subKeys=[],o=0;o<16;o++){for(var s=n[o]=[],c=f[o],r=0;r<24;r++)s[r/6|0]|=e[(l[r]-1+c)%28]<<31-r%6,s[4+(r/6|0)]|=e[28+(l[r+24]-1+c)%28]<<31-r%6;s[0]=s[0]<<1|s[0]>>>31;for(r=1;r<7;r++)s[r]=s[r]>>>4*(r-1)+3;s[7]=s[7]<<5|s[7]>>>27}for(var a=this._invSubKeys=[],r=0;r<16;r++)a[r]=n[15-r]},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._subKeys)},decryptBlock:function(t,e){this._doCryptBlock(t,e,this._invSubKeys)},_doCryptBlock:function(t,e,r){this._lBlock=t[e],this._rBlock=t[e+1],u.call(this,4,252645135),u.call(this,16,65535),y.call(this,2,858993459),y.call(this,8,16711935),u.call(this,1,1431655765);for(var i=0;i<16;i++){for(var n=r[i],o=this._lBlock,s=this._rBlock,c=0,a=0;a<8;a++)c|=d[a][((s^n[a])&p[a])>>>0];this._lBlock=s,this._rBlock=o^c}var h=this._lBlock;this._lBlock=this._rBlock,this._rBlock=h,u.call(this,1,1431655765),y.call(this,8,16711935),y.call(this,2,858993459),u.call(this,16,65535),u.call(this,4,252645135),t[e]=this._lBlock,t[e+1]=this._rBlock},keySize:2,ivSize:2,blockSize:2});function u(t,e){e=(this._lBlock>>>t^this._rBlock)&e;this._rBlock^=e,this._lBlock^=e<<t}function y(t,e){e=(this._rBlock>>>t^this._lBlock)&e;this._lBlock^=e,this._rBlock^=e<<t}t.DES=e._createHelper(n);i=i.TripleDES=e.extend({_doReset:function(){var t=this._key.words;this._des1=n.createEncryptor(r.create(t.slice(0,2))),this._des2=n.createEncryptor(r.create(t.slice(2,4))),this._des3=n.createEncryptor(r.create(t.slice(4,6)))},encryptBlock:function(t,e){this._des1.encryptBlock(t,e),this._des2.decryptBlock(t,e),this._des3.encryptBlock(t,e)},decryptBlock:function(t,e){this._des3.decryptBlock(t,e),this._des2.encryptBlock(t,e),this._des1.decryptBlock(t,e)},keySize:6,ivSize:2,blockSize:2});t.TripleDES=e._createHelper(i)}(),function(){var t=CryptoJS,e=t.lib.StreamCipher,r=t.algo,i=r.RC4=e.extend({_doReset:function(){for(var t=this._key,e=t.words,r=t.sigBytes,i=this._S=[],n=0;n<256;n++)i[n]=n;for(var n=0,o=0;n<256;n++){var s=n%r,s=e[s>>>2]>>>24-s%4*8&255,o=(o+i[n]+s)%256,s=i[n];i[n]=i[o],i[o]=s}this._i=this._j=0},_doProcessBlock:function(t,e){t[e]^=n.call(this)},keySize:8,ivSize:0});function n(){for(var t=this._S,e=this._i,r=this._j,i=0,n=0;n<4;n++){var r=(r+t[e=(e+1)%256])%256,o=t[e];t[e]=t[r],t[r]=o,i|=t[(t[e]+t[r])%256]<<24-8*n}return this._i=e,this._j=r,i}t.RC4=e._createHelper(i);r=r.RC4Drop=i.extend({cfg:i.cfg.extend({drop:192}),_doReset:function(){i._doReset.call(this);for(var t=this.cfg.drop;0<t;t--)n.call(this)}});t.RC4Drop=e._createHelper(r)}(),CryptoJS.mode.CTRGladman=function(){var t=CryptoJS.lib.BlockCipherMode.extend();function a(t){var e,r,i;return 255==(t>>24&255)?(r=t>>8&255,i=255&t,255===(e=t>>16&255)?(e=0,255===r?(r=0,255===i?i=0:++i):++r):++e,t=0,t=(t+=e<<16)+(r<<8)+i):t+=1<<24,t}var e=t.Encryptor=t.extend({processBlock:function(t,e){var r=this._cipher,i=r.blockSize,n=this._iv,o=this._counter,s=(n&&(o=this._counter=n.slice(0),this._iv=void 0),0===((n=o)[0]=a(n[0]))&&(n[1]=a(n[1])),o.slice(0));r.encryptBlock(s,0);for(var c=0;c<i;c++)t[e+c]^=s[c]}});return t.Decryptor=e,t}(),function(){var t=CryptoJS,e=t.lib.StreamCipher,r=t.algo,n=[],s=[],c=[],r=r.Rabbit=e.extend({_doReset:function(){for(var t=this._key.words,e=this.cfg.iv,r=0;r<4;r++)t[r]=16711935&(t[r]<<8|t[r]>>>24)|4278255360&(t[r]<<24|t[r]>>>8);for(var i=this._X=[t[0],t[3]<<16|t[2]>>>16,t[1],t[0]<<16|t[3]>>>16,t[2],t[1]<<16|t[0]>>>16,t[3],t[2]<<16|t[1]>>>16],n=this._C=[t[2]<<16|t[2]>>>16,4294901760&t[0]|65535&t[1],t[3]<<16|t[3]>>>16,4294901760&t[1]|65535&t[2],t[0]<<16|t[0]>>>16,4294901760&t[2]|65535&t[3],t[1]<<16|t[1]>>>16,4294901760&t[3]|65535&t[0]],r=this._b=0;r<4;r++)a.call(this);for(r=0;r<8;r++)n[r]^=i[r+4&7];if(e){var e=e.words,o=e[0],e=e[1],o=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),e=16711935&(e<<8|e>>>24)|4278255360&(e<<24|e>>>8),s=o>>>16|4294901760&e,c=e<<16|65535&o;n[0]^=o,n[1]^=s,n[2]^=e,n[3]^=c,n[4]^=o,n[5]^=s,n[6]^=e,n[7]^=c;for(r=0;r<4;r++)a.call(this)}},_doProcessBlock:function(t,e){var r=this._X;a.call(this),n[0]=r[0]^r[5]>>>16^r[3]<<16,n[1]=r[2]^r[7]>>>16^r[5]<<16,n[2]=r[4]^r[1]>>>16^r[7]<<16,n[3]=r[6]^r[3]>>>16^r[1]<<16;for(var i=0;i<4;i++)n[i]=16711935&(n[i]<<8|n[i]>>>24)|4278255360&(n[i]<<24|n[i]>>>8),t[e+i]^=n[i]},blockSize:4,ivSize:2});function a(){for(var t=this._X,e=this._C,r=0;r<8;r++)s[r]=e[r];e[0]=e[0]+1295307597+this._b|0,e[1]=e[1]+3545052371+(e[0]>>>0<s[0]>>>0?1:0)|0,e[2]=e[2]+886263092+(e[1]>>>0<s[1]>>>0?1:0)|0,e[3]=e[3]+1295307597+(e[2]>>>0<s[2]>>>0?1:0)|0,e[4]=e[4]+3545052371+(e[3]>>>0<s[3]>>>0?1:0)|0,e[5]=e[5]+886263092+(e[4]>>>0<s[4]>>>0?1:0)|0,e[6]=e[6]+1295307597+(e[5]>>>0<s[5]>>>0?1:0)|0,e[7]=e[7]+3545052371+(e[6]>>>0<s[6]>>>0?1:0)|0,this._b=e[7]>>>0<s[7]>>>0?1:0;for(r=0;r<8;r++){var i=t[r]+e[r],n=65535&i,o=i>>>16;c[r]=((n*n>>>17)+n*o>>>15)+o*o^((4294901760&i)*i|0)+((65535&i)*i|0)}t[0]=c[0]+(c[7]<<16|c[7]>>>16)+(c[6]<<16|c[6]>>>16)|0,t[1]=c[1]+(c[0]<<8|c[0]>>>24)+c[7]|0,t[2]=c[2]+(c[1]<<16|c[1]>>>16)+(c[0]<<16|c[0]>>>16)|0,t[3]=c[3]+(c[2]<<8|c[2]>>>24)+c[1]|0,t[4]=c[4]+(c[3]<<16|c[3]>>>16)+(c[2]<<16|c[2]>>>16)|0,t[5]=c[5]+(c[4]<<8|c[4]>>>24)+c[3]|0,t[6]=c[6]+(c[5]<<16|c[5]>>>16)+(c[4]<<16|c[4]>>>16)|0,t[7]=c[7]+(c[6]<<8|c[6]>>>24)+c[5]|0}t.Rabbit=e._createHelper(r)}(),CryptoJS.mode.CTR=function(){var t=CryptoJS.lib.BlockCipherMode.extend(),e=t.Encryptor=t.extend({processBlock:function(t,e){var r=this._cipher,i=r.blockSize,n=this._iv,o=this._counter,s=(n&&(o=this._counter=n.slice(0),this._iv=void 0),o.slice(0));r.encryptBlock(s,0),o[i-1]=o[i-1]+1|0;for(var c=0;c<i;c++)t[e+c]^=s[c]}});return t.Decryptor=e,t}(),function(){var t=CryptoJS,e=t.lib.StreamCipher,r=t.algo,n=[],s=[],c=[],r=r.RabbitLegacy=e.extend({_doReset:function(){for(var t=this._key.words,e=this.cfg.iv,r=this._X=[t[0],t[3]<<16|t[2]>>>16,t[1],t[0]<<16|t[3]>>>16,t[2],t[1]<<16|t[0]>>>16,t[3],t[2]<<16|t[1]>>>16],i=this._C=[t[2]<<16|t[2]>>>16,4294901760&t[0]|65535&t[1],t[3]<<16|t[3]>>>16,4294901760&t[1]|65535&t[2],t[0]<<16|t[0]>>>16,4294901760&t[2]|65535&t[3],t[1]<<16|t[1]>>>16,4294901760&t[3]|65535&t[0]],n=this._b=0;n<4;n++)a.call(this);for(n=0;n<8;n++)i[n]^=r[n+4&7];if(e){var t=e.words,e=t[0],t=t[1],e=16711935&(e<<8|e>>>24)|4278255360&(e<<24|e>>>8),t=16711935&(t<<8|t>>>24)|4278255360&(t<<24|t>>>8),o=e>>>16|4294901760&t,s=t<<16|65535&e;i[0]^=e,i[1]^=o,i[2]^=t,i[3]^=s,i[4]^=e,i[5]^=o,i[6]^=t,i[7]^=s;for(n=0;n<4;n++)a.call(this)}},_doProcessBlock:function(t,e){var r=this._X;a.call(this),n[0]=r[0]^r[5]>>>16^r[3]<<16,n[1]=r[2]^r[7]>>>16^r[5]<<16,n[2]=r[4]^r[1]>>>16^r[7]<<16,n[3]=r[6]^r[3]>>>16^r[1]<<16;for(var i=0;i<4;i++)n[i]=16711935&(n[i]<<8|n[i]>>>24)|4278255360&(n[i]<<24|n[i]>>>8),t[e+i]^=n[i]},blockSize:4,ivSize:2});function a(){for(var t=this._X,e=this._C,r=0;r<8;r++)s[r]=e[r];e[0]=e[0]+1295307597+this._b|0,e[1]=e[1]+3545052371+(e[0]>>>0<s[0]>>>0?1:0)|0,e[2]=e[2]+886263092+(e[1]>>>0<s[1]>>>0?1:0)|0,e[3]=e[3]+1295307597+(e[2]>>>0<s[2]>>>0?1:0)|0,e[4]=e[4]+3545052371+(e[3]>>>0<s[3]>>>0?1:0)|0,e[5]=e[5]+886263092+(e[4]>>>0<s[4]>>>0?1:0)|0,e[6]=e[6]+1295307597+(e[5]>>>0<s[5]>>>0?1:0)|0,e[7]=e[7]+3545052371+(e[6]>>>0<s[6]>>>0?1:0)|0,this._b=e[7]>>>0<s[7]>>>0?1:0;for(r=0;r<8;r++){var i=t[r]+e[r],n=65535&i,o=i>>>16;c[r]=((n*n>>>17)+n*o>>>15)+o*o^((4294901760&i)*i|0)+((65535&i)*i|0)}t[0]=c[0]+(c[7]<<16|c[7]>>>16)+(c[6]<<16|c[6]>>>16)|0,t[1]=c[1]+(c[0]<<8|c[0]>>>24)+c[7]|0,t[2]=c[2]+(c[1]<<16|c[1]>>>16)+(c[0]<<16|c[0]>>>16)|0,t[3]=c[3]+(c[2]<<8|c[2]>>>24)+c[1]|0,t[4]=c[4]+(c[3]<<16|c[3]>>>16)+(c[2]<<16|c[2]>>>16)|0,t[5]=c[5]+(c[4]<<8|c[4]>>>24)+c[3]|0,t[6]=c[6]+(c[5]<<16|c[5]>>>16)+(c[4]<<16|c[4]>>>16)|0,t[7]=c[7]+(c[6]<<8|c[6]>>>24)+c[5]|0}t.RabbitLegacy=e._createHelper(r)}(),CryptoJS.pad.ZeroPadding={pad:function(t,e){e*=4;t.clamp(),t.sigBytes+=e-(t.sigBytes%e||e)},unpad:function(t){for(var e=t.words,r=t.sigBytes-1;!(e[r>>>2]>>>24-r%4*8&255);)r--;t.sigBytes=r+1}};const _keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";function isJSON(t){if("string"!=typeof t)return!1;try{return JSON.parse(t),!0}catch(t){return!1}}const randomInt=(t,e)=>parseInt(Math.random()*(e-t+1)+t),randomStr=e=>{let r="";for(let t=0;t<e;t++)r+=_keyStr[randomInt(0,64)];return r},base={encode(t){return t=CryptoJS.enc.Utf8.parse(t),CryptoJS.enc.Base64.stringify(t)},decode(t){return(t=CryptoJS.enc.Base64.parse(t)).toString(CryptoJS.enc.Utf8)}};function cipher(t,e){try{var r=randomStr(8),i=randomStr(8),n=(e=CryptoJS.enc.Utf8.parse(e),CryptoJS.enc.Utf8.parse(r+i)),o=CryptoJS.enc.Utf8.parse(t);return r+CryptoJS.AES.encrypt(o,e,{iv:n,mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.Pkcs7}).ciphertext.toString()+i}catch(t){}}function decipher(t,e){try{var r=t.slice(0,8),i=t.slice(t.length-8,t.length),n=(t=t.slice(8,t.length-8),e=CryptoJS.enc.Utf8.parse(e),CryptoJS.enc.Utf8.parse(r+i)),o=CryptoJS.enc.Hex.parse(t),s=CryptoJS.enc.Base64.stringify(o);return CryptoJS.AES.decrypt(s,e,{iv:n,mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.Pkcs7}).toString(CryptoJS.enc.Utf8).toString()}catch(t){}}const encode=function(t,e,r=0){for(t instanceof Object&&(t=JSON.stringify(t));e.length<16;)e+="0";return t=base.encode(cipher(t,e)),r&&(t=base.encode(t),t=base.encode(t),t=base.encode(t),t=base.encode(t),t=base.encode(t)),t},decode=function(t,e,r=0){try{for(;e.length<16;)e+="0";return t=base.decode(t),r&&(t=base.decode(t),t=base.decode(t),t=base.decode(t),t=base.decode(t),t=base.decode(t)),""!=(t=isJSON(t=decipher(t,e))?JSON.parse(t):t)&&t}catch(t){return!1}};try{module&&(module.exports={encode:encode,decode:decode,isJSON:isJSON,randomInt:randomInt,randomStr:randomStr})}catch(t){}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
const { decode, isJSON, encode } = require("./mas-encrypt.min");
|
|
2
|
+
const getTimestamp = () => new Date().getTime();
|
|
3
|
+
/**
|
|
4
|
+
*
|
|
5
|
+
* @param param0 token:解密的token,permission:效验的权限,只要有其中一个就可
|
|
6
|
+
* @param key 解密密钥
|
|
7
|
+
* @returns
|
|
8
|
+
*/
|
|
9
|
+
const validToken = ({ token, permission = [] }, key = "8087") => {
|
|
10
|
+
if (!token)
|
|
11
|
+
return { msg: "没有传入token数据", errorCode: 0, status: 0, token };
|
|
12
|
+
token = decode(token, key, 1);
|
|
13
|
+
if (!token) return { msg: "token数据错误", errorCode: 1, status: 0, token };
|
|
14
|
+
// 鉴权
|
|
15
|
+
if (permission.length != 0) {
|
|
16
|
+
const tPermission = token._permission;
|
|
17
|
+
if (!tPermission) {
|
|
18
|
+
return { msg: "权限错误", errorCode: 2, status: 0, token };
|
|
19
|
+
}
|
|
20
|
+
if (tPermission.filter((value) => permission.includes(value)).length == 0) {
|
|
21
|
+
return { msg: "权限错误", errorCode: 2, status: 0, token };
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
// 过期时间
|
|
25
|
+
if (token._masTime !== 0) {
|
|
26
|
+
if (getTimestamp() > token._masTime)
|
|
27
|
+
return { msg: "token过期", errorCode: 3, status: 0, token };
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return { ...token, status: 1 };
|
|
31
|
+
};
|
|
32
|
+
const getErrorInfo = () => {
|
|
33
|
+
return [
|
|
34
|
+
{ msg: "没有传入token数据", errorCode: 0, status: 0 },
|
|
35
|
+
{ msg: "token数据错误", errorCode: 1, status: 0 },
|
|
36
|
+
{ msg: "权限错误", errorCode: 2, status: 0 },
|
|
37
|
+
{ msg: "token过期", errorCode: 3, status: 0 },
|
|
38
|
+
];
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
*
|
|
42
|
+
* @param param0 data:加密的数据,time:过期时间/s(为零则不会过期),permission:权限设置
|
|
43
|
+
* @param key 加密密钥
|
|
44
|
+
* @returns
|
|
45
|
+
*/
|
|
46
|
+
function createToken(
|
|
47
|
+
{ data = null, time = 0, permission = [] } = {},
|
|
48
|
+
key = "8087"
|
|
49
|
+
) {
|
|
50
|
+
const token: any = {};
|
|
51
|
+
token.data = data;
|
|
52
|
+
permission.length != 0 && (token._permission = permission);
|
|
53
|
+
time !== 0 && (token._masTime = time * 1000 + getTimestamp());
|
|
54
|
+
return encode(token, key, 1);
|
|
55
|
+
}
|
|
56
|
+
export { validToken, createToken };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export default (req, res, next) => {
|
|
2
|
+
// req.fields && (req.body = req.fields);
|
|
3
|
+
let right = true;
|
|
4
|
+
res.return = async (data, status = 1, code = 200, msg = "") => {
|
|
5
|
+
if (!right) return;
|
|
6
|
+
right = false;
|
|
7
|
+
if (data === null || data === undefined) {
|
|
8
|
+
status = 0;
|
|
9
|
+
}
|
|
10
|
+
if (data instanceof Promise) data = await data;
|
|
11
|
+
// if (typeof data != "string") data = JSON.stringify(data);
|
|
12
|
+
res.status(code).send({
|
|
13
|
+
msg,
|
|
14
|
+
status: !!status ? 1 : 0,
|
|
15
|
+
data: data === null || data === undefined ? null : data,
|
|
16
|
+
});
|
|
17
|
+
};
|
|
18
|
+
next();
|
|
19
|
+
};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import * as fs from "fs";
|
|
2
|
+
import * as path from "path";
|
|
3
|
+
|
|
4
|
+
export default function readFilesRecursively(
|
|
5
|
+
folderPath: string,
|
|
6
|
+
routerPrefix: string = ""
|
|
7
|
+
): string[] {
|
|
8
|
+
const files: string[] = [];
|
|
9
|
+
|
|
10
|
+
fs.readdirSync(folderPath).forEach((fileName) => {
|
|
11
|
+
const filePath = path.join(folderPath, fileName);
|
|
12
|
+
const stat = fs.statSync(filePath);
|
|
13
|
+
|
|
14
|
+
if (stat.isDirectory()) {
|
|
15
|
+
const directoryPrefix = routerPrefix
|
|
16
|
+
? `${routerPrefix}/${fileName}`
|
|
17
|
+
: fileName;
|
|
18
|
+
const directoryFiles = readFilesRecursively(filePath, directoryPrefix);
|
|
19
|
+
files.push(...directoryFiles);
|
|
20
|
+
} else {
|
|
21
|
+
const filePrefix = routerPrefix
|
|
22
|
+
? `${routerPrefix}/${fileName}`
|
|
23
|
+
: fileName;
|
|
24
|
+
const fileRoute = `/${filePrefix.replace(/\.[^/.]+$/, "")}`;
|
|
25
|
+
files.push(fileRoute);
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
return files;
|
|
30
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { apiConfigType, masReq, masRes } from "..";
|
|
2
|
+
import { state } from "@/state";
|
|
3
|
+
import validType from "./validType";
|
|
4
|
+
export default (req: masReq, res: masRes, next) => {
|
|
5
|
+
const Router: apiConfigType = state.Router;
|
|
6
|
+
const routerObj = Router[req.path];
|
|
7
|
+
|
|
8
|
+
if (routerObj) {
|
|
9
|
+
if (
|
|
10
|
+
routerObj.methods != "all" &&
|
|
11
|
+
routerObj.methods != req.method.toLowerCase()
|
|
12
|
+
) {
|
|
13
|
+
return res.return("error method!", 0, 400);
|
|
14
|
+
}
|
|
15
|
+
if (routerObj.header && routerObj.header.length != 0) {
|
|
16
|
+
const headerObj = {};
|
|
17
|
+
routerObj.header.forEach((item) => {
|
|
18
|
+
headerObj[item.name] = item.type;
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
if (!validType(req.headers, headerObj)) {
|
|
22
|
+
return res.return("error headers format!", 0, 400);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
if (
|
|
26
|
+
req.method == "GET" &&
|
|
27
|
+
routerObj.validFormat &&
|
|
28
|
+
!validType(
|
|
29
|
+
req.query,
|
|
30
|
+
routerObj.validFormat,
|
|
31
|
+
!!routerObj.validFormatStrict
|
|
32
|
+
)
|
|
33
|
+
) {
|
|
34
|
+
return res.return("error data format!", 0, 400);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
if (
|
|
38
|
+
req.method == "POST" &&
|
|
39
|
+
routerObj.validFormat &&
|
|
40
|
+
!validType(req.body, routerObj.validFormat, !!routerObj.validFormatStrict)
|
|
41
|
+
) {
|
|
42
|
+
return res.return("error data format!", 0, 400);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
next();
|
|
46
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { state } from "@/state";
|
|
2
|
+
import { masReq, masRes, validToken } from "..";
|
|
3
|
+
import { getType } from "./masUtils";
|
|
4
|
+
|
|
5
|
+
export default (req: masReq, res: any, next) => {
|
|
6
|
+
const r = state.Router[req.path];
|
|
7
|
+
const tokenConfig = state.config.token;
|
|
8
|
+
if (getType(r?.permission) == "array") {
|
|
9
|
+
const token = req.headers[tokenConfig.headerParams];
|
|
10
|
+
if (!token) {
|
|
11
|
+
return res.return("缺少重要参数", 0);
|
|
12
|
+
}
|
|
13
|
+
let vt = validToken({ token, permission: r.permission }, tokenConfig.pwd);
|
|
14
|
+
if (vt.status === 0) {
|
|
15
|
+
return res.return(vt.msg, 0, 200, vt.errorCode);
|
|
16
|
+
}
|
|
17
|
+
res.token = vt;
|
|
18
|
+
next();
|
|
19
|
+
} else {
|
|
20
|
+
next();
|
|
21
|
+
}
|
|
22
|
+
};
|