Skip to content

Commit 48a327b

Browse files
csg-pr-botDev Agentruibo.qin
authored
feat: allow pluggable cloud SMS provider (#980)
* feat(notification): Added implementation of SMS notification channel Implement the SMS notification channel, including the definition of the SMS service interface and the channel sending logic * refactor(notification/sms): delete unuse code --------- Co-authored-by: Dev Agent <dev-agent@example.com> Co-authored-by: ruibo.qin <rb.qin@opencsg.com>
1 parent c7153e0 commit 48a327b

12 files changed

Lines changed: 676 additions & 42 deletions

File tree

common/config/config.go

Lines changed: 39 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -449,38 +449,47 @@ type Config struct {
449449
}
450450

451451
Notification struct {
452-
Port int `env:"STARHUB_SERVER_NOTIFIER_PORT" default:"8095"`
453-
Host string `env:"STARHUB_SERVER_NOTIFIER_HOST" default:"http://localhost"`
454-
MailerHost string `env:"STARHUB_SERVER_MAILER_HOST" default:"smtp.qiye.aliyun.com"`
455-
MailerPort int `env:"STARHUB_SERVER_MAILER_PORT" default:"465"`
456-
MailerUsername string `env:"STARHUB_SERVER_MAILER_USERNAME" default:""`
457-
MailerPassword string `env:"STARHUB_SERVER_MAILER_PASSWORD" default:""`
458-
DirectMailEnabled bool `env:"STARHUB_SERVER_DIRECT_MAIL_ENABLED" default:"false"`
459-
DirectMailAccessKeyID string `env:"STARHUB_SERVER_DIRECT_MAIL_ACCESS_KEY_ID" default:""`
460-
DirectMailAccessKeySecret string `env:"STARHUB_SERVER_DIRECT_MAIL_ACCESS_KEY_SECRET" default:""`
461-
DirectMailEndpoint string `env:"STARHUB_SERVER_DIRECT_MAIL_ENDPOINT" default:"dm.aliyuncs.com"`
462-
DirectMailRegionId string `env:"STARHUB_SERVER_DIRECT_MAIL_REGION_ID" default:"cn-hangzhou"`
463-
MailerRechargeAdmin string `env:"STARHUB_SERVER_MAILER_RECHARGE_ADMIN" default:"contact@opencsg.com"`
464-
MailerWeeklyRechargesMail string `env:"STARHUB_SERVER_MAILER_WEEKLY_RECHARGES_MAIL" default:"reconcile@opencsg.com"`
465-
EmailInvoiceCreatedReceiver string `env:"STARHUB_SERVER_EMAIL_INVOICE_CREATED_RECEIVER" default:"contact@opencsg.com"`
466-
RepoSyncTimezone string `env:"STARHUB_SERVER_REPO_SYNC_TIMEZONE" default:"Asia/Shanghai"`
467-
RepoSyncChatID string `env:"STARHUB_SERVER_REPO_SYNC_CHAT_ID" default:""`
468-
NotificationRetryCount int `env:"STARHUB_SERVER_NOTIFIER_NOTIFICATION_RETRY_COUNT" default:"3"`
469-
BroadcastUserPageSize int `env:"STARHUB_SERVER_NOTIFIER_BROADCAST_USER_PAGE_SIZE" default:"100"`
470-
BroadcastEmailPageSize int `env:"STARHUB_SERVER_NOTIFIER_BROADCAST_EMAIL_PAGE_SIZE" default:"100"`
471-
MsgDispatcherCount int `env:"STARHUB_SERVER_NOTIFIER_MSG_DISPATCHER_COUNT" default:"20"`
472-
HighPriorityMsgBufferSize int `env:"STARHUB_SERVER_NOTIFIER_HIGH_PRIORITY_MSG_BUFFER_SIZE" default:"100"`
473-
NormalPriorityMsgBufferSize int `env:"STARHUB_SERVER_NOTIFIER_NORMAL_PRIORITY_MSG_BUFFER_SIZE" default:"50"`
474-
HighPriorityMsgAckWait int `env:"STARHUB_SERVER_NOTIFIER_HIGH_PRIORITY_MSG_ACK_WAIT" default:"60"`
475-
NormalPriorityMsgAckWait int `env:"STARHUB_SERVER_NOTIFIER_NORMAL_PRIORITY_MSG_ACK_WAIT" default:"60"`
476-
HighPriorityMsgMaxDeliver int `env:"STARHUB_SERVER_NOTIFIER_HIGH_PRIORITY_MSG_MAX_DELIVER" default:"6"`
477-
NormalPriorityMsgMaxDeliver int `env:"STARHUB_SERVER_NOTIFIER_NORMAL_PRIORITY_MSG_MAX_DELIVER" default:"6"`
478-
DeduplicateWindow int `env:"STARHUB_SERVER_NOTIFIER_DEDUPLICATE_WINDOW" default:"5"` // 5 seconds
452+
Port int `env:"STARHUB_SERVER_NOTIFIER_PORT" default:"8095"`
453+
Host string `env:"STARHUB_SERVER_NOTIFIER_HOST" default:"http://localhost"`
454+
MailerHost string `env:"STARHUB_SERVER_MAILER_HOST" default:"smtp.qiye.aliyun.com"`
455+
MailerPort int `env:"STARHUB_SERVER_MAILER_PORT" default:"465"`
456+
MailerUsername string `env:"STARHUB_SERVER_MAILER_USERNAME" default:""`
457+
MailerPassword string `env:"STARHUB_SERVER_MAILER_PASSWORD" default:""`
458+
DirectMailEnabled bool `env:"STARHUB_SERVER_DIRECT_MAIL_ENABLED" default:"false"`
459+
DirectMailAccessKeyID string `env:"STARHUB_SERVER_DIRECT_MAIL_ACCESS_KEY_ID" default:""`
460+
DirectMailAccessKeySecret string `env:"STARHUB_SERVER_DIRECT_MAIL_ACCESS_KEY_SECRET" default:""`
461+
DirectMailEndpoint string `env:"STARHUB_SERVER_DIRECT_MAIL_ENDPOINT" default:"dm.aliyuncs.com"`
462+
DirectMailRegionId string `env:"STARHUB_SERVER_DIRECT_MAIL_REGION_ID" default:"cn-hangzhou"`
463+
MailerRechargeAdmin string `env:"STARHUB_SERVER_MAILER_RECHARGE_ADMIN" default:"contact@opencsg.com"`
464+
MailerWeeklyRechargesMail string `env:"STARHUB_SERVER_MAILER_WEEKLY_RECHARGES_MAIL" default:"reconcile@opencsg.com"`
465+
EmailInvoiceCreatedReceiver string `env:"STARHUB_SERVER_EMAIL_INVOICE_CREATED_RECEIVER" default:"contact@opencsg.com"`
466+
RepoSyncTimezone string `env:"STARHUB_SERVER_REPO_SYNC_TIMEZONE" default:"Asia/Shanghai"`
467+
RepoSyncChatID string `env:"STARHUB_SERVER_REPO_SYNC_CHAT_ID" default:""`
468+
NotificationRetryCount int `env:"STARHUB_SERVER_NOTIFIER_NOTIFICATION_RETRY_COUNT" default:"3"`
469+
BroadcastUserPageSize int `env:"STARHUB_SERVER_NOTIFIER_BROADCAST_USER_PAGE_SIZE" default:"100"`
470+
BroadcastEmailPageSize int `env:"STARHUB_SERVER_NOTIFIER_BROADCAST_EMAIL_PAGE_SIZE" default:"100"`
471+
MsgDispatcherCount int `env:"STARHUB_SERVER_NOTIFIER_MSG_DISPATCHER_COUNT" default:"20"`
472+
HighPriorityMsgBufferSize int `env:"STARHUB_SERVER_NOTIFIER_HIGH_PRIORITY_MSG_BUFFER_SIZE" default:"100"`
473+
NormalPriorityMsgBufferSize int `env:"STARHUB_SERVER_NOTIFIER_NORMAL_PRIORITY_MSG_BUFFER_SIZE" default:"50"`
474+
HighPriorityMsgAckWait int `env:"STARHUB_SERVER_NOTIFIER_HIGH_PRIORITY_MSG_ACK_WAIT" default:"60"`
475+
NormalPriorityMsgAckWait int `env:"STARHUB_SERVER_NOTIFIER_NORMAL_PRIORITY_MSG_ACK_WAIT" default:"60"`
476+
HighPriorityMsgMaxDeliver int `env:"STARHUB_SERVER_NOTIFIER_HIGH_PRIORITY_MSG_MAX_DELIVER" default:"6"`
477+
NormalPriorityMsgMaxDeliver int `env:"STARHUB_SERVER_NOTIFIER_NORMAL_PRIORITY_MSG_MAX_DELIVER" default:"6"`
478+
DeduplicateWindow int `env:"STARHUB_SERVER_NOTIFIER_DEDUPLICATE_WINDOW" default:"5"` // 5 seconds
479+
480+
// SMS Provider Configuration
481+
SMSProvider string `env:"STARHUB_SERVER_NOTIFIER_SMS_PROVIDER" default:"aliyun"` // aliyun, tencent, huawei
482+
479483
SMSSign string `env:"STARHUB_SERVER_NOTIFIER_SMS_SIGN" default:""`
480-
SMSAccessKeyID string `env:"STARHUB_SERVER_NOTIFIER_SMS_ACCESS_KEY_ID" default:""`
481-
SMSAccessKeySecret string `env:"STARHUB_SERVER_NOTIFIER_SMS_ACCESS_KEY_SECRET" default:""`
482484
SMSTemplateCodeForVerifyCodeCN string `env:"STARHUB_SERVER_NOTIFIER_SMS_TEMPLATE_CODE_FOR_VERIFY_CODE_CN" default:""`
483485
SMSTemplateCodeForVerifyCodeOversea string `env:"STARHUB_SERVER_NOTIFIER_SMS_TEMPLATE_CODE_FOR_VERIFY_CODE_OVERSEA" default:""`
486+
487+
// Alibaba Cloud SMS Configuration (Backward Compatibility)
488+
SMSAccessKeyID string `env:"STARHUB_SERVER_NOTIFIER_SMS_ACCESS_KEY_ID"`
489+
SMSAccessKeySecret string `env:"STARHUB_SERVER_NOTIFIER_SMS_ACCESS_KEY_SECRET"`
490+
SMSRegion string `env:"STARHUB_SERVER_NOTIFIER_SMS_REGION" default:"ap-guangzhou"`
491+
SMSEndpoint string `env:"STARHUB_SERVER_NOTIFIER_SMS_ENDPOINT"`
492+
SMSAppID string `env:"STARHUB_SERVER_NOTIFIER_SMS_APP_ID"` // Tencent SdkAppId / Huawei ProjectId
484493
}
485494

486495
Prometheus struct {
@@ -648,6 +657,7 @@ func loadConfig() (*Config, error) {
648657
if len(cfg.UniqueServiceName) < 1 {
649658
cfg.UniqueServiceName = genServiceName()
650659
}
660+
651661
return cfg, err
652662
}
653663

common/types/notification.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -340,10 +340,12 @@ type EmailWeeklyRechargesNotification struct {
340340
}
341341

342342
type SMSReq struct {
343-
PhoneNumbers []string `json:"phone_numbers"`
344-
SignName string `json:"sign_name"`
345-
TemplateCode string `json:"template_code"`
346-
TemplateParam string `json:"template_param"`
343+
PhoneNumbers []string `json:"phone_numbers"`
344+
SignName string `json:"sign_name"`
345+
TemplateCode string `json:"template_code"`
346+
347+
Params []string `json:"params"`
348+
MapParams map[string]string `json:"map_params"`
347349
}
348350

349351
type EmailInvoiceCreatedNotification struct {

go.mod

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ require (
3131
github.com/golang/mock v1.7.0-rc.1
3232
github.com/google/wire v0.6.0
3333
github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674
34+
github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.190
3435
github.com/jarcoal/httpmock v1.3.1
3536
github.com/larksuite/oapi-sdk-go/v3 v3.4.18
3637
github.com/looplab/fsm v1.0.3
@@ -61,6 +62,8 @@ require (
6162
github.com/swaggo/files v1.0.1
6263
github.com/swaggo/gin-swagger v1.6.0
6364
github.com/swaggo/swag v1.16.2
65+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.3.69
66+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sms v1.3.57
6467
github.com/testcontainers/testcontainers-go v0.40.0
6568
github.com/testcontainers/testcontainers-go/modules/postgres v0.40.0
6669
github.com/tidwall/sjson v1.2.5
@@ -174,6 +177,7 @@ require (
174177
github.com/go-pay/xlog v0.0.3 // indirect
175178
github.com/go-pay/xtime v0.0.2 // indirect
176179
github.com/go-sql-driver/mysql v1.9.1 // indirect
180+
github.com/goccy/go-yaml v1.9.8 // indirect
177181
github.com/gocql/gocql v1.7.0 // indirect
178182
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect
179183
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
@@ -267,6 +271,7 @@ require (
267271
github.com/yusufpapurcu/wmi v1.2.4 // indirect
268272
gitlab.com/gitlab-org/go/reopen v1.0.0 // indirect
269273
gitlab.com/gitlab-org/labkit v1.21.2 // indirect
274+
go.mongodb.org/mongo-driver v1.13.1 // indirect
270275
go.opencensus.io v0.24.0 // indirect
271276
go.opentelemetry.io/auto/sdk v1.2.1 // indirect
272277
go.opentelemetry.io/contrib/detectors/gcp v1.39.0 // indirect
@@ -352,7 +357,7 @@ require (
352357
github.com/jinzhu/inflection v1.0.0 // indirect
353358
github.com/jmespath/go-jmespath v0.4.1-0.20220621161143-b0104c826a24 // indirect
354359
github.com/josharian/intern v1.0.0 // indirect
355-
github.com/json-iterator/go v1.1.12 // indirect
360+
github.com/json-iterator/go v1.1.13-0.20220915233716-71ac16282d12 // indirect
356361
github.com/klauspost/compress v1.18.0 // indirect
357362
github.com/klauspost/cpuid/v2 v2.2.9 // indirect
358363
github.com/leodido/go-urn v1.4.0 // indirect

0 commit comments

Comments
 (0)