Merge pull request #1923 from rolfbachmann/ntfy-auth-support

Add authentication support for ntfy
This commit is contained in:
Louis Lam 2022-10-03 15:54:55 +08:00 committed by GitHub
commit 543a74ecab
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 27 additions and 3 deletions

View file

@ -8,12 +8,19 @@ class Ntfy extends NotificationProvider {
async send(notification, msg, monitorJSON = null, heartbeatJSON = null) { async send(notification, msg, monitorJSON = null, heartbeatJSON = null) {
let okMsg = "Sent Successfully."; let okMsg = "Sent Successfully.";
try { try {
await axios.post(`${notification.ntfyserverurl}`, { let headers = {};
if (notification.ntfyusername.length > 0) {
headers = {
"Authorization": "Basic " + Buffer.from(notification.ntfyusername + ":" + notification.ntfypassword).toString("base64"),
};
}
let data = {
"topic": notification.ntfytopic, "topic": notification.ntfytopic,
"message": msg, "message": msg,
"priority": notification.ntfyPriority || 4, "priority": notification.ntfyPriority || 4,
"title": "Uptime-Kuma", "title": "Uptime-Kuma",
}); };
await axios.post(`${notification.ntfyserverurl}`, data, { headers: headers });
return okMsg; return okMsg;

View file

@ -11,15 +11,31 @@
<input id="ntfy-server-url" v-model="$parent.notification.ntfyserverurl" type="text" class="form-control" required> <input id="ntfy-server-url" v-model="$parent.notification.ntfyserverurl" type="text" class="form-control" required>
</div> </div>
</div> </div>
<div class="mb-3"> <div class="mb-3">
<label for="ntfy-priority" class="form-label">{{ $t("Priority") }}</label> <label for="ntfy-priority" class="form-label">{{ $t("Priority") }}</label>
<input id="ntfy-priority" v-model="$parent.notification.ntfyPriority" type="number" class="form-control" required min="1" max="5" step="1"> <input id="ntfy-priority" v-model="$parent.notification.ntfyPriority" type="number" class="form-control" required min="1" max="5" step="1">
</div> </div>
<div class="mb-3">
<label for="ntfy-username" class="form-label">{{ $t("Username") }} ({{ $t("Optional") }})</label>
<div class="input-group mb-3">
<input id="ntfy-username" v-model="$parent.notification.ntfyusername" type="text" class="form-control" required>
</div>
</div>
<div class="mb-3">
<label for="ntfy-password" class="form-label">{{ $t("Password") }} ({{ $t("Optional") }})</label>
<div class="input-group mb-3">
<HiddenInput id="ntfy-password" v-model="$parent.notification.ntfypassword" autocomplete="new-password"></HiddenInput>
</div>
</div>
</template> </template>
<script> <script>
import HiddenInput from "../HiddenInput.vue";
export default { export default {
components: {
HiddenInput,
},
mounted() { mounted() {
if (typeof this.$parent.notification.ntfyPriority === "undefined") { if (typeof this.$parent.notification.ntfyPriority === "undefined") {
this.$parent.notification.ntfyserverurl = "https://ntfy.sh"; this.$parent.notification.ntfyserverurl = "https://ntfy.sh";

View file

@ -582,4 +582,5 @@ export default {
goAlert: "GoAlert", goAlert: "GoAlert",
backupOutdatedWarning: "Deprecated: Since a lot of features added and this backup feature is a bit unmaintained, it cannot generate or restore a complete backup.", backupOutdatedWarning: "Deprecated: Since a lot of features added and this backup feature is a bit unmaintained, it cannot generate or restore a complete backup.",
backupRecommend: "Please backup the volume or the data folder (./data/) directly instead.", backupRecommend: "Please backup the volume or the data folder (./data/) directly instead.",
"Optional": "Optional",
}; };