/* This code is part of Freenet. It is distributed under the GNU General * Public License, version 2 (or at your option any later version). See * http://www.gnu.org/ for further details of the GPL. */ package freenet.support.plugins.helpers1; import java.net.MalformedURLException; import java.util.List; import freenet.keys.FreenetURI; import freenet.support.Logger; public class URISanitizer { public enum Options { NOMETASTRINGS, SSKFORUSK }; public static FreenetURI sanitizeURI(String key, Options... options) throws MalformedURLException { return sanitizeURI(null, key, false, options); } public static FreenetURI sanitizeURI(List<String> errors, String key, boolean breakOnErrors, Options... options) throws MalformedURLException { if (key == null) throw new NullPointerException(); FreenetURI uri = new FreenetURI(key); return sanitizeURI(errors, uri, breakOnErrors, options); } public static FreenetURI sanitizeURI(List<String> errors, FreenetURI key, boolean breakOnErrors, Options... options) throws MalformedURLException { if (key == null) throw new NullPointerException(); FreenetURI tempURI = key; Outer: for (Options option: options) { switch (option) { case NOMETASTRINGS: { if (tempURI.hasMetaStrings()) { if (errors != null) { tempURI = tempURI.setMetaString(null); errors.add("URI did contain meta strings, removed it for you"); if (breakOnErrors) break Outer; } else { throw new MalformedURLException("URIs with meta strings not supported"); } } break; } case SSKFORUSK: { if (tempURI.isUSK()) { if (errors != null) { tempURI = tempURI.sskForUSK(); errors.add("URI was an USK, converted it to SSK for you"); if (breakOnErrors) break Outer; } else { throw new MalformedURLException("USK not supported, use underlying SSK instead."); } } break; } default : Logger.error(URISanitizer.class, "Illegal Option, how can this happen?"); } } return tempURI; } }