public KeycloakUriBuilder fragment(String fragment) throws IllegalArgumentException { if (fragment == null) { this.fragment = null; return this; } this.fragment = Encode.encodeFragment(fragment); return this; }
/** * Keep any valid encodings from string i.e. keep "%2D" but don't keep "%p" * * @param segment * @return */ public static String encodeQueryParamSaveEncodings(String segment) { String result = encodeFromArray(segment, queryNameValueEncoding, false); result = encodeNonCodes(result); return result; }
public KeycloakUriBuilder replacePath(String path) { if (path == null) { this.path = null; return this; } this.path = Encode.encodePath(path); return this; }
/** * Keep encoded values "%..." and template parameters intact i.e. "{x}" * * @param segment * @param encoding * @return */ public static String encodeValue(String segment, String[] encoding) { ArrayList<String> params = new ArrayList<String>(); boolean foundParam = false; StringBuilder newSegment = new StringBuilder(); if (savePathParams(segment, newSegment, params)) { foundParam = true; segment = newSegment.toString(); } String result = encodeFromArray(segment, encoding, false); result = encodeNonCodes(result); segment = result; if (foundParam) { segment = pathParamReplacement(segment, params); } return segment; }
protected StringBuffer replaceParameter(Map<String, ?> paramMap, boolean fromEncodedMap, boolean isTemplate, String string, StringBuffer buffer, boolean encodeSlash) { Matcher matcher = createUriParamMatcher(string); while (matcher.find()) { String param = matcher.group(1); Object valObj = paramMap.get(param); if (valObj == null && !isTemplate) { throw new IllegalArgumentException("NULL value for template parameter: " + param); } else if (valObj == null && isTemplate) { matcher.appendReplacement(buffer, matcher.group()); continue; } String value = valObj.toString(); if (value != null) { if (!fromEncodedMap) { if (encodeSlash) value = Encode.encodePathSegmentAsIs(value); else value = Encode.encodePathAsIs(value); } else { if (encodeSlash) value = Encode.encodePathSegmentSaveEncodings(value); else value = Encode.encodePathSaveEncodings(value); } matcher.appendReplacement(buffer, Matcher.quoteReplacement(value)); } else { throw new IllegalArgumentException("path param " + param + " has not been provided by the parameter map"); } } matcher.appendTail(buffer); return buffer; }
protected StringBuffer replacePathParameter(String name, String value, boolean isEncoded, String string, StringBuffer buffer, boolean encodeSlash) { Matcher matcher = createUriParamMatcher(string); while (matcher.find()) { String param = matcher.group(1); if (!param.equals(name)) continue; if (!isEncoded) { if (encodeSlash) value = Encode.encodePath(value); else value = Encode.encodePathSegment(value); } else { value = Encode.encodeNonCodes(value); } // if there is a $ then we must backslash it or it will screw up regex group substitution value = value.replace("$", "\\$"); matcher.appendReplacement(buffer, value); } matcher.appendTail(buffer); return buffer; }
protected StringBuffer replaceQueryStringParameter(Map<String, ?> paramMap, boolean fromEncodedMap, boolean isTemplate, String string, StringBuffer buffer) { Matcher matcher = createUriParamMatcher(string); while (matcher.find()) { String param = matcher.group(1); Object valObj = paramMap.get(param); if (valObj == null && !isTemplate) { throw new IllegalArgumentException("NULL value for template parameter: " + param); } else if (valObj == null && isTemplate) { matcher.appendReplacement(buffer, matcher.group()); continue; } String value = valObj.toString(); if (value != null) { if (!fromEncodedMap) { value = Encode.encodeQueryParamAsIs(value); } else { value = Encode.encodeQueryParamSaveEncodings(value); } matcher.appendReplacement(buffer, value); } else { throw new IllegalArgumentException("path param " + param + " has not been provided by the parameter map"); } } matcher.appendTail(buffer); return buffer; }
public KeycloakUriBuilder queryParam(String name, Object... values) throws IllegalArgumentException { if (name == null) throw new IllegalArgumentException("name parameter is null"); if (values == null) throw new IllegalArgumentException("values parameter is null"); for (Object value : values) { if (value == null) throw new IllegalArgumentException("A passed in value was null"); if (query == null) query = ""; else query += "&"; query += Encode.encodeQueryParamAsIs(name) + "=" + Encode.encodeQueryParamAsIs(value.toString()); } return this; }
/** * @see io.apicurio.hub.api.connectors.AbstractSourceConnector#parseExternalTokenResponse(java.lang.String) */ protected Map<String, String> parseExternalTokenResponse(String body) { Map<String, String> rval = new HashMap<>(); String[] split1 = body.split("&"); for (String item : split1) { String[] split2 = item.split("="); String encodedKey = split2[0]; String encodedVal = split2[1]; String key = Encode.decode(encodedKey); String val = Encode.decode(encodedVal); rval.put(key, val); } return rval; }
/** * Encodes everything of a query parameter name or value. * * @param nameOrValue * @return */ public static String encodeQueryParamAsIs(String nameOrValue) { return encodeFromArray(nameOrValue, queryNameValueEncoding, true); }
public KeycloakUriBuilder matrixParam(String name, Object... values) throws IllegalArgumentException { if (name == null) throw new IllegalArgumentException("name parameter is null"); if (values == null) throw new IllegalArgumentException("values parameter is null"); if (path == null) path = ""; for (Object val : values) { if (val == null) throw new IllegalArgumentException("null value"); path += ";" + Encode.encodeMatrixParam(name) + "=" + Encode.encodeMatrixParam(val.toString()); } return this; }
public static String decodePath(String path) { Matcher matcher = encodedCharsMulti.matcher(path); int start=0; StringBuilder builder = new StringBuilder(); CharsetDecoder decoder = Charset.forName(UTF_8).newDecoder(); while (matcher.find()) { builder.append(path, start, matcher.start()); decoder.reset(); String decoded = decodeBytes(matcher.group(1), decoder); builder.append(decoded); start = matcher.end(); } builder.append(path, start, path.length()); return builder.toString(); }
protected static String encodeFromArray(String segment, String[] encodingMap, boolean encodePercent) { StringBuilder result = new StringBuilder(); for (int i = 0; i < segment.length(); i++) { char currentChar = segment.charAt(i); if (!encodePercent && currentChar == '%') { result.append(currentChar); continue; } String encoding = encode(currentChar, encodingMap); if (encoding == null) { result.append(currentChar); } else { result.append(encoding); } } return result.toString(); }
/** * @see java.lang.Object#toString() */ @Override public String toString() { if (this.queryParams.isEmpty()) { return this.url; } final StringBuilder url = new StringBuilder(this.url); boolean first = true; for (Entry<String, String> entry : this.queryParams.entrySet()) { String key = entry.getKey(); String value = entry.getValue(); String sep = "&"; if (first) { sep = "?"; first = false; } url.append(sep); url.append(Encode.encodeQueryParamAsIs(key)); url.append("="); url.append(Encode.encodeQueryParamAsIs(value)); } return url.toString(); }
/** * Encode via <a href="http://ietf.org/rfc/rfc3986.txt">RFC 3986</a>. PCHAR is allowed allong with '/' * <p/> * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" * sub-delims = "!" / "$" / "&" / "'" / "(" / ")" * / "*" / "+" / "," / ";" / "=" * pchar = unreserved / pct-encoded / sub-delims / ":" / "@" */ public static String encodePathAsIs(String segment) { return encodeFromArray(segment, pathEncoding, true); }
/** * Keep any valid encodings from string i.e. keep "%2D" but don't keep "%p" * * @param segment * @return */ public static String encodePathSegmentSaveEncodings(String segment) { String result = encodeFromArray(segment, pathSegmentEncoding, false); result = encodeNonCodes(result); return result; }
/** * Encode via <a href="http://ietf.org/rfc/rfc3986.txt">RFC 3986</a>. PCHAR is allowed allong with '/' * <p/> * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" * sub-delims = "!" / "$" / "&" / "'" / "(" / ")" * / "*" / "+" / "," / ";" / "=" * pchar = unreserved / pct-encoded / sub-delims / ":" / "@" */ public static String encodePathSegmentAsIs(String segment) { return encodeFromArray(segment, pathSegmentEncoding, true); }
public KeycloakUriBuilder replaceMatrix(String matrix) throws IllegalArgumentException { if (matrix == null) matrix = ""; if (!matrix.startsWith(";")) matrix = ";" + matrix; matrix = Encode.encodePath(matrix); if (path == null) { path = matrix; } else { int start = path.lastIndexOf('/'); if (start < 0) start = 0; int matrixIndex = path.indexOf(';', start); if (matrixIndex > -1) path = path.substring(0, matrixIndex) + matrix; else path += matrix; } return this; }
/** * Keep any valid encodings from string i.e. keep "%2D" but don't keep "%p" * * @param segment * @return */ public static String encodePathSaveEncodings(String segment) { String result = encodeFromArray(segment, pathEncoding, false); result = encodeNonCodes(result); return result; }