blob: 5ebf96c1f42f2cf1ea8bcc922e7c6ee59a012ac6 [file] [log] [blame]
/****************************************************************
* Licensed to the Apache Software Foundation (ASF) under one *
* or more contributor license agreements. See the NOTICE file *
* distributed with this work for additional information *
* regarding copyright ownership. The ASF licenses this file *
* to you under the Apache License, Version 2.0 (the *
* "License"); you may not use this file except in compliance *
* with the License. You may obtain a copy of the License at *
* *
* http://www.apache.org/licenses/LICENSE-2.0 *
* *
* Unless required by applicable law or agreed to in writing, *
* software distributed under the License is distributed on an *
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
* KIND, either express or implied. See the License for the *
* specific language governing permissions and limitations *
* under the License. *
****************************************************************/
package org.apache.james.jspf.executor;
import org.apache.james.jspf.core.SPF1Utils;
import org.apache.james.jspf.core.SPFSession;
import org.apache.james.jspf.core.exceptions.SPFErrorConstants;
/**
* This class is used to return the result of an SPF lookup.
*
*/
public class SPFResult {
protected String headerTextAsString = "";
protected final static String HEADER_NAME = "Received-SPF";
protected String result = null;
protected String explanation = null;
protected SPFResult() {
}
/**
* Construct SPFResult
*
* @param spfSession the SPFSession
*/
public SPFResult(SPFSession spfSession) {
setSPFSession(spfSession);
}
/**
* Initialize the result.
*
* @param spfSession
*/
protected void setSPFSession(SPFSession spfSession) {
this.explanation = spfSession.getExplanation();
this.result = spfSession.getCurrentResultExpanded();
this.headerTextAsString = generateHeader(result, spfSession);
}
/**
* Get the full SPF-Header (headername and headertext)
*
* @return SPF-Header
*/
public String getHeader() {
return HEADER_NAME+": "+getHeaderText();
}
/**
* Get the SPF-Headername
*
* @return headername
*/
public String getHeaderName() {
return HEADER_NAME;
}
/**
* Get SPF-Headertext
*
* @return headertext
*/
public String getHeaderText() {
return headerTextAsString != null ? headerTextAsString : "";
}
/**
* Generate a SPF-Result header
*
* @param result The result we should use to generate the header
*/
private String generateHeader(String result, SPFSession spfData) {
StringBuffer headerText = new StringBuffer();
if (result.equals(SPFErrorConstants.PASS_CONV)) {
headerText.append(result + " (spfCheck: domain of "
+ spfData.getCurrentDomain() + " designates "
+ spfData.getIpAddress() + " as permitted sender) ");
} else if (result.equals(SPFErrorConstants.FAIL_CONV)) {
headerText.append(result + " (spfCheck: domain of "
+ spfData.getCurrentDomain() + " does not designate "
+ spfData.getIpAddress() + " as permitted sender) ");
} else if (result.equals(SPFErrorConstants.NEUTRAL_CONV)
|| result.equals(SPFErrorConstants.NONE_CONV)) {
headerText.append(result + " (spfCheck: " + spfData.getIpAddress()
+ " is neither permitted nor denied by domain of "
+ spfData.getCurrentDomain() + ") ");
} else if (result.equals(SPFErrorConstants.SOFTFAIL_CONV)) {
headerText.append(result + " (spfCheck: transitioning domain of "
+ spfData.getCurrentDomain() + " does not designate "
+ spfData.getIpAddress() + " as permitted sender) ");
} else if (result.equals(SPFErrorConstants.PERM_ERROR_CONV)) {
headerText.append(result
+ " (spfCheck: Error in processing SPF Record) ");
} else if (result.equals(SPFErrorConstants.TEMP_ERROR_CONV)) {
headerText.append(result
+ " (spfCheck: Error in retrieving data from DNS) ");
}
String headerTextAsString;
if (headerText.length() > 0) {
headerText.append("client-ip=" + spfData.getIpAddress()
+ "; envelope-from=" + spfData.getMailFrom() + "; helo="
+ spfData.getHostName() + ";");
headerTextAsString = headerText.toString();
} else {
headerTextAsString = "";
}
return headerTextAsString;
}
/**
* Get the result string
*
* @see SPF1Utils
* @return result
*/
public String getResult() {
return result;
}
/**
* Get the explanation string
* If no explanation exists return the empty string
*
* @return explanation
*/
public String getExplanation() {
return explanation != null ? explanation : "";
}
}