package com.l7tech.external.assertions.gatewaymanagement.server;

import com.l7tech.external.assertions.gatewaymanagement.GatewayManagementAssertion;
import com.l7tech.external.assertions.gatewaymanagement.RESTGatewayManagementAssertion;
import com.l7tech.gateway.api.impl.MarshallingUtils;
import com.l7tech.gateway.common.LicenseManager;
import com.l7tech.gateway.common.service.ServiceDocumentWsdlStrategy;
import com.l7tech.gateway.common.service.ServiceTemplate;
import com.l7tech.gateway.common.service.ServiceType;
import com.l7tech.gateway.common.service.ServiceDocumentWsdlStrategy.ServiceDocumentResources;
import com.l7tech.identity.IdentityProviderConfigManager;
import com.l7tech.policy.assertion.CommentAssertion;
import com.l7tech.policy.assertion.CustomizeErrorResponseAssertion;
import com.l7tech.policy.assertion.FalseAssertion;
import com.l7tech.policy.assertion.RequestSizeLimit;
import com.l7tech.policy.assertion.SslAssertion;
import com.l7tech.policy.assertion.composite.AllAssertion;
import com.l7tech.policy.assertion.composite.OneOrMoreAssertion;
import com.l7tech.policy.assertion.credential.http.HttpBasic;
import com.l7tech.policy.assertion.identity.AuthenticationAssertion;
import com.l7tech.policy.wsp.WspWriter;
import com.l7tech.server.event.system.LicenseChangeEvent;
import com.l7tech.server.service.ServiceTemplateManager;
import com.l7tech.server.util.ApplicationEventProxy;
import com.l7tech.util.ExceptionUtils;
import com.l7tech.util.HexUtils;
import jakarta.xml.bind.JAXBException;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.net.URISyntaxException;
import java.util.Arrays;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;

public class GatewayManagementModuleLifecycle implements ApplicationListener {
   private static final Logger a;
   private static final String b;
   private static GatewayManagementModuleLifecycle c;
   private final ServiceTemplateManager d;
   private final ApplicationEventProxy e;
   private final ApplicationContext f;
   private ServiceTemplate g;
   private ServiceTemplate h;
   private static final String[] i;

   public static synchronized void onModuleLoaded(ApplicationContext var0) {
      try {
         if (c != null) {
            a.log(Level.WARNING, i[28]);
            return;
         }
      } catch (JAXBException var10) {
         throw a(var10);
      }

      GatewayManagementModuleLifecycle var1 = new GatewayManagementModuleLifecycle(var0);
      var1.d();
      c = var1;
      ClassLoader var2 = Thread.currentThread().getContextClassLoader();

      try {
         Thread.currentThread().setContextClassLoader(GatewayManagementAssertion.class.getClassLoader());
         MarshallingUtils.getJAXBContext();
      } catch (JAXBException var8) {
         a.log(Level.WARNING, i[14] + var8.getMessage(), var8);
      } finally {
         Thread.currentThread().setContextClassLoader(var2);
      }
   }

   public static synchronized void onModuleUnloaded() {
      GatewayManagementModuleLifecycle var0 = c;
      if (var0 != null) {
         String[] var3 = i;
         a.log(Level.INFO, var3[4]);

         try {
            var0.e();
         } catch (Exception var6) {
            a.log(Level.WARNING, i[23] + ExceptionUtils.getMessage(var6), var6);
         } finally {
            c = null;
         }
      }
   }

   public GatewayManagementModuleLifecycle(ApplicationContext var1) {
      String[] var2 = i;
      this.d = (ServiceTemplateManager)var1.getBean(var2[26], ServiceTemplateManager.class);
      this.e = (ApplicationEventProxy)var1.getBean(var2[5], ApplicationEventProxy.class);
      this.e.addApplicationListener(this);
      this.f = var1;
   }

   public void onApplicationEvent(ApplicationEvent var1) {
      if (var1 instanceof LicenseChangeEvent) {
         this.c();
      }
   }

   static ServiceTemplate a() {
      ServiceTemplate var0 = null;

      try {
         String var1 = i();
         String var10000 = GatewayManagementModuleLifecycle.class.getPackage().getName().replace('.', '/');
         String[] var6 = i;
         ServiceDocumentResources var2 = ServiceDocumentWsdlStrategy.loadResources(
            var10000 + var6[11], var6[22], var6[10], GatewayManagementModuleLifecycle.class.getClassLoader()
         );
         var0 = new ServiceTemplate(var6[8], var6[7], var2.getContent(), var2.getUri(), var1, var2.getDependencies(), ServiceType.OTHER_INTERNAL_SERVICE, null);
      } catch (IOException var4) {
         String[] var3 = i;
         a.log(Level.WARNING, var3[13], var4);
      } catch (URISyntaxException var5) {
         a.log(Level.WARNING, i[13], var5);
      }

      return var0;
   }

   static ServiceTemplate b() {
      ServiceTemplate var0 = null;

      try {
         String var1 = j();
         String[] var2 = i;
         var0 = new ServiceTemplate(var2[15], var2[27], var1, ServiceType.OTHER_INTERNAL_SERVICE, null);
      } catch (IOException var3) {
         a.log(Level.WARNING, i[3], var3);
      }

      return var0;
   }

   private void c() {
      if (this.f()) {
         this.g();
      } else {
         this.h();
      }
   }

   private void d() {
      this.g = a();
      this.h = b();
      this.g();
   }

   private void e() throws Exception {
      try {
         c.h();
         if (this.e != null) {
            this.e.removeApplicationListener(this);
         }
      } catch (Exception var1) {
         throw a(var1);
      }
   }

   private boolean f() {
      LicenseManager var1 = (LicenseManager)this.f.getBean(i[21], LicenseManager.class);
      return var1.isFeatureEnabled(new GatewayManagementAssertion().getFeatureSetName());
   }

   private void g() {
      if (!this.f()) {
         String[] var1 = i;
         a.warning(var1[9]);
      } else {
         String[] var2 = i;
         this.a(this.g, var2[24]);
         this.a(this.h, var2[17]);
      }
   }

   private void h() {
      this.a(this.g);
      this.a(this.h);
   }

   private void a(ServiceTemplate var1, String var2) {
      if (var1 != null) {
         Logger var10000 = a;
         String var10001 = var1.getName();
         String var10002 = var1.getDefaultUriPrefix();
         String[] var3 = i;
         var10000.info(var3[25] + var10001 + var3[6] + var10002 + ")");
         this.d.register(var1, var2);
      }
   }

   private void a(ServiceTemplate var1) {
      if (var1 != null) {
         Logger var10000 = a;
         String var10001 = var1.getName();
         String var10002 = var1.getDefaultUriPrefix();
         String[] var2 = i;
         var10000.info(var2[1] + var10001 + var2[2] + var10002 + ")");
         this.d.unregister(var1);
      }
   }

   private static String i() throws IOException {
      AuthenticationAssertion var0 = new AuthenticationAssertion();
      var0.setIdentityProviderOid(IdentityProviderConfigManager.INTERNALPROVIDER_SPECIAL_GOID);
      AllAssertion var1 = new AllAssertion(Arrays.asList(new SslAssertion(), new HttpBasic(), var0, new GatewayManagementAssertion()));
      ByteArrayOutputStream var2 = new ByteArrayOutputStream();
      WspWriter.writePolicy(var1, var2);
      return HexUtils.decodeUtf8(var2.toByteArray());
   }

   private static String j() throws IOException {
      AuthenticationAssertion var0 = new AuthenticationAssertion();
      var0.setIdentityProviderOid(IdentityProviderConfigManager.INTERNALPROVIDER_SPECIAL_GOID);
      AllAssertion var1 = new AllAssertion(Arrays.asList(new SslAssertion(), new HttpBasic()));
      OneOrMoreAssertion var2 = new OneOrMoreAssertion(Arrays.asList(new SslAssertion(true), var1));
      RequestSizeLimit var3 = new RequestSizeLimit();
      String[] var9 = i;
      var3.setLimit(var9[20]);
      CustomizeErrorResponseAssertion var4 = new CustomizeErrorResponseAssertion();
      var4.setContentType(var9[12]);
      var4.setHttpStatus(var9[19]);
      var4.setContent(var9[16]);
      AllAssertion var5 = new AllAssertion(Arrays.asList(var4, new FalseAssertion()));
      OneOrMoreAssertion var6 = new OneOrMoreAssertion(Arrays.asList(new CommentAssertion(var9[18]), var3, var5));
      AllAssertion var7 = new AllAssertion(Arrays.asList(var2, var0, var6, new RESTGatewayManagementAssertion()));
      ByteArrayOutputStream var8 = new ByteArrayOutputStream();
      WspWriter.writePolicy(var7, var8);
      return HexUtils.decodeUtf8(var8.toByteArray());
   }

   static {
      String[] var5 = new String[29];
      int var3 = 0;
      String var2 = "u\"(\u000e.\u001c{L\u00147\u0018sZ:g.6\u0005u_{\u0013F%6\u000esZ'g.6\u0002zTtg#!K3*4k7\u000efE=p.d\u001c}G<3?,\u000e4T5g.3\nm\u0013|A$1\u001f}]33\u001e\u0016\"4\u000etIP**L`\u00138|* KC`\u0010_k%\u0005p\u001c;ak\u0014\u0004xZ7jk\u001c&X\bt`.6\u001d}P13?!\u0006d_5g.d\u001c}_83%+\u001f4Q13*2\n}_5q'!*T*0\u000ecR-3&%\u0005uT1~.*\u001f4^;w>(\u000e4Z'38,\u001e`G=},d\u000f{D:\u0015r;4\u0007}P5g\"+\u0005QE1}?\u0014\u0019{K-*4k7\u000efE=p.d\u001c}G<3?,\u000e4T5g.3\nm\u0013|A$1\u001f}]33\u001e\u0016\"4\u000et\u0006<<7\u0006u]\u001aT*0\u000ecR-3\u0006%\u0005uT1~.*\u001f4`1a=-\bqnG#!KSR v<%\u00124~5}*#\u000eyV:gk%\u0018gV&g\"+\u00054^;w>(\u000e4Z'3%+\u001f4_=p.*\u0018qWz3\u001f,\u000e4t5g.3\nm\u0013\u0019r%%\fq^1}?d\u0018qA\"z(!KcZ8\u007fk*\u0004`\u00136vk%\u001duZ8r)(\u000e:\u001et*0\u000ecR->&%\u0005uT1~.*\u001f9\u000b\u000b!\u0014t[:D'w'\u0011<8!\u0019bZ7v\u001f!\u0006d_5g.k\u001er;4\u0007}P5g\"+\u0005;K9\u007fpd\b|R&`.0VAg\u0012>sIP**L`\u00138|* KC`\u0010_k%\u0005p\u001c;ak\u0014\u0004xZ7jk\u001c&X\bt`.6\u001d}P13?!\u0006d_5g.d\u001c}_83%+\u001f4Q13*2\n}_5q'!CT*0\u000ecR-3&%\u0005uT1~.*\u001f4^;w>(\u000e4U5z'!\u000f4G;3;6\u0004dV&\u007f2d\u0007{R03?,\u000e4y\u0015K\t\u0007\u0004zG1k?~K\u001fT*0\u000ecR-3\u0019\u00018@\u0013\u0019r%%\fq^1}?d8qA\"z(!Ă/t<\u0006x\u0013\"v97\u0002{]i1zj[6\u00131}(+\u000f}]3.i\u0011?R\u001el1k7\u001fu]0r'+\u0005q\u000evj.7I+\r^/'sQQA&|9d\u0013y_:`q(\\)\u0011<g?4Q;\u001c:`e(\\`V7{e'\u0004y\u001cf#ztD$\u0007{t*0\u000ecR->&%\u0005uT1~.*\u001f6\r^3kdK(_c)\u001f=\u001bq\r\u001d}=%\u0007}W\u0006v:1\u000egGh<'sQ@J$vuNK4\u0013t/'sQPV r\"(U`[1384\u000ewZ2z. KyR,z&1\u00064W5g*d\u0018}I13'-\u0006}Gtd$1\u0007p\u00136vk!\u0013wV1w. W;_c)\u000f!\u001fuZ8-AxDx\u0004nV96\u0004f\r\u0007a.7\u001fyR:\u008fP#!\b\u007f\u0013 {.d\u0019qB!v80KyV'`*#\u000e4@=i.jK]Utg#!KyR,z&1\u00064^1`8%\fq\u0013'z1!KzV1w8d\u001f{\u00136vk-\u0005wA1r8!\u000f4P<r%#\u000e4G<vkc\u0019q@ ~**EfV%f.7\u001f:^1`8%\fq\u001d9r3\u0017\u0002nVs3((\u001egG1ak4\u0019{C1a?=\u0003'{t*70#\n`V#r2j\u0019q@ ~**EfV%f.7\u001f:^1`8%\fq\u001d9r3\u0017\u0002nV)\u000e\u007f\"'\u000ez@1^**\nsV&\u0015u\"(\u000e.\u001c{L\u00147\u0018sZ:g.6\u0005u_{7T*0\u000ecR-3&%\u0005uT1~.*\u001f4^;w>(\u000e4G<a.3KqK7v;0\u0002{]t|%d\u0018|F w$3\u0005.\u0013\u0005d8)\nz\u0011A.#\u0002gG1a\"*\f4G<vkc\u0016`.6\u001d}P1G.)\u001bxR v\u0006%\u0005uT1a";
      int var4 = "u\"(\u000e.\u001c{L\u00147\u0018sZ:g.6\u0005u_{\u0013F%6\u000esZ'g.6\u0002zTtg#!K3*4k7\u000efE=p.d\u001c}G<3?,\u000e4T5g.3\nm\u0013|A$1\u001f}]33\u001e\u0016\"4\u000etIP**L`\u00138|* KC`\u0010_k%\u0005p\u001c;ak\u0014\u0004xZ7jk\u001c&X\bt`.6\u001d}P13?!\u0006d_5g.d\u001c}_83%+\u001f4Q13*2\n}_5q'!*T*0\u000ecR-3&%\u0005uT1~.*\u001f4^;w>(\u000e4Z'38,\u001e`G=},d\u000f{D:\u0015r;4\u0007}P5g\"+\u0005QE1}?\u0014\u0019{K-*4k7\u000efE=p.d\u001c}G<3?,\u000e4T5g.3\nm\u0013|A$1\u001f}]33\u001e\u0016\"4\u000et\u0006<<7\u0006u]\u001aT*0\u000ecR-3\u0006%\u0005uT1~.*\u001f4`1a=-\bqnG#!KSR v<%\u00124~5}*#\u000eyV:gk%\u0018gV&g\"+\u00054^;w>(\u000e4Z'3%+\u001f4_=p.*\u0018qWz3\u001f,\u000e4t5g.3\nm\u0013\u0019r%%\fq^1}?d\u0018qA\"z(!KcZ8\u007fk*\u0004`\u00136vk%\u001duZ8r)(\u000e:\u001et*0\u000ecR->&%\u0005uT1~.*\u001f9\u000b\u000b!\u0014t[:D'w'\u0011<8!\u0019bZ7v\u001f!\u0006d_5g.k\u001er;4\u0007}P5g\"+\u0005;K9\u007fpd\b|R&`.0VAg\u0012>sIP**L`\u00138|* KC`\u0010_k%\u0005p\u001c;ak\u0014\u0004xZ7jk\u001c&X\bt`.6\u001d}P13?!\u0006d_5g.d\u001c}_83%+\u001f4Q13*2\n}_5q'!CT*0\u000ecR-3&%\u0005uT1~.*\u001f4^;w>(\u000e4U5z'!\u000f4G;3;6\u0004dV&\u007f2d\u0007{R03?,\u000e4y\u0015K\t\u0007\u0004zG1k?~K\u001fT*0\u000ecR-3\u0019\u00018@\u0013\u0019r%%\fq^1}?d8qA\"z(!Ă/t<\u0006x\u0013\"v97\u0002{]i1zj[6\u00131}(+\u000f}]3.i\u0011?R\u001el1k7\u001fu]0r'+\u0005q\u000evj.7I+\r^/'sQQA&|9d\u0013y_:`q(\\)\u0011<g?4Q;\u001c:`e(\\`V7{e'\u0004y\u001cf#ztD$\u0007{t*0\u000ecR->&%\u0005uT1~.*\u001f6\r^3kdK(_c)\u001f=\u001bq\r\u001d}=%\u0007}W\u0006v:1\u000egGh<'sQ@J$vuNK4\u0013t/'sQPV r\"(U`[1384\u000ewZ2z. KyR,z&1\u00064W5g*d\u0018}I13'-\u0006}Gtd$1\u0007p\u00136vk!\u0013wV1w. W;_c)\u000f!\u001fuZ8-AxDx\u0004nV96\u0004f\r\u0007a.7\u001fyR:\u008fP#!\b\u007f\u0013 {.d\u0019qB!v80KyV'`*#\u000e4@=i.jK]Utg#!KyR,z&1\u00064^1`8%\fq\u0013'z1!KzV1w8d\u001f{\u00136vk-\u0005wA1r8!\u000f4P<r%#\u000e4G<vkc\u0019q@ ~**EfV%f.7\u001f:^1`8%\fq\u001d9r3\u0017\u0002nVs3((\u001egG1ak4\u0019{C1a?=\u0003'{t*70#\n`V#r2j\u0019q@ ~**EfV%f.7\u001f:^1`8%\fq\u001d9r3\u0017\u0002nV)\u000e\u007f\"'\u000ez@1^**\nsV&\u0015u\"(\u000e.\u001c{L\u00147\u0018sZ:g.6\u0005u_{7T*0\u000ecR-3&%\u0005uT1~.*\u001f4^;w>(\u000e4G<a.3KqK7v;0\u0002{]t|%d\u0018|F w$3\u0005.\u0013\u0005d8)\nz\u0011A.#\u0002gG1a\"*\f4G<vkc\u0016`.6\u001d}P1G.)\u001bxR v\u0006%\u0005uT1a"
         .length();
      char var1 = 21;
      int var7 = -1;

      label24:
      while (true) {
         byte var10000 = 41;
         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) {
                     i = var5;
                     b = i[0];
                     a = Logger.getLogger(GatewayManagementModuleLifecycle.class.getName());
                     c = null;
                     return;
                  }

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

                  var2 = "\u001a\u001f\u0007>Fx\u0013[BH0r\f\u0016(Et\u000b\u0015\u0000\u0003#Sr\u0017X\b\f9\u0012x\u001dQ\u0018\u000e(\u0012|\u0001\u0015\f\u000e?Wt\u0016LM\u000b#[a\u001bT\u0001\u000b7Wq";
                  var4 = "\u001a\u001f\u0007>Fx\u0013[BH0r\f\u0016(Et\u000b\u0015\u0000\u0003#Sr\u0017X\b\f9\u0012x\u001dQ\u0018\u000e(\u0012|\u0001\u0015\f\u000e?Wt\u0016LM\u000b#[a\u001bT\u0001\u000b7Wq"
                     .length();
                  var1 = '\n';
                  var7 = -1;
            }

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

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

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

      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 -> 58;
            case 1 -> 98;
            case 2 -> 109;
            case 3 -> 66;
            case 4 -> 61;
            case 5 -> 26;
            default -> 125;
         });
      }

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