/* (c) 2014 - 2016 Open Source Geospatial Foundation - all rights reserved * (c) 2001 - 2013 OpenPlans * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.security.cas; import java.io.IOException; import java.net.HttpCookie; import java.net.HttpURLConnection; import java.net.URL; import java.util.HashMap; import java.util.List; import java.util.Map; /** * A helper class for authentication against a Cas server * * supported authentication mechanisms * * - Cas Form login * * @author christian * */ public class CasFormAuthenticationHelper extends CasAuthenticationHelper{ public final static String CAS_4_0_USER="casuser"; public final static String CAS_4_0_PW="Mellon"; String username,password; public CasFormAuthenticationHelper (URL casUrlPrefix,String username, String password) { super(casUrlPrefix); this.username=username; this.password=password; } public boolean ssoLogin() throws IOException{ URL loginUrl = createURLFromCasURI("/login"); HttpURLConnection conn = (HttpURLConnection) loginUrl.openConnection(); String responseString = readResponse(conn); String loginTicket = extractFormParameter(responseString,"\"lt\""); if (loginTicket==null) throw new IOException (" No login ticket for: "+loginUrl.toString()); String execution = extractFormParameter(responseString,"\"execution\""); if (execution==null) throw new IOException (" No hidden execution field for: "+loginUrl.toString()); List<HttpCookie> cookies = getCookies(conn); HttpCookie sessionCookie = getCookieNamed(cookies, "JSESSIONID"); String sessionCookieSend=sessionCookie.toString(); Map<String,String> paramMap = new HashMap<String,String>(); paramMap.put("username",username); paramMap.put("password",password); paramMap.put("lt",loginTicket); paramMap.put("_eventId","submit"); paramMap.put("submit","LOGIN"); paramMap.put("execution",execution); conn = (HttpURLConnection) loginUrl.openConnection(); conn.setRequestMethod("POST"); conn.setDoOutput(true); conn.setDoInput(true); conn.setRequestProperty("Cookie", sessionCookieSend); writeParamsForPostAndSend(conn, paramMap); cookies = getCookies(conn); readResponse(conn); extractCASCookies(cookies,conn); return ticketGrantingCookie!=null && ticketGrantingCookie.getValue().startsWith("TGT-"); } protected String extractFormParameter(String formLoginHtml, String searchString) { int index = formLoginHtml.indexOf(searchString); index+=searchString.length(); index = formLoginHtml.indexOf("\"", index); int index2 = formLoginHtml.indexOf("\"", index+1); return formLoginHtml.substring(index+1,index2); } }