blob: 5dc1854ddc9e8bcf8d1579b77c487c899e25410b [file] [log] [blame]
package com.gitblit.wicket;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.util.lang.Objects;
import org.parboiled.common.StringUtils;
import org.slf4j.LoggerFactory;
public class SafeTextModel implements IModel<String> {
private static final long serialVersionUID = 1L;
public enum Mode {
relaxed, none
}
private final Mode mode;
private String value;
public static SafeTextModel none() {
return new SafeTextModel(Mode.none);
}
public static SafeTextModel none(String value) {
return new SafeTextModel(value, Mode.none);
}
public static SafeTextModel relaxed() {
return new SafeTextModel(Mode.relaxed);
}
public static SafeTextModel relaxed(String value) {
return new SafeTextModel(value, Mode.relaxed);
}
public SafeTextModel(Mode mode) {
this.mode = mode;
}
public SafeTextModel(String value, Mode mode) {
this.value = value;
this.mode = mode;
}
@Override
public void detach() {
}
@Override
public String getObject() {
if (StringUtils.isEmpty(value)) {
return value;
}
String safeValue;
switch (mode) {
case none:
safeValue = GitBlitWebApp.get().xssFilter().none(value);
break;
default:
safeValue = GitBlitWebApp.get().xssFilter().relaxed(value);
break;
}
if (!value.equals(safeValue)) {
LoggerFactory.getLogger(getClass()).warn("XSS filter trigggered on suspicious form field value {}",
value);
}
return safeValue;
}
@Override
public void setObject(String input) {
this.value = input;
}
@Override
public int hashCode()
{
return Objects.hashCode(value);
}
@Override
public boolean equals(Object obj)
{
if (this == obj)
{
return true;
}
if (!(obj instanceof Model<?>))
{
return false;
}
Model<?> that = (Model<?>)obj;
return Objects.equal(value, that.getObject());
}
}