2022-09-17 11:54:21 +03:00
const { checkLogin } = require ( "../util-server" ) ;
const { log } = require ( "../../src/util" ) ;
const { R } = require ( "redbean-node" ) ;
const apicache = require ( "../modules/apicache" ) ;
const { UptimeKumaServer } = require ( "../uptime-kuma-server" ) ;
2022-09-24 14:18:24 +03:00
const Maintenance = require ( "../model/maintenance" ) ;
2022-09-17 11:54:21 +03:00
const server = UptimeKumaServer . getInstance ( ) ;
2022-09-25 14:38:28 +03:00
const dayjs = require ( "dayjs" ) ;
const utc = require ( "dayjs/plugin/utc" ) ;
let timezone = require ( "dayjs/plugin/timezone" ) ;
dayjs . extend ( utc ) ;
dayjs . extend ( timezone ) ;
2022-09-17 11:54:21 +03:00
/ * *
* Handlers for Maintenance
* @ param { Socket } socket Socket . io instance
* /
module . exports . maintenanceSocketHandler = ( socket ) => {
// Add a new maintenance
2022-09-25 14:38:28 +03:00
socket . on ( "addMaintenance" , async ( maintenance , timezone , callback ) => {
2022-09-17 11:54:21 +03:00
try {
checkLogin ( socket ) ;
2022-09-24 14:18:24 +03:00
log . debug ( "maintenance" , maintenance ) ;
2022-09-25 14:38:28 +03:00
let bean = Maintenance . jsonToBean ( R . dispense ( "maintenance" ) , maintenance , timezone ) ;
2022-09-17 11:54:21 +03:00
bean . user _id = socket . userID ;
let maintenanceID = await R . store ( bean ) ;
await server . sendMaintenanceList ( socket ) ;
callback ( {
ok : true ,
msg : "Added Successfully." ,
maintenanceID ,
} ) ;
} catch ( e ) {
callback ( {
ok : false ,
msg : e . message ,
} ) ;
}
} ) ;
// Edit a maintenance
2022-09-25 14:38:28 +03:00
socket . on ( "editMaintenance" , async ( maintenance , timezone , callback ) => {
2022-09-17 11:54:21 +03:00
try {
checkLogin ( socket ) ;
let bean = await R . findOne ( "maintenance" , " id = ? " , [ maintenance . id ] ) ;
if ( bean . user _id !== socket . userID ) {
throw new Error ( "Permission denied." ) ;
}
2022-09-25 14:38:28 +03:00
Maintenance . jsonToBean ( bean , maintenance , timezone ) ;
2022-09-17 11:54:21 +03:00
await R . store ( bean ) ;
await server . sendMaintenanceList ( socket ) ;
callback ( {
ok : true ,
msg : "Saved." ,
maintenanceID : bean . id ,
} ) ;
} catch ( e ) {
console . error ( e ) ;
callback ( {
ok : false ,
msg : e . message ,
} ) ;
}
} ) ;
// Add a new monitor_maintenance
socket . on ( "addMonitorMaintenance" , async ( maintenanceID , monitors , callback ) => {
try {
checkLogin ( socket ) ;
await R . exec ( "DELETE FROM monitor_maintenance WHERE maintenance_id = ?" , [
maintenanceID
] ) ;
for await ( const monitor of monitors ) {
let bean = R . dispense ( "monitor_maintenance" ) ;
bean . import ( {
monitor _id : monitor . id ,
maintenance _id : maintenanceID
} ) ;
await R . store ( bean ) ;
}
apicache . clear ( ) ;
callback ( {
ok : true ,
msg : "Added Successfully." ,
} ) ;
} catch ( e ) {
callback ( {
ok : false ,
msg : e . message ,
} ) ;
}
} ) ;
// Add a new monitor_maintenance
socket . on ( "addMaintenanceStatusPage" , async ( maintenanceID , statusPages , callback ) => {
try {
checkLogin ( socket ) ;
await R . exec ( "DELETE FROM maintenance_status_page WHERE maintenance_id = ?" , [
maintenanceID
] ) ;
for await ( const statusPage of statusPages ) {
let bean = R . dispense ( "maintenance_status_page" ) ;
bean . import ( {
status _page _id : statusPage . id ,
maintenance _id : maintenanceID
} ) ;
await R . store ( bean ) ;
}
apicache . clear ( ) ;
callback ( {
ok : true ,
msg : "Added Successfully." ,
} ) ;
} catch ( e ) {
callback ( {
ok : false ,
msg : e . message ,
} ) ;
}
} ) ;
2022-09-25 14:38:28 +03:00
socket . on ( "getMaintenance" , async ( maintenanceID , timezone , callback ) => {
2022-09-17 11:58:08 +03:00
try {
checkLogin ( socket ) ;
log . debug ( "maintenance" , ` Get Maintenance: ${ maintenanceID } User ID: ${ socket . userID } ` ) ;
let bean = await R . findOne ( "maintenance" , " id = ? AND user_id = ? " , [
maintenanceID ,
socket . userID ,
] ) ;
callback ( {
ok : true ,
2022-09-25 14:38:28 +03:00
maintenance : await bean . toJSON ( timezone ) ,
2022-09-17 11:58:08 +03:00
} ) ;
} catch ( e ) {
callback ( {
ok : false ,
msg : e . message ,
} ) ;
}
} ) ;
2022-09-17 11:54:21 +03:00
socket . on ( "getMaintenanceList" , async ( callback ) => {
try {
checkLogin ( socket ) ;
await server . sendMaintenanceList ( socket ) ;
callback ( {
ok : true ,
} ) ;
} catch ( e ) {
console . error ( e ) ;
callback ( {
ok : false ,
msg : e . message ,
} ) ;
}
} ) ;
socket . on ( "getMonitorMaintenance" , async ( maintenanceID , callback ) => {
try {
checkLogin ( socket ) ;
2022-09-17 11:58:08 +03:00
log . debug ( "maintenance" , ` Get Monitors for Maintenance: ${ maintenanceID } User ID: ${ socket . userID } ` ) ;
2022-09-17 11:54:21 +03:00
let monitors = await R . getAll ( "SELECT monitor.id, monitor.name FROM monitor_maintenance mm JOIN monitor ON mm.monitor_id = monitor.id WHERE mm.maintenance_id = ? " , [
maintenanceID ,
] ) ;
callback ( {
ok : true ,
monitors ,
} ) ;
} catch ( e ) {
console . error ( e ) ;
callback ( {
ok : false ,
msg : e . message ,
} ) ;
}
} ) ;
socket . on ( "getMaintenanceStatusPage" , async ( maintenanceID , callback ) => {
try {
checkLogin ( socket ) ;
2022-09-17 11:58:08 +03:00
log . debug ( "maintenance" , ` Get Status Pages for Maintenance: ${ maintenanceID } User ID: ${ socket . userID } ` ) ;
2022-09-17 11:54:21 +03:00
let statusPages = await R . getAll ( "SELECT status_page.id, status_page.title FROM maintenance_status_page msp JOIN status_page ON msp.status_page_id = status_page.id WHERE msp.maintenance_id = ? " , [
maintenanceID ,
] ) ;
callback ( {
ok : true ,
statusPages ,
} ) ;
} catch ( e ) {
console . error ( e ) ;
callback ( {
ok : false ,
msg : e . message ,
} ) ;
}
} ) ;
socket . on ( "deleteMaintenance" , async ( maintenanceID , callback ) => {
try {
checkLogin ( socket ) ;
2022-09-17 11:58:08 +03:00
log . debug ( "maintenance" , ` Delete Maintenance: ${ maintenanceID } User ID: ${ socket . userID } ` ) ;
2022-09-17 11:54:21 +03:00
if ( maintenanceID in server . maintenanceList ) {
delete server . maintenanceList [ maintenanceID ] ;
}
await R . exec ( "DELETE FROM maintenance WHERE id = ? AND user_id = ? " , [
maintenanceID ,
socket . userID ,
] ) ;
callback ( {
ok : true ,
msg : "Deleted Successfully." ,
} ) ;
await server . sendMaintenanceList ( socket ) ;
} catch ( e ) {
callback ( {
ok : false ,
msg : e . message ,
} ) ;
}
} ) ;
} ;