mirror of https://github.com/louislam/uptime-kuma
				
				
				
			Matrix Notifications
							parent
							
								
									c1501742f5
								
							
						
					
					
						commit
						5decfb9fad
					
				| 
						 | 
				
			
			@ -0,0 +1,37 @@
 | 
			
		|||
const NotificationProvider = require("./notification-provider");
 | 
			
		||||
const axios = require("axios");
 | 
			
		||||
const Crypto = require('crypto')
 | 
			
		||||
 | 
			
		||||
class Matrix extends NotificationProvider {
 | 
			
		||||
 | 
			
		||||
    name = "matrix";
 | 
			
		||||
 | 
			
		||||
    async send(notification, msg, monitorJSON = null, heartbeatJSON = null) {
 | 
			
		||||
        let okMsg = "Sent Successfully. ";
 | 
			
		||||
 | 
			
		||||
        const size = 20;
 | 
			
		||||
        const randomString = Crypto
 | 
			
		||||
            .randomBytes(size)
 | 
			
		||||
            .toString('base64')
 | 
			
		||||
            .slice(0, size);    
 | 
			
		||||
 | 
			
		||||
        try {
 | 
			
		||||
            let config = {
 | 
			
		||||
                headers: {
 | 
			
		||||
                    "Authorization": `Bearer ${notification.accessToken}`,
 | 
			
		||||
                }
 | 
			
		||||
            };
 | 
			
		||||
            let data = {
 | 
			
		||||
                "msgtype": "m.text",
 | 
			
		||||
                "body": msg
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            await axios.put(`${notification.homeserverUrl}/_matrix/client/r0/rooms/${notification.internalRoomId}/send/m.room.message/${randomString}`, data, config)
 | 
			
		||||
            return okMsg;
 | 
			
		||||
        } catch (error) {
 | 
			
		||||
            this.throwGeneralAxiosError(error);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module.exports = Matrix;
 | 
			
		||||
| 
						 | 
				
			
			@ -5,6 +5,7 @@ const Gotify = require("./notification-providers/gotify");
 | 
			
		|||
const Line = require("./notification-providers/line");
 | 
			
		||||
const LunaSea = require("./notification-providers/lunasea");
 | 
			
		||||
const Mattermost = require("./notification-providers/mattermost");
 | 
			
		||||
const Matrix = require("./notification-providers/matrix");
 | 
			
		||||
const Octopush = require("./notification-providers/octopush");
 | 
			
		||||
const Pushbullet = require("./notification-providers/pushbullet");
 | 
			
		||||
const Pushover = require("./notification-providers/pushover");
 | 
			
		||||
| 
						 | 
				
			
			@ -34,6 +35,7 @@ class Notification {
 | 
			
		|||
            new Line(),
 | 
			
		||||
            new LunaSea(),
 | 
			
		||||
            new Mattermost(),
 | 
			
		||||
            new Matrix(),
 | 
			
		||||
            new Octopush(),
 | 
			
		||||
            new Pushbullet(),
 | 
			
		||||
            new Pushover(),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,25 @@
 | 
			
		|||
<template>
 | 
			
		||||
    <div class="mb-3">
 | 
			
		||||
        <label for="homeserver-url" class="form-label">Homeserver URL (with http(s):// and optionally port)</label>
 | 
			
		||||
        <input id="homeserver-url" v-model="$parent.notification.homeserverUrl" type="text" class="form-control" :required="true">
 | 
			
		||||
        <label for="internal-room-id" class="form-label">Internal Room Id</label>
 | 
			
		||||
        <input id="internal-room-id" v-model="$parent.notification.internalRoomId" type="text" class="form-control" required="true">
 | 
			
		||||
        <label for="access-token" class="form-label">Access Token</label>
 | 
			
		||||
        <HiddenInput id="access-token" v-model="$parent.notification.accessToken" :required="true" autocomplete="one-time-code" :maxlength="500"></HiddenInput>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <p style="margin-top: 8px;">
 | 
			
		||||
        You can find the internal room ID by looking in the advanced section if your Matrix client. It should look like !QMdRCpUIfLwsfjxye6:home.server.<br/>
 | 
			
		||||
        It is highly recommended you create a new user and do not use your Matrix user's access token as it will allow full access to the matrix user. You can get the access token by running curl -XPOST -d '{"type":"m.login.password", "identifier": {"user":"botusername", "type": "m.id.user"}, "password":"passwordforuser"}' "https://home.server.url/_matrix/client/r0/login".
 | 
			
		||||
    </p>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
import HiddenInput from "../HiddenInput.vue";
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
    components: {
 | 
			
		||||
        HiddenInput,
 | 
			
		||||
    },
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
| 
						 | 
				
			
			@ -15,6 +15,7 @@ import Apprise from "./Apprise.vue";
 | 
			
		|||
import Pushbullet from "./Pushbullet.vue";
 | 
			
		||||
import Line from "./Line.vue";
 | 
			
		||||
import Mattermost from "./Mattermost.vue";
 | 
			
		||||
import Matrix from "./Matrix.vue";
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Manage all notification form.
 | 
			
		||||
| 
						 | 
				
			
			@ -38,7 +39,8 @@ const NotificationFormList = {
 | 
			
		|||
    "apprise": Apprise,
 | 
			
		||||
    "pushbullet": Pushbullet,
 | 
			
		||||
    "line": Line,
 | 
			
		||||
    "mattermost": Mattermost
 | 
			
		||||
    "mattermost": Mattermost,
 | 
			
		||||
    "matrix": Matrix
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export default NotificationFormList
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -195,4 +195,5 @@ export default {
 | 
			
		|||
    "pushbullet": "Pushbullet",
 | 
			
		||||
    "line": "Line Messenger",
 | 
			
		||||
    "mattermost": "Mattermost",
 | 
			
		||||
    "matrix": "Matrix",
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue