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" "preview": "vite preview"
}, },
"dependencies": { "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", "@certd/pipeline": "1.21.0",
"axios": "^1.7.2", "axios": "^1.7.2",
"node-fetch": "^3.3.2", "rollup": "^3.7.4"
"rollup": "^3.7.4",
"uuid": "^3.4.0"
}, },
"gitHead": "c49ccbde93dbad7062ac39d4f18eca7d561f573f" "gitHead": "c49ccbde93dbad7062ac39d4f18eca7d561f573f"
} }

View File

@ -12,7 +12,11 @@ module.exports = {
}, },
plugins: [ plugins: [
// 解析第三方依赖 // 解析第三方依赖
resolve(), resolve({
jsnext: true,
main: true,
browser: true,
}),
// 识别 commonjs 模式第三方依赖 // 识别 commonjs 模式第三方依赖
commonjs({ commonjs({
// dynamicRequireRoot: "../../../../", // dynamicRequireRoot: "../../../../",
@ -32,5 +36,5 @@ module.exports = {
json(), json(),
terser(), 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 = { var JDCloud = {
util: require('./util'), util: require("./util"),
// todo swaggerVar // todo swaggerVar
VERSION: '' VERSION: "",
} fetch: require("node-fetch"),
};
module.exports = JDCloud module.exports = JDCloud;
require('./service') require("./service");
require('./config') require("./config");
require('./request') 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 { JDCloud.JCRequest = class JCRequest {
constructor ( constructor(service, path, httpMethod, pathParams, queryParams, headerParams, formParams, postBody, contentTypes, accepts, returnType) {
service, this.service = service;
path,
httpMethod,
pathParams,
queryParams,
headerParams,
formParams,
postBody,
contentTypes,
accepts,
returnType
) {
this.service = service
var endpoint = service.config.endpoint var endpoint = service.config.endpoint;
pathParams.regionId = pathParams.regionId || service.config.regionId pathParams.regionId = pathParams.regionId || service.config.regionId;
this.regionId = pathParams.regionId this.regionId = pathParams.regionId;
this.path = this.buildPath(path, pathParams) this.path = this.buildPath(path, pathParams);
this.path = util.uriEscapePath(this.path) 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) { if (queryString) {
url = this.path + '?' + queryString url = this.path + "?" + queryString;
} }
var contentType = this.jsonPreferredMime(contentTypes) || 'application/json' var contentType = this.jsonPreferredMime(contentTypes) || "application/json";
headerParams['content-type'] = contentType headerParams["content-type"] = contentType;
var requestHeaders = this.buildHeaders(headerParams) var requestHeaders = this.buildHeaders(headerParams);
var requestInit = { var requestInit = {
method: httpMethod || 'GET', method: httpMethod || "GET",
headers: requestHeaders headers: requestHeaders,
} };
if (contentType === 'application/x-www-form-urlencoded') { if (contentType === "application/x-www-form-urlencoded") {
} else if (contentType === 'multipart/form-data') { } else if (contentType === "multipart/form-data") {
} else if (postBody) { } else if (postBody) {
requestInit.body = JSON.stringify(postBody) requestInit.body = JSON.stringify(postBody);
} }
var fetchUrl = endpoint.protocol + '://' + endpoint.host + url var fetchUrl = endpoint.protocol + "://" + endpoint.host + url;
JDCloud.config.logger( JDCloud.config.logger(`make request where url is :${fetchUrl} \nwith fetch config:${JSON.stringify(requestInit)}`);
`make request where url is :${fetchUrl} \nwith fetch config:${JSON.stringify( this.request = new JDCloud.fetch.Request(fetchUrl, requestInit);
requestInit this.request.bodyCache = requestInit.body;
)}`
)
this.request = new JDCloud.fetch.Request(fetchUrl, requestInit)
} }
buildPath (path, pathParams) { buildPath(path, pathParams) {
var uri = (this.service.config.basePath || '') + path var uri = (this.service.config.basePath || "") + path;
uri = uri.replace(/\{([\w-]+)\}/g, (fullMatch, key) => { uri = uri.replace(/\{([\w-]+)\}/g, (fullMatch, key) => {
var value var value;
if (pathParams.hasOwnProperty(key)) { if (pathParams.hasOwnProperty(key)) {
value = pathParams[key] value = pathParams[key];
} else { } else {
value = fullMatch value = fullMatch;
} }
return value return value;
}) });
return uri return uri;
} }
buildQuery (queryParams) { buildQuery(queryParams) {
var queryParamsWithoutEmptyItem = {} var queryParamsWithoutEmptyItem = {};
var keys = Object.keys(queryParams) var keys = Object.keys(queryParams);
for (let key of keys) { for (let key of keys) {
if (queryParams[key] !== undefined) { 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 () { search() {
var query = this.request.url.split('?', 2)[1] var query = this.request.url.split("?", 2)[1];
if (query) { if (query) {
query = JDCloud.util.querystring.parse(query) query = JDCloud.util.querystring.parse(query);
return JDCloud.util.queryParamsToString(query) return JDCloud.util.queryParamsToString(query);
} }
return '' return "";
} }
digitizationArray (key, obj) { digitizationArray(key, obj) {
var result = key var result = key;
if (Array.isArray(obj)) { if (Array.isArray(obj)) {
JDCloud.util.arrayEach(obj, (arrayValue, index) => { JDCloud.util.arrayEach(obj, (arrayValue, index) => {
result += this.digitizationArray(`.${index + 1}`, arrayValue) result += this.digitizationArray(`.${index + 1}`, arrayValue);
}) });
} else if (typeof obj === 'object' && obj != null) { } else if (typeof obj === "object" && obj != null) {
JDCloud.util.each(obj, (key, ObjValue) => { JDCloud.util.each(obj, (key, ObjValue) => {
result += `.name=${key}&${result}.values` + this.digitizationArray() result += `.name=${key}&${result}.values` + this.digitizationArray();
result += result += key + ".name=" + ObjValue + "&" + this.digitizationArray(key + ".values", ObjValue);
key + });
'.name=' +
ObjValue +
'&' +
this.digitizationArray(key + '.values', ObjValue)
})
} else { } else {
result += key + '=' + encodeURI(obj) result += key + "=" + encodeURI(obj);
} }
return result return result;
} }
buildHeaders (headerParams) { buildHeaders(headerParams) {
var headers = new JDCloud.fetch.Headers({ var headers = new JDCloud.fetch.Headers({
accept: 'application/json' accept: "application/json",
}) });
util.each.call(this, headerParams, function (key) { util.each.call(this, headerParams, function (key) {
if (headerParams[key] !== undefined && headerParams[key] != null) { 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. * @param {String} contentType The MIME content type to check.
* @returns {Boolean} <code>true</code> if <code>contentType</code> represents JSON, otherwise <code>false</code>. * @returns {Boolean} <code>true</code> if <code>contentType</code> represents JSON, otherwise <code>false</code>.
*/ */
isJsonMime (contentType) { isJsonMime(contentType) {
return Boolean( return Boolean(contentType != null && contentType.match(/^application\/json(;.*)?$/i));
contentType != null && contentType.match(/^application\/json(;.*)?$/i)
)
} }
/** /**
@ -145,15 +123,15 @@ JDCloud.JCRequest = class JCRequest {
* @param {Array.<String>} contentTypes * @param {Array.<String>} contentTypes
* @returns {String} The chosen content type, preferring JSON. * @returns {String} The chosen content type, preferring JSON.
*/ */
jsonPreferredMime (contentTypes) { jsonPreferredMime(contentTypes) {
for (var i = 0; i < contentTypes.length; i++) { for (var i = 0; i < contentTypes.length; i++) {
if (this.isJsonMime(contentTypes[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() { 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; /* var request = this.request;
if (this.isPresigned() && this.serviceName === 's3' && !request.body) { if (this.isPresigned() && this.serviceName === 's3' && !request.body) {
return 'UNSIGNED-PAYLOAD'; return 'UNSIGNED-PAYLOAD';

View File

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

View File

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

View File

@ -1,15 +1,19 @@
# key: ./data/ssl/cert.key # key: ./data/ssl/cert.key
# cert: ./data/ssl/cert.crt # cert: ./data/ssl/cert.crt
plus:
server:
baseUrl: 'http://127.0.0.1:11007'
#plus: #plus:
# server: # server:
# baseUrl: 'https://api.ai.handsfree.work' # baseUrl: 'http://127.0.0.1:11007'
plus:
server:
baseUrl: 'https://api.ai.handsfree.work'
#typeorm: #typeorm:
# dataSource: # dataSource:
# default: # default:
# database: './data/db1.sqlite' # database: './data/db1.sqlite'
#account:
# server:
# baseUrl: 'http://127.0.0.1:1017/subject'
account: account:
server: 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", "md5": "^2.3.0",
"mwtsc": "^1.4.0", "mwtsc": "^1.4.0",
"nanoid": "^4.0.0", "nanoid": "^4.0.0",
"node-fetch": "^3.3.2",
"nodemailer": "^6.9.3", "nodemailer": "^6.9.3",
"pg": "^8.12.0", "pg": "^8.12.0",
"qiniu": "^7.12.0", "qiniu": "^7.12.0",

View File

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

View File

@ -59,13 +59,21 @@ export class DynadotDnsProvider extends AbstractDnsProvider {
const { fullRecord, value, type, domain } = options; const { fullRecord, value, type, domain } = options;
this.logger.info('添加域名解析:', fullRecord, value, type, domain); 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}`, ''); const prefix = fullRecord.replace(`.${domain}`, '');
// 给domain下创建txt类型的dns解析记录fullRecord // 给domain下创建txt类型的dns解析记录fullRecord
const res = await this.doRequest('set_dns2', { const res = await this.doRequest('set_dns2', {
domain: domain, domain: domain,
subdomain0: prefix, subdomain0: prefix,
sub_record_type0: 'TXT', sub_record_type0: 'TXT',
sub_record0 : value, sub_record0: value,
}); });
this.logger.info(`添加域名解析成功:fullRecord=${fullRecord},value=${value}`); this.logger.info(`添加域名解析成功:fullRecord=${fullRecord},value=${value}`);
this.logger.info(`请求结果:${JSON.stringify(res)}`); this.logger.info(`请求结果:${JSON.stringify(res)}`);

View File

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