enhance: save certificate before renew #723

This commit is contained in:
Jacky 2024-11-16 10:51:35 +08:00
parent e6998feca4
commit f4c17f0c65
No known key found for this signature in database
GPG key ID: 215C21B10DF38B4D
9 changed files with 23 additions and 18 deletions

View file

@ -98,12 +98,9 @@ func IssueCert(c *gin.Context) {
// block, until errChan closes // block, until errChan closes
for err = range errChan { for err = range errChan {
log.Error(err) log.Error(err)
// Save logs to db // Save logs to db
log.Exit() log.Exit()
err = ws.WriteJSON(IssueCertResponse{ err = ws.WriteJSON(IssueCertResponse{
Status: Error, Status: Error,
Message: err.Error(), Message: err.Error(),
@ -112,7 +109,6 @@ func IssueCert(c *gin.Context) {
logger.Error(err) logger.Error(err)
return return
} }
return return
} }

View file

@ -58,7 +58,7 @@ export function detailRender(args: CustomRender) {
return args.text return args.text
} }
} }
// eslint-disable-next-line sonarjs/no-ignored-exceptions // eslint-disable-next-line sonarjs/no-ignored-exceptions,unused-imports/no-unused-vars
catch (e) { catch (e) {
return args.text return args.text
} }

View file

@ -4,6 +4,8 @@ import VOtpInput from 'vue3-otp-input'
const emit = defineEmits(['onComplete']) const emit = defineEmits(['onComplete'])
const data = defineModel<string>() const data = defineModel<string>()
// eslint-disable-next-line vue/require-typed-ref
const refOtp = ref() const refOtp = ref()
function onComplete(value: string) { function onComplete(value: string) {

View file

@ -1,6 +1,5 @@
<script setup lang="ts"> <script setup lang="ts">
import { UseClipboard } from '@vueuse/components' import { UseClipboard } from '@vueuse/components'
import { $gettext } from '../../gettext'
const props = defineProps<{ const props = defineProps<{
value: string value: string

View file

@ -61,7 +61,7 @@ function add(preset: any = undefined) {
modifyMode.value = true modifyMode.value = true
} }
const table = ref() const table = useTemplateRef('table')
const inTrash = ref(false) const inTrash = ref(false)
const getParams = reactive(props.getParams ?? {}) const getParams = reactive(props.getParams ?? {})

View file

@ -40,18 +40,25 @@ onMounted(() => {
const router = useRouter() const router = useRouter()
const errors = ref({}) as Ref<Record<string, string>> const errors = ref({}) as Ref<Record<string, string>>
function save() {
cert.save(data.value.id, data.value).then(r => { async function save() {
try {
const r = await cert.save(data.value.id, data.value)
data.value = r data.value = r
message.success($gettext('Save successfully'))
router.push(`/certificates/${r.id}`)
errors.value = {} errors.value = {}
}).catch(e => { message.success($gettext('Save successfully'))
await router.push(`/certificates/${r.id}`)
}
// eslint-disable-next-line ts/no-explicit-any
catch (e: any) {
errors.value = e.errors errors.value = e.errors
message.error($gettext(e?.message ?? 'Server error')) message.error($gettext(e?.message ?? 'Server error'))
}) throw e
}
} }
provide('saveCert', save)
const log = computed(() => { const log = computed(() => {
const logs = data.value.log?.split('\n') const logs = data.value.log?.split('\n')

View file

@ -13,15 +13,17 @@ const emit = defineEmits<{
const modalVisible = ref(false) const modalVisible = ref(false)
const modalClosable = ref(true) const modalClosable = ref(true)
const refObtainCertLive = useTemplateRef('refObtainCertLive')
const saveCert = inject<() => Promise<void>>('saveCert')!
const refObtainCertLive = ref() async function issueCert() {
await saveCert()
function issueCert() {
modalVisible.value = true modalVisible.value = true
const { name, domains, key_type } = props.options const { name, domains, key_type } = props.options
refObtainCertLive.value.issue_cert(name, domains, key_type).then(() => { refObtainCertLive.value?.issue_cert(name!, domains, key_type).then(() => {
message.success($gettext('Renew successfully')) message.success($gettext('Renew successfully'))
emit('renewed') emit('renewed')
}) })

View file

@ -3,7 +3,6 @@ import type { AutoCertOptions } from '@/api/auto_cert'
import { PrivateKeyTypeList } from '@/constants' import { PrivateKeyTypeList } from '@/constants'
import ACMEUserSelector from '@/views/certificate/ACMEUserSelector.vue' import ACMEUserSelector from '@/views/certificate/ACMEUserSelector.vue'
import DNSChallenge from '@/views/site/cert/components/DNSChallenge.vue' import DNSChallenge from '@/views/site/cert/components/DNSChallenge.vue'
import { $gettext } from '../../../../gettext'
const props = defineProps<{ const props = defineProps<{
hideNote?: boolean hideNote?: boolean

View file

@ -4,7 +4,7 @@ import "github.com/go-acme/lego/v4/certcrypto"
func GetKeyType(keyType certcrypto.KeyType) certcrypto.KeyType { func GetKeyType(keyType certcrypto.KeyType) certcrypto.KeyType {
switch keyType { switch keyType {
case certcrypto.RSA2048, certcrypto.RSA3072, certcrypto.RSA4096, case certcrypto.RSA2048, certcrypto.RSA3072, certcrypto.RSA4096, certcrypto.RSA8192,
certcrypto.EC256, certcrypto.EC384: certcrypto.EC256, certcrypto.EC384:
return keyType return keyType
} }