package com.l7tech.server.policy.assertion.xmlsec;

import com.l7tech.message.Message;
import com.l7tech.policy.assertion.Assertion;
import com.l7tech.policy.assertion.AssertionStatus;
import com.l7tech.policy.assertion.MessageTargetable;
import com.l7tech.policy.assertion.PolicyAssertionException;
import com.l7tech.policy.assertion.xmlsec.WssDecorationConfig;
import com.l7tech.security.xml.decorator.DecorationRequirements;
import com.l7tech.server.message.AuthenticationContext;
import com.l7tech.server.message.PolicyEnforcementContext;
import com.l7tech.server.policy.assertion.AbstractMessageTargetableServerAssertion;
import java.io.IOException;
import org.springframework.context.ApplicationContext;
import org.w3c.dom.Document;

public abstract class ServerAddWssSignature<AT extends Assertion & MessageTargetable & WssDecorationConfig> extends AbstractMessageTargetableServerAssertion<AT> {
   protected final AddWssSignatureSupport addWssSignatureSupport;

   protected ServerAddWssSignature(AT var1, ApplicationContext var2, boolean var3) {
      super((AT)var1);
      this.addWssSignatureSupport = new AddWssSignatureSupport(this.getAuditHaver(), (WssDecorationConfig)var1, var2, var3, Assertion.isResponse(var1));
   }

   @Override
   protected AssertionStatus doCheckRequest(PolicyEnforcementContext var1, Message var2, String var3, AuthenticationContext var4) throws IOException, PolicyAssertionException {
      return this.addWssSignatureSupport.applySignatureDecorationRequirements(var1, var2, var3, var4, new q(this));
   }

   protected abstract int addDecorationRequirements(
      PolicyEnforcementContext var1, AuthenticationContext var2, Document var3, DecorationRequirements var4, Message var5
   ) throws PolicyAssertionException;
}
