All Downloads are FREE. Search and download functionalities are using the official Maven repository.

pl.edu.icm.unity.saml.metadata.MultiMetadataServlet Maven / Gradle / Ivy

There is a newer version: 4.0.5
Show newest version
/*
 * Copyright (c) 2014 ICM Uniwersytet Warszawski All rights reserved.
 * See LICENCE.txt file for licensing information.
 */
package pl.edu.icm.unity.saml.metadata;

import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.apache.logging.log4j.Logger;
import pl.edu.icm.unity.base.utils.Log;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;


/**
 * Returns SAML metadata generated by a given {@link MetadataProvider}. MetadataProviders are associated with paths.
 * 
 * 
 * @author K. Benedyczak
 */
public class MultiMetadataServlet extends MetadataServlet
{
	private static Logger log = Log.getLogger(Log.U_SERVER_SAML, MultiMetadataServlet.class);
	private Map metaProviders;
	private String servletPath;
	
	public MultiMetadataServlet(String servletPath)
	{
		this.metaProviders = new HashMap<>();
		this.servletPath = servletPath;
	}
	
	public synchronized void updateProvider(String path, MetadataProvider provider)
	{
		metaProviders.put(path, provider);
	}
	
	public synchronized void addProvider(String path, MetadataProvider provider)
	{
		if (!metaProviders.containsKey(path))
			log.info("Added SAML metadata provider at " + getServletContext().getContextPath() + servletPath 
				+ path);
		metaProviders.put(path, provider);
	}
	
	public synchronized void removeProvider(String path)
	{
		metaProviders.remove(path);
	}
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException
	{
		String path = req.getPathInfo();
		MetadataProvider provider;
		synchronized (this)
		{
			if (path == null || !metaProviders.containsKey(path))
			{
				resp.sendError(HttpServletResponse.SC_NOT_FOUND, "No metadata at this location: " 
						+ path);
				return;
			}
			provider = metaProviders.get(path);
		}
		serveMetadata(provider, req, resp);
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy