Browse Source
			
			
			Merge pull request #133 from NiNiyas/lunasea-support
			
				Adds support for LunaSea notifications
			
			
				pull/145/head
			
			
		 
		
			
				
					
						
						Louis Lam
					
					4 years ago
					
						
							committed by
							
								
								GitHub
							
						 
					
				 
				
			 
		 
		
			
				
					
					No known key found for this signature in database
					
						
							GPG Key ID: 4AEE18F83AFDEB23
						
					
				
			
		
		
		
	
		
			
				 2 changed files with 
56 additions and 
27 deletions
			 
			
		 
		
			
				- 
					
					
					 
					server/notification.js
				
 
			
				- 
					
					
					 
					src/components/NotificationDialog.vue
				
 
			
		
		
			
			
			
			
			
			
				
				
					
						
							
								
									
	
		
			
				
					| 
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -235,6 +235,41 @@ class Notification { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            return Notification.apprise(notification, msg) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } else if (notification.type === "lunasea") { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            let lunaseadevice = "https://notify.lunasea.app/v1/custom/device/" + notification.lunaseaDevice | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            try { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                if (heartbeatJSON == null) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    let testdata = { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        "title": "Uptime Kuma Alert", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        "body": "Testing Successful.", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    await axios.post(lunaseadevice, testdata) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    return okMsg; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                if (heartbeatJSON["status"] == 0) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    let downdata = { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        "title": "UptimeKuma Alert:" + monitorJSON["name"], | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        "body": "[🔴 Down]" + heartbeatJSON["msg"] + "\nTime (UTC):" + heartbeatJSON["time"], | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    await axios.post(lunaseadevice, downdata) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    return okMsg; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                if (heartbeatJSON["status"] == 1) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    let updata = { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        "title": "UptimeKuma Alert:" + monitorJSON["name"], | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        "body": "[✅ Up]" + heartbeatJSON["msg"] + "\nTime (UTC):" + heartbeatJSON["time"], | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    await axios.post(lunaseadevice, updata) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    return okMsg; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } catch (error) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                throwGeneralAxiosError(error) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } else { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            throw new Error("Notification type is not supported") | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
				
				 | 
				
					
  | 
				
			
			
		
	
								
							
						
					 
					
				 
			 
		
			
			
			
			
			
			
				
				
					
						
							
								
									
	
		
			
				
					| 
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -13,33 +13,16 @@ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        <div class="mb-3"> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                            <label for="type" class="form-label">Notification Type</label> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                            <select id="type" v-model="notification.type" class="form-select"> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                <option value="telegram"> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                    Telegram | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                </option> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                <option value="webhook"> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                    Webhook | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                </option> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                <option value="smtp"> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                    Email (SMTP) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                </option> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                <option value="discord"> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                    Discord | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                </option> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                <option value="signal"> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                    Signal | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                </option> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                <option value="gotify"> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                    Gotify | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                </option> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                <option value="slack"> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                    Slack | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                </option> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                <option value="pushover"> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                    Pushover | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                </option> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                <option value="apprise"> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                    Apprise (Support 50+ Notification services) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                </option> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                <option value="telegram">Telegram</option> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                <option value="webhook">Webhook</option> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                <option value="smtp">Email (SMTP)</option> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                <option value="discord">Discord</option> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                <option value="signal">Signal</option> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                <option value="gotify">Gotify</option> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                <option value="slack">Slack</option> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                <option value="pushover">Pushover</option> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                <option value="lunasea">LunaSea</option> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                <option value="apprise">Apprise (Support 50+ Notification services)</option> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                            </select> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        </div> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -323,6 +306,17 @@ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                </p> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                            </div> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        </template> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        <template v-if="notification.type === 'lunasea'"> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                            <div class="mb-3"> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                <label for="lunasea-device" class="form-label">LunaSea Device ID<span style="color:red;"><sup>*</sup></span></label> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                <input id="lunasea-device" v-model="notification.lunaseaDevice" type="text" class="form-control" required> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                <div class="form-text"> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                    <p><span style="color:red;"><sup>*</sup></span>Required</p> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                </div> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                            </div> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        </template> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    </div> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    <div class="modal-footer"> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        <button v-if="id" type="button" class="btn btn-danger" :disabled="processing" @click="deleteConfirm"> | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
				
				 | 
				
					
  |