mirror of
https://github.com/certimate-go/certimate.git
synced 2026-09-24 23:10:13 +08:00
feat: new ca provider: globalsign atlas
This commit is contained in:
@@ -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",
|
||||
|
||||
@@ -220,6 +220,10 @@ type AccessConfigForGoEdge struct {
|
||||
AllowInsecureConnections bool `json:"allowInsecureConnections,omitempty"`
|
||||
}
|
||||
|
||||
type AccessConfigForGlobalSignAtlas struct {
|
||||
AccessConfigForACMEExternalAccountBinding
|
||||
}
|
||||
|
||||
type AccessConfigForGoogleTrustServices struct {
|
||||
AccessConfigForACMEExternalAccountBinding
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 12 KiB |
@@ -45,6 +45,7 @@ import AccessConfigFieldsProviderEdgio from "./forms/AccessConfigFieldsProviderE
|
||||
import AccessConfigFieldsProviderEmail from "./forms/AccessConfigFieldsProviderEmail";
|
||||
import AccessConfigFieldsProviderFlexCDN from "./forms/AccessConfigFieldsProviderFlexCDN";
|
||||
import AccessConfigFieldsProviderGcore from "./forms/AccessConfigFieldsProviderGcore";
|
||||
import AccessConfigFieldsProviderGlobalSignAtlas from "./forms/AccessConfigFieldsProviderGlobalSignAtlas";
|
||||
import AccessConfigFieldsProviderGname from "./forms/AccessConfigFieldsProviderGname";
|
||||
import AccessConfigFieldsProviderGoDaddy from "./forms/AccessConfigFieldsProviderGoDaddy";
|
||||
import AccessConfigFieldsProviderGoEdge from "./forms/AccessConfigFieldsProviderGoEdge";
|
||||
@@ -241,6 +242,9 @@ const AccessForm = ({ className, style, disabled, initialValues, mode, usage, ..
|
||||
case ACCESS_PROVIDERS.GOEDGE: {
|
||||
return <AccessConfigFieldsProviderGoEdge />;
|
||||
}
|
||||
case ACCESS_PROVIDERS.GLOBALSIGNATLAS: {
|
||||
return <AccessConfigFieldsProviderGlobalSignAtlas />;
|
||||
}
|
||||
case ACCESS_PROVIDERS.GOOGLETRUSTSERVICES: {
|
||||
return <AccessConfigFieldsProviderGoogleTrustServices />;
|
||||
}
|
||||
|
||||
@@ -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 (
|
||||
<>
|
||||
<Form.Item
|
||||
name={[parentNamePath, "eabKid"]}
|
||||
initialValue={initialValues.eabKid}
|
||||
label={t("access.form.globalsignatlas_eab_kid.label")}
|
||||
rules={[formRule]}
|
||||
tooltip={<span dangerouslySetInnerHTML={{ __html: t("access.form.globalsignatlas_eab_kid.tooltip") }}></span>}
|
||||
>
|
||||
<Input autoComplete="new-password" placeholder={t("access.form.globalsignatlas_eab_kid.placeholder")} />
|
||||
</Form.Item>
|
||||
|
||||
<Form.Item
|
||||
name={[parentNamePath, "eabHmacKey"]}
|
||||
initialValue={initialValues.eabHmacKey}
|
||||
label={t("access.form.globalsignatlas_eab_hmac_key.label")}
|
||||
rules={[formRule]}
|
||||
tooltip={<span dangerouslySetInnerHTML={{ __html: t("access.form.globalsignatlas_eab_hmac_key.tooltip") }}></span>}
|
||||
>
|
||||
<Input.Password autoComplete="new-password" placeholder={t("access.form.globalsignatlas_eab_hmac_key.placeholder")} />
|
||||
</Form.Item>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
const getInitialValues = (): Nullish<z.infer<ReturnType<typeof getSchema>>> => {
|
||||
return {
|
||||
eabKid: "",
|
||||
eabHmacKey: "",
|
||||
};
|
||||
};
|
||||
|
||||
const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType<typeof getI18n> }) => {
|
||||
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;
|
||||
@@ -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<AccessProvider["type"] | string, AccessProv
|
||||
[ACCESS_PROVIDERS.LETSENCRYPTSTAGING, "provider.letsencryptstaging", "/imgs/providers/letsencrypt.svg", [ACCESS_USAGES.CA], "builtin"],
|
||||
[ACCESS_PROVIDERS.ACTALISSSL, "provider.actalisssl", "/imgs/providers/actalisssl.png", [ACCESS_USAGES.CA]],
|
||||
[ACCESS_PROVIDERS.BUYPASS, "provider.buypass", "/imgs/providers/buypass.png", [ACCESS_USAGES.CA]],
|
||||
[ACCESS_PROVIDERS.GLOBALSIGNATLAS, "provider.globalsignatlas", "/imgs/providers/globalsignatlas.png", [ACCESS_USAGES.CA]],
|
||||
[ACCESS_PROVIDERS.GOOGLETRUSTSERVICES, "provider.googletrustservices", "/imgs/providers/google.svg", [ACCESS_USAGES.CA]],
|
||||
[ACCESS_PROVIDERS.SSLCOM, "provider.sslcom", "/imgs/providers/sslcom.svg", [ACCESS_USAGES.CA]],
|
||||
[ACCESS_PROVIDERS.ZEROSSL, "provider.zerossl", "/imgs/providers/zerossl.svg", [ACCESS_USAGES.CA]],
|
||||
@@ -227,6 +229,7 @@ export const CA_PROVIDERS = Object.freeze({
|
||||
ACMECA: `${ACCESS_PROVIDERS.ACMECA}`,
|
||||
ACTALISSSL: `${ACCESS_PROVIDERS.ACTALISSSL}`,
|
||||
BUYPASS: `${ACCESS_PROVIDERS.BUYPASS}`,
|
||||
GLOBALSIGNATLAS: `${ACCESS_PROVIDERS.GLOBALSIGNATLAS}`,
|
||||
GOOGLETRUSTSERVICES: `${ACCESS_PROVIDERS.GOOGLETRUSTSERVICES}`,
|
||||
LETSENCRYPT: `${ACCESS_PROVIDERS.LETSENCRYPT}`,
|
||||
LETSENCRYPTSTAGING: `${ACCESS_PROVIDERS.LETSENCRYPTSTAGING}`,
|
||||
@@ -249,6 +252,7 @@ export const caProvidersMap: Map<CAProvider["type"] | string, CAProvider> = new
|
||||
[CA_PROVIDERS.LETSENCRYPTSTAGING, "builtin"],
|
||||
[CA_PROVIDERS.ACTALISSSL],
|
||||
[CA_PROVIDERS.BUYPASS],
|
||||
[CA_PROVIDERS.GLOBALSIGNATLAS],
|
||||
[CA_PROVIDERS.GOOGLETRUSTSERVICES],
|
||||
[CA_PROVIDERS.SSLCOM],
|
||||
[CA_PROVIDERS.ZEROSSL],
|
||||
|
||||
@@ -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 <a href=\"https://goedge.cloud/docs/API/Auth.md\" target=\"_blank\">https://goedge.cloud/docs/API/Auth.md</a>",
|
||||
"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 <a href=\"https://www.globalsign.com/en/acme-automated-certificate-management\" target=\"_blank\">https://www.globalsign.com/en/acme-automated-certificate-management</a>",
|
||||
"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 <a href=\"https://www.globalsign.com/en/acme-automated-certificate-management\" target=\"_blank\">https://www.globalsign.com/en/acme-automated-certificate-management</a>",
|
||||
"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 <a href=\"https://cloud.google.com/certificate-manager/docs/public-ca-tutorial\" target=\"_blank\">https://cloud.google.com/certificate-manager/docs/public-ca-tutorial</a>",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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": "这是什么?请参阅 <a href=\"https://goedge.cloud/docs/API/Auth.md\" target=\"_blank\">https://goedge.cloud/docs/API/Auth.md</a>",
|
||||
"access.form.globalsignatlas_eab_kid.label": "ACME EAB KID",
|
||||
"access.form.globalsignatlas_eab_kid.placeholder": "请输入 ACME EAB KID",
|
||||
"access.form.globalsignatlas_eab_kid.tooltip": "这是什么?请参阅 <a href=\"https://globalsign.cn/acme-automated-certificate-management\" target=\"_blank\">https://globalsign.cn/acme-automated-certificate-management</a>",
|
||||
"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": "这是什么?请参阅 <a href=\"https://globalsign.cn/acme-automated-certificate-management\" target=\"_blank\">https://globalsign.cn/acme-automated-certificate-management</a>",
|
||||
"access.form.googletrustservices_eab_kid.label": "ACME EAB KID",
|
||||
"access.form.googletrustservices_eab_kid.placeholder": "请输入 ACME EAB KID",
|
||||
"access.form.googletrustservices_eab_kid.tooltip": "这是什么?请参阅 <a href=\"https://cloud.google.com/certificate-manager/docs/public-ca-tutorial\" target=\"_blank\">https://cloud.google.com/certificate-manager/docs/public-ca-tutorial</a>",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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 <InternalSettingsFormProviderActalisSSL />;
|
||||
case CA_PROVIDERS.BUYPASS:
|
||||
return <InternalSettingsFormProviderBuypass />;
|
||||
case CA_PROVIDERS.GLOBALSIGNATLAS:
|
||||
return <InternalSettingsFormProviderGlobalSignAtlas />;
|
||||
case CA_PROVIDERS.GOOGLETRUSTSERVICES:
|
||||
return <InternalSettingsFormProviderGoogleTrustServices />;
|
||||
case CA_PROVIDERS.SSLCOM:
|
||||
@@ -104,11 +107,9 @@ const SettingsSSLProvider = () => {
|
||||
<h2>{t("settings.sslprovider.ca.title")}</h2>
|
||||
<Show when={!loading} fallback={<Skeleton active />}>
|
||||
<Form form={formInst} disabled={formPending} layout="vertical" initialValues={{ provider: providerValue }}>
|
||||
<div className="mb-2">
|
||||
<Typography.Text type="secondary">
|
||||
<span dangerouslySetInnerHTML={{ __html: t("settings.sslprovider.ca.tips") }}></span>
|
||||
</Typography.Text>
|
||||
</div>
|
||||
<Form.Item>
|
||||
<Tips message={<span dangerouslySetInnerHTML={{ __html: t("settings.sslprovider.ca.tips") }}></span>} />
|
||||
</Form.Item>
|
||||
|
||||
<Form.Item name="provider" label={t("settings.sslprovider.form.provider.label")} extra={t("settings.sslprovider.form.provider.help")}>
|
||||
<div className="flex w-full flex-wrap items-center gap-4">
|
||||
@@ -265,6 +266,14 @@ const InternalSettingsFormProviderBuypass = () => {
|
||||
return <InternalSharedForm provider={CA_PROVIDERS.BUYPASS} />;
|
||||
};
|
||||
|
||||
const InternalSettingsFormProviderGlobalSignAtlas = () => {
|
||||
return (
|
||||
<InternalSharedForm provider={CA_PROVIDERS.GLOBALSIGNATLAS}>
|
||||
<InternalSharedFormEabFields i18nKey="globalsignatlas" />
|
||||
</InternalSharedForm>
|
||||
);
|
||||
};
|
||||
|
||||
const InternalSettingsFormProviderGoogleTrustServices = () => {
|
||||
return (
|
||||
<InternalSharedForm provider={CA_PROVIDERS.GOOGLETRUSTSERVICES}>
|
||||
|
||||
Reference in New Issue
Block a user