/* * (C) Copyright 2000-2003 Yale University. All rights reserved. * * THIS SOFTWARE IS PROVIDED "AS IS," AND ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE EXPRESSLY * DISCLAIMED. IN NO EVENT SHALL YALE UNIVERSITY OR ITS EMPLOYEES BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED, THE COSTS OF * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED IN ADVANCE OF THE POSSIBILITY OF SUCH * DAMAGE. * * Redistribution and use of this software in source or binary forms, * with or without modification, are permitted, provided that the * following conditions are met: * * 1. Any redistribution must include the above copyright notice and * disclaimer and this list of conditions in any related documentation * and, if feasible, in the redistributed software. * * 2. Any redistribution must include the acknowledgment, "This product * includes software developed by Yale University," in any related * documentation and, if feasible, in the redistributed software. * * 3. The names "Yale" and "Yale University" must not be used to endorse * or promote products derived from this software. */ package edu.yale.its.tp.cas.client; import java.net.URLEncoder; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; /** * Provides utility functions in support of CAS clients. */ public class Util { /** * Returns a service ID (URL) as a composite of the preconfigured server name and the runtime request. */ public static String getService(HttpServletRequest request, String server) throws ServletException { // ensure we have a server name if (server == null) throw new IllegalArgumentException("name of server is required"); // now, construct our best guess at the string StringBuffer sb = new StringBuffer(); if (request.isSecure()) sb.append("https://"); else sb.append("http://"); sb.append(server); sb.append(request.getRequestURI()); if (request.getQueryString() != null) { // first, see whether we've got a 'ticket' at all int ticketLoc = request.getQueryString().indexOf("ticket="); // if ticketLoc == 0, then it's the only parameter and we ignore // the whole query string // if no ticket is present, we use the query string wholesale if (ticketLoc == -1) sb.append("?" + request.getQueryString()); else if (ticketLoc > 0) { ticketLoc = request.getQueryString().indexOf("&ticket="); if (ticketLoc == -1) { // there was a 'ticket=' unrelated to a parameter named 'ticket' sb.append("?" + request.getQueryString()); } else if (ticketLoc > 0) { // otherwise, we use the query string up to "&ticket=" sb.append("?" + request.getQueryString().substring(0, ticketLoc)); } } } return URLEncoder.encode(sb.toString()); } }