feat:ntfy增加可选的认证

This commit is contained in:
yilee 2025-06-02 10:38:18 +08:00
parent 47c194c1f4
commit f59e74f029
8 changed files with 47 additions and 5 deletions

View File

@ -150,6 +150,9 @@ export class NtfyNotification extends NotificationBaseInfo {
public ntfyUrl = ''; public ntfyUrl = '';
public ntfyTopic = ''; public ntfyTopic = '';
public ntfyPriority = ''; public ntfyPriority = '';
public ntfyToken = '';
public ntfyUsername = '';
public ntfyPassword = '';
} }
export class WxPusherBotNotification extends NotificationBaseInfo { export class WxPusherBotNotification extends NotificationBaseInfo {

View File

@ -623,7 +623,7 @@ export default class NotificationService {
} }
private async ntfy() { 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 encodeRfc2047 = (text: string, charset: string = 'UTF-8'): string => {
const encodedText = Buffer.from(text).toString('base64'); const encodedText = Buffer.from(text).toString('base64');
@ -636,10 +636,16 @@ export default class NotificationService {
{ {
...this.gotOption, ...this.gotOption,
body: `${this.content}`, body: `${this.content}`,
headers: { Title: encodedTitle, Priority: `${ntfyPriority || '3'}` }, headers: { Title: encodedTitle, Priority: `${ntfyPriority || '3'}`, Icon: 'https://qn.whyour.cn/logo.png'},
method: 'POST', 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) { if (res.statusCode === 200) {
return true; return true;
} else { } else {

View File

@ -226,9 +226,15 @@ export QMSG_TYPE=""
## ntfy_url 填写ntfy地址,如https://ntfy.sh ## ntfy_url 填写ntfy地址,如https://ntfy.sh
## ntfy_topic 填写ntfy的消息应用topic ## ntfy_topic 填写ntfy的消息应用topic
## ntfy_priority 填写推送消息优先级,默认为3 ## ntfy_priority 填写推送消息优先级,默认为3
## ntfy_token 填写推送token,可选
## ntfy_username 填写推送用户名称,可选
## ntfy_password 填写推送用户密码,可选
export NTFY_URL="" export NTFY_URL=""
export NTFY_TOPIC="" export NTFY_TOPIC=""
export NTFY_PRIORITY="3" export NTFY_PRIORITY="3"
export NTFY_TOKEN=""
export NTFY_USERNAME=""
export NTFY_PASSWORD=""
## 21. wxPusher ## 21. wxPusher
## 官方文档: https://wxpusher.zjiecode.com/docs/ ## 官方文档: https://wxpusher.zjiecode.com/docs/

View File

@ -140,6 +140,9 @@ const push_config = {
NTFY_URL: '', // ntfy地址,如https://ntfy.sh,默认为https://ntfy.sh NTFY_URL: '', // ntfy地址,如https://ntfy.sh,默认为https://ntfy.sh
NTFY_TOPIC: '', // ntfy的消息应用topic NTFY_TOPIC: '', // ntfy的消息应用topic
NTFY_PRIORITY: '3', // 推送消息优先级,默认为3 NTFY_PRIORITY: '3', // 推送消息优先级,默认为3
NTFY_TOKEN: '', // 推送token,可选
NTFY_USERNAME: '', // 推送用户名称,可选
NTFY_PASSWORD: '', // 推送用户密码,可选
// 官方文档: https://wxpusher.zjiecode.com/docs/ // 官方文档: https://wxpusher.zjiecode.com/docs/
// 管理后台: https://wxpusher.zjiecode.com/admin/ // 管理后台: https://wxpusher.zjiecode.com/admin/
@ -1258,7 +1261,7 @@ function ntfyNotify(text, desp) {
} }
return new Promise((resolve) => { 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) { if (NTFY_TOPIC) {
const options = { const options = {
url: `${NTFY_URL || 'https://ntfy.sh'}/${NTFY_TOPIC}`, url: `${NTFY_URL || 'https://ntfy.sh'}/${NTFY_TOPIC}`,
@ -1266,9 +1269,16 @@ function ntfyNotify(text, desp) {
headers: { headers: {
Title: `${encodeRFC2047(text)}`, Title: `${encodeRFC2047(text)}`,
Priority: NTFY_PRIORITY || '3', Priority: NTFY_PRIORITY || '3',
Icon: 'https://qn.whyour.cn/logo.png',
}, },
timeout, 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) => { $.post(options, (err, resp, data) => {
try { try {
if (err) { if (err) {

View File

@ -126,6 +126,9 @@ push_config = {
'NTFY_URL': '', # ntfy地址,如https://ntfy.sh 'NTFY_URL': '', # ntfy地址,如https://ntfy.sh
'NTFY_TOPIC': '', # ntfy的消息应用topic 'NTFY_TOPIC': '', # ntfy的消息应用topic
'NTFY_PRIORITY':'3', # 推送消息优先级,默认为3 '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_APP_TOKEN': '', # wxpusher 的 appToken 官方文档: https://wxpusher.zjiecode.com/docs/ 管理后台: https://wxpusher.zjiecode.com/admin/
'WXPUSHER_TOPIC_IDS': '', # wxpusher 的 主题ID多个用英文分号;分隔 topic_ids 与 uids 至少配置一个才行 'WXPUSHER_TOPIC_IDS': '', # wxpusher 的 主题ID多个用英文分号;分隔 topic_ids 与 uids 至少配置一个才行
@ -806,7 +809,13 @@ def ntfy(title: str, content: str) -> None:
encoded_title = encode_rfc2047(title) encoded_title = encode_rfc2047(title)
data = content.encode(encoding="utf-8") 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") url = push_config.get("NTFY_URL") + "/" + push_config.get("NTFY_TOPIC")
response = requests.post(url, data=data, headers=headers) response = requests.post(url, data=data, headers=headers)

View File

@ -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", "自建的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的url地址例如 https://ntfy.sh": "The URL address of ntfy, for example, https://ntfy.sh.",
"ntfy的消息应用topic": "The topic for ntfy's messaging application.", "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的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的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", "wxPusherBot的uids": "wxPusherBot's uids, at least one of topicIds or uids must be configured",

View File

@ -396,6 +396,9 @@
"自建的PushMeServer消息接口地址例如http://127.0.0.1:3010不填则使用官方消息接口": "自建的PushMeServer消息接口地址例如http://127.0.0.1:3010不填则使用官方消息接口", "自建的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的url地址例如 https://ntfy.sh": "ntfy的url地址例如 https://ntfy.sh",
"ntfy的消息应用topic": "ntfy的消息应用topic", "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的appToken": "wxPusherBot的appToken, 按照文档获取 https://wxpusher.zjiecode.com/docs/",
"wxPusherBot的topicIds": "wxPusherBot的topicIds, topicIds 和 uids 至少配置一个才行", "wxPusherBot的topicIds": "wxPusherBot的topicIds, topicIds 和 uids 至少配置一个才行",
"wxPusherBot的uids": "wxPusherBot的uids, topicIds 和 uids 至少配置一个才行", "wxPusherBot的uids": "wxPusherBot的uids, topicIds 和 uids 至少配置一个才行",
@ -508,4 +511,3 @@
"当前文件未保存,确认离开吗": "当前文件未保存,确认离开吗", "当前文件未保存,确认离开吗": "当前文件未保存,确认离开吗",
"收件邮箱地址,多个分号分隔,默认发送给发件邮箱地址": "收件邮箱地址,多个分号分隔,默认发送给发件邮箱地址" "收件邮箱地址,多个分号分隔,默认发送给发件邮箱地址": "收件邮箱地址,多个分号分隔,默认发送给发件邮箱地址"
} }

View File

@ -132,6 +132,9 @@ export default {
required: true, required: true,
}, },
{ label: 'ntfyPriority', tip: intl.get('推送消息的优先级') }, { 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: [ chat: [
{ {