KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > columba > mail > pgp > MultipartEncryptedRenderer


1 //The contents of this file are subject to the Mozilla Public License Version 1.1
2
//(the "License"); you may not use this file except in compliance with the
3
//License. You may obtain a copy of the License at http://www.mozilla.org/MPL/
4
//
5
//Software distributed under the License is distributed on an "AS IS" basis,
6
//WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
7
//for the specific language governing rights and
8
//limitations under the License.
9
//
10
//The Original Code is "The Columba Project"
11
//
12
//The Initial Developers of the Original Code are Frederik Dietz and Timo Stich.
13
//Portions created by Frederik Dietz and Timo Stich are Copyright (C) 2003.
14
//
15
//All Rights Reserved.
16
package org.columba.mail.pgp;
17
18 import java.io.ByteArrayInputStream JavaDoc;
19 import java.io.InputStream JavaDoc;
20 import java.util.Vector JavaDoc;
21
22 import javax.swing.JOptionPane JavaDoc;
23
24 import org.columba.core.gui.frame.FrameManager;
25 import org.columba.core.io.StreamUtils;
26 import org.columba.mail.config.SecurityItem;
27 import org.columba.mail.message.PGPMimePart;
28 import org.columba.ristretto.composer.MimePartRenderer;
29 import org.columba.ristretto.composer.MimeTreeRenderer;
30 import org.columba.ristretto.io.CharSequenceSource;
31 import org.columba.ristretto.io.SequenceInputStream;
32 import org.columba.ristretto.io.Source;
33 import org.columba.ristretto.message.InputStreamMimePart;
34 import org.columba.ristretto.message.LocalMimePart;
35 import org.columba.ristretto.message.MimeHeader;
36 import org.columba.ristretto.message.MimePart;
37 import org.columba.ristretto.message.StreamableMimePart;
38 import org.waffel.jscf.JSCFConnection;
39 import org.waffel.jscf.JSCFResultSet;
40 import org.waffel.jscf.JSCFStatement;
41
42
43 public class MultipartEncryptedRenderer extends MimePartRenderer {
44     private StreamableMimePart controlPart;
45     private MimeHeader encryptedHeader;
46
47     public MultipartEncryptedRenderer() {
48         MimeHeader controlHeader = new MimeHeader("application", "pgp-encrypted");
49         Source controlBody = new CharSequenceSource("Version: 1\r\n");
50         controlPart = new LocalMimePart(controlHeader, controlBody);
51
52         encryptedHeader = new MimeHeader("application", "octet-stream");
53     }
54
55     /* (non-Javadoc)
56  * @see org.columba.ristretto.composer.MimePartRenderer#getRegisterString()
57  */

58     public String JavaDoc getRegisterString() {
59         return "multipart/encrypted";
60     }
61
62     /* (non-Javadoc)
63  * @see org.columba.ristretto.composer.MimePartRenderer#render(org.columba.ristretto.message.StreamableMimePart)
64  */

65     public InputStream JavaDoc render(MimePart part) throws Exception JavaDoc {
66         Vector JavaDoc streams = new Vector JavaDoc((2 * 2) + 3);
67
68         MimeHeader header = part.getHeader();
69
70         // Create boundary to separate the mime-parts
71
String JavaDoc boundary = createUniqueBoundary().toString();
72         header.putContentParameter("boundary", boundary);
73
74         byte[] startBoundary = ("\r\n--" + boundary + "\r\n").getBytes();
75         byte[] endBoundary = ("\r\n--" + boundary + "--\r\n").getBytes();
76
77         // Add pgp-specific content-parameters
78
header.putContentParameter("protocol", "application/pgp-encrypted");
79
80         // Create the header of the multipart
81
streams.add(header.getHeader().getInputStream());
82
83         SecurityItem pgpItem = ((PGPMimePart) part).getPgpItem();
84
85         // Add the ControlMimePart
86
streams.add(new ByteArrayInputStream JavaDoc(startBoundary));
87         streams.add(MimeTreeRenderer.getInstance().renderMimePart(controlPart));
88
89         // Add the encrypted MimePart
90
streams.add(new ByteArrayInputStream JavaDoc(startBoundary));
91
92         StreamableMimePart encryptedPart;
93         encryptedPart = null;
94
95         /*
96 JSCFDriverManager.registerJSCFDriver(new GPGDriver());
97 JSCFConnection con = JSCFDriverManager.getConnection("jscf:gpg:"+pgpItem.get("path"));
98 */

99         JSCFController controller = JSCFController.getInstance();
100         JSCFConnection con = controller.getConnection();
101
102         //con.getProperties().put("USERID", pgpItem.get("id"));
103
JSCFStatement stmt = con.createStatement();
104         JSCFResultSet res = stmt.executeEncrypt(MimeTreeRenderer.getInstance()
105                                                                 .renderMimePart(part.getChild(
106                         0)), pgpItem.get("recipients"));
107
108         if (res.isError()) {
109             JOptionPane.showMessageDialog(FrameManager.getInstance()
110                     .getActiveFrame(),
111                 StreamUtils.readCharacterStream(res.getErrorStream()).toString());
112         }
113
114         encryptedPart = new InputStreamMimePart(encryptedHeader,
115                 res.getResultStream());
116         streams.add(MimeTreeRenderer.getInstance().renderMimePart(encryptedPart));
117
118         // Create the closing boundary
119
streams.add(new ByteArrayInputStream JavaDoc(endBoundary));
120
121         return new SequenceInputStream(streams);
122     }
123 }
124
Popular Tags