@@ -29,12 +29,15 @@ import { RemoveSession } from "../dbops/RemoveSession";
2929import { GetSessions } from "../dbops/GetSessions" ;
3030import { GetImagery } from "../dbops/GetImagery" ;
3131import { ClearNotifications } from "../dbops/ClearNotifications" ;
32- import { GetOrCreateInviteHash } from "../types/GetOrCreateInviteHash" ;
32+ import { GetOrCreateInviteHash , InvalidateHash } from "../types/GetOrCreateInviteHash" ;
3333import { GetInviteDetails } from "../dbops/GetInviteDetails" ;
3434import { AcceptInvite } from "../dbops/AcceptInvite" ;
3535import { GetDeviceMessages } from "../dbops/GetDeviceMessages" ;
3636import { SendMessageToHWID } from "../dbops/SendMessageToHWID" ;
3737import { GetAccountDetails , GetAccountDetailsUsername } from "../dbops/GetAccountDetails" ;
38+ import { UpdateDevice } from "../dbops/UpdateDevice" ;
39+ import { writeAuditEntry } from "../dbops/WriteAuditEntry" ;
40+ import { GetAudits } from "../dbops/GetAudits" ;
3841export function ClientEvents ( socket : Socket ) : void {
3942 function authDisconnect ( ) {
4043 console . log ( "[Debug] Client socket authentication timed-out." ) ;
@@ -208,7 +211,6 @@ export function ClientEvents(socket: Socket): void {
208211 success : false ,
209212 message : "Device is offline." ,
210213 } ,
211-
212214 } ;
213215 callback ( failState ) ;
214216 return ;
@@ -223,11 +225,22 @@ export function ClientEvents(socket: Socket): void {
223225 } ;
224226 // A better idea might be introducing a new TypeScript type for updates
225227 // which don't require all DeviceBaseToggle fields to be present.
228+
226229 sendToggleStateToClientExceptSelf ( socket , socket . data . subscribedDeviceHwid , local ) ; // We do not need to wait for other clients to ack.
227230 // Uncomment this for debugging... (Sends the toggle state to the client that sent the toggle state)
228231 //sendToggleStateToClient(socket.data.subscribedDeviceHwid, local)
232+
229233 sendToggleToDevice ( socket . data . subscribedDeviceHwid , local ) . then ( ( res : ToggleResult ) => {
230234 if ( res . success ) {
235+ // write success audit log entry
236+ writeAuditEntry (
237+ socket . data . subscribedDeviceHwid ,
238+ socket . data . username ,
239+ socket . data . username + " selected " + data . toggleName ,
240+ socket . data . username + " selected " + data . toggleName + " successfully and it has finished"
241+ ) ;
242+
243+ // mutate state
231244 mutateState ( socket . data . subscribedDeviceHwid , ( deviceState ) => {
232245 console . log ( "Mutator" , deviceState ) ;
233246 for ( let i = 0 ; i < deviceState . deviceToggles . length ; i ++ ) {
@@ -238,6 +251,13 @@ export function ClientEvents(socket: Socket): void {
238251 }
239252 } ) ;
240253 } else {
254+ // write failed audit log entry
255+ writeAuditEntry (
256+ socket . data . subscribedDeviceHwid ,
257+ socket . data . username ,
258+ socket . data . username + " selected " + data . toggleName ,
259+ socket . data . username + " selected " + data . toggleName + ", but it has failed with error: " + res . message ?? "Unknown error"
260+ ) ;
241261 const failed : ToggleWithStatus = {
242262 toggleName : data . toggleName ,
243263 toggleValue : ! data . toggleValue , // Invert since failed.
@@ -275,7 +295,7 @@ export function ClientEvents(socket: Socket): void {
275295 socket . on ( "GetParticularSchedule" , ( data : { scheduleId : string } , callback : any ) => {
276296 if ( ! socket . data . authenticated ) return ;
277297 } ) ;
278-
298+
279299 socket . on (
280300 "GetStats" ,
281301 (
@@ -415,6 +435,12 @@ export function ClientEvents(socket: Socket): void {
415435 device . socket . volatile . emit ( "ManualPicture" ) ;
416436 } ) ;
417437
438+ socket . on ( "GetAuditLog" , ( data : never , callback ) => {
439+ if ( ! socket . data . authenticated ) return ;
440+ GetAudits ( socket . data . subscribedDeviceHwid ) . then ( ( res ) => {
441+ callback ( res ) ;
442+ } ) ;
443+ } )
418444 socket . on ( "InviteHashes" , ( data : never , callback ) => {
419445 if ( ! socket . data . authenticated ) return ;
420446 GetOrCreateInviteHash ( socket . data . subscribedDeviceHwid , socket . data . username )
@@ -510,7 +536,7 @@ export function ClientEvents(socket: Socket): void {
510536 sender : rez . AccountID ,
511537 DeviceHWID : socket . data . subscribedDeviceHwid ,
512538 } ;
513- cs . socket . emit ( "MessagingReceive" , msgLocal ) ;
539+ cs . socket . emit ( "MessagingReceive" , msgLocal ) ;
514540 }
515541 } ) ;
516542 } ) ;
@@ -528,4 +554,62 @@ export function ClientEvents(socket: Socket): void {
528554 } ) ;
529555 } ) ;
530556 } ) ;
557+
558+ socket . on ( "RebootSubscribedDevice" , ( data : { hard ?: boolean } , callback ) => {
559+ if ( ! socket . data . authenticated ) return ;
560+ console . log ( "Got reboot request" , data ) ;
561+ const device = findDeviceSocket ( socket . data . subscribedDeviceHwid ) ;
562+ if ( ! device ) {
563+ return ;
564+ }
565+ device . socket . volatile . emit ( "Reboot" , data , ( ) => {
566+ if ( callback ) callback ( ) ;
567+ } ) ;
568+ } ) ;
569+
570+ socket . on ( "RemoveTrigger" , ( data : ScheduledTask , callback ) => {
571+ if ( ! socket . data . authenticated ) return ;
572+ console . log ( "Got remove trigger request" , data ) ;
573+ const device = findDeviceSocket ( socket . data . subscribedDeviceHwid ) ;
574+ if ( ! device ) {
575+ return ;
576+ }
577+ device . socket . volatile . emit ( "RemoveTrigger" , data , ( ) => {
578+ if ( callback ) callback ( ) ;
579+ } ) ;
580+ } ) ;
581+ socket . on ( "DismissNotification" , ( data : { id : number } , callback ) => {
582+ if ( ! socket . data . authenticated ) return ;
583+ ClearNotifications ( socket . data . subscribedDeviceHwid , data . id ) . then ( ( res ) => {
584+ if ( callback ) callback ( ) ;
585+ } ) ;
586+ } ) ;
587+
588+ socket . on ( "RevokeInviteHash" , ( data : never , callback ) => {
589+ if ( ! socket . data . authenticated ) return ;
590+ InvalidateHash ( socket . data . subscribedDeviceHwid , socket . data . username )
591+ . then ( ( res ) => {
592+ // return new hash
593+ GetOrCreateInviteHash ( socket . data . subscribedDeviceHwid , socket . data . username ) . then ( ( res ) => {
594+ if ( callback )
595+ callback ( {
596+ success : true ,
597+ data : res ,
598+ } ) ;
599+ } ) ;
600+ } )
601+ . catch ( ( e ) => {
602+ console . log ( e ) ;
603+ if ( callback )
604+ callback ( {
605+ success : false ,
606+ message : e ,
607+ } ) ;
608+ } ) ;
609+ } ) ;
610+ socket . on ( "UpdateSubscribedDevice" , ( data : { DeviceName : string ; DeviceDescription : string } , callback ) => {
611+ UpdateDevice ( socket . data . subscribedDeviceHwid , data . DeviceName , data . DeviceDescription ) . then ( ( res ) => {
612+ if ( callback ) callback ( ) ;
613+ } ) ;
614+ } ) ;
531615}
0 commit comments