/******************************************************************************* * Copyright 2014 Federal Chancellery Austria * MOA-ID has been developed in a cooperation between BRZ, the Federal * Chancellery Austria - ICT staff unit, and Graz University of Technology. * * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by * the European Commission - subsequent versions of the EUPL (the "Licence"); * You may not use this work except in compliance with the Licence. * You may obtain a copy of the Licence at: * http://www.osor.eu/eupl/ * * Unless required by applicable law or agreed to in writing, software * distributed under the Licence is distributed on an "AS IS" basis, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the Licence for the specific language governing permissions and * limitations under the Licence. * * This product combines work with different licenses. See the "NOTICE" text * file for details on the various modules and licenses. * The "NOTICE" text file is part of the distribution. Any derivative works * that you distribute must include a readable copy of the "NOTICE" text file. *******************************************************************************/ package at.gv.egovernment.moa.id.protocols.oauth20; import java.io.UnsupportedEncodingException; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.apache.commons.lang.StringUtils; import com.google.gson.JsonObject; public final class OAuth20Util { public static final String REGEX_HTTPS = "^(https?)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]"; public static final String REGEX_FILE = "^(file):/.[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]"; private OAuth20Util() { throw new InstantiationError(); } /** * Simple helper function to add parameter to a url * * @param url * @param name * @param value * @throws UnsupportedEncodingException */ public static void addParameterToURL(final StringBuilder url, final String name, final String value) throws UnsupportedEncodingException { if (url.indexOf("?") < 0) { url.append("?"); } else { url.append("&"); } // URLEncoder.encode(value, "UTF-8") url.append(name).append("=").append(value); } public static boolean isUrl(final String url) { Pattern urlPattern; if (url.startsWith("file")) { urlPattern = Pattern.compile(REGEX_FILE, Pattern.CASE_INSENSITIVE); } else { urlPattern = Pattern.compile(REGEX_HTTPS, Pattern.CASE_INSENSITIVE); } Matcher matcher = urlPattern.matcher(url); return matcher.find(); } public static boolean isValidStateValue(String state) { Pattern urlPattern = Pattern.compile("javascript|<|>|&|;", Pattern.CASE_INSENSITIVE); Matcher matcher = urlPattern.matcher(state); return !matcher.find(); } public static void addProperytiesToJsonObject(JsonObject jsonObject, Map params) { for (Map.Entry param : params.entrySet()) { if (!StringUtils.isEmpty(param.getKey()) && param.getValue() != null) { // check for integer try { int i = Integer.parseInt(String.valueOf(param.getValue())); jsonObject.addProperty(param.getKey(), i); continue; } catch (NumberFormatException e) { } // check for long try { long l = Long.parseLong(String.valueOf(param.getValue())); jsonObject.addProperty(param.getKey(), l); continue; } catch (NumberFormatException e) { } // string if (param.getValue() instanceof String) { jsonObject.addProperty(param.getKey(), String.valueOf(param.getValue())); } } } } }