From 091c3db5205b029d348d8f4ef6aa015f98e1699d Mon Sep 17 00:00:00 2001 From: Fu Diwei Date: Thu, 30 Oct 2025 20:18:15 +0800 Subject: [PATCH] refactor: remove unused code --- go.mod | 2 - go.sum | 6 -- pkg/core/notifier/providers/bark/bark.go | 76 ------------------ pkg/core/notifier/providers/bark/bark_test.go | 64 --------------- .../providers/discordbot/discordbot.go | 8 +- pkg/core/notifier/providers/gotify/gotify.go | 76 ------------------ .../notifier/providers/gotify/gotify_test.go | 68 ---------------- .../providers/mattermost/mattermost.go | 8 +- .../notifier/providers/pushover/pushover.go | 71 ----------------- .../providers/pushover/pushover_test.go | 62 --------------- .../notifier/providers/pushplus/pushplus.go | 79 ------------------- .../providers/pushplus/pushplus_test.go | 56 ------------- .../providers/serverchan/serverchan.go | 67 ---------------- .../providers/serverchan/serverchan_test.go | 57 ------------- .../notifier/providers/slackbot/slackbot.go | 8 +- .../providers/telegrambot/telegrambot.go | 6 +- .../notifier/providers/wecombot/wecombot.go | 28 ++++++- .../providers/wangsu-cdnpro/wangsu_cdnpro.go | 6 +- 18 files changed, 41 insertions(+), 707 deletions(-) delete mode 100644 pkg/core/notifier/providers/bark/bark.go delete mode 100644 pkg/core/notifier/providers/bark/bark_test.go delete mode 100644 pkg/core/notifier/providers/gotify/gotify.go delete mode 100644 pkg/core/notifier/providers/gotify/gotify_test.go delete mode 100644 pkg/core/notifier/providers/pushover/pushover.go delete mode 100644 pkg/core/notifier/providers/pushover/pushover_test.go delete mode 100644 pkg/core/notifier/providers/pushplus/pushplus.go delete mode 100644 pkg/core/notifier/providers/pushplus/pushplus_test.go delete mode 100644 pkg/core/notifier/providers/serverchan/serverchan.go delete mode 100644 pkg/core/notifier/providers/serverchan/serverchan_test.go diff --git a/go.mod b/go.mod index 1e0fdaae5..7318e37c0 100644 --- a/go.mod +++ b/go.mod @@ -31,11 +31,9 @@ require ( github.com/aws/aws-sdk-go-v2/service/cloudfront v1.55.2 github.com/aws/aws-sdk-go-v2/service/iam v1.49.0 github.com/baidubce/bce-sdk-go v0.9.250 - github.com/blinkbean/dingtalk v1.1.3 github.com/byteplus-sdk/byteplus-sdk-golang v1.0.58 github.com/go-acme/lego/v4 v4.27.0 github.com/go-cmd/cmd v1.4.3 - github.com/go-lark/lark v1.16.0 github.com/go-resty/resty/v2 v2.16.5 github.com/go-viper/mapstructure/v2 v2.4.0 github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.172 diff --git a/go.sum b/go.sum index a02ce5448..902855f03 100644 --- a/go.sum +++ b/go.sum @@ -261,8 +261,6 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/blinkbean/dingtalk v1.1.3 h1:MbidFZYom7DTFHD/YIs+eaI7kRy52kmWE/sy0xjo6E4= -github.com/blinkbean/dingtalk v1.1.3/go.mod h1:9BaLuGSBqY3vT5hstValh48DbsKO7vaHaJnG9pXwbto= github.com/buger/goterm v1.0.4 h1:Z9YvGmOih81P0FbVtEYTFF6YsSgxSUKEhf/f9bTMXbY= github.com/buger/goterm v1.0.4/go.mod h1:HiFWV3xnkolgrBV3mY8m0X0Pumt4zg4QhbdOzQtB8tE= github.com/byteplus-sdk/byteplus-sdk-golang v1.0.58 h1:i+HIFn/0FdSAMxsbcGMy8ScJpwdWN60g8gGozILRtHA= @@ -369,8 +367,6 @@ github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2 github.com/go-kit/kit v0.12.0/go.mod h1:lHd+EkCZPIwYItmGDDRdhinkzX2A1sj+M9biaEaizzs= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= -github.com/go-lark/lark v1.16.0 h1:U6BwkLM9wrZedSM7cIiMofganr8PCvJN+M75w2lf2Gg= -github.com/go-lark/lark v1.16.0/go.mod h1:6ltbSztPZRT6IaO9ZIQyVaY5pVp/KeMizDYtfZkU+vM= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= @@ -576,8 +572,6 @@ github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9Y github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= -github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc= -github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= diff --git a/pkg/core/notifier/providers/bark/bark.go b/pkg/core/notifier/providers/bark/bark.go deleted file mode 100644 index 0378bd905..000000000 --- a/pkg/core/notifier/providers/bark/bark.go +++ /dev/null @@ -1,76 +0,0 @@ -package bark - -import ( - "context" - "errors" - "fmt" - "log/slog" - - "github.com/go-resty/resty/v2" - - "github.com/certimate-go/certimate/pkg/core" -) - -type NotifierProviderConfig struct { - // Bark 服务地址。 - // 零值时使用官方服务器。 - ServerUrl string `json:"serverUrl"` - // Bark 设备密钥。 - DeviceKey string `json:"deviceKey"` -} - -type NotifierProvider struct { - config *NotifierProviderConfig - logger *slog.Logger - httpClient *resty.Client -} - -var _ core.Notifier = (*NotifierProvider)(nil) - -func NewNotifierProvider(config *NotifierProviderConfig) (*NotifierProvider, error) { - if config == nil { - return nil, errors.New("the configuration of the notifier provider is nil") - } - - client := resty.New() - - return &NotifierProvider{ - config: config, - logger: slog.Default(), - httpClient: client, - }, nil -} - -func (n *NotifierProvider) SetLogger(logger *slog.Logger) { - if logger == nil { - n.logger = slog.New(slog.DiscardHandler) - } else { - n.logger = logger - } -} - -func (n *NotifierProvider) Notify(ctx context.Context, subject string, message string) (*core.NotifyResult, error) { - const defaultServerURL = "https://api.day.app/" - serverUrl := defaultServerURL - if n.config.ServerUrl != "" { - serverUrl = n.config.ServerUrl - } - - // REF: https://bark.day.app/#/tutorial - req := n.httpClient.R(). - SetContext(ctx). - SetHeader("Content-Type", "application/json"). - SetBody(map[string]any{ - "title": subject, - "body": message, - "device_key": n.config.DeviceKey, - }) - resp, err := req.Post(serverUrl) - if err != nil { - return nil, fmt.Errorf("bark api error: failed to send request: %w", err) - } else if resp.IsError() { - return nil, fmt.Errorf("bark api error: unexpected status code: %d, resp: %s", resp.StatusCode(), resp.String()) - } - - return &core.NotifyResult{}, nil -} diff --git a/pkg/core/notifier/providers/bark/bark_test.go b/pkg/core/notifier/providers/bark/bark_test.go deleted file mode 100644 index 6a1bc7cd9..000000000 --- a/pkg/core/notifier/providers/bark/bark_test.go +++ /dev/null @@ -1,64 +0,0 @@ -package bark_test - -import ( - "context" - "flag" - "fmt" - "strings" - "testing" - - provider "github.com/certimate-go/certimate/pkg/core/notifier/providers/bark" -) - -const ( - mockSubject = "test_subject" - mockMessage = "test_message" -) - -var ( - fServerUrl string - fDeviceKey string -) - -func init() { - argsPrefix := "CERTIMATE_NOTIFIER_BARK_" - - flag.StringVar(&fServerUrl, argsPrefix+"SERVERURL", "", "") - flag.StringVar(&fDeviceKey, argsPrefix+"DEVICEKEY", "", "") -} - -/* -Shell command to run this test: - - go test -v ./bark_test.go -args \ - --CERTIMATE_NOTIFIER_BARK_SERVERURL="https://example.com/your-server-url" \ - --CERTIMATE_NOTIFIER_BARK_DEVICEKEY="your-device-key" -*/ -func TestNotify(t *testing.T) { - flag.Parse() - - t.Run("Notify", func(t *testing.T) { - t.Log(strings.Join([]string{ - "args:", - fmt.Sprintf("SERVERURL: %v", fServerUrl), - fmt.Sprintf("DEVICEKEY: %v", fDeviceKey), - }, "\n")) - - notifier, err := provider.NewNotifierProvider(&provider.NotifierProviderConfig{ - ServerUrl: fServerUrl, - DeviceKey: fDeviceKey, - }) - if err != nil { - t.Errorf("err: %+v", err) - return - } - - res, err := notifier.Notify(context.Background(), mockSubject, mockMessage) - if err != nil { - t.Errorf("err: %+v", err) - return - } - - t.Logf("ok: %v", res) - }) -} diff --git a/pkg/core/notifier/providers/discordbot/discordbot.go b/pkg/core/notifier/providers/discordbot/discordbot.go index 6d5ec9fc3..2dc27aa71 100644 --- a/pkg/core/notifier/providers/discordbot/discordbot.go +++ b/pkg/core/notifier/providers/discordbot/discordbot.go @@ -31,7 +31,10 @@ func NewNotifierProvider(config *NotifierProviderConfig) (*NotifierProvider, err return nil, errors.New("the configuration of the notifier provider is nil") } - client := resty.New() + client := resty.New(). + SetHeader("Authorization", fmt.Sprintf("Bot %s", config.BotToken)). + SetHeader("Content-Type", "application/json"). + SetHeader("User-Agent", "certimate") return &NotifierProvider{ config: config, @@ -52,9 +55,6 @@ func (n *NotifierProvider) Notify(ctx context.Context, subject string, message s // REF: https://discord.com/developers/docs/resources/message#create-message req := n.httpClient.R(). SetContext(ctx). - SetHeader("Authorization", "Bot "+n.config.BotToken). - SetHeader("Content-Type", "application/json"). - SetHeader("User-Agent", "certimate"). SetBody(map[string]any{ "content": subject + "\n" + message, }) diff --git a/pkg/core/notifier/providers/gotify/gotify.go b/pkg/core/notifier/providers/gotify/gotify.go deleted file mode 100644 index 97d69ba9f..000000000 --- a/pkg/core/notifier/providers/gotify/gotify.go +++ /dev/null @@ -1,76 +0,0 @@ -package gotify - -import ( - "context" - "errors" - "fmt" - "log/slog" - "strings" - - "github.com/go-resty/resty/v2" - - "github.com/certimate-go/certimate/pkg/core" -) - -type NotifierProviderConfig struct { - // Gotify 服务地址。 - ServerUrl string `json:"serverUrl"` - // Gotify Token。 - Token string `json:"token"` - // Gotify 消息优先级。 - Priority int64 `json:"priority,omitempty"` -} - -type NotifierProvider struct { - config *NotifierProviderConfig - logger *slog.Logger - httpClient *resty.Client -} - -var _ core.Notifier = (*NotifierProvider)(nil) - -func NewNotifierProvider(config *NotifierProviderConfig) (*NotifierProvider, error) { - if config == nil { - return nil, errors.New("the configuration of the notifier provider is nil") - } - - client := resty.New() - - return &NotifierProvider{ - config: config, - logger: slog.Default(), - httpClient: client, - }, nil -} - -func (n *NotifierProvider) SetLogger(logger *slog.Logger) { - if logger == nil { - n.logger = slog.New(slog.DiscardHandler) - } else { - n.logger = logger - } -} - -func (n *NotifierProvider) Notify(ctx context.Context, subject string, message string) (*core.NotifyResult, error) { - serverUrl := strings.TrimRight(n.config.ServerUrl, "/") - - // REF: https://gotify.net/api-docs#/message/createMessage - req := n.httpClient.R(). - SetContext(ctx). - SetHeader("Authorization", "Bearer "+n.config.Token). - SetHeader("Content-Type", "application/json"). - SetHeader("User-Agent", "certimate"). - SetBody(map[string]any{ - "title": subject, - "message": message, - "priority": n.config.Priority, - }) - resp, err := req.Post(fmt.Sprintf("%s/message", serverUrl)) - if err != nil { - return nil, fmt.Errorf("gotify api error: failed to send request: %w", err) - } else if resp.IsError() { - return nil, fmt.Errorf("gotify api error: unexpected status code: %d, resp: %s", resp.StatusCode(), resp.String()) - } - - return &core.NotifyResult{}, nil -} diff --git a/pkg/core/notifier/providers/gotify/gotify_test.go b/pkg/core/notifier/providers/gotify/gotify_test.go deleted file mode 100644 index a96142b2e..000000000 --- a/pkg/core/notifier/providers/gotify/gotify_test.go +++ /dev/null @@ -1,68 +0,0 @@ -package gotify_test - -import ( - "context" - "flag" - "fmt" - "strings" - "testing" - - provider "github.com/certimate-go/certimate/pkg/core/notifier/providers/gotify" -) - -const ( - mockSubject = "test_subject" - mockMessage = "test_message" -) - -var ( - fUrl string - fToken string - fPriority int64 -) - -func init() { - argsPrefix := "CERTIMATE_NOTIFIER_GOTIFY_" - flag.StringVar(&fUrl, argsPrefix+"URL", "", "") - flag.StringVar(&fToken, argsPrefix+"TOKEN", "", "") - flag.Int64Var(&fPriority, argsPrefix+"PRIORITY", 0, "") -} - -/* -Shell command to run this test: - - go test -v ./gotify_test.go -args \ - --CERTIMATE_NOTIFIER_GOTIFY_URL="https://example.com" \ - --CERTIMATE_NOTIFIER_GOTIFY_TOKEN="your-gotify-application-token" \ - --CERTIMATE_NOTIFIER_GOTIFY_PRIORITY="your-message-priority" -*/ -func TestNotify(t *testing.T) { - flag.Parse() - - t.Run("Notify", func(t *testing.T) { - t.Log(strings.Join([]string{ - "args:", - fmt.Sprintf("URL: %v", fUrl), - fmt.Sprintf("TOKEN: %v", fToken), - fmt.Sprintf("PRIORITY: %d", fPriority), - }, "\n")) - - notifier, err := provider.NewNotifierProvider(&provider.NotifierProviderConfig{ - ServerUrl: fUrl, - Token: fToken, - Priority: fPriority, - }) - if err != nil { - t.Errorf("err: %+v", err) - return - } - - res, err := notifier.Notify(context.Background(), mockSubject, mockMessage) - if err != nil { - t.Errorf("err: %+v", err) - return - } - - t.Logf("ok: %v", res) - }) -} diff --git a/pkg/core/notifier/providers/mattermost/mattermost.go b/pkg/core/notifier/providers/mattermost/mattermost.go index c936306c4..7dcde754d 100644 --- a/pkg/core/notifier/providers/mattermost/mattermost.go +++ b/pkg/core/notifier/providers/mattermost/mattermost.go @@ -36,7 +36,9 @@ func NewNotifierProvider(config *NotifierProviderConfig) (*NotifierProvider, err return nil, errors.New("the configuration of the notifier provider is nil") } - client := resty.New() + client := resty.New(). + SetHeader("Content-Type", "application/json"). + SetHeader("User-Agent", "certimate") return &NotifierProvider{ config: config, @@ -59,8 +61,6 @@ func (n *NotifierProvider) Notify(ctx context.Context, subject string, message s // REF: https://developers.mattermost.com/api-documentation/#/operations/Login loginReq := n.httpClient.R(). SetContext(ctx). - SetHeader("Content-Type", "application/json"). - SetHeader("User-Agent", "certimate"). SetBody(map[string]any{ "login_id": n.config.Username, "password": n.config.Password, @@ -78,8 +78,6 @@ func (n *NotifierProvider) Notify(ctx context.Context, subject string, message s postReq := n.httpClient.R(). SetContext(ctx). SetHeader("Authorization", "Bearer "+loginResp.Header().Get("Token")). - SetHeader("Content-Type", "application/json"). - SetHeader("User-Agent", "certimate"). SetBody(map[string]any{ "channel_id": n.config.ChannelId, "props": map[string]interface{}{ diff --git a/pkg/core/notifier/providers/pushover/pushover.go b/pkg/core/notifier/providers/pushover/pushover.go deleted file mode 100644 index 5eea6375d..000000000 --- a/pkg/core/notifier/providers/pushover/pushover.go +++ /dev/null @@ -1,71 +0,0 @@ -package pushover - -import ( - "context" - "errors" - "fmt" - "log/slog" - - "github.com/go-resty/resty/v2" - - "github.com/certimate-go/certimate/pkg/core" -) - -type NotifierProviderConfig struct { - // Pushover API Token。 - Token string `json:"token"` - // 用户或分组标识。 - User string `json:"user"` -} - -type NotifierProvider struct { - config *NotifierProviderConfig - logger *slog.Logger - httpClient *resty.Client -} - -var _ core.Notifier = (*NotifierProvider)(nil) - -func NewNotifierProvider(config *NotifierProviderConfig) (*NotifierProvider, error) { - if config == nil { - return nil, errors.New("the configuration of the notifier provider is nil") - } - - client := resty.New() - - return &NotifierProvider{ - config: config, - logger: slog.Default(), - httpClient: client, - }, nil -} - -func (n *NotifierProvider) SetLogger(logger *slog.Logger) { - if logger == nil { - n.logger = slog.New(slog.DiscardHandler) - } else { - n.logger = logger - } -} - -func (n *NotifierProvider) Notify(ctx context.Context, subject string, message string) (*core.NotifyResult, error) { - // REF: https://pushover.net/api - req := n.httpClient.R(). - SetContext(ctx). - SetHeader("Content-Type", "application/json"). - SetHeader("User-Agent", "certimate"). - SetBody(map[string]any{ - "title": subject, - "message": message, - "token": n.config.Token, - "user": n.config.User, - }) - resp, err := req.Post("https://api.pushover.net/1/messages.json") - if err != nil { - return nil, fmt.Errorf("pushover api error: failed to send request: %w", err) - } else if resp.IsError() { - return nil, fmt.Errorf("pushover api error: unexpected status code: %d, resp: %s", resp.StatusCode(), resp.String()) - } - - return &core.NotifyResult{}, nil -} diff --git a/pkg/core/notifier/providers/pushover/pushover_test.go b/pkg/core/notifier/providers/pushover/pushover_test.go deleted file mode 100644 index 25d4288b1..000000000 --- a/pkg/core/notifier/providers/pushover/pushover_test.go +++ /dev/null @@ -1,62 +0,0 @@ -package pushover_test - -import ( - "context" - "flag" - "fmt" - "strings" - "testing" - - provider "github.com/certimate-go/certimate/pkg/core/notifier/providers/pushover" -) - -const ( - mockSubject = "test_subject" - mockMessage = "test_message" -) - -var ( - fToken string - fUser string -) - -func init() { - argsPrefix := "CERTIMATE_NOTIFIER_PUSHOVER_" - flag.StringVar(&fToken, argsPrefix+"TOKEN", "", "") - flag.StringVar(&fUser, argsPrefix+"USER", "", "") -} - -/* -Shell command to run this test: - - go test -v ./pushover_test.go -args \ - --CERTIMATE_NOTIFIER_PUSHOVER_TOKEN="your-pushover-token" \ - --CERTIMATE_NOTIFIER_PUSHOVER_USER="your-pushover-user" \ -*/ -func TestNotify(t *testing.T) { - flag.Parse() - - t.Run("Notify", func(t *testing.T) { - t.Log(strings.Join([]string{ - "args:", - fmt.Sprintf("TOKEN: %v", fToken), - }, "\n")) - - notifier, err := provider.NewNotifierProvider(&provider.NotifierProviderConfig{ - Token: fToken, - User: fUser, - }) - if err != nil { - t.Errorf("err: %+v", err) - return - } - - res, err := notifier.Notify(context.Background(), mockSubject, mockMessage) - if err != nil { - t.Errorf("err: %+v", err) - return - } - - t.Logf("ok: %v", res) - }) -} diff --git a/pkg/core/notifier/providers/pushplus/pushplus.go b/pkg/core/notifier/providers/pushplus/pushplus.go deleted file mode 100644 index 559603f72..000000000 --- a/pkg/core/notifier/providers/pushplus/pushplus.go +++ /dev/null @@ -1,79 +0,0 @@ -package pushplus - -import ( - "context" - "encoding/json" - "errors" - "fmt" - "log/slog" - - "github.com/go-resty/resty/v2" - - "github.com/certimate-go/certimate/pkg/core" -) - -type NotifierProviderConfig struct { - // PushPlus Token。 - Token string `json:"token"` -} - -type NotifierProvider struct { - config *NotifierProviderConfig - logger *slog.Logger - httpClient *resty.Client -} - -var _ core.Notifier = (*NotifierProvider)(nil) - -func NewNotifierProvider(config *NotifierProviderConfig) (*NotifierProvider, error) { - if config == nil { - return nil, errors.New("the configuration of the notifier provider is nil") - } - - client := resty.New() - - return &NotifierProvider{ - config: config, - logger: slog.Default(), - httpClient: client, - }, nil -} - -func (n *NotifierProvider) SetLogger(logger *slog.Logger) { - if logger == nil { - n.logger = slog.New(slog.DiscardHandler) - } else { - n.logger = logger - } -} - -func (n *NotifierProvider) Notify(ctx context.Context, subject string, message string) (*core.NotifyResult, error) { - // REF: https://pushplus.plus/doc/guide/api.html#%E4%B8%80%E3%80%81%E5%8F%91%E9%80%81%E6%B6%88%E6%81%AF%E6%8E%A5%E5%8F%A3 - req := n.httpClient.R(). - SetContext(ctx). - SetHeader("Content-Type", "application/json"). - SetHeader("User-Agent", "certimate"). - SetBody(map[string]any{ - "title": subject, - "content": message, - "token": n.config.Token, - }) - resp, err := req.Post("https://www.pushplus.plus/send") - if err != nil { - return nil, fmt.Errorf("pushplus api error: failed to send request: %w", err) - } else if resp.IsError() { - return nil, fmt.Errorf("pushplus api error: unexpected status code: %d, resp: %s", resp.StatusCode(), resp.String()) - } - - var errorResponse struct { - Code int `json:"code"` - Message string `json:"msg"` - } - if err := json.Unmarshal(resp.Body(), &errorResponse); err != nil { - return nil, fmt.Errorf("pushplus api error: failed to unmarshal response: %w", err) - } else if errorResponse.Code != 200 { - return nil, fmt.Errorf("pushplus api error: code='%d', message='%s'", errorResponse.Code, errorResponse.Message) - } - - return &core.NotifyResult{}, nil -} diff --git a/pkg/core/notifier/providers/pushplus/pushplus_test.go b/pkg/core/notifier/providers/pushplus/pushplus_test.go deleted file mode 100644 index 6fca9ccfd..000000000 --- a/pkg/core/notifier/providers/pushplus/pushplus_test.go +++ /dev/null @@ -1,56 +0,0 @@ -package pushplus_test - -import ( - "context" - "flag" - "fmt" - "strings" - "testing" - - provider "github.com/certimate-go/certimate/pkg/core/notifier/providers/pushplus" -) - -const ( - mockSubject = "test_subject" - mockMessage = "test_message" -) - -var fToken string - -func init() { - argsPrefix := "CERTIMATE_NOTIFIER_PUSHPLUS_" - flag.StringVar(&fToken, argsPrefix+"TOKEN", "", "") -} - -/* -Shell command to run this test: - - go test -v ./pushplus_test.go -args \ - --CERTIMATE_NOTIFIER_PUSHPLUS_TOKEN="your-pushplus-token" \ -*/ -func TestNotify(t *testing.T) { - flag.Parse() - - t.Run("Notify", func(t *testing.T) { - t.Log(strings.Join([]string{ - "args:", - fmt.Sprintf("TOKEN: %v", fToken), - }, "\n")) - - notifier, err := provider.NewNotifierProvider(&provider.NotifierProviderConfig{ - Token: fToken, - }) - if err != nil { - t.Errorf("err: %+v", err) - return - } - - res, err := notifier.Notify(context.Background(), mockSubject, mockMessage) - if err != nil { - t.Errorf("err: %+v", err) - return - } - - t.Logf("ok: %v", res) - }) -} diff --git a/pkg/core/notifier/providers/serverchan/serverchan.go b/pkg/core/notifier/providers/serverchan/serverchan.go deleted file mode 100644 index 20f7cdd7a..000000000 --- a/pkg/core/notifier/providers/serverchan/serverchan.go +++ /dev/null @@ -1,67 +0,0 @@ -package serverchan - -import ( - "context" - "errors" - "fmt" - "log/slog" - - "github.com/go-resty/resty/v2" - - "github.com/certimate-go/certimate/pkg/core" -) - -type NotifierProviderConfig struct { - // ServerChan 服务地址。 - ServerUrl string `json:"serverUrl"` -} - -type NotifierProvider struct { - config *NotifierProviderConfig - logger *slog.Logger - httpClient *resty.Client -} - -var _ core.Notifier = (*NotifierProvider)(nil) - -func NewNotifierProvider(config *NotifierProviderConfig) (*NotifierProvider, error) { - if config == nil { - return nil, errors.New("the configuration of the notifier provider is nil") - } - - client := resty.New() - - return &NotifierProvider{ - config: config, - logger: slog.Default(), - httpClient: client, - }, nil -} - -func (n *NotifierProvider) SetLogger(logger *slog.Logger) { - if logger == nil { - n.logger = slog.New(slog.DiscardHandler) - } else { - n.logger = logger - } -} - -func (n *NotifierProvider) Notify(ctx context.Context, subject string, message string) (*core.NotifyResult, error) { - // REF: https://sct.ftqq.com/ - req := n.httpClient.R(). - SetContext(ctx). - SetHeader("Content-Type", "application/json"). - SetHeader("User-Agent", "certimate"). - SetBody(map[string]any{ - "text": subject, - "desp": message, - }) - resp, err := req.Post(n.config.ServerUrl) - if err != nil { - return nil, fmt.Errorf("serverchan api error: failed to send request: %w", err) - } else if resp.IsError() { - return nil, fmt.Errorf("serverchan api error: unexpected status code: %d, resp: %s", resp.StatusCode(), resp.String()) - } - - return &core.NotifyResult{}, nil -} diff --git a/pkg/core/notifier/providers/serverchan/serverchan_test.go b/pkg/core/notifier/providers/serverchan/serverchan_test.go deleted file mode 100644 index 2ea4acaa6..000000000 --- a/pkg/core/notifier/providers/serverchan/serverchan_test.go +++ /dev/null @@ -1,57 +0,0 @@ -package serverchan_test - -import ( - "context" - "flag" - "fmt" - "strings" - "testing" - - provider "github.com/certimate-go/certimate/pkg/core/notifier/providers/serverchan" -) - -const ( - mockSubject = "test_subject" - mockMessage = "test_message" -) - -var fUrl string - -func init() { - argsPrefix := "CERTIMATE_NOTIFIER_SERVERCHAN_" - - flag.StringVar(&fUrl, argsPrefix+"URL", "", "") -} - -/* -Shell command to run this test: - - go test -v ./serverchan_test.go -args \ - --CERTIMATE_NOTIFIER_SERVERCHAN_URL="https://example.com/your-webhook-url" \ -*/ -func TestNotify(t *testing.T) { - flag.Parse() - - t.Run("Notify", func(t *testing.T) { - t.Log(strings.Join([]string{ - "args:", - fmt.Sprintf("URL: %v", fUrl), - }, "\n")) - - notifier, err := provider.NewNotifierProvider(&provider.NotifierProviderConfig{ - ServerUrl: fUrl, - }) - if err != nil { - t.Errorf("err: %+v", err) - return - } - - res, err := notifier.Notify(context.Background(), mockSubject, mockMessage) - if err != nil { - t.Errorf("err: %+v", err) - return - } - - t.Logf("ok: %v", res) - }) -} diff --git a/pkg/core/notifier/providers/slackbot/slackbot.go b/pkg/core/notifier/providers/slackbot/slackbot.go index f8706cd4c..a332f9fd7 100644 --- a/pkg/core/notifier/providers/slackbot/slackbot.go +++ b/pkg/core/notifier/providers/slackbot/slackbot.go @@ -31,7 +31,10 @@ func NewNotifierProvider(config *NotifierProviderConfig) (*NotifierProvider, err return nil, errors.New("the configuration of the notifier provider is nil") } - client := resty.New() + client := resty.New(). + SetHeader("Authorization", fmt.Sprintf("Bearer %s", config.BotToken)). + SetHeader("Content-Type", "application/json"). + SetHeader("User-Agent", "certimate") return &NotifierProvider{ config: config, @@ -52,9 +55,6 @@ func (n *NotifierProvider) Notify(ctx context.Context, subject string, message s // REF: https://docs.slack.dev/messaging/sending-and-scheduling-messages#publishing req := n.httpClient.R(). SetContext(ctx). - SetHeader("Authorization", "Bearer "+n.config.BotToken). - SetHeader("Content-Type", "application/json"). - SetHeader("User-Agent", "certimate"). SetBody(map[string]any{ "token": n.config.BotToken, "channel": n.config.ChannelId, diff --git a/pkg/core/notifier/providers/telegrambot/telegrambot.go b/pkg/core/notifier/providers/telegrambot/telegrambot.go index a2c077eb1..5b3f50833 100644 --- a/pkg/core/notifier/providers/telegrambot/telegrambot.go +++ b/pkg/core/notifier/providers/telegrambot/telegrambot.go @@ -31,7 +31,9 @@ func NewNotifierProvider(config *NotifierProviderConfig) (*NotifierProvider, err return nil, errors.New("the configuration of the notifier provider is nil") } - client := resty.New() + client := resty.New(). + SetHeader("Content-Type", "application/json"). + SetHeader("User-Agent", "certimate") return &NotifierProvider{ config: config, @@ -52,8 +54,6 @@ func (n *NotifierProvider) Notify(ctx context.Context, subject string, message s // REF: https://core.telegram.org/bots/api#sendmessage req := n.httpClient.R(). SetContext(ctx). - SetHeader("Content-Type", "application/json"). - SetHeader("User-Agent", "certimate"). SetBody(map[string]any{ "chat_id": n.config.ChatId, "text": subject + "\n" + message, diff --git a/pkg/core/notifier/providers/wecombot/wecombot.go b/pkg/core/notifier/providers/wecombot/wecombot.go index 991168b4a..4aa5ce9ea 100644 --- a/pkg/core/notifier/providers/wecombot/wecombot.go +++ b/pkg/core/notifier/providers/wecombot/wecombot.go @@ -2,9 +2,11 @@ package wecombot import ( "context" + "encoding/json" "errors" "fmt" "log/slog" + "net/url" "github.com/go-resty/resty/v2" @@ -29,7 +31,9 @@ func NewNotifierProvider(config *NotifierProviderConfig) (*NotifierProvider, err return nil, errors.New("the configuration of the notifier provider is nil") } - client := resty.New() + client := resty.New(). + SetHeader("Content-Type", "application/json"). + SetHeader("User-Agent", "certimate") return &NotifierProvider{ config: config, @@ -47,22 +51,38 @@ func (n *NotifierProvider) SetLogger(logger *slog.Logger) { } func (n *NotifierProvider) Notify(ctx context.Context, subject string, message string) (*core.NotifyResult, error) { + webhookUrl, err := url.Parse(n.config.WebhookUrl) + if err != nil { + return nil, fmt.Errorf("dingtalk api error: invalid webhook url: %w", err) + } else { + const hostname = "qyapi.weixin.qq.com" + if webhookUrl.Hostname() != hostname { + n.logger.Warn(fmt.Sprintf("the webhook url hostname is not '%s', please make sure it is correct", hostname)) + } + } + // REF: https://developer.work.weixin.qq.com/document/path/91770 + var result struct { + ErrorCode int `json:"errcode"` + ErrorMessage string `json:"errmsg"` + } req := n.httpClient.R(). SetContext(ctx). - SetHeader("Content-Type", "application/json"). - SetHeader("User-Agent", "certimate"). SetBody(map[string]any{ "msgtype": "text", "text": map[string]string{ "content": subject + "\n\n" + message, }, }) - resp, err := req.Post(n.config.WebhookUrl) + resp, err := req.Post(webhookUrl.String()) if err != nil { return nil, fmt.Errorf("wecom api error: failed to send request: %w", err) } else if resp.IsError() { return nil, fmt.Errorf("wecom api error: unexpected status code: %d, resp: %s", resp.StatusCode(), resp.String()) + } else if err := json.Unmarshal(resp.Body(), &result); err != nil { + return nil, fmt.Errorf("wecom api error: failed to unmarshal response: %w", err) + } else if result.ErrorCode != 0 { + return nil, fmt.Errorf("wecom api error: errcode='%d', errmsg='%s'", result.ErrorCode, result.ErrorMessage) } return &core.NotifyResult{}, nil diff --git a/pkg/core/ssl-deployer/providers/wangsu-cdnpro/wangsu_cdnpro.go b/pkg/core/ssl-deployer/providers/wangsu-cdnpro/wangsu_cdnpro.go index 7bd651291..4c06d5a42 100644 --- a/pkg/core/ssl-deployer/providers/wangsu-cdnpro/wangsu_cdnpro.go +++ b/pkg/core/ssl-deployer/providers/wangsu-cdnpro/wangsu_cdnpro.go @@ -232,9 +232,9 @@ func encryptPrivateKey(privkeyPEM string, apiKey string, timestamp int64) (strin date := time.Unix(timestamp, 0).UTC() dateStr := date.Format("Mon, 02 Jan 2006 15:04:05 GMT") - mac := hmac.New(sha256.New, []byte(apiKey)) - mac.Write([]byte(dateStr)) - aesivkey := mac.Sum(nil) + h := hmac.New(sha256.New, []byte(apiKey)) + h.Write([]byte(dateStr)) + aesivkey := h.Sum(nil) aesivkeyHex := hex.EncodeToString(aesivkey) if len(aesivkeyHex) != 64 {