/*
* Zed Attack Proxy (ZAP) and its related class files.
*
* ZAP is an HTTP/HTTPS proxy for assessing web application security.
*
* Copyright 2010 psiinon@gmail.com
*
* Licensed 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.
*
* ZAP - 2013/09/09: Cleanup and lazy initialization of flags (speed-up)
*/
package org.parosproxy.paros.network;
import java.util.HashSet;
import java.util.Set;
public class HtmlParameter implements Comparable<HtmlParameter> {
public enum Type {
cookie, form, url, header
};
public enum Flags {
anticsrf, session, structural
};
private String name;
private String value;
private Type type;
private Set<String> flags;
public HtmlParameter(Type type, String name, String value) {
super();
this.name = name;
this.value = value;
this.type = type;
}
public HtmlParameter(String cookieLine) {
super();
String[] array = cookieLine.split(";");
if (array == null || array.length == 0) {
throw new IllegalArgumentException(cookieLine);
}
int eqOffset = array[0].indexOf("=");
if (eqOffset <= 0) {
throw new IllegalArgumentException(cookieLine);
}
this.type = Type.cookie;
this.name = array[0].substring(0, eqOffset).trim();
this.value = array[0].substring(eqOffset + 1).trim();
if (array.length > 1) {
for (int i = 1; i < array.length; i++) {
this.addFlag(array[i].trim());
}
}
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public Type getType() {
return type;
}
public void setType(Type type) {
this.type = type;
}
public Set<String> getFlags() {
if (this.flags == null)
this.flags = new HashSet<>();
return this.flags;
}
public void addFlag(String flag) {
this.getFlags().add(flag);
}
@Override
public int compareTo(HtmlParameter o) {
if (o == null) {
return 1;
}
int result = this.type.ordinal() - o.getType().ordinal();
if (result == 0) {
// Same type
result = this.name.compareTo(o.getName());
}
if (result == 0) {
// Same type and name
result = this.value.compareTo(o.getValue());
}
return result;
}
@Override
public String toString() {
return "HtmlParameter type = " + type + " name= " + name + " value=" + value;
}
}