mirror of https://github.com/certd/certd
refactor: host
parent
2a07442a85
commit
cfb1034450
|
@ -1,13 +1,16 @@
|
|||
import _ from 'lodash-es'
|
||||
import { accessProviderRegistry } from '@certd/api'
|
||||
|
||||
import { AliyunAccessProvider } from './providers/aliyun.js'
|
||||
import { DnspodAccessProvider } from './providers/dnspod.js'
|
||||
import { TencentAccessProvider } from './providers/tencent.js'
|
||||
import { accessProviderRegistry } from '@certd/api'
|
||||
import { SSHAccessProvider } from './providers/ssh.js'
|
||||
|
||||
export const DefaultAccessProviders = {
|
||||
AliyunAccessProvider,
|
||||
DnspodAccessProvider,
|
||||
TencentAccessProvider,
|
||||
SSHAccessProvider
|
||||
}
|
||||
export default {
|
||||
install () {
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
import _ from 'lodash-es'
|
||||
export class AliyunAccessProvider{
|
||||
export class AliyunAccessProvider {
|
||||
static define () {
|
||||
return {
|
||||
name: 'aliyun',
|
||||
|
@ -28,7 +27,4 @@ export class AliyunAccessProvider{
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
constructor () {
|
||||
}
|
||||
}
|
||||
|
|
|
@ -23,8 +23,4 @@ export class DnspodAccessProvider {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
constructor () {
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
export class SSHAccessProvider {
|
||||
static define () {
|
||||
return {
|
||||
name: 'ssh',
|
||||
label: '主机',
|
||||
desc: '',
|
||||
input: {
|
||||
host: { required: true },
|
||||
port: {
|
||||
label: '端口',
|
||||
type: Number,
|
||||
default: '22',
|
||||
required: true
|
||||
},
|
||||
username: {
|
||||
default: 'root',
|
||||
required: true
|
||||
},
|
||||
password: { desc: '登录密码' },
|
||||
publicKey: {
|
||||
desc: '密钥,密码或此项必填一项'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -6,7 +6,7 @@ export class TencentAccessProvider {
|
|||
input: {
|
||||
secretId: {
|
||||
type: String,
|
||||
label:'secretId',
|
||||
label: 'secretId',
|
||||
component: {
|
||||
placeholder: 'secretId',
|
||||
rules: [{ required: true, message: '该项必填' }]
|
||||
|
@ -23,8 +23,4 @@ export class TencentAccessProvider {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
constructor () {
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -13,7 +13,10 @@ export class HostShellExecute extends AbstractHostPlugin {
|
|||
label: '执行远程主机脚本命令',
|
||||
input: {
|
||||
script: {
|
||||
label: 'shell脚本命令'
|
||||
label: 'shell脚本命令',
|
||||
component: {
|
||||
name: 'a-textarea'
|
||||
}
|
||||
},
|
||||
accessProvider: {
|
||||
label: '主机登录配置',
|
||||
|
@ -21,7 +24,7 @@ export class HostShellExecute extends AbstractHostPlugin {
|
|||
desc: '登录',
|
||||
component: {
|
||||
name: 'access-provider-selector',
|
||||
filter: 'host'
|
||||
filter: 'ssh'
|
||||
},
|
||||
required: true
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import ssh2 from 'ssh2'
|
||||
import logger from '../utils/util.log.js'
|
||||
import path from 'path'
|
||||
import { util } from '@certd/api'
|
||||
const logger = util.logger
|
||||
export class SshClient {
|
||||
/**
|
||||
*
|
||||
|
|
|
@ -13,10 +13,10 @@ export class UploadCertToHost extends AbstractHostPlugin {
|
|||
label: '上传证书到主机',
|
||||
input: {
|
||||
crtPath: {
|
||||
label: '证书路径'
|
||||
label: '证书保存路径'
|
||||
},
|
||||
keyPath: {
|
||||
label: '私钥路径'
|
||||
label: '私钥保存路径'
|
||||
},
|
||||
accessProvider: {
|
||||
label: '主机登录配置',
|
||||
|
@ -24,7 +24,7 @@ export class UploadCertToHost extends AbstractHostPlugin {
|
|||
desc: 'access授权',
|
||||
component: {
|
||||
name: 'access-provider-selector',
|
||||
filter: 'host'
|
||||
filter: 'ssh'
|
||||
},
|
||||
required: true
|
||||
}
|
||||
|
|
|
@ -9,6 +9,10 @@ import { DeployCertToTencentCDN } from './tencent/deploy-to-cdn/index.js'
|
|||
import { DeployCertToTencentCLB } from './tencent/deploy-to-clb/index.js'
|
||||
|
||||
import { DeployCertToTencentTKEIngress } from './tencent/deploy-to-tke-ingress/index.js'
|
||||
|
||||
import { UploadCertToHost } from './host/upload-to-host/index.js'
|
||||
import { HostShellExecute } from './host/host-shell-execute/index.js'
|
||||
|
||||
import { pluginRegistry } from '@certd/api'
|
||||
|
||||
export const DefaultPlugins = {
|
||||
|
@ -17,7 +21,9 @@ export const DefaultPlugins = {
|
|||
UploadCertToTencent,
|
||||
DeployCertToTencentTKEIngress,
|
||||
DeployCertToTencentCDN,
|
||||
DeployCertToTencentCLB
|
||||
DeployCertToTencentCLB,
|
||||
UploadCertToHost,
|
||||
HostShellExecute
|
||||
}
|
||||
export default {
|
||||
install () {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
import dayjs from 'dayjs'
|
||||
import tencentcloud from 'tencentcloud-sdk-nodejs'
|
||||
import { AbstractTencentPlugin } from '../abstract-tencent.js'
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -3115,6 +3115,27 @@
|
|||
"webpack-sources": "^1.4.3"
|
||||
}
|
||||
},
|
||||
"vue-loader-v15": {
|
||||
"version": "npm:vue-loader@15.9.6",
|
||||
"resolved": "https://registry.npm.taobao.org/vue-loader/download/vue-loader-15.9.6.tgz?cache=0&sync_timestamp=1608188009078&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue-loader%2Fdownload%2Fvue-loader-15.9.6.tgz",
|
||||
"integrity": "sha1-9Lua4gw6g3CvPs8JuBJtOP/ba4s=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@vue/component-compiler-utils": "^3.1.0",
|
||||
"hash-sum": "^1.0.2",
|
||||
"loader-utils": "^1.1.0",
|
||||
"vue-hot-reload-api": "^2.3.0",
|
||||
"vue-style-loader": "^4.1.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"hash-sum": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npm.taobao.org/hash-sum/download/hash-sum-1.0.2.tgz",
|
||||
"integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"webpack": {
|
||||
"version": "5.19.0",
|
||||
"resolved": "https://registry.npm.taobao.org/webpack/download/webpack-5.19.0.tgz",
|
||||
|
@ -5281,7 +5302,7 @@
|
|||
},
|
||||
"clone-response": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
|
||||
"resolved": "https://registry.npm.taobao.org/clone-response/download/clone-response-1.0.2.tgz",
|
||||
"integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=",
|
||||
"requires": {
|
||||
"mimic-response": "^1.0.0"
|
||||
|
@ -6394,7 +6415,7 @@
|
|||
},
|
||||
"decompress-response": {
|
||||
"version": "3.3.0",
|
||||
"resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
|
||||
"resolved": "https://registry.npm.taobao.org/decompress-response/download/decompress-response-3.3.0.tgz",
|
||||
"integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=",
|
||||
"requires": {
|
||||
"mimic-response": "^1.0.0"
|
||||
|
@ -6895,7 +6916,7 @@
|
|||
},
|
||||
"duplexer3": {
|
||||
"version": "0.1.4",
|
||||
"resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
|
||||
"resolved": "https://registry.npm.taobao.org/duplexer3/download/duplexer3-0.1.4.tgz",
|
||||
"integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI="
|
||||
},
|
||||
"duplexify": {
|
||||
|
@ -7094,7 +7115,7 @@
|
|||
},
|
||||
"es6-promisify": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz",
|
||||
"resolved": "https://registry.npm.taobao.org/es6-promisify/download/es6-promisify-5.0.0.tgz",
|
||||
"integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=",
|
||||
"requires": {
|
||||
"es6-promise": "^4.0.3"
|
||||
|
@ -10173,7 +10194,7 @@
|
|||
},
|
||||
"json-buffer": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz",
|
||||
"resolved": "https://registry.npm.taobao.org/json-buffer/download/json-buffer-3.0.0.tgz",
|
||||
"integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg="
|
||||
},
|
||||
"json-parse-better-errors": {
|
||||
|
@ -10206,7 +10227,7 @@
|
|||
},
|
||||
"json-stream": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/json-stream/-/json-stream-1.0.0.tgz",
|
||||
"resolved": "https://registry.npm.taobao.org/json-stream/download/json-stream-1.0.0.tgz",
|
||||
"integrity": "sha1-GjhU4o0rvuqzHMfd9oPS3cVlJwg="
|
||||
},
|
||||
"json-stringify-safe": {
|
||||
|
@ -10231,7 +10252,7 @@
|
|||
},
|
||||
"jsonfile": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
|
||||
"resolved": "https://registry.npm.taobao.org/jsonfile/download/jsonfile-4.0.0.tgz?cache=0&sync_timestamp=1604161797011&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjsonfile%2Fdownload%2Fjsonfile-4.0.0.tgz",
|
||||
"integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
|
||||
"requires": {
|
||||
"graceful-fs": "^4.1.6"
|
||||
|
@ -14563,7 +14584,7 @@
|
|||
},
|
||||
"prepend-http": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
|
||||
"resolved": "https://registry.npm.taobao.org/prepend-http/download/prepend-http-2.0.0.tgz",
|
||||
"integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc="
|
||||
},
|
||||
"prettier": {
|
||||
|
@ -14907,7 +14928,7 @@
|
|||
},
|
||||
"rechoir": {
|
||||
"version": "0.6.2",
|
||||
"resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
|
||||
"resolved": "https://registry.npm.taobao.org/rechoir/download/rechoir-0.6.2.tgz",
|
||||
"integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
|
||||
"requires": {
|
||||
"resolve": "^1.1.6"
|
||||
|
@ -15186,7 +15207,7 @@
|
|||
},
|
||||
"responselike": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz",
|
||||
"resolved": "https://registry.npm.taobao.org/responselike/download/responselike-1.0.2.tgz",
|
||||
"integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=",
|
||||
"requires": {
|
||||
"lowercase-keys": "^1.0.0"
|
||||
|
@ -16131,7 +16152,7 @@
|
|||
},
|
||||
"streamsearch": {
|
||||
"version": "0.1.2",
|
||||
"resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz",
|
||||
"resolved": "https://registry.npm.taobao.org/streamsearch/download/streamsearch-0.1.2.tgz",
|
||||
"integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo="
|
||||
},
|
||||
"string-argv": {
|
||||
|
@ -17057,7 +17078,7 @@
|
|||
},
|
||||
"url-parse-lax": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz",
|
||||
"resolved": "https://registry.npm.taobao.org/url-parse-lax/download/url-parse-lax-3.0.0.tgz",
|
||||
"integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=",
|
||||
"requires": {
|
||||
"prepend-http": "^2.0.0"
|
||||
|
@ -17238,21 +17259,6 @@
|
|||
"@vue/devtools-api": "^6.0.0-beta.3"
|
||||
}
|
||||
},
|
||||
"vue-json-editor": {
|
||||
"version": "1.4.3",
|
||||
"resolved": "https://registry.npmjs.org/vue-json-editor/-/vue-json-editor-1.4.3.tgz",
|
||||
"integrity": "sha512-st9HdXBgCnyEmmfWrZQiKzp4KuYXzmYVUNDn5h6Fa18MrrGS1amnyUFyv7hQFsNBDW27B7BKkdGOqszYT1srAg==",
|
||||
"requires": {
|
||||
"vue": "^2.2.6"
|
||||
},
|
||||
"dependencies": {
|
||||
"vue": {
|
||||
"version": "2.6.12",
|
||||
"resolved": "https://registry.npmjs.org/vue/-/vue-2.6.12.tgz",
|
||||
"integrity": "sha512-uhmLFETqPPNyuLLbsKz6ioJ4q7AZHzD8ZVFNATNyICSZouqP2Sz0rotWQC8UNBF6VGSCs5abnKJoStA6JbCbfg=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"vue-loader": {
|
||||
"version": "16.1.2",
|
||||
"resolved": "https://registry.npm.taobao.org/vue-loader/download/vue-loader-16.1.2.tgz?cache=0&sync_timestamp=1608188009078&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue-loader%2Fdownload%2Fvue-loader-16.1.2.tgz",
|
||||
|
@ -17326,27 +17332,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"vue-loader-v15": {
|
||||
"version": "npm:vue-loader@15.9.6",
|
||||
"resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.9.6.tgz",
|
||||
"integrity": "sha512-j0cqiLzwbeImIC6nVIby2o/ABAWhlppyL/m5oJ67R5MloP0hj/DtFgb0Zmq3J9CG7AJ+AXIvHVnJAPBvrLyuDg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@vue/component-compiler-utils": "^3.1.0",
|
||||
"hash-sum": "^1.0.2",
|
||||
"loader-utils": "^1.1.0",
|
||||
"vue-hot-reload-api": "^2.3.0",
|
||||
"vue-style-loader": "^4.1.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"hash-sum": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz",
|
||||
"integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"vue-router": {
|
||||
"version": "4.0.3",
|
||||
"resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.0.3.tgz",
|
||||
|
|
|
@ -154,8 +154,17 @@ function useEdit (props, context, onEditSave) {
|
|||
}
|
||||
|
||||
if (editIndex.value == null) {
|
||||
// 添加时
|
||||
formData.key = currentProvider.value.name
|
||||
formData.name = currentProvider.value.label || currentProvider.value.name
|
||||
|
||||
// 设置默认值
|
||||
for (const key in currentProvider.value.input) {
|
||||
const input = currentProvider.value.input[key]
|
||||
if (input.default != null) {
|
||||
formData[key] = input.default
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -201,7 +210,7 @@ function generateNewKey (list) {
|
|||
return keyPrefix + index
|
||||
}
|
||||
export default {
|
||||
name: 'provider-manager',
|
||||
name: 'access-provider-manager',
|
||||
props: {
|
||||
value: {},
|
||||
filter: {}
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
import DContainer from './d-container'
|
||||
import ComponentRender from './component-render'
|
||||
import AccessProviderSelector from './access-provider-selector/access-provider-selector'
|
||||
import vueJsonEditor from 'vue-json-editor'
|
||||
|
||||
const list = [
|
||||
DContainer,
|
||||
|
@ -13,7 +12,5 @@ export default {
|
|||
for (const item of list) {
|
||||
app.component(item.name, item)
|
||||
}
|
||||
|
||||
app.component(vueJsonEditor.name, vueJsonEditor)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -44,9 +44,9 @@ export default {
|
|||
setup () {
|
||||
const formData = reactive({
|
||||
cert: {
|
||||
domains: ['*.docmirror.cn'],
|
||||
email: 'xiaojunnuo@qq.com',
|
||||
dnsProvider: 'aliyun'
|
||||
domains: [],
|
||||
email: '',
|
||||
dnsProvider: { type: undefined }
|
||||
}
|
||||
})
|
||||
const router = useRouter()
|
||||
|
|
|
@ -85,7 +85,7 @@
|
|||
</a-drawer>
|
||||
</template>
|
||||
<script>
|
||||
import { reactive, toRaw, ref, watch } from 'vue'
|
||||
import { reactive, ref, watch } from 'vue'
|
||||
import { useForm } from '@ant-design-vue/use'
|
||||
import dnsProviderApi from '@/api/api.dns-providers'
|
||||
import _ from 'lodash-es'
|
||||
|
@ -177,11 +177,8 @@ export default {
|
|||
const onSubmit = async e => {
|
||||
e.preventDefault()
|
||||
try {
|
||||
const res = await validate()
|
||||
console.log('validation', res, toRaw(formData))
|
||||
|
||||
await validate()
|
||||
context.emit('update:cert', formData)
|
||||
console.log('1111')
|
||||
drawer.close()
|
||||
} catch (err) {
|
||||
console.error('表单校验错误', err)
|
||||
|
@ -208,6 +205,7 @@ export default {
|
|||
const onCreate = async () => {
|
||||
const list = await dnsProviderApi.list()
|
||||
dnsProviderDefineList.value = list
|
||||
onCurrentDnsProviderChanged(formData?.dnsProvider?.type)
|
||||
}
|
||||
const onCurrentDnsProviderChanged = (type) => {
|
||||
if (type == null) {
|
||||
|
|
|
@ -258,7 +258,7 @@ export default {
|
|||
organizationUnit: 'IT Department'
|
||||
}
|
||||
},
|
||||
accessProviders: [{ key: 'aliyun', type: 'aliyun', name: 'aliyun' }],
|
||||
accessProviders: [],
|
||||
deploy: []
|
||||
}
|
||||
_.merge(optionsDefault, optionParams)
|
||||
|
|
Loading…
Reference in New Issue