package com.hubspot.singularity.runner.base.jackson; import static com.hubspot.mesos.JavaUtils.obfuscateValue; import java.io.IOException; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.Version; import com.fasterxml.jackson.databind.AnnotationIntrospector; import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.SerializerProvider; import com.fasterxml.jackson.databind.introspect.Annotated; import com.google.common.base.Optional; public class ObfuscateAnnotationIntrospector extends AnnotationIntrospector { private static final long serialVersionUID = 1L; private static final ObfuscateSerializer OBFUSCATE_SERIALIZER = new ObfuscateSerializer(); @Override public Version version() { return Version.unknownVersion(); } @Override public Object findSerializer(Annotated am) { if (am.hasAnnotation(Obfuscate.class)) { return OBFUSCATE_SERIALIZER; } else { return null; } } public static class ObfuscateSerializer extends JsonSerializer<Object> { @Override public void serialize(Object value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException { if (value instanceof Optional) { if (((Optional<?>)value).isPresent()) { jgen.writeString(obfuscateValue(((Optional<?>)value).get().toString())); } else { jgen.writeNull(); } } else { jgen.writeString(obfuscateValue(value.toString())); } } } }