ssl

package
v0.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 22, 2025 License: GPL-3.0 Imports: 6 Imported by: 0

Documentation

Index

Constants

View Source
const (
	CreateSSL = "create_ssl"
)
View Source
const (
	ListSSLs = "list_ssls"
)

Variables

View Source
var CreateSSLTool = mcp.NewServerTool[CreateSSLInput, any](
	CreateSSL,
	"create ssl",
	func(ctx context.Context, _ *mcp.ServerSession, params *mcp.CallToolParamsFor[CreateSSLInput]) (*mcp.CallToolResultFor[any], error) {
		input := params.Arguments
		if input.Domain == "" {
			err := errors.New("domain is required")
			return &mcp.CallToolResult{
				Content: []mcp.Content{&mcp.TextContent{Text: err.Error()}},
				IsError: true,
			}, err
		}
		if input.Provider == "" {
			err := errors.New("provider is required")
			return &mcp.CallToolResult{
				Content: []mcp.Content{&mcp.TextContent{Text: err.Error()}},
				IsError: true,
			}, err
		}
		if input.Provider != "dnsAccount" && input.Provider != "http" {
			err := errors.New("provider must be dnsAccount or http")
			return &mcp.CallToolResult{
				Content: []mcp.Content{&mcp.TextContent{Text: err.Error()}},
				IsError: true,
			}, err
		}

		acmeRes := &types.ListAcmeRes{}
		pageReq := &types.PageRequest{
			Page:     1,
			PageSize: 500,
		}
		result, err := utils.NewPanelClient("POST", "/websites/acme/search", utils.WithPayload(pageReq)).Request(acmeRes)
		if err != nil {
			return result, err
		}
		if len(acmeRes.Data.Items) == 0 {
			err := errors.New("no acme account found")
			return &mcp.CallToolResult{
				Content: []mcp.Content{&mcp.TextContent{Text: err.Error()}},
				IsError: true,
			}, err
		}
		acme := acmeRes.Data.Items[0]

		var dnsAccountID uint
		if input.Provider == "dnsAccount" {
			dnsAccountRes := &types.ListDNSAccountRes{}
			result, err = utils.NewPanelClient("POST", "/websites/dns/search", utils.WithPayload(pageReq)).Request(dnsAccountRes)
			if err != nil {
				return result, err
			}
			if len(dnsAccountRes.Data.Items) == 0 {
				err := errors.New("no dns account found")
				return &mcp.CallToolResult{
					Content: []mcp.Content{&mcp.TextContent{Text: err.Error()}},
					IsError: true,
				}, err
			}
			dnsName := input.DnsAccount
			if dnsName != "" {
				checkName := strings.ToLower(dnsName)
				for _, dnsAccount := range dnsAccountRes.Data.Items {
					if strings.Contains(strings.ToLower(dnsAccount.Name), checkName) || strings.Contains(strings.ToLower(dnsAccount.Type), checkName) {
						dnsAccountID = dnsAccount.ID
						break
					}
				}
			}
			if dnsAccountID == 0 {
				dnsAccountID = dnsAccountRes.Data.Items[0].ID
			}
		}

		req := &types.CreateSSLRequest{
			PrimaryDomain: input.Domain,
			Provider:      input.Provider,
			AcmeAccountID: acme.ID,
			DnsAccountID:  dnsAccountID,
			KeyType:       "P256",
		}
		res := &types.Response{}
		result, err = utils.NewPanelClient("POST", "/websites/ssl", utils.WithPayload(req)).Request(res)
		if result != nil {
			result.StructuredContent = res
		}
		return result, err
	},
)
View Source
var ListSSLsTool = mcp.NewServerTool[ListSSLsInput, any](
	ListSSLs,
	"list ssls",
	func(ctx context.Context, _ *mcp.ServerSession, params *mcp.CallToolParamsFor[ListSSLsInput]) (*mcp.CallToolResultFor[any], error) {
		req := &types.PageRequest{
			Page:     1,
			PageSize: 500,
		}
		listWebsiteSSLRes := &types.ListWebsiteSSLRes{}
		result, err := utils.NewPanelClient("POST", "/websites/ssl/search", utils.WithPayload(req)).Request(listWebsiteSSLRes)
		if result != nil {
			result.StructuredContent = listWebsiteSSLRes
		}
		return result, err
	},
)

Functions

This section is empty.

Types

type CreateSSLInput added in v0.2.0

type CreateSSLInput struct {
	Domain     string `json:"domain" jsonschema:"domain"`
	Provider   string `json:"provider" jsonschema:"provider support dnsAccount,http"`
	DnsAccount string `json:"dnsAccount,omitempty" jsonschema:"dnsAccount"`
}

type ListSSLsInput added in v0.2.0

type ListSSLsInput struct {
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL