/*
 * Created on 28 nov. 2003
 *
 */
package filtres;

import org.apache.axis.handlers.BasicHandler;
import org.apache.axis.*;
import configAgent.*;
import javax.xml.soap.*;

import org.w3c.dom.*;
import bull.XSS.JAXP.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;

/**
 * @author bauche-v
 *
 */
public class handler1 extends BasicHandler {
	public void invoke(MessageContext msgContext) throws AxisFault
	{
		localAgent Agent = localAgent.getInstance();
		
		try
		{
			Message message = msgContext.getCurrentMessage();
			org.apache.axis.SOAPPart sPart = (org.apache.axis.SOAPPart) message.getSOAPPart();
			Document doc = ((org.apache.axis.message.SOAPEnvelope) sPart.getEnvelope()).getAsDocument();
			if (msgContext.getPastPivot()) //on est dans une reponse
			{
				if (msgContext.isClient()) 
				//on recoit la reponse a une requete que l'on a envoye
				//on controle l'authent mais pas l'autorisation
				{
					SOAPMessage msg = Agent.InProcessing(msgContext.getMessage(), msgContext.getUsername(), msgContext.getTargetService(), false);
					msgContext.setRequestMessage((Message)msg);
				}
				else
				{
				//on repond a une requete : inserer une assertion d'authent
					Document doc2 = Agent.OutProcessing(doc, msgContext.getTargetService());
					Source source = new DOMSource(doc2.getDocumentElement());
					sPart.setContent(source);
					message.saveChanges();
				}
			}
			else //on est dans une requete
			{
				if (msgContext.isClient()) 
				//on envoie une requete : inserer une assertion d'authent
				{
					Document doc2 = Agent.OutProcessing(doc, msgContext.getUsername());
					Source source = new DOMSource(doc2.getDocumentElement());
					sPart.setContent(source);
					message.saveChanges();
				}
				else
				//on recoit une requete : verifier authent et autorisation
				{
					SOAPMessage msg = Agent.InProcessing(msgContext.getMessage(), msgContext.getTargetService(), msgContext.getUsername(), true);
					msgContext.setMessage((Message)msg);
				}
			}
		}
		catch (Exception e)
		{
			System.out.println(e.getMessage());
			AxisFault myFault = AxisFault.makeFault(e);
			throw myFault;
		}
	}


}
