home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1995 November / PCWK1195.iso / inne / win95 / sieciowe / hotja32.lzh / hotjava / classsrc / browser / securitydialog.java < prev    next >
Text File  |  1995-08-25  |  13KB  |  480 lines

  1. /*
  2.  * @(#)SecurityDialog.java    1.18 95/08/04 Sami Shaio
  3.  *
  4.  * Copyright (c) 1995 Sun Microsystems, Inc. All Rights Reserved.
  5.  *
  6.  * Permission to use, copy, modify, and distribute this software
  7.  * and its documentation for NON-COMMERCIAL purposes and without
  8.  * fee is hereby granted provided that this copyright notice
  9.  * appears in all copies. Please refer to the file "copyright.html"
  10.  * for further important copyright and licensing information.
  11.  *
  12.  * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
  13.  * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
  14.  * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
  15.  * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR
  16.  * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
  17.  * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
  18.  */
  19. package browser;
  20.  
  21. import awt.*;
  22. import net.Firewall;
  23. import java.util.Vector;
  24.  
  25. public class SecurityDialog extends Frame {
  26.     private TextArea    text;
  27.     OptionMenu        opt;
  28.     OptionMenu        domainOpt;
  29.     public static Font    dialogFont;
  30.     Label        status;
  31.     private String    securityBlurb = "\
  32. HotJava allows executable content to be loaded\n\
  33. across the net. This greatly expands the capabilities\n\
  34. of a web browser. However, without any precautions, this\n\
  35. feature could introduce security problems.\n\
  36. \n\
  37. HotJava has been written with these problems in \n\
  38. mind and allows you to restrict the capabilities\n\
  39. of incoming executable content.\n\
  40. \n\
  41. For a full explanation of the security mechanisms\n\
  42. in HotJava and how to configure them using this\n\
  43. dialog, please select the Help button below.\n\
  44. \n\
  45. =>If this is the first time this dialog has come up,\n\
  46. =>hitting Apply leads to a safe default.";
  47.  
  48.     hotjava        target;
  49.     Toggle    restrictApplets;
  50.  
  51.     public SecurityDialog(hotjava f) {
  52.     super(f.wServer, true, false, f, 433, 540, Color.lightGray);
  53.  
  54.     setTitle("HotJava Security Dialog");
  55.     target = f;
  56.     Window cw = new Window(this, "Center", background, 300, 300);
  57.  
  58.     dialogFont = f.wServer.fonts.getFont("Dialog", Font.BOLD, 12);
  59.     setDefaultFont(dialogFont);
  60.     cw.setLayout(new ColumnLayout(false));
  61.     Row    r = new Row(cw, null, true);
  62.     text = new TextArea(r, null, null, 50, 10);
  63.     text.setText(securityBlurb);
  64.     text.setEditable(false);
  65.     r = new Row(cw, null, true);
  66.     new Label("Enter desired security mode:", null, r);
  67.     r = new Row(cw, null, true);
  68.     opt = new SecurityOptions(r, null, this);
  69.  
  70.     r = new Row(cw, null, true);
  71.     restrictApplets = new SecurityToggle(r,
  72.                          "Apply security mode to applet loading",
  73.                          this);
  74.     
  75.     r = new Row(cw, null, true);
  76.     new Label("Enter the kind of domain you're using:", null, r);
  77.     r = new Row(cw, null, true);
  78.     domainOpt = new OptionMenu(r, null, null);
  79.     domainOpt.addItem("DNS");
  80.     domainOpt.addItem("NIS");
  81.     domainOpt.select(Firewall.getDomainType());
  82.  
  83.     r = new Row(cw, null, true);
  84.     new FirewallButton(r, this, target);
  85.  
  86.     r = new Row(cw, null, true);
  87.     new SecurityApplyButton(r, this);
  88.     new SecurityDismissButton(r, this);
  89.     new SecurityHelpButton(r, target);
  90.  
  91.     r = new Row(cw, null, false);
  92.     status = new Label("Ready.", null, r);
  93.     status.reshape(0, 0, 400, status.height);
  94.     reset();
  95.     }
  96.  
  97.     public void reset() {
  98.     opt.select(Firewall.getAccessMode());
  99.     restrictApplets.setState(Firewall.getAppletRestriction());
  100.     opt.selected(opt.selectedIndex);
  101.     }
  102. }
  103.  
  104. class SecurityToggle extends Toggle {
  105.     SecurityDialog target;
  106.  
  107.     public SecurityToggle(Container r, String label, SecurityDialog f){
  108.     super(label, null, r, null, false);
  109.     target = f;
  110.     setState(Firewall.getAppletRestriction());
  111.     }
  112.  
  113.     public void selected() {
  114.     target.opt.selected(target.opt.selectedIndex);
  115.     }
  116. }
  117.  
  118. class SecurityOptions extends OptionMenu {
  119.     SecurityDialog target;
  120.  
  121.     public SecurityOptions(Container r, String label, SecurityDialog  f) {
  122.     super(r, label, null);
  123.     target = f;
  124.     // Note the order of items in this OptionMenu is the
  125.     // same as the definition of the ACCESS_* constants
  126.     // in net/Firewall.java
  127.     addItem("No access");
  128.     addItem("Applet host");
  129.     addItem("Firewall");
  130.     addItem("Unrestricted");
  131.  
  132.     select(Firewall.getAccessMode());
  133.     }
  134.  
  135.     public void selected(int index) {
  136.     if (target.restrictApplets.getState()) {
  137.         switch (index) {
  138.           case Firewall.ACCESS_NONE:
  139.         target.status.setText("No applets will be loaded.");
  140.         break;
  141.           case Firewall.ACCESS_SOURCE:
  142.         target.status.setText("Only applets from the filesystem will be loaded.");
  143.         break;
  144.           case Firewall.ACCESS_FIREWALL:
  145.         target.status.setText("Only applets inside the firewall will be loaded.");
  146.         break;
  147.           case Firewall.ACCESS_ALL:
  148.         target.status.setText("All applets will be loaded.");
  149.         break;
  150.         }
  151.     } else {
  152.         switch (index) {
  153.           case Firewall.ACCESS_NONE:
  154.         target.status.setText("Applets will be not be able to load information.");
  155.         break;
  156.           case Firewall.ACCESS_SOURCE:
  157.         target.status.setText("Only allow an applet to load info from its host.");
  158.         break;
  159.           case Firewall.ACCESS_FIREWALL:
  160.         target.status.setText("Outside applets can only load info outside the firewall.");
  161.         break;
  162.           case Firewall.ACCESS_ALL:
  163.         target.status.setText("Applets can load info from anywhere.");
  164.         break;
  165.         }
  166.     }
  167.     }
  168. }
  169.  
  170.     
  171. class FirewallButton extends Button {
  172.     private FirewallDialog fDialog;
  173.  
  174.     public FirewallButton(Container c, Frame f, hotjava w) {
  175.     super("Configure firewall...", null, c);
  176.     fDialog = new FirewallDialog(f, w);
  177.     }
  178.     public void selected(Component c, int pos) {
  179.     fDialog.map();
  180.     fDialog.resize();
  181.     }
  182. }
  183.  
  184. class FirewallDialog extends Frame implements ChoiceHandler {
  185.     int        selectedPos = -1;
  186.     List    flist;
  187.     Vector    slist;
  188.     TextField    field;
  189.     hotjava    target;
  190.     OptionMenu    opt;
  191.  
  192.     public FirewallDialog(Frame f, hotjava w) {
  193.     super(f.wServer, true, false, f, 201, 301, f.background);
  194.     setTitle("Configure Firewall List");
  195.  
  196.     target = w;
  197.     setDefaultFont(SecurityDialog.dialogFont);
  198.     Window cw = new Window(this, "Center", background, 300, 300);
  199.     cw.setLayout(new ColumnLayout(false));
  200.  
  201.     slist = new Vector();
  202.     flist = new List(cw, this, null, 10, false, false);
  203.     flist.setHFill(true);
  204.     flist.setVFill(true);
  205.     int len = Firewall.nHosts();
  206.     for (int i = 0; i < len; i++) {
  207.         String fhost = Firewall.getFirewallHost(i);
  208.         slist.addElement(fhost);
  209.         flist.addItem(fhost.substring(1));
  210.     }
  211.     cw = new Window(this, "South", background, 300, 100);
  212.     cw.setLayout(new ColumnLayout(false));
  213.     Row r = new Row(cw, null, true);
  214.     field = new FirewallTextField(r,this);
  215.     field.setHFill(true);
  216.     r = new Row(cw, null, true);
  217.     new AddButton(r, this);
  218.     new ChangeButton(r, this);
  219.     new FirewallDeleteButton(r, this);
  220.     r = new Row(cw, null, true);
  221.     new Label("Entry type:", null, r);
  222.     r = new Row(cw, null, true);
  223.     opt = new OptionMenu(r, null, null);
  224.     opt.addItem("Domain");
  225.     opt.addItem("Host");
  226.     r = new Row(cw, null, true);
  227.     new FirewallApplyButton(r, this);
  228.     new FirewallDismissButton(r, this);
  229.     new FirewallHelpButton(r, target);
  230.     }
  231.  
  232.     public void reset() {
  233.     if (slist.size() > 0) {
  234.         slist.removeAllElements();
  235.         flist.delItems(0, flist.nItems() - 1);
  236.  
  237.         int len = Firewall.nHosts();
  238.         for (int i = 0; i < len; i++) {
  239.         String fhost = Firewall.getFirewallHost(i);
  240.         slist.addElement(fhost);
  241.         flist.addItem(fhost.substring(1));
  242.         }
  243.     }
  244.     field.setText("");
  245.     }
  246.  
  247.     public void addHost() {
  248.     flist.addItem(field.getText());
  249.     String s;
  250.     if (opt.selectedIndex == 0) {
  251.         s = "D" + field.getText();
  252.         slist.addElement(s);
  253.     } else {
  254.         s = "H" + field.getText();
  255.         slist.addElement(s);
  256.     }
  257.     }
  258.  
  259.     public void doubleClick(Component c, int pos) {
  260.     }
  261.  
  262.     public void selected(Component c, int pos) {
  263.     String h = (String)(slist.elementAt(pos));
  264.     field.setText(flist.itemAt(pos));
  265.     switch (h.charAt(0)) {
  266.       case 'D':
  267.       case 'd':
  268.         opt.select(0);
  269.         break;
  270.       case 'H':
  271.       case 'h':
  272.       default:
  273.         opt.select(1);
  274.         break;
  275.     }
  276.         
  277.     selectedPos = pos;
  278.     }
  279. }
  280.  
  281. class FirewallTextField extends TextField {
  282.     FirewallDialog    target;
  283.  
  284.     public FirewallTextField(Container c, FirewallDialog f) {
  285.     super("",null,c,true);
  286.     target = f;
  287.     }
  288.     public void selected() {
  289.     target.addHost();
  290.     target.field.setText("");
  291.     }
  292. }
  293.  
  294. class FirewallDismissButton extends Button {
  295.     Frame    frame;
  296.  
  297.     public FirewallDismissButton(Container w, Frame f) {
  298.     this(w, f, "Cancel");
  299.     }
  300.     
  301.     public FirewallDismissButton(Container w, Frame f, String label) {
  302.     super(label, null, w);
  303.  
  304.     frame = f;
  305.     }
  306.     
  307.     public void selected(Component c, int pos) {
  308.     ((FirewallDialog)frame).reset();
  309.     frame.unMap();
  310.     }
  311. }
  312.  
  313. class SecurityDismissButton extends Button {
  314.     Frame    frame;
  315.  
  316.     public SecurityDismissButton(Container w, Frame f) {
  317.     this(w, f, "Cancel");
  318.     }
  319.     
  320.     public SecurityDismissButton(Container w, Frame f, String label) {
  321.     super(label, null, w);
  322.  
  323.     frame = f;
  324.     }
  325.     
  326.     public void selected(Component c, int pos) {
  327.     ((SecurityDialog)frame).reset();
  328.     frame.unMap();
  329.     }
  330. }
  331.  
  332.  
  333. class AddButton extends Button {
  334.     FirewallDialog    target;
  335.  
  336.     public AddButton(Container w, FirewallDialog f) {
  337.     super("Add", null, w);
  338.     target = f;
  339.     }
  340.     
  341.     public void selected(Component c, int pos) {
  342.     target.addHost();
  343.     }
  344. }
  345.  
  346.  
  347. class ChangeButton extends Button {
  348.     FirewallDialog    target;
  349.  
  350.     public ChangeButton(Container w, FirewallDialog f) {
  351.     super("Change", null, w);
  352.     target = f;
  353.     }
  354.     
  355.     public void selected(Component c, int pos) {
  356.     if (target.selectedPos != -1) {
  357.         target.flist.delItem(target.selectedPos);
  358.         target.slist.removeElementAt(target.selectedPos);
  359.         target.addHost();
  360.     }
  361.     }
  362. }
  363.  
  364.  
  365. class FirewallDeleteButton extends Button {
  366.     FirewallDialog    target;
  367.  
  368.     public FirewallDeleteButton(Container w, FirewallDialog f) {
  369.     super("Delete", null, w);
  370.     target = f;
  371.     }
  372.     
  373.     public void selected(Component c, int pos) {
  374.     if (target.selectedPos != -1) {
  375.         target.flist.delItem(target.selectedPos);
  376.         target.slist.removeElementAt(target.selectedPos);
  377.         target.field.setText("");
  378.     }
  379.     }
  380. }
  381.  
  382. class FirewallApplyButton extends Button {
  383.     FirewallDialog    target;
  384.     private MessageDialog  mDialog;
  385.  
  386.     public FirewallApplyButton(Container w, FirewallDialog f) {
  387.     super("Apply", null, w);
  388.     target = f;
  389.     mDialog = new MessageDialog(f,
  390.                     "Error: System Override",
  391.                     "Sorry, can't override the system firewall",
  392.                     MessageDialog.ERROR_TYPE,
  393.                     1,
  394.                     true,
  395.                     "Ok",
  396.                     null,
  397.                     null,
  398.                     null);
  399.     }
  400.     
  401.     public void selected(Component c, int pos) {
  402.     if (Firewall.canOverrideFirewall()) {
  403.         int len = target.slist.size();
  404.         Firewall.clearFirewallHosts();
  405.         for (int i=0;i<len;i++) {
  406.         Firewall.addFirewallHost((String)(target.slist.elementAt(i)));
  407.         }
  408.         Firewall.writeFirewallHosts();
  409.     } else {
  410.         mDialog.show();
  411.         target.reset();
  412.     }
  413.     target.unMap();
  414.     }
  415. }
  416.  
  417. class FirewallHelpButton extends Button {
  418.     hotjava    target;
  419.  
  420.     public FirewallHelpButton(Container w, hotjava f) {
  421.     super("Help", null, w);
  422.     target = f;
  423.     }
  424.     
  425.     public void selected(Component c, int pos) {
  426.     target.go(hotjava.dochome + "FirewallHelp.html");
  427.     }
  428. }
  429.  
  430.  
  431. class SecurityApplyButton extends Button {
  432.     SecurityDialog    target;
  433.     private MessageDialog  mDialog;
  434.  
  435.     public SecurityApplyButton(Container w, SecurityDialog f) {
  436.     super("Apply", null, w);
  437.     target = f;
  438.     mDialog = new MessageDialog(f,
  439.                     "Error: System Override",
  440.                     "Sorry, can't override the system firewall",
  441.                     MessageDialog.ERROR_TYPE,
  442.                     1,
  443.                     true,
  444.                     "Ok",
  445.                     null,
  446.                     null,
  447.                     null);
  448.     }
  449.     
  450.     public void selected(Component c, int pos) {
  451.     // check for a configured firewall list.
  452.     // if none found warn the user
  453.     // otherwise, write the access mode
  454.  
  455.     if (Firewall.setAccessMode(target.opt.selectedIndex,
  456.                    target.restrictApplets.getState(),
  457.                    target.domainOpt.selectedIndex)) {
  458.         Firewall.writeAccessMode();
  459.     } else {
  460.         target.reset();
  461.         mDialog.show();
  462.     }
  463.  
  464.     target.unMap();
  465.     }
  466. }
  467.  
  468. class SecurityHelpButton extends Button {
  469.     hotjava    target;
  470.  
  471.     public SecurityHelpButton(Container w, hotjava f) {
  472.     super("Help", null, w);
  473.     target = f;
  474.     }
  475.     
  476.     public void selected(Component c, int pos) {
  477.     target.go(hotjava.dochome + "SecurityDialogHelp.html");
  478.     }
  479. }
  480.