committed by
							
								 GitHub
								GitHub
							
						
					
				
				 20 changed files with 100 additions and 16 deletions
			
			
		| @ -0,0 +1,45 @@ | |||||
|  | const NotificationProvider = require("./notification-provider"); | ||||
|  | const axios = require("axios"); | ||||
|  | const Crypto = require("crypto"); | ||||
|  | const { debug } = require("../../src/util"); | ||||
|  | 
 | ||||
|  | class Matrix extends NotificationProvider { | ||||
|  |     name = "matrix"; | ||||
|  | 
 | ||||
|  |     async send(notification, msg, monitorJSON = null, heartbeatJSON = null) { | ||||
|  |         let okMsg = "Sent Successfully."; | ||||
|  | 
 | ||||
|  |         const size = 20; | ||||
|  |         const randomString = encodeURIComponent( | ||||
|  |             Crypto | ||||
|  |                 .randomBytes(size) | ||||
|  |                 .toString("base64") | ||||
|  |                 .slice(0, size) | ||||
|  |         ); | ||||
|  | 
 | ||||
|  |         debug("Random String: " + randomString); | ||||
|  | 
 | ||||
|  |         const roomId = encodeURIComponent(notification.internalRoomId); | ||||
|  | 
 | ||||
|  |         debug("Matrix Room ID: " + roomId); | ||||
|  | 
 | ||||
|  |         try { | ||||
|  |             let config = { | ||||
|  |                 headers: { | ||||
|  |                     "Authorization": `Bearer ${notification.accessToken}`, | ||||
|  |                 } | ||||
|  |             }; | ||||
|  |             let data = { | ||||
|  |                 "msgtype": "m.text", | ||||
|  |                 "body": msg | ||||
|  |             }; | ||||
|  | 
 | ||||
|  |             await axios.put(`${notification.homeserverUrl}/_matrix/client/r0/rooms/${roomId}/send/m.room.message/${randomString}`, data, config); | ||||
|  |             return okMsg; | ||||
|  |         } catch (error) { | ||||
|  |             this.throwGeneralAxiosError(error); | ||||
|  |         } | ||||
|  |     } | ||||
|  | } | ||||
|  | 
 | ||||
|  | module.exports = Matrix; | ||||
| @ -0,0 +1,34 @@ | |||||
|  | <template> | ||||
|  |     <div class="mb-3"> | ||||
|  |         <label for="homeserver-url" class="form-label">Homeserver URL (with http(s):// and optionally port)</label><span style="color: red;"><sup>*</sup></span> | ||||
|  |         <input id="homeserver-url" v-model="$parent.notification.homeserverUrl" type="text" class="form-control" :required="true"> | ||||
|  |     </div> | ||||
|  |     <div class="mb-3"> | ||||
|  |         <label for="internal-room-id" class="form-label">Internal Room Id</label><span style="color: red;"><sup>*</sup></span> | ||||
|  |         <input id="internal-room-id" v-model="$parent.notification.internalRoomId" type="text" class="form-control" required="true"> | ||||
|  |     </div> | ||||
|  |     <div class="mb-3"> | ||||
|  |         <label for="access-token" class="form-label">Access Token</label><span style="color: red;"><sup>*</sup></span> | ||||
|  |         <HiddenInput id="access-token" v-model="$parent.notification.accessToken" :required="true" autocomplete="one-time-code" :maxlength="500"></HiddenInput> | ||||
|  |     </div> | ||||
|  | 
 | ||||
|  |     <div class="form-text"> | ||||
|  |         <span style="color: red;"><sup>*</sup></span>Required | ||||
|  |         <p style="margin-top: 8px;"> | ||||
|  |             You can find the internal room ID by looking in the advanced section of the room settings in your Matrix client. It should look like !QMdRCpUIfLwsfjxye6:home.server. | ||||
|  |         </p> | ||||
|  |         <p style="margin-top: 8px;"> | ||||
|  |             It is highly recommended you create a new user and do not use your own Matrix user's access token as it will allow full access to your account and all the rooms you joined. Instead, create a new user and only invite it to the room that you want to receive the notification in. You can get the access token by running <code>curl -XPOST -d '{"type": "m.login.password", "identifier": {"user": "botusername", "type": "m.id.user"}, "password": "passwordforuser"}' "https://home.server/_matrix/client/r0/login"</code>. | ||||
|  |         </p> | ||||
|  |     </div> | ||||
|  | </template> | ||||
|  | 
 | ||||
|  | <script> | ||||
|  | import HiddenInput from "../HiddenInput.vue"; | ||||
|  | 
 | ||||
|  | export default { | ||||
|  |     components: { | ||||
|  |         HiddenInput, | ||||
|  |     }, | ||||
|  | } | ||||
|  | </script> | ||||
					Loading…
					
					
				
		Reference in new issue