@@ -49,9 +49,11 @@ function secure (socket, next) {
49
49
handshakeData . cookie = cookie . parse ( handshakeData . headers . cookie )
50
50
handshakeData . sessionID = cookieParser . signedCookie ( handshakeData . cookie [ config . sessionName ] , config . sessionSecret )
51
51
if ( handshakeData . sessionID &&
52
- handshakeData . cookie [ config . sessionName ] &&
53
- handshakeData . cookie [ config . sessionName ] !== handshakeData . sessionID ) {
54
- if ( config . debug ) { logger . info ( 'AUTH success cookie: ' + handshakeData . sessionID ) }
52
+ handshakeData . cookie [ config . sessionName ] &&
53
+ handshakeData . cookie [ config . sessionName ] !== handshakeData . sessionID ) {
54
+ if ( config . debug ) {
55
+ logger . info ( 'AUTH success cookie: ' + handshakeData . sessionID )
56
+ }
55
57
return next ( )
56
58
} else {
57
59
next ( new Error ( 'AUTH failed: Cookie is invalid.' ) )
@@ -184,7 +186,9 @@ setInterval(function () {
184
186
var socket = realtime . io . sockets . connected [ key ]
185
187
if ( ( ! socket && users [ key ] ) ||
186
188
( socket && ( ! socket . rooms || socket . rooms . length <= 0 ) ) ) {
187
- if ( config . debug ) { logger . info ( 'cleaner found redundant user: ' + key ) }
189
+ if ( config . debug ) {
190
+ logger . info ( 'cleaner found redundant user: ' + key )
191
+ }
188
192
if ( ! socket ) {
189
193
socket = {
190
194
id : key
@@ -337,7 +341,9 @@ function emitOnlineUsers (socket) {
337
341
var users = [ ]
338
342
Object . keys ( notes [ noteId ] . users ) . forEach ( function ( key ) {
339
343
var user = notes [ noteId ] . users [ key ]
340
- if ( user ) { users . push ( buildUserOutData ( user ) ) }
344
+ if ( user ) {
345
+ users . push ( buildUserOutData ( user ) )
346
+ }
341
347
} )
342
348
var out = {
343
349
users : users
@@ -403,15 +409,27 @@ function connectNextSocket () {
403
409
function interruptConnection ( socket , noteId , socketId ) {
404
410
if ( notes [ noteId ] ) delete notes [ noteId ]
405
411
if ( users [ socketId ] ) delete users [ socketId ]
406
- if ( socket ) { clearSocketQueue ( connectionSocketQueue , socket ) } else { connectionSocketQueue . shift ( ) }
412
+ if ( socket ) {
413
+ clearSocketQueue ( connectionSocketQueue , socket )
414
+ } else {
415
+ connectionSocketQueue . shift ( )
416
+ }
407
417
connectNextSocket ( )
408
418
}
409
419
410
420
function checkViewPermission ( req , note ) {
411
421
if ( note . permission === 'private' ) {
412
- if ( req . user && req . user . logged_in && req . user . id === note . owner ) { return true } else { return false }
422
+ if ( req . user && req . user . logged_in && req . user . id === note . owner ) {
423
+ return true
424
+ } else {
425
+ return false
426
+ }
413
427
} else if ( note . permission === 'limited' || note . permission === 'protected' ) {
414
- if ( req . user && req . user . logged_in ) { return true } else { return false }
428
+ if ( req . user && req . user . logged_in ) {
429
+ return true
430
+ } else {
431
+ return false
432
+ }
415
433
} else {
416
434
return true
417
435
}
@@ -620,7 +638,9 @@ function disconnect (socket) {
620
638
clearSocketQueue ( disconnectSocketQueue , socket )
621
639
// seek for next socket
622
640
isDisconnectBusy = false
623
- if ( disconnectSocketQueue . length > 0 ) { disconnect ( disconnectSocketQueue [ 0 ] ) }
641
+ if ( disconnectSocketQueue . length > 0 ) {
642
+ disconnect ( disconnectSocketQueue [ 0 ] )
643
+ }
624
644
625
645
if ( config . debug ) {
626
646
// logger.info(notes);
@@ -669,13 +689,20 @@ function ifMayEdit (socket, callback) {
669
689
case 'freely' :
670
690
// not blocking anyone
671
691
break
672
- case 'editable' : case 'limited' :
692
+ case 'editable' :
693
+ case 'limited' :
673
694
// only login user can change
674
- if ( ! socket . request . user || ! socket . request . user . logged_in ) { mayEdit = false }
695
+ if ( ! socket . request . user || ! socket . request . user . logged_in ) {
696
+ mayEdit = false
697
+ }
675
698
break
676
- case 'locked' : case 'private' : case 'protected' :
699
+ case 'locked' :
700
+ case 'private' :
701
+ case 'protected' :
677
702
// only owner can change
678
- if ( ! note . owner || note . owner !== socket . request . user . id ) { mayEdit = false }
703
+ if ( ! note . owner || note . owner !== socket . request . user . id ) {
704
+ mayEdit = false
705
+ }
679
706
break
680
707
}
681
708
// if user may edit and this is a text operation
@@ -777,6 +804,51 @@ class SocketClient {
777
804
this . socket . on ( 'online users' , this . onlineUsersEventHandler . bind ( this ) )
778
805
// reveiced when user logout or changed
779
806
this . socket . on ( 'user changed' , this . userChangedEventHandler . bind ( this ) )
807
+ // delete a note
808
+ this . socket . on ( 'delete' , this . deleteNote . bind ( this ) )
809
+ }
810
+
811
+ isUserLoggedIn ( ) {
812
+ return this . socket . request . user && this . socket . request . user . logged_in
813
+ }
814
+
815
+ getCurrentLoggedInUserId ( ) {
816
+ return get ( this . socket , 'request.user.id' )
817
+ }
818
+
819
+ disconnectSocketOnNote ( note ) {
820
+ note . socks . forEach ( ( sock ) => {
821
+ if ( sock ) {
822
+ sock . emit ( 'delete' )
823
+ setImmediate ( ( ) => {
824
+ sock . disconnect ( true )
825
+ } )
826
+ }
827
+ } )
828
+ }
829
+
830
+ async destroyNote ( id ) {
831
+ return models . Note . destroy ( {
832
+ where : { id : id }
833
+ } )
834
+ }
835
+
836
+ deleteNote ( ) {
837
+ // need login to do more actions
838
+ if ( this . isUserLoggedIn ( ) && this . isNoteAndUserExists ( ) ) {
839
+ const note = this . getCurrentNote ( )
840
+ // Only owner can delete note
841
+ if ( note . owner && note . owner === this . getCurrentLoggedInUserId ( ) ) {
842
+ this . destroyNote ( note . id )
843
+ . then ( ( successRows ) => {
844
+ if ( ! successRows ) return
845
+ this . disconnectSocketOnNote ( note )
846
+ } )
847
+ . catch ( function ( err ) {
848
+ return logger . error ( 'delete note failed: ' + err )
849
+ } )
850
+ }
851
+ }
780
852
}
781
853
782
854
userChangedEventHandler ( ) {
@@ -983,37 +1055,6 @@ function connection (socket) {
983
1055
}
984
1056
}
985
1057
} )
986
-
987
- // delete a note
988
- socket . on ( 'delete' , function ( ) {
989
- // need login to do more actions
990
- if ( socket . request . user && socket . request . user . logged_in ) {
991
- var noteId = socket . noteId
992
- if ( ! noteId || ! notes [ noteId ] ) return
993
- var note = notes [ noteId ]
994
- // Only owner can delete note
995
- if ( note . owner && note . owner === socket . request . user . id ) {
996
- models . Note . destroy ( {
997
- where : {
998
- id : noteId
999
- }
1000
- } ) . then ( function ( count ) {
1001
- if ( ! count ) return
1002
- for ( var i = 0 , l = note . socks . length ; i < l ; i ++ ) {
1003
- var sock = note . socks [ i ]
1004
- if ( typeof sock !== 'undefined' && sock ) {
1005
- sock . emit ( 'delete' )
1006
- setTimeout ( function ( ) {
1007
- sock . disconnect ( true )
1008
- } , 0 )
1009
- }
1010
- }
1011
- } ) . catch ( function ( err ) {
1012
- return logger . error ( 'delete note failed: ' + err )
1013
- } )
1014
- }
1015
- }
1016
- } )
1017
1058
}
1018
1059
1019
1060
exports = module . exports = realtime
0 commit comments