From 3ab95db2f31ddc4d283a0e3d81daf9b504bb81e2 Mon Sep 17 00:00:00 2001 From: Fu Diwei Date: Mon, 8 Sep 2025 17:01:17 +0800 Subject: [PATCH] feat: new ca provider: globalsign atlas --- internal/certapply/config.go | 1 + internal/domain/access.go | 4 + internal/domain/provider.go | 2 + ui/public/imgs/providers/globalsignatlas.png | Bin 0 -> 12066 bytes ui/src/components/access/AccessForm.tsx | 4 + ...essConfigFieldsProviderGlobalSignAtlas.tsx | 70 ++++++++++++++++++ ui/src/domain/provider.ts | 4 + ui/src/i18n/locales/en/nls.access.json | 6 ++ ui/src/i18n/locales/en/nls.provider.json | 1 + ui/src/i18n/locales/zh/nls.access.json | 6 ++ ui/src/i18n/locales/zh/nls.provider.json | 1 + ui/src/pages/settings/SettingsSSLProvider.tsx | 21 ++++-- 12 files changed, 114 insertions(+), 6 deletions(-) create mode 100644 ui/public/imgs/providers/globalsignatlas.png create mode 100644 ui/src/components/access/forms/AccessConfigFieldsProviderGlobalSignAtlas.tsx diff --git a/internal/certapply/config.go b/internal/certapply/config.go index d47753fb5..a8c36501f 100644 --- a/internal/certapply/config.go +++ b/internal/certapply/config.go @@ -17,6 +17,7 @@ var acmeDirUrls = map[string]string{ string(domain.CAProviderTypeLetsEncryptStaging): "https://acme-staging-v02.api.letsencrypt.org/directory", string(domain.CAProviderTypeActalisSSL): "https://acme-api.actalis.com/acme/directory", string(domain.CAProviderTypeBuypass): "https://api.buypass.com/acme/directory", + string(domain.CAProviderTypeGlobalSignAtlas): "https://emea.acme.atlas.globalsign.com/directory", string(domain.CAProviderTypeGoogleTrustServices): "https://dv.acme-v02.api.pki.goog/directory", string(domain.CAProviderTypeSSLCom): "https://acme.ssl.com/sslcom-dv-rsa", string(domain.CAProviderTypeSSLCom) + "RSA": "https://acme.ssl.com/sslcom-dv-rsa", diff --git a/internal/domain/access.go b/internal/domain/access.go index ceb569b8f..e801109a4 100644 --- a/internal/domain/access.go +++ b/internal/domain/access.go @@ -220,6 +220,10 @@ type AccessConfigForGoEdge struct { AllowInsecureConnections bool `json:"allowInsecureConnections,omitempty"` } +type AccessConfigForGlobalSignAtlas struct { + AccessConfigForACMEExternalAccountBinding +} + type AccessConfigForGoogleTrustServices struct { AccessConfigForACMEExternalAccountBinding } diff --git a/internal/domain/provider.go b/internal/domain/provider.go index 4562fda9a..f421d6d44 100644 --- a/internal/domain/provider.go +++ b/internal/domain/provider.go @@ -50,6 +50,7 @@ const ( AccessProviderTypeGcore = AccessProviderType("gcore") AccessProviderTypeGoDaddy = AccessProviderType("godaddy") AccessProviderTypeGoEdge = AccessProviderType("goedge") + AccessProviderTypeGlobalSignAtlas = AccessProviderType("globalsignatlas") AccessProviderTypeGoogleTrustServices = AccessProviderType("googletrustservices") AccessProviderTypeHetzner = AccessProviderType("hetzner") AccessProviderTypeHuaweiCloud = AccessProviderType("huaweicloud") @@ -108,6 +109,7 @@ const ( CAProviderTypeACMECA = CAProviderType(AccessProviderTypeACMECA) CAProviderTypeActalisSSL = CAProviderType(AccessProviderTypeActalisSSL) CAProviderTypeBuypass = CAProviderType(AccessProviderTypeBuypass) + CAProviderTypeGlobalSignAtlas = CAProviderType(AccessProviderTypeGlobalSignAtlas) CAProviderTypeGoogleTrustServices = CAProviderType(AccessProviderTypeGoogleTrustServices) CAProviderTypeLetsEncrypt = CAProviderType(AccessProviderTypeLetsEncrypt) CAProviderTypeLetsEncryptStaging = CAProviderType(AccessProviderTypeLetsEncryptStaging) diff --git a/ui/public/imgs/providers/globalsignatlas.png b/ui/public/imgs/providers/globalsignatlas.png new file mode 100644 index 0000000000000000000000000000000000000000..a248c32492499be334baab44e50d18d2a53ad19d GIT binary patch literal 12066 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 } + case ACCESS_PROVIDERS.GLOBALSIGNATLAS: { + return ; + } case ACCESS_PROVIDERS.GOOGLETRUSTSERVICES: { return ; } diff --git a/ui/src/components/access/forms/AccessConfigFieldsProviderGlobalSignAtlas.tsx b/ui/src/components/access/forms/AccessConfigFieldsProviderGlobalSignAtlas.tsx new file mode 100644 index 000000000..076d28b80 --- /dev/null +++ b/ui/src/components/access/forms/AccessConfigFieldsProviderGlobalSignAtlas.tsx @@ -0,0 +1,70 @@ +import { getI18n, useTranslation } from "react-i18next"; +import { Form, Input } from "antd"; +import { createSchemaFieldRule } from "antd-zod"; +import { z } from "zod"; + +import { useFormNestedFieldsContext } from "./_context"; + +const AccessConfigFormFieldsProviderGobalSignAtlas = () => { + const { i18n, t } = useTranslation(); + + const { parentNamePath } = useFormNestedFieldsContext(); + const formSchema = z.object({ + [parentNamePath]: getSchema({ i18n }), + }); + const formRule = createSchemaFieldRule(formSchema); + const initialValues = getInitialValues(); + + return ( + <> + } + > + + + + } + > + + + + ); +}; + +const getInitialValues = (): Nullish>> => { + return { + eabKid: "", + eabHmacKey: "", + }; +}; + +const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { + const { t } = i18n; + + return z.object({ + eabKid: z + .string() + .min(1, t("access.form.globalsignatlas_eab_kid.placeholder")) + .max(256, t("common.errmsg.string_max", { max: 256 })), + eabHmacKey: z + .string() + .min(1, t("access.form.globalsignatlas_eab_hmac_key.placeholder")) + .max(256, t("common.errmsg.string_max", { max: 256 })), + }); +}; + +const _default = Object.assign(AccessConfigFormFieldsProviderGobalSignAtlas, { + getInitialValues, + getSchema, +}); + +export default _default; diff --git a/ui/src/domain/provider.ts b/ui/src/domain/provider.ts index e5370d3c6..1c2350574 100644 --- a/ui/src/domain/provider.ts +++ b/ui/src/domain/provider.ts @@ -50,6 +50,7 @@ export const ACCESS_PROVIDERS = Object.freeze({ EMAIL: "email", FLEXCDN: "flexcdn", GCORE: "gcore", + GLOBALSIGNATLAS: "globalsignatlas", GNAME: "gname", GODADDY: "godaddy", GOEDGE: "goedge", @@ -191,6 +192,7 @@ export const accessProvidersMap: Map = new [CA_PROVIDERS.LETSENCRYPTSTAGING, "builtin"], [CA_PROVIDERS.ACTALISSSL], [CA_PROVIDERS.BUYPASS], + [CA_PROVIDERS.GLOBALSIGNATLAS], [CA_PROVIDERS.GOOGLETRUSTSERVICES], [CA_PROVIDERS.SSLCOM], [CA_PROVIDERS.ZEROSSL], diff --git a/ui/src/i18n/locales/en/nls.access.json b/ui/src/i18n/locales/en/nls.access.json index bbf441815..886f6a1e7 100644 --- a/ui/src/i18n/locales/en/nls.access.json +++ b/ui/src/i18n/locales/en/nls.access.json @@ -284,6 +284,12 @@ "access.form.goedge_access_key.label": "GoEdge AccessKey", "access.form.goedge_access_key.placeholder": "Please enter GoEdge AccessKey", "access.form.goedge_access_key.tooltip": "For more information, see https://goedge.cloud/docs/API/Auth.md", + "access.form.globalsignatlas_eab_kid.label": "ACME EAB KID", + "access.form.globalsignatlas_eab_kid.placeholder": "Please enter ACME EAB KID", + "access.form.globalsignatlas_eab_kid.tooltip": "For more information, see https://www.globalsign.com/en/acme-automated-certificate-management", + "access.form.globalsignatlas_eab_hmac_key.label": "ACME EAB HMAC key", + "access.form.globalsignatlas_eab_hmac_key.placeholder": "Please enter ACME EAB HMAC key", + "access.form.globalsignatlas_eab_hmac_key.tooltip": "For more information, see https://www.globalsign.com/en/acme-automated-certificate-management", "access.form.googletrustservices_eab_kid.label": "ACME EAB KID", "access.form.googletrustservices_eab_kid.placeholder": "Please enter ACME EAB KID", "access.form.googletrustservices_eab_kid.tooltip": "For more information, see https://cloud.google.com/certificate-manager/docs/public-ca-tutorial", diff --git a/ui/src/i18n/locales/en/nls.provider.json b/ui/src/i18n/locales/en/nls.provider.json index 84b006127..00fd9cc30 100644 --- a/ui/src/i18n/locales/en/nls.provider.json +++ b/ui/src/i18n/locales/en/nls.provider.json @@ -86,6 +86,7 @@ "provider.flexcdn": "FlexCDN", "provider.gcore": "Gcore", "provider.gcore.cdn": "Gcore - CDN (Content Delivery Network)", + "provider.globalsignatlas": "GlobalSign Atlas", "provider.gname": "GNAME", "provider.godaddy": "GoDaddy", "provider.goedge": "GoEdge", diff --git a/ui/src/i18n/locales/zh/nls.access.json b/ui/src/i18n/locales/zh/nls.access.json index 1cda5e6b8..e55c3aac8 100644 --- a/ui/src/i18n/locales/zh/nls.access.json +++ b/ui/src/i18n/locales/zh/nls.access.json @@ -283,6 +283,12 @@ "access.form.goedge_access_key.label": "GoEdge AccessKey", "access.form.goedge_access_key.placeholder": "请输入 GoEdge AccessKey", "access.form.goedge_access_key.tooltip": "这是什么?请参阅 https://goedge.cloud/docs/API/Auth.md", + "access.form.globalsignatlas_eab_kid.label": "ACME EAB KID", + "access.form.globalsignatlas_eab_kid.placeholder": "请输入 ACME EAB KID", + "access.form.globalsignatlas_eab_kid.tooltip": "这是什么?请参阅 https://globalsign.cn/acme-automated-certificate-management", + "access.form.globalsignatlas_eab_hmac_key.label": "ACME EAB HMAC Key", + "access.form.globalsignatlas_eab_hmac_key.placeholder": "请输入 ACME EAB HMAC Key", + "access.form.globalsignatlas_eab_hmac_key.tooltip": "这是什么?请参阅 https://globalsign.cn/acme-automated-certificate-management", "access.form.googletrustservices_eab_kid.label": "ACME EAB KID", "access.form.googletrustservices_eab_kid.placeholder": "请输入 ACME EAB KID", "access.form.googletrustservices_eab_kid.tooltip": "这是什么?请参阅 https://cloud.google.com/certificate-manager/docs/public-ca-tutorial", diff --git a/ui/src/i18n/locales/zh/nls.provider.json b/ui/src/i18n/locales/zh/nls.provider.json index 8d2c7d469..d18a50aaf 100644 --- a/ui/src/i18n/locales/zh/nls.provider.json +++ b/ui/src/i18n/locales/zh/nls.provider.json @@ -86,6 +86,7 @@ "provider.flexcdn": "FlexCDN", "provider.gcore": "Gcore", "provider.gcore.cdn": "Gcore - 内容分发网络 CDN", + "provider.globalsignatlas": "GlobalSign Atlas", "provider.gname": "GNAME", "provider.godaddy": "GoDaddy", "provider.goedge": "GoEdge", diff --git a/ui/src/pages/settings/SettingsSSLProvider.tsx b/ui/src/pages/settings/SettingsSSLProvider.tsx index 2367c67b6..34ba4bbe8 100644 --- a/ui/src/pages/settings/SettingsSSLProvider.tsx +++ b/ui/src/pages/settings/SettingsSSLProvider.tsx @@ -1,6 +1,6 @@ import { createContext, useContext, useEffect, useMemo, useState } from "react"; import { useTranslation } from "react-i18next"; -import { App, Button, Card, Form, Input, Skeleton, Typography } from "antd"; +import { App, Button, Card, Form, Input, Skeleton } from "antd"; import { createSchemaFieldRule } from "antd-zod"; import { produce } from "immer"; import { z } from "zod"; @@ -43,6 +43,7 @@ const SettingsSSLProvider = () => { [CA_PROVIDERS.LETSENCRYPTSTAGING, "provider.letsencryptstaging", "letsencrypt.org", "/imgs/providers/letsencrypt.svg"], [CA_PROVIDERS.ACTALISSSL, "provider.actalisssl", "actalis.com", "/imgs/providers/actalisssl.png"], [CA_PROVIDERS.BUYPASS, "provider.buypass", "buypass.com", "/imgs/providers/buypass.png"], + [CA_PROVIDERS.GLOBALSIGNATLAS, "provider.globalsignatlas", "atlas.globalsign.com", "/imgs/providers/globalsignatlas.png"], [CA_PROVIDERS.GOOGLETRUSTSERVICES, "provider.googletrustservices", "pki.goog", "/imgs/providers/google.svg"], [CA_PROVIDERS.SSLCOM, "provider.sslcom", "ssl.com", "/imgs/providers/sslcom.svg"], [CA_PROVIDERS.ZEROSSL, "provider.zerossl", "zerossl.com", "/imgs/providers/zerossl.svg"], @@ -66,6 +67,8 @@ const SettingsSSLProvider = () => { return ; case CA_PROVIDERS.BUYPASS: return ; + case CA_PROVIDERS.GLOBALSIGNATLAS: + return ; case CA_PROVIDERS.GOOGLETRUSTSERVICES: return ; case CA_PROVIDERS.SSLCOM: @@ -104,11 +107,9 @@ const SettingsSSLProvider = () => {

{t("settings.sslprovider.ca.title")}

}>
-
- - - -
+ + } /> +
@@ -265,6 +266,14 @@ const InternalSettingsFormProviderBuypass = () => { return ; }; +const InternalSettingsFormProviderGlobalSignAtlas = () => { + return ( + + + + ); +}; + const InternalSettingsFormProviderGoogleTrustServices = () => { return (