Files
waf-platform/EdgeUser/internal/web/actions/default/dns/providers/createPopup.go

354 lines
11 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Copyright 2022 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
package providers
import (
"regexp"
"github.com/TeaOSLab/EdgeCommon/pkg/langs/codes"
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
"github.com/TeaOSLab/EdgeUser/internal/web/actions/actionutils"
"github.com/iwind/TeaGo/actions"
"github.com/iwind/TeaGo/maps"
"github.com/iwind/TeaGo/rands"
"github.com/iwind/TeaGo/types"
)
type CreatePopupAction struct {
actionutils.ParentAction
}
func (this *CreatePopupAction) Init() {
this.Nav("", "", "")
}
func (this *CreatePopupAction) RunGet(params struct{}) {
// 所有厂商
typesResp, err := this.RPC().DNSProviderRPC().FindAllDNSProviderTypes(this.UserContext(), &pb.FindAllDNSProviderTypesRequest{})
if err != nil {
this.ErrorPage(err)
return
}
typeMaps := []maps.Map{}
for _, t := range typesResp.ProviderTypes {
typeMaps = append(typeMaps, maps.Map{
"name": t.Name,
"code": t.Code,
"description": t.Description,
})
}
this.Data["types"] = typeMaps
// 自动生成CustomHTTP私钥
this.Data["paramCustomHTTPSecret"] = rands.HexString(32)
// EdgeDNS集群列表
nsClustersResp, err := this.RPC().NSClusterRPC().FindAllNSClusters(this.UserContext(), &pb.FindAllNSClustersRequest{})
if err != nil {
this.ErrorPage(err)
return
}
var nsClusterMaps = []maps.Map{}
for _, nsCluster := range nsClustersResp.NsClusters {
nsClusterMaps = append(nsClusterMaps, maps.Map{
"id": nsCluster.Id,
"name": nsCluster.Name,
})
}
this.Data["nsClusters"] = nsClusterMaps
this.Show()
}
func (this *CreatePopupAction) RunPost(params struct {
Name string
Type string
// DNSPod
ParamDNSPodId string
ParamDNSPodToken string
ParamDNSPodRegion string
ParamDNSPodAPIType string
ParamDNSPodAccessKeyId string
ParamDNSPodAccessKeySecret string
// AliDNS
ParamAliDNSAccessKeyId string
ParamAliDNSAccessKeySecret string
ParamAliDNSRegionId string
// HuaweiDNS
ParamHuaweiAccessKeyId string
ParamHuaweiAccessKeySecret string
ParamHuaweiEndpoint string
// CloudFlare
ParamCloudFlareAPIKey string
ParamCloudFlareEmail string
// GoDaddy
ParamGoDaddyKey string
ParamGoDaddySecret string
// ClouDNS
ParamClouDNSAuthId string
ParamClouDNSSubAuthId string
ParamClouDNSAuthPassword string
// DNS.COM
ParamDNSComKey string
ParamDNSComSecret string
// DNS.LA
ParamDNSLaAPIId string
ParamDNSLaSecret string
// VolcEngine
ParamVolcEngineAccessKeyId string
ParamVolcEngineAccessKeySecret string
// Amazon Route 53
ParamAmazonRoute53AccessKeyId string
ParamAmazonRoute53AccessKeySecret string
ParamAmazonRoute53Region string
// Microsoft Azure DNS
ParamAzureDNSSubscriptionId string
ParamAzureDNSTenantId string
ParamAzureDNSClientId string
ParamAzureDNSClientSecret string
ParamAzureDNSResourceGroupName string
// bunny.net
ParamBunnyNetAPIKey string
// Gname
ParamGnameAppid string
ParamGnameSecret string
// Local EdgeDNS
ParamLocalEdgeDNSClusterId int64
// EdgeDNS API
ParamEdgeDNSAPIHost string
ParamEdgeDNSAPIRole string
ParamEdgeDNSAPIAccessKeyId string
ParamEdgeDNSAPIAccessKeySecret string
// CustomHTTP
ParamCustomHTTPURL string
ParamCustomHTTPSecret string
MinTTL int32
Must *actions.Must
CSRF *actionutils.CSRF
}) {
params.Must.
Field("name", params.Name).
Require("请输入账号说明").
Field("type", params.Type).
Require("请选择服务商厂家")
var apiParams = maps.Map{}
switch params.Type {
case "dnspod":
apiParams["apiType"] = params.ParamDNSPodAPIType
switch params.ParamDNSPodAPIType {
case "tencentDNS":
params.Must.
Field("paramDNSPodAccessKeyId", params.ParamDNSPodAccessKeyId).
Require("请输入SecretId").
Field("paramDNSPodAccessKeySecret", params.ParamDNSPodAccessKeySecret).
Require("请输入SecretKey")
apiParams["accessKeyId"] = params.ParamDNSPodAccessKeyId
apiParams["accessKeySecret"] = params.ParamDNSPodAccessKeySecret
apiParams["region"] = params.ParamDNSPodRegion
default:
params.Must.
Field("paramId", params.ParamDNSPodId).
Require("请输入密钥ID").
Field("paramToken", params.ParamDNSPodToken).
Require("请输入密钥Token")
apiParams["id"] = params.ParamDNSPodId
apiParams["token"] = params.ParamDNSPodToken
apiParams["region"] = params.ParamDNSPodRegion
}
case "alidns":
params.Must.
Field("paramAliDNSAccessKeyId", params.ParamAliDNSAccessKeyId).
Require("请输入AccessKeyId").
Field("paramAliDNSAccessKeySecret", params.ParamAliDNSAccessKeySecret).
Require("请输入AccessKeySecret")
apiParams["accessKeyId"] = params.ParamAliDNSAccessKeyId
apiParams["accessKeySecret"] = params.ParamAliDNSAccessKeySecret
apiParams["regionId"] = params.ParamAliDNSRegionId
case "huaweiDNS":
params.Must.
Field("paramHuaweiAccessKeyId", params.ParamHuaweiAccessKeyId).
Require("请输入AccessKeyId").
Field("paramHuaweiAccessKeySecret", params.ParamHuaweiAccessKeySecret).
Require("请输入AccessKeySecret")
apiParams["accessKeyId"] = params.ParamHuaweiAccessKeyId
apiParams["accessKeySecret"] = params.ParamHuaweiAccessKeySecret
apiParams["endpoint"] = params.ParamHuaweiEndpoint
case "cloudFlare":
params.Must.
Field("paramCloudFlareAPIKey", params.ParamCloudFlareAPIKey).
Require("请输入API密钥").
Field("paramCloudFlareEmail", params.ParamCloudFlareEmail).
Email("请输入正确格式的邮箱地址")
apiParams["apiKey"] = params.ParamCloudFlareAPIKey
apiParams["email"] = params.ParamCloudFlareEmail
case "godaddy":
params.Must.
Field("paramGodaddyKey", params.ParamGoDaddyKey).
Require("请输入Key").
Field("paramGodaddySecret", params.ParamGoDaddySecret).
Require("请输入Secret")
apiParams["key"] = params.ParamGoDaddyKey
apiParams["secret"] = params.ParamGoDaddySecret
case "cloudns":
var authIdString = params.ParamClouDNSAuthId
var subAuthIdString = params.ParamClouDNSSubAuthId
var authPassword = params.ParamClouDNSAuthPassword
if len(authIdString) == 0 && len(subAuthIdString) == 0 {
this.FailField("paramClouDNSAuthId", "请输入用户或者子用户的认证IDauth-id")
}
if len(authIdString) > 0 {
if !regexp.MustCompile(`^\d+$`).MatchString(authIdString) {
this.FailField("paramClouDNSAuthId", "用户认证ID需要是一个整数")
}
}
if len(subAuthIdString) > 0 {
if !regexp.MustCompile(`^\d+$`).MatchString(subAuthIdString) {
this.FailField("paramClouDNSSubAuthId", "子用户认证ID需要是一个整数")
}
}
if len(authPassword) == 0 {
this.FailField("paramClouDNSPassword", "请输入用户或者子用户的认证密码")
}
apiParams["authId"] = types.Int64(authIdString)
apiParams["subAuthId"] = types.Int64(subAuthIdString)
apiParams["authPassword"] = authPassword
case "dnscom":
params.Must.
Field("paramDNSComKey", params.ParamDNSComKey).
Require("请输入ApiKey").
Field("paramDNSComSecret", params.ParamDNSComSecret).
Require("请输入ApiSecret")
apiParams["key"] = params.ParamDNSComKey
apiParams["secret"] = params.ParamDNSComSecret
case "dnsla":
params.Must.
Field("paramDNSLaAPIId", params.ParamDNSLaAPIId).
Require("请输入API ID").
Field("paramDNSLaSecret", params.ParamDNSLaSecret).
Require("请输入API密钥")
apiParams["apiId"] = params.ParamDNSLaAPIId
apiParams["secret"] = params.ParamDNSLaSecret
case "volcEngine":
params.Must.
Field("paramVolcEngineAccessKeyId", params.ParamVolcEngineAccessKeyId).
Require("请输入Access Key ID").
Field("paramVolcEngineAccessKeySecret", params.ParamVolcEngineAccessKeySecret).
Require("请输入Secret Access Key")
apiParams["accessKeyId"] = params.ParamVolcEngineAccessKeyId
apiParams["accessKeySecret"] = params.ParamVolcEngineAccessKeySecret
case "amazonRoute53":
params.Must.
Field("paramAmazonRoute53AccessKeyId", params.ParamAmazonRoute53AccessKeyId).
Require("请输入Access Key ID").
Field("paramAmazonRoute53AccessKeySecret", params.ParamAmazonRoute53AccessKeySecret).
Require("请输入Secret Access Key")
apiParams["accessKeyId"] = params.ParamAmazonRoute53AccessKeyId
apiParams["accessKeySecret"] = params.ParamAmazonRoute53AccessKeySecret
apiParams["region"] = params.ParamAmazonRoute53Region
case "azureDNS":
params.Must.
Field("paramAzureDNSSubscriptionId", params.ParamAzureDNSSubscriptionId).
Require("请输入Subscription ID").
Field("paramAzureDNSTenantId", params.ParamAzureDNSTenantId).
Require("请输入Tenant ID").
Field("paramAzureDNSClientId", params.ParamAzureDNSClientId).
Require("请输入Client ID").
Field("paramAzureDNSClientSecret", params.ParamAzureDNSClientSecret).
Require("请输入Client Secret").
Field("paramAzureDNSResourceGroupName", params.ParamAzureDNSResourceGroupName).
Require("请输入Resource Group Name")
apiParams["subscriptionId"] = params.ParamAzureDNSSubscriptionId
apiParams["tenantId"] = params.ParamAzureDNSTenantId
apiParams["clientId"] = params.ParamAzureDNSClientId
apiParams["clientSecret"] = params.ParamAzureDNSClientSecret
apiParams["resourceGroupName"] = params.ParamAzureDNSResourceGroupName
case "bunnyNet":
params.Must.
Field("paramBunnyNetAPIKey", params.ParamBunnyNetAPIKey).
Require("请输入API密钥")
apiParams["apiKey"] = params.ParamBunnyNetAPIKey
case "gname":
params.Must.
Field("paramGnameAppid", params.ParamGnameAppid).
Require("请输入APPID").
Field("paramGnameSecret", params.ParamGnameSecret).
Require("请输入API Secret")
apiParams["appid"] = params.ParamGnameAppid
apiParams["secret"] = params.ParamGnameSecret
case "localEdgeDNS":
params.Must.
Field("paramLocalEdgeDNSClusterId", params.ParamLocalEdgeDNSClusterId).
Gt(0, "请选择域名服务集群")
apiParams["clusterId"] = params.ParamLocalEdgeDNSClusterId
case "edgeDNSAPI":
params.Must.
Field("paramEdgeDNSAPIHost", params.ParamEdgeDNSAPIHost).
Require("请输入API地址").
Field("paramEdgeDNSAPIRole", params.ParamEdgeDNSAPIRole).
Require("请选择AccessKey类型").
Field("paramEdgeDNSAPIAccessKeyId", params.ParamEdgeDNSAPIAccessKeyId).
Require("请输入AccessKey ID").
Field("paramEdgeDNSAPIAccessKeySecret", params.ParamEdgeDNSAPIAccessKeySecret).
Require("请输入AccessKey密钥")
apiParams["host"] = params.ParamEdgeDNSAPIHost
apiParams["role"] = params.ParamEdgeDNSAPIRole
apiParams["accessKeyId"] = params.ParamEdgeDNSAPIAccessKeyId
apiParams["accessKeySecret"] = params.ParamEdgeDNSAPIAccessKeySecret
case "customHTTP":
params.Must.
Field("paramCustomHTTPURL", params.ParamCustomHTTPURL).
Require("请输入HTTP URL").
Match("^(?i)(http|https):", "URL必须以http://或者https://开头").
Field("paramCustomHTTPSecret", params.ParamCustomHTTPSecret).
Require("请输入私钥")
apiParams["url"] = params.ParamCustomHTTPURL
apiParams["secret"] = params.ParamCustomHTTPSecret
default:
this.Fail("暂时不支持此服务商'" + params.Type + "'")
}
createResp, err := this.RPC().DNSProviderRPC().CreateDNSProvider(this.UserContext(), &pb.CreateDNSProviderRequest{
Name: params.Name,
Type: params.Type,
ApiParamsJSON: apiParams.AsJSON(),
MinTTL: params.MinTTL,
})
if err != nil {
this.ErrorPage(err)
return
}
defer this.CreateLogInfo(codes.DNSProvider_LogCreateDNSProvider, createResp.DnsProviderId)
this.Success()
}