home *** CD-ROM | disk | FTP | other *** search
/ PC Online 1997 July / PCO_07_97.ISO / NET_COM / cc32e40.exe / nav40.z / java40.jar / netscape / softupdate / SoftwareUpdate.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-06-07  |  10.1 KB  |  510 lines

  1. package netscape.softupdate;
  2.  
  3. import java.util.Enumeration;
  4. import java.util.Vector;
  5. import netscape.javascript.JSObject;
  6. import netscape.security.AppletSecurity;
  7. import netscape.security.AppletSecurityException;
  8. import netscape.security.Principal;
  9. import netscape.security.PrivilegeManager;
  10. import netscape.security.Target;
  11. import netscape.security.UserDialogHelper;
  12. import netscape.security.UserTarget;
  13.  
  14. public final class SoftwareUpdate {
  15.    static final int nTargets = 3;
  16.    static String[] targetNames = new String[]{"LimitedInstall", "FullInstall", "SilentInstall"};
  17.    public static final int LIMITED_INSTALL = 0;
  18.    public static final int FULL_INSTALL = 1;
  19.    public static final int SILENT_INSTALL = 2;
  20.    protected static final String IMPERSONATOR = "Impersonator";
  21.    static final int BAD_PACKAGE_NAME = -200;
  22.    static final int UNEXPECTED_ERROR = -201;
  23.    static final int ACCESS_DENIED = -202;
  24.    static final int TOO_MANY_CERTIFICATES = -203;
  25.    static final int NO_INSTALLER_CERTIFICATE = -204;
  26.    static final int NO_CERTIFICATE = -205;
  27.    static final int NO_MATCHING_CERTIFICATE = -206;
  28.    static final int UNKNOWN_JAR_FILE = -207;
  29.    static final int INVALID_ARGUMENTS = -208;
  30.    static final int ILLEGAL_RELATIVE_PATH = -209;
  31.    static final int USER_CANCELLED = -210;
  32.    static final int INSTALL_NOT_STARTED = -211;
  33.    static final int SILENT_MODE_DENIED = -212;
  34.    protected String packageName;
  35.    protected Vector installedFiles;
  36.    protected VersionInfo versionInfo;
  37.    protected String userPackageName;
  38.    private ProgressMediator progress;
  39.    private int userChoice;
  40.    private boolean silent;
  41.    private String installerJarName;
  42.    private String jarName;
  43.    private int zigPtr;
  44.    private Principal installPrincipal;
  45.  
  46.    public SoftwareUpdate(JSObject var1, String var2) {
  47.       this.userPackageName = var2;
  48.       this.installPrincipal = null;
  49.       this.packageName = null;
  50.       this.progress = null;
  51.       this.zigPtr = 0;
  52.       this.userChoice = -1;
  53.       this.VerifyJSObject(var1);
  54.       this.jarName = (String)var1.getMember("src");
  55.       this.silent = false;
  56.  
  57.       try {
  58.          var1.getMember("silent");
  59.          this.silent = (Boolean)var1.getMember("silent");
  60.       } catch (Throwable var3) {
  61.          System.out.println("Unexpected throw on silent");
  62.          this.silent = false;
  63.       }
  64.    }
  65.  
  66.    protected void finalize() throws Throwable {
  67.       super.finalize();
  68.       this.CleanUp();
  69.    }
  70.  
  71.    private native void VerifyJSObject(JSObject var1);
  72.  
  73.    private void InitializeInstallerCertificate() throws SoftUpdateException {
  74.       Object var1 = null;
  75.       var1 = this.getCertificates(this.zigPtr, this.installerJarName);
  76.       if (var1 == null) {
  77.          throw new SoftUpdateException(Strings.error_NoCertificate(), -204);
  78.       } else if (((Object[])var1).length > 1) {
  79.          throw new SoftUpdateException(Strings.error_TooManyCertificates(), -203);
  80.       } else {
  81.          this.installPrincipal = new Principal(14, (byte[])((Object[])var1)[0]);
  82.       }
  83.    }
  84.  
  85.    private void CheckSilentPrivileges() {
  86.       if (this.silent) {
  87.          try {
  88.             PrivilegeManager var1 = AppletSecurity.getPrivilegeManager();
  89.             Target var2 = Target.findTarget("Impersonator");
  90.             var1.enablePrivilege(var2);
  91.             Target var3 = Target.findTarget(targetNames[2]);
  92.             var1.enablePrivilege(var3, this.GetPrincipal());
  93.          } catch (Throwable var4) {
  94.             System.out.println(Strings.error_SilentModeDenied());
  95.             this.silent = false;
  96.          }
  97.       }
  98.    }
  99.  
  100.    private void RequestSecurityPrivileges(int var1) {
  101.       if (var1 != 0 && var1 != 1) {
  102.          var1 = 1;
  103.       }
  104.  
  105.       PrivilegeManager var2 = AppletSecurity.getPrivilegeManager();
  106.       Target var3 = Target.findTarget("Impersonator");
  107.       var2.enablePrivilege(var3);
  108.       Target var4 = Target.findTarget(targetNames[var1]);
  109.       var2.enablePrivilege(var4, this.GetPrincipal());
  110.    }
  111.  
  112.    protected final Principal GetPrincipal() {
  113.       return this.installPrincipal;
  114.    }
  115.  
  116.    protected final String GetUserPackageName() {
  117.       return this.userPackageName;
  118.    }
  119.  
  120.    protected final boolean GetSilent() {
  121.       return this.silent;
  122.    }
  123.  
  124.    protected final Enumeration GetInstallQueue() {
  125.       return this.installedFiles != null ? this.installedFiles.elements() : null;
  126.    }
  127.  
  128.    public Object GetFolder(String var1) {
  129.       FolderSpec var2 = null;
  130.  
  131.       try {
  132.          if (var1.compareTo("Installed") != 0) {
  133.             var2 = new FolderSpec(var1, this.packageName, this.userPackageName);
  134.             if (var1 == "User Pick") {
  135.                var2.GetDirectoryPath();
  136.             }
  137.          }
  138.  
  139.          return var2;
  140.       } catch (Throwable var3) {
  141.          return null;
  142.       }
  143.    }
  144.  
  145.    public Object GetComponentFolder(String var1) {
  146.       FolderSpec var3 = null;
  147.       String var2 = VersionRegistry.getDefaultDirectory(var1);
  148.       if (var2 == null) {
  149.          var2 = VersionRegistry.componentPath(var1);
  150.          int var4;
  151.          if (var2 != null && (var4 = var2.lastIndexOf(System.getProperty("file.separator"))) > 0) {
  152.             char[] var5 = new char[var4];
  153.             var2.getChars(0, var4, var5, 0);
  154.             var2 = new String(var5);
  155.          }
  156.       }
  157.  
  158.       if (var2 != null) {
  159.          var3 = new FolderSpec("Installed", var2, this.userPackageName);
  160.       }
  161.  
  162.       return var3;
  163.    }
  164.  
  165.    public Object GetWinProfile(Object var1, String var2) {
  166.       WinProfile var3 = null;
  167.       String var4 = System.getProperty("os.name");
  168.  
  169.       try {
  170.          if (this.packageName == null) {
  171.             throw new SoftUpdateException(Strings.error_WinProfileMustCallStart(), -211);
  172.          }
  173.  
  174.          if (var4.indexOf("Windows") >= 0 || var4.equals("Win32s")) {
  175.             var3 = new WinProfile(this, (FolderSpec)var1, var2);
  176.          }
  177.       } catch (SoftUpdateException var5) {
  178.          var3 = null;
  179.       }
  180.  
  181.       return var3;
  182.    }
  183.  
  184.    public Object GetWinRegistry() {
  185.       WinReg var1 = null;
  186.       String var2 = System.getProperty("os.name");
  187.  
  188.       try {
  189.          if (this.packageName == null) {
  190.             throw new SoftUpdateException(Strings.error_WinProfileMustCallStart(), -211);
  191.          }
  192.  
  193.          if (var2.indexOf("Windows") >= 0 || var2.equals("Win32s")) {
  194.             var1 = new WinReg(this);
  195.          }
  196.       } catch (Throwable var3) {
  197.          var1 = null;
  198.       }
  199.  
  200.       return var1;
  201.    }
  202.  
  203.    private native void OpenJARFile() throws SoftUpdateException;
  204.  
  205.    private native void CloseJARFile();
  206.  
  207.    private native Object[] getCertificates(int var1, String var2);
  208.  
  209.    protected String ExtractJARFile(String var1) throws SoftUpdateException, AppletSecurityException {
  210.       if (this.zigPtr == 0) {
  211.          throw new SoftUpdateException("JAR file\thas\tnot\tbeen opened", -207);
  212.       } else {
  213.          PrivilegeManager var3 = AppletSecurity.getPrivilegeManager();
  214.          Target var2 = Target.findTarget(targetNames[0]);
  215.          var3.checkPrivilegeEnabled(var2);
  216.          boolean var5 = false;
  217.          Object var6 = null;
  218.          var6 = this.getCertificates(this.zigPtr, var1);
  219.          if (var6 == null) {
  220.             throw new SoftUpdateException("Missing certificate for " + var1, -205);
  221.          } else {
  222.             for(int var4 = 0; var4 < ((Object[])var6).length; ++var4) {
  223.                Principal var7 = new Principal(14, (byte[])((Object[])var6)[0]);
  224.                if (this.installPrincipal.equals(var7)) {
  225.                   var5 = true;
  226.                   break;
  227.                }
  228.             }
  229.  
  230.             if (!var5) {
  231.                throw new SoftUpdateException(Strings.error_MismatchedCertificate() + var1, -206);
  232.             } else {
  233.                String var9 = this.NativeExtractJARFile(var1);
  234.                return var9;
  235.             }
  236.          }
  237.       }
  238.    }
  239.  
  240.    private native String NativeExtractJARFile(String var1) throws SoftUpdateException;
  241.  
  242.    public int StartInstall(String var1, VersionInfo var2, int var3) {
  243.       try {
  244.          if (var1 == null) {
  245.             throw new SoftUpdateException(Strings.error_BadPackageName(), -208);
  246.          } else {
  247.             char[] var4;
  248.             for(this.packageName = var1; this.packageName.endsWith("/"); this.packageName = new String(var4)) {
  249.                var4 = new char[this.packageName.length() - 1];
  250.                this.packageName.getChars(0, this.packageName.length() - 1, var4, 0);
  251.             }
  252.  
  253.             this.versionInfo = var2;
  254.             this.installedFiles = new Vector();
  255.             this.OpenJARFile();
  256.             this.InitializeInstallerCertificate();
  257.             this.CheckSilentPrivileges();
  258.             this.RequestSecurityPrivileges(var3);
  259.             this.progress = new ProgressMediator(this);
  260.             this.progress.StartInstall();
  261.             return 0;
  262.          }
  263.       } catch (SoftUpdateException var5) {
  264.          return var5.GetError();
  265.       } catch (Exception var6) {
  266.          ((Throwable)var6).printStackTrace();
  267.          return -201;
  268.       }
  269.    }
  270.  
  271.    protected void UserCancelled() {
  272.       this.userChoice = 0;
  273.       this.AbortInstall();
  274.    }
  275.  
  276.    protected void UserApproved() {
  277.       this.userChoice = 1;
  278.    }
  279.  
  280.    public int FinalizeInstall() {
  281.       short var1 = 0;
  282.  
  283.       short var2;
  284.       try {
  285.          if (this.packageName != null) {
  286.             this.progress.ConfirmWithUser();
  287.  
  288.             while(this.userChoice == -1) {
  289.                Thread.sleep(10L);
  290.             }
  291.  
  292.             if (this.userChoice == 1) {
  293.                Enumeration var5 = this.GetInstallQueue();
  294.                InstallObject var6 = null;
  295.  
  296.                try {
  297.                   while(var5.hasMoreElements()) {
  298.                      var6 = (InstallObject)var5.nextElement();
  299.                      var6.Complete();
  300.                   }
  301.                } catch (Throwable var15) {
  302.                   if (var6 != null) {
  303.                      var6.Abort();
  304.                   }
  305.  
  306.                   while(var5.hasMoreElements()) {
  307.                      try {
  308.                         var6 = (InstallObject)var5.nextElement();
  309.                         var6.Abort();
  310.                      } catch (Throwable var14) {
  311.                      }
  312.                   }
  313.  
  314.                   throw var15;
  315.                }
  316.  
  317.                if (this.versionInfo != null) {
  318.                   var1 = (short)VersionRegistry.installComponent(this.packageName, (String)null, this.versionInfo);
  319.                }
  320.  
  321.                return var1;
  322.             }
  323.  
  324.             this.AbortInstall();
  325.             var2 = -210;
  326.             return var2;
  327.          }
  328.  
  329.          var2 = -1;
  330.       } catch (SoftUpdateException var16) {
  331.          var1 = (short)var16.GetError();
  332.          return var1;
  333.       } catch (AppletSecurityException var17) {
  334.          var1 = -202;
  335.          return var1;
  336.       } catch (Throwable var18) {
  337.          var18.printStackTrace();
  338.          System.out.println(Strings.error_Unexpected() + " FinalizeInstall");
  339.          var1 = -201;
  340.          return var1;
  341.       } finally {
  342.          if (this.installedFiles != null) {
  343.             this.installedFiles.removeAllElements();
  344.          }
  345.  
  346.          this.CleanUp();
  347.       }
  348.  
  349.       return var2;
  350.    }
  351.  
  352.    public synchronized void AbortInstall() {
  353.       try {
  354.          if (this.installedFiles != null) {
  355.             Enumeration var3 = this.GetInstallQueue();
  356.  
  357.             while(var3.hasMoreElements()) {
  358.                InstallObject var4 = (InstallObject)var3.nextElement();
  359.  
  360.                try {
  361.                   var4.Abort();
  362.                } catch (Throwable var11) {
  363.                }
  364.             }
  365.  
  366.             this.installedFiles.removeAllElements();
  367.             this.installedFiles = null;
  368.          }
  369.  
  370.          this.CloseJARFile();
  371.       } catch (Throwable var12) {
  372.          System.out.println(Strings.error_Unexpected() + " AbortInstall");
  373.          var12.printStackTrace();
  374.       } finally {
  375.          try {
  376.             this.CleanUp();
  377.          } catch (Throwable var10) {
  378.             var10.printStackTrace();
  379.          }
  380.  
  381.       }
  382.  
  383.    }
  384.  
  385.    private synchronized void CleanUp() {
  386.       if (this.progress != null) {
  387.          this.progress.Complete();
  388.       }
  389.  
  390.       this.CloseJARFile();
  391.       this.progress = null;
  392.       this.zigPtr = 0;
  393.       if (this.installedFiles != null) {
  394.          Enumeration var1 = this.GetInstallQueue();
  395.  
  396.          while(var1.hasMoreElements()) {
  397.             InstallObject var2 = (InstallObject)var1.nextElement();
  398.             var2.Abort();
  399.          }
  400.  
  401.          this.installedFiles.removeAllElements();
  402.       }
  403.  
  404.       this.installedFiles = null;
  405.       this.packageName = null;
  406.    }
  407.  
  408.    protected void ScheduleForInstall(InstallObject var1) {
  409.       if (this.progress != null) {
  410.          this.progress.ScheduleForInstall(var1);
  411.       }
  412.  
  413.       this.installedFiles.addElement(var1);
  414.    }
  415.  
  416.    public int AddSubcomponent(String var1, VersionInfo var2, String var3, Object var4, String var5, boolean var6) {
  417.       try {
  418.          if (this.packageName == null) {
  419.             throw new SoftUpdateException(Strings.error_BadPackageNameAS(), -200);
  420.          } else {
  421.             String var8 = this.packageName.length() == 0 ? "" : this.packageName + "/";
  422.             if (var1 != null && var1.length() != 0) {
  423.                if (var1.toUpperCase().startsWith("=COMM=/")) {
  424.                   var1 = (var1.substring(7) + "===").substring(0, var1.length() - 7);
  425.                } else if (var1.charAt(0) != '/') {
  426.                   var1 = var8 + var1;
  427.                }
  428.             } else {
  429.                var1 = var8 + var3;
  430.             }
  431.  
  432.             if (var5 == null || var5.length() == 0) {
  433.                var5 = var3;
  434.             }
  435.  
  436.             boolean var9 = false;
  437.             if (!var6 && var2 != null && VersionRegistry.validateComponent(var1) == 0) {
  438.                VersionInfo var10 = VersionRegistry.componentVersion(var1);
  439.                if (var2.compareTo(var10) > 0) {
  440.                   var9 = true;
  441.                }
  442.             } else {
  443.                var9 = true;
  444.             }
  445.  
  446.             if (var9) {
  447.                InstallFile var7 = new InstallFile(this, var1, var2, var3, (FolderSpec)var4, var5, var6);
  448.                var7.ExtractFile();
  449.                this.ScheduleForInstall(var7);
  450.             }
  451.  
  452.             return 0;
  453.          }
  454.       } catch (SoftUpdateException var11) {
  455.          return var11.GetError();
  456.       } catch (AppletSecurityException var12) {
  457.          return -202;
  458.       } catch (Throwable var13) {
  459.          System.out.println(Strings.error_Unexpected() + "AddSubcomponent");
  460.          return -201;
  461.       }
  462.    }
  463.  
  464.    public int Execute(String var1) {
  465.       try {
  466.          InstallExecute var2 = new InstallExecute(this, var1);
  467.          var2.ExtractFile();
  468.          this.ScheduleForInstall(var2);
  469.          return 0;
  470.       } catch (SoftUpdateException var3) {
  471.          return var3.GetError();
  472.       } catch (AppletSecurityException var4) {
  473.          return -202;
  474.       } catch (Throwable var5) {
  475.          var5.printStackTrace();
  476.          System.out.println(Strings.error_Unexpected() + "Execute");
  477.          return -201;
  478.       }
  479.    }
  480.  
  481.    public int[] Gestalt(String var1) {
  482.       int[] var2 = new int[]{0, 0};
  483.  
  484.       try {
  485.          var2[1] = this.NativeGestalt(var1);
  486.       } catch (SoftUpdateException var4) {
  487.          var2[0] = var4.GetError();
  488.       } catch (Throwable var5) {
  489.          var2[0] = -1;
  490.          System.out.println(Strings.error_Unexpected() + "Gestalt");
  491.       }
  492.  
  493.       return var2;
  494.    }
  495.  
  496.    private native int NativeGestalt(String var1) throws SoftUpdateException;
  497.  
  498.    static {
  499.       Principal var3 = PrivilegeManager.getSystemPrincipal();
  500.       UserTarget var0 = new UserTarget(targetNames[0], var3, UserDialogHelper.targetRiskMedium(), UserDialogHelper.targetRiskColorMedium(), Strings.targetDesc_LimitedInstall(), Strings.targetUrl_LimitedInstall());
  501.       var0 = (UserTarget)((Target)var0).registerTarget();
  502.       Target[] var4 = new Target[]{var0};
  503.       UserTarget var1 = new UserTarget(targetNames[1], var3, UserDialogHelper.targetRiskHigh(), UserDialogHelper.targetRiskColorHigh(), Strings.targetDesc_FullInstall(), Strings.targetUrl_FullInstall(), var4);
  504.       var1 = (UserTarget)((Target)var1).registerTarget();
  505.       var4[0] = var1;
  506.       UserTarget var2 = new UserTarget(targetNames[2], var3, UserDialogHelper.targetRiskMedium(), UserDialogHelper.targetRiskColorMedium(), Strings.targetDesc_SilentInstall(), Strings.targetUrl_SilentInstall(), var4);
  507.       var2 = (UserTarget)((Target)var2).registerTarget();
  508.    }
  509. }
  510.