@@ -246,9 +246,13 @@ public Mono<Boolean> enableAuthConfig(AuthConfigRequest authConfigRequest) {
246246                .then (sessionUserService .getVisitorOrgMemberCache ())
247247                .flatMap (orgMember  -> organizationService .getById (orgMember .getOrgId ()))
248248                .doOnNext (organization  -> {
249-                     boolean  duplicateAuthType  = addOrUpdateNewAuthConfig (organization , authConfigFactory .build (authConfigRequest , true ));
250-                     if (duplicateAuthType ) {
251-                         deferredError (DUPLICATE_AUTH_CONFIG_ADDITION , "DUPLICATE_AUTH_CONFIG_ADDITION" );
249+                     if (authConfigRequest .getId ().equals ("EMAIL" )) {
250+                         organization .setIsEmailDisabled (false );
251+                     } else  {
252+                         boolean  duplicateAuthType  = addOrUpdateNewAuthConfig (organization , authConfigFactory .build (authConfigRequest , true ));
253+                         if  (duplicateAuthType ) {
254+                             deferredError (DUPLICATE_AUTH_CONFIG_ADDITION , "DUPLICATE_AUTH_CONFIG_ADDITION" );
255+                         }
252256                    }
253257                })
254258                .flatMap (organization  -> organizationService .update (organization .getId (), organization ));
@@ -346,22 +350,15 @@ private Mono<Void> checkIfAdmin() {
346350     * If true, throw an exception to avoid disabling the last effective connection way. 
347351     */ 
348352    private  Mono <Void > checkIfOnlyEffectiveCurrentUserConnections (String  authId ) {
349-         Mono <List <String >> userConnectionAuthConfigIdListMono  = sessionUserService .getVisitor ()
350-                 .flatMapIterable (User ::getConnections )
351-                 .filter (connection  -> StringUtils .isNotBlank (connection .getAuthId ()))
352-                 .map (Connection ::getAuthId )
353-                 .collectList ();
354-         Mono <List <String >> orgAuthIdListMono  = authenticationService .findAllAuthConfigs (null , true )
355-                 .map (FindAuthConfig ::authConfig )
356-                 .map (AbstractAuthConfig ::getId )
357-                 .collectList ();
358-         return  Mono .zip (userConnectionAuthConfigIdListMono , orgAuthIdListMono )
359-                 .delayUntil (tuple  -> {
360-                     List <String > userConnectionAuthConfigIds  = tuple .getT1 ();
361-                     List <String > orgAuthConfigIds  = tuple .getT2 ();
362-                     userConnectionAuthConfigIds .retainAll (orgAuthConfigIds );
363-                     userConnectionAuthConfigIds .remove (authId );
364-                     if  (CollectionUtils .isEmpty (userConnectionAuthConfigIds )) {
353+         return  sessionUserService .getVisitorOrgMemberCache ()
354+                 .map (OrgMember ::getOrgId )
355+                 .flatMap (orgId  -> authenticationService .findAllAuthConfigs (orgId , true )
356+                         .map (FindAuthConfig ::authConfig )
357+                         .map (AbstractAuthConfig ::getId )
358+                         .collectList ())
359+                 .delayUntil (orgAuthConfigIds  -> {
360+                     orgAuthConfigIds .remove (authId );
361+                     if  (CollectionUtils .isEmpty (orgAuthConfigIds )) {
365362                        return  Mono .error (new  BizException (DISABLE_AUTH_CONFIG_FORBIDDEN , "DISABLE_AUTH_CONFIG_FORBIDDEN" ));
366363                    }
367364                    return  Mono .empty ();
@@ -370,26 +367,29 @@ private Mono<Void> checkIfOnlyEffectiveCurrentUserConnections(String authId) {
370367    }
371368
372369    private  void  disableAuthConfig (Organization  organization , String  authId , boolean  delete ) {
373- 
374-         Predicate <AbstractAuthConfig > authConfigPredicate  = abstractAuthConfig  -> Objects .equals (abstractAuthConfig .getId (), authId );
375- 
376-         if (delete ) {
377-             List <AbstractAuthConfig > abstractAuthConfigs  = Optional .of (organization )
378-                     .map (Organization ::getAuthConfigs )
379-                     .orElse (Collections .emptyList ());
380- 
381-             abstractAuthConfigs .removeIf (authConfigPredicate );
382- 
383-             organization .getOrganizationDomain ().setConfigs (abstractAuthConfigs );
384- 
370+         if (authId .equals ("EMAIL" )) {
371+             organization .setIsEmailDisabled (true );
385372        } else  {
386-             Optional .of (organization )
387-                     .map (Organization ::getAuthConfigs )
388-                     .orElse (Collections .emptyList ()).stream ()
389-                     .filter (authConfigPredicate )
390-                     .forEach (abstractAuthConfig  -> {
391-                         abstractAuthConfig .setEnable (false );
392-                     });
373+             Predicate <AbstractAuthConfig > authConfigPredicate  = abstractAuthConfig  -> Objects .equals (abstractAuthConfig .getId (), authId );
374+ 
375+             if  (delete ) {
376+                 List <AbstractAuthConfig > abstractAuthConfigs  = Optional .of (organization )
377+                         .map (Organization ::getAuthConfigs )
378+                         .orElse (Collections .emptyList ());
379+ 
380+                 abstractAuthConfigs .removeIf (authConfigPredicate );
381+ 
382+                 organization .getOrganizationDomain ().setConfigs (abstractAuthConfigs );
383+ 
384+             } else  {
385+                 Optional .of (organization )
386+                         .map (Organization ::getAuthConfigs )
387+                         .orElse (Collections .emptyList ()).stream ()
388+                         .filter (authConfigPredicate )
389+                         .forEach (abstractAuthConfig  -> {
390+                             abstractAuthConfig .setEnable (false );
391+                         });
392+             }
393393        }
394394    }
395395
0 commit comments