-
-
Notifications
You must be signed in to change notification settings - Fork 5.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #782 from Co2333/dev-lakr233-bark_notification
Support for Bark (APN) notifications
- Loading branch information
Showing
4 changed files
with
109 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,89 @@ | ||
// | ||
// bark.js | ||
// UptimeKuma | ||
// | ||
// Created by Lakr Aream on 2021/10/24. | ||
// Copyright © 2021 Lakr Aream. All rights reserved. | ||
// | ||
|
||
const NotificationProvider = require("./notification-provider"); | ||
const { DOWN, UP } = require("../../src/util"); | ||
const { default: axios } = require("axios"); | ||
|
||
// bark is an APN bridge that sends notifications to Apple devices. | ||
|
||
const barkNotificationGroup = "UptimeKuma"; | ||
const barkNotificationAvatar = "https://github.com/louislam/uptime-kuma/raw/master/public/icon.png"; | ||
const barkNotificationSound = "telegraph"; | ||
const successMessage = "Successes!"; | ||
|
||
class Bark extends NotificationProvider { | ||
name = "Bark"; | ||
|
||
async send(notification, msg, monitorJSON = null, heartbeatJSON = null) { | ||
try { | ||
var barkEndpoint = notification.barkEndpoint; | ||
|
||
// check if the endpoint has a "/" suffix, if so, delete it first | ||
if (barkEndpoint.endsWith("/")) { | ||
barkEndpoint = barkEndpoint.substring(0, barkEndpoint.length - 1); | ||
} | ||
|
||
if (msg != null && heartbeatJSON != null && heartbeatJSON["status"] == UP) { | ||
let title = "UptimeKuma Monitor Up"; | ||
return await this.postNotification(title, msg, barkEndpoint); | ||
} | ||
|
||
if (msg != null && heartbeatJSON != null && heartbeatJSON["status"] == DOWN) { | ||
let title = "UptimeKuma Monitor Down"; | ||
return await this.postNotification(title, msg, barkEndpoint); | ||
} | ||
|
||
if (msg != null) { | ||
let title = "UptimeKuma Message"; | ||
return await this.postNotification(title, msg, barkEndpoint); | ||
} | ||
|
||
} catch (error) { | ||
throw error; | ||
} | ||
} | ||
|
||
// add additional parameter for better on device styles (iOS 15 optimized) | ||
appendAdditionalParameters(postUrl) { | ||
// grouping all our notifications | ||
postUrl += "?group=" + barkNotificationGroup; | ||
// set icon to uptime kuma icon, 11kb should be fine | ||
postUrl += "&icon=" + barkNotificationAvatar; | ||
// picked a sound, this should follow system's mute status when arrival | ||
postUrl += "&sound=" + barkNotificationSound; | ||
return postUrl; | ||
} | ||
|
||
// thrown if failed to check result, result code should be in range 2xx | ||
checkResult(result) { | ||
if (result.status == null) { | ||
throw new Error("Bark notification failed with invalid response!"); | ||
} | ||
if (result.status < 200 || result.status >= 300) { | ||
throw new Error("Bark notification failed with status code " + result.status); | ||
} | ||
} | ||
|
||
async postNotification(title, subtitle, endpoint) { | ||
// url encode title and subtitle | ||
title = encodeURIComponent(title); | ||
subtitle = encodeURIComponent(subtitle); | ||
let postUrl = endpoint + "/" + title + "/" + subtitle; | ||
postUrl = this.appendAdditionalParameters(postUrl); | ||
let result = await axios.get(postUrl); | ||
this.checkResult(result); | ||
if (result.statusText != null) { | ||
return "Bark notification succeed: " + result.statusText; | ||
} | ||
// because returned in range 200 ..< 300 | ||
return successMessage; | ||
} | ||
} | ||
|
||
module.exports = Bark; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
<template> | ||
<div class="mb-3"> | ||
<label for="Bark Endpoint" class="form-label">{{ $t("Bark Endpoint") }}<span style="color: red;"><sup>*</sup></span></label> | ||
<input id="Bark Endpoint" v-model="$parent.notification.barkEndpoint" type="text" class="form-control" required> | ||
<div class="form-text"> | ||
<p><span style="color: red;"><sup>*</sup></span>{{ $t("Required") }}</p> | ||
</div> | ||
<i18n-t tag="div" keypath="wayToGetTeamsURL" class="form-text"> | ||
<a | ||
href="https://github.com/Finb/Bark" | ||
target="_blank" | ||
>{{ $t("here") }}</a> | ||
</i18n-t> | ||
</div> | ||
</template> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters