/**********************************************************************************
* $URL: https://source.sakaiproject.org/svn/login/trunk/login-tool/tool/src/java/org/sakaiproject/login/tool/ContainerLogin.java $
* $Id: ContainerLogin.java 105079 2012-02-24 23:08:11Z ottenhoff@longsight.com $
***********************************************************************************
*
* Copyright (c) 2005, 2006, 2008 The Sakai Foundation
*
* Licensed under the Educational Community 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.opensource.org/licenses/ECL-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.sakaiproject.login.tool;
import java.io.IOException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.sakaiproject.component.cover.ServerConfigurationService;
import org.sakaiproject.event.cover.UsageSessionService;
import org.sakaiproject.tool.api.Session;
import org.sakaiproject.tool.api.Tool;
import org.sakaiproject.tool.cover.SessionManager;
import org.sakaiproject.user.api.Authentication;
import org.sakaiproject.user.api.AuthenticationException;
import org.sakaiproject.user.api.Evidence;
import org.sakaiproject.user.cover.AuthenticationManager;
import org.sakaiproject.util.ExternalTrustedEvidence;
/**
* <p>
* ContainerLogin ...
* </p>
*/
public class ContainerLogin extends HttpServlet
{
private static final long serialVersionUID = -3589514330633190919L;
/** Our log (commons). */
private static Log M_log = LogFactory.getLog(ContainerLogin.class);
private String defaultReturnUrl;
/**
* Access the Servlet's information display.
*
* @return servlet information.
*/
public String getServletInfo()
{
return "Sakai Container Login";
}
/**
* Initialize the servlet.
*
* @param config
* The servlet config.
* @throws ServletException
*/
public void init(ServletConfig config) throws ServletException
{
super.init(config);
M_log.info("init()");
defaultReturnUrl = ServerConfigurationService.getString("portalPath", "/portal");
}
/**
* Shutdown the servlet.
*/
public void destroy()
{
M_log.info("destroy()");
super.destroy();
}
/**
* Respond to requests.
*
* @param req
* The servlet request.
* @param res
* The servlet response.
* @throws ServletException.
* @throws IOException.
*/
protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException
{
// get the session
Session session = SessionManager.getCurrentSession();
// check the remote user for authentication
String remoteUser = req.getRemoteUser();
try
{
Evidence e = new ExternalTrustedEvidence(remoteUser);
Authentication a = AuthenticationManager.authenticate(e);
// login the user
if (UsageSessionService.login(a.getUid(), a.getEid(), req.getRemoteAddr(), req.getHeader("user-agent"), UsageSessionService.EVENT_LOGIN_CONTAINER))
{
// get the return URL
String url = getUrl(session, Tool.HELPER_DONE_URL);
// cleanup session
session.removeAttribute(Tool.HELPER_MESSAGE);
session.removeAttribute(Tool.HELPER_DONE_URL);
// redirect to the done URL
res.sendRedirect(res.encodeRedirectURL(url));
return;
}
}
catch (AuthenticationException ex)
{
M_log.warn("Authentication Failed for: "+ remoteUser+ ". "+ ex.getMessage());
}
// mark the session and redirect (for login failuer or authentication exception)
session.setAttribute(SkinnableLogin.ATTR_CONTAINER_CHECKED, SkinnableLogin.ATTR_CONTAINER_CHECKED);
res.sendRedirect(res.encodeRedirectURL(getUrl(session, SkinnableLogin.ATTR_RETURN_URL)));
}
/**
* Gets a URL from the session, if not found returns the portal URL.
* @param session The users HTTP session.
* @param sessionAttribute The attribute the URL is stored under.
* @return The URL.
*/
private String getUrl(Session session, String sessionAttribute) {
String url = (String) session.getAttribute(sessionAttribute);
if (url == null || url.length() == 0)
{
M_log.debug("No "+ sessionAttribute + " URL, redirecting to portal URL.");
url = defaultReturnUrl;
}
return url;
}
}