/*
* Signature.java
*
* Created on 23 February 2005, 08:30
*/
package org.owasp.webscarab.plugin.fuzz;
import java.net.MalformedURLException;
import org.owasp.webscarab.model.Request;
import org.owasp.webscarab.model.HttpUrl;
import java.util.ArrayList;
import java.util.List;
/**
*
* @author rogan
*/
public class Signature {
private String _method;
private HttpUrl _url;
private String _contentType;
private Parameter[] _parameters;
/** Creates a new instance of Signature */
public Signature(Request request) {
_method = request.getMethod();
_url = request.getURL();
if (_url.getParameters() != null) _url = _url.getParentUrl();
_contentType = request.getHeader("Content-Type");
_parameters = Parameter.getParameters(request);
}
public Signature(String signature) throws MalformedURLException {
String[] parts = signature.split(" ");
_method = parts[0];
_url = new HttpUrl(parts[1]);
_contentType = parts[2].substring(1, parts[2].length()-1);
if (_contentType.equals("null"))
_contentType = null;
List<Parameter> parameters = new ArrayList<Parameter>();
for (int i=3; i<parts.length; i++) {
int colon = parts[i].indexOf(":");
String location = parts[i].substring(0, colon);
int left = parts[i].indexOf('(', colon);
String name = parts[i].substring(colon+1, left);
String type = parts[i].substring(left+1, parts[i].length()-1);
Parameter param = new Parameter(location, name, type, "");
parameters.add(param);
}
_parameters = parameters.toArray(Parameter.NO_PARAMS);
}
public String getMethod() {
return _method;
}
public HttpUrl getUrl() {
return _url;
}
public String getContentType() {
return _contentType;
}
public Parameter[] getParameters() {
return _parameters;
}
public String toString() {
StringBuffer buff = new StringBuffer();
buff.append(_method).append(" ").append(_url).append(" ");
buff.append("(").append(_contentType).append(")");
for (int i=0; i<_parameters.length; i++) {
buff.append(" ").append(_parameters[i].getLocation()).append(":").append(_parameters[i].getName());
buff.append("(").append(_parameters[i].getType()).append(")");
}
return buff.toString();
}
public boolean equals(Object obj) {
if (obj == null || !(obj instanceof Signature)) return false;
Signature that = (Signature) obj;
if (!_method.equals(that._method)) return false;
if (!_url.equals(that._url)) return false;
if (_contentType == null && that._contentType != null) return false;
if (_contentType != null && that._contentType == null) return false;
if (_contentType != null && !_contentType.equals(that._contentType)) return false;
if (_parameters.length != that._parameters.length) return false;
for (int i=0; i<_parameters.length; i++) {
if (! _parameters[i].equals(that._parameters[i])) return false;
}
return true;
}
}