package servlets; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import utils.LoginMethod; import utils.SamlSso; import utils.ShepherdLogManager; /** * Does SSO login.
*
* This file is part of the Security Shepherd Project. * *

The Security Shepherd project is free software: you can redistribute it and/or modify it under * the terms of the GNU General Public License as published by the Free Software Foundation, either * version 3 of the License, or (at your option) any later version.
* *

The Security Shepherd project is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR * PURPOSE. See the GNU General Public License for more details.
* *

You should have received a copy of the GNU General Public License along with the Security * Shepherd project. If not, see . * * @author Mark Denihan */ public class SSOMetadata extends HttpServlet { private static final long serialVersionUID = 3679066677850981985L; private static final Logger log = LogManager.getLogger(SSOMetadata.class); public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /** Redirects user to index.jsp */ response.sendRedirect("index.jsp"); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { if (!LoginMethod.isSaml()) { // SSO is off (sso.enabled in sso.properties): this endpoint must not authenticate anyone, // even if a SAML configuration is present response.sendError(HttpServletResponse.SC_NOT_FOUND); return; } ShepherdLogManager.setRequestIp(request.getRemoteAddr(), request.getHeader("X-Forwarded-For")); try { String metadata = SamlSso.getServiceProviderMetadata(); response.setContentType("application/xml; charset=UTF-8"); response.getWriter().println(metadata); } catch (Exception e) { log.error("Caught exception when initializing SSO: " + e.toString()); throw new RuntimeException(e); } } }