You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by ma...@apache.org on 2018/04/25 08:55:41 UTC

[22/24] james-project git commit: JAMES-2381 Enums for Hook response code leads unlock improvements

JAMES-2381 Enums for Hook response code leads unlock improvements

Get ride of variable reallocation, de-duplicate code, and better name
what is being done.


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/aa7b7c7b
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/aa7b7c7b
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/aa7b7c7b

Branch: refs/heads/master
Commit: aa7b7c7b3df4b7fa2647684fece38d0079063d3f
Parents: 796d20f
Author: benwa <bt...@linagora.com>
Authored: Mon Apr 23 10:31:54 2018 +0700
Committer: Matthieu Baechler <ma...@apache.org>
Committed: Wed Apr 25 10:54:25 2018 +0200

----------------------------------------------------------------------
 .../smtp/core/AbstractHookableCmdHandler.java   | 110 +++++++++----------
 .../smtp/core/esmtp/AuthCmdHandler.java         |  89 +++++++--------
 .../protocols/smtp/hook/HookReturnCode.java     |   9 +-
 3 files changed, 104 insertions(+), 104 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/aa7b7c7b/protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/AbstractHookableCmdHandler.java
----------------------------------------------------------------------
diff --git a/protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/AbstractHookableCmdHandler.java b/protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/AbstractHookableCmdHandler.java
index 22723e5..3c42bb3 100644
--- a/protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/AbstractHookableCmdHandler.java
+++ b/protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/AbstractHookableCmdHandler.java
@@ -24,6 +24,7 @@ import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Locale;
+import java.util.Optional;
 
 import javax.inject.Inject;
 
@@ -40,6 +41,7 @@ import org.apache.james.protocols.smtp.hook.HookResult;
 import org.apache.james.protocols.smtp.hook.HookResultHook;
 import org.apache.james.protocols.smtp.hook.HookReturnCode;
 import org.apache.james.util.MDCBuilder;
+import org.apache.james.util.OptionalUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -176,67 +178,63 @@ public abstract class AbstractHookableCmdHandler<HookT extends org.apache.james.
      */
     public static SMTPResponse calcDefaultSMTPResponse(HookResult result) {
         if (result != null) {
-            HookReturnCode rCode = result.getResult();
-            String smtpRetCode = result.getSmtpRetCode();
-            String smtpDesc = result.getSmtpDescription();
-    
-            if (rCode.getAction() == HookReturnCode.Action.DENY) {
-                if (smtpRetCode == null) {
-                    smtpRetCode = SMTPRetCode.TRANSACTION_FAILED;
-                }
-                if (smtpDesc == null) {
-                    smtpDesc = "Email rejected";
-                }
-    
-                SMTPResponse response =  new SMTPResponse(smtpRetCode, smtpDesc);
-                if (rCode.isDisconnected()) {
-                    response.setEndSession(true);
-                }
-                return response;
-            } else if (rCode.getAction() == HookReturnCode.Action.DENYSOFT) {
-                if (smtpRetCode == null) {
-                    smtpRetCode = SMTPRetCode.LOCAL_ERROR;
-                }
-                if (smtpDesc == null) {
-                    smtpDesc = "Temporary problem. Please try again later";
-                }
-    
-                SMTPResponse response = new SMTPResponse(smtpRetCode, smtpDesc);
-                if (rCode.isDisconnected()) {
-                    response.setEndSession(true);
-                }
-                return response;
-            } else if (rCode.getAction() == HookReturnCode.Action.OK) {
-                if (smtpRetCode == null) {
-                    smtpRetCode = SMTPRetCode.MAIL_OK;
-                }
-                if (smtpDesc == null) {
-                    smtpDesc = "Command accepted";
-                }
-    
-                SMTPResponse response = new SMTPResponse(smtpRetCode, smtpDesc);
-                if (rCode.isDisconnected()) {
+            HookReturnCode returnCode = result.getResult();
+
+            String smtpReturnCode = OptionalUtils.or(
+                    Optional.ofNullable(result.getSmtpRetCode()),
+                    retrieveDefaultSmtpReturnCode(returnCode))
+                .orElse(null);
+
+            String smtpDescription = OptionalUtils.or(
+                    Optional.ofNullable(result.getSmtpDescription()),
+                    retrieveDefaultSmtpDescription(returnCode))
+                .orElse(null);
+
+            if (canBeConvertedToSmtpAnswer(returnCode)) {
+
+                SMTPResponse response = new SMTPResponse(smtpReturnCode, smtpDescription);
+                if (returnCode.isDisconnected()) {
                     response.setEndSession(true);
                 }
                 return response;
-            } else if (rCode.isDisconnected()) {
-                if (smtpRetCode == null) {
-                    smtpRetCode = SMTPRetCode.TRANSACTION_FAILED;
-                }
-                if (smtpDesc == null) {
-                    smtpDesc = "Server disconnected";
-                }
-
-                SMTPResponse response =  new SMTPResponse(smtpRetCode, smtpDesc);
-                response.setEndSession(true);
-                return response;
-            } else {
-                // Return null as default
-                return null;
             }
-        } else {
-            return null;
         }
+        return null;
+    }
+
+    public static boolean canBeConvertedToSmtpAnswer(HookReturnCode returnCode) {
+        return HookReturnCode.Action.ACTIVE_ACTIONS
+            .contains(returnCode.getAction()) || returnCode.isDisconnected();
+    }
+
+    private static Optional<String> retrieveDefaultSmtpDescription(HookReturnCode returnCode) {
+        switch (returnCode.getAction()) {
+            case DENY:
+                return Optional.of("Email rejected");
+            case DENYSOFT:
+                return Optional.of("Temporary problem. Please try again later");
+            case OK:
+                return Optional.of("Command accepted");
+        }
+        if (returnCode.isDisconnected()) {
+            return Optional.of("Server disconnected");
+        }
+        return Optional.empty();
+    }
+
+    private static Optional<String> retrieveDefaultSmtpReturnCode(HookReturnCode returnCode) {
+        switch (returnCode.getAction()) {
+            case DENY:
+                return Optional.of(SMTPRetCode.TRANSACTION_FAILED);
+            case DENYSOFT:
+                return Optional.of(SMTPRetCode.LOCAL_ERROR);
+            case OK:
+                return Optional.of(SMTPRetCode.MAIL_OK);
+        }
+        if (returnCode.isDisconnected()) {
+            return Optional.of(SMTPRetCode.TRANSACTION_FAILED);
+        }
+        return Optional.empty();
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/james-project/blob/aa7b7c7b/protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/esmtp/AuthCmdHandler.java
----------------------------------------------------------------------
diff --git a/protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/esmtp/AuthCmdHandler.java b/protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/esmtp/AuthCmdHandler.java
index 0712d67..1992bf0 100644
--- a/protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/esmtp/AuthCmdHandler.java
+++ b/protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/esmtp/AuthCmdHandler.java
@@ -28,6 +28,7 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
 import java.util.Locale;
+import java.util.Optional;
 import java.util.StringTokenizer;
 
 import org.apache.commons.codec.binary.Base64;
@@ -48,6 +49,7 @@ import org.apache.james.protocols.smtp.hook.HookResult;
 import org.apache.james.protocols.smtp.hook.HookResultHook;
 import org.apache.james.protocols.smtp.hook.HookReturnCode;
 import org.apache.james.protocols.smtp.hook.MailParametersHook;
+import org.apache.james.util.OptionalUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -429,64 +431,57 @@ public class AuthCmdHandler
      */
     protected Response calcDefaultSMTPResponse(HookResult result) {
         if (result != null) {
-            HookReturnCode rCode = result.getResult();
-            String smtpRetCode = result.getSmtpRetCode();
-            String smtpDesc = result.getSmtpDescription();
-    
-            if (rCode.getAction() == HookReturnCode.Action.DENY) {
-                if (smtpRetCode == null) {
-                    smtpRetCode = SMTPRetCode.AUTH_FAILED;
-                }
-                if (smtpDesc == null) {
-                    smtpDesc = "Authentication Failed";
-                }
-    
-                SMTPResponse response =  new SMTPResponse(smtpRetCode, smtpDesc);
+            HookReturnCode returnCode = result.getResult();
 
-                if (rCode.isDisconnected()) {
-                    response.setEndSession(true);
-                }
-                return response;
-            } else if (rCode.getAction() == HookReturnCode.Action.DENYSOFT) {
-                if (smtpRetCode == null) {
-                    smtpRetCode = SMTPRetCode.LOCAL_ERROR;
-                }
-                if (smtpDesc == null) {
-                    smtpDesc = "Temporary problem. Please try again later";
-                }
-    
-                SMTPResponse response =  new SMTPResponse(smtpRetCode, smtpDesc);
+            String smtpReturnCode = OptionalUtils.or(
+                Optional.ofNullable(result.getSmtpRetCode()),
+                retrieveDefaultSmtpReturnCode(returnCode))
+                .orElse(null);
 
-                if (rCode.isDisconnected()) {
-                    response.setEndSession(true);
-                }
-                return response;
-            } else if (rCode.getAction() == HookReturnCode.Action.OK) {
-                if (smtpRetCode == null) {
-                    smtpRetCode = SMTPRetCode.AUTH_OK;
-                }
-                if (smtpDesc == null) {
-                    smtpDesc = "Authentication Succesfull";
-                }
-                
-                SMTPResponse response =  new SMTPResponse(smtpRetCode, smtpDesc);
+            String smtpDescription = OptionalUtils.or(
+                Optional.ofNullable(result.getSmtpDescription()),
+                retrieveDefaultSmtpDescription(returnCode))
+                .orElse(null);
+    
+            if (HookReturnCode.Action.ACTIVE_ACTIONS.contains(returnCode.getAction())) {
+                SMTPResponse response =  new SMTPResponse(smtpReturnCode, smtpDescription);
 
-                if (rCode.isDisconnected()) {
+                if (returnCode.isDisconnected()) {
                     response.setEndSession(true);
                 }
                 return response;
-            } else if (rCode.isDisconnected()) {
+            } else if (returnCode.isDisconnected()) {
                 SMTPResponse response =  new SMTPResponse("");
                 response.setEndSession(true);
-            
                 return response;
-            } else {
-                // Return null as default
-                return null;
             }
-        } else {
-            return null;
         }
+        return null;
+
+    }
+
+    private Optional<String> retrieveDefaultSmtpDescription(HookReturnCode returnCode) {
+        switch (returnCode.getAction()) {
+            case DENY:
+                return Optional.of("Authentication Failed");
+            case DENYSOFT:
+                return Optional.of("Temporary problem. Please try again later");
+            case OK:
+                return Optional.of("Authentication Succesfull");
+        }
+        return Optional.empty();
+    }
+
+    private Optional<String> retrieveDefaultSmtpReturnCode(HookReturnCode returnCode) {
+        switch (returnCode.getAction()) {
+            case DENY:
+                return Optional.of(SMTPRetCode.AUTH_FAILED);
+            case DENYSOFT:
+                return Optional.of(SMTPRetCode.LOCAL_ERROR);
+            case OK:
+                return Optional.of(SMTPRetCode.AUTH_OK);
+        }
+        return Optional.empty();
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/james-project/blob/aa7b7c7b/protocols/smtp/src/main/java/org/apache/james/protocols/smtp/hook/HookReturnCode.java
----------------------------------------------------------------------
diff --git a/protocols/smtp/src/main/java/org/apache/james/protocols/smtp/hook/HookReturnCode.java b/protocols/smtp/src/main/java/org/apache/james/protocols/smtp/hook/HookReturnCode.java
index caa9f2c..e2d6d5a 100644
--- a/protocols/smtp/src/main/java/org/apache/james/protocols/smtp/hook/HookReturnCode.java
+++ b/protocols/smtp/src/main/java/org/apache/james/protocols/smtp/hook/HookReturnCode.java
@@ -19,18 +19,25 @@
 
 package org.apache.james.protocols.smtp.hook;
 
+import java.util.List;
 import java.util.Objects;
 
 import com.google.common.base.MoreObjects;
+import com.google.common.collect.ImmutableList;
 
 public class HookReturnCode {
 
+
     public enum Action {
         OK,
         DENY,
         DENYSOFT,
         DECLINED,
-        NONE
+        NONE;
+
+        public static List<Action> ACTIVE_ACTIONS =
+            ImmutableList.of(HookReturnCode.Action.DENY, HookReturnCode.Action.DENYSOFT, HookReturnCode.Action.OK);
+
     }
 
     public enum ConnectionStatus {


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org