package com.l7tech.external.assertions.gatewaymanagement.server.rest.resource.impl;

import com.l7tech.common.mime.ContentTypeHeader;
import com.l7tech.external.assertions.gatewaymanagement.server.rest.RbacAccessService;
import com.l7tech.external.assertions.gatewaymanagement.server.rest.resource.RestManVersion;
import com.l7tech.external.assertions.gatewaymanagement.server.rest.resource.Since;
import com.l7tech.gateway.common.LicenseException;
import com.l7tech.gateway.common.admin.PolicyBundleInstallerAdmin.PolicyBundleInstallerException;
import com.l7tech.gateway.rest.SpringBean;
import com.l7tech.identity.User;
import com.l7tech.identity.UserBean;
import com.l7tech.message.HttpRequestKnobAdapter;
import com.l7tech.message.Message;
import com.l7tech.policy.assertion.Assertion;
import com.l7tech.policy.assertion.PolicyAssertionException;
import com.l7tech.policy.wsp.WspReader;
import com.l7tech.policy.wsp.WspReader.Visibility;
import com.l7tech.security.token.http.HttpBasicToken;
import com.l7tech.server.identity.AuthenticationResult;
import com.l7tech.server.message.PolicyEnforcementContext;
import com.l7tech.server.message.PolicyEnforcementContextFactory;
import com.l7tech.server.policy.ServerPolicyFactory;
import com.l7tech.server.policy.assertion.ServerAssertion;
import com.l7tech.server.policy.bundle.PolicyBundleInstallerServerAssertionException;
import com.l7tech.server.util.JaasUtils;
import com.l7tech.util.ExceptionUtils;
import jakarta.inject.Singleton;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.QueryParam;
import jakarta.ws.rs.core.Context;
import jakarta.ws.rs.core.MultivaluedMap;
import jakarta.ws.rs.core.Response;
import jakarta.ws.rs.core.UriInfo;
import jakarta.ws.rs.core.Response.Status;
import jakarta.ws.rs.ext.Provider;
import java.io.IOException;
import java.text.MessageFormat;
import java.util.logging.Logger;
import org.apache.commons.lang3.StringUtils;

@Provider
@Path("1.0/policyBundleInstallers")
@Singleton
@Since(RestManVersion.VERSION_1_0_1)
public class PolicyBundleInstallerResource {
   private static final Logger a;
   private static final String b;
   @SpringBean
   private WspReader c;
   @SpringBean
   private ServerPolicyFactory d;
   @SpringBean
   private RbacAccessService e;
   @Context
   protected UriInfo uriInfo;
   private static final String[] f;

   @GET
   @Produces("text/xml")
   public Response execute(@QueryParam("installer_name") String var1) throws PolicyBundleInstallerException {
      try {
         if (StringUtils.isEmpty(var1)) {
            return Response.status(Status.BAD_REQUEST).entity(f[0]).build();
         }
      } catch (IOException var11) {
         throw a(var11);
      }

      this.e.validateFullAdministrator();

      ServerAssertion var2;
      try {
         String[] var14 = f;
         Assertion var3 = this.c.parseStrictly(MessageFormat.format(var14[4], var1), Visibility.omitDisabled);
         var2 = this.d.compilePolicy(var3, false);
      } catch (IOException var7) {
         String[] var13 = f;
         String var4 = var13[7] + var1 + var13[2];
         a.fine(var4 + ExceptionUtils.getMessage(var7));
         return Response.status(Status.NOT_FOUND).entity(var4).build();
      } catch (LicenseException | PolicyAssertionException var8) {
         String[] var6 = f;
         throw new PolicyBundleInstallerException(var6[6], ExceptionUtils.getDebugException(var8));
      }

      PolicyEnforcementContext var12;
      try {
         var12 = this.a();
         var2.checkRequest(var12);
      } catch (PolicyBundleInstallerServerAssertionException var9) {
         return Response.status(switch (var9.getHttpStatusCode()) {
            case 400 -> Status.BAD_REQUEST;
            case 404 -> Status.NOT_FOUND;
            case 409 -> Status.CONFLICT;
            default -> Status.INTERNAL_SERVER_ERROR;
         }).entity(var9.getMessage()).build();
      } catch (IOException | PolicyAssertionException var10) {
         throw new PolicyBundleInstallerException(f[1], ExceptionUtils.getDebugException(var10));
      }

      return Response.ok(new f(this, var12)).build();
   }

   private PolicyEnforcementContext a() throws IOException {
      Message var1 = new Message();
      var1.initialize(ContentTypeHeader.XML_DEFAULT, new byte[0]);
      HttpRequestKnobAdapter var2 = new HttpRequestKnobAdapter();
      var1.attachHttpRequestKnob(var2);
      Message var3 = new Message();
      var3.attachHttpResponseKnob(new a(this));
      PolicyEnforcementContext var4 = PolicyEnforcementContextFactory.createPolicyEnforcementContext(var1, var3);
      User var5 = JaasUtils.getCurrentUser();
      if (var5 != null) {
         UserBean var6 = new UserBean(var5.getProviderId(), var5.getLogin());
         var6.setUniqueIdentifier(var5.getId());
         var4.getDefaultAuthenticationContext()
            .addAuthenticationResult(new AuthenticationResult(var6, new HttpBasicToken(var5.getLogin(), "".toCharArray()), null, false));
      } else {
         a.warning(f[3]);
      }

      MultivaluedMap var9 = this.uriInfo.getQueryParameters();

      for (String var8 : var9.keySet()) {
         var4.setVariable(var8, var9.getFirst(var8));
      }

      return var4;
   }

   static {
      String[] var5 = new String[8];
      int var3 = 0;
      String var2 = "\u0002~uv\u0010\u000eU=f;b\u0010\b[\"zow\u0003ZW&lh{\u001f\u001d\u0000ovua\u0005\u001bV#ziM\u001f\u001bW*1;28\u0014I;~w~\u0014\b\u001a!~vwQ\u0019[!8o2\u0013\u001f\u001a*rkf\bT\u000f\u0006qhf\u0010\u0016V*m;w\u0003\bU=\u0002a?=\u0001p;s\u0015\u0017S!vhf\u0003\u001bN&i~2\u0004\t_=?}}\u0004\u0014^a?Iw\u0000\u000f_<k;f\u001eZS!los\u001d\u0016_=?l{\u001d\u0016\u001a)~r~_ÉshhbK*U#vxkQ\u0002W#qh(=MJr=sf\u0005\n\u0000`0le\u0006TV.f~`F\u000e_,w5q\u001e\u0017\u00158l4b\u001e\u0016S,f92\t\u0017V!l!e\u0002\n\u0007mwof\u0001@\u0015`lxz\u0014\u0017[<1c\u007f\u001d\tU.o5}\u0003\u001d\u00158l4 AJ\b`.)=\u0001\u0015V&|b0Op\u001ao?;.\u0006\tJu^w~Q\rI?%Na\u0010\u001d_r=Iw\u0000\u000fS=z\u007f0Op\u001ao?;2QZ\u001asS,bK\u0001\n20%\u0018QZ\u001ao#4e\u0002\n\u0000\u000esw,{F\u00158lk(!\u0015V&|b,{ÉshhbK*U#vxkQ\u0002W#qh(=MJr=sf\u0005\n\u0000`0le\u0006TV.f~`F\u000e_,w5q\u001e\u0017\u00158l4b\u001e\u0016S,f92\t\u0017V!l!e\u0002\n\u0007mwof\u0001@\u0015`lxz\u0014\u0017[<1c\u007f\u001d\tU.o5}\u0003\u001d\u00158l4 AJ\b`.)=\u0001\u0015V&|b0Op\u001ao?;.\u0006\tJu^w~Q\rI?%Na\u0010\u001d_r=Iw\u0000\u000fS=z\u007f0Op\u001ao?;2QZ\u001asS,bK\u0001\n20%\u0018QZ\u001ao#4e\u0002\n\u0000\u000esw,{F\u00158lk(!\u0015V&|b,{";
      int var4 = "\u0002~uv\u0010\u000eU=f;b\u0010\b[\"zow\u0003ZW&lh{\u001f\u001d\u0000ovua\u0005\u001bV#ziM\u001f\u001bW*1;28\u0014I;~w~\u0014\b\u001a!~vwQ\u0019[!8o2\u0013\u001f\u001a*rkf\bT\u000f\u0006qhf\u0010\u0016V*m;w\u0003\bU=\u0002a?=\u0001p;s\u0015\u0017S!vhf\u0003\u001bN&i~2\u0004\t_=?}}\u0004\u0014^a?Iw\u0000\u000f_<k;f\u001eZS!los\u001d\u0016_=?l{\u001d\u0016\u001a)~r~_ÉshhbK*U#vxkQ\u0002W#qh(=MJr=sf\u0005\n\u0000`0le\u0006TV.f~`F\u000e_,w5q\u001e\u0017\u00158l4b\u001e\u0016S,f92\t\u0017V!l!e\u0002\n\u0007mwof\u0001@\u0015`lxz\u0014\u0017[<1c\u007f\u001d\tU.o5}\u0003\u001d\u00158l4 AJ\b`.)=\u0001\u0015V&|b0Op\u001ao?;.\u0006\tJu^w~Q\rI?%Na\u0010\u001d_r=Iw\u0000\u000fS=z\u007f0Op\u001ao?;2QZ\u001asS,bK\u0001\n20%\u0018QZ\u001ao#4e\u0002\n\u0000\u000esw,{F\u00158lk(!\u0015V&|b,{ÉshhbK*U#vxkQ\u0002W#qh(=MJr=sf\u0005\n\u0000`0le\u0006TV.f~`F\u000e_,w5q\u001e\u0017\u00158l4b\u001e\u0016S,f92\t\u0017V!l!e\u0002\n\u0007mwof\u0001@\u0015`lxz\u0014\u0017[<1c\u007f\u001d\tU.o5}\u0003\u001d\u00158l4 AJ\b`.)=\u0001\u0015V&|b0Op\u001ao?;.\u0006\tJu^w~Q\rI?%Na\u0010\u001d_r=Iw\u0000\u000fS=z\u007f0Op\u001ao?;2QZ\u001asS,bK\u0001\n20%\u0018QZ\u001ao#4e\u0002\n\u0000\u000esw,{F\u00158lk(!\u0015V&|b,{"
         .length();
      char var1 = 'L';
      int var7 = -1;

      label24:
      while (true) {
         byte var10000 = 17;
         String var10001 = var2.substring(++var7, var7 + var1);
         byte var10002 = -1;

         while (true) {
            String var8 = a(var10000, a(var10001));
            switch (var10002) {
               case 0:
                  var5[var3++] = var8;
                  if ((var7 += var1) >= var4) {
                     f = var5;
                     b = f[5];
                     a = Logger.getLogger(PolicyBundleInstallerResource.class.getName());
                     return;
                  }

                  var1 = var2.charAt(var7);
                  break;
               default:
                  var5[var3++] = var8;
                  if ((var7 += var1) < var4) {
                     var1 = var2.charAt(var7);
                     continue label24;
                  }

                  var2 = "6]V\\136\u0017\\\u0017]/3w\u0017V\u0017W3%b\u0002_[[/\u001a*]DJ<:z\u0006A\u0017P<;sC]XJ}0y\u0016]S\u0004}";
                  var4 = "6]V\\136\u0017\\\u0017]/3w\u0017V\u0017W3%b\u0002_[[/\u001a*]DJ<:z\u0006A\u0017P<;sC]XJ}0y\u0016]S\u0004}".length();
                  var1 = 26;
                  var7 = -1;
            }

            var10000 = 61;
            var10001 = var2.substring(++var7, var7 + var1);
            var10002 = 0;
         }
      }
   }

   private static IOException a(IOException var0) {
      return var0;
   }

   private static char[] a(String var0) {
      char[] var10000 = var0.toCharArray();
      if (var10000.length < 2) {
         var10000[0] = (char)(var10000[0] ^ 43);
      }

      return var10000;
   }

   private static String a(int var0, char[] var1) {
      int var10003 = var1.length;
      int var10002 = var0;
      char[] var10001 = var1;
      int var10000 = var10003;

      for (int var2 = 0; var10000 > var2; var2++) {
         var10001[var2] = (char)(var10001[var2] ^ var10002 ^ switch (var2 % 7) {
            case 0 -> 94;
            case 1 -> 14;
            case 2 -> 10;
            case 3 -> 3;
            case 4 -> 96;
            case 5 -> 107;
            default -> 43;
         });
      }

      return new String(var10001).intern();
   }
}
