chore: 支持dynadot,会覆盖原有的dns解析,京东云也有问题,没有测试通过,这两个目前都有缺陷

pull/189/head
xiaojunnuo 2024-09-25 02:31:45 +08:00
parent f9a3ac2cb1
commit 86e291c5a3
13 changed files with 292 additions and 527 deletions

View File

@ -12,11 +12,17 @@
"preview": "vite preview"
},
"dependencies": {
"babel-register": "^6.26.0",
"buffer": "^5.0.8",
"create-hash": "^1.1.3",
"create-hmac": "^1.1.6",
"debug": "^3.1.0",
"node-fetch": "^2.1.2",
"url": "^0.11.0",
"uuid": "^3.1.0",
"@certd/pipeline": "1.21.0",
"axios": "^1.7.2",
"node-fetch": "^3.3.2",
"rollup": "^3.7.4",
"uuid": "^3.4.0"
"rollup": "^3.7.4"
},
"gitHead": "c49ccbde93dbad7062ac39d4f18eca7d561f573f"
}

View File

@ -12,7 +12,11 @@ module.exports = {
},
plugins: [
// 解析第三方依赖
resolve(),
resolve({
jsnext: true,
main: true,
browser: true,
}),
// 识别 commonjs 模式第三方依赖
commonjs({
// dynamicRequireRoot: "../../../../",
@ -32,5 +36,5 @@ module.exports = {
json(),
terser(),
],
external: ["vue", "lodash-es", "dayjs", "log4js", "@midwayjs/core", "@certd/pipeline", "axios", "node-fetch"],
external: ["vue", "lodash-es", "dayjs", "log4js", "@midwayjs/core", "@certd/pipeline", "axios", "querystring"],
};

View File

@ -1,13 +1,12 @@
require('node-fetch')
var JDCloud = {
util: require('./util'),
util: require("./util"),
// todo swaggerVar
VERSION: ''
}
VERSION: "",
fetch: require("node-fetch"),
};
module.exports = JDCloud
module.exports = JDCloud;
require('./service')
require('./config')
require('./request')
require("./service");
require("./config");
require("./request");

View File

@ -1,126 +1,106 @@
var JDCloud = require('./core')
var JDCloud = require("./core");
let util = JDCloud.util
let util = JDCloud.util;
JDCloud.JCRequest = class JCRequest {
constructor (
service,
path,
httpMethod,
pathParams,
queryParams,
headerParams,
formParams,
postBody,
contentTypes,
accepts,
returnType
) {
this.service = service
constructor(service, path, httpMethod, pathParams, queryParams, headerParams, formParams, postBody, contentTypes, accepts, returnType) {
this.service = service;
var endpoint = service.config.endpoint
pathParams.regionId = pathParams.regionId || service.config.regionId
this.regionId = pathParams.regionId
var endpoint = service.config.endpoint;
pathParams.regionId = pathParams.regionId || service.config.regionId;
this.regionId = pathParams.regionId;
this.path = this.buildPath(path, pathParams)
this.path = util.uriEscapePath(this.path)
this.path = this.buildPath(path, pathParams);
this.path = util.uriEscapePath(this.path);
var queryString = this.buildQuery(queryParams)
var queryString = this.buildQuery(queryParams);
var url = this.path
var url = this.path;
if (queryString) {
url = this.path + '?' + queryString
url = this.path + "?" + queryString;
}
var contentType = this.jsonPreferredMime(contentTypes) || 'application/json'
headerParams['content-type'] = contentType
var requestHeaders = this.buildHeaders(headerParams)
var contentType = this.jsonPreferredMime(contentTypes) || "application/json";
headerParams["content-type"] = contentType;
var requestHeaders = this.buildHeaders(headerParams);
var requestInit = {
method: httpMethod || 'GET',
headers: requestHeaders
}
method: httpMethod || "GET",
headers: requestHeaders,
};
if (contentType === 'application/x-www-form-urlencoded') {
} else if (contentType === 'multipart/form-data') {
if (contentType === "application/x-www-form-urlencoded") {
} else if (contentType === "multipart/form-data") {
} else if (postBody) {
requestInit.body = JSON.stringify(postBody)
requestInit.body = JSON.stringify(postBody);
}
var fetchUrl = endpoint.protocol + '://' + endpoint.host + url
JDCloud.config.logger(
`make request where url is :${fetchUrl} \nwith fetch config:${JSON.stringify(
requestInit
)}`
)
this.request = new JDCloud.fetch.Request(fetchUrl, requestInit)
var fetchUrl = endpoint.protocol + "://" + endpoint.host + url;
JDCloud.config.logger(`make request where url is :${fetchUrl} \nwith fetch config:${JSON.stringify(requestInit)}`);
this.request = new JDCloud.fetch.Request(fetchUrl, requestInit);
this.request.bodyCache = requestInit.body;
}
buildPath (path, pathParams) {
var uri = (this.service.config.basePath || '') + path
buildPath(path, pathParams) {
var uri = (this.service.config.basePath || "") + path;
uri = uri.replace(/\{([\w-]+)\}/g, (fullMatch, key) => {
var value
var value;
if (pathParams.hasOwnProperty(key)) {
value = pathParams[key]
value = pathParams[key];
} else {
value = fullMatch
value = fullMatch;
}
return value
})
return uri
return value;
});
return uri;
}
buildQuery (queryParams) {
var queryParamsWithoutEmptyItem = {}
var keys = Object.keys(queryParams)
buildQuery(queryParams) {
var queryParamsWithoutEmptyItem = {};
var keys = Object.keys(queryParams);
for (let key of keys) {
if (queryParams[key] !== undefined) {
queryParamsWithoutEmptyItem[key] = queryParams[key]
queryParamsWithoutEmptyItem[key] = queryParams[key];
}
}
return JDCloud.util.querystring.stringify(queryParamsWithoutEmptyItem)
return JDCloud.util.querystring.stringify(queryParamsWithoutEmptyItem);
}
search () {
var query = this.request.url.split('?', 2)[1]
search() {
var query = this.request.url.split("?", 2)[1];
if (query) {
query = JDCloud.util.querystring.parse(query)
return JDCloud.util.queryParamsToString(query)
query = JDCloud.util.querystring.parse(query);
return JDCloud.util.queryParamsToString(query);
}
return ''
return "";
}
digitizationArray (key, obj) {
var result = key
digitizationArray(key, obj) {
var result = key;
if (Array.isArray(obj)) {
JDCloud.util.arrayEach(obj, (arrayValue, index) => {
result += this.digitizationArray(`.${index + 1}`, arrayValue)
})
} else if (typeof obj === 'object' && obj != null) {
result += this.digitizationArray(`.${index + 1}`, arrayValue);
});
} else if (typeof obj === "object" && obj != null) {
JDCloud.util.each(obj, (key, ObjValue) => {
result += `.name=${key}&${result}.values` + this.digitizationArray()
result +=
key +
'.name=' +
ObjValue +
'&' +
this.digitizationArray(key + '.values', ObjValue)
})
result += `.name=${key}&${result}.values` + this.digitizationArray();
result += key + ".name=" + ObjValue + "&" + this.digitizationArray(key + ".values", ObjValue);
});
} else {
result += key + '=' + encodeURI(obj)
result += key + "=" + encodeURI(obj);
}
return result
return result;
}
buildHeaders (headerParams) {
buildHeaders(headerParams) {
var headers = new JDCloud.fetch.Headers({
accept: 'application/json'
})
accept: "application/json",
});
util.each.call(this, headerParams, function (key) {
if (headerParams[key] !== undefined && headerParams[key] != null) {
headers.append(key, headerParams[key])
headers.append(key, headerParams[key]);
}
})
return headers
});
return headers;
}
/**
@ -134,10 +114,8 @@ JDCloud.JCRequest = class JCRequest {
* @param {String} contentType The MIME content type to check.
* @returns {Boolean} <code>true</code> if <code>contentType</code> represents JSON, otherwise <code>false</code>.
*/
isJsonMime (contentType) {
return Boolean(
contentType != null && contentType.match(/^application\/json(;.*)?$/i)
)
isJsonMime(contentType) {
return Boolean(contentType != null && contentType.match(/^application\/json(;.*)?$/i));
}
/**
@ -145,15 +123,15 @@ JDCloud.JCRequest = class JCRequest {
* @param {Array.<String>} contentTypes
* @returns {String} The chosen content type, preferring JSON.
*/
jsonPreferredMime (contentTypes) {
jsonPreferredMime(contentTypes) {
for (var i = 0; i < contentTypes.length; i++) {
if (this.isJsonMime(contentTypes[i])) {
return contentTypes[i]
return contentTypes[i];
}
}
return contentTypes[0]
return contentTypes[0];
}
}
};
module.exports = JDCloud.JCRequest
module.exports = JDCloud.JCRequest;

View File

@ -138,7 +138,11 @@ module.exports = class SignerV2 extends RequestSigner {
}
hexEncodedBodyHash() {
return this.hexEncodedHash(this.request.request.body || "");
let body = this.request.request?.body;
if (body && body instanceof ReadableStream) {
body = this.request.request?.bodyCache;
}
return this.hexEncodedHash(body || "");
/* var request = this.request;
if (this.isPresigned() && this.serviceName === 's3' && !request.body) {
return 'UNSIGNED-PAYLOAD';

View File

@ -1,477 +1,219 @@
var util = {
isBrowser: function isBrowser () {
return process && process.browser
isBrowser: function isBrowser() {
return process && process.browser;
},
isNode: function isNode () {
return !util.isBrowser()
isNode: function isNode() {
return !util.isBrowser();
},
uriEscape: function uriEscape (string) {
var output = encodeURIComponent(string)
output = output.replace(/[^A-Za-z0-9_.~\-%]+/g, escape)
uriEscape: function uriEscape(string) {
var output = encodeURIComponent(string);
output = output.replace(/[^A-Za-z0-9_.~\-%]+/g, escape);
// AWS percent-encodes some extra non-standard characters in a URI
output = output.replace(/[*]/g, function (ch) {
return (
'%' +
ch
.charCodeAt(0)
.toString(16)
.toUpperCase()
)
})
return "%" + ch.charCodeAt(0).toString(16).toUpperCase();
});
return output
return output;
},
uriEscapePath: function uriEscapePath (string) {
var parts = []
util.arrayEach(string.split('/'), function (part) {
parts.push(util.uriEscape(part))
})
return parts.join('/')
uriEscapePath: function uriEscapePath(string) {
var parts = [];
util.arrayEach(string.split("/"), function (part) {
parts.push(util.uriEscape(part));
});
return parts.join("/");
},
abort: {},
each: function each (object, iterFunction) {
each: function each(object, iterFunction) {
for (var key in object) {
if (Object.prototype.hasOwnProperty.call(object, key)) {
var ret = iterFunction.call(this, key, object[key])
if (ret === util.abort) break
var ret = iterFunction.call(this, key, object[key]);
if (ret === util.abort) break;
}
}
},
arrayEach: function arrayEach (array, iterFunction) {
arrayEach: function arrayEach(array, iterFunction) {
for (var idx in array) {
if (Object.prototype.hasOwnProperty.call(array, idx)) {
var ret = iterFunction.call(this, array[idx], parseInt(idx, 10))
if (ret === util.abort) break
var ret = iterFunction.call(this, array[idx], parseInt(idx, 10));
if (ret === util.abort) break;
}
}
},
arraySliceFn: function arraySliceFn (obj) {
var fn = obj.slice || obj.webkitSlice || obj.mozSlice
return typeof fn === 'function' ? fn : null
arraySliceFn: function arraySliceFn(obj) {
var fn = obj.slice || obj.webkitSlice || obj.mozSlice;
return typeof fn === "function" ? fn : null;
},
queryParamsToString: function queryParamsToString (params) {
var items = []
var escape = util.uriEscape
var sortedKeys = Object.keys(params).sort()
queryParamsToString: function queryParamsToString(params) {
var items = [];
var escape = util.uriEscape;
var sortedKeys = Object.keys(params).sort();
util.arrayEach(sortedKeys, function (name) {
var value = params[name]
var ename = escape(name)
var result = ename + '='
var value = params[name];
var ename = escape(name);
var result = ename + "=";
if (Array.isArray(value)) {
var vals = []
var vals = [];
util.arrayEach(value, function (item) {
vals.push(escape(item))
})
result = ename + '=' + vals.sort().join('&' + ename + '=')
vals.push(escape(item));
});
result = ename + "=" + vals.sort().join("&" + ename + "=");
} else if (value !== undefined && value !== null) {
result = ename + '=' + escape(value)
result = ename + "=" + escape(value);
}
items.push(result)
})
items.push(result);
});
return items.join('&')
return items.join("&");
},
date: {
getDate () {
return new Date()
getDate() {
return new Date();
},
iso8601: function iso8601 (date) {
iso8601: function iso8601(date) {
if (date === undefined) {
date = util.date.getDate()
date = util.date.getDate();
}
return date.toISOString().replace(/\.\d{3}Z$/, 'Z')
}
return date.toISOString().replace(/\.\d{3}Z$/, "Z");
},
},
crypto: {
/* eslint-disable no-use-before-define */
crc32Table: [
0x00000000,
0x77073096,
0xee0e612c,
0x990951ba,
0x076dc419,
0x706af48f,
0xe963a535,
0x9e6495a3,
0x0edb8832,
0x79dcb8a4,
0xe0d5e91e,
0x97d2d988,
0x09b64c2b,
0x7eb17cbd,
0xe7b82d07,
0x90bf1d91,
0x1db71064,
0x6ab020f2,
0xf3b97148,
0x84be41de,
0x1adad47d,
0x6ddde4eb,
0xf4d4b551,
0x83d385c7,
0x136c9856,
0x646ba8c0,
0xfd62f97a,
0x8a65c9ec,
0x14015c4f,
0x63066cd9,
0xfa0f3d63,
0x8d080df5,
0x3b6e20c8,
0x4c69105e,
0xd56041e4,
0xa2677172,
0x3c03e4d1,
0x4b04d447,
0xd20d85fd,
0xa50ab56b,
0x35b5a8fa,
0x42b2986c,
0xdbbbc9d6,
0xacbcf940,
0x32d86ce3,
0x45df5c75,
0xdcd60dcf,
0xabd13d59,
0x26d930ac,
0x51de003a,
0xc8d75180,
0xbfd06116,
0x21b4f4b5,
0x56b3c423,
0xcfba9599,
0xb8bda50f,
0x2802b89e,
0x5f058808,
0xc60cd9b2,
0xb10be924,
0x2f6f7c87,
0x58684c11,
0xc1611dab,
0xb6662d3d,
0x76dc4190,
0x01db7106,
0x98d220bc,
0xefd5102a,
0x71b18589,
0x06b6b51f,
0x9fbfe4a5,
0xe8b8d433,
0x7807c9a2,
0x0f00f934,
0x9609a88e,
0xe10e9818,
0x7f6a0dbb,
0x086d3d2d,
0x91646c97,
0xe6635c01,
0x6b6b51f4,
0x1c6c6162,
0x856530d8,
0xf262004e,
0x6c0695ed,
0x1b01a57b,
0x8208f4c1,
0xf50fc457,
0x65b0d9c6,
0x12b7e950,
0x8bbeb8ea,
0xfcb9887c,
0x62dd1ddf,
0x15da2d49,
0x8cd37cf3,
0xfbd44c65,
0x4db26158,
0x3ab551ce,
0xa3bc0074,
0xd4bb30e2,
0x4adfa541,
0x3dd895d7,
0xa4d1c46d,
0xd3d6f4fb,
0x4369e96a,
0x346ed9fc,
0xad678846,
0xda60b8d0,
0x44042d73,
0x33031de5,
0xaa0a4c5f,
0xdd0d7cc9,
0x5005713c,
0x270241aa,
0xbe0b1010,
0xc90c2086,
0x5768b525,
0x206f85b3,
0xb966d409,
0xce61e49f,
0x5edef90e,
0x29d9c998,
0xb0d09822,
0xc7d7a8b4,
0x59b33d17,
0x2eb40d81,
0xb7bd5c3b,
0xc0ba6cad,
0xedb88320,
0x9abfb3b6,
0x03b6e20c,
0x74b1d29a,
0xead54739,
0x9dd277af,
0x04db2615,
0x73dc1683,
0xe3630b12,
0x94643b84,
0x0d6d6a3e,
0x7a6a5aa8,
0xe40ecf0b,
0x9309ff9d,
0x0a00ae27,
0x7d079eb1,
0xf00f9344,
0x8708a3d2,
0x1e01f268,
0x6906c2fe,
0xf762575d,
0x806567cb,
0x196c3671,
0x6e6b06e7,
0xfed41b76,
0x89d32be0,
0x10da7a5a,
0x67dd4acc,
0xf9b9df6f,
0x8ebeeff9,
0x17b7be43,
0x60b08ed5,
0xd6d6a3e8,
0xa1d1937e,
0x38d8c2c4,
0x4fdff252,
0xd1bb67f1,
0xa6bc5767,
0x3fb506dd,
0x48b2364b,
0xd80d2bda,
0xaf0a1b4c,
0x36034af6,
0x41047a60,
0xdf60efc3,
0xa867df55,
0x316e8eef,
0x4669be79,
0xcb61b38c,
0xbc66831a,
0x256fd2a0,
0x5268e236,
0xcc0c7795,
0xbb0b4703,
0x220216b9,
0x5505262f,
0xc5ba3bbe,
0xb2bd0b28,
0x2bb45a92,
0x5cb36a04,
0xc2d7ffa7,
0xb5d0cf31,
0x2cd99e8b,
0x5bdeae1d,
0x9b64c2b0,
0xec63f226,
0x756aa39c,
0x026d930a,
0x9c0906a9,
0xeb0e363f,
0x72076785,
0x05005713,
0x95bf4a82,
0xe2b87a14,
0x7bb12bae,
0x0cb61b38,
0x92d28e9b,
0xe5d5be0d,
0x7cdcefb7,
0x0bdbdf21,
0x86d3d2d4,
0xf1d4e242,
0x68ddb3f8,
0x1fda836e,
0x81be16cd,
0xf6b9265b,
0x6fb077e1,
0x18b74777,
0x88085ae6,
0xff0f6a70,
0x66063bca,
0x11010b5c,
0x8f659eff,
0xf862ae69,
0x616bffd3,
0x166ccf45,
0xa00ae278,
0xd70dd2ee,
0x4e048354,
0x3903b3c2,
0xa7672661,
0xd06016f7,
0x4969474d,
0x3e6e77db,
0xaed16a4a,
0xd9d65adc,
0x40df0b66,
0x37d83bf0,
0xa9bcae53,
0xdebb9ec5,
0x47b2cf7f,
0x30b5ffe9,
0xbdbdf21c,
0xcabac28a,
0x53b39330,
0x24b4a3a6,
0xbad03605,
0xcdd70693,
0x54de5729,
0x23d967bf,
0xb3667a2e,
0xc4614ab8,
0x5d681b02,
0x2a6f2b94,
0xb40bbe37,
0xc30c8ea1,
0x5a05df1b,
0x2d02ef8d
0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d,
],
/* eslint-disable no-use-before-define */
crc32: function crc32 (data) {
var tbl = util.crypto.crc32Table
var crc = 0 ^ -1
crc32: function crc32(data) {
var tbl = util.crypto.crc32Table;
var crc = 0 ^ -1;
if (typeof data === 'string') {
data = new util.Buffer(data)
if (typeof data === "string") {
data = new util.Buffer(data);
}
for (var i = 0; i < data.length; i++) {
var code = data.readUInt8(i)
crc = (crc >>> 8) ^ tbl[(crc ^ code) & 0xff]
var code = data.readUInt8(i);
crc = (crc >>> 8) ^ tbl[(crc ^ code) & 0xff];
}
return (crc ^ -1) >>> 0
return (crc ^ -1) >>> 0;
},
hmac: function hmac (key, string, digest, fn) {
if (!digest) digest = 'binary'
if (digest === 'buffer') {
digest = undefined
hmac: function hmac(key, string, digest, fn) {
if (!digest) digest = "binary";
if (digest === "buffer") {
digest = undefined;
}
if (!fn) fn = 'sha256'
if (typeof string === 'string') string = new util.Buffer(string)
return util.crypto.lib
.createHmac(fn, key)
.update(string)
.digest(digest)
if (!fn) fn = "sha256";
if (typeof string === "string") string = new util.Buffer(string);
return util.crypto.lib.createHmac(fn, key).update(string).digest(digest);
},
md5: function md5 (data, digest, callback) {
return util.crypto.hash('md5', data, digest, callback)
md5: function md5(data, digest, callback) {
return util.crypto.hash("md5", data, digest, callback);
},
sha256: function sha256 (data, digest, callback) {
return util.crypto.hash('sha256', data, digest, callback)
sha256: function sha256(data, digest, callback) {
return util.crypto.hash("sha256", data, digest, callback);
},
hash: function (algorithm, data, digest, callback) {
var hash = util.crypto.createHash(algorithm)
var hash = util.crypto.createHash(algorithm);
if (!digest) {
digest = 'binary'
digest = "binary";
}
if (digest === 'buffer') {
digest = undefined
if (digest === "buffer") {
digest = undefined;
}
if (typeof data === 'string') data = new util.Buffer(data)
var sliceFn = util.arraySliceFn(data)
var isBuffer = util.Buffer.isBuffer(data)
if (typeof data === "string") data = new util.Buffer(data);
var sliceFn = util.arraySliceFn(data);
var isBuffer = util.Buffer.isBuffer(data);
// Identifying objects with an ArrayBuffer as buffers
if (
util.isBrowser() &&
typeof ArrayBuffer !== 'undefined' &&
data &&
data.buffer instanceof ArrayBuffer
) {
isBuffer = true
if (util.isBrowser() && typeof ArrayBuffer !== "undefined" && data && data.buffer instanceof ArrayBuffer) {
isBuffer = true;
}
if (
callback &&
typeof data === 'object' &&
typeof data.on === 'function' &&
!isBuffer
) {
data.on('data', function (chunk) {
hash.update(chunk)
})
data.on('error', function (err) {
callback(err)
})
data.on('end', function () {
callback(null, hash.digest(digest))
})
} else if (
callback &&
sliceFn &&
!isBuffer &&
typeof FileReader !== 'undefined'
) {
if (callback && typeof data === "object" && typeof data.on === "function" && !isBuffer) {
data.on("data", function (chunk) {
hash.update(chunk);
});
data.on("error", function (err) {
callback(err);
});
data.on("end", function () {
callback(null, hash.digest(digest));
});
} else if (callback && sliceFn && !isBuffer && typeof FileReader !== "undefined") {
// this might be a File/Blob
var index = 0
var size = 1024 * 512
var reader = new FileReader()
var index = 0;
var size = 1024 * 512;
var reader = new FileReader();
reader.onerror = function () {
callback(new Error('Failed to read data.'))
}
callback(new Error("Failed to read data."));
};
reader.onload = function () {
var buf = new util.Buffer(new Uint8Array(reader.result))
hash.update(buf)
index += buf.length
reader._continueReading()
}
var buf = new util.Buffer(new Uint8Array(reader.result));
hash.update(buf);
index += buf.length;
reader._continueReading();
};
reader._continueReading = function () {
if (index >= data.size) {
callback(null, hash.digest(digest))
return
callback(null, hash.digest(digest));
return;
}
var back = index + size
if (back > data.size) back = data.size
reader.readAsArrayBuffer(sliceFn.call(data, index, back))
}
var back = index + size;
if (back > data.size) back = data.size;
reader.readAsArrayBuffer(sliceFn.call(data, index, back));
};
reader._continueReading()
reader._continueReading();
} else {
if (util.isBrowser() && typeof data === 'object' && !isBuffer) {
data = new util.Buffer(new Uint8Array(data))
if (util.isBrowser() && typeof data === "object" && !isBuffer) {
data = new util.Buffer(new Uint8Array(data));
}
var out = hash.update(data).digest(digest)
if (callback) callback(null, out)
return out
var out = hash.update(data).digest(digest);
if (callback) callback(null, out);
return out;
}
},
toHex: function toHex (data) {
var out = []
toHex: function toHex(data) {
var out = [];
for (var i = 0; i < data.length; i++) {
out.push(('0' + data.charCodeAt(i).toString(16)).substr(-2, 2))
out.push(("0" + data.charCodeAt(i).toString(16)).substr(-2, 2));
}
return out.join('')
return out.join("");
},
createHash: function createHash (algorithm) {
return util.crypto.lib.createHash(algorithm)
}
}
}
createHash: function createHash(algorithm) {
return util.crypto.lib.createHash(algorithm);
},
},
};
module.exports = util
module.exports = util;

View File

@ -196,8 +196,8 @@ export class CertApplyPlugin extends CertApplyBasePlugin {
const certInfo = this.formatCerts(cert);
return new CertReader(certInfo);
} catch (e: any) {
const message: string = e.message;
if (message.indexOf("redundant with a wildcard domain in the same request") >= 0) {
const message: string = e?.message;
if (message != null && message.indexOf("redundant with a wildcard domain in the same request") >= 0) {
this.logger.error(e);
throw new Error(`通配符域名已经包含了普通域名,请删除其中一个(${message}`);
}

View File

@ -3,7 +3,7 @@ import { ColumnCompositionProps, dict, compute } from "@fast-crud/fast-crud";
import * as api from "./api";
// @ts-ignore
import _ from "lodash-es";
import { toRef } from "vue";
import { computed, ref, toRef } from "vue";
import { useReference } from "/@/use/use-refrence";
export function getCommonColumnDefine(crudExpose: any, typeRef: any) {
@ -48,6 +48,8 @@ export function getCommonColumnDefine(crudExpose: any, typeRef: any) {
});
}
const currentDefine = ref();
return {
type: {
title: "类型",
@ -76,13 +78,21 @@ export function getCommonColumnDefine(crudExpose: any, typeRef: any) {
return;
}
const define = await api.GetProviderDefine(value);
currentDefine.value = define;
console.log("define", define);
if (!immediate) {
form.access = {};
}
buildDefineFields(define, form);
}
}
},
helper: computed(() => {
const define = currentDefine.value;
if (define == null) {
return "";
}
return define.desc;
})
},
addForm: {
value: typeRef

View File

@ -1,15 +1,19 @@
# key: ./data/ssl/cert.key
# cert: ./data/ssl/cert.crt
plus:
server:
baseUrl: 'http://127.0.0.1:11007'
#plus:
# server:
# baseUrl: 'https://api.ai.handsfree.work'
# baseUrl: 'http://127.0.0.1:11007'
plus:
server:
baseUrl: 'https://api.ai.handsfree.work'
#typeorm:
# dataSource:
# default:
# database: './data/db1.sqlite'
#account:
# server:
# baseUrl: 'http://127.0.0.1:1017/subject'
account:
server:
baseUrl: 'http://127.0.0.1:1017/subject'
baseUrl: 'https://ai.handsfree.work/subject'

View File

@ -63,7 +63,6 @@
"md5": "^2.3.0",
"mwtsc": "^1.4.0",
"nanoid": "^4.0.0",
"node-fetch": "^3.3.2",
"nodemailer": "^6.9.3",
"pg": "^8.12.0",
"qiniu": "^7.12.0",

View File

@ -7,7 +7,7 @@ import { AccessInput, IsAccess } from '@certd/pipeline';
@IsAccess({
name: 'dynadot',
title: 'dynadot授权',
desc: '目前设置dns解析会覆盖已有的解析配置慎用',
desc: '************\n注意申请证书时会覆盖已有的域名解析配置慎用\n************\n待优化主要是dynadot的接口一言难尽',
})
export class DynadotAccess {
/**

View File

@ -59,13 +59,21 @@ export class DynadotDnsProvider extends AbstractDnsProvider {
const { fullRecord, value, type, domain } = options;
this.logger.info('添加域名解析:', fullRecord, value, type, domain);
//先获取域名原始解析记录
//https://api.dynadot.com/api3.xml?key=[API Key]&command=domain_info&domain=domain1.com
const res1 = await this.doRequest('domain_info', {
domain: domain,
});
// this.logger.info(`域名信息:${JSON.stringify(res1)}`);
// "DomainInfoResponse.NameServerSettings":{"Type":"Dynadot DNS","SubDomains":[{"Subhost":"_acme-challenge","RecordType":"TXT","Value":"43XrhFA6pJpE7a-20y7BmC6CsN20TMt5l-Zl-CL_-4I"}],"TTL":"300"}
this.logger.info('原始域名解析记录:', JSON.stringify(res1.DomainInfoResponse?.DomainInfo?.NameServerSettings));
const prefix = fullRecord.replace(`.${domain}`, '');
// 给domain下创建txt类型的dns解析记录fullRecord
const res = await this.doRequest('set_dns2', {
domain: domain,
subdomain0: prefix,
sub_record_type0: 'TXT',
sub_record0 : value,
sub_record0: value,
});
this.logger.info(`添加域名解析成功:fullRecord=${fullRecord},value=${value}`);
this.logger.info(`请求结果:${JSON.stringify(res)}`);

View File

@ -4,13 +4,17 @@ import { JDCloudAccess } from './access.js';
function promisfy(func: any) {
return (params: any, regionId: string) => {
return new Promise((resolve, reject) => {
func(params, regionId, (err, result) => {
if (err) {
reject(err);
return;
}
resolve(result);
});
try {
func(params, regionId, (err, result) => {
if (err) {
reject(err.error || err);
return;
}
resolve(result);
});
} catch (e) {
reject(e);
}
});
};
}
@ -57,17 +61,23 @@ export class JDCloudDnsProvider extends AbstractDnsProvider {
const { fullRecord, value, type, domain } = options;
this.logger.info('添加域名解析:', fullRecord, value, type, domain);
const describeDomains = promisfy(this.service.describeDomains);
const describeDomains = promisfy((a, b, c) => {
this.service.describeDomains(a, b, c);
});
const res: any = await describeDomains({ domainName: domain, pageNumber: 1, pageSize: 10 }, this.regionId);
if (res.dataList.length === 0) {
this.logger.info('请求成功:', JSON.stringify(res.result));
const dataList = res.result.dataList;
if (dataList.length === 0) {
throw new Error('账号下找不到域名:' + domain);
}
const domainId = res.dataList[0].id;
const domainId = dataList[0].id;
this.logger.info('domainId:', domainId);
//开始创建解析记录
const createResourceRecord = promisfy(this.service.createResourceRecord);
const createResourceRecord = promisfy((a, b, c) => {
this.service.createResourceRecord(a, b, c);
});
const res2: any = await createResourceRecord(
{
domainId,
@ -79,8 +89,9 @@ export class JDCloudDnsProvider extends AbstractDnsProvider {
},
this.regionId
);
const recordId = res2.dataList[0].id;
this.logger.info('请求成功:', JSON.stringify(res.result));
const recordList = res2.result.dataList;
const recordId = recordList[0].id;
this.logger.info(`添加域名解析成功:fullRecord=${fullRecord},value=${value}`);
this.logger.info(`请求结果:recordId:${recordId}`);
@ -96,7 +107,7 @@ export class JDCloudDnsProvider extends AbstractDnsProvider {
async removeRecord(opts: RemoveRecordOptions<any>): Promise<void> {
const { record } = opts;
const deleteResourceRecord = promisfy(this.service.deleteResourceRecord);
const res = await deleteResourceRecord(
const res: any = await deleteResourceRecord(
{
domainId: record.domainId,
resourceRecordId: record.id,