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