Lakr Aream
3 years ago
4 changed files with 109 additions and 1 deletions
@ -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; |
@ -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> |
Loading…
Reference in new issue