diff --git a/back/data/notify.ts b/back/data/notify.ts index 547a8446..3a213337 100644 --- a/back/data/notify.ts +++ b/back/data/notify.ts @@ -150,6 +150,9 @@ export class NtfyNotification extends NotificationBaseInfo { public ntfyUrl = ''; public ntfyTopic = ''; public ntfyPriority = ''; + public ntfyToken = ''; + public ntfyUsername = ''; + public ntfyPassword = ''; } export class WxPusherBotNotification extends NotificationBaseInfo { diff --git a/back/services/notify.ts b/back/services/notify.ts index 9aebe5e6..742c030e 100644 --- a/back/services/notify.ts +++ b/back/services/notify.ts @@ -623,7 +623,7 @@ export default class NotificationService { } private async ntfy() { - const { ntfyUrl, ntfyTopic, ntfyPriority } = this.params; + const { ntfyUrl, ntfyTopic, ntfyPriority, ntfyToken, ntfyUsername, ntfyPassword } = this.params; // 编码函数 const encodeRfc2047 = (text: string, charset: string = 'UTF-8'): string => { const encodedText = Buffer.from(text).toString('base64'); @@ -636,10 +636,16 @@ export default class NotificationService { { ...this.gotOption, body: `${this.content}`, - headers: { Title: encodedTitle, Priority: `${ntfyPriority || '3'}` }, + headers: { Title: encodedTitle, Priority: `${ntfyPriority || '3'}`, Icon: 'https://qn.whyour.cn/logo.png'}, method: 'POST', }, ); + if (ntfyToken) { + res.headers['Authorization'] = `Bearer ${ntfyToken}`; + } else if (ntfyUsername && ntfyPassword) { + res.headers['Authorization'] = `Basic ${Buffer.from(`${ntfyUsername}:${ntfyPassword}`).toString('base64')}`; + } + if (res.statusCode === 200) { return true; } else { diff --git a/sample/config.sample.sh b/sample/config.sample.sh index 1249ae6f..45360682 100644 --- a/sample/config.sample.sh +++ b/sample/config.sample.sh @@ -226,9 +226,15 @@ export QMSG_TYPE="" ## ntfy_url 填写ntfy地址,如https://ntfy.sh ## ntfy_topic 填写ntfy的消息应用topic ## ntfy_priority 填写推送消息优先级,默认为3 +## ntfy_token 填写推送token,可选 +## ntfy_username 填写推送用户名称,可选 +## ntfy_password 填写推送用户密码,可选 export NTFY_URL="" export NTFY_TOPIC="" export NTFY_PRIORITY="3" +export NTFY_TOKEN="" +export NTFY_USERNAME="" +export NTFY_PASSWORD="" ## 21. wxPusher ## 官方文档: https://wxpusher.zjiecode.com/docs/ diff --git a/sample/notify.js b/sample/notify.js index 5e870598..a69cf243 100644 --- a/sample/notify.js +++ b/sample/notify.js @@ -140,6 +140,9 @@ const push_config = { NTFY_URL: '', // ntfy地址,如https://ntfy.sh,默认为https://ntfy.sh NTFY_TOPIC: '', // ntfy的消息应用topic NTFY_PRIORITY: '3', // 推送消息优先级,默认为3 + NTFY_TOKEN: '', // 推送token,可选 + NTFY_USERNAME: '', // 推送用户名称,可选 + NTFY_PASSWORD: '', // 推送用户密码,可选 // 官方文档: https://wxpusher.zjiecode.com/docs/ // 管理后台: https://wxpusher.zjiecode.com/admin/ @@ -1258,7 +1261,7 @@ function ntfyNotify(text, desp) { } return new Promise((resolve) => { - const { NTFY_URL, NTFY_TOPIC, NTFY_PRIORITY } = push_config; + const { NTFY_URL, NTFY_TOPIC, NTFY_PRIORITY, NTFY_TOKEN, NTFY_USERNAME, NTFY_PASSWORD } = push_config; if (NTFY_TOPIC) { const options = { url: `${NTFY_URL || 'https://ntfy.sh'}/${NTFY_TOPIC}`, @@ -1266,9 +1269,16 @@ function ntfyNotify(text, desp) { headers: { Title: `${encodeRFC2047(text)}`, Priority: NTFY_PRIORITY || '3', + Icon: 'https://qn.whyour.cn/logo.png', }, timeout, }; + if (NTFY_TOKEN) { + options.headers['Authorization'] = `Bearer ${NTFY_TOKEN}`; + } else if (NTFY_USERNAME && NTFY_PASSWORD) { + options.headers['Authorization'] = `Basic ${Buffer.from(`${NTFY_USERNAME}:${NTFY_PASSWORD}`).toString('base64')}`; + } + $.post(options, (err, resp, data) => { try { if (err) { diff --git a/sample/notify.py b/sample/notify.py index e62d4218..bced587a 100644 --- a/sample/notify.py +++ b/sample/notify.py @@ -126,6 +126,9 @@ push_config = { 'NTFY_URL': '', # ntfy地址,如https://ntfy.sh 'NTFY_TOPIC': '', # ntfy的消息应用topic 'NTFY_PRIORITY':'3', # 推送消息优先级,默认为3 + 'NTFY_TOKEN': '', # 推送token,可选 + 'NTFY_USERNAME': '', # 推送用户名称,可选 + 'NTFY_PASSWORD': '', # 推送用户密码,可选 'WXPUSHER_APP_TOKEN': '', # wxpusher 的 appToken 官方文档: https://wxpusher.zjiecode.com/docs/ 管理后台: https://wxpusher.zjiecode.com/admin/ 'WXPUSHER_TOPIC_IDS': '', # wxpusher 的 主题ID,多个用英文分号;分隔 topic_ids 与 uids 至少配置一个才行 @@ -806,7 +809,13 @@ def ntfy(title: str, content: str) -> None: encoded_title = encode_rfc2047(title) data = content.encode(encoding="utf-8") - headers = {"Title": encoded_title, "Priority": priority} # 使用编码后的 title + headers = {"Title": encoded_title, "Priority": priority, "Icon": "https://qn.whyour.cn/logo.png"} # 使用编码后的 title + if (push_config.get("NTFY_TOKEN")) { + headers['Authorization'] = "Bearer " + push_config.get("NTFY_TOKEN") + } else if (push_config.get("NTFY_USERNAME") and push_config.get("NTFY_PASSWORD")) { + authStr = push_config.get("NTFY_USERNAME") + ":" + push_config.get("NTFY_PASSWORD") + headers['Authorization'] = "Basic " + base64.b64encode(authStr.encode('utf-8')).decode('utf-8') + } url = push_config.get("NTFY_URL") + "/" + push_config.get("NTFY_TOPIC") response = requests.post(url, data=data, headers=headers) diff --git a/src/locales/en-US.json b/src/locales/en-US.json index 353b0df9..e63effe3 100644 --- a/src/locales/en-US.json +++ b/src/locales/en-US.json @@ -396,6 +396,9 @@ "自建的PushMeServer消息接口地址,例如:http://127.0.0.1:3010,不填则使用官方消息接口": "The self built PushMeServer message interface address, for example: http://127.0.0.1:3010 If left blank, use the official message interface", "ntfy的url地址,例如 https://ntfy.sh": "The URL address of ntfy, for example, https://ntfy.sh.", "ntfy的消息应用topic": "The topic for ntfy's messaging application.", + "ntfy的消息应用token": "The token for ntfy's messaging application, see https://docs.ntfy.sh/config/#access-tokens", + "ntfy的消息应用用户名": "The username for ntfy's messaging application, see https://docs.ntfy.sh/config/#users-and-roles", + "ntfy的消息应用密码": "The password for ntfy's messaging application, see https://docs.ntfy.sh/config/#users-and-roles", "wxPusherBot的appToken": "wxPusherBot's appToken, obtain according to docs https://wxpusher.zjiecode.com/docs/", "wxPusherBot的topicIds": "wxPusherBot's topicIds, at least one of topicIds or uids must be configured", "wxPusherBot的uids": "wxPusherBot's uids, at least one of topicIds or uids must be configured", diff --git a/src/locales/zh-CN.json b/src/locales/zh-CN.json index 0a178572..502f0c89 100644 --- a/src/locales/zh-CN.json +++ b/src/locales/zh-CN.json @@ -396,6 +396,9 @@ "自建的PushMeServer消息接口地址,例如:http://127.0.0.1:3010,不填则使用官方消息接口": "自建的PushMeServer消息接口地址,例如:http://127.0.0.1:3010,不填则使用官方消息接口", "ntfy的url地址,例如 https://ntfy.sh": "ntfy的url地址,例如 https://ntfy.sh", "ntfy的消息应用topic": "ntfy的消息应用topic", + "ntfy的消息应用token": "ntfy的消息应用token,参考 https://docs.ntfy.sh/config/#access-tokens", + "ntfy的消息应用用户名": "ntfy的消息应用用户名,参考 https://docs.ntfy.sh/config/#users-and-roles", + "ntfy的消息应用密码": "ntfy的消息应用密码,参考 https://docs.ntfy.sh/config/#users-and-roles", "wxPusherBot的appToken": "wxPusherBot的appToken, 按照文档获取 https://wxpusher.zjiecode.com/docs/", "wxPusherBot的topicIds": "wxPusherBot的topicIds, topicIds 和 uids 至少配置一个才行", "wxPusherBot的uids": "wxPusherBot的uids, topicIds 和 uids 至少配置一个才行", @@ -508,4 +511,3 @@ "当前文件未保存,确认离开吗": "当前文件未保存,确认离开吗", "收件邮箱地址,多个分号分隔,默认发送给发件邮箱地址": "收件邮箱地址,多个分号分隔,默认发送给发件邮箱地址" } - \ No newline at end of file diff --git a/src/utils/config.ts b/src/utils/config.ts index 179710a2..e2909a39 100644 --- a/src/utils/config.ts +++ b/src/utils/config.ts @@ -132,6 +132,9 @@ export default { required: true, }, { label: 'ntfyPriority', tip: intl.get('推送消息的优先级') }, + { label: 'ntfyToken', tip: intl.get('ntfy的消息应用token') }, + { label: 'ntfyUsername', tip: intl.get('ntfy的消息应用用户名') }, + { label: 'ntfyPassword', tip: intl.get('ntfy的消息应用密码') }, ], chat: [ {