package com.l7tech.server;

import com.l7tech.gateway.common.Component;
import com.l7tech.gateway.common.audit.BootMessages;
import com.l7tech.identity.cert.ClientCertManager;
import com.l7tech.objectmodel.FindException;
import com.l7tech.security.cert.TrustedCertManager;
import com.l7tech.security.prov.JceProvider;
import com.l7tech.server.audit.Auditor;
import com.l7tech.server.event.system.Closed;
import com.l7tech.server.event.system.Closing;
import com.l7tech.server.event.system.Initialized;
import com.l7tech.server.event.system.Initializing;
import com.l7tech.server.event.system.Started;
import com.l7tech.server.event.system.Starting;
import com.l7tech.server.event.system.Stopped;
import com.l7tech.server.event.system.Stopping;
import com.l7tech.util.BuildInfo;
import com.l7tech.util.ExceptionUtils;
import com.l7tech.util.InetAddressUtil;
import com.l7tech.util.ResourceUtils;
import com.l7tech.util.Service;
import com.l7tech.util.ShutdownExceptionHandler;
import com.l7tech.util.SyspropUtil;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Properties;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.transform.TransformerFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ApplicationObjectSupport;

public class BootProcess extends ApplicationObjectSupport {
   private static final Logger a;
   private boolean b = false;
   private final AtomicBoolean c = new AtomicBoolean(false);
   public static final String LOCALHOST_IP;
   private Collection<ServerComponentLifecycle> d;
   private Map<String, String> e;
   private SystemProperties f;
   private Properties g;
   private ServerConfig h;
   private Auditor i;
   private String j;
   private static final String[] k;

   private void a(File var1) {
      File[] var2 = var1.listFiles(new h(this));

      for (File var6 : var2) {
         String var7 = var6.toString();
         this.i.logAndAudit(BootMessages.DELETING_ATTACHMENT, var7);
         var6.delete();
      }
   }

   public void setServerConfig(ServerConfig var1) throws LifecycleException {
      this.h = var1;
   }

   public void setOtherPropertiesFiles(Map<String, String> var1) {
      this.e = var1;
   }

   public void setSystemProperties(SystemProperties var1) {
      this.f = var1;
   }

   public void setNodeProperties(Properties var1) {
      this.g = var1;
   }

   public void start() throws LifecycleException {
      try {
         this.a();
      } catch (LifecycleException var4) {
         throw var4;
      } catch (Exception var5) {
         throw new LifecycleException(var5);
      }

      this.b();
      this.b = true;
      this.getApplicationContext().publishEvent(new Starting(this, Component.GW_SERVER, this.j));
      String[] var3 = k;
      a.info(var3[32]);
      a.info(var3[11]);

      for (ServerComponentLifecycle var2 : this.d()) {
         Logger var10000 = a;
         String var10001 = String.valueOf(var2);
         var3 = k;
         var10000.info(var3[5] + var10001);
         var2.start();
      }

      this.c.set(true);
      this.getApplicationContext().publishEvent(new Started(this, Component.GW_SERVER, this.j));
      a.info(k[7]);
   }

   public void stop() throws LifecycleException {
      if (this.c.get()) {
         this.getApplicationContext().publishEvent(new Stopping(this, Component.GW_SERVER, this.j));
         String[] var4 = k;
         a.info(var4[13]);
         ArrayList var1 = new ArrayList();
         var1.addAll(this.d());
         Collections.reverse(var1);

         for (ServerComponentLifecycle var3 : var1) {
            Logger var10000 = a;
            String var10001 = String.valueOf(var3);
            var4 = k;
            var10000.info(var4[24] + var10001);
            var3.stop();
         }

         this.c.set(false);
         this.getApplicationContext().publishEvent(new Stopped(this, Component.GW_SERVER, this.j));
         var4 = k;
         a.info(var4[33]);
      } else {
         a.info(k[25]);
      }
   }

   public void close() throws LifecycleException {
      this.getApplicationContext().publishEvent(new Closing(this, Component.GW_SERVER, this.j));
      String[] var5 = k;
      a.info(var5[6]);
      ArrayList var1 = new ArrayList();
      var1.addAll(this.d());
      Collections.reverse(var1);

      for (ServerComponentLifecycle var3 : var1) {
         Logger var10000 = a;
         String var10001 = String.valueOf(var3);
         var5 = k;
         var10000.info(var5[27] + var10001);

         try {
            var3.close();
         } catch (Exception var6) {
            var10000 = a;
            Level var10 = Level.SEVERE;
            String var10002 = ExceptionUtils.getMessage(var6);
            var5 = k;
            var10000.log(var10, var5[22] + var10002, var6);
         }
      }

      ShutdownExceptionHandler.getInstance().shutdownNotify();
      this.getApplicationContext().publishEvent(new Closed(this, Component.GW_SERVER, this.j));
      a.info(k[0]);
   }

   // $VF: Could not verify finally blocks. A semaphore variable has been added to preserve control flow.
   // Please report this to the Vineflower issue tracker, at https://github.com/Vineflower/vineflower/issues with a copy of the class file (if you have the rights to distribute it!)
   public void destroy() {
      boolean var10 = false /* VF: Semaphore variable */;

      label61: {
         try {
            var10 = true;
            this.stop();
            var10 = false;
            break label61;
         } catch (Exception var14) {
            Logger var10000 = a;
            Level var10001 = Level.SEVERE;
            String var10002 = ExceptionUtils.getMessage(var14);
            String[] var4 = k;
            var10000.log(var10001, var4[3] + var10002, var14);
            var10 = false;
         } finally {
            if (var10) {
               try {
                  this.close();
               } catch (Exception var11) {
                  a.log(Level.SEVERE, k[30] + ExceptionUtils.getMessage(var11), var11);
               }
            }
         }

         try {
            this.close();
         } catch (Exception var12) {
            Logger var21 = a;
            Level var23 = Level.SEVERE;
            String var25 = ExceptionUtils.getMessage(var12);
            String[] var16 = k;
            var21.log(var23, var16[30] + var25, var12);
         }

         return;
      }

      try {
         this.close();
      } catch (Exception var13) {
         Logger var22 = a;
         Level var24 = Level.SEVERE;
         String var26 = ExceptionUtils.getMessage(var13);
         String[] var17 = k;
         var22.log(var24, var17[9] + var26, var13);
      }
   }

   private void a() throws Exception {
      ApplicationContext var1 = this.getApplicationContext();

      label81: {
         try {
            this.i = new Auditor(this, var1, a);
            this.f.setSystemProperties(this.g, k[19], false);
            if (this.e == null || this.e.isEmpty()) {
               break label81;
            }
         } catch (IOException var17) {
            throw a(var17);
         }

         for (String var3 : this.e.keySet()) {
            String var4 = this.e.get(var3);
            Properties var5 = new Properties();
            FileInputStream var6 = null;

            try {
               var6 = new FileInputStream(new File(var4));
               var5.load(var6);
               this.f.setSystemProperties(var5, var3, false);
            } catch (IOException var15) {
               String[] var9 = k;
               a.log(Level.WARNING, var9[12] + var4 + var9[14], var15);
            } finally {
               ResourceUtils.closeQuietly(var6);
            }
         }
      }

      a.info(BuildInfo.getLongBuildString());
      this.c();

      try {
         this.j = InetAddress.getLocalHost().getHostAddress();
      } catch (UnknownHostException var14) {
         this.i.logAndAudit(BootMessages.NO_DETECTED_LOCAL_IP, new String[]{InetAddressUtil.getLocalHostAddress()}, var14);
         this.j = LOCALHOST_IP;
      }

      this.a(this.h.getAttachmentDirectory());
      var1.publishEvent(new Initializing(this, Component.GW_SERVER, this.j));
      String[] var18 = k;
      a.info(var18[16]);
      this.i.logAndAudit(BootMessages.CRYPTO_INIT);
      JceProvider.init();
      this.i.logAndAudit(BootMessages.CRYPTO_ASYMMETRIC, String.valueOf(JceProvider.getInstance().getDisplayName()));
      this.i.logAndAudit(BootMessages.CRYPTO_SYMMETRIC, String.valueOf(JceProvider.getInstance().getDisplayName()));
      var1.publishEvent(new Initialized(this, Component.GW_SERVER, this.j));
      a.info(var18[17]);
   }

   private void b() throws LifecycleException {
      if (!this.b) {
         String[] var4 = k;
         a.info(var4[15]);
         ApplicationContext var1 = this.getApplicationContext();

         try {
            TrustedCertManager var2 = (TrustedCertManager)var1.getBean(var4[23]);
            var2.findByThumbprint(null);
            var2.findByThumbprint("");
            var2.findBySki(null);
            var2.findBySki("");
            ClientCertManager var3 = (ClientCertManager)var1.getBean(var4[31]);
            var3.findByThumbprint(null);
            var3.findByThumbprint("");
            var3.findBySki(null);
            var3.findBySki("");
         } catch (FindException var5) {
            a.log(Level.WARNING, k[21], var5);
         }
      }
   }

   private void c() {
      Class[] var1 = new Class[]{DocumentBuilderFactory.class, SAXParserFactory.class, TransformerFactory.class};
      Properties var2 = new Properties();
      String[] var12 = k;
      File var3 = new File(SyspropUtil.getProperty(var12[26]));
      var3 = new File(var3, var12[18]);
      var3 = new File(var3, var12[8]);
      FileInputStream var4 = null;

      try {
         var4 = new FileInputStream(var3);
         var2.load(var4);
      } catch (IOException var18) {
         Logger var10000 = a;
         Level var10001 = Level.FINE;
         String var10002 = ExceptionUtils.getMessage(var18);
         var12 = k;
         var10000.log(var10001, var12[34] + var10002 + var12[29], ExceptionUtils.getDebugException(var18));
      } finally {
         ResourceUtils.closeQuietly(var4);
      }

      HashMap var5 = new HashMap();

      for (Class var9 : var1) {
         String var10 = var9.getName();
         var12 = k;
         var5.put(var10, var12[1]);
      }

      for (Class var37 : var1) {
         String var41 = var37.getName();
         Iterator var11 = Service.providerClassNames(var37);

         try {
            if (var11.hasNext()) {
               var5.put(var41, var11.next() + k[4]);
            }
         } catch (IOException var22) {
            throw a(var22);
         }
      }

      for (Class var38 : var1) {
         String var42 = var38.getName();
         String var45 = var2.getProperty(var42);

         try {
            if (var45 != null) {
               var5.put(var42, var45 + k[20]);
            }
         } catch (IOException var21) {
            throw a(var21);
         }
      }

      for (Class var39 : var1) {
         String var43 = var39.getName();
         String var46 = SyspropUtil.getProperty(var43);

         try {
            if (var46 != null) {
               var5.put(var43, var46 + k[10]);
            }
         } catch (IOException var20) {
            throw a(var20);
         }
      }

      for (Class var40 : var1) {
         String var44 = var40.getName();
         Logger var50 = a;
         String var51 = (String)var5.get(var44);
         var12 = k;
         var50.config(var12[35] + var44 + var12[2] + var51 + var12[28]);
      }
   }

   private Collection<ServerComponentLifecycle> d() {
      Collection var1 = this.d;
      if (var1 == null) {
         var1 = this.getApplicationContext().getBeansOfType(ServerComponentLifecycle.class, false, false).values();
         this.d = var1;
      }

      return var1;
   }

   public String getIpAddress() {
      return this.j;
   }

   static {
      String[] var5 = new String[36];
      int var3 = 0;
      String var2 = "&[\u0001Op\u0011{\u0007!r(}@9\u0001\u0006B\u0017\u0007O5R( O\rYe\u0001<\nYNK}\u001c9\u0000\u0017\nYf\u0001'\nN\u0007RrU\u0017\nX\u001alg\u001a6\u0000D\u001d\u00065\u0011E\u001aNgF\u0010'\u0013^\rYfU\u00145~3\u00136C\u000fNa\u001c;\u0002\u0017\rSx\u0005:\u000bR\u0000H5\u0019&[\u0001O|\u001b2ED\u000bNc\u0010'ET\u0001Qe\u001a;\u0000Y\u001aO\u0016'X\u0001H5\u0005'\nT\u000bOfU6\nZ\u001ePp\u00010K\u000f\u000fV\u0016L;\u0005'\nG\u000bNa\u001c0\u0016% O\rYe\u0001<\nYNK}\u001c9\u0000\u0017\rPz\u0006<\u000bPN~z\u001a!5E\u0001_p\u0006&_\u0017\u0014E\u001aNgF\f&\u0011R\u0003\u001ce\u0007:\u0015R\u001cHl(\u001d6C\u000fNa\u001c;\u0002\u0017\u001dYg\u00030\u0017\u0017\rSx\u0005:\u000bR\u0000Hf[{K\u0013&X\u001bPq\u001br\u0011\u0017\u001cYt\u0011u\u0003E\u0001Q5\u001a6C\u0001Le\u001c;\u0002\u0017\u001dYg\u00030\u0017\u0017\rSx\u0005:\u000bR\u0000Hf\n^\u0017\u0007[{\u001a'\fY\t\u0019,Y\u0007H|\u00149\fM\u0007RrU&\u0000E\u0018YgU6\u0004T\u0006Y\u0013,Y\u0007H|\u00149\fM\u0007RrU&\u0000E\u0018Yg\u0012,Y\u0007H|\u00149\fM\u000bX5\u00060\u0017A\u000bN\u0003\t^\f\u0011\u0006X\u0003\u0012yB!\u0000T\u0006\u0012f\u0010'\u0013R\u001c\u0014E\u001aNg\u007f\u0014-\u0015\u0019\u001eNz\u00050\u0017C\u0007Yf(U&X\u001bPqU;\nCNH}\u00008\u0007G\u001cU{\u0001u\u0006R\u001cHf[u6X\u0003Ya\u001d<\u000bPN_z\u0007'\u0010G\u001aYqU<\u000b\u0017\u001aN`\u0006!\u0000S1_p\u0007!EX\u001c\u001cv\u0019<\u0000Y\u001acv\u0010'\u0011\u0017\u001a]w\u00190K# O\rYe\u0001<\nYNK}\u001c9\u0000\u0017\rPz\u0006<\u000bPN_z\u0018%\nY\u000bRaOu\u0012\u0011E\u001bOa\u00101&R\u001cHX\u0014;\u0004P\u000bN\u001e6C\u0001Le\u001c;\u0002\u0017\nUf\u0016:\u0013R\u001cYqU6\nZ\u001eS{\u0010;\u0011\u0017\b6C\u0001Le\u00101K\t\u000fV\u0018];\u001d:\bR\u001d&[\u0001O|\u001b2ES\u0007Ov\u001a#\u0000E\u000bX5\u0016:\bG\u0001Rp\u001b!E\u0002B\u0019\u0002B\u0019% O\rYe\u0001<\nYNK}\u001c9\u0000\u0017\rPz\u0006<\u000bPN~z\u001a!5E\u0001_p\u0006&_\u0017\u0011\u0006[\u0007Y{\u0001\u0016\u0000E\u001aqt\u001b4\u0002R\u001c\u000f6C\u000fNa\u001c;\u0002\u0017\u001dYg\u00030\u0017\b6C\u0001Le\u00101K";
      int var4 = "&[\u0001Op\u0011{\u0007!r(}@9\u0001\u0006B\u0017\u0007O5R( O\rYe\u0001<\nYNK}\u001c9\u0000\u0017\nYf\u0001'\nN\u0007RrU\u0017\nX\u001alg\u001a6\u0000D\u001d\u00065\u0011E\u001aNgF\u0010'\u0013^\rYfU\u00145~3\u00136C\u000fNa\u001c;\u0002\u0017\rSx\u0005:\u000bR\u0000H5\u0019&[\u0001O|\u001b2ED\u000bNc\u0010'ET\u0001Qe\u001a;\u0000Y\u001aO\u0016'X\u0001H5\u0005'\nT\u000bOfU6\nZ\u001ePp\u00010K\u000f\u000fV\u0016L;\u0005'\nG\u000bNa\u001c0\u0016% O\rYe\u0001<\nYNK}\u001c9\u0000\u0017\rPz\u0006<\u000bPN~z\u001a!5E\u0001_p\u0006&_\u0017\u0014E\u001aNgF\f&\u0011R\u0003\u001ce\u0007:\u0015R\u001cHl(\u001d6C\u000fNa\u001c;\u0002\u0017\u001dYg\u00030\u0017\u0017\rSx\u0005:\u000bR\u0000Hf[{K\u0013&X\u001bPq\u001br\u0011\u0017\u001cYt\u0011u\u0003E\u0001Q5\u001a6C\u0001Le\u001c;\u0002\u0017\u001dYg\u00030\u0017\u0017\rSx\u0005:\u000bR\u0000Hf\n^\u0017\u0007[{\u001a'\fY\t\u0019,Y\u0007H|\u00149\fM\u0007RrU&\u0000E\u0018YgU6\u0004T\u0006Y\u0013,Y\u0007H|\u00149\fM\u0007RrU&\u0000E\u0018Yg\u0012,Y\u0007H|\u00149\fM\u000bX5\u00060\u0017A\u000bN\u0003\t^\f\u0011\u0006X\u0003\u0012yB!\u0000T\u0006\u0012f\u0010'\u0013R\u001c\u0014E\u001aNg\u007f\u0014-\u0015\u0019\u001eNz\u00050\u0017C\u0007Yf(U&X\u001bPqU;\nCNH}\u00008\u0007G\u001cU{\u0001u\u0006R\u001cHf[u6X\u0003Ya\u001d<\u000bPN_z\u0007'\u0010G\u001aYqU<\u000b\u0017\u001aN`\u0006!\u0000S1_p\u0007!EX\u001c\u001cv\u0019<\u0000Y\u001acv\u0010'\u0011\u0017\u001a]w\u00190K# O\rYe\u0001<\nYNK}\u001c9\u0000\u0017\rPz\u0006<\u000bPN_z\u0018%\nY\u000bRaOu\u0012\u0011E\u001bOa\u00101&R\u001cHX\u0014;\u0004P\u000bN\u001e6C\u0001Le\u001c;\u0002\u0017\nUf\u0016:\u0013R\u001cYqU6\nZ\u001eS{\u0010;\u0011\u0017\b6C\u0001Le\u00101K\t\u000fV\u0018];\u001d:\bR\u001d&[\u0001O|\u001b2ES\u0007Ov\u001a#\u0000E\u000bX5\u0016:\bG\u0001Rp\u001b!E\u0002B\u0019\u0002B\u0019% O\rYe\u0001<\nYNK}\u001c9\u0000\u0017\rPz\u0006<\u000bPN~z\u001a!5E\u0001_p\u0006&_\u0017\u0011\u0006[\u0007Y{\u0001\u0016\u0000E\u001aqt\u001b4\u0002R\u001c\u000f6C\u000fNa\u001c;\u0002\u0017\u001dYg\u00030\u0017\b6C\u0001Le\u00101K"
         .length();
      char var1 = 7;
      int var7 = -1;

      label24:
      while (true) {
         byte var10000 = 125;
         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) {
                     k = var5;
                     a = Logger.getLogger(BootProcess.class.getName());
                     LOCALHOST_IP = InetAddressUtil.getLocalHostAddress();
                     return;
                  }

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

                  var2 = "F#z5\u00013Af0l3\u001dt\u0013s#g*\u0016aGj4{z\u0015z_fq/\u000eS#g,\u001awVqqn5\u00013\u0014";
                  var4 = "F#z5\u00013Af0l3\u001dt\u0013s#g*\u0016aGj4{z\u0015z_fq/\u000eS#g,\u001awVqqn5\u00013\u0014".length();
                  var1 = 31;
                  var7 = -1;
            }

            var10000 = 27;
            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] ^ 40);
      }

      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 -> 24;
            case 1 -> 74;
            case 2 -> 19;
            case 3 -> 65;
            case 4 -> 104;
            case 5 -> 8;
            default -> 40;
         });
      }

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