/* * Copyright 2002-2011 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.springframework.security.oauth2.common.util; import java.util.Arrays; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Properties; import java.util.Set; import java.util.TreeSet; import org.springframework.util.StringUtils; /** * @author Ryan Heaton * @author Dave Syer */ public abstract class OAuth2Utils { /** * Constant to use while parsing and formatting parameter maps for OAuth2 requests */ public static final String CLIENT_ID = "client_id"; /** * Constant to use while parsing and formatting parameter maps for OAuth2 requests */ public static final String STATE = "state"; /** * Constant to use while parsing and formatting parameter maps for OAuth2 requests */ public static final String SCOPE = "scope"; /** * Constant to use while parsing and formatting parameter maps for OAuth2 requests */ public static final String REDIRECT_URI = "redirect_uri"; /** * Constant to use while parsing and formatting parameter maps for OAuth2 requests */ public static final String RESPONSE_TYPE = "response_type"; /** * Constant to use while parsing and formatting parameter maps for OAuth2 requests */ public static final String USER_OAUTH_APPROVAL = "user_oauth_approval"; /** * Constant to use as a prefix for scope approval */ public static final String SCOPE_PREFIX = "scope."; /** * Constant to use while parsing and formatting parameter maps for OAuth2 requests */ public static final String GRANT_TYPE = "grant_type"; /** * Parses a string parameter value into a set of strings. * * @param values The values of the set. * @return The set. */ public static Set<String> parseParameterList(String values) { Set<String> result = new TreeSet<String>(); if (values != null && values.trim().length() > 0) { // the spec says the scope is separated by spaces String[] tokens = values.split("[\\s+]"); result.addAll(Arrays.asList(tokens)); } return result; } /** * Formats a set of string values into a format appropriate for sending as a single-valued form value. * * @param value The value of the parameter. * @return The value formatted for form submission etc, or null if the input is empty */ public static String formatParameterList(Collection<String> value) { return value == null ? null : StringUtils.collectionToDelimitedString(value, " "); } /** * Extract a map from a query string. * * @param query a query (or fragment) string from a URI * @return a Map of the values in the query */ public static Map<String, String> extractMap(String query) { Map<String, String> map = new HashMap<String, String>(); Properties properties = StringUtils.splitArrayElementsIntoProperties( StringUtils.delimitedListToStringArray(query, "&"), "="); if (properties != null) { for (Object key : properties.keySet()) { map.put(key.toString(), properties.get(key).toString()); } } return map; } /** * Compare 2 sets and check that one contains all members of the other. * * @param target set of strings to check * @param members the members to compare to * @return true if all members are in the target */ public static boolean containsAll(Set<String> target, Set<String> members) { target = new HashSet<String>(target); target.retainAll(members); return target.size() == members.size(); } }