diff --git a/modules/src/main/java/org/archive/modules/forms/HTMLForm.java b/modules/src/main/java/org/archive/modules/forms/HTMLForm.java index 08a28624..cdbb3213 100644 --- a/modules/src/main/java/org/archive/modules/forms/HTMLForm.java +++ b/modules/src/main/java/org/archive/modules/forms/HTMLForm.java @@ -27,6 +27,7 @@ import org.apache.commons.httpclient.NameValuePair; import org.apache.commons.lang.StringUtils; import org.apache.http.HttpEntity; import org.apache.http.entity.ContentType; +import org.apache.http.entity.mime.HttpMultipartMode; import org.apache.http.entity.mime.MultipartEntityBuilder; import org.apache.http.entity.mime.content.StringBody; import org.archive.util.TextUtils; @@ -71,10 +72,16 @@ public class HTMLForm { public void addField(String type, String name, String value, boolean checked) { FormInput input = new FormInput(); input.type = type; + + if (isMultipleFormSubmitInputs(type)) { + return; + } + // default input type is text per html standard if (input.type == null) { input.type = "text"; } + input.name = name; input.value = value; allInputs.add(input); @@ -96,6 +103,18 @@ public class HTMLForm { public void addField(String type, String name, String value) { addField(type, name, value, false); } + + public boolean isMultipleFormSubmitInputs(String type) { + if (!type.toLowerCase().equals("submit")) return false; + + for (FormInput input : allInputs) { + if (input.type.toLowerCase().equals("submit")) { + return true; + } + } + + return false; + } public void setMethod(String method) { this.method = method; @@ -166,30 +185,33 @@ public class HTMLForm { } return data.toArray(new NameValuePair[data.size()]); } + + public FormInput getLoginInputFromCandidates() { + if (candidateUsernameInputs == null) return null; + + if (candidateUsernameInputs.size() == 1) return candidateUsernameInputs.get(0); + + for (FormInput input : candidateUsernameInputs) { + + if (input.name != null && input.name.toLowerCase().indexOf("login") != -1) { + return input; + } + } + + return null; + } public HttpEntity asFormDataMultiPartEntity(String username, String password) { - //List nameVals = new LinkedList(); MultipartEntityBuilder multiPartEntityBuilder = MultipartEntityBuilder.create(); + multiPartEntityBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE); for (FormInput input : allInputs) { - if ("dnn$ctr577$AACC_Login$txtFirstName".equals(input.name) - || "dnn$ctr577$AACC_Login$txtLastName".equals(input.name) - || "dnn$ctr577$AACC_Login$cmdContinue".equals(input.name) - || "dnn$ctr577$AACC_Login$txtEmailId".equals(input.name) - || "dnn$ctr577$AACC_Login$ctlCaptcha".equals(input.name)) { - - continue; - } - - if(input == candidateUsernameInputs.get(0)) { - multiPartEntityBuilder.addPart(TextUtils.urlEscape(input.name), new StringBody(TextUtils.urlEscape(username), ContentType.MULTIPART_FORM_DATA)); - //nameVals.add(TextUtils.urlEscape(input.name) + "=" + TextUtils.urlEscape(username)); + if(input == getLoginInputFromCandidates()) { + multiPartEntityBuilder.addPart(input.name, new StringBody(username, ContentType.MULTIPART_FORM_DATA)); } else if(input == candidatePasswordInputs.get(0)) { - multiPartEntityBuilder.addPart(TextUtils.urlEscape(input.name), new StringBody(TextUtils.urlEscape(password), ContentType.MULTIPART_FORM_DATA)); - //nameVals.add(TextUtils.urlEscape(input.name) + "=" + TextUtils.urlEscape(password)); + multiPartEntityBuilder.addPart(input.name, new StringBody(password, ContentType.MULTIPART_FORM_DATA)); } else if (StringUtils.isNotEmpty(input.name)) { - multiPartEntityBuilder.addPart(TextUtils.urlEscape(input.name), new StringBody(TextUtils.urlEscape(StringUtils.isNotEmpty(input.value) ? input.value : ""), ContentType.MULTIPART_FORM_DATA)); - //nameVals.add(TextUtils.urlEscape(input.name) + "=" + TextUtils.urlEscape(input.value)); + multiPartEntityBuilder.addPart(input.name, new StringBody(StringUtils.isNotEmpty(input.value) ? input.value : "", ContentType.MULTIPART_FORM_DATA)); } }