diff --git a/channel/bark.go b/channel/bark.go
new file mode 100644
index 0000000..9716894
--- /dev/null
+++ b/channel/bark.go
@@ -0,0 +1,39 @@
+package channel
+
+import (
+ "encoding/json"
+ "errors"
+ "fmt"
+ "message-pusher/model"
+ "net/http"
+)
+
+type barkMessageResponse struct {
+ Code int `json:"code"`
+ Message string `json:"message"`
+}
+
+func SendBarkMessage(message *Message, user *model.User) error {
+ if user.BarkServer == "" || user.BarkSecret == "" {
+ return errors.New("未配置 Bark 消息推送方式")
+ }
+ url := ""
+ if message.Title != "" {
+ url = fmt.Sprintf("%s/%s/%s/%s", user.BarkServer, user.BarkSecret, message.Title, message.Description)
+ } else {
+ url = fmt.Sprintf("%s/%s/%s", user.BarkServer, user.BarkSecret, message.Description)
+ }
+ resp, err := http.Get(url)
+ if err != nil {
+ return err
+ }
+ var res barkMessageResponse
+ err = json.NewDecoder(resp.Body).Decode(&res)
+ if err != nil {
+ return err
+ }
+ if res.Code != 200 {
+ return errors.New(res.Message)
+ }
+ return nil
+}
diff --git a/channel/main.go b/channel/main.go
index af22929..77153e5 100644
--- a/channel/main.go
+++ b/channel/main.go
@@ -12,6 +12,7 @@ const (
TypeLark = "lark"
TypeDing = "ding"
TypeTelegram = "telegram"
+ TypeBark = "bark"
)
type Message struct {
@@ -36,6 +37,8 @@ func (message *Message) Send(user *model.User) error {
return SendLarkMessage(message, user)
case TypeDing:
return SendDingMessage(message, user)
+ case TypeBark:
+ return SendBarkMessage(message, user)
default:
return errors.New("不支持的消息通道:" + message.Channel)
}
diff --git a/controller/user.go b/controller/user.go
index 61b17fa..bea72e5 100644
--- a/controller/user.go
+++ b/controller/user.go
@@ -413,6 +413,8 @@ func UpdateSelf(c *gin.Context) {
LarkWebhookSecret: user.LarkWebhookSecret,
DingWebhookURL: user.DingWebhookURL,
DingWebhookSecret: user.DingWebhookSecret,
+ BarkServer: user.BarkServer,
+ BarkSecret: user.BarkSecret,
}
channel.TokenStoreUpdateUser(&cleanUser, originUser)
diff --git a/model/user.go b/model/user.go
index ac0f326..a6dc7dc 100644
--- a/model/user.go
+++ b/model/user.go
@@ -35,6 +35,8 @@ type User struct {
LarkWebhookSecret string `json:"lark_webhook_secret"`
DingWebhookURL string `json:"ding_webhook_url"`
DingWebhookSecret string `json:"ding_webhook_secret"`
+ BarkServer string `json:"bark_server"`
+ BarkSecret string `json:"bark_secret"`
}
func GetMaxUserId() int {
@@ -68,8 +70,7 @@ func GetUserById(id int, selectAll bool) (*User, error) {
"channel", "token",
"wechat_test_account_id", "wechat_test_account_template_id", "wechat_test_account_open_id",
"wechat_corp_account_id", "wechat_corp_account_agent_id", "wechat_corp_account_user_id", "wechat_corp_account_client_type",
- "lark_webhook_url",
- "ding_webhook_url",
+ "lark_webhook_url", "ding_webhook_url", "bark_server",
}).First(&user, "id = ?", id).Error
}
return &user, err
diff --git a/web/src/components/PushSetting.js b/web/src/components/PushSetting.js
index dc0a3f7..fb2ab5e 100644
--- a/web/src/components/PushSetting.js
+++ b/web/src/components/PushSetting.js
@@ -29,6 +29,8 @@ const PushSetting = () => {
lark_webhook_secret: '',
ding_webhook_url: '',
ding_webhook_secret: '',
+ bark_server: '',
+ bark_secret: '',
});
let [loading, setLoading] = useState(false);
@@ -49,6 +51,9 @@ const PushSetting = () => {
if (data.token === ' ') {
data.token = '';
}
+ if (data.bark_server === '') {
+ data.bark_server = 'https://api.day.app';
+ }
setInputs(data);
} else {
showError(message);
@@ -96,6 +101,10 @@ const PushSetting = () => {
data.ding_webhook_url = inputs.ding_webhook_url;
data.ding_webhook_secret = inputs.ding_webhook_secret;
break;
+ case 'bark':
+ data.bark_server = inputs.bark_server;
+ data.bark_secret = inputs.bark_secret;
+ break;
default:
showError(`无效的参数:${which}`);
return;
@@ -137,6 +146,7 @@ const PushSetting = () => {
{ key: 'corp', text: '企业微信', value: 'corp' },
{ key: 'lark', text: '飞书群机器人', value: 'lark' },
{ key: 'ding', text: '钉钉群机器人', value: 'ding' },
+ { key: 'bark', text: 'Bark', value: 'bark' },
]}
value={inputs.channel}
onChange={handleInputChange}
@@ -375,6 +385,36 @@ const PushSetting = () => {
保存
+