|
From: Pelle B. <pe...@us...> - 2004-04-15 20:03:38
|
Update of /cvsroot/neuclear/neuclear-signer/src/java/org/neuclear/signers/standalone In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7864/src/java/org/neuclear/signers/standalone Modified Files: QuickStart.java StandaloneSigner.java StandaloneSigningServlet.java Added Files: LicenseScreen.java Log Message: Added license screen to Personal Signer. Added Sign document menu to Personal Signer. Index: QuickStart.java =================================================================== RCS file: /cvsroot/neuclear/neuclear-signer/src/java/org/neuclear/signers/standalone/QuickStart.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** QuickStart.java 14 Apr 2004 15:30:02 -0000 1.1 --- QuickStart.java 15 Apr 2004 20:03:26 -0000 1.2 *************** *** 25,29 **** } try { ! Thread.sleep(4000); } catch (InterruptedException e) { e.printStackTrace(); --- 25,29 ---- } try { ! Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); --- NEW FILE: LicenseScreen.java --- package org.neuclear.signers.standalone; import com.jgoodies.forms.builder.ButtonBarBuilder; import com.jgoodies.plaf.Options; import org.neuclear.commons.crypto.passphraseagents.PassPhraseAgent; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; import java.util.prefs.Preferences; /* $Id: LicenseScreen.java,v 1.1 2004/04/15 20:03:26 pelle Exp $ $Log: LicenseScreen.java,v $ Revision 1.1 2004/04/15 20:03:26 pelle Added license screen to Personal Signer. Added Sign document menu to Personal Signer. */ /** * User: pelleb * Date: Apr 15, 2004 * Time: 1:13:16 PM */ public class LicenseScreen { public static boolean accept() { final Preferences prefs = Preferences.userNodeForPackage(StandaloneSigner.class); if (prefs.getBoolean(ACCEPTED, false)) {// User accepted the license return true; } try { UIManager.setLookAndFeel("com.jgoodies.plaf.plastic.PlasticXPLookAndFeel"); UIManager.put(Options.USE_SYSTEM_FONTS_APP_KEY, Boolean.TRUE); } catch (Exception e) { // Likely PlasticXP is not in the class path; ignore. } final JFrame frame = new JFrame("License"); frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); Container content = frame.getContentPane(); content.setLayout(new BorderLayout()); final URL imageurl = PassPhraseAgent.class.getClassLoader().getResource("org/neuclear/commons/crypto/passphraseagents/neuclear.png"); JLabel label = new JLabel("NeuClear Personal Signer License Agreement"); ; if (imageurl != null) { final ImageIcon icon = new ImageIcon(imageurl); frame.setIconImage(icon.getImage()); label.setIcon(icon); } label.setForeground(Color.WHITE); label.setFont(new Font("Arial", Font.BOLD, 12)); content.add(label, BorderLayout.NORTH); // final MessageLabel message=new MessageLabel(); // message.info("Ready"); // content.add(message, BorderLayout.SOUTH); // content.add(quit, BorderLayout.SOUTH); content.setBackground(Color.BLUE); JTextArea license = new JTextArea(loadLicense()); license.setEditable(false); content.add(new JScrollPane(license), BorderLayout.CENTER); ButtonBarBuilder bb = new ButtonBarBuilder(); final JCheckBox check = new JCheckBox("I accept the above license", false); bb.addGridded(check); bb.addGlue(); bb.addRelatedGap(); final JButton ok = new JButton("Accept License"); ok.setEnabled(false); JButton cancel = new JButton("Cancel"); bb.addGridded(ok); bb.addGridded(cancel); content.add(bb.getPanel(), BorderLayout.SOUTH); cancel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { System.exit(0); } }); ok.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { synchronized (ok) { ok.notifyAll(); } } }); check.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { ok.setEnabled(check.isSelected()); } }); frame.pack(); frame.show(); frame.toFront(); try { synchronized (ok) { while (true) { ok.wait(); if (check.isSelected()) { frame.dispose(); prefs.putBoolean(ACCEPTED, true); return true; } } } } catch (InterruptedException e) { return false; } } private static String loadLicense() { InputStream is = LicenseScreen.class.getClassLoader().getResourceAsStream("LICENSE.txt"); BufferedReader reader = new BufferedReader(new InputStreamReader(is)); StringBuffer buf = new StringBuffer(); try { String line = reader.readLine(); while (line != null) { buf.append(line); buf.append("\n"); line = reader.readLine(); } } catch (IOException e) { e.printStackTrace(); } return buf.toString(); } private static final String ACCEPTED = "LICENSE_ACCEPTED"; } Index: StandaloneSigningServlet.java =================================================================== RCS file: /cvsroot/neuclear/neuclear-signer/src/java/org/neuclear/signers/standalone/StandaloneSigningServlet.java,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** StandaloneSigningServlet.java 15 Apr 2004 16:09:42 -0000 1.9 --- StandaloneSigningServlet.java 15 Apr 2004 20:03:26 -0000 1.10 *************** *** 42,45 **** --- 42,48 ---- } */ + public BrowsableSigner getSigner() { + return super.getSigner(); + } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { *************** *** 50,53 **** --- 53,57 ---- } + private final InteractiveAgent agent; Index: StandaloneSigner.java =================================================================== RCS file: /cvsroot/neuclear/neuclear-signer/src/java/org/neuclear/signers/standalone/StandaloneSigner.java,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** StandaloneSigner.java 14 Apr 2004 15:30:02 -0000 1.6 --- StandaloneSigner.java 15 Apr 2004 20:03:26 -0000 1.7 *************** *** 2,16 **** --- 2,29 ---- import com.jgoodies.plaf.Options; + import org.dom4j.Document; import org.mortbay.http.HttpContext; import org.mortbay.jetty.Server; import org.mortbay.jetty.servlet.ServletHandler; + import org.mortbay.jetty.servlet.ServletHolder; import org.mortbay.util.InetAddrPort; import org.neuclear.commons.crypto.CryptoTools; import org.neuclear.commons.crypto.passphraseagents.PassPhraseAgent; + import org.neuclear.commons.crypto.passphraseagents.UserCancellationException; + import org.neuclear.commons.crypto.passphraseagents.swing.MessageLabel; + import org.neuclear.commons.crypto.signers.BrowsableSigner; + import org.neuclear.commons.crypto.signers.DefaultSigner; + import org.neuclear.xml.XMLException; + import org.neuclear.xml.XMLTools; + import org.neuclear.xml.xmlsec.EnvelopedSignature; + import org.neuclear.xml.xmlsec.XMLSignature; import javax.swing.*; + import javax.swing.filechooser.FileFilter; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; + import java.awt.event.KeyEvent; + import java.io.File; import java.net.URL; *************** *** 23,27 **** public static void main(String args[]) { // Frame splash=SplashWindow.splash(Toolkit.getDefaultToolkit().createImage(StandaloneSigner.class.getClassLoader().getResource("neuclearsplash.png"))); ! try { CryptoTools.ensureProvider(); --- 36,41 ---- public static void main(String args[]) { // Frame splash=SplashWindow.splash(Toolkit.getDefaultToolkit().createImage(StandaloneSigner.class.getClassLoader().getResource("neuclearsplash.png"))); ! if (!LicenseScreen.accept()) ! System.exit(0); try { CryptoTools.ensureProvider(); *************** *** 36,41 **** handler.start(); handler.initializeServlets(); ! JFrame frame = createFrame(); Thread.sleep(2000); --- 50,64 ---- handler.start(); handler.initializeServlets(); + ServletHolder[] holders = handler.getServlets(); + for (int i = 0; i < holders.length; i++) { + ServletHolder holder = holders[i]; + if (holder.getServlet() instanceof StandaloneSigningServlet) { + // System.out.println("Found servlet: "+holder.getName()); + if (!holder.isStarted()) + holder.start(); ! JFrame frame = createFrame((DefaultSigner) ((StandaloneSigningServlet) holder.getServlet()).getSigner()); ! } ! } Thread.sleep(2000); *************** *** 43,50 **** } catch (Exception e) { e.printStackTrace(); } } ! public static JFrame createFrame() { try { UIManager.setLookAndFeel("com.jgoodies.plaf.plastic.PlasticXPLookAndFeel"); --- 66,74 ---- } catch (Exception e) { e.printStackTrace(); + System.exit(1); } } ! public static JFrame createFrame(final DefaultSigner signer) { try { UIManager.setLookAndFeel("com.jgoodies.plaf.plastic.PlasticXPLookAndFeel"); *************** *** 53,61 **** // Likely PlasticXP is not in the class path; ignore. } ! JFrame frame = new JFrame("NeuClear Signing Agent"); frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); ! JButton quit = new JButton("Shut down"); ! quit.addActionListener(new ActionListener() { /** * Invoked when an action occurs. --- 77,85 ---- // Likely PlasticXP is not in the class path; ignore. } ! final JFrame frame = new JFrame("NeuClear Signing Agent"); frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); ! // JButton quit = new JButton("Shut down"); ! final ActionListener quitlistener = new ActionListener() { /** * Invoked when an action occurs. *************** *** 66,70 **** } ! }); Container content = frame.getContentPane(); content.setLayout(new BorderLayout()); --- 90,95 ---- } ! }; ! // quit.addActionListener(quitlistener); Container content = frame.getContentPane(); content.setLayout(new BorderLayout()); *************** *** 81,86 **** label.setFont(new Font("Arial", Font.BOLD, 14)); content.add(label, BorderLayout.NORTH); ! content.add(quit, BorderLayout.SOUTH); content.setBackground(Color.BLUE); frame.pack(); frame.show(); --- 106,149 ---- label.setFont(new Font("Arial", Font.BOLD, 14)); content.add(label, BorderLayout.NORTH); ! final MessageLabel message = new MessageLabel(); ! message.info("Ready"); ! content.add(message, BorderLayout.SOUTH); ! // content.add(quit, BorderLayout.SOUTH); content.setBackground(Color.BLUE); + + JMenuBar menubar = new JMenuBar(); + frame.setJMenuBar(menubar); + + JMenu menu = new JMenu("File"); + menu.setMnemonic(KeyEvent.VK_F); + menubar.add(menu); + + JMenuItem signItem = new JMenuItem("Sign file...", + KeyEvent.VK_S); + menu.add(signItem); + menu.addSeparator(); + JMenuItem quitItem = new JMenuItem("Exit", + KeyEvent.VK_X); + menu.add(quitItem); + quitItem.addActionListener(quitlistener); + + final JFileChooser chooser = new JFileChooser(); + chooser.setFileFilter(new FileFilter() { + public boolean accept(File file) { + String filename = file.getName(); + return file.isDirectory() || filename.endsWith(".xml") || filename.endsWith(".html") || filename.endsWith(".htm"); + } + + public String getDescription() { + return "XML Files"; + } + }); + signItem.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent event) { + SignDocument sign = new SignDocument(signer, chooser, frame, message); + new Thread(sign).start(); + } + + }); frame.pack(); frame.show(); *************** *** 89,91 **** --- 152,205 ---- } + + public static class SignDocument implements Runnable { + public SignDocument(BrowsableSigner signer, JFileChooser chooser, JFrame frame, MessageLabel message) { + this.signer = signer; + this.frame = frame; + this.chooser = chooser; + this.message = message; + } + + public void run() { + frame.setEnabled(false); + chooser.setDialogTitle("Select XML file to sign..."); + int result = chooser.showOpenDialog(frame); + if (result == JFileChooser.CANCEL_OPTION) { + frame.setEnabled(true); + message.info("Cancelled"); + return; + } + try { + message.info("Parsing " + chooser.getSelectedFile().getName()); + Document doc = XMLTools.loadDocument(chooser.getSelectedFile()); + message.info("Signing " + chooser.getSelectedFile().getName()); + XMLSignature sig = new EnvelopedSignature(signer, doc.getRootElement()); + chooser.setDialogTitle("Save signed XML Document"); + result = chooser.showSaveDialog(frame); + if (result == JFileChooser.CANCEL_OPTION) { + frame.setEnabled(true); + message.info("Cancelled"); + return; + } + message.info("Saving " + chooser.getSelectedFile().getName()); + XMLTools.writeFile(chooser.getSelectedFile(), doc); + message.info("Saved signed XML document " + chooser.getSelectedFile().getName()); + frame.setEnabled(true); + + } catch (XMLException e) { + frame.setEnabled(true); + message.error(e); + } catch (UserCancellationException e) { + frame.setEnabled(true); + message.error(e); + } + + } + + private final BrowsableSigner signer; + private final JFileChooser chooser; + private final JFrame frame; + private final MessageLabel message; + + } } |