@@ -393,19 +393,29 @@ class ImapNotifier extends EventEmitter {
393
393
}
394
394
395
395
let rlkey = 'lim:' + data . service ;
396
- this . counters . limitedcounter ( rlkey , data . user , 1 , data . limit || 15 , ( err , res ) => {
397
- if ( err ) {
398
- return callback ( err ) ;
399
- }
396
+ const { closed : socketClosed , connecting, destroyed } = data . session ?. socket || { } ;
400
397
401
- if ( ! res . success ) {
402
- return callback ( null , false ) ;
403
- }
398
+ if ( ! socketClosed && ! connecting && ! destroyed ) {
399
+ // socket alive, not closed
400
+ this . counters . limitedcounter ( rlkey , data . user , 1 , data . limit || 15 , ( err , res ) => {
401
+ if ( err ) {
402
+ return callback ( err ) ;
403
+ }
404
404
405
- this . connectionSessions . set ( data . session , { service : data . service , user : data . user } ) ;
405
+ if ( ! res . success ) {
406
+ return callback ( null , false ) ;
407
+ }
406
408
407
- return callback ( null , true ) ;
408
- } ) ;
409
+ this . connectionSessions . set ( data . session , { service : data . service , user : data . user } ) ;
410
+
411
+ return callback ( null , true ) ;
412
+ } ) ;
413
+ } else {
414
+ // socket dead/closed/undefined
415
+ const err = new Error ( '[ALERT] Socket closed unexpectedly before authentication completed.' ) ;
416
+ err . response = 'NO' ;
417
+ return callback ( err , false ) ;
418
+ }
409
419
}
410
420
411
421
releaseConnection ( data , callback ) {
0 commit comments