package com.l7tech.server.cluster;

import com.l7tech.gateway.common.cluster.ClusterNodeInfo;
import com.l7tech.gateway.common.security.rbac.OperationType;
import com.l7tech.gateway.common.service.ServiceHeader;
import com.l7tech.identity.User;
import com.l7tech.objectmodel.EntityType;
import com.l7tech.objectmodel.ExternalEntityHeader;
import com.l7tech.objectmodel.FindException;
import com.l7tech.objectmodel.Goid;
import com.l7tech.objectmodel.encass.EncapsulatedAssertionConfig;
import com.l7tech.objectmodel.folder.Folder;
import com.l7tech.objectmodel.folder.FolderHeader;
import com.l7tech.policy.PolicyHeader;
import com.l7tech.policy.PolicyType;
import com.l7tech.server.EntityHeaderUtils;
import com.l7tech.server.folder.FolderManager;
import com.l7tech.server.management.api.node.GatewayApi;
import com.l7tech.server.management.api.node.GatewayApi.ClusterInfo;
import com.l7tech.server.management.api.node.GatewayApi.EntityInfo;
import com.l7tech.server.management.api.node.GatewayApi.GatewayException;
import com.l7tech.server.management.api.node.GatewayApi.GatewayInfo;
import com.l7tech.server.policy.EncapsulatedAssertionConfigManager;
import com.l7tech.server.policy.PolicyManager;
import com.l7tech.server.security.rbac.SecurityFilter;
import com.l7tech.server.service.ServiceExternalEntityHeaderEnhancer;
import com.l7tech.server.service.ServiceManager;
import com.l7tech.server.util.JaasUtils;
import com.l7tech.util.BuildInfo;
import com.l7tech.util.Config;
import jakarta.jws.WebMethod;
import jakarta.jws.WebResult;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedHashSet;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

@Transactional(propagation = Propagation.REQUIRED)
public class GatewayApiImpl implements GatewayApi {
   private static final Logger a;
   private final Config b;
   private final ClusterInfoManager c;
   private final SecurityFilter d;
   private final ServiceManager e;
   private final PolicyManager f;
   private final FolderManager g;
   private final ServiceExternalEntityHeaderEnhancer h;
   private final EncapsulatedAssertionConfigManager i;
   private static final String[] j;

   public GatewayApiImpl(
      Config var1,
      ClusterInfoManager var2,
      SecurityFilter var3,
      ServiceManager var4,
      PolicyManager var5,
      FolderManager var6,
      ServiceExternalEntityHeaderEnhancer var7,
      EncapsulatedAssertionConfigManager var8
   ) {
      this.b = var1;
      this.c = var2;
      this.d = var3;
      this.e = var4;
      this.f = var5;
      this.g = var6;
      this.h = var7;
      this.i = var8;
   }

   public ClusterInfo getClusterInfo() {
      String[] var2 = j;
      a.fine(var2[7]);
      ClusterInfo var1 = new ClusterInfo();
      var1.setClusterHostname(this.b.getProperty(var2[4], ""));
      var1.setClusterHttpPort(this.b.getIntProperty(var2[11], 8080));
      var1.setClusterHttpsPort(this.b.getIntProperty(var2[3], 8443));
      var1.setAdminAppletPort(this.b.getIntProperty(var2[1], 9443));
      return var1;
   }

   public Collection<GatewayInfo> getGatewayInfo() {
      String[] var6 = j;
      a.fine(var6[10]);
      LinkedHashSet var1 = new LinkedHashSet();

      try {
         Collection var2 = this.c.retrieveClusterStatus();
         if (var2 != null) {
            for (ClusterNodeInfo var4 : var2) {
               GatewayInfo var5 = new GatewayInfo();
               var5.setId(var4.getNodeIdentifier());
               var5.setName(var4.getName());
               var5.setIpAddress(var4.getEsmAddress());
               var5.setSoftwareVersion(BuildInfo.getProductVersion());
               var5.setStatusTimestamp(var4.getLastUpdateTimeStamp());
               var6 = j;
               var5.setGatewayPort(this.b.getIntProperty(var6[2], 8443));
               var5.setProcessControllerPort(this.b.getIntProperty(var6[13], 8765));
               var1.add(var5);
            }
         }
      } catch (FindException var7) {
         a.log(Level.WARNING, j[14], var7);
      }

      return var1;
   }

   @WebMethod(operationName = "GetEntityInfo")
   @WebResult(name = "EntityInfos", targetNamespace = "http://www.layer7tech.com/management/gateway")
   public Collection<EntityInfo> getEntityInfo(Collection<EntityType> var1) throws GatewayException {
      if (var1 == null) {
         var1 = Arrays.asList(
            EntityType.SERVICE, EntityType.SERVICE_ALIAS, EntityType.POLICY, EntityType.POLICY_ALIAS, EntityType.FOLDER, EntityType.ENCAPSULATED_ASSERTION
         );
      }

      ArrayList var2 = new ArrayList();
      User var3 = JaasUtils.getCurrentUser();

      try {
         if (var3 == null) {
            throw new GatewayException(j[9]);
         }
      } catch (FindException var9) {
         throw a(var9);
      }

      try {
         for (EntityType var5 : var1) {
            label47: {
               label46: {
                  label45: {
                     try {
                        switch (n.a[var5.ordinal()]) {
                           case 1:
                              this.b(var2, var3);
                           case 2:
                           case 4:
                              continue;
                           case 3:
                              break label47;
                           case 5:
                              break label46;
                           case 6:
                              break label45;
                        }
                     } catch (FindException var7) {
                        throw a(var7);
                     }

                     Logger var10000 = a;
                     String var10001 = String.valueOf(var5);
                     String[] var10 = j;
                     var10000.warning(var10[5] + var10001 + var10[6]);
                     continue;
                  }

                  this.a(var2, var3);
                  continue;
               }

               this.d(var2, var3);
               continue;
            }

            this.c(var2, var3);
         }

         return var2;
      } catch (FindException var8) {
         String[] var6 = j;
         a.log(Level.WARNING, var6[8], var8);
         throw new GatewayException(var6[12]);
      }
   }

   private void a(Collection<EntityInfo> var1, User var2) throws FindException {
      Collection var3 = this.d.filter(this.i.findAll(), var2, OperationType.READ, null);
      EntityType var4 = EntityType.ENCAPSULATED_ASSERTION;

      for (EncapsulatedAssertionConfig var6 : var3) {
         String var7 = var6.getGoid().toString();

         Folder var10000;
         label37: {
            try {
               if (var6.getPolicy() != null) {
                  var10000 = var6.getPolicy().getFolder();
                  break label37;
               }
            } catch (FindException var14) {
               throw a(var14);
            }

            var10000 = null;
         }

         Folder var8 = var10000;

         label29: {
            try {
               if (var8 != null) {
                  var15 = var8.getGoid();
                  break label29;
               }
            } catch (FindException var13) {
               throw a(var13);
            }

            var15 = Folder.ROOT_FOLDER_ID;
         }

         String var9 = Goid.toString(var15);
         String var10 = var6.getName();
         String var11 = var6.getProperty(EncapsulatedAssertionConfig.PROP_DESCRIPTION);
         ExternalEntityHeader var12 = new ExternalEntityHeader(var6.getGuid(), var4, var6.getGuid(), var10, var11, var6.getVersion());
         var1.add(new EntityInfo(var4, var12.getExternalId(), var7, null, var10, var11, var9, var6.getVersion()));
      }
   }

   private void b(Collection<EntityInfo> var1, User var2) throws FindException {
      for (ServiceHeader var5 : this.d.filter(this.e.findAllHeaders(true), var2, OperationType.READ, null)) {
         ExternalEntityHeader var6 = EntityHeaderUtils.toExternal(var5);

         EntityType var10000;
         label79: {
            try {
               if (var5.isAlias()) {
                  var10000 = EntityType.SERVICE_ALIAS;
                  break label79;
               }
            } catch (FindException var16) {
               throw a(var16);
            }

            var10000 = var5.getType();
         }

         EntityType var7 = var10000;

         label71: {
            try {
               if (var5.isAlias()) {
                  var17 = var5.getAliasGoid().toString();
                  break label71;
               }
            } catch (FindException var15) {
               throw a(var15);
            }

            var17 = var5.getStrId();
         }

         String var8 = var17;

         label63: {
            try {
               if (var5.isAlias()) {
                  var18 = var5.getStrId();
                  break label63;
               }
            } catch (FindException var14) {
               throw a(var14);
            }

            var18 = null;
         }

         String var9 = var18;

         String var10001;
         label55: {
            try {
               var19 = var5.getDisplayName();
               if (var5.isAlias()) {
                  var10001 = j[15];
                  break label55;
               }
            } catch (FindException var13) {
               throw a(var13);
            }

            var10001 = "";
         }

         String var10 = var19 + var10001;

         EntityType var10002;
         String var10003;
         String var10004;
         String var10005;
         String var10006;
         String var10007;
         String var10008;
         label47: {
            try {
               var20 = new EntityInfo;
               var21 = var20;
               var10002 = var7;
               var10003 = var6.getExternalId();
               var10004 = var8;
               var10005 = var9;
               var10006 = var10;
               var10007 = var6.getDescription();
               if (var5.getFolderId() == null) {
                  var10008 = null;
                  break label47;
               }
            } catch (FindException var12) {
               throw a(var12);
            }

            var10008 = Goid.toString(var5.getFolderId());
         }

         var21./* $VF: Unable to resugar constructor */<init>(var10002, var10003, var10004, var10005, var10006, var10007, var10008, var5.getVersion());
         EntityInfo var11 = var20;
         var11.setOperations(this.h.getOperations(var6));
         var1.add(var11);
      }
   }

   private void c(Collection<EntityInfo> var1, User var2) throws FindException {
      for (PolicyHeader var5 : this.d
         .filter(this.f.findHeadersWithTypes(Collections.singleton(PolicyType.INCLUDE_FRAGMENT), true), var2, OperationType.READ, null)) {
         ExternalEntityHeader var6 = EntityHeaderUtils.toExternal(var5);

         EntityType var10000;
         label79: {
            try {
               if (var5.isAlias()) {
                  var10000 = EntityType.POLICY_ALIAS;
                  break label79;
               }
            } catch (FindException var15) {
               throw a(var15);
            }

            var10000 = var5.getType();
         }

         EntityType var7 = var10000;

         label71: {
            try {
               if (var5.isAlias()) {
                  var16 = var5.getAliasGoid().toString();
                  break label71;
               }
            } catch (FindException var14) {
               throw a(var14);
            }

            var16 = var5.getStrId();
         }

         String var8 = var16;

         label63: {
            try {
               if (var5.isAlias()) {
                  var17 = var5.getStrId();
                  break label63;
               }
            } catch (FindException var13) {
               throw a(var13);
            }

            var17 = null;
         }

         String var9 = var17;

         String var10001;
         label55: {
            try {
               var18 = var5.getName();
               if (var5.isAlias()) {
                  var10001 = j[0];
                  break label55;
               }
            } catch (FindException var12) {
               throw a(var12);
            }

            var10001 = "";
         }

         String var10 = var18 + var10001;

         EntityInfo var10002;
         EntityType var10003;
         String var10004;
         String var10005;
         String var10006;
         String var10007;
         String var10008;
         String var10009;
         label47: {
            try {
               var19 = var1;
               var20 = new EntityInfo;
               var10002 = var20;
               var10003 = var7;
               var10004 = var6.getExternalId();
               var10005 = var8;
               var10006 = var9;
               var10007 = var10;
               var10008 = var5.getDescription();
               if (var5.getFolderId() == null) {
                  var10009 = null;
                  break label47;
               }
            } catch (FindException var11) {
               throw a(var11);
            }

            var10009 = Goid.toString(var5.getFolderId());
         }

         var10002./* $VF: Unable to resugar constructor */<init>(var10003, var10004, var10005, var10006, var10007, var10008, var10009, var5.getVersion());
         var19.add(var20);
      }
   }

   private void d(Collection<EntityInfo> var1, User var2) throws FindException {
      for (FolderHeader var5 : this.d.filter(this.g.findAllHeaders(), var2, OperationType.READ, null)) {
         ExternalEntityHeader var6 = EntityHeaderUtils.toExternal(var5);

         Collection var10000;
         EntityInfo var10001;
         EntityInfo var10002;
         EntityType var10003;
         String var10004;
         String var10005;
         Object var10006;
         String var10007;
         String var10008;
         String var10009;
         label23: {
            try {
               var10000 = var1;
               var10001 = new EntityInfo;
               var10002 = var10001;
               var10003 = var5.getType();
               var10004 = var6.getExternalId();
               var10005 = var5.getStrId();
               var10006 = null;
               var10007 = var5.getName();
               var10008 = var5.getDescription();
               if (var5.getParentFolderGoid() == null) {
                  var10009 = null;
                  break label23;
               }
            } catch (FindException var7) {
               throw a(var7);
            }

            var10009 = Goid.toString(var5.getParentFolderGoid());
         }

         var10002./* $VF: Unable to resugar constructor */<init>(var10003, var10004, var10005, (String)var10006, var10007, var10008, var10009, null);
         var10000.add(var10001);
      }
   }

   static {
      String[] var5 = new String[16];
      int var3 = 0;
      String var2 = "\"ha@\u0001%\u0016aexZ\u00143#Cm`@\u000e\u0017!reh]09#v\rcm`@\u000ex4qd]F\u0012\"\u0010aexZ\u00143#j}yY\u0013&>p}\u000baexZ\u00143#Jf~]#Wg~\\\u0010&>p}hM@3?v`yP@\"(rl-[\u0005'$gzyL\u0004vv\u0002%'$R{bJ\u0005%\"kgj\t\u00123 wl~]@0>p)nE\u0015%%g{-@\u000e0>,\u0017G{\u007fF\u0012v7kgi@\u000e1qggy@\u0014?4q'\u0018C|yA\u00058%kjl]\t9?\"{hX\u0015?#gm#$R{bJ\u0005%\"kgj\t\u00123 wl~]@0>p)jH\u00143&cp-@\u000e0>,\u000faexZ\u00143#j}yY\u00109#v\u0017G{\u007fF\u0012v7kgi@\u000e1qggy@\u0014?4q'\u001dr{bJ\u0005%\"Afc]\u00129=nl\u007fl\u0018\"4pglE09#v";
      int var4 = "\"ha@\u0001%\u0016aexZ\u00143#Cm`@\u000e\u0017!reh]09#v\rcm`@\u000ex4qd]F\u0012\"\u0010aexZ\u00143#j}yY\u0013&>p}\u000baexZ\u00143#Jf~]#Wg~\\\u0010&>p}hM@3?v`yP@\"(rl-[\u0005'$gzyL\u0004vv\u0002%'$R{bJ\u0005%\"kgj\t\u00123 wl~]@0>p)nE\u0015%%g{-@\u000e0>,\u0017G{\u007fF\u0012v7kgi@\u000e1qggy@\u0014?4q'\u0018C|yA\u00058%kjl]\t9?\"{hX\u0015?#gm#$R{bJ\u0005%\"kgj\t\u00123 wl~]@0>p)jH\u00143&cp-@\u000e0>,\u000faexZ\u00143#j}yY\u00109#v\u0017G{\u007fF\u0012v7kgi@\u000e1qggy@\u0014?4q'\u001dr{bJ\u0005%\"Afc]\u00129=nl\u007fl\u0018\"4pglE09#v"
         .length();
      char var1 = 6;
      int var7 = -1;

      label24:
      while (true) {
         byte var10000 = 112;
         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) {
                     j = var5;
                     a = Logger.getLogger(GatewayApiImpl.class.getName());
                     return;
                  }

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

                  var2 = "QmiP\u0004`&w|~L\u0005))s?uP\u0012%ggkzK\u00033\u00064~wV\u00173";
                  var4 = "QmiP\u0004`&w|~L\u0005))s?uP\u0012%ggkzK\u00033\u00064~wV\u00173".length();
                  var1 = 27;
                  var7 = -1;
            }

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

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

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

      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 -> 114;
            case 1 -> 121;
            case 2 -> 125;
            case 3 -> 89;
            case 4 -> 16;
            case 5 -> 38;
            default -> 33;
         });
      }

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