@@ -393,19 +393,29 @@ class ImapNotifier extends EventEmitter {
393393 }
394394
395395 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 || { } ;
400397
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+ }
404404
405- this . connectionSessions . set ( data . session , { service : data . service , user : data . user } ) ;
405+ if ( ! res . success ) {
406+ return callback ( null , false ) ;
407+ }
406408
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+ }
409419 }
410420
411421 releaseConnection ( data , callback ) {
0 commit comments