gc_rsa 1.3.4 → 1.3.5
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/package.json +1 -1
- package/src/lib/obj.js +8 -1
- package/src/lib/signature.js +12 -16
package/package.json
CHANGED
package/src/lib/obj.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { mapKeys, isEmpty, includes } from "lodash-es";
|
|
2
|
+
import { stringify } from "qs"
|
|
2
3
|
|
|
3
4
|
export const concat = obj => {
|
|
4
5
|
let str = "";
|
|
@@ -18,5 +19,11 @@ export const concatURL = (pathname, query) => {
|
|
|
18
19
|
return isEmpty(query)
|
|
19
20
|
? pathname
|
|
20
21
|
: (includes(pathname, "?") ? pathname : pathname + "?") +
|
|
21
|
-
|
|
22
|
+
query.substring(1);
|
|
22
23
|
};
|
|
24
|
+
|
|
25
|
+
export const buildUrl = (pathname, params) => {
|
|
26
|
+
return isEmpty(params)
|
|
27
|
+
? pathname
|
|
28
|
+
: `${pathname}?${stringify(params)}`;
|
|
29
|
+
}
|
package/src/lib/signature.js
CHANGED
|
@@ -1,17 +1,20 @@
|
|
|
1
1
|
// import stringify from "qs/lib/stringify";
|
|
2
|
-
import { concat, concatURL } from "./obj";
|
|
2
|
+
import { concat, concatURL, buildUrl } from "./obj";
|
|
3
3
|
import parse from "qs/lib/parse";
|
|
4
|
-
import { isObject, isString, isEmpty, now, random } from "lodash-es";
|
|
4
|
+
import { isObject, isString, isEmpty, now, random, get } from "lodash-es";
|
|
5
5
|
import { parse as urlParseLib } from "url";
|
|
6
6
|
import crypto from "./crypto";
|
|
7
7
|
import sort from "./sort";
|
|
8
8
|
import transformHeaders from "./transformHeaders";
|
|
9
9
|
|
|
10
10
|
const FormHeader = "application/x-www-form-urlencoded";
|
|
11
|
-
const signature = (request, { appkey, appsecret,
|
|
11
|
+
const signature = (request, { appkey, appsecret, originQuery }) => {
|
|
12
12
|
try {
|
|
13
13
|
if (appkey && appsecret) {
|
|
14
|
-
const { method,
|
|
14
|
+
const { method, url: originUrl } = request;
|
|
15
|
+
let url = originQuery ? buildUrl(originUrl, originQuery) : originUrl
|
|
16
|
+
let headers = get(request, "headers") || get(request, "header")
|
|
17
|
+
|
|
15
18
|
const { Accept } = headers;
|
|
16
19
|
const urlParsed = urlParseLib(url, true),
|
|
17
20
|
queryObject = urlParsed.query;
|
|
@@ -26,20 +29,15 @@ const signature = (request, { appkey, appsecret, engineType }) => {
|
|
|
26
29
|
if (!headers["Accept"]) {
|
|
27
30
|
headers["Accept"] = "*/*";
|
|
28
31
|
}
|
|
29
|
-
|
|
32
|
+
// 只有当 Body 非 Form 表单时才计算 MD5
|
|
30
33
|
if (request.body && headers["Content-Type"].indexOf(FormHeader) === -1) {
|
|
31
34
|
contentMD5 = crypto.md5Content(request.body);
|
|
32
35
|
headers["Content-MD5"] = contentMD5;
|
|
33
36
|
} else {
|
|
34
|
-
//如果是Form表单提交
|
|
35
37
|
let formObject = request.body;
|
|
36
|
-
|
|
37
|
-
if (isObject(formObject)) {
|
|
38
|
-
obj = sort(formObject);
|
|
39
|
-
}
|
|
38
|
+
|
|
40
39
|
if (isString(formObject)) {
|
|
41
40
|
const obj = parse(formObject);
|
|
42
|
-
console.log("objobj", obj);
|
|
43
41
|
if (isEmpty(query)) {
|
|
44
42
|
query = obj;
|
|
45
43
|
} else {
|
|
@@ -55,11 +53,9 @@ const signature = (request, { appkey, appsecret, engineType }) => {
|
|
|
55
53
|
headers["X-Gw-Key"] = appkey;
|
|
56
54
|
headers["X-Gw-Timestamp"] = now();
|
|
57
55
|
headers["X-Gw-Nonce"] = random(1000000000000, 9999999999999);
|
|
58
|
-
const stringToSign = `${method}\n${
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
transformHeaders(headers).transformHeader
|
|
62
|
-
}${decodeURIComponent(urlPath)}`;
|
|
56
|
+
const stringToSign = `${method}\n${Accept ? Accept : "*/*"
|
|
57
|
+
}\n${contentMD5}\n${ContentType}\n\n${transformHeaders(headers).transformHeader
|
|
58
|
+
}${decodeURIComponent(urlPath)}`;
|
|
63
59
|
console.log("==============", urlPath, "======================");
|
|
64
60
|
console.log(stringToSign);
|
|
65
61
|
console.log("==============", urlPath, "======================");
|