- 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
92 lines
3.3 KiB
JavaScript
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;
|