uptime-kuma/server/notification-providers/ntfy.js
Newton Langidrik 8cdf7a905a Rebrand to PSS Uptime: Add custom logo and favicon, update all references from Uptime Kuma to PSS Uptime
- Add custom logo.png and favicon.ico for Marshall Islands Public School System
- Update all application references from 'Uptime Kuma' to 'PSS Uptime'
- Update README.md with PSS Uptime branding and credits to original Uptime Kuma project
- Update Docker configuration to build from source
- Update all notification providers to use PSS Uptime branding
- Update UI components, layouts, and pages with new branding
- Update language files (en, zh-CN, zh-TW) with PSS Uptime translations
- Add logo URL input field in status page settings
- Update default icon references from icon.svg to logo.png
2026-01-20 13:47:09 +12:00

92 lines
3.3 KiB
JavaScript

const NotificationProvider = require("./notification-provider");
const axios = require("axios");
const { DOWN, UP } = require("../../src/util");
class Ntfy extends NotificationProvider {
name = "ntfy";
/**
* @inheritdoc
*/
async send(notification, msg, monitorJSON = null, heartbeatJSON = null) {
const okMsg = "Sent Successfully.";
try {
let headers = {};
if (notification.ntfyAuthenticationMethod === "usernamePassword") {
headers = {
Authorization:
"Basic " +
Buffer.from(notification.ntfyusername + ":" + notification.ntfypassword).toString("base64"),
};
} else if (notification.ntfyAuthenticationMethod === "accessToken") {
headers = {
Authorization: "Bearer " + notification.ntfyaccesstoken,
};
}
if (notification.ntfyCall) {
headers["X-Call"] = notification.ntfyCall;
}
let config = {
headers,
};
config = this.getAxiosConfigWithProxy(config);
// If heartbeatJSON is null, assume non monitoring notification (Certificate warning) or testing.
if (heartbeatJSON == null) {
let ntfyTestData = {
topic: notification.ntfytopic,
title: (monitorJSON?.name || notification.ntfytopic) + " [PSS Uptime]",
message: msg,
priority: notification.ntfyPriority,
tags: ["test_tube"],
};
await axios.post(notification.ntfyserverurl, ntfyTestData, config);
return okMsg;
}
let tags = [];
let status = "unknown";
let priority = notification.ntfyPriority || 4;
if ("status" in heartbeatJSON) {
if (heartbeatJSON.status === DOWN) {
tags = ["red_circle"];
status = "Down";
// defaults to max(priority + 1, 5)
priority = notification.ntfyPriorityDown || (priority === 5 ? priority : priority + 1);
} else if (heartbeatJSON["status"] === UP) {
tags = ["green_circle"];
status = "Up";
}
}
let data = {
topic: notification.ntfytopic,
message: heartbeatJSON.msg,
priority: priority,
title: monitorJSON.name + " " + status + " [PSS Uptime]",
tags: tags,
};
if (monitorJSON.url && monitorJSON.url !== "https://") {
data.actions = [
{
action: "view",
label: "Open " + monitorJSON.name,
url: monitorJSON.url,
},
];
}
if (notification.ntfyIcon) {
data.icon = notification.ntfyIcon;
}
await axios.post(notification.ntfyserverurl, data, config);
return okMsg;
} catch (error) {
this.throwGeneralAxiosError(error);
}
}
}
module.exports = Ntfy;