Compare commits

...

982 Commits

Author SHA1 Message Date
e030e9ed5f 0.2.10 2014-07-23 21:36:12 +00:00
1896fccf1f Fix NullPointerExceptions 2014-07-23 21:25:31 +00:00
ca19e9d9e0 Use a separate SessionKeyManager instead of the router's 2014-07-23 21:24:39 +00:00
729a4ac99f Upgrade to 20140722 snapshot of Apache James 2014-07-23 21:22:15 +00:00
729f59e729 Support I2CP connections over Unix domain sockets
Only supported on Android for now.
2014-07-16 04:05:35 +00:00
78b66b5509 Bugfix after net.i2p.data.Base64.decode() errors were cleaned up 2014-07-07 00:28:22 +00:00
5cdcae1416 Missing network status change 2014-07-06 14:26:47 +00:00
348262e7a2 NetworkStatusListener implementation 2014-07-06 13:05:39 +00:00
adb290658a Inform caller if importer found no identities 2014-07-06 02:55:44 +00:00
c04fc24445 Implement encrypted identities export 2014-07-06 02:28:40 +00:00
4762f8486e Implement identity appending on import 2014-07-05 23:50:02 +00:00
52a717d7e3 Import identities from FileDescriptor (no appending possible yet) 2014-07-05 04:23:19 +00:00
e9ffb4643b Export identities to file (no encryption possible yet) 2014-07-04 06:21:17 +00:00
382f75f4a4 Pulled out Identities <-> Properties conversion into separate methods 2014-07-04 00:23:14 +00:00
4a6fc262e7 Show number of incomplete emails 2014-07-02 09:23:58 +00:00
4cd24cd579 Expose number of incomplete emails 2014-07-02 06:38:02 +00:00
32ce92d7cb Updated license.txt 2014-06-23 01:47:07 +00:00
96bb3a0719 Enable saving picture for EmailIdentity 2014-06-16 05:41:11 +00:00
5cebc0b2ee Added EmailIdentity.setPictureBase64() 2014-06-16 04:57:32 +00:00
4e7d57d8e3 Implement vanity destinations 2014-06-11 21:11:11 +00:00
0ad03ce6d4 Fix for new Jetty/Tomcat 2014-06-11 06:13:13 +00:00
2082fd0856 Emails are not kept in-memory inside EmailFolder, so store \Recent in metadata 2014-06-10 12:17:35 +00:00
98c56de3a5 Added specific listener for newly-received emails 2014-06-09 04:51:20 +00:00
1801e308b2 Fixed bug in setFlags() 2014-06-08 06:46:56 +00:00
f318587209 Helper method 2014-06-08 04:59:13 +00:00
38d5833551 Improved FolderListener, emails added to a folder outside IMAP now get \Recent 2014-06-08 04:12:30 +00:00
6bbd015d38 Store other IMAP flags in-memory (like \Recent) 2014-06-08 02:59:39 +00:00
f20ae940a8 Add missing file 2014-06-03 06:01:55 +00:00
f7f185a68c Handle index packets that are bigger than a datagram (fixes "After merging, IndexPacket is too big..." errors) 2014-06-02 21:01:26 +00:00
a47100d14a Fix NullPointerException on fresh installs 2014-05-29 22:21:09 +00:00
32bd6e45a8 Fixes for Tomcat 7 which is more anal about the JSP spec than Jetty or Tomcat 6 2014-05-29 22:14:28 +00:00
ca19b0929e NPE fix for corrupt folder 2014-05-24 00:00:34 +00:00
3dede23a24 Reworked email status storage for UI flexibility 2014-05-23 01:18:18 +00:00
e190587330 Reverted bad log tweak 2014-05-17 04:37:23 +00:00
0d92ddb6e1 Set connectTask to null so getNetworkStatus() returns valid state 2014-05-17 04:36:42 +00:00
52f6405c74 Removed unused import 2014-05-17 04:33:28 +00:00
99fb8bf264 NPE fixes, log tweak 2014-05-17 04:27:59 +00:00
fa22d47252 Whitespace, don't create SSL key store on Android 2014-05-17 04:21:06 +00:00
2dfa656b06 JSSE requires keystore and key passwords to be identical 2014-05-13 05:07:05 +00:00
56aa3f3c1c Generate the SSL cert on-the-fly to prevent MITM 2014-05-13 02:23:09 +00:00
c2e75290fb Reverted mistaken checkin 2014-05-13 02:20:19 +00:00
3387cdd90c Enable STARTTLS for IMAP and SMTP using selfsigned certificate
Certificate domain is 127.0.0.1, clients will throw a warning if using localhost
(alongside the warning for selfsigned cert).
2014-05-12 13:49:13 +00:00
c3088c5931 Mark important comments 2014-05-12 13:23:28 +00:00
a149a0bdc0 Fixed NPE (ticket #1272) 2014-05-12 12:37:47 +00:00
7867198fe9 Override updateMessageID() on Android to prevent NetworkOnMainThreadException 2014-04-17 23:27:40 +00:00
38293ebcf9 Added elementUpdated() to FolderListener, made setNew() throws consistent 2014-04-16 13:07:17 +00:00
6f4a0615ff Update FolderListeners when Email is moved 2014-04-15 00:58:02 +00:00
22fa6105ac Updated FAQ and User's Guide 2014-04-14 02:30:00 +00:00
946fa8d6ec Insert addressbook/identity names, @bote, {UNK} into IMAP email headers 2014-04-14 02:29:37 +00:00
5a8d9c6f4f Remove @bote before validating sender and recipient addresses in SMTP 2014-04-13 05:05:41 +00:00
5c53c2071b Updated about.jsp 2014-04-13 02:45:57 +00:00
c84770036d Create BoteMailboxes once, and remove their FolderListeners when IMAP stops 2014-04-13 02:27:31 +00:00
d9756407b0 Refactor to handle recipient headers containing multiple recipients 2014-04-13 01:46:13 +00:00
fe9c6d9d47 Pack new mailapi.jar in update for 0.2.10 2014-04-11 22:42:07 +00:00
ee96addef6 Removed signature from scrypt jar (pack200 interferes) 2014-04-10 21:51:49 +00:00
1f9aa61d2f Upgraded to scrypt 1.4.0 2014-04-10 20:59:44 +00:00
zzz
5e559846db one more typo 2014-04-07 13:26:10 +00:00
bbd24eaaff fix another missing '/' 2014-04-07 12:20:12 +00:00
4db680f067 add missing / to paths 2014-04-07 12:14:44 +00:00
79595913f2 Previous fix wasn't quite right 2014-04-04 20:01:29 +00:00
b387b77bfb Fixed concurrency problem 2014-03-30 03:10:04 +00:00
dce43d11ae Fixed IMAP UID implementation to conform to RFC 3501 2014-03-30 02:14:56 +00:00
8fec6b28e8 Remove @bote properly from SMTP messages 2014-03-29 03:19:53 +00:00
17282cda4d Missing Bean method 2014-03-28 20:58:26 +00:00
1664253417 Fixed password "corruption" (ticket #1239) 2014-03-28 20:57:56 +00:00
654b136cb0 Somehow, file duplication has stopped 2014-03-18 20:04:50 +00:00
2b5de7958e Doc tweak 2014-03-18 10:56:28 +00:00
10b9b2e593 Updated identity file spec 2014-03-18 10:22:47 +00:00
3571adf2ec Another StatusListener 2014-03-09 23:05:22 +00:00
44027e80ca Save and load default key properly 2014-03-09 09:11:00 +00:00
9d821f66b9 Update default identity when changed (for writing to file) 2014-03-08 23:07:54 +00:00
bef847d270 Moved Servlet-dependent helper methods back to JSPHelper 2014-03-04 01:46:56 +00:00
967a523130 Missing javadoc @param 2014-03-04 01:36:11 +00:00
c35e9c9139 Enable listening to status of internal operations (for Android UI) 2014-03-02 10:32:23 +00:00
c0b62e25c1 Remove throw (handled in rev 78f6a5bcf158019aceb75a48aebd8d9c20b203ce) 2014-03-01 01:55:15 +00:00
936e1e7d50 Updated techdoc.txt for mailapi.jar 2014-02-28 22:08:34 +00:00
592793eaac Add a setting to enable/disable SMTP 2014-02-28 22:02:49 +00:00
f1c9ac9788 Updated to mailapi 1.5.1 2014-02-27 05:19:54 +00:00
bdd24d7e9d Apparently Jasper can't follow inheritance 2014-02-27 04:40:15 +00:00
de36d91909 Delete i2pbote.jar in clean 2014-02-27 03:28:18 +00:00
1a6ae22b99 Allow using result of folder.getName() in getMailFolder()
This is used for saving instance state in Android.
2014-02-27 03:00:03 +00:00
adde9736be Split JSPHelper so common utilities can be used by other UIs (Android) 2014-02-26 23:08:34 +00:00
173d08d798 Allow FolderListeners to be removed 2014-02-26 07:07:42 +00:00
acb1ace33a Don't add source files to i2pbote.jar (it duplicates .txt files) 2014-02-26 07:07:11 +00:00
ffa7450e77 Reordered list of folders 2014-02-26 03:28:18 +00:00
d9d9c47124 Add README.md for GitHub 2014-02-16 18:18:45 +00:00
d960308461 Update techdoc.txt 2014-02-16 13:41:27 +00:00
616df8de9f Update translations from Transifex 2014-02-16 13:40:34 +00:00
427e293bac 0.2.9 2014-02-16 13:39:32 +00:00
163f8d58c0 Make send button easier to find 2014-01-08 01:44:02 +00:00
43e34eb221 Added code to mapper for fetching recent messages
This functionally changes nothing, because BoteMessage.isRecent()
always returns false.
2014-01-01 21:30:02 +00:00
c2d1334c04 Unset flags correctly 2014-01-01 05:57:41 +00:00
a05890eaec Implemented deleting via IMAP
The \Deleted flag is stored in EmailMetadata, but is ignored by Bote and only
used for IMAP deletion.
2013-12-31 20:20:17 +00:00
2a744fb1cd RFC 2822: set From: header 2013-12-31 16:43:55 +00:00
ed60728edd Don't delete libs with "ant clean" 2013-12-31 07:29:26 +00:00
48e69d3cd5 Don't break folder list if an email can't be decrypted 2013-12-27 02:33:26 +00:00
df09332ead Added libs to .jar manifest (so IMAP setting works) 2013-12-26 09:54:01 +00:00
585413fa2b Fixed potential NPE 2013-12-25 23:30:02 +00:00
68c48cb332 Update to jMock 2.6.0 (v2.5.1 is not available from their website anymore) 2013-05-01 18:12:55 +00:00
ae87a801ea Fix classpath and typos 2013-05-01 17:52:44 +00:00
901b051546 Implement SMTP 2013-05-01 17:50:42 +00:00
6590e3122a Shorten known email destinations in the folder view 2013-04-29 19:18:02 +00:00
e601b5f46e Add a setting to enable/disable IMAP 2013-04-29 18:53:41 +00:00
641085ab24 don't try to zip up non-existent images directory (see rev. 1ae37d314f064cfb6c870727775f5b5ccc5ea69e) 2013-04-29 18:34:15 +00:00
5d371f983a IMAP interface, works with Thunderbird but not Evolution 2013-04-29 00:21:37 +00:00
8fc111fc86 Fix Content-Transfer-Encoding (8bit doesn't allow zeros, CR, or LF) 2013-04-26 23:15:13 +00:00
2dc809c025 Close streams when done reading 2013-04-26 23:06:15 +00:00
7b0149dc39 by request, adding my i2pbote node's public destination 2013-04-11 16:00:55 +00:00
24509df2b5 Delete commented out line 2013-04-02 21:47:28 +00:00
263b68550e Fix a compiler warning 2013-04-02 21:42:34 +00:00
ae3ac8b5be Attach file on selection when JS is enabled 2013-04-02 21:33:36 +00:00
7c22899f32 try supressing/fixing a few warnings 2013-04-01 21:01:18 +00:00
3970d6d015 build fix (don't try to zip up non-existent images directory) 2013-04-01 20:40:12 +00:00
4464301119 Remove unused images 2013-04-01 18:08:37 +00:00
f0622d202b Move style attributes to CSS 2013-04-01 17:57:59 +00:00
63e260f932 Show anonymous sender in italics 2013-03-31 22:36:24 +00:00
87ad8db92a Display of signatures:
* Combine signature column and replied column
 * Don't show signature warning for anonymous emails
2013-03-31 22:23:00 +00:00
cc7e0209ec Simplification 2013-03-30 23:01:32 +00:00
1a4c25a32f Add a null check 2013-03-30 22:58:14 +00:00
79339a0208 Fix a comment 2013-03-30 22:57:26 +00:00
249389a4d3 Replace ReentrantLock with synchronized 2013-03-30 08:55:16 +00:00
92a5a998d6 Show a wait page when the password is changed 2013-03-29 17:09:10 +00:00
e1a49cf440 Add a JSP that allows users to check encrypted files 2013-03-24 12:32:31 +00:00
e30cb79c5f 0.2.8 2013-03-08 21:51:26 +00:00
49268b21ea Increase #words to 8 and #zero bits to 10 2013-03-07 21:38:57 +00:00
74384e0517 Fix: unneccessary lookup when confirm=true 2013-03-07 21:25:44 +00:00
9bfde0ac33 Fix formatting on editIdentity.jsp 2013-03-07 21:22:36 +00:00
55d5ea6084 Fix NullPointerException when no word list is available for the current language 2013-03-05 23:01:49 +00:00
0e36c3dcc3 Fix: Escape characters handled incorrectly when saving and loading 2013-03-05 22:40:08 +00:00
0155e5f57f Implement mark() and reset() 2013-03-05 22:14:02 +00:00
a2b3833602 Store fingerprint with email identity and show it on editIdentity.jsp 2013-03-05 19:29:43 +00:00
200d9ceb3d Switch address book to a properties-style format; show imported picture and text on editContact.jsp 2013-03-03 12:48:36 +00:00
69fd2431c8 Switch identities file to a properties-style format; show published picture and text on editIdentity.jsp 2013-02-26 21:48:06 +00:00
66020b2fc7 Add 0.2.7 release notes 2013-02-14 15:35:32 +00:00
34e76ce627 Add a missing test 2013-02-12 13:30:15 +00:00
79393f0ea8 Fix ContactTest when run from Ant 2013-02-12 13:29:41 +00:00
c4cdbb98cc trim() name before publishing or doing a lookup 2013-02-11 21:24:28 +00:00
eda69d1e7e Fix @bote.i2p suffix 2013-02-11 21:23:00 +00:00
1f2c528b9b Sign Contact packets:
* sign on publish
 * verify on import
 * ignore invalid Contact packets in lookups
2013-02-11 21:18:01 +00:00
6a99b034b7 Implement fingerprints for directory entries 2013-02-11 12:03:15 +00:00
17db81eee1 Use native scrypt if available 2013-02-04 22:13:33 +00:00
d50c843145 Change DEFAULT_PASSWORD_CACHE_DURATION back to 10 (I accidentally changed it to 1 in rev f957174cc94b1ed2a836e94cb71850ed612f2622) 2013-02-04 21:51:02 +00:00
7cbf364407 Rename DirectoryEntryTest to ContactTest 2013-02-04 21:47:57 +00:00
bd8674950e Add null check 2013-02-02 12:18:11 +00:00
0a0418f83f Make sure test files and directories are cleaned up 2013-02-02 12:17:11 +00:00
a5832cd1e4 Add comment 2013-02-02 12:15:29 +00:00
ccbc2c3e01 Check for existing name before publishing 2013-02-02 12:09:26 +00:00
d5c6c2d046 Ignore requests to replace existing Contacts 2013-02-02 00:04:12 +00:00
d8a606946e Don't skip sleep() on exceptions; lower log level 2013-01-27 22:30:58 +00:00
dbaa00d5b1 Print number of running threads 2013-01-27 22:30:17 +00:00
844bfcb842 Implement basic address directory 2013-01-27 22:29:01 +00:00
882a6d207a merge of '8d66ebeab68f6165dbd977cb2b5a5d52d09eab03'
and 'd27fa448d59dd46241e032896b0788e9057da5e1'
2013-01-27 21:59:38 +00:00
730aff2a50 Updated Norwegian Bokmål translation updates from transifex.
(100% translation)
2013-01-26 19:17:27 +00:00
de6d2d60a9 Lower max packet size to 10 kBytes 2013-01-24 20:57:57 +00:00
a724a521cd Add an option to change the ping interval 2013-01-24 20:39:49 +00:00
eaaf3c90e4 Remove Util.get(Collection, int) and use toArray() instead 2013-01-24 20:37:39 +00:00
a0febacdfd Fix: addresses and identities still available after password cache expires 2013-01-23 21:42:24 +00:00
2f0cb066ab Fix forward URL when context path is something other than /i2pbote 2013-01-23 21:08:46 +00:00
fc89896246 Don't attempt to show number of new emails when a password needs to be entered first (metadata is password protected as of recently) 2013-01-22 22:05:27 +00:00
e9c262c8b7 Add package.html files 2013-01-22 20:49:32 +00:00
093e439e04 Fix JavaDoc warnings 2013-01-22 20:31:17 +00:00
bf07f9c664 merge of '90e5bcb2bddcd45813c9eb3b354026f37152c66e'
and 'a6a21a22bbe0d4a61750abff96d5aaaa23b8df54'
2013-01-21 22:27:35 +00:00
bba9ac405a Add a command line program for testing datagram reliability 2013-01-21 22:26:19 +00:00
a0457273b7 switch javadocs from bob.i2p to i2p-javadocs.i2p
(sponge no longer hosts them)
2013-01-21 01:56:14 +00:00
e6a330944d update oracle package-list URLs 2013-01-21 01:44:10 +00:00
20940f209b Lower log level 2013-01-20 21:23:06 +00:00
bbc71ad13c Some refactoring 2013-01-20 21:21:53 +00:00
64917757a4 Make delivery checking turn-offable 2013-01-20 21:21:36 +00:00
b966ebbcfd address.tag: replace hover with click-to-expand; share code with editIdentity.jsp 2013-01-20 19:49:23 +00:00
ca7f4124c4 Update en and de strings 2013-01-20 16:13:42 +00:00
b24fe46661 Fix ambiguous i18n source string "Sent" 2013-01-20 16:11:32 +00:00
1db3aee096 merge of '05f071f4da46716c5566db81c177ec3e3ec04852'
and 'de9594e3f85d2d2401af64407c0c54c4e6a61d33'
2013-01-20 03:02:17 +00:00
db5a566e15 Language nb is more precise than no. 2013-01-20 02:53:01 +00:00
f485c68472 DeliveryChecker.java:
* Don't save metadata unless it changed
 * Logging
 * Code formatting
2013-01-20 02:28:41 +00:00
78013d6725 Wait until connected to DHT 2013-01-20 02:20:51 +00:00
261d05a1d6 Prevent "${param.path}" from showing up as a translation string 2013-01-20 02:15:17 +00:00
4a79a28d28 Handle tags that have an attribute but the message key is in the body 2013-01-20 02:02:51 +00:00
844a7a24fe Add help text to editIdentities.jsp 2013-01-20 01:28:23 +00:00
9937ec73f9 Remove more mockup elements 2013-01-19 23:32:30 +00:00
54629d8d05 Appearance changes to sendEmail.jsp 2013-01-19 23:28:19 +00:00
15dcd78936 Show whether an email has been replied to 2013-01-19 23:21:00 +00:00
087a4a68be Remove an extra '<' 2013-01-17 23:10:03 +00:00
7829c44d0d Add a delete button after replying to an email 2013-01-17 22:57:15 +00:00
476d06a588 German, French, Italian, Polish, Portuguese, and Russian translation updates from transifex 2013-01-17 12:43:25 +00:00
53223be28d Display an error if no public name entered 2013-01-16 22:27:27 +00:00
691b8ade1c Bump version to 0.2.7; migrate metadata files 2013-01-16 22:14:08 +00:00
7ac255ec94 Encrypt metadata files (as of rev 24af3e..., they contain email destinations and packet keys) 2013-01-16 22:05:35 +00:00
cf84a6aeee Don't receive packets as streams 2013-01-15 21:18:50 +00:00
15c45ad820 Remove unused import 2013-01-15 20:53:49 +00:00
10100b8177 Synchronize a method I missed in rev 7db2932b3db6bbf32d4ae937c93eb37e06e9f099 2013-01-15 20:51:51 +00:00
6adef679ac Synchronize CryptoFactory (Ticket #610) 2013-01-14 20:16:04 +00:00
00411877ad Change log level 2013-01-14 20:10:33 +00:00
7dc9f6caa0 Change log level to DEBUG (same as the other background threads) 2013-01-14 20:09:57 +00:00
dcb2b0f945 Translate page titles 2013-01-14 20:00:06 +00:00
f396729698 Disable "default" checkbox when there are less than two identities 2013-01-13 21:15:07 +00:00
0aff058acd Add a note about automatic email checking when a password is set 2013-01-13 21:00:12 +00:00
55f363aa73 Add @Overrides 2013-01-13 20:48:27 +00:00
6fec35ce85 Remove unused methods 2013-01-13 20:45:13 +00:00
42001079b5 Don't show private key link when creating a new identity 2013-01-13 20:42:35 +00:00
ab3d23a3af Fix variable name 2013-01-13 20:38:29 +00:00
3b0c9774e5 Remove mockup elements 2013-01-13 20:35:39 +00:00
8b44166b90 Simplify stringification 2013-01-13 20:12:55 +00:00
46ca0add8a Shorten thread name so it doesn't get truncated in the logs 2013-01-13 20:09:58 +00:00
6e967b2365 Fix: Version number not correctly written to file 2013-01-13 20:05:15 +00:00
bc72ebb865 Implement delivery status feature 2013-01-13 17:25:01 +00:00
e204d01fa2 Remove a System.out.println() 2013-01-12 02:51:39 +00:00
4a05868f11 Catch a more specific exception 2013-01-12 02:44:11 +00:00
6400913229 Move remaining third-party code (flexiprovider, lzma, and scrypt) into .jars 2013-01-12 02:42:00 +00:00
d7d3f2f01c Update to NTRU 1.2; move NTRU into a .jar 2013-01-12 02:08:08 +00:00
f9014d7b7b Fix unit test 2013-01-07 15:02:32 +00:00
a64ece90c2 Sort relay peers 2013-01-07 15:02:16 +00:00
e8f16cc83c Remove an unused method 2013-01-07 15:01:36 +00:00
d7b7355dd1 Fix warnings 2013-01-07 15:01:15 +00:00
816cf49b8c Get rid of the I2PBoteThread mechanism and handle thread interruptions correctly 2013-01-05 22:07:38 +00:00
bf2e2224c9 More detailed log message 2013-01-03 13:45:06 +00:00
2824c9a773 Minor comment change 2013-01-02 23:35:04 +00:00
1dbbcd8b78 Fix: themes not found because directory names were localized 2013-01-02 23:34:35 +00:00
d7d6257a36 Add an import for JavaDoc 2013-01-02 21:28:57 +00:00
020ef33b95 Log exceptions 2013-01-02 21:28:21 +00:00
8cfe4c5660 Only send up to 20 peers in a PeerList 2013-01-02 21:27:27 +00:00
e04deb28a1 Add info on how to set up Eclipse 2013-01-02 21:23:56 +00:00
fc0837ede4 Fix identities file name; change some wording 2013-01-02 21:20:22 +00:00
zzz
3ade199175 Specify source=1.6 target=1.6 so we can build with Java 7.
Suppress ant warning.
2013-01-02 12:53:28 +00:00
zzz
7bffe19e9e merge of '9030eb5d24f9d9f0c546f54c8a078749941e28df'
and 'ec0ec8bca6aa7c8d6b314688662891ed0c80aa34'


Merge broken rev from asaf.
Mtn 1.0 can't handle dates with trailing time zone indicators,
such as 'Z'. asaf's checkin was done with guitone which
adds the 'Z'. Hopefully this will make mtn 1.0 happy again.
2013-01-02 12:38:22 +00:00
3ffcf9d8d3 Update German translation from Transifex 2012-12-30 15:52:52 +00:00
111b3d8dbb Add a heading and a brief explanation 2012-12-02 14:27:31 +00:00
e177cd4567 Comments 2012-11-27 17:43:19 +00:00
a0ce9017a9 Include file size in log 2012-11-27 17:39:08 +00:00
bc1848ddcf Add a few more classes from the upstream bouncycastle jar due to recent changes in I2P.
Fixes the error found at http://pastethis.i2p/show/fnVXfo6eWaq4uaQNUjhO/
2012-09-25 23:02:14 +00:00
1f595fc079 Change "New" button text to "Compose" 2012-08-14 18:27:29 +00:00
22c0b789c4 Display last mail check time 2012-08-14 18:23:47 +00:00
967286aed0 New Arabic translation from Transifex
100% complete
2012-08-09 14:00:31 +00:00
ef357a5f2a Updated German and Spanish translations from tx. Pushing en source files to tx. 2012-07-29 10:03:47 +00:00
9fb05ba42e Remove a wrong comment 2012-07-20 12:00:29 +00:00
f13743d7b9 Make the "error" status text a link that shows a stack trace 2012-07-20 11:58:32 +00:00
549c39681d Lower log level 2012-07-20 10:56:09 +00:00
a3e8f657dd Show connect button if connecting failed 2012-07-20 10:54:35 +00:00
9cb3409a1a Add KYTV, change HH's role to Main Dev 2012-07-20 10:53:08 +00:00
5e87d6fa2d Lower log level 2012-07-19 15:16:35 +00:00
902db81fa7 Disable streaming 2012-07-19 15:15:17 +00:00
3cd0f09a41 More detailed log message 2012-07-19 15:13:27 +00:00
d0204effa2 Scroll down to the plugin section 2012-07-19 15:12:48 +00:00
ec619dd830 Fix: some threads not terminating on interrupt() 2012-07-19 15:08:52 +00:00
10e3df428c Spanish translation update from tx 2012-06-06 10:11:49 +00:00
e11f41d7f2 merge of '6f90a7d3635c3fece552972c32e378fc5177dd0b'
and '754beaa17f082deb32703c671277a2c0a5ef9ae5'
2012-06-03 21:37:14 +00:00
f7aae2de4e Add Hungarian translation from TX, thanks AdminLMH! 2012-06-03 13:57:06 +00:00
d1e4d1a715 Apply layout fixes from rev. e3deccd7238bb85c8b21b564b52979e3b3441142 to network.jsp 2012-06-03 09:38:15 +00:00
9435b23ab2 Internationalize a string 2012-06-03 09:23:05 +00:00
bdffd2b8c4 Apply layout fixes from rev. e3deccd7238bb85c8b21b564b52979e3b3441142 to the vanilla theme 2012-06-03 09:19:50 +00:00
590b9a9e05 Handle individual files 2012-06-03 07:20:36 +00:00
86ec61db22 Fix layout issues in recent versions of Firefox and Chromium 2012-05-24 18:33:04 +00:00
45f60e9242 Add translators 2012-04-20 00:11:08 +00:00
56be74a167 Dutch updates from Transifex 2012-04-19 23:31:06 +00:00
14376afddb Translation updates from TX (cs, de, es, pl, & sv) 2012-02-23 12:17:55 +00:00
d2adcd64a7 Fixed bug with "Check mail" button.
Better presentation for "Compose" button.
Some advantages in russian translation
2012-01-01 00:00:00 +00:00
13c19addff copy theme folder 2011-12-17 00:37:29 +00:00
dad6a579c1 Escape & entities 2011-12-17 00:37:15 +00:00
83d585f651 s/wordwrap/word-wrap/ 2011-12-17 00:36:56 +00:00
90ceef4583 Add the ability for users to add their own UI themes 2011-12-15 06:51:16 +00:00
0bf899e291 Update translation 2011-12-14 02:48:25 +00:00
bbdfc5745b * Add theming support
* Add 'vanilla' theme
* Remove unused icon files
2011-12-14 02:44:22 +00:00
c3e6a437c9 HTML/CSS:
* Move CSS out of JSPs
 * Replace layout tables with CSS
 * Make pages variable width
2011-12-10 05:08:12 +00:00
dbe4400409 Internationalize strings 2011-11-27 06:26:59 +00:00
bb5d075a54 Replace no-argument JSP functions with bean properties 2011-11-27 06:01:53 +00:00
5d87d5ec00 Put close() in a finally{ } 2011-11-26 05:06:39 +00:00
d24eea365c Add comment 2011-11-26 04:57:35 +00:00
abd4a55956 Move the two toByteArray methods into the superclass 2011-11-26 04:55:00 +00:00
732b14115b Fix error message 2011-11-26 04:39:13 +00:00
4455fbb172 * Move symmetric encryption to AbstractCryptoImplementation
* Don't use deprecated methods AESEngine.safeEncrypt() and AESEngine.safeDecrypt()
2011-11-26 04:31:35 +00:00
673d43cd86 Use the global context, don't create a new one 2011-11-24 05:23:02 +00:00
b45a162826 Updated (ant poupdate) and pushed to tx 2011-09-23 19:23:44 +00:00
b06d07b5d1 Add Vietnamese language from Transifex 2011-09-23 19:23:16 +00:00
52ac133ffa Add Italian and Ukrainian from transifex 2011-09-23 19:17:23 +00:00
4a240fbb5b Ran ant poupdate for ar and fr. These have been pushed to transifex. 2011-09-23 19:16:52 +00:00
252a7f0dad merge of '6e3866d554a0bce90773691091c5e037aa69cadc'
and '95a0846bd260b60d641a584dceb6ced27aa2e3ce'
2011-09-23 19:01:36 +00:00
1cd51c811d display tooltips in routerconsole 2011-07-20 04:15:26 +00:00
dda1f5b585 corrected version in manual to current release 2011-07-20 03:46:22 +00:00
fb5e1fc4c2 upd i2p-bote messages_fr.po 2011-07-08 14:39:57 +00:00
0e6a32a0a0 Update Arabic po from source and finished translation 100% 2011-06-11 09:23:59 +00:00
d9bc25e1aa translate French strings into Arabic 2011-06-09 13:57:26 +00:00
b124a1046d update .po's 2011-06-02 18:47:29 +00:00
cd21435b60 correction to history.txt 2011-05-02 16:29:02 +00:00
44130323ad typo es 2011-05-02 16:28:38 +00:00
ef339c29d0 Fix: Existing derivparams file not found 2011-04-30 22:28:56 +00:00
8ea8e86d99 Correction to translators 2011-04-30 18:45:46 +00:00
0edf2cfbe3 Replace b32 url with i2pbote.i2p 2011-04-30 18:25:15 +00:00
a4b284a71c 0.2.6 2011-04-25 23:36:22 +00:00
e1b9eb5bbc When replying to an email sent by a local identity, send to the recipient of the original email by default 2011-04-25 00:22:33 +00:00
f45a185502 Update techdoc.txt; remove To Do / Ideas section 2011-04-24 15:06:40 +00:00
be545c0836 Don't run migration if already migrated to the latest version 2011-04-24 15:06:39 +00:00
6c10b8ac64 Fix: signature flag (Email.SIGNATURE_VALID_HEADER) not set on emails in the "sent" folder 2011-04-23 23:35:23 +00:00
92ff6b58f0 Add FileInfo tool 2011-04-23 22:16:26 +00:00
1f54ed9ba8 Change order of parameters in the derivparams file so it matches encrypted files 2011-04-23 21:36:47 +00:00
19452867b4 Fix error messages in log: "Request contains a parameter named recipient0, but no parameter named recipientType0." 2011-04-23 08:35:22 +00:00
1fe6c4fc36 Move illegal <description> tags out of i2pbote.tld 2011-04-23 07:15:44 +00:00
57ead77d39 Capitalize static variable 2011-04-23 06:29:46 +00:00
dd3ed14174 Remove empty directories (see rev. 65aabb15c2a5df2959bdd8987b6ef8959fe3a537) 2011-04-23 06:23:43 +00:00
efc2363ade Translate page title 2011-04-23 06:01:24 +00:00
19a586b170 Integrate FAQ and user guide 2011-04-23 05:59:54 +00:00
3851faff3f Fix a few things in the German translation, and make it more German 2011-04-22 21:29:08 +00:00
a583a1fcc3 Add/fix comments 2011-04-22 20:58:41 +00:00
0464c76884 Wrap (fold) long signatures 2011-04-22 08:28:14 +00:00
2bc05d4d46 Use identities from TestUtil 2011-04-22 07:18:25 +00:00
19970b1d53 Fix: "Check Mail" button brings up an error page if a password is required 2011-04-22 05:54:48 +00:00
035cd346a4 Fix: "constant string too long" when compiling tests with Ant (javac) 2011-04-21 04:56:04 +00:00
cb1d5bbf67 Set encoding to ISO-8859-1 when compiling flexiprovider sources 2011-04-21 04:50:54 +00:00
058d09d262 Pare down flexiprovider some more 2011-04-21 04:48:05 +00:00
14c728c588 merge of '110cd0892a45b8d875bce780895a137da24510d8'
and 'df7b1ac4e3f00852ae445bab6259fb76bd56c5b6'
2011-04-20 03:08:49 +00:00
7823b38d24 Update russian translation 2011-04-19 17:44:33 +00:00
cb76489c0f Use SHA-512 for ECDSA-521 2011-04-18 05:57:28 +00:00
fb0352cd7e Don't create zero-length packet files 2011-04-17 19:22:46 +00:00
b7fcbb5829 Fix plugin target 2011-04-16 22:03:16 +00:00
80a04a70cb Fix IdentitiesTest 2011-04-16 04:58:40 +00:00
b48534b5f7 * Fix: endless JSP forwarding loop when two emails in the same folder have been encrypted with different passwords
* Make PasswordException a checked exception
* Remove unused method AddressBook.iterator()
2011-04-16 04:57:53 +00:00
a1085909e1 ego inflation 2011-04-07 21:50:23 +00:00
dc7777be7f fix about identity creation 2011-04-07 08:20:48 +00:00
0ed58252d9 fix about identity creation 2011-04-07 07:31:13 +00:00
660b77c112 fix about identity creation 2011-04-07 07:15:44 +00:00
1c2fe9a481 typos 2011-04-06 19:37:47 +00:00
dc2d8397ab ug_fr.html saved as manual_fr.odt 2011-04-06 13:20:04 +00:00
926a06e53c end (0.2.6) 2011-04-06 13:03:08 +00:00
7de621dc82 end? 2011-04-06 08:55:16 +00:00
35bf2b930a still wip 2011-04-06 07:24:31 +00:00
307e4e8863 fix Guide 2011-04-05 23:33:57 +00:00
04569977d5 still wip 2011-04-05 18:40:39 +00:00
b11bd7b53b small fixes 2011-04-05 18:16:59 +00:00
4f42050cf2 wip 2011-04-05 17:13:49 +00:00
4b95f34430 wip 2011-04-05 12:22:12 +00:00
e10933cc0e typos 2011-04-05 11:03:54 +00:00
db4c3f23cd wip 2011-04-05 11:03:10 +00:00
3ff443fcc8 upd 2011-04-05 10:28:29 +00:00
3c302441ea upd 2011-04-05 08:32:19 +00:00
250f12a69f upd 2011-04-05 07:50:20 +00:00
cc15bff91b add 2011-04-05 07:24:31 +00:00
9b8828109c testers 2011-04-03 21:43:58 +00:00
72e033e2ef merge of '8bc35fe3851864fad1642e80e73229d6c14d1ba7'
and 'e2e8fcdb307d607cd9d22db33030468d94ec1883'
2011-04-03 20:17:22 +00:00
08f96661fa endend 2011-04-03 19:10:25 +00:00
7bfffe413c Update to BouncyCastle 1.46 which fixes a bug in ECDSA 2011-04-03 06:51:59 +00:00
1425a641ae merge of '4fc6f4c8c7963990ab7f079b86d96b7b8aeb761d'
and 'fd7b2809cdc6fa75aacb97c2ed09a2df4101f41f'
2011-04-03 04:41:16 +00:00
8ed88d1331 ECDH_ECDSA.java:
* Remove exceptions that are declared but never thrown
 * Remove safeEncrypt() TODO, not worth breaking compatibility
2011-04-03 04:40:05 +00:00
a99c08d0e7 typos 2011-04-03 02:17:32 +00:00
c1191d803c translation tweaks es, pt 2011-04-03 00:30:14 +00:00
844f1d3741 translation tweaks es & pt 2011-04-03 00:20:57 +00:00
612753b39e Fix: message not showing when an identity is deleted 2011-04-03 00:11:41 +00:00
cecccddc2e translation tweak es 2011-04-03 00:08:56 +00:00
17073ed8cd translation tweak es 2011-04-03 00:01:19 +00:00
efe14faae4 Move "delete identity" link to editIdentity.jsp and replace the trash can icon with a "delete" button to make it harder to accidentally delete an identity 2011-04-02 23:14:22 +00:00
08aa68d257 Suppress echoing of .bat commands during JRE installation, show a wait message instead 2011-04-02 23:03:12 +00:00
2b9b19030f Undo rev. fcd151e70c681bd38f2677cf4e9be334c7ca4cbe which broke win32installer 2011-04-02 22:27:39 +00:00
87b70ff7bc merge of 'e1744d66f44b6c2f5d1b7d6c2d337c5f2db49687'
and 'fcd151e70c681bd38f2677cf4e9be334c7ca4cbe'
2011-04-02 17:16:21 +00:00
6776b87040 update Swedish translation; thx to hottuna and jaywalk 2011-04-02 12:39:44 +00:00
210ad7f767 Dutch translation updated 2011-04-02 11:34:48 +00:00
3960e41534 Transifex config 2011-04-02 11:26:06 +00:00
32fc56754a Add support for Transifex, fixing po errors. 2011-04-02 11:24:30 +00:00
082f553be4 Create i2pbote.jar in ant_build/lib instead of WebContent/WEB-INF/lib 2011-04-02 02:44:20 +00:00
bcb31dca0a merge of 'a887eef6899db3400a21fb2319e61208d91cbb29'
and 'b156a7cf0018eebcf3ca07c4273a7918ef260ce7'
2011-04-01 19:55:53 +00:00
a508fa1a0f update translations from web-based translations for sv and zh 2011-04-01 19:55:22 +00:00
dbf769a8cb end2 2011-04-01 14:30:28 +00:00
f3825f3890 end 2011-04-01 12:48:58 +00:00
4125ada488 typo 2011-03-31 19:28:24 +00:00
6a425d1880 merge of 'a11d73c48aa593549c58e0caf94c3effd46ad971'
and 'a7d2d9270b5d91a90992345375b12bd392697635'
2011-03-31 01:28:44 +00:00
173c89306f go on and go2bed 2011-03-31 01:23:06 +00:00
8c6e3bedfb go on 2011-03-31 00:47:01 +00:00
db9a13d58d go on. Please user have a look...I PM my 2 questions 2011-03-30 23:38:51 +00:00
fa37238e00 update translation es and pt 2011-03-30 21:07:40 +00:00
2f10c2bb29 update FAQ and Manual 2011-03-30 20:16:16 +00:00
437686b1e6 redo 2011-03-30 19:41:45 +00:00
53508009b9 upd 2011-03-30 17:01:08 +00:00
49ff872b88 go on FAQ_fr 2011-03-30 11:24:38 +00:00
115688de03 begin 2011-03-30 09:17:51 +00:00
346d0cd822 Fix remaining file deletion issues on Windows (see rev. 10d16759d75f1ee7ddcbe3bbf16a826d21345619) 2011-03-28 07:56:28 +00:00
e51c29565e Don't report an error if there is no metadata file 2011-03-28 07:43:49 +00:00
15f209844d Internationalize string 2011-03-28 07:38:11 +00:00
86a50c7986 Update win32installer to work with latest router install.xml, add flexi-gmss-1.7p1.jar 2011-03-27 06:50:46 +00:00
5d44198fef Update German translation 2011-03-27 06:49:38 +00:00
3ab31b8b16 Don't log stack trace when plugin.config not found 2011-03-27 06:48:53 +00:00
4bbab19d14 If no good relay peers are known, query for peers more often 2011-03-25 00:34:24 +00:00
d532c6117d Replace NtruSign with GMSS which uses smaller public keys and inspires more confidence security-wise 2011-03-24 04:38:21 +00:00
63dc3ea208 Fix: Identities and address book still available after the Clear Password icon is clicked 2011-03-16 22:10:00 +00:00
82cb40e9bf Check for null values from I2PSession.receiveMessage() 2011-03-16 19:11:27 +00:00
ec0b072fca Refactor / cleanup:
* Reduce visibility of classes and methods
* Remove unused methods and commented-out code
*
2011-03-16 19:09:57 +00:00
4718424d11 Fix: "Password cleared" message not showing 2011-03-16 17:05:26 +00:00
4300ce67e8 Fix NPE in clearPasswordCache.jsp when password is not in cache 2011-03-16 15:33:11 +00:00
c58a8bb562 Add null checks 2011-03-16 04:30:56 +00:00
55859d669b Remove unnecessary instance variables 2011-03-16 03:51:11 +00:00
e11e80832a Update German translation 2011-03-16 01:31:47 +00:00
e5f7e1e78f Show an icon when the password is in the cache, and uncache the password when the icon is clicked on 2011-03-16 01:25:02 +00:00
6893f5b487 Remove unused constructor UniqueId(InputStream) 2011-03-14 06:20:10 +00:00
d56ccaf436 If Seedless not available, continue trying 2011-03-14 06:18:26 +00:00
1110bbe386 add credits 2011-03-12 03:36:16 +00:00
65290098e6 Add an option to show the full email identity (public + private keys) 2011-03-08 05:33:53 +00:00
5fd314753b 2011-03-08 05:20:56 +00:00
8dd98f2733 Update russian translation 2011-03-07 19:34:05 +00:00
d33882848f Include encrypt.bat and decrypt.bat in the plugin install (I missed this in rev. 01eb620588f85f0d86184be1fb349a43a83fbcfb) 2011-03-06 22:56:56 +00:00
0e174f870c 2011-03-06 22:08:02 +00:00
6954e5c7a8 Change /passive option to /s 2011-03-06 22:04:39 +00:00
8de6a0ab07 Update JRE download link to 6u24 2011-03-06 22:04:00 +00:00
d7cf897072 Add launch scripts for the Encrypt and Decrypt tools 2011-03-06 21:05:09 +00:00
596d19d212 * Add command line programs Encrypt.java and Decrypt.java
* EncryptedInputStream: throw a PasswordException if AESEngine.safeDecrypt() returns null
2011-03-05 23:21:22 +00:00
4e44fc204e merge of '0c43ec8566a97f8ad57f17575db898b259932435'
and '662195feb3df61d6b5a84dea177727d94cedb8b6'
2011-03-03 21:23:00 +00:00
277a535be4 l8tion 2011-03-03 18:13:39 +00:00
1dbd6ebc4c Add Override annotations 2011-03-03 03:46:25 +00:00
bcf869586f Update comments 2011-03-03 03:41:33 +00:00
6b5bc59775 Update techdoc.txt 2011-03-03 03:38:55 +00:00
17feb49b0a Fix: Cached scrypt params and salt not correctly reused 2011-03-02 01:51:21 +00:00
9625566913 update zh translation
adapt gettext script to work under windows:
set $LG2 to update/build ONLY with the language you want.
2011-02-28 06:13:51 +00:00
b2a3308c2e Ignore blank lines 2011-02-28 05:30:55 +00:00
89e5a195f8 Remove extraneous character from destination key 2011-02-28 05:30:41 +00:00
e4c130f51f merge of 'c2a5904fdb10cc3d4cbfa195c557c06cf2f65b5e'
and 'e32e7d661f1c0e4ba49afe94f9b2d89acd40e0d5'
2011-02-28 04:59:29 +00:00
899c0f6796 add credits 2011-02-28 02:11:18 +00:00
fc1287a016 add 安全,分布式电子邮件 and بريد الكتروني الآمن و الغير متمركز 2011-02-28 01:49:40 +00:00
fd3ca21a0c 2011-02-27 23:58:52 +00:00
789f8ddc3f If the forwardUrl parameter is not present in an ib:requirePassword tag, go back to the originating page after password entry 2011-02-27 19:51:50 +00:00
bda40109ed Don't show the "known" and "signature" columns in the sent folder 2011-02-27 17:09:42 +00:00
8c44d3890d Replace PBKDF2 with scrypt 2011-02-27 06:15:53 +00:00
0e2b89dff1 Fix: Duplicate identity created if password was not entered beforehand 2011-02-27 06:07:46 +00:00
7c46127738 fix and update .po's, update de,es,pt,fr 2011-02-27 04:40:42 +00:00
d33b8da111 Fix: PasswordException never thrown when saving/deleting an identity 2011-02-19 20:56:02 +00:00
5d6c30f0bb merge of '4e3d88847518753370c65b8240f9f8a623bb3834'
and '9a74d7db99343b21d83e1fb4d89977feb4b541d2'
2011-02-19 19:37:05 +00:00
7008c26545 Show a wait page if an email identity will take long to generate 2011-02-19 19:36:25 +00:00
b8597014dd Fix anonymous sending of emails 2011-02-17 03:55:16 +00:00
0457bd307f Refactor:
* Rename package i2p.bote.io to i2p.bote.fileencryption
 * Move DHT packets to the DHT package
 * Move relay packets to their own package
 * Move ExpirationThread to i2p.bote.service
 * Rename RelayPacketTest to RelayRequestTest
2011-02-17 02:23:10 +00:00
eb446f8703 Add Arabic translation of the plugin 2011-02-16 19:25:19 +00:00
9df307365c Show attachment sizes 2011-02-14 03:12:05 +00:00
fcd4fb63ed New CryptoImplementation: NTRUEncrypt1087_NTRUSign349 2011-02-14 00:11:37 +00:00
27713fb7b6 Remove unused method 2011-02-13 19:23:58 +00:00
0db3ce5026 Make the default status translatable 2011-02-13 19:14:54 +00:00
0f04c2c51a Display an error if the attach button is clicked and no file is selected 2011-02-13 16:35:11 +00:00
206be17615 Show the first few characters of the email destination in the "From:" drop-down 2011-02-13 06:08:26 +00:00
2511c5b851 2011-02-13 04:34:23 +00:00
4db98b2c2b Fix RelayPacketTest 2011-02-13 04:31:05 +00:00
8d2d360180 Fix email deletion on Windows 2011-02-13 03:50:19 +00:00
7d7b509eb9 initial translation for chinese 2011-02-10 16:02:26 +00:00
124ca1ba62 Inform user when an update is available 2011-02-05 23:24:52 +00:00
e9cd4a9f6c * Send big packets as a stream
* Don't rely on InputStream.available() in Util.readBytes()
2011-02-05 16:10:41 +00:00
c627299a35 Fix: All input after first flush() is dropped 2011-02-05 15:53:56 +00:00
e0f183efa8 Comments 2011-02-02 19:30:09 +00:00
89395885ba Fix a NPE 2011-02-01 05:41:53 +00:00
a77309ab36 Change constant scope to private 2011-01-31 07:33:03 +00:00
efd04f322c Remove unused method getMaxFragmentSize 2011-01-31 07:09:42 +00:00
a12f90d432 merge of 'a0f3953b8929001edc2b9d59c3bf314040fc4c7b'
and 'fd9b359f0a1eb07fcc4c0c8ec5abe95a0bc073dd'
2011-01-11 19:29:29 +00:00
5919da4930 merge of '62dcd55b7726aedd5624b076d838cbd11787695a'
and 'cb7ee59eaf0eb93c0dcb91a8226591ca01e51342'
2011-01-11 19:22:47 +00:00
2d291f1ce2 added credits 2011-01-02 05:45:53 +00:00
e299d2e83d Quick fixes to Swedish translation. 2011-01-01 21:54:22 +00:00
76551e3d3f Added Swedish translation. 2011-01-01 21:47:34 +00:00
2f134bfbe4 add translation to Norwegian 2010-12-31 07:01:23 +00:00
c03c481b94 merge of '9a8a529946e94b430d154a127ca08010f15d66d5'
and 'cc0e869985b06631a79b60bf1060d86cc0e88afd'
2010-12-31 01:09:35 +00:00
7d1fed76da mods to pt 2010-12-29 15:51:57 +00:00
7148172e9c New unit test: PasswordCacheTest 2010-12-22 06:01:17 +00:00
5c102da3a0 * Reset expiration when a password is set
* Clear derived key when password is cleared
2010-12-22 05:49:18 +00:00
f3a1c618e5 merge of '243e68f714882dc1fe2f79958b31ac862053ba9f'
and 'f9ab92a43553dde223bb24940d32f19a60022b34'
2010-12-20 05:38:39 +00:00
5c221f31d9 Add missing copyright notices 2010-12-20 00:42:37 +00:00
7ac42c0e4e translation updates 2010-12-19 23:32:17 +00:00
4da3ee6aed New Ant task: win32installer 2010-12-19 23:00:50 +00:00
3aecc56933 Restore plugin.config after mismerge 2010-12-19 22:27:47 +00:00
5ea124b7d2 Jetty fix 2010-12-19 22:22:17 +00:00
7fb33a0d35 Fix return to folder.jsp after password entry 2010-12-19 22:21:04 +00:00
6d2878db5c * Add jMock .jars to JUnit classpath
* Offer to download JUnit and jMock if they're not found
2010-12-18 03:46:00 +00:00
9bee5057f1 merge of '0b216d7818b91cf69fdfb88048dfcbfbfce02833'
and 'de95731855e9e7f8a81b42642fd566ac6ee76c08'
2010-12-17 19:54:42 +00:00
bdce2ecad5 merge of '561ea16dc8eb82dc348dca962f30e579c8ed3d63'
and 'b1b87fc5a28b9aad267b6c3aeddc1c23377c5ab6'
2010-12-17 19:54:42 +00:00
d3ee66ff60 * Remove unused method toBase32
* Replace instanceof with getClass() in equals()
2010-12-17 03:43:44 +00:00
647efead3b Fix unit tests; jMock now required to run them 2010-12-17 03:41:57 +00:00
09f5d107c9 translation update de 2010-12-17 02:01:47 +00:00
d33bc11a31 Contributors update 2010-12-16 01:27:09 +00:00
2d6066ad58 Remove serialVersionUID from non-serializable class 2010-12-16 00:40:21 +00:00
0bdd216ef0 Remove an obsolete comment 2010-12-16 00:39:08 +00:00
75336e899d Fix an import 2010-12-16 00:28:22 +00:00
3870ca5335 plugin.config nl link translation 2010-12-13 18:46:26 +00:00
5aaae853af plugin.config translation 2010-12-13 16:39:01 +00:00
a64cdca34e merge of '0039d7fd449038234648a57ff05906383d0ce75d'
and '92c193a4f6709ce5205a43617bcd8a144ae598ca'
2010-12-13 11:52:48 +00:00
99f64adc05 merge of 'b85935006af43967ba763bb53ab75c6f0278c539'
and 'eff65f71bc633578ad72cbcb2d5301f1d1766c30'
2010-12-13 11:52:47 +00:00
05c24ab545 explicit merge of '93973b70de2d4a41180a7d2f201b684e5ea6d445'
and '451bb8a70baa411c0d401c329b5b60b7c14d09b3'
2010-12-13 11:44:04 +00:00
897d43ff51 Fix a typo 2010-12-13 11:42:56 +00:00
46b9e3a039 explicit merge of '7ca94be8ef990b10920f144f441a51d239d33c48'
and 'ef38ab9835eb8fec5dbd981f2951d12d5d0d5d0d'
2010-12-13 08:06:21 +00:00
018209bed5 Dutch translation by KwukDuck 2010-12-13 08:03:04 +00:00
fe14f97dfd explicit merge of '5c7fd9edde41ff7c26cd2fb28e1a46b96c1f8538'
and '9245efd7b168684236148a7102535f0a009e2c4f'
2010-12-13 01:39:10 +00:00
f2b1d3cc1c Portuguese translation 2010-12-13 01:13:25 +00:00
0600b6e595 merge of '08eff6bfa6a2b340f314f1de096c771337eb3a3b'
and '1dbb023c5b2674f49708ad83060aed35cdb3a7a1'
2010-12-12 20:10:11 +00:00
aab0b139d3 * Don't encrypt meta files
* Don't attempt to convert a non-existing directory
2010-12-12 20:06:18 +00:00
872c386929 Focus the "old password" field 2010-12-12 20:03:19 +00:00
23f57da28e * Cache file encryption key, reuse salt for performance
* EncryptedOutputStream: Cache key, not password; keep a copy of the key until close() is called so the key is not lost when the original is erased by PasswordCache
* Prevent password expiration during password change (which can take some time)
2010-12-12 20:01:09 +00:00
7fbd29b75d File encryption 2010-12-10 20:10:49 +00:00
b8fd5b5c1d Add TO-DO note for HH to do an important fix. 2010-12-07 00:36:20 +00:00
c81f2cb46c merge of '43b11afe7287401107616e5cff0c1d4773c0e1d3'
and '92344efb7a96786e8ef1e256f754ea8e9666c765'
2010-12-07 00:23:23 +00:00
6c859388c5 changes to Spanish translation 2010-12-04 10:56:38 +00:00
087b8ddc42 changes to the manual 2010-12-04 10:52:54 +00:00
0eba059a8c merge of '28760fe7e19dd265a2ede35a51f73e5c07b1a2aa'
and 'db84face38fdd977157aaf02c444b894c7049d84'
2010-11-28 06:45:44 +00:00
7136ab215c Refactor out Deprecated destFromName calls, fixup nb files 2010-11-28 06:45:22 +00:00
3f867d8041 plugin.config: add russian translation 2010-11-20 19:29:23 +00:00
a8bb3652fe added string to plugin.config and a minor correction 2010-11-16 22:34:07 +00:00
1672d95ae6 merge of '2e376f13320c297b93e734b3f39e113752891578'
and 'f2d47e61537a5a2f2077eae200af07ef12114b2e'
2010-11-11 21:01:03 +00:00
c3c832649c update manual 2010-11-11 21:00:10 +00:00
c115278016 merge of '6b7cd0a43c55b9a2ae53778a25e6940cfe4fba1f'
and '9245efd7b168684236148a7102535f0a009e2c4f'
2010-11-11 17:32:29 +00:00
a65653b30b Spanish translation for Bote; fixes sent in by Redzara to French translation 2010-11-11 17:31:18 +00:00
d92f66720a merge of '37af2db09b85c46e860280cdb70d92bf07810401'
and 'df5454597876a5df6f61e5adb97d30fb57b63d48'
2010-11-04 06:57:33 +00:00
0954398245 minor corrections 2010-11-03 18:10:46 +00:00
50da5ccc80 Fix a NPE 2010-11-03 06:09:00 +00:00
2b71438c82 French translation by albat and mixxy 2010-10-29 20:19:23 +00:00
1b5356e845 Fix a comment 2010-10-26 20:24:52 +00:00
9c951dc2f1 Fix a NPE 2010-10-26 18:27:11 +00:00
117c35cc5a * Sign email before saving to sent folder
* Don't hide signature column in folder.jsp. It was a kludge, signing before saving is the right way to do it.
2010-10-14 19:02:11 +00:00
dbd46e2b4f Comments 2010-10-03 22:06:20 +00:00
a2c55a78fc 0.2.5 2010-10-03 22:05:54 +00:00
c423b7331e Implement KBucketTest 2010-10-03 21:59:48 +00:00
a031f4da28 Decrease text field width on the "new email" page 2010-10-03 19:19:15 +00:00
7573eed929 Minor things 2010-10-03 19:13:53 +00:00
1e78638692 Refresh folder list when new mail arrives so the inbox message count is updated 2010-10-03 08:07:48 +00:00
19ea512d79 Fix: Two new recipient fields appear when the "plus" button is clicked after entering text in the existing recipient field 2010-10-03 07:25:07 +00:00
b9155254d0 Use base64 for RelayPacketFolder filenames, which is what all other folders do 2010-10-03 00:19:14 +00:00
0ebe7e68c7 Update techdoc.txt 2010-10-02 22:50:02 +00:00
48340cb790 Update manual 2010-10-02 20:14:24 +00:00
02b803fda7 Fix duplicate "Unknown" in the date/time column in folder.jsp 2010-10-02 19:49:41 +00:00
4d306d5f85 Translation update 2010-10-02 19:47:05 +00:00
388843a439 Implement reading from ByteBuffer and writing to OutputStream 2010-10-02 18:34:56 +00:00
e03521821a Make the outbox check interval a config setting 2010-10-02 06:23:40 +00:00
ac77853485 Fix display of date/time in showEmail.jsp 2010-10-02 04:57:30 +00:00
ce664ebf8b * Use a non-deprecated variant of ElGamalAESEngine.encrypt()
* Do ElGamal/AES in the new methods Util.encrypt() and Util.decrypt()
* Use a min padding size of zero when calling ElGamalAESEngine.encrypt()
2010-10-02 03:51:59 +00:00
93041cb1d4 Simplifications:
* Get rid of RelayDataPackets, put everything in RelayRequests
 * Put a packet ID in all Communication Packets (most of them had it already)
 * Combine MalformedCommunicationPacketException and MalformedDataPacketException into MalformedPacketException
2010-10-02 03:00:53 +00:00
d68fd5429e Log deletion of relay packets 2010-09-30 05:50:03 +00:00
a7b4b9acc6 Pad relay packets 2010-09-30 05:11:42 +00:00
20841b7a4a Remove the unused and confusing Email Address field from the Edit Identity page 2010-09-27 05:54:08 +00:00
e7f186b7f3 * Write to metadata the time an email is created
* Add a "create time" column to the outbox
* Make "create time" the default sort column in the outbox
2010-09-27 05:37:27 +00:00
2a2adc6645 Change a few more logging statements I missed in rev. 6c3cec9cf9ac70dadd403a2f2bc10a5be18f1fbd to print peers in base32 2010-09-26 19:52:11 +00:00
9989940693 * Fix NegativeArraySizeException when a two-byte length field in a packet contains a value greater than Short.MAX_VALUE
* Keep packet size below I2PBotePacket.MAX_DATAGRAM_SIZE, take into account relay packet overhead
2010-09-26 18:51:49 +00:00
f71f0e1470 Show a message after saving settings 2010-09-25 07:32:00 +00:00
3c7bd9acf6 Simplify folderLink.tag by using folder.jsp for the outbox; see rev. 7790618d3eba2f460983f87db7ddc1fe1b94053c 2010-09-25 07:11:58 +00:00
1439358221 Take the user back to outbox.jsp after an outbox email is deleted 2010-09-25 06:48:31 +00:00
0895c3c976 Sort by name and destination, not just name, so different destinations/identities can have the same name 2010-09-25 06:45:53 +00:00
8a6c6c2627 Fix non-ASCII characters in the New Identity / Edit Identity form by changing it to POST (should be POST anyway) 2010-09-24 06:50:08 +00:00
c3883bb069 Make the "unknown" column a "known" column, show a check mark when an email dest is known 2010-09-23 05:52:06 +00:00
4e5104ff52 Show status for outbox emails 2010-09-23 05:29:22 +00:00
ecf093119a Reduce default delay to 5..40 minutes per hop 2010-09-23 05:04:26 +00:00
cbd7a8dffb Don't show signature column in "sent" folder 2010-09-23 04:57:37 +00:00
08cd5406f4 Sort address book and identities by name 2010-09-23 04:06:10 +00:00
af2f63565f Update technical documentation 2010-09-22 17:38:34 +00:00
1b481dcf24 Add user manual by mixxy, delete userdoc.txt 2010-09-22 17:38:15 +00:00
6ee5005944 Align Sent Time 2010-09-22 07:18:27 +00:00
b4b94ad38a Log peer destinations in base32 2010-09-22 06:21:57 +00:00
aa4551fc14 Show local destination and peer destinations in base32 2010-09-20 05:18:46 +00:00
9d77f57123 Add a note about attachment sizes 2010-09-20 03:31:11 +00:00
3115faedb2 Fix comments, remove unnecessary braces 2010-09-20 02:37:46 +00:00
4e7b0c115e Keep trying to send an email if there is an error 2010-09-20 02:27:33 +00:00
c28c99060b Replication:
* Replicate onto the closest nodes to the packet's DHT key instead of the local destination hash
 * When a packet has been re-stored since the last replication, assume it has been stored on all closest nodes and don't replicate it to any peer
 * When a delete request is received for a replicated packet, stop replicating that packet and replicate the delete request instead
2010-09-19 08:31:36 +00:00
d3a072c54b * Don't replicate packets that were recently replicated
* Log number of replicated packets
2010-09-16 05:06:44 +00:00
174a94f492 Fix: ReplicateThread.packetStored() not called when storing in a DeletionAwareDhtFolder 2010-09-16 05:02:12 +00:00
9f6806a738 Verify hashes of received email packets against the DHT key 2010-09-15 06:50:52 +00:00
809dc90bc8 Fix non-ascii characters (switching from Commons FileUpload to JavaMail-based multipart parsing broke them) 2010-09-09 06:04:40 +00:00
c14faf5fc4 Lower the LZMA dictionary size, 2^24 causes heap space errors when running as a .war in the router 2010-09-07 07:40:03 +00:00
d9034fee31 Change a few log levels 2010-09-06 22:56:27 +00:00
c30180fcbf Remove newlines from the end of files (just a personal preference) 2010-09-06 22:46:58 +00:00
110a4bd484 Fix LZMA dictionary size 2010-09-06 19:46:47 +00:00
06106c0b57 Use isProtocolVersionOk() for version checking, see rev. c848aa079ff8d62fac18c1c7782d48befc13b98d 2010-09-06 19:44:32 +00:00
a006e3b688 Use different texts for the two test emails 2010-09-06 07:53:18 +00:00
d37911e5b1 Add a new field containing a Return Chain to the Relay Request format. Only empty return chains are supported for now. 2010-09-06 07:10:35 +00:00
b128693296 * Talk to peers that use protocol version 4 or higher
* Do the version check in one place (I2PBotePacket.isProtocolVersionOk()), not two
2010-09-06 06:32:37 +00:00
85d958a0cc Add Russian translation by suhr 2010-09-05 19:59:11 +00:00
ca1d5e6d8c Update RelayPacketTest to use the new file format introduced in revision bfde50fb7c22410d7859a6914990798c68127bc5 2010-08-25 02:28:48 +00:00
245e50aaa9 Count emails with no metadata as new to match the behavior of the EmailMetaData class 2010-08-22 20:49:33 +00:00
4d0d5d245c Minor things 2010-08-18 20:58:51 +00:00
f1d8554ab3 Put a space between name and angle bracket 2010-08-18 20:56:42 +00:00
c76a33fa69 Fix: Extra blank char after the name when clicking "add to address book" in an email 2010-08-18 20:48:21 +00:00
5a3e49c4dd Replace Thread.sleep() with awaitShutdownRequest() 2010-08-18 04:33:57 +00:00
2ad8d2ac8e Fix: Folder view only shows the recipient if it is a local identity 2010-08-18 04:32:38 +00:00
d0c4fd7ca8 * Only use the last 20 peer list requests / responses to calculate reachability
* Increase RelayPeerManager.UPDATE_INTERVAL to 60 minutes
2010-08-18 03:05:28 +00:00
6b38f0d520 Comments and other minor things 2010-08-17 17:52:33 +00:00
0105bb360a Cleanup 2010-08-17 17:47:54 +00:00
35d22a9638 * Fix: EmailPacketFolder.storeAndCreateDeleteRequest() does not correctly handle multiple deletion records in the same DEL_ file
* Fix: Delete verification hash contains the same data as the delete auth key. Apply SHA256 so the delete verification hash actually is the hash of the auth key.
2010-08-17 17:41:25 +00:00
2cce8c9a7a Remove option to set the UI language, always use the router console setting. The language option was changing the router console language, so it was kind of pointless. 2010-08-16 19:44:13 +00:00
a525c3d920 * Rewrite of MultipartFilter: Use javax.mail.internet.MimeMultipart for multipart parsing, get rid of commons-io and commons-fileupload.
* Move attachment adding code in SendEmailTag.java to Email.java
* Encode attachments in 8bit rather than base64 because base64 negates compression
2010-08-16 08:41:37 +00:00
8f090fd3e3 Clean up test folder when finished 2010-08-12 06:10:49 +00:00
c36b24bad6 * Comments, Formatting
* Move ProxyRequest.java into the seedless package because it is only used there
2010-08-12 06:08:31 +00:00
9b8fd8e6fc * Store metadata files along with email files
* Move the new/old flag to metadata (no more N_ and O_ filename prefixes)
* Write the received time to metadata when an email is received
* Use the received time as the sort criteria when an email has no sent time
2010-08-12 05:46:56 +00:00
078f0952ef Fix an NPE when trying to connect before Seedless is initialized 2010-08-01 06:21:11 +00:00
834331903e * Don't set the Date header if it is already there
* Slight code simplification
2010-08-01 06:18:55 +00:00
b112ad89f3 * Remove KademliaDHTTest (would have been to complicated to implement)
* Add KBucketTest (does nothing yet)
2010-08-01 01:26:12 +00:00
73f8295c9c A few little things 2010-08-01 01:23:25 +00:00
c2da679543 * Make getFilenames() protected
* Remove individualPackets() override in DeletionAwareDhtFolder which does nothing
2010-08-01 01:21:27 +00:00
ac46459a0d Send a specific delay time in relay packets, not a min/max range 2010-08-01 01:16:37 +00:00
c663415ebc Add includeSendTime parameter so Email.updateHeaders() doesn't have to call I2PBote.getInstance(). It also has the small benefit of the "include send time" setting being determined at the time the user clicks Send rather than the time the email is sent from the outbox (which doesn't always happen instantly, for example when there is no network connection yet or several emails are queued in the outbox). 2010-08-01 01:08:38 +00:00
68f9360f40 Folder.iterator(): Don't return null if an invalid/unreadable file is encountered, skip it instead 2010-08-01 00:43:45 +00:00
e0436d1e43 * Do not exit background threads on unchecked exceptions
* I2PBote.java: put all background threads in a Collection like sponge suggested
* Do automatic and user-initiated email checking in one class (EmailChecker)
* New interface NetworkStatusSource, used by OutboxProcessor and EmailChecker
* Several other changes
2010-08-01 00:20:52 +00:00
a488294bb3 Convert tabs to spaces 2010-07-29 00:29:50 +00:00
175345dfe4 Shut down EmailPacketTask threads when the tasks are finished 2010-07-25 05:09:12 +00:00
78bb4f7366 Fix member field name in comment 2010-07-24 07:50:08 +00:00
29f485f4e2 Fix: Reachability of relay peers changes to 100% after startup 2010-07-24 07:47:58 +00:00
b794aaf0e0 Remove unused methods 2010-07-24 02:17:22 +00:00
465d509bcc * Autorefresh "inbox" and "sent" folders
* Autorefresh outbox if it is not empty
2010-07-19 05:39:51 +00:00
a4b25f0ae8 Stop refreshing when the CONNECTED or ERROR status is reached 2010-07-19 01:26:26 +00:00
7feba2f15e * Don't disable the "new email" button
* Refresh the frame until the Check Mail button becomes ungreyed
2010-07-19 01:22:20 +00:00
2e72fb7f36 Don't send email if no recipient, show error message instead 2010-07-18 05:48:17 +00:00
a225fa20b1 Fix NPE when sending before connected 2010-07-18 05:47:22 +00:00
f87fe26811 javadoc Ant target, javadoc formatting, documentation 2010-07-17 22:52:24 +00:00
d2b38a3f33 merge of '34a49b587bbb0c309e60a1df7a9a792654e48fd2'
and 'bf83f8762c1d6cfaa71871d32bdc9a3e089058c1'
2010-07-16 15:41:45 +00:00
ef8a143eb0 Ant build file:
* Use I2P libs from $I2P/lib instead of the mtn working directory
 * More help text
 * Check for presence of the I2P env variable
 * Add "src" to the "all" target
2010-07-16 07:07:48 +00:00
e33d186ed0 When writing a file or creating a directory, set permissions to readable / writable only by owner 2010-07-15 05:20:57 +00:00
0527c1f246 Fix counting of #lines read 2010-07-14 18:46:20 +00:00
7ee570e375 * Translate the string for the outbox status "Queued"
* Remove an unused method
2010-07-14 07:09:14 +00:00
c7182a27cf Remember the selected sender identity when leaving the "new email" page (via the address book button) and returning. 2010-07-14 07:05:57 +00:00
f972c9e2e6 Fix: MultipartFilter drops request parameters that are added via jsp:param in a jsp:forward 2010-07-13 07:52:44 +00:00
29df785ab6 merge of '9c9772d22e302d48a4c849c18c8ff3bcb3ff8404'
and 'e09e454db05d06c660ba0e8e2ff5021aa52ec787'
2010-07-12 06:14:06 +00:00
e3448c9b17 Added needed jar files to project.xml for NB 6.5 2010-07-12 04:29:16 +00:00
a3a8c77963 merge of '3e369acec144cfce4278be9456f6b81de0455791'
and 'dc2bcd3d2bdc8b5c7462377da7462d3f5108b3ee'
2010-07-12 03:48:39 +00:00
67dab8aaf7 merge of '3e369acec144cfce4278be9456f6b81de0455791'
and 'dc2bcd3d2bdc8b5c7462377da7462d3f5108b3ee'
2010-07-12 02:14:52 +00:00
7c2fc47933 Refactor of Seedless:
* Move the doSeedless* methods out of I2PBote.java into the Seedless* classes
 * Move the other Seedless stuff into SeedlessParameters.java
 * Don't inject peers into DHT, call a getter on SeedlessScrapePeers instead
 * Many little things
2010-07-11 23:17:33 +00:00
0a3a2bedf8 Add commons-fileupload-1.2.1.jar and commons-io-1.4.jar to build file 2010-07-11 22:56:17 +00:00
38ab0630af Change announce to 60 minutes to deal with new inter-server transfer specs.
Announces should be done once within 1/5th of it's TTL 72 minutes for bote.
2010-07-11 11:23:41 +00:00
d6be15ca4d * Fix for a bug in the multipart code that broke sending of emails on Jetty
* Ditto for non-ASCII chars not being encoded properly
2010-07-11 00:49:43 +00:00
77ec925d45 Post-merge cleanup. This revision diffs cleanly against 14ada4dcae2f555f4b5539305e32f96bafec675e (the last rev before Seedless). 2010-07-07 05:14:08 +00:00
2bd6eac5af merge of '15679f7110fe5f55407d2d04c63bc18e1d460113'
and '289456e0b294a38c3d0e75d69873d614170f9e58'
2010-07-04 07:42:56 +00:00
50673b6358 Comments 2010-07-04 07:28:05 +00:00
ee578e7b06 Use a SHA256 hash rather than random data for the base32 part of the filename to avoid creating a new copy if a packet is received more than once. 2010-07-04 07:26:14 +00:00
4025734680 * When a relay packet is received, acknowledge receipt to the sender
* Resend relay packets until acknowledgement is received
2010-07-04 07:22:14 +00:00
2bbba38007 * Attachment support
* Lower the priority of some background tasks
2010-07-03 21:59:14 +00:00
479b28f35f Fix: Corrupt padding error with ECDH when the input size is a multiple of 16 2010-06-30 18:36:06 +00:00
07a3340ffa Depend on Seedless _first_, then fallback to built-in, as per HH. 2010-06-28 21:10:51 +00:00
69f289b0d9 Fix annoying NPE 2010-06-25 14:57:59 +00:00
308330c8a0 Success!
We now turn off Seedless peer searches and scrapes when network is connected.
Announce to random ordered Seedless servers.
Thanks to ALL our testers, especially superuser and darrob. 
Thier feedback was very valuable!
2010-06-25 14:50:50 +00:00
aac785dda8 Specify PROTO_DATAGRAM, PORT_UNSPECIFIED, and PORT_UNSPECIFIED when sending.
The default uses PROTO_UNSPECIFIED, which isn't what we wanted.
2010-06-25 13:45:31 +00:00
6bd4cab290 Muxed depends on gzip == true? 2010-06-25 06:49:04 +00:00
816eb59c94 Compress emails before encrypting them 2010-06-25 02:36:15 +00:00
889a28063d * Add sponge as a contributor
* Replace HungryHobo email address with email destination
2010-06-25 02:18:43 +00:00
a783a0ddb8 Salt relay peers like bote does 2010-06-24 22:41:17 +00:00
617122dfe1 Fix NPE. 2010-06-24 20:19:31 +00:00
e471ddd57a Added injection to relay peers as well. This possibly isn't the correct intent. 2010-06-24 20:06:28 +00:00
1999eb2432 merge of '7561cf99368e4a244f4b67c350c0c92f7a1afc08'
and 'a74daea914c9a98d3953dbe4e2507b4ad032ae66'
2010-06-24 17:56:14 +00:00
a22eea0f66 - 2010-06-24 17:55:44 +00:00
62a1a85a8f zap comment 2010-06-24 09:41:21 +00:00
dev
00fbabded2 merge of '5ee8d2f16550b6e4181d9123c069dd8e800059de'
and 'f9c92102d1893e1d6e2597ce50dd617256a4aee3'
2010-06-24 07:46:04 +00:00
dev
53a052382f . 2010-06-24 07:26:58 +00:00
66b970d22b disapproval of revision '0c7dc27eead74ddbe0d89793014d5c1cf2e35b2f' 2010-06-24 06:58:57 +00:00
2b5ce8cf27 And now we hope it is set correctly.
disapproval of revision 'f9c92102d1893e1d6e2597ce50dd617256a4aee3'
2010-06-24 06:26:03 +00:00
408f63bdf9 Hopeful fix to the commits that mtn seems to have goofed up on.
There is nothing in this patch.
2010-06-24 06:24:25 +00:00
1ce75177e9 Change for log debugging. 2010-06-24 06:18:55 +00:00
0df770bc68 Temp fix. See comment KademliaDHT.java ~line 364 2010-06-24 06:12:06 +00:00
120de4af9e Fix stupid bug *embarrassment* 2010-06-24 03:03:50 +00:00
b557973e79 Should work with passworded routerconsole,
Don't know if the injector works right. Needs testing, etc.
That's the part HH needs to finish if it is incorrect.
2010-06-24 03:00:52 +00:00
6b833622cf Seedless:
Can scrape servers
  Can scrape peers
  Can announce
  Can't work with a passworded router console yet.
2010-06-22 18:13:51 +00:00
99baa56af3 Apply patch by zzz to abort the build if <exec> returns non-zero. 2010-06-20 05:20:21 +00:00
95ac52b7ea Increase expiration times in testCheckExpiration() to fix test failures reported by one user. 2010-06-20 05:16:58 +00:00
e4696b2bad Add Netbeans 6.5 Project file 2010-06-18 13:17:50 +00:00
00226dfe4d Remove some unnecessary files from the src target 2010-06-14 08:09:20 +00:00
c0ad846a3d 2010-06-14 07:07:13 +00:00
9a0226674f 0.2.4 2010-06-14 07:06:28 +00:00
5d5a4bc50f Fix "Gateway disabled" error with non-gateway emails 2010-06-14 07:06:06 +00:00
2976f10d92 Don't unnecessarily send a IndexPacketDeleteRequest if there is nothing to delete 2010-06-14 07:00:36 +00:00
9ac0fd128d * Set the X-I2PBote-Sig-Valid header when an email is received
* Use the X-I2PBote-Sig-Valid header flag to determine if an email has a valid signature; only verify the signature if no X-I2PBote-Sig-Valid header
2010-06-14 06:58:45 +00:00
4062cfa97c Restore contents of built-in-peers.txt which I accidentally changed when I moved it to a different package 2010-06-13 07:35:09 +00:00
ff0d6e2ff2 * Change console link name
* Use a b32 update URL
2010-06-13 07:27:34 +00:00
9461bc1edb * Don't use protocol v2 peers as relay peers, put them on the ban list
* Fix: BucketManager doesn't ban unknown peers if they use the wrong protocol
2010-06-13 07:25:15 +00:00
f06e936e10 Update translations and fix a few strings 2010-06-13 07:19:30 +00:00
f90f6059c3 Minor things 2010-06-12 07:40:21 +00:00
f529cd3db0 Gateway (in/outproxy) support 2010-06-12 07:39:37 +00:00
a9a0a5202e Fix sending and displaying of anonymous emails 2010-06-11 20:11:19 +00:00
67a871814e Start peers out at 0 reachability 2010-06-11 20:01:57 +00:00
24d2f2fd9a Suppress two warnings in the ant "compile" target 2010-06-11 07:15:41 +00:00
c3a3a19751 * Include bcprov-ecc-jdk16-145.jar
* Fix path to built-in-peers.txt which has moved
* Don't add jstl.jar and standard jar to the war
2010-06-11 07:12:59 +00:00
37643b15b7 Use 'outbox', not 'outbox/local' for the outbox dir 2010-06-11 02:42:53 +00:00
defbb68445 Make packet type codes compatible to the older packet version so no exceptions are thrown when v0.2.3 peers and v0.2.4 peers try to talk to each other 2010-06-11 02:28:07 +00:00
744c1c1b61 Fix: Existing IndexPackets get lost when adding a new one to the IndexPacketFolder 2010-06-11 02:18:03 +00:00
88e0f5c081 More tests 2010-06-10 18:30:24 +00:00
01eb01dc24 Minor 2010-06-10 08:32:40 +00:00
03dac6db84 Shut down replicateThread when Kademlia shuts down 2010-06-10 08:25:45 +00:00
535dd76c8e * Start / stop the RelayPeerManager service on app startup / shutdown
* Move RelayPeerManager to i2p.bote.service
* Keep reachability statistics on relay peers
2010-06-10 08:24:53 +00:00
e211b1040c Cleanup 2010-06-09 23:22:08 +00:00
8533790aa3 Logging tweak 2010-06-09 20:37:32 +00:00
09a271ba12 Fix NPE when sending email before DHT is done bootstrapping 2010-06-09 20:21:24 +00:00
09337fa259 Minor things 2010-06-09 20:19:40 +00:00
97a93db976 * Fix: Relaying does not work with more than one relay peer
* Add remaining relay-related files
2010-06-09 20:13:49 +00:00
9c9b4b5404 Fix: sentSignal and sentTime were not initialized in one of the CommunicationPacket constructors 2010-06-09 03:11:17 +00:00
9212075b08 Call removePacketListener() even if an exception occurs 2010-06-09 03:08:38 +00:00
0c95890d77 Minor things 2010-06-09 02:48:02 +00:00
135190058a Implement sending of emails through relays 2010-06-09 02:12:13 +00:00
ff87fa0a78 Remove an unused class 2010-06-09 01:34:42 +00:00
ed1b2bcdd2 Start OutboxProcessor and ReplicateThread when Kademlia is finished bootstrapping 2010-06-05 04:51:44 +00:00
6b796c1715 Remove unused constant STALE_THRESHOLD 2010-06-04 06:29:16 +00:00
cdfbd98612 Cleanup 2010-06-04 06:25:58 +00:00
8e471d84a1 Add a paragraph about encryption algorithms to noIdentities.jsp 2010-06-04 06:25:19 +00:00
db72661f57 Implement ECC-256 2010-06-04 06:24:10 +00:00
5524b4b563 Periodically replicate email packets and index packet entries onto other nodes 2010-06-04 06:15:17 +00:00
6488aeac56 Preliminary work for packet replication: Keep a record of (locally) deleted email packets, like it is already the case for index packet entries. Use one common format (the new packet type DeletionInfoPacket) for both packet types so Delete Authorization Keys don't unnecessarily take up space in Index Packets. 2010-05-29 10:05:11 +00:00
91e6daa303 Some minor stuff 2010-05-28 07:12:20 +00:00
f56c3ca1bf Read the Delete Authorization Key from an UnencryptedEmailPacket, not from a received Index Packet (because it's always zeroes) 2010-05-28 07:10:29 +00:00
8c5b402edf * Zero out Delete Authorizations before sending a response to an Index Packet retrieve request
* When an Index Packet Delete Request is received, compare the hash of the Delete Authorization against the local Delete Verification Hash, not the local Delete Authorization (which is always zeros)
2010-05-28 07:04:35 +00:00
50eb754d19 Add license.txt 2010-05-27 03:04:11 +00:00
ae41a90478 Use the AES implementation that comes with I2P instead of a JCE provider because the Sun JRE makes it a PITA to enable "unlimited strength encryption" in an end user friendly manner. Fortunately, only AES is affected by the crypto restrictions.
Another problem with the Sun JRE is that it makes it near impossible to ship only a subset of the 1.7 meg BouncyCastle .jar. The .jar has to be signed with a key certified by Sun, which is a lengthy process that involves giving Sun a DNA sample and sacrificing an animal in front of their headquarters. So the ECC code now uses the BouncyCastle API instead of JCE.
2010-05-27 02:11:58 +00:00
892a795c68 Remove an unused method 2010-05-25 20:50:07 +00:00
d2634bd130 Fix a potential lockup 2010-05-25 20:49:35 +00:00
6a482911b3 Minor stuff 2010-05-25 20:46:18 +00:00
35f1320ef1 Delete email packets and index packet entries that are more than 100 days old 2010-05-25 20:42:48 +00:00
6a9729f898 * Add BouncyCastle ECC library (a subset of bcprov-jdk16-145.jar that only contains the ECDH/ECDSA provider)
* Add BouncyCastle license
2010-05-25 20:14:30 +00:00
a064857ff5 Minor things 2010-05-22 01:48:13 +00:00
3fab712da7 Add null checks 2010-05-22 01:45:47 +00:00
d4542b8449 Add some missing license headers 2010-05-22 01:32:05 +00:00
366fa10ce8 Several changes to the packet format:
* Add time stamps in preparation for packet expiration
 * Change a few packet type codes
 * Support addt'l crypto algorithms, implement elliptic curve encryption
 * Fix two design flaws in the packet format:
    1) anybody can delete index packet entries of others
    2) malicious storage nodes can delete all copies of an email packet before
       the recipient receives the packet
2010-05-22 00:35:46 +00:00
050a6dbbbc 0.2.3 2010-05-10 07:12:57 +00:00
8bb3313f38 Make the INFO log level more useful 2010-05-09 23:24:03 +00:00
e7575018bc Synchronize on packetListeners when iterating 2010-05-09 23:22:21 +00:00
863b58913a Name the "sent" folder something different than the "sent" time column because they translate to different German words. 2010-05-09 09:57:46 +00:00
6d581f37a9 editIdentity.jsp:
* Remove garbage characters at the top of the page
  * Fix the cancel button
2010-05-09 07:58:39 +00:00
8c152f27d8 Delete index packet entries (email packet keys) from the DHT even if all requests for the email packet come back negative. This deals with the problem of index packet entries not going away when the email packet does not exist. 2010-05-09 07:25:44 +00:00
07fdac2312 Some comments 2010-05-09 05:54:25 +00:00
e467e6232a Fix constant s-bucket refreshes when there are very few peers. 2010-05-09 05:46:05 +00:00
6e2a14af39 Override toString() for logging 2010-05-07 07:28:19 +00:00
f23db925ad Move the logStatus() call so it doesn't report alpha-1 parallel requests when there are alpha. 2010-05-07 07:24:52 +00:00
93bf69d0aa Increase alpha to 10 2010-05-07 06:54:34 +00:00
cd74c6aac2 Fix a NPE 2010-05-07 06:35:53 +00:00
240a8c12eb Fix a bug that hides some text if the "ellipsis" CSS class is used.
The fix is to get rid of ellipsis, which was a hack anyway, but it
means no more fade effect when text is cut off.
2010-05-07 06:34:57 +00:00
4888f0dd54 Javascript fix 2010-05-06 18:06:15 +00:00
7c5aa40d26 Increase Kademlia lookup timeout to 5 minutes 2010-05-06 08:16:15 +00:00
d9fb751b7b 2010-05-06 08:14:02 +00:00
a23983f686 Eliminate duplicate message IDs, they cause msgmerge to fail 2010-05-06 08:11:29 +00:00
561b4244d6 Rename activeSince to firstSeen 2010-05-06 05:04:07 +00:00
331f72ef67 2010-05-05 22:49:54 +00:00
bea47a0c5d Remove some dead code 2010-05-05 13:28:12 +00:00
232e6f72e7 Remove the localDestination parameter from the KademliaDHT constructor, read localDestination from the I2PSendQueue instead. 2010-05-05 13:26:55 +00:00
1557694beb * Handle requests to the local destination directly, not through the network
* Fix/add some comments
* Rename CheckEmailTask.findEmailPacketKeys() to CheckEmailTask.getEmailPacketKeys(), rename the parameter to dhtPackets
* Add some debug output
2010-05-05 12:56:12 +00:00
1824e0ddcc 2010-05-05 12:42:55 +00:00
d6d0756a6b Use a bean property for displaying the local destination hash, no need for a tag. 2010-05-05 12:20:38 +00:00
c08eff08db Remove an unused method 2010-05-04 22:31:22 +00:00
7664dcbd5b 2010-05-04 17:30:00 +00:00
1e666ca7de Refresh folder list every 20 seconds when sending, otherwise every 2 minutes 2010-05-04 02:10:48 +00:00
56baffba77 BootstrapTask: unlock bootstrap node before adding to bucket 2010-05-03 21:35:49 +00:00
529b39efe9 Cache message IDs of emails that have been received, and ignore email packets whose message ID is in the cache. 2010-05-03 05:39:54 +00:00
a826750254 When new email arrives, don't do a page refresh, but go to the inbox URL 2010-05-02 03:19:49 +00:00
cff2752b8f Insert a random number into the request string so others can't see contacts or identities using the CSS history hack 2010-05-01 23:11:33 +00:00
3daa866b10 Strip local address book names before sending an email 2010-05-01 21:46:53 +00:00
e1e1a7a8e4 Don't throw a NPE in the call to log.error() 2010-05-01 21:23:03 +00:00
b76288e944 One more trash folder related commit in addition to rev. ec310a306f43f2b5e51f77640f415bca08e5971d 2010-05-01 21:19:20 +00:00
905f9aa974 * Implement the trash folder
* Move emails to trash instead of deleting them; do delete emails from the trash folder
2010-04-30 06:18:21 +00:00
57a2d2b891 * Implement the "Sent" folder
* After an email has been sent, move it to the "Sent" folder
2010-04-29 10:04:05 +00:00
7d060c495a Make the folders box an iframe, auto-refresh if outbox contains emails. 2010-04-29 09:58:24 +00:00
e2c83d58da Add a file I missed in rev. 82ebf22a7ebcec38ddaff619afe27a8e19dc9fcc 2010-04-28 06:33:25 +00:00
f5a73349fb Instead of a random DHT key, use a SHA-256 hash so receivers can verify the integrity of email packets. 2010-04-28 03:26:32 +00:00
f02148e159 Show any recipient, not a local recipient, in the "To" column in the outbox (usually there are no local recipients in an outgoing email). 2010-04-27 05:22:35 +00:00
e03a6640fb Make the "To:" column sortable 2010-04-27 05:04:26 +00:00
a4c37841ec When sorting a folder by address, sort by displayed address, not by header value. 2010-04-27 03:45:42 +00:00
b44f67011f Fix duplicate "identity created" message when creating a new identity 2010-04-26 05:39:06 +00:00
a5765a5920 Remove the "new" parameter which does nothing 2010-04-26 05:34:33 +00:00
ae7c0947cf Fix page title 2010-04-26 05:33:32 +00:00
af9e46c983 Focus the destination field if it is empty; if it is not, focus the name field 2010-04-26 05:01:01 +00:00
eb39dfdb90 Always put a blank recipient field at the end 2010-04-26 04:44:28 +00:00
6b5ad92ea6 Rename Field to EmailAttribute 2010-04-26 04:23:02 +00:00
d60f26561a Escape HTML in the textarea 2010-04-25 23:47:28 +00:00
f36d0f2298 Implement the "remove recipient" button 2010-04-25 23:03:06 +00:00
c796311c55 Replace some JSP code in newEmail.jsp with Java code (it was getting too complex for JSP) 2010-04-25 21:40:03 +00:00
4ee42e9a1f Show the "add to address book" button only for the last address 2010-04-25 05:44:27 +00:00
33ce63db4e * newEmail.jsp: Implement the "add recipient" button
* Rename the JSP function getRecipients to getSortedRecipientParams
* newEmail.jsp: Remove redundant filtering of recipient* parameters which is already done in getSortedRecipientParams()
* sendEmail.jsp: Keep ordering of recipients the same as in the UI
2010-04-25 04:36:47 +00:00
340d6cd83b Handle single quotes and double quotes in text fields 2010-04-24 07:30:56 +00:00
560f6e4946 2010-04-23 06:00:26 +00:00
6445dd5d4c Handle whitespace in email destinations 2010-04-23 04:23:22 +00:00
86fe700d9f When displaying an email, show full Email Destinations only on mouse over 2010-04-22 07:21:59 +00:00
d2d4031f2e Update outbox status after every sendToOne call 2010-04-21 06:29:20 +00:00
e598b81600 Handle CC and BCC addresses 2010-04-21 06:27:38 +00:00
7f9f55fbac Fix title of the outbox page; remove reference to non-existant param.path parameter 2010-04-21 06:23:00 +00:00
a707f2830b After deleting an email, go to the containing folder instead of the inbox. 2010-04-20 20:49:27 +00:00
0f95825828 Save outgoing emails to the outbox and send them in the background 2010-04-20 20:48:29 +00:00
c764008170 More detailed debug output 2010-04-19 02:11:31 +00:00
dc43492537 * If an email destination in an email is known, always show the name from the address book or the identity
* Don't show an add button if sender is a local identity
* Several minor things
2010-04-19 01:48:33 +00:00
e87a4efe2f Default to descending sort order for dates, ascending for all other fields 2010-04-15 05:49:17 +00:00
95cfab5e71 Remove an unused constant 2010-04-15 05:45:27 +00:00
ab1ad92278 * New Email page: Add a button which adds a recipient to the address book
* Address book: In select mode, show a "return" button instead of the "add" button if the address book is empty.
* Rename the HTTP request parameter "search" to "select"
* Fix some JSP compile warnings caused by invalid XML in i2pbote.tld
2010-04-15 03:21:48 +00:00
f2afa866f9 Some comments 2010-04-15 02:25:19 +00:00
de53a1fbc9 Add missing license headers 2010-04-15 02:13:19 +00:00
97f078721b Say whether the unit tests passed or failed 2010-04-11 08:27:52 +00:00
52f295396c Show mail folders sorted; clickable column headers for sorting 2010-04-11 08:23:57 +00:00
ade9804ae6 Remove unnecessary call to getProperty() 2010-04-04 08:04:57 +00:00
7fb9cb8290 * JspStrings.java is the new jsp2po.sh
* Extract strings from <ib:message> tag bodies
* Add a few more missing translations
* Don't translate "value" parameters in <button> tags
* Finish the text in noIdentities.jsp
2010-04-04 08:03:33 +00:00
3d262db251 Fix high CPU usage bug introduced in rev. 54d0f214f9894b433925bc2d0979c5ea6eb924b6,
reported at http://forum.i2p/viewtopic.php?p=23465#23465 (Thanks to the reporter!)
2010-04-03 08:20:43 +00:00
d093f81e46 * Folder.jsp: Add "Unknown Sender" and "Signature" columns
* showEmail.jsp: Show whether the signature is valid
2010-04-01 06:49:25 +00:00
1c2af589fd Oops, forgot to add Locales.java in rev. 9b93a31813555d2157e6a815e907bb3f6b5c31fe 2010-03-31 07:57:26 +00:00
daa289bed1 Add EmailTest.java 2010-03-31 07:54:34 +00:00
40ad4cd488 Fix a NPE 2010-03-31 07:51:43 +00:00
d9931f519d * Sign outgoing emails, verify signatures of incoming emails
* Don't make a copy of the email for removing BCC headers, work on the original
* Remove unused methods from i2p.bote.Util
2010-03-31 07:47:31 +00:00
78a5d59ef3 * Fix: i2pbote-update.xpi2p too big when building the plugin target twice in a row
* Add missing files to the src target
2010-03-29 23:58:23 +00:00
c4be1543ce A few minor things 2010-03-29 05:31:05 +00:00
2652d75346 Don't query locked peers 2010-03-29 05:30:18 +00:00
72621a20c9 * Add a UI option to include / not include the "sent" time when sending an email
* Format the "active since" column on network.jsp according to the locale
2010-03-29 05:28:20 +00:00
960f480d3a Remove extra line in the <textarea> 2010-03-28 06:18:08 +00:00
d8f7d8bfb2 * Show "sent" date/time in showEmail.jsp
* Format date/time according to locale
2010-03-28 04:10:45 +00:00
4b0fdf6932 * Alternate colors in folder list
* Replace tabs with spaces in folder.jsp
2010-03-27 21:13:55 +00:00
739e517c3f Do not translate the directory name in a folder link, only the display name 2010-03-27 20:52:45 +00:00
0af131b043 * Make language user-configurable
* Optionally leave text that is auto-added to an email, such as "Re:", untranslated
2010-03-27 04:21:54 +00:00
b780f79e30 * Move setLastLookupTime() calls from KademliaDHT to BucketManager
* More logging changes
2010-03-25 03:47:31 +00:00
6fcaf3761c Synchronize on pendingRequests in packetReceived 2010-03-25 03:17:55 +00:00
9bf0f45ad0 2010-03-23 19:41:03 +00:00
d23ac867a4 Add/change log output, add some comments 2010-03-23 19:34:50 +00:00
3195fd1cb3 2010-03-23 19:00:56 +00:00
76fd98c346 0.2.2 2010-03-22 07:17:20 +00:00
f3bdebead6 Spelling of the plugin display name 2010-03-22 07:16:32 +00:00
d735db129a Increase max. lock time for unresponsive peers 2010-03-22 04:16:31 +00:00
903c58d7ce Use a solid background for displaying emails 2010-03-21 17:38:18 +00:00
96d51bbc4d Fix: Bootstrap nodes are shown as active since 1970 2010-03-21 17:12:03 +00:00
35050ae5c9 Don't create a N_ file if an O_ file exists for the same message ID. 2010-03-21 16:21:31 +00:00
2fa58dc2c2 * Rename I2PBoteThread.awaitShutdown() to awaitShutdownRequest(), keep DHT.awaitShutdown()
* Write peers to file on shutdown
2010-03-21 08:00:21 +00:00
f307561705 Abort lookup on shutdown request 2010-03-21 07:41:09 +00:00
d313cd89e6 Use BufferedWriter.newline() instead of System.getProperty(line.separator) 2010-03-21 07:36:22 +00:00
13174f7164 Cleanup 2010-03-21 01:27:06 +00:00
668c7c4896 Implement IndexPacketTest 2010-03-21 01:26:17 +00:00
8724648d53 Don't exit until send queue is empty (or the thread is killed) 2010-03-19 23:07:49 +00:00
707aaf0bd0 Shut down ExecutorService when done so threads exit 2010-03-19 20:43:05 +00:00
bb055ce55c Adjust text field widths, now that the CSS doesn't make them all 100% wide 2010-03-19 20:04:54 +00:00
5bf930102c * Make auto mail checking configurable
* Configuration.java:
  - Wrap Properties instead of extending it
  - Replace tabs with spaces
2010-03-19 19:55:18 +00:00
554b0e251d Add some missing translations 2010-03-15 07:07:55 +00:00
9a84bb2ae1 Put a space after Re: 2010-03-15 06:38:37 +00:00
ce6bcecff9 Increase stack size to 256 kB for mail check threads 2010-03-15 06:30:41 +00:00
d6fd4e971e PacketQueue:
* Now based on an ArrayList instead of LinkedList
 * Any synchronization issues should be gone
2010-03-15 05:28:36 +00:00
f399f8d691 Rename REFRESH_TIMEOUT to BUCKET_REFRESH_INTERVAL 2010-03-14 21:04:44 +00:00
5acebd19fe Fix a ConcurrentModificationException 2010-03-14 20:57:26 +00:00
80db993ca7 Make saveToFile() parameterless and rename to save() 2010-03-14 20:56:10 +00:00
9d59cd074c Remove some unused stuff 2010-03-14 18:42:15 +00:00
e86ef43058 German translation 2010-03-14 18:40:31 +00:00
b928c41d22 * Multi-language support
* Delete PrintAppVersionTag, replace with a JSPHelper property
2010-03-14 17:41:35 +00:00
1cc96558d5 Second bootstrap node 2010-03-05 16:28:11 +00:00
7371f835de Fix a NPE 2010-03-05 16:18:46 +00:00
e9010555a1 Fix: refilling the s-bucket broke BucketManagerTest 2010-03-04 07:05:16 +00:00
ee2f9f7471 Fix a potential IndexOutOfBoundsException 2010-03-04 07:02:11 +00:00
8c1e166007 * Use locked + unlocked peers for refilling the s-bucket
* Fix: refillSiblings() generates duplicate peers
2010-03-04 07:00:27 +00:00
030ec907f4 * add missing "}"
* replace tabs with spaces
2010-03-04 06:22:41 +00:00
e9bd3ed60e 2010-03-03 18:06:04 +00:00
e156962b24 0.2.1 2010-03-03 18:05:03 +00:00
aa6b5489f7 2010-03-03 18:00:15 +00:00
1adec9c83b Shutdown:
* Fix: NPE when stopping plugin before the application has started connecting
  * Shut down all threads so the app exits without having to kill the JVM
2010-03-03 17:59:34 +00:00
e21db2b740 store(): Include local node if not enough peers found, or if local node is closer than one of the peers found 2010-03-01 08:05:01 +00:00
5ff0f41988 * Always query the closest unqueried peer, instead of picking one randomly
* Have a list of all (not just S) peers ready at the beginning of the lookup. This fixes the "No storages found" bug (which I think would have gone away in the next release due to the higher S value).
2010-03-01 08:02:56 +00:00
302db49850 2010-03-01 06:26:52 +00:00
b11459eeba Fix: An IndexPacketDeleteRequest for an already deleted entry causes a NPE 2010-03-01 06:04:37 +00:00
1ae332a85d Partial undo of rev. 30c74967ae81dff73f62ecca085cd72a85424ffe: Don't move unresponsive siblings to a k-bucket. I don't know what I was thinking, there is no reason to do that. 2010-03-01 03:21:32 +00:00
653a162643 Layout fix 2010-03-01 02:27:06 +00:00
cf3d58920a Re-bootstrap when there are no more active peers 2010-02-28 22:44:07 +00:00
1431272618 Run pack200 on plugin jars 2010-02-28 20:52:07 +00:00
3c0fb794d9 Code simplification 2010-02-28 06:34:35 +00:00
5135d07fa4 Ant plugin target: get the app version in a platform-independent way
Ant src target: get the app version from the source like the plugin target does
2010-02-28 02:42:12 +00:00
c1aa31bdfb 2010-02-28 02:35:24 +00:00
79b2197dc0 Option to compile I2P-Bote as an I2P plugin 2010-02-26 23:32:43 +00:00
ec7e057b6d * Fix: ClosestNodesLookupTask returned too early in some cases
* Periodical s-bucket refresh
* Exponential backoff for unresponsive peers
* Lots of minor stuff
2010-02-25 02:02:00 +00:00
d6a69e237e * when a sibling times out, move it to a k-bucket and refill the s-bucket
* don't use unresponsive peers for lookups, but keep them unless there is a replacement peer
* remove some unused or redundant code
2010-02-19 05:43:44 +00:00
cc48d56682 * Bucket refresh (periodically refresh a bucket if there hasn't been a DHT lookup for a key within the bucket's range)
* New method KBucket.toString() for logging purposes
* Fix: bucket prefix was calculated wrong
2010-02-17 04:10:07 +00:00
831d263449 2010-02-16 04:47:25 +00:00
7ae9575ed2 Use fn:escapeXml for displaying email data 2010-02-16 04:46:17 +00:00
215a9ab160 Fix junit Ant task 2010-02-16 04:02:29 +00:00
5fac243e70 Ant can use web.xml directly, no need for web-template.xml 2010-02-16 03:51:54 +00:00
6b3c11322e Some cleaning up and other minor stuff 2010-02-15 06:39:58 +00:00
422eacd53d 2010-02-15 06:38:18 +00:00
947ad0014c Set character encoding in requests to UTF-8 unless the browser sets an encoding 2010-02-15 06:37:46 +00:00
b91f08fa01 Implement the Address Book feature 2010-02-15 06:31:38 +00:00
2227955eee Implement the "default identity" feature. 2010-02-12 05:30:17 +00:00
fddefc9275 Fix: Trying to edit an existing identity creates a new one 2010-02-11 05:06:23 +00:00
352df69d51 Fix NPE when navigating to network.jsp right after the 3-minute initial wait 2010-02-11 03:03:41 +00:00
82917aaaab When replying, don't add a Re: if there is one already 2010-02-10 23:13:16 +00:00
75fbcbaecf 2010-02-10 23:11:51 +00:00
45c0fff636 Display Kademlia-specific information on network.jsp while still keeping the DHT interface implementation-agnostic 2010-02-10 21:06:59 +00:00
cc846c3abe * Rename KademliaException to DhtException; in DHT, throw DhtException instead of Exception
* Drop Comparable from I2PSendQueue.ScheduledPacket
* Remove an unneccessary "throws"
* Fix some minor issues found by FindBugs:
  - Don't ignore return values of File.mkdir, File.renameTo, etc.
  - Close open files even if an exception happens
  - Use Integer.valueOf instead of the Integer constructor
  - Make some inner classes static
  - Remove an unused method from UniqueId
  - Make two fields volatile
2010-02-10 04:59:44 +00:00
a131fa6600 90k chars can't fit into 3 email packets anymore due to email encoding, so lower it to 80k chars. 2010-02-09 19:36:17 +00:00
40bd121a77 * Fix: test failed because peers[199] was the same destination as localDestination
* Comments
2010-02-09 19:13:39 +00:00
e4d317c76d Change K and S to real world values. B is still 1 for now. 2010-02-09 19:10:04 +00:00
22a0ef14b6 Return K peers in a Kademlia lookup, not S 2010-02-09 19:05:18 +00:00
f26c8116e8 Remove an incorrect log message 2010-02-09 19:01:07 +00:00
0a03d90696 New unit test BucketManagerTest 2010-02-09 04:39:36 +00:00
3d7788632e * Several Kademlia bugs fixed (bucket splitting was severely broken)
* Use all positive numbers for representing a Hash as a BigInteger
* Some refactoring of the Kademlia code, mainly in order to keep buckets sorted by last reception time without having to explicitly store a "last seen" time for each peer.
2010-02-09 04:38:55 +00:00
6df3e8b845 remove unused variable 2010-02-09 04:29:17 +00:00
39fed9ec83 remove unused import 2010-02-09 04:28:09 +00:00
e2cc37c3e3 Catch all exceptions in messageAvailable() and log them before they get caught in I2PSessionImpl which doesn\'t print a stack trace 2010-02-09 04:21:12 +00:00
b17bcbaa07 More detailed log output 2010-02-09 04:17:35 +00:00
8bdb64c39b * Remove Email.getUniqueID() and Email.setUniqueID(), only use getMessageID()/setMessageID()
* call super method in Email.updateHeaders()
* Explicitly encode subject line from UTF-8
2010-02-06 06:38:31 +00:00
ff880b25ef * Use UTF-8 in HTTP requests
* Instead of an HTTP param, use an EL variable for passing the page title to header.jsp so non-US characters don't get messed up
* Fix title on network.jsp
2010-02-06 06:27:22 +00:00
c341d47b27 2010-02-05 06:21:28 +00:00
8212edca98 * Use JavaMail
* Get rid of the FolderElement interface
2010-02-05 06:20:04 +00:00
bdabe0e19a Add some missing unit tests to AllTests.java 2010-02-04 06:18:10 +00:00
37cbc5cfd9 * Get rid of MessageId, use UniqueId instead
* Don't use the "Message-Id" header at all. The message Id is already in the
  file name (for .mail files) or in the MSID field (for packetized emails).
2010-02-04 06:16:29 +00:00
015af37a59 * Pass the whole Ant classpath to Ant tasks because JSPC seems to need a java compiler for tag files
* Partial fix for the junit task (tests still fail, but they compile now)
* Print SHA256 sum for the war file
* Delete src.zip in the "clean" task
2010-02-03 07:36:53 +00:00
38ad423353 Rename test/.../kademlia package to test/.../dht for consistency 2010-02-02 03:48:37 +00:00
b64614ea45 Version 0.2 2010-02-01 16:09:38 +00:00
c7277b944a Remove the cancel button, disable the save button 2010-02-01 16:05:04 +00:00
27e8723753 Put a tag back in that got accidentally deleted in rev. d6d2a84b2ce55918029c8362a8526ed21e254fe6 2010-02-01 07:01:56 +00:00
bdce1fc8a3 2010-02-01 06:17:36 +00:00
cf6a89a731 Prevent network.jsp from throwing an error when the app has not started connecting yet 2010-02-01 03:44:26 +00:00
e929c8fb18 Show "to" addresses in the inbox and when displaying an email 2010-02-01 03:03:07 +00:00
4e051a8111 Remove unused file 2010-02-01 02:56:51 +00:00
e5385f4017 Reverse sort order, was oldest to newest 2010-02-01 02:56:12 +00:00
146bb6f876 Auto-check for new mail periodically 2010-02-01 01:31:21 +00:00
3698843c0f Fix the delete button 2010-02-01 01:23:07 +00:00
24fb21ea2c * N_ or O_ prefix in the filename indicates if an email is new (read) or old (unread)
* Show new emails in bold, read ones in normal font
* Set an email to "old" when the user displays it
2010-01-31 21:37:41 +00:00
44d09a1b37 2010-01-31 21:37:01 +00:00
64fe831e0c * Move some code out of getElements() into the new method getFilenames()
* Add method getNumElements()
2010-01-31 01:59:12 +00:00
0bc9825a46 2010-01-31 01:45:57 +00:00
4c7f3bd029 remove redundant interface declaration 2010-01-31 01:36:54 +00:00
be58442eed Fix: wrong field name in the javascript that focuses the "public name" field on page load 2010-01-31 01:14:01 +00:00
aafcce644e IncomingPacketHandler:
* Ignore response packets whose id doesn't match the request
 * Rename addPeers to updatePeers
2010-01-30 19:44:07 +00:00
24c76dd897 * Handle invalid packets better
* Ban peers that use a protocol version other than 2
2010-01-30 10:48:29 +00:00
38171179df Remove some unnecessary code 2010-01-30 10:38:33 +00:00
808b895951 * Print local dest hash on the network status page
* List active peers and banned peers separately on the network status page
2010-01-30 10:24:49 +00:00
540b0990eb 2010-01-30 09:49:24 +00:00
f5e3b128f3 Remove unused class 2010-01-30 09:39:23 +00:00
0d12ee1240 2010-01-29 04:55:20 +00:00
d26032595e * AbstractBucket/KBucket: Replace ConcurrentSkipListSet with ConcurrentHashSet for the peer list and the replacement cache
* drop a peer after 3 consecutive non-responses
* several minor changes
2010-01-29 04:54:47 +00:00
80c66d7c23 Oops, two more files should have gone into revision 6b0ba3c712564df1061979948a109779470024f8 2010-01-27 20:13:15 +00:00
5785c5836b . 2010-01-27 07:14:00 +00:00
1c52df1713 Fix the stale counter 2010-01-27 07:13:33 +00:00
591c3bff98 . 2010-01-27 06:32:00 +00:00
28f09ac7d4 Implement reply button 2010-01-27 04:20:59 +00:00
6a059521f0 Remove debug message 2010-01-27 04:16:20 +00:00
7164b7f428 Fix: Public Name and Description headings were in the wrong order 2010-01-25 01:09:38 +00:00
471e8f4b25 Fix: left angle bracket disappears when inserting line break in the sender field 2010-01-25 01:08:09 +00:00
84eb1ded73 Make textarea one row bigger because some email destinations have more line breaks than others 2010-01-25 01:04:44 +00:00
db3429d0e0 * Include sender's Public Name in the "sender" header field
* Use a proportional font for the "new email" text box
2010-01-25 00:17:39 +00:00
ed4439ef4d Don't try to read peers.txt if it does not exist. 2010-01-24 18:24:06 +00:00
63b8bf29e8 Preserve line breaks in emails when sending and convert them to HTML for displaying emails. 2010-01-24 06:36:34 +00:00
7a09d652d1 Fix incorrect logger names 2010-01-24 02:09:04 +00:00
2ebb389900 Use POST for the "New Email" form 2010-01-23 06:07:35 +00:00
2e50916897 Add license notices 2010-01-23 05:11:16 +00:00
b40e327508 Fix unnecessary timeouts when doing DHT retrievals 2010-01-23 04:46:41 +00:00
b9534b2a2a PacketQueue: Insert packets with an earliestSendTime>0 in the right place 2010-01-23 01:05:25 +00:00
c022088190 Always send a response to retrieve requests, even if nothing found. 2010-01-23 00:52:00 +00:00
f5db9e18b5 Don't report a peer timeout if the packet hasn't been sent to the peer yet 2010-01-22 19:04:24 +00:00
87cc21dcf1 * Show peer info on the network page
* Remove some dead code
* Major refactoring of the Kademlia code:
 - Interface DhtPeer replaces the PeerInfo class
 - KademliaPeer extends Destination
 - Get rid of BanList, store ban info in KademliaPeer instead
 - Use separate classes for k-buckets and s-buckets, both extend AbstractBucket
2010-01-22 01:59:25 +00:00
d0af45125e Show peer info on network.jsp 2010-01-19 01:59:21 +00:00
39b66e85ce Put peers on the ban list if they use a wrong protocol version (has no effect yet) 2010-01-18 06:54:40 +00:00
b4072d4813 * Implement deletion of email packets from the DHT and deletion of index packet entries
* Version 2 of the network protocol
2010-01-18 06:51:27 +00:00
525cd894f5 Log dest hash, not dest key in packetReceived 2010-01-08 21:00:01 +00:00
b8dfe7f96d * Allow the X-Priority header field
* Set the "From" field when setting the "Sender" field
2010-01-08 20:43:47 +00:00
289c78108d . 2010-01-08 20:41:50 +00:00
fb9fb7844e Throw an exception if no peers were found for storing a packet 2009-12-20 04:28:19 +00:00
10e32012f9 . 2009-12-20 04:25:48 +00:00
1218c1545c Ver. 0.1.5 2009-12-20 00:08:27 +00:00
a3be21648b 0.1.5 2009-12-20 00:00:03 +00:00
7694ea3e58 Fix: redirect to noIdentities.jsp was broken 2009-12-19 23:56:10 +00:00
c6a12fc336 support deletion of emails 2009-12-19 23:24:32 +00:00
f50b0a9da1 Fix: DHT packets only got stored on one node because the StoreRequests all had the same packet Id. 2009-12-19 23:23:56 +00:00
e9554c7924 Doing a findOne for index packets didn't seem such a good idea after all because
it might return an incomplete version of the index packet when there is a more
complete version stored on another peer. So I'm reverting back to findAll.
2009-12-19 23:22:20 +00:00
424e0dfb35 support deletion of emails 2009-12-19 23:19:24 +00:00
fec9052413 new 2009-12-19 23:15:57 +00:00
cc85ef3d0b . 2009-12-19 20:41:08 +00:00
35fbaa377c Add disabled button style 2009-12-19 19:27:02 +00:00
ee941ea7a1 Move some app status related code to getStatus.jsp so it can be shared with other JSPs 2009-12-19 19:26:24 +00:00
2005a2db4d Disable the Network Status link until the I2P session is ready 2009-12-19 19:21:51 +00:00
31cd0b9bd1 Disable two buttons and one link until I2P session is ready 2009-12-19 19:20:36 +00:00
e8fc716b21 new file 2009-12-19 17:26:36 +00:00
bb33c8dcd9 remove all unimplemented HTML links 2009-12-19 08:26:51 +00:00
ff88ec13ba don't say "connected" until done bootstrapping 2009-12-19 08:21:55 +00:00
62f1850144 Remove some dead code;
in the find method, return the local result immediately if only one result was asked for
2009-12-19 07:34:38 +00:00
0e4a732c76 . 2009-12-19 07:30:39 +00:00
7d4b9d051f Just use the first index packet received, don't wait for all peers to respond 2009-12-19 07:30:21 +00:00
b3d883f7fa fix: distance can't be negative; add JavaDoc 2009-12-19 06:07:13 +00:00
7c51fd6848 Set max bucket size to k for k-buckets, and s for the s-bucket 2009-12-19 04:24:30 +00:00
02e28eb59f . 2009-12-19 03:50:39 +00:00
737237c836 synchronize the list of responses received; more log output; log dest hash, not the full dest key; use the correct key type when removing a mapping from pendingRequests 2009-12-19 03:49:56 +00:00
3d343e7949 Fix: toByteArray wrote all 387 bytes of an I2P destination instead of just the two public keys 2009-12-19 03:30:13 +00:00
278f612aa4 rename FindCloseNodesPacketTest to FindClosePeersPacketTest; add PeerListTest 2009-12-19 03:27:12 +00:00
b858cccb59 . 2009-12-19 03:24:42 +00:00
6d535e6699 New file PeerListTest.java 2009-12-19 03:24:06 +00:00
af193ec09b rename FindCloseNodesPacketTest to FindClosePeersPacketTest 2009-12-19 03:23:19 +00:00
e5d84be0db Implement equals and hashCode 2009-12-18 18:06:55 +00:00
e330c4bf22 log destination hash, not the complete dest key 2009-12-18 18:04:57 +00:00
b5191bc663 add the src target which makes a src.zip file 2009-12-17 18:38:54 +00:00
9dc72d2c70 . 2009-12-17 18:13:58 +00:00
19758eab8e add createRandomHash() 2009-12-17 18:13:20 +00:00
fb2726b0b0 Move all network and threading code out of BucketManager into KademliaDHT;
don't add self to buckets;
use a peer for bootstrapping if it initiated communication;
fix the refresh(KBucket) method which didn't do a closest nodes lookup;
other, minor changes
2009-12-17 18:12:33 +00:00
11438e3649 Move all network and threading code out of BucketManager into KademliaDHT; don't add self to buckets; make BucketManager iterable; other, minor changes 2009-12-17 17:56:50 +00:00
b03534c339 Only log the dest hash, not the multi-line output of Destination.toString(); get rid of an unnecessary if 2009-12-17 17:44:44 +00:00
f6ac9b910a Check for expired packets once a day, not every time when checking for new packets 2009-12-17 17:33:27 +00:00
ed765834fe 0.1.4 2009-12-13 07:41:58 +00:00
459075ca7f Release 0.1.4; Do the 3-minute wait in the background and support skipping the wait time. 2009-12-13 07:41:28 +00:00
47da9495fe New tag "connect"; new JSP function getNetworkStatus 2009-12-13 07:28:06 +00:00
b51733ff2f New JSP function getNetworkStatus() 2009-12-13 07:26:50 +00:00
df463fd6d0 New method isConnected() 2009-12-13 07:25:51 +00:00
d50d9a5318 Modify statusbox class for revised statusFrame.jsp 2009-12-13 07:24:11 +00:00
3b7b748e71 Fix jstllib path; don't add JSPs to war (thanks zzz) 2009-12-13 07:20:05 +00:00
d77b61e939 Link to network.jsp 2009-12-13 07:17:35 +00:00
fbba5d461b Add JSTL for displaying local I2P destination, commented out for now. 2009-12-13 07:17:03 +00:00
0fc434b6d7 Remove unused welcome-file entries 2009-12-13 07:14:46 +00:00
57be687166 New file 2009-12-13 07:12:07 +00:00
9880a54337 0.1.3 2009-12-12 07:45:52 +00:00
08629cb759 Remove unused code; other minor changes 2009-12-12 07:23:58 +00:00
4fe2c5c08d Fix: high cpu usage when sending or receiving; use sendQueue.send instead of sendQueue.sendAndWait so requests can be sent in parallel. 2009-12-12 07:08:07 +00:00
f9ee3ae653 Set DHT key in the merge constructor (fixes a NPE) 2009-12-12 07:02:50 +00:00
ab26312aa0 2009-12-12 07:00:30 +00:00
a1687cb50d bump to ver. 0.1.3; wait 3 minutes before connecting after startup; set tunnel names to "I2P-Bote"; minor changes like renaming of variables 2009-12-12 06:59:55 +00:00
76d6008daa Fix: inboxFlag was never set, which caused the "Check Mail" button not to show new emails. See also buttonFrame.jsp, rev. 1c93f3214bbc0b5ee1ef772caccf576644fe3cbd vs ed79eab91430b185d5b710b0fe8ef3afc8567cb0 2009-12-12 06:55:00 +00:00
05e93e53dd Fix: "Check Mail" button didn't show new emails, user had to reload inbox 2009-12-12 06:49:21 +00:00
1509a65bee checkMail.jsp no longer needed since buttonFrame.jsp does all the mail checking 2009-12-12 06:47:38 +00:00
ab6a498fb7 add failonerror="true" to javac tasks; change all /opt/... paths to ../i2p/... 2009-12-12 06:42:00 +00:00
bf50d5049d 2009-12-07 06:13:58 +00:00
394 changed files with 73793 additions and 5893 deletions

22
.tx/config Normal file
View File

@ -0,0 +1,22 @@
[I2P.plugin_i2pbote]
source_file = locale/messages_en.po
source_lang = en
trans.ar = locale/messages_ar.po
trans.cs = locale/messages_cs.po
trans.de = locale/messages_de.po
trans.es = locale/messages_es.po
trans.fr = locale/messages_fr.po
trans.hu = locale/messages_hu.po
trans.it = locale/messages_it.po
trans.nl = locale/messages_nl.po
trans.nb = locale/messages_nb.po
trans.pl = locale/messages_pl.po
trans.pt = locale/messages_pt.po
trans.ru = locale/messages_ru.po
trans.sv_SE = locale/messages_sv.po
trans.uk_UA = locale/messages_uk.po
trans.vi = locale/messages_vi.po
trans.zh_CN = locale/messages_zh.po
[main]
host = http://www.transifex.net

28
README.md Normal file
View File

@ -0,0 +1,28 @@
# I2P-Bote
I2P-Bote is a plugin for I2P that allows users to send and receive emails while preserving privacy. It does not need a mail server because emails are stored in a distributed hash table. They are automatically encrypted and digitally signed, which ensures no one but the intended recipient can read the email, and third parties cannot forge them.
**Features:**
* Themeable webmail interface
* User interface translated in many languages
* One-click creation of email accounts (called email identities)
* Emails can be sent under a sender identity, or anonymously
* ElGamal, Elliptic Curve, and NTRU Encryption
* Encryption and signing is transparent, without the need to know about PGP
* Delivery confirmation
* Basic support for short recipient names
* IMAP / SMTP
**Planned Features:**
* Custom folders
* Sending and receiving via relays, similar to Mixmaster
* Lots of small improvements
**More information**
The links below only work within I2P, i.e., make sure you are running I2P and your browser is using the proxy at localhost:4444.
* http://i2pbote.i2p I2P-Bote homepage
* http://forum.i2p/viewforum.php?f=35 I2P-Bote forum

547
WebContent/FAQ.html Normal file
View File

@ -0,0 +1,547 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Frequently Asked Questions</title>
<meta http-equiv="Content-Language" content="English" />
<meta name="Robots" content="index,follow" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" type="text/css" href="css/style.css" media="screen" />
</head>
<body>
<div id="wrap">
<div id="top">
<div class="rights"> </div>
<div id="search">
</div>
<div class="lefts">
<h1>I2P-Bote</h1>
<h2>Secure Distributed Email</h2>
</div>
</div>
<div id="topmenu">
<div class="rights"></div>
<div class="lefts"><ul>
<li><a href="index.html" title="Home">HOME</a></li>
<li><a href="download.html" title="Download I2P-Bote">DOWNLOAD</a></li>
<li><a href="screenshots.html" title="Screenshots">SCREENSHOTS</a></li>
<li><a href="userguide.html" title="User Guide">USER GUIDE</a></li>
<li><a href="faq.html" title="Frequently Asked Questions">FAQ</a></li>
<li><a href="http://forum.i2p/viewforum.php?f=35" title="Forum">FORUM</a></li>
<li><a href="contact.html" title="Contact">CONTACT</a></li>
</ul></div>
</div>
<div style="text-align: justify;" id="main">
<div id="leftside">
<p>
<h2>Frequently Asked Questions</h2>
</p>
<p>
<div class="date"></div>
</p><p>
<strong>What is I2P-Bote?</strong><br/>
A peer-to-peer email program designed to protect your privacy.<br/>
I2P-Bote is an end-to-end encrypted, network-internal, fully decentralized
(serverless) e-mail system. It supports different identities and does
not expose e-mail headers. Currently, it is still alpha software.
It can be accessed via web console, and it has IMAP and SMTP support,
so bote-mails can be read and written by regular email clients.
It is planned to guarantee additional anonymity by providing a
high-latency transport option. All bote-mails are automatically
end-to-end encrypted, so that there's no need to set up e-mail
encryption (though the option does exist), and bote-mails will be
authenticated automatically. As
it is decentralized, there is no e-mail server that could link
different e-mail identities as communicating with each other
(profiling): Even the nodes relaying the mails will not know the
sender and apart from sender and receiver, only the end of the
high-latency mail tunnel and the storing nodes will know to whom
(anonymous identity) the mail is destined. The original sender can
have gone offline, long before the mail becomes available on the
other side. This adds on the degree of anonymity that can be reached
with I2P-Bote. For those who do not want high delays: All these
settings are be user-adjustable, so each user decides on how much
anonymity he wants.
</p>
<div class="date"></div>
<p>
<strong>Why is it named I2P-Bote?</strong><br/>
Bote is the German word for messenger.
</p>
<div class="date"></div>
<p>
<strong>Why I2P-Bote?</strong><br/>
Because it's cool.
And because I2P was lacking a decentralized e-mail service, and seeing
the creation of such as an opportunity to improve on neglected
anonymity aspects, it was decided to add an optional high-latency
transport. You can use a normal e-mail account and end-to-end encrypt your mails, but
they are still not anonymous. You can use anonymous server-bound e-mails, yet they are not automatically
end-to-end encrypted.<br>
Or you can use I2P-Bote in which your mails
are anonymous and <i>automatically</i> end-to-end-encrypted.<br>In contrast
to standard e-mail systems there is no need to setup an additional
key management application. Everything you need is already there. <br/>But
despite it being simple and easy to use, it still offers military
grade encryption and options for extremely strong anonymity.
</p>
<div class="date"></div>
<p>
<strong>What happens with an email after I click "Send"?</strong><br/>
It is encrypted and stored on other I2P-Bote participants' computers. From there, it is delivered to the recipient
when they check their email.
</p>
<div class="date"></div>
<p>
<strong>Wait a minute, all email I send is saved on some random person's hard drive? That sounds like a really dumb
idea!</strong><br/>
All they see is garbage data because it is encrypted with "military-grade" encryption. Only you and the recipient
know what is in the email. Additionally, if you send the email with relays enabled, it is not even possible to tell
who sent it.<br/>
Between this and using an email account with a
<a href="http://www.theregister.co.uk/2009/12/07/schmidt_on_privacy/">company that doesn't respect your privacy</a>,
over an internet line that <a href="http://www.eff.org/issues/nsa-spying">is being spied on by shady agencies</a>,
which would you say is more trustworthy?
</p>
<div class="date"></div>
<p>
<strong>How does it work exactly?</strong><br/>
&#8211; see the section &#8220;Concept&#8221; of the Manual &#8211;<br/>In short:
I2P-Bote nodes form a p2p-network, relaying mail packets for one another and storing them into a DHT.
</p>
<div class="date"></div>
<p>
<strong>Why would I use it? I have nothing to hide &hellip;</strong><br/>
Because you wouldn't go out to the street naked either, would you?<br/>Well, maybe you would. But the point is,
sometimes you want private e-mail communication to be secret and untraceable and not let the whole world know when
you say what to whom.<br/>
And sometimes you simply want to communicate fully anonymously with others.<br/>Therefor I2P-Bote is the ideal tool,
giving you a hell lot of protection while preserving a great deal of flexibility.<br/>
It aims at providing professional military grade security and n00b-proof usability:<br/>
You can have really paranoid settings, where it takes a mail an eternity to arrive; or have faster communication and
still enjoy very high anonymity.<br/>
You decide &#8211; easily with a click of your mouse.</p>
<div class="date"></div>
<p>
<strong>What about <a href="http://www.pgp.com/">PGP</a> and <a href="http://gnupg.org/">GPG</a>?</strong><br/>
PGP and GPG let you encrypt email and send it through your existing email account. They offer strong encryption, but
they only encrypt the email text, not the headers, which means the subject line, your computer name, and other
information is not secure.<br/>
Another privacy issue is that PGP/GPG cannot prevent anybody from finding out who is talking to whom.<br/>
I2P-Bote, in contrast, encrypts everything but the recipient's Email Destination. (In fact even the recipient's
destination is only visible to nodes who do not know who the sender of the mail was.) It also has the ability to
send an email through several relays (similar to <a href="http://mixmaster.sourceforge.net/">Mixmaster</a>), so
nobody can find out who is sending email to whom.
<br/>
</p>
<div class="date"></div>
<p>
<strong>Can I still use GPG/PGP with I2P-Bote?</strong><br/>
Of course. Either have GPG encrypt your e-mail's text before pasting it into the I2P-Bote mail composition field, or
use a mail app with GPG support.
</p>
<div class="date"></div>
<p>
<strong>How does it compare to Susimail?</strong><br/>
I2P-Bote is better because it has a higher version number. Just kidding.<br/>
I2P-Bote offers more privacy, but Susimail has some features I2P-Bote doesn't have yet (see below), and Susimail is
more bandwidth-efficient because it doesn't store emails redundantly.
</p>
<div class="date"></div>
<p>
<strong>Why is I2P-Bote better?</strong><br/>
<i>We</i> think it's better for <i>us</i> (and maybe for you, too; decide yourself!), than &#8230;
<ul><li><p style="line-height: 150%;"><font face="Arial, sans-serif">mixminion as it is easy to use and as n00b-proof as we
could get it.</font></p>
</li><li><p style="line-height: 150%;"><font face="Arial, sans-serif">anonymous e-mail services not based on
destination key routing: as those do not deliver built-in end-to-end encryption.</font></p>
</li><li><p style="line-height: 150%;"><font face="Arial, sans-serif">centralized services, as the server could go
down (due to attacks, legal problems, lack of funding or interest, &#8230;) and the server admin has too many means
to do profiling.</font></p>
</li></ul></p>
<div class="date"></div>
<p>
<strong>How is my identity kept safe when I exchange mail with someone?</strong><br/>
Never is your IP address or even your I2P-destination included in any e-mail you send.<br/>
The high-latency transport counters timing attacks.<br/>
End-to-end encryption, per-hop encryption, relaying packets for other nodes, one single packet size* (padding), a
constant rate of sending (test and dummy messages)*, and a rather balanced incoming/outgoing ratio* counter traffic
analysis attacks, and in combination with per-hop delays, I2P-Bote offers good means against intersection
attacks.<br/>
The open source nature of I2P-Bote guarantees that you yourself can see the implementation and check it for bugs.
<br/>*[<font color="#ff0000">not yet implemented</font>]</p>
<div class="date"></div>
<p>
<strong>How do I use it?</strong><br/>
Read the manual or see the other questions and answers here!<br>
If you still have unanswered questions, ask on the forum:
<a href="http://forum.i2p/viewforum.php?f=35">http://forum.i2p/viewforum.php?f=35</a>
</p>
<div class="date"></div>
<p>
<strong>Can I use an email program like Thunderbird?</strong><br/>
Yes, you can use the e-mail client of your choice, as long as it supports IMAP and SMTP.
</p>
<div class="date"></div>
<p>
<strong>Can I send attachments, and what limits are there?</strong><br/>
Yes, attachments are supported as of release 0.2.5.<br/>The overall size of attached files should be kept small,
preferably below 500kB.</p>
<div class="date"></div>
<p>
<strong>How do I create an email account?</strong><br/>
I2P-Bote calls them Email Identities. You can create one in the I2P-Bote web interface under the "Identities" link.
The reason why it's not called an account is that there is no provider like GMail or GMX. You alone hold the
(cryptographic) keys to the Email Identity.<br/>
When you create an Email Identity, I2P-Bote generates a string of numbers and letters called an Email Destination.
This is the address you can be reached at.<br/>
Example: <tt><b>wsq-8u5bTWbaOsrS0JuXRKL-RsbTkckV4W7u2mIu0Yrlfetixq1F~03CArnvbd6tDWwjPHYEuoKyWqwxplSdix</b></tt>
</p>
<div class="date"></div>
<p>
<strong>What's an Email Destination? What about email addresses?</strong><br/>
Email destinations (aka bote dests) are between 86 and 512 characters long, depending on the type of encryption.
Support for easy-to-remember, user-chosen addresses is planned for the near future.<br/>
The e-mail identities consist of public and private keys, as well as a name the user chooses for it. The public part
is your e-mail destination, your pseudonymous identity. And one real user can have more than one of those
identities. They serve for addressing mails to certain users &#8211;therefore it is referred to as a
&#8220;destination&#8221 or short &#8220;dest&#8221; &#8211; as well as for encrypting the mails for them.
Hence, your e-mail destination is the key others use in order to encrypt mails which they send to you, and in
order to verify the authenticity and integrity of mails they receive from you.<br/>
It is save to give your e-mail destination to anybody you want to get e-mails from.<br/>
It is important to distinguish between the mail dest and the router id! Your I2P-Bote mail identity is not related
to your I2P-Bote router/node id, which is used for I2P-Bote nodes to contact each other and this way for the Bote
network.<br>
If you have problems with your I2P-Bote app &#8211; in the highly unlikely case it should be necessary &#8211; you
can tell your I2P-Bote router id in irc2p, I2P's IRC channels, or the forum or manually add other peer's id's in
order to connect, though until now this has never been necessary. <br>It is <b>not linked to your ip</b>.
Nonetheless, do not relate your I2P-Bote router id with your I2P-Bote mail dests since this might destroy the
additional anonymity I2P-Bote itself generates!
</p>
<div class="date"></div>
<p>
<strong>Why are the e-mail addresses so long?</strong><br/>
In I2P-Bote every mail is (automatically) encrypted. In order not to require you to exchange an e-mail address
<b>and</b> a long key, we simply made that key the address. This comes with two additional benefits: You won't have
to worry if an e-mail address is already taken or not (at least not if you do not send or receive e-mails to or from
the internet) and you don't need a key management app apart, for taking care of your keys.<br>
It is safe to give away this key, as it is only the public key which everybody may know about without compromising
your e-mails' secrecy.<br/>
Using the ECC encryption as option will yield shorter e-mail destination keys.
</p>
<div class="date"></div>
<p>
<strong>But I cannot remember those long destinations &#8230;</strong><br/>
That's what the integrated addressbook is there. Once you have become more acquainted qith I2P-Bote, you will
appreciate the built-in encrpytion and authentication, which can only be achieved using cryptographic keys.
<br/>Again, the alternatove would be to have short and easy addresses <b>plus</b> a long key for encryption and
authentication, <b>and</b> to rely on some authority to map the e-mail addresses to some anonymous recipient.
</p>
<div class="date"></div>
<p>
<strong>What's the point of using multiple mail identities?</strong><br/>
I2P-Bote is not an instant messenger, so you can have several identities without having to keep many tunnels open.
Only for fetching requests you'd use up more resources but at the same time provide more cover for others.<br/>
Now, imagine you communicate with your friends unobservedly (see: data retention laws) via I2P-Bote, and want to
quickly send out a mail that you'll be meeting each other in a different location tonight.
Then, you need no super-anonymity and can renounce mail routes and delays. Your friends, on the other hand, would
want to have a shorter check interval, so they will receive the mail in time. Yet you still want super high
anonymity for some of your other communications &#8231; that's where a different mail identity with mail routes,
delays and long check intervals comes in handy.
</p>
<div class="date"></div>
<p>
<strong>Which encryption type is best?</strong><br/>
256-bit <a href="http://en.wikipedia.org/wiki/Elliptic_curve_cryptography">ECC</a> produces short and handy Email
Destinations, and it is considered stronger than 2048-bit ElGamal.<br/>
521-bit <a href="http://en.wikipedia.org/wiki/Elliptic_curve_cryptography">ECC</a> is stronger than 256-bit ECC, but
it makes Email Destinations longer.<br/>
2048-bit <a href="http://en.wikipedia.org/wiki/ElGamal">ElGamal</a> produces even longer Email Destinations, and it
is the cryptographically weakest of the three options. However, ElGamal is better researched than ECC, which makes
it less likely that there is an unknown weakness in ElGamal than in ECC.
<br>
</p>
<div class="date"></div>
<p>
<strong>What algorithms are used for symmetric encryption, and for hashing?</strong><br/>
<a href="http://en.wikipedia.org/wiki/Advanced_Encryption_Standard">AES-256</a> in
<a href="http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher-block_chaining_.28CBC.29">CBC</a> mode
and <a href="http://en.wikipedia.org/wiki/SHA-2">SHA-256</a>.
</p>
<div class="date"></div>
<p>
<strong>Are there any anti-spam measures?</strong><br/>
I2P-Bote does no active spam filtering, but the fact that mass emails have to be sent individually should discourage
spammers. Another line of defense is <a href="http://www.hashcash.org/">HashCash</a> which is supported at the
protocol level and may be implemented in a future version if spam becomes a problem.
</p>
<div class="date"></div>
<p>
<strong>How about HTML or styled text?</strong><br/>
The webinterface does not render html.
</p>
<div class="date"></div>
<p>
<strong>How long are emails kept around?</strong><br/>
Emails are available for 100 days after they have been sent. Emails that have not been downloaded by then are
deleted.<br/>
Emails you have received stay on your local machine until you delete them.
</p>
<div class="date"></div>
<p>
<strong>When do Email Identities expire?</strong><br/>
Never.
</p>
<div class="date"></div>
<p>
<strong>Can I send email to, and receive email from normal internet email servers?</strong><br/>
No, but this is being worked on.
<!-- Yes. You can both send and receive mails to/from ordinary internet e-mail accounts -->
</p>
<div class="date"></div>
<p>
<strong>Can I send email to, and receive email from postman's traditional I2P mail accounts?</strong><br/>
No, but this too is being worked on.
<!-- Yes. You can both send and receive mails to/from some_name@mail.i2p addresses -->
</p>
<div class="date"></div>
<p>
<strong>What does it mean when Know is x'ed for a mail in my inbox?</strong><br/>
When the sender's destination is not known locally the mail is marked by an x in the &#8220;Know&#8221; column
or by putting &#8220;{UNK}&#8221; before the sender's address in IMAP.<br/>
This means that you have no proof this user is really who he claims to be, in his user name. Of course, if the
signature is valid, you know he possesses the destination key with which the mail was signed, and that the mail
content is from that person. But you cannot rely on the short name here. In case you had gotten a mail from a user
with this name before, you cannot be sure it is the same user this time, even if the signature is valid. In this
case you must compare the destination keys or add them to your addressbook. A user not locally known, is not
necessarily evil, but you shouldn't trust it's the user you might think it is. But, if verified against locally
stored keys, you know it's the same user when you receive another mail from him and &#8220;Know&#8221; has a green
check.
</p>
<div class="date"></div>
<p>
<strong>What do &#8220;BktPfx&#8221;, &#8220;Distance&#8221; and &#8220;Locked?&#8221; mean?</strong><br/>
&nbsp; &bull; &nbsp; BktPfx = BucketPrefix<br>
&nbsp; &bull; &nbsp; Distance: the distance of an I2P-Bote node to your own node in keyspace<br>
&nbsp; &bull; &nbsp; Locked: If a node is not reachable for whatever reason, it is marked as locked, plus the time
it has been found unreachable.<br>
</p>
<div class="date"></div>
<p>
<strong>What can I do to be more anonymous?</strong><br/>
<ul>
<li><p>Don't send identifying information about you! (name, address, photos, geographic location, time zone,
age, sex, websites, login names, I2P router id, I2P-Bote id, Files that contain author information about you,
&#8230;)</p></li>
<li><p>don't send personal information or information that only you can possess,</p></li>
<li><p>leave I2P-Bote running 24/7,</p></li>
<li><p>use mailroutes with randomized per-hop delays and/or per-hop fixed send times, <font color="#ff0000">[not yet
fully implemented]</font></p></li>
<li><p>use a long check interval,</p></li>
<li><p>use a long local delay for own packets,</p></li>
<li><p>use a big check interval randomization. <span style="color: red;">[not yet implemented]</span></p></li>
<li><p>suppress the sending of date and time in the e-mails' header,</p></li>
<li><p>suppress translation of markers like &#8220;Re:&#8221; into another language,</p></li>
<li><p>watch your language and writing style,</p></li>
<li><p>use different e-mail identities,</p></li>
<li><p>consider discarding e-mail identities after longer periods of usage,</p></li>
<li><p>...</p></li>
</ul>
</p>
<div class="date"></div>
<p>
<strong>How do I not send timestamps?</strong><br/>
Go to settings and disable sending of timestamps. This will have the effect that your mail will not contain a date
or time of sending.
<!-- <br/>(When using mailroutes, the timestamps are automatically disabled.) <span style="color: red;">[not yet implemented]</span></p> -->
</p>
<div class="date"></div>
<p>
<strong>How do I migrate my settings and data to another computer, or back them up?</strong><br/>
I2P-Bote stores all email and other data in the <tt>i2pbote</tt> folder. On Windows, that folder can be found at
<tt>%APPDATA%\I2P\i2pbote</tt>; on Linux, it is <tt>$HOME/.i2p/i2pbote</tt>.<br/>
To back up or migrate everything, just copy the whole <tt>i2pbote</tt> folder.<br/>
If you are only interested in your Email Identities, copy the file <tt>identities.txt</tt>. For the address book,
copy <tt>addressBook.txt</tt>.
</p>
<div class="date"></div>
<p>
<strong>What is a <i>mail route?</i></strong><br/>
see: What does high-latency transport mean?<br/>
<!-- (When using mail routes, the timestamps are automatically disabled.) [yet to be implemented] -->
</p>
<div class="date"></div>
<p>
<strong>What does high-latency transport mean?</strong><br/>
It means that you can enable an option where e-mail packets are not sent directly to storing nodes, but are relayed
(forwarded) by other peers (who cannot read the e-mails, as they are encrypted with several layers and ripped into
small parts), who do not send them on immediately but wait a user-specified time &#8211; in case of sending
specified by the sender, in case of receiving specified by recipient.<br/>
Therefore it takes the mail some time to arrive. Thus an attacker cannot simply run stats on node uptimes (who was
connected when) and times a message was received to be stored (which in a low-latency environment would be about the
time it was sent), in order to uncover the real life identities behind I2P-Bote e-mail identities.
</p>
<div class="date"></div>
<p>
<strong>What latencies are there, and how can they be controlled (if at all)?</strong><br/>
I2P-Bote is distributed and running on top of the I2P network, so it takes some time. Speed is not our strength, but
we compare well with other anon mail systems. Without mail routes enabled it takes 3 to 10 minutes from hitting the
&#8220;Send&#8221; button to being displayed in the receiver's inbox.<br/>
If speed is what you want, fully disable mail routes or set them to the minimum number of hops and minimum per-hop
delay you can live with.
</p>
<div class="date"></div>
<p>
<strong>If I2P-Bote generates its own anonymity, why does it need I2P?</strong><br/>
I2P-Bote is built on top of I2P mainly for five reasons:<br/>
&nbsp; &bull; &nbsp; I2P was lacking a decentralized e-mail service and HungryHobo is an I2P user.<br/>
&nbsp; &bull; &nbsp; I2P offers very good anonymity, is mature and incorporates years of
experience.<br>
&nbsp; &bull; &nbsp; So being on top of it, kind of represents an anonymity fall-back even if there were some
crucial bugs in I2P-Bote.<br/>
&nbsp; &bull; &nbsp; Flexibility: We want to offer an easy way to anonymous low-latency e-mail communication as
well, with still a high level of protection.<br/>
&nbsp; &bull; &nbsp; I2P with it the many other apps running on top of it creates a lot of traffic that blends with
I2P-Bote traffic.<br/>
&nbsp; &bull; &nbsp; Even I2P-Bote relays are thus location-hidden.
</p>
<div class="date"></div>
<p>
<strong>How anonymous/secure is I2P-Bote without mail routes?</strong><br/>
Pretty anonymous and very secure.<br/>
It then basically enjoys the same anonymity other apps have on I2P, the anonymity provided by the I2P router &#8211;
which is rather strong anonymity already. However, I2P is a low-latency network, with all the shortcomings a
low-latency network comes with by its very nature. There are attacks against which I2P cannot protect you or not
protect you very reliably. I2P-Bote does its best to augment I2P anonymity with its high-latency transport option,
which make &#8211; if enabled &#8211;
I2P-Bote mails <i>paranoidly</i> anonymous.
</p>
<div class="date"></div>
<p>
<strong>Is I2P-Bote open source?</strong><br/>
Of course!<br/>&#8220; <i>
This software is licensed under the GPL version 3 (see licenses/GPLv3.txt), except for bcprov-ecc-jdk16-145.jar
which is licensed under the Bouncy Castle License
(see licenses/BouncyCastle.txt).</i>&#8221; <br>(Both of which are free open source licences.)
</p>
<div class="date"></div>
<p>
<strong>Who made I2P-Bote?</strong><br/>
(See also Credits!)<br>
Conception, technical design, implementation and web user interface were/are done by HungryHobo, an anonymous
developer. For feedback or if you want to offer help, you can contact him using I2P-Bote. His destination key is:
<br><b>hobo37SEJsEMfQHwcpVlvEgnrERGFz34GC1yjVyuRvl1QHnTi0UAoOtrLP~qkFY0oL59BBqj5sCep0RA8I5G8n</b>
</p>
<div class="date"></div>
<p>
<strong>What languages are available?</strong><br/>
English, German, Russian, French, Spanish, Portuguese, Dutch, Norwegian, Swedish, Chinese, and Arabic.
</p>
<div class="date"></div>
<p>
<strong>How can I help translate I2P-Bote into my language?</strong><br/>
Translations are done the same way as the rest of I2P. If you would like to help and have questions, please
<a href=contact.html>contact the author.</a>
</p>
<div class="date"></div>
<p>
<strong>How does it work on a technical level?</strong><br/>
Have a look at the file <tt>doc/techdoc.txt</tt> in the source code.
</p>
<div class="date"></div>
<p>
<strong>What are some other ways I can help?</strong><br/><br/>
&nbsp; &bull; &nbsp; Use I2P-Bote and give feedback<br/><br/>
&nbsp; &bull; &nbsp; Tell your friends, family, collegues et al. about I2P-Bote and lend them a hand<br/><br/>
&nbsp; &bull; &nbsp; Mention I2P-Bote on your blog, eepsite or website<br/><br/>
&nbsp; &bull; &nbsp; Write a user's guide or improve the technical documentation<br/><br/>
&nbsp; &bull; &nbsp; Add features or fix bugs (<a href=contact.html>contact the author first</a>)<br/><br/>
</p>
<div class="date"></div>
<p>
<br/><br/><br/><br/><br/><br/><br/>
<strong>Credits:</strong><br/><br/>
Idea &amp; technical concept: <i>HungryHobo</i>, <i>Mixxy</i><br/><br/>
Implementation: <i>HungryHobo</i><br/><br/>
Plugin support: <i>zzz</i>, <i>HungryHobo</i><br/><br/>
User interface: <i>HungryHobo</i><br/><br/>
Seedless integration: <i>sponge</i><br/><br/>
German translation: <i>HungryHobo</i><br/><br/>
Russian translation: <i>suhr</i><br/><br/>
French translation: <i>albat</i>, <i>Redzara</i>, <i>Mixxy</i><br/><br/>, <i>magma</i><br/><br/>
Spanish translation: <i>Mixxy</i><br/><br/>
Portuguese translation: <i>Mixxy</i><br/><br/>
Dutch translation: <i>KwukDuck</i><br/><br/>
Norwegian translation: <i>hej</i><br/><br/>
Swedish translation: <i>hottuna</i><br/><br/>
Chinese translation: <i>walking</i><br/><br/>
Arabic translation: <i>hamada</i><br/><br/>
Alpha testing: <i>HungryHobo</i>, <i>Mixxy</i>, <i>Returning Novice</i>, <i>sponge</i>, and many others<br><br/>
Manual: <i>Mixxy</i><br/><br/>
<br><br/>
</p>
<div class="date"></div>
</div>
</div>
<div id="footer">
<div class="rside">CSS: <a href="http://www.free-css-templates.com" title="Design by David Herreman">David Herreman</a></div>
<p>
<a href="http://validator.w3.org/check?uri=referer" title="Validate">XHTML</a> - <a href="http://jigsaw.w3.org/css-validator/check/referer" title="Validate">CSS</a>
</p>
</div>
</div>
</body>
</html>

622
WebContent/FAQ_fr.html Normal file
View File

@ -0,0 +1,622 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head>
<title>Foire aux questions</title>
<meta http-equiv="Content-Language" content="English">
<meta name="Robots" content="index,follow">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="FAQ_fr_files/style.html"
media="screen">
</head><body>
<div id="wrap">
<div id="top">
<div class="rights"> </div>
<div id="search">
</div>
<div class="lefts">
<h1>I2P-Bote</h1>
<h2>Messagerie décentralisée sécurisée</h2>
</div>
</div>
<div id="topmenu">
<div class="rights"></div>
<div class="lefts"><ul>
<li><a
href="http://t5qds7twb7eyyvp2fchhbn74tgdzv774rlru5guit5jkn4a6do7a.b32.i2p/index.html"
title="Home">Accueil</a></li>
<li><a
href="http://t5qds7twb7eyyvp2fchhbn74tgdzv774rlru5guit5jkn4a6do7a.b32.i2p/download.html"
title="Download I2P-Bote">Téléchargement</a></li>
<li><a
href="http://t5qds7twb7eyyvp2fchhbn74tgdzv774rlru5guit5jkn4a6do7a.b32.i2p/screenshots.html"
title="Screenshots">Captures d'écrans</a></li>
<li><a
href="http://t5qds7twb7eyyvp2fchhbn74tgdzv774rlru5guit5jkn4a6do7a.b32.i2p/userguide.html"
title="User Guide">Guide d'utilisation</a></li>
<li><a
href="http://t5qds7twb7eyyvp2fchhbn74tgdzv774rlru5guit5jkn4a6do7a.b32.i2p/faq.html"
title="Frequently Asked Questions">Foire aux questions</a></li>
<li><a href="http://forum.i2p/viewforum.php?f=35" title="Forum">Forum</a></li>
<li><a
href="http://t5qds7twb7eyyvp2fchhbn74tgdzv774rlru5guit5jkn4a6do7a.b32.i2p/contact.html"
title="Contact">Contact</a></li>
</ul></div>
</div>
<div style="text-align: justify;" id="main">
<div id="leftside">
<p>
</p><h2>Foire aux questions</h2>
<p>
</p><div class="date"></div>
<p>
<strong>I2P-Bote, kesako?</strong><br>
C'est un programme de messagerie P2P conçu pour protéger votre vie privée.<br>
I2P-Bote un système de messagerie entièrement décentralisé (sans serveur)
qui fonctionne sur le réseau I2P.
Il prend en charge les identités multiples et n'expose pas les
en-têtes de messages. Il est encore en phase de développement et n'est
accessible que via la console du routeur I2P. Il sera bientôt doté de la prise en
charge de POP3, et de plus d'anonymat via une option de transport
à haute latence. Tous les messages bote sont automatiquement
cryptés de bout en bout sans avoir à régler de cryptage de mails
(bien que cette option soit disponible), et ils sont authentifiés
automatiquement. Comme il est décentralisé, aucun serveur de mail ne peut
faire de rapprochement entre expéditeur et destinataire (profilage):
même les nœuds relayant les messages ne peuvent identifier l'expéditeur
et en dehors de expéditeur et du destinataire, seuls le point terminal du
tunnel à haute latence et les nœuds de stockage connaissent à qui (l'identité
anonyme) est destiné le message. L'expéditeur peut se déconnecter bien avant que
le message arrive à destination.
Ceci augmente encore le niveau d'anonymat que peut atteindre I2P-Bote.
Pour ceux qui ne veulent pas de forts délais, tous ces paramètre sont
modifiables pour s'adapter au niveau de leur besoin d'anonymat.
</p>
<div class="date"></div>
<p>
<strong>Pourquoi ce nom d'I2P-Bote?</strong><br>
Bote est le mot allemand pour dire "messager".
</p>
<div class="date"></div>
<p>
<strong>Pourquoi I2P-Bote?</strong><br>
Parce que c'est sympa. Et parce qu'un système décentralisé faisait cruellement
défaut et qu'I2P n'avait pas de système de messagerie décentralisé, et qu'y voyant
une opportunité d'améliorer un aspect négligé des considérations sur l'anonymat,
il fut décidé d'ajouter une méthode de transport à latence élevée.
Vous pourriez utiliser un compte de messagerie normal et crypter vos messages,
mais ils ne seraient pas pour autant anonymes. Vous pourriez alors utiliser un serveur
d'envoi anonyme, mais ils ne seraient pas automatiquement cryptés de bout en bout.<br>
Ou vous pouvez utiliser I2P-Bote grâce auquel vos messages sont anonymes et
<i>automatiquement</i> cryptés de bout en bout.<br> À la différence des messageries
traditionnelles, il n'y a pas à s'occuper de gérer en plus un système de clés. Tout
ce dont vous avez besoin est déjà prêt.<br> Et ne vous y trompez pas, malgré son
apparente simplicité et sa réelle facilité d'utilisation, I2P-bote vous offre un niveau
de cryptage de qualité militaire et des options d'anonymat extrêmement efficaces.
</p>
<div class="date"></div>
<p>
<strong>Que se passe-t-il quand je clique sur "Envoyer"?</strong><br>
Le message est crypté et stocké sur des ordinateurs d'autres utilisateurs d'I2P-Bote.
À partir de là, il est expédié au destinataire quand il relève son courrier.
</p>
<div class="date"></div>
<p>
<strong>Une minute! Tous mes envois sont stockés dans les ordinateurs de personnes
choisies aléatoirement? C'est une idée de fou!</strong><br>
Tout ce qu'elles peuvent voir n'est qu'un tas d'ordures car les données sont cryptée
à un niveau militaire. Seuls vous et le destinataire savez ce qu'il y a dans le
message. De plus, si vous envoyez en ayant activé le relayage, il ne leur est même pas
possible de savoir qui l'a envoyé.<br> Entre ça et l'utilisation d'un compte fourni par
une <a href="http://www.theregister.co.uk/2009/12/07/schmidt_on_privacy/">société
qui ne respecte pas votre vie privée</a>, sur une liaison Internet qui
<a href="http://www.eff.org/issues/nsa-spying">peut être espionnée par des entités
occultes</a>, quelle est la solution la plus digne de confiance?
</p>
<div class="date"></div>
<p>
<strong>Comment cela marche-t-il exactement?</strong><br>
Voyez le chapitre “Concept” du Guide <br>En bref:
Les nœuds I2P-Bote constituent un réseau p2p relayant les paquets de messages
pour le compte des autres et les stockant dans une table de hachage décentralisée (DHT).
</p>
<div class="date"></div>
<p>
<strong>Pourquoi devrais-je m'en servir? Je n'ai rien à cacher&hellip;</strong><br>
Vous vous baladez à poil dans la rue, vous?<br>Bon, après tout c'est possible. Mais il
faut quand même noter qu'il peut parfois vous arriver d'avoir des besoins de correspondances
épistolaires secrètes et intraçables, et ne pas faire savoir au monde entier que vous
dites ceci ou cela et à qui vous le dites.<br>
Parfois, vous pouvez aussi vouloir communiquer de façon entièrement anonyme avec
un tiers.<br>I2P-Bote est alors le moyen idéal qui vous donne une protection d'enfer
tout en restant très facile à utiliser.<br>
Il parvient à combiner une sécurité de niveau militaire et une ergonomie de niveau
débutant:<br>
vous pouvez avoir réglé un niveau d'anonymat paranoïaque, qui retardera l'arrivée du message
d'une demi-éternité, ou avoir des échanges plus rapides et cependant garder un fort
niveau d'anonymat.<br>
À vous de décider, d'un simple clic de souris.</p>
<div class="date"></div>
<p>
<strong>Et au sujet de <a href="http://www.pgp.com/">PGP</a> et
<a href="http://gnupg.org/">GPG</a>?</strong><br>
PGP et GPG vous permettent de crypter le courrier et de l'envoyer par votre compte de
messagerie existant. Il offrent du cryptage fort, mais uniquement du corps du message,
pas des en-têtes, ce qui veut dire que les champs "Objet", le nom de votre ordinateur,
et d'autres informations ne sont pas protégées.<br> Une autre faiblesse de PGP/GPG
est qu'ils ne peuvent pas empêcher de trouver qui parle à qui.<br>
I2P-Bote, au contraire, crypte tout sauf la destination (en fait, même la destination
n'est visible que par les nœuds qui ignorent de qui vient le message). Il peut aussi
envoyer le message via plusieurs relais (comme
<a href="http://mixmaster.sourceforge.net/">Mixmaster</a>), de sorte que personne ne
puisse trouver qui envoie à qui.<br>
</p>
<div class="date"></div>
<p>
<strong>Puis-je toujours utiliser GPG/PGP avec I2P-Bote?</strong><br>
Bien sûr. Cryptez le texte de votre message avec GPG avant de le coller dans le corps
du message I2P-Bote, ou utilisez une application de messagerie compatible GPG
[<font color="#ff0000">Prise en charge POP3 non implémentée</font>].
</p>
<div class="date"></div>
<p>
<strong>Quelle différence y a-t-il avec Susimail?</strong><br>
I2P-Bote est meilleur parce que son numéro de version est plus élevé&hellip; blague.<br>
I2P-Bote apporte plus d'anonymat, mais Susimail dispose de fonctionnalités dont
I2P-Bote est pour l'instant dépourvu (voir plus bas), et Susimail est plus efficace en
terme de consommation de bande passante car il ne fait pas de stockage redondant
réparti.
</p>
<div class="date"></div>
<p>
<strong>Pourquoi I2P-Bote est-il meilleur?</strong><br>
<i>Nous</i> pensons qu'il est meilleur&hellip; <i>pour nous</i> (et peut-être pour vous, aussi;
décidez vous-même!), que&hellip;</p><ul><li><p style="line-height: 150%;">
<font face="Arial, sans-serif">mixminion car il est facile à utiliser et aussi simple à prendre
en main que nous avons pu.</font></p>
</li><li><p style="line-height: 150%;"><font face="Arial, sans-serif">les services de mail
anonymes n'utilisant pas le routage basé sur des clés de destination, car ils ne permettent pas
le cryptage de bout en bout.</font></p>
</li><li><p style="line-height: 150%;"><font face="Arial, sans-serif">les services centralisés,
car que le serveur pourrait s'arrêter (à cause d'attaques, de problèmes légaux, manque de
financement ou d'intérêt&hellip;) et car l'administrateur du serveur dispose de trop de moyens
pour faire de l'espionnage.</font></p>
</li></ul>
<div class="date"></div>
<p>
<strong>Comment mon identité est-elle protégée quand j'échange du courrier?</strong><br>
Jamais votre adresse IP ni même votre destination I2P n'est inclue dans les messages que vous
envoyez.<br>
Les compteurs de transports à haute latence protègent des attaques de timing.<br>
Le cryptage de bout en bout et par saut, le relayage des paquets pour d'autres nœuds, les
paquets à taille unique* (bourrage/padding), le débit d'envoi constant (messages de test
et bidons/dummy)*, et un rapport assez équilibré des taux d'envoi/réception* protègent des
attaques d'analyse de trafic, et en combinaison avec les delais par saut, I2P-Bote offre de
bons moyens de prévention des attaques d'intersection.<br>
La nature open source d'I2P-Bote garantit que vous pouvez vous-même voir la mise en œuvre et
la vérifier pour y chercher ou trouver des bogues.
<br>*[<font color="#ff0000">pas encore implémenté</font>]</p>
<div class="date"></div>
<p>
<strong>Comment faire pour l'utiliser?</strong><br>
Lisez le Guide ou les autres questions/réponses ici!<br>
Si vous avez toujours des questions, posez-les sur le forum:
<a href="http://forum.i2p/viewforum.php?f=35">http://forum.i2p/viewforum.php?f=35</a>
</p>
<div class="date"></div>
<p>
<strong>Puis-je utiliser un programme comme Thunderbird?</strong><br>
Non, mais c'est sur la feuille de route.
<!--Yes, you can use the e-mail client of your choice, as long as it supports POP3 and
SMTP<br/>[<font color="#ff0000">POP3 and SMTP not yet implemented</font>]-->
</p>
<div class="date"></div>
<p>
<strong>Puis-je envoyer des pièce-jointes, et quelles sont les limites?</strong><br>
Oui, depuis la version 0.2.5.<br>La taille cumulée des pièces jointes devrait être petite et de
préférence ne pas dépasser les 500ko.</p>
<div class="date"></div>
<p>
<strong>Comment créer un compte de messagerie?</strong><br>
I2P-Bote les appelle "Identités". Vous pouvez en créer une dans l'interface web d'I2P-Bote
via le lien "Identités". La raison pour laquelle on ne les appelle pas "comptes" est qu'il
n'y a pas de fournisseur comme GMail ou autre. Vous êtes le seul dépositaire du porte-clés
(cryptographique) de l'identité.<br>Quand vous la créez, I2P-bote génère une chaîne de
chiffres et de lettres appelée "Destination". C'est l'adresse à laquelle on peut vous joindre.
<br>
Exemple: <tt><b>wsq-8u5bTWbaOsrS0JuXRKL-RsbTkckV4W7u2mIu0Yrlfetixq1F~03CArnvbd6tDWwjPHYEuoKyWqwxplSdix</b></tt>
</p>
<div class="date"></div>
<p>
<strong>Qu'est-ce qu'une destination? Et l'adresse mail?</strong><br>
La longueur des destinations est comprise entre 86 et 512 caractères, suivant le type de
cryptage. La prise en charge d'adresses faciles à mémoriser et choisies par l'utilisateur est
au programme d'un futur proche.<br>Les identités sont une paire de clés privée et publique,
et d'un nom que l'utilisateur lui attribue. La clé publique est la destination,
votre identité pseudonymique. Un utilisateur réel peut en avoir plusieurs. Elles servent à
envoyer des messages à certains utilisateurs donc aussi appelés “destinations” tout comme
pour crypter les messages qui leur sont&hellip; destinés. Votre destination est donc pour les
autres aussi la clé qu'ils utilisent pour crypter les messages qu'ils vous envoient et pour
pour vérifier l'intégrité et l'authenticité de ceux qu'ils reçoivent&hellip; de vous.<br>
Il est sans danger (et indispensable) de donner votre destination à toute personne de laquelle
vous voulez recevoir du courrier.<br>Il est important de faire la distinction entre votre
destination de messagerie et la destination de votre routeur I2P! Votre identité de messagerie
n'a rien à voir avec l'identité de votre nœud/routeur I2P-Bote qui est utilisée pour permettre
aux nœuds I2P-Bote de se contacter les uns les autres pour constituer le réseau Bote.<br>
Si vous avez des problèmes avec l'application I2P-Bote dans le cas très improbable où ça
serait nécessaire vous pouvez indiquer votre destination (au sens d'application I2P) sur
irc2p, les canaux IRC ou le forum I2P, ou ajouter manuellement des identités d'autres pairs
pour pouvoir vous connecter, bien que ceci n'ait jamais été nécessaire à ce jour.<br>
Elle <b>n'est pas liée à votre adresse IP</b>. Néanmoins, ne révélez d'aucune façon la relation
entre votre identité de routeur I2P-Bote et celle d'une de vos propres destinations de courrier
I2P-Bote car cela réduirait à néant le niveau d'anonymat supplémentaire qu'I2P-Bote porte en
lui-même!
</p>
<div class="date"></div>
<p>
<strong>Pourquoi les adresses sont-elles si longues?</strong><br>
Dans I2P-Bote chaque message est (automatiquement) crypté. Pour vous éviter d'avoir à échanger
votre adresse <b>ET</b> de très longues clés publiques, on a simplement fait de ces clés les
adresses. Deux autres avantages en découlent: vous n'avez pas à vous soucier de la préexistence
de votre adresse (au moins tant que vous ne recevez ni n'envoyez courrier vers
l'Internet normal), et vous n'avez pas à avoir un système de gestion de clés séparé pour
s'occuper de vos clés.<br>
Il est sans danger (et indispensable) de donner cette clé, car elle n'est que la clé publique,
que certains peuvent avoir à connaître, sans pour autant que cela compromette la
confidentialité de vos messages.<br>
L'utilisation du cryptage ECC conduit à des clés plus courtes.
</p>
<div class="date"></div>
<p>
<strong>Mais je n'arrive pas à mémoriser de si longues destinations&hellip;</strong><br>
Le carnet d'adresses est là pour ça. Une fois convaincu par le principe d'I2P-Bote, vous
apprécierez le cryptage et l'authentification intégrés, qui ne peuvent être atteints que par
l'utilisation de clés cryptographiques.
<br>Encore une fois, l'alternative serait d'avoir des adresses courtes et simples <b>plus</b>
de longues clés de cryptage et authentification, <b>ET</b> de se reposer sur quelqu'autorité
pour faire la relation entre l'adresse et un destinataire anonyme.
</p>
<div class="date"></div>
<p>
<strong>Quel est l'intérêt d'utiliser de multiples identités?</strong><br>
I2P-Bote n'est pas une messagerie instantanée, donc vous pouvez avoir plusieurs identités sans
avoir à tenir plusieurs tunnels ouverts en même temps. Vous utiliserez seulement un peu plus de
ressources au moment de la relève mais en même temps vous fournirez une meilleure couverture
aux autres.<br>
Maintenant, imaginez que vous communiquez incognito avec des amis (voir: lois sur le stockage
de données) via I2P-Bote, et que vous voulez envoyer rapidement un message pour vous retrouver
ce soir ailleurs qu'à l'habituel Café des Arts. Vous n'avez pas besoin d'un super-anonymat et
pouvez renoncer aux relayages et délais de mails. Vos amis, d'autre part, devraient raccourcir
leur intervalle de vérification pour recevoir le message à temps. Mais pour d'autres types de
communications, vous avez besoin d'un super niveau d'anonymat, <!--et c'est là qu'une autre
identité avec un relayage et des délais différents peut être utile-->
</p>
<div class="date"></div>
<p>
<strong>Quel est le meilleur cryptage?</strong><br>
<a href="http://fr.wikipedia.org/wiki/Cryptographie_sur_les_courbes_elliptiques">ECC</a> à 256
bits produit des adresses destinations courtes et maniables, et est considéré comme plus solide
que l'ElGamal à 2048 bits.<br>
<a href="http://en.wikipedia.org/wiki/Elliptic_curve_cryptography">ECC</a> à 521 bits est plus
solide que sa version à 256 bits, mais il génère des destinations (clés) très longues.<br>
<a href="http://fr.wikipedia.org/wiki/Cryptosyst%C3%A8me_de_ElGamal">ElGamal</a> à 2048 bits
génère des clés encore plus longues, et il est le plus faible des trois algorithmes. Cependant,
ElGamal fait l'objet de plus recherches que ECC, ce qui rend moins probable qu'une faiblesse de
cet algorithme passe inaperçue pendant plus longtemps que dans ECC.<br>
</p>
<div class="date"></div>
<p>
<strong>Quels algorithmes sont-ils utilisés pour le cryptage symétrique et le hachage?</strong><br>
<a href="http://fr.wikipedia.org/wiki/Advanced_Encryption_Standard_process">AES</a>-
<a href="http://fr.wikipedia.org/wiki/Advanced_Encryption_Standard">256</a> en mode
<a href="http://fr.wikipedia.org/wiki/Mode_d%27op%C3%A9ration_%28cryptographie%29#Encha.C3.AEnement_des_blocs_:_.C2.AB_
Cipher_Block_Chaining_.C2.BB_.28CBC.29">CBC</a> et
<a href="http://http://fr.wikipedia.org/wiki/Secure_Hash_Algorithm">SHA-256</a>.
</p>
<div class="date"></div>
<p>
<strong>Y a-t-il des protections anti-spam?</strong><br>
I2P-Bote ne filtre pas le spam, mais le fait que l'envoi en masse doive être fait
individuellement devrait décourager les spammers. Un autre moyen de défense repose sur des
pénalités (<a href="http://www.hashcash.org/">HashCash</a>) qui sont un mécanisme supporté au
niveau du protocole, et qui pourrait être implémenté dans une version ultérieure si le spam
devenait un problème.
</p>
<div class="date"></div>
<p>
<strong>Deux mot sur HTML et le formatage de texte?</strong><br>
L'interface web ne restitue pas la mise en forme HTML.
</p>
<div class="date"></div>
<p>
<strong>Pendant combien de temps les messages restent-ils dans la nature?</strong><br>
Ils restent disponibles 100 jours après l'émission. Les messages n'ayant pas été relevés
au-delà de cette période sont supprimés.<br>
Les messages relevés restent sur votre ordinateur jusqu'à ce que vous les supprimiez.</p>
<div class="date"></div>
<p>
<strong>Quand les identités expirent-elle?</strong><br>
Jamais. Mais la votre peut devenir inutilisable si vous perdez le contenu de votre disque dur.
Vous seriez alors amené à en créer une ou plusieurs autres en remplacement, et en informer vos
correspondants habituels.
</p>
<div class="date"></div>
<p>
<strong>Puis-je recevoir et envoyer des messages de/vers des serveurs de l'Internet normal?
</strong><br>
Non, mais on y travaille.
<!-- Yes. You can both send and receive mails to/from ordinary internet e-mail accounts -->
</p>
<div class="date"></div>
<p>
<strong>Et de/vers les comptes traditionnels de postman?</strong><br>
Non plus, mais on y travaille aussi.
<!-- Yes. You can both send and receive mails to/from some_name@mail.i2p addresses -->
</p>
<div class="date"></div>
<p>
<strong>Que signifient les icônes dans la colonne "Connu" de la boîte de réception?</strong><br>
Quand la destination expéditrice est inconnue localement le message est marqué d'un X dans la
colonne "Connu"
<!--or by putting &#8220;[UNK]&#8221; before the sender's address in POP3-->.<br>
Cela veut dire que vous n'avez aucune preuve que cet utilisateur est vraiment qui il prétend
être dans son nom public "humain". Bien sûr, si la signature est valide, vous êtes assuré(e)
qu'il possède la clé privée de destination avec laquelle il a signé le message, et donc que le
contenu du message est bien issu de cette personne. Mais vous ne pouvez pas vous fier au nom
court malgré tout (il vous faudrait un autre moyen de vous en assurer: qu'il vous ait remis sa
destination en main propre par exemple, ou vérifiée au téléphone, etc&hellip;). Dans le cas où
vous avez déjà eu un message d'un utilisateur affichant ce nom, vous ne pouvez pas être sûr(e)
que c'est le même utilisateur cette fois, même si la signature est valide. Dans ce cas, vous
devez comparer les clés de destination ou les ajouter à votre carnet d'adresses. Un utilisateur
inconnu localement n'est pas forcément une vermine, mais vous ne devriez pas lui faire
confiance à priori sur la seule foi du nom qu'il annonce. Mais s'il passe avec succès le test de
comparaison avec la clé précédemment par vous stockée localement, vous avez au moins la preuve
qu'il s'agit bien du même utilisateur quand vous recevez un nouveau message de sa part, et la
colonne "Connu" est maintenant décorée d'une jolie coche verte.
</p>
<div class="date"></div>
<p>
<strong>“BktPfx”, “Distance” et “Verrouillé?"&hellips; c'est quoi?</strong><br>
&nbsp;&nbsp; BktPfx = BucketPrefix (préfixe de paquet)<br>
&nbsp;&nbsp; Distance: la distance d'un nœud I2P-Bote au votre propre dans l'espace de clés.
<br>
&nbsp;&nbsp; Verrouillé: si un nœud n'est pas joignable, quelle qu'en soit la raison, il est
marqué "Verrouillé", et le temps depuis lequel sa défection a été découverte est affiché.<br>
</p>
<div class="date"></div>
<p>
<strong>Comment rester plus anonyme?</strong><br>
</p><ul>
<li><p>N'envoyez aucune information à votre sujet! (nom, adresse, photos, situation
géographique, fuseau horaire, âge, sexe, sites web, identifiants, id de routeur I2P, id
I2P-Bote, fichiers contenant des informations sur l'auteur, &hellip;)</p></li>
<li><p>N'envoyez pas d'information personnelles c'est à dire des informations qui vous
identifient de façon unique en tant que vous seul les connaissez,</p></li>
<li><p>Laissez I2P-Bote tourner 24/24 7/7,</p></li>
<li><p>Utilisez des routes de messages avec des délais aléatoires par-saut et/ou des temps
fixes par saut <font color="#ff0000">[not yet fully implemented]</font>,</p></li>
<li><p>Utilisez de longs intervalles de relève,</p></li>
<li><p>Utilisez un délais long pour vos propres paquets,</p></li>
<li><p>Utilisez un fort niveau d'intervalle de relève aléatoire. <span style="color:
red;">[not yet implemented]</span></p></li>
<li><p>Supprimez l'envoi de la date et de l'heure dans les en-têtes de messages,</p></li>
<li><p>Renoncez aux marqueurs de suivi tels que “Tr:” traduits dans votre langue,</p></li>
<li><p>Surveillez votre style de langage et d'écriture,</p></li>
<li><p>Utilisez différentes identités,</p></li>
<li><p>Envisagez d'abandonner vos identités après de longues périodes d'utilisation,</p></li>
<li><p>...</p></li>
<li><p>Cette liste n'est pas destinée à vous rendre paranoïaque, mais à vous montrer par où
l'anonymat peut-être amoindri.</p></li>
</ul>
<div class="date"></div>
<p>
<strong>Comment ne pas envoyer de tampons horaires?</strong><br>
L'option est dans les "Préférences". Les messages n'auront pas de date/heure d'envoi;
<!-- <br/>(When using mailroutes, the timestamps are automatically disabled.)
<span style="color: red;">[not yet implemented]</span></p> -->
</p>
<div class="date"></div>
<p>
<strong>Comment migrer mes réglages et données vers un autre ordinateur, ou les
sauvegarder?</strong><br>
I2P-Bote stocke tout le courrier et autres données dans le dossier <tt>i2pbote</tt>. Sur
Windows, <tt>%APPDATA%\I2P\i2pbote</tt>; sur Linux, <tt>$HOME/.i2p/i2pbote</tt>.<br>
Une simple copie du dossier <tt>i2pbote</tt> fait l'affaire.<br>
Si seules vos identités vous intéressent, copiez le fichier <tt>identities.txt</tt>.
Pour le carnet d'adresses, copiez <tt>addressBook.txt</tt>.
</p>
<div class="date"></div>
<p>
<strong>qu'est-ce qu'une <i>route de messages</i>?</strong><br>
voir: Que signifie "Transport à haute latence"?<br>
<!-- (When using mail routes, the timestamps are automatically disabled.) [yet to be implemented] -->
</p>
<div class="date"></div>
<p>
<strong>Que signifie "Transport à haute latence"?</strong><br>
Cela signifie que (par une option que vous pouvez activer) les paquets de messages ne sont pas
envoyés directement aux nœuds de stockage, mais sont relayés (transférés) par d'autres pairs
(qui ne peuvent pas les lire car ils sont cryptés sur plusieurs niveaux et découpés en petits
morceaux) qui ne les traitent pas immédiatement mais attendent un certain temps défini au
niveau utilisateur pour l'envoi, par l'expéditeur, pour la réception, par le destinataire.<br>
En conséquence le message est long à arriver. L'attaquant ne peut pas utiliser de statistiques
sur les temps de fonctionnement des nœuds (qui s'est connecté à quel moment) ni les moments où
un message a été reçu pour être stocké (ce dans un environnement à faible latence serait à peu
près le moment où il a été envoyé), pour en déduire les identités réelles sous-jacentes aux
identités I2P-Bote.
</p>
<div class="date"></div>
<p>
<strong>Quelles latences y a-t-il, et comment les contrôler?</strong><br>
I2P-Bote est décentralisé et s'exécute sur le reéseau I2P, donc ça prend du temps. La vitesse
n'est pas notre force, mais il supporte bien la comparaison à d'autres systèmes de messagerie
anonyme. Sans apport des routes de messages, il faut 3 à 10 mn entre le clic sur "Envoyer" et
l'affichage chez le destinataire.<br>Si la vitesse vous préoccupe, désactivez les routes ou
réglez-les au nombre de sauts et de retard par saut minimums avec lesquels vous pouvez vivre.
</p>
<div class="date"></div>
<p>
<strong>Si I2P-Bote son propre anonymat, pourquoi a-t-il besoin d'I2P?</strong><br>
I2P-Bote est bâti sur I2P pour cinq raisons principales:<br>
&nbsp;&nbsp; I2P manquait d'une messagerie décentralisée et HungryHobo est un utilisateur
d'I2P.<br>
&nbsp;&nbsp; I2P offre un excellent anonymat, il est bien au point et bénéficie de
nombreuses années d'expérience.<br>
&nbsp;&nbsp; Donc, en faire ses fondations représente une assurance d'anonymat s'il y avait
des bogues critiques dans I2P-Bote.<br>
&nbsp;&nbsp; Souplesse: nous voulons aussi offrir une méthode de communication à faible
latence, tout en gardant un haut niveau de protection.<br>
&nbsp;&nbsp; I2P, avec toutes les autres applications qui l'utilisent, génère beaucoup de
trafic dans lequel le trafic I2P-Bote peut se camoufler.<br>
&nbsp;&nbsp; En conséquence, même les relais I2P-Bote sont masqués en terme de localisation.
</p>
<div class="date"></div>
<p>
<strong>Que valent l'anonymat et la sécurité d'I2P-Bote sans les routes?</strong><br>
Plutôt bonne pour l'anonymat et très sécurisé.<br>
Il bénéficie de base du même anonymat que les autres applications I2P, l'anonymat procuré par
le routeur 2P router qui est déjà fort conséquent. Cependant, I2P est un réseau à faible
latence, avec tous les défauts intrinsèques de ce genre de réseaux. Il a des attaques contre
lesquelles I2P ne peut pas vous protéger ou au moins très efficacement. I2P-Bote améliore
l'anonymat grâce à ses options de transport à haute latence, qui rendent si vous les
activez les messages I2P-Bote à un niveau d'anonymat <i>paranoïaque</i>.
</p>
<div class="date"></div>
<p>
<strong>I2P-Bote, open source?</strong><br>
Bien sûr!<br><i>Ce logiciel est sous licence GPL version 3 (voir licenses/GPLv3.txt),
sauf pour bcprov-ecc-jdk16-145.jar qui est sous licence Bouncy Castle (voir
licenses/BouncyCastle.txt).</i><br>(Toutes deux sont des licences libres et ouvertes).
</p>
<div class="date"></div>
<p>
<strong>Qui a créé I2P-Bote?</strong><br>
(Voir aussi les "Remerciements"!)<br>
La conception, la structure technique, l'implémentation et l'interface web user sont de
HungryHobo, un développeur anonyme. Pour les retours techniques ou proposer votre aide, vous
pouvez le contacter avec I2P-Bote. Sa destination est: <br>
<b>hobo37SEJsEMfQHwcpVlvEgnrERGFz34GC1yjVyuRvl1QHnTi0UAoOtrLP~qkFY0oL59BBqj5sCep0RA8I5G8n</b>
</p>
<div class="date"></div>
<p>
<strong>Langues disponibles</strong><br>
Anglais, allemand, russe, français, espagnol, portugais, hollandais, norvégien, suédois,
chinois et arabe.
</p>
<div class="date"></div>
<p>
<strong>Comment puis-je aider à la traduction d'I2P-Bote dans ma langue?</strong><br>
Comme pour I2P.
<a href="http://t5qds7twb7eyyvp2fchhbn74tgdzv774rlru5guit5jkn4a6do7a.b32.i2p/contact.html">
Contactez l'auteur.</a>
</p>
<div class="date"></div>
<p>
<strong>Fonctionnement technique?</strong><br>
Regardez <tt>doc/techdoc.txt</tt> dans le code source.
</p>
<div class="date"></div>
<p>
<strong>D'autres moyens pour aider?</strong><br><br>
&nbsp;&nbsp; Utilisez I2P-Bote et faites part de vos commentaires/<br><br>
&nbsp;&nbsp; Parlez d'I2P-Bote à vos amis, à votre famille et à vos collègues, et aidez-les.
<br><br>
&nbsp;&nbsp; Mentionnez I2P-Bote sur votre blog, votre eepsite et votre web.<br><br>
&nbsp;&nbsp; Rédigez un guide utilisateur ou améliorez la documentation technique.<br><br>
&nbsp;&nbsp; Ajoutez des fonctionnalités ou corrigez des bogues (<a
href="http://t5qds7twb7eyyvp2fchhbn74tgdzv774rlru5guit5jkn4a6do7a.b32.i2p/contact.html">contactez tout d'abord l'auteur
</a>).<br><br>
</p>
<div class="date"></div>
<p>
<br><br><br><br><br><br><br>
<strong>Remerciements:</strong><br><br>
Idée &amp; conception technique: <i>HungryHobo</i>, <i>Mixxy</i><br><br>
Implémentation: <i>HungryHobo</i><br><br>
Maintenance du greffon: <i>zzz</i>, <i>HungryHobo</i><br><br>
Interface utilisateur: <i>HungryHobo</i><br><br>
Intégration de Seedless: <i>sponge</i><br><br>
Traduction allemande: <i>HungryHobo</i><br><br>
Traduction russe: <i>suhr</i><br><br>
Traduction française: <i>albat</i>, <i>Redzara</i>, <i>Mixxy</i>, <i>magma</i><br><br>
Traduction espagnole: <i>Mixxy</i><br><br>
Traduction portugaise: <i>Mixxy</i><br><br>
Traduction hollandaise: <i>KwukDuck</i><br><br>
Traduction norvégienne: <i>hej</i><br><br>
Traduction suédoise: <i>hottuna</i><br><br>
Traduction chinoise: <i>walking</i><br><br>
Traduction arabe: <i>hamada</i><br><br>
Testeurs versions Alpha: <i>HungryHobo</i>, <i>Mixxy</i>, <i>Returning Novice</i>,
<i>sponge</i>, et de nombreux autres<br><br>
Manuel: <i>Mixxy</i><br><br>
<br><br>
</p>
<div class="date"></div>
</div>
</div>
<div id="footer">
<div class="rside">CSS: <a href="http://www.free-css-templates.com/"
title="Design by David Herreman">David Herreman</a></div>
<p>
<a href="http://validator.w3.org/check?uri=referer" title="Validate">XHTML</a>
- <a href="http://jigsaw.w3.org/css-validator/check/referer"
title="Validate">CSS</a>
</p>
</div>
</div>
</body></html>

View File

@ -0,0 +1,879 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html><head>
<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type"><title>User's Guide</title><meta http-equiv="CONTENT-TYPE" content="text/html; charset=utf-8"><meta name="GENERATOR" content="OpenOffice.org 3.2 (Unix)"><style type="text/css">
<!--
@page { margin: 2cm }
P { margin-bottom: 0.21cm }
A:link { so-language: zxx }
-->
</style><meta http-equiv="CONTENT-TYPE" content="text/html; charset=utf-8"><meta name="GENERATOR" content="OpenOffice.org 3.2 (Unix)"><style type="text/css">
<!--
@page { margin: 2cm }
P { margin-bottom: 0.21cm }
-->
</style></head><body>
<p style="line-height: 150%; font-weight: bold;" align="center"><font face="Arial, sans-serif">I2P-Bote
Manual</font></p>
<p style="line-height: 150%;"><br></p>
<p style="line-height: 150%;"><br>
</p>
<p style="line-height: 150%;"><font face="Arial, sans-serif"><b>1.
Introduction</b></font></p>
<p style="line-height: 150%;"><br><br>
<font face="Arial, sans-serif">I2P-Bote
is an easy-to-use, highly anonymous secure e-mail application for
I2P. It is a serverless, fully decentralized system that
establishes/forms a peer-to-peer network built on top of
state-of-the-art low latency anonymizing network I2P; adding to it an
optional mixminion-like high-latency transport and thus avoiding the
shortcomings of low-latency networks.</font></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">Therefore,
I2P-Bote makes full use of the anonymity provided by I2P, plus it
generates its own anonymity by adding another anonymizing layer
(overlay network).</font></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">This
concept of layered anonymity is what makes I2P-Bote so flexible:</font></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">You can
configure it to be extremely anonymous and slow or less anonymous but
faster/more efficient. In any event, I2P-Bote<font color="#000000">
always provides a very good anonymity for both, sender and receiver,
as well as end-to-end encryption*. </font></font>
</p>
<p style="line-height: 150%;"><font color="#000000"><font face="Arial, sans-serif">I2P-Bote
offers the option to make your communications even more anonymous, by
enabling the high-latency mail routes &#8211; at cost of performance,
however. Users that want their anonymous e-mails to arrive as quickly
as possible, will want to disable the mail routes and use 'direct'
sending through I2P. It is guaranteed that you will never be less
anonymous than the anonymity provided by standard I2P connections. </font></font>
</p>
<p style="line-height: 150%;"><font face="Arial, sans-serif"><font color="#000000">In
order to achieve high usability, we have enabled it to be used with
standard mail clients such as Thunderbird, Evolution or Kmail,
without having to worry about what extra information these
applications send in their headers. Furthermore there is
a web interface that lets you send and read e-mails or manage your
settings and identities.</font></font></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">I2P-Bote
is easy to use: If you're
not yet using I2P, just install I2P from <a href="http://www.i2p2.de/">http://www.i2p2.de</a>
and then install the I2P-Bote plugin as described in this manual.
Otherwise simply read on!**</font></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif"><i>Current
version is 0.2.10.</i></font><br><br>
</p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">*Unless
you send e-mails to or receive them from the regular internet, ALL
emails &#8211; the mail body, attachments and the header except
recipient's address (subject, date, time, sender address, ...) are
automatically and transparently end-to-end encrypted. The recipient's
address is only visible for the mail route's last node that stores
the packets into the kad network, and the respective storing nodes,
but they cannot read the mail's content nor who sent it nor who will
fetch it.</font></p>
<p style="line-height: 150%;"><br><br>
</p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">**Of
course you can also compile from source.</font></p>
<p style="line-height: 150%;"><br>
</p>
<p style="line-height: 150%;"><br>
<br>
</p>
<p style="line-height: 150%;"><font face="Arial, sans-serif"><b>2.
Howto</b></font></p>
<p style="line-height: 150%;"><br>
</p>
<p style="line-height: 150%;"><font face="Arial, sans-serif"><u>2.1.
Installation</u></font></p>
<p style="line-height: 150%;"><br>
</p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">In order
to install I2P-Bote, go to the bottom of the I2P Client Configuration
page at </font>
</p>
<p style="line-height: 150%;"><font face="Arial, sans-serif"><a href="http://localhost:7657/configclients.jsp">http://localhost:7657/configclients.jsp</a>
</font>
</p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">and
enter:</font></p>
<p style="line-height: 150%;"><a href="http://tjgidoycrw6s3guetge3kvrvynppqjmvqsosmtbmgqasa6vmsf6a.b32.i2p/i2pbote.xpi2p"><font face="Arial, sans-serif">http://tjgidoycrw6s3guetge3kvrvynppqjmvqsosmtbmgqasa6vmsf6a.b32.i2p/i2pbote.xpi2p</font></a></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">(
<a href="http://i2pbote.i2p/i2pbote.xpi2p">http://i2pbote.i2p/i2pbote.xpi2p</a>
might work, too, if you have i2pbote.i2p in your address book or a
subscription )</font></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">in the
&#8220;Plugin Installation Download Url&#8221; line, then hit &#8220;Install
Plugin&#8221;. Wait
until your sidebar says plugin installed and started. </font>
</p>
<p style="line-height: 150%;"><br>
</p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">In order
to update your I2P-Bote instance, click 'Update' under I2P-Bote on
the I2P Client Configuration page at
<a href="http://localhost:7657/configclients.jsp">http://localhost:7657/configclients.jsp</a></font></p>
<p style="line-height: 150%;"><br><br>
</p><p style="line-height: 150%;"><font face="Arial, sans-serif"><u>2.2.
Using I2P-Bote</u></font></p>
<p style="line-height: 150%;"><br><font face="Arial, sans-serif">On your
router console <a href="http://127.0.0.1:7657/">http://127.0.0.1:7657/</a>
click on <span style="font-style: italic;">SecureMail</span> on the upper left (in the sidebar). Now you are
on I2P-Bote's web interface.</font></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">After
starting I2P-Bote (by default it is set to start automatically when
your I2P router starts up) it takes a bit more than three minutes for
everything to be up and running. </font>
</p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">So have a
look at 'Network Status' on the left. It should state 'Connected'.</font></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">If you
want to use I2P-Bote for yourself, you first need to create an
identity.</font>
</p>
<p style="line-height: 150%;"><br><br>
</p>
<p style="line-height: 150%;"><font face="Arial, sans-serif"><u>2.2.1
Creating an Identity</u></font></p>
<p style="line-height: 150%;"><br><font face="Arial, sans-serif">Click on
'Identities' on the left, then hit the &#8220;New Identity&#8221; button.</font></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">Enter at
least a 'Public Name' and hit 'Create'. That's all that's needed to
create an identity.</font></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">The
public name is the name you see for this identity (useful in case you
have different identities for different sets of users you communicate
with or different purposes) and it will be sent as &#8220;sender's name&#8221;
to the mail's recipient. There is no need for Public Name to be
unique. </font>
</p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">(As you
can choose any name here &#8211; anyone could call himself HungryHobo
there &#8211; it is not suited to be used by the recipient for telling if
two mails come from the same sender. This is why the name saved in
the local addressbook (there can only by one name per destination
key) is displayed, if there is any, and you will see a green mark in
the &#8220;Know&#8221; column, stating it is the locally known name. If there
is no entry for a destination in local addressbook, the name
specified by the sender will be displayed with a prefixed {UNK} in
the mail clients).</font></p>
<p style="line-height: 150%;"><br><font face="Arial, sans-serif">You can
also fill out the other fields, if you like:</font></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">Description
&#8211; this field is kept locally. It's just for your convenience: If
you want to add some additional information for yourself about that
identity, you can enter it here. </font>
</p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">Email
Address &#8211; this field is not used yet.<font color="#ff0000"><br></font></font><br><font color="#000000"><font face="Arial, sans-serif">Choose
from one of the given encryption algorithms. If in doubt, stick to
the defaults.</font></font></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">You click
on the name of one of your identities and copy the long key displayed
under 'Email Destination'. This is your I2P-Bote e-mail address. If
you want anybody to be able to send you a bote mail, he need to be
given this long key.</font><br>
<br><font face="Arial, sans-serif">Now you
can send and receive I2P-Bote mails.</font></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">But you
should also have a look at your I2P-Bote settings and see if they fit
your needs.</font></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">(You can
also create various identities and assign different settings to each
of them.)</font></p>
<p style="line-height: 150%;"><br></p><p style="line-height: 150%;"><font face="Arial, sans-serif"><u><br>
2.2.2
Sending and Receiving E-Mails</u></font></p>
<p style="line-height: 150%;"><br>
</p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">You need
to have the I2P-Bote e-mail destination key of the user you to whom
you want to send a bote mail. </font>
</p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">In order
to send a message, click on 'New', choose your own sender identity or
'Anonymous' under &#8220;From&#8221; and enter the recipient's e-mail
destination key or alternatively an address in the &#8220;To:&#8221; line.</font></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">Alternatively,
you can hit the &#8220;Addr. Book&#8221; button right under this very line,
in order to chose from e-mail dests stored locally in your address
book: Mark the user(s) to which you want your mail to be sent and hit
the &#8220;Add Recipients&#8221; button.)</font></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">You can
add several recipients and change the 'To:' to 'CC:' or 'BCC:'.</font></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">The &#8220;+&#8221;
button adds additional recipient lines.</font></p>
<p style="line-height: 150%;"><br>
</p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">Now write
your bote mail and hit 'Send' for sending it, or 'Save' in order to
store it as a draft into your 'drafts' folder or any user-defined
folder. [<font color="#ff0000">not yet implemented</font>]</font></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">Hitting
&#8220;Send&#8221; will place your e-mail into the Outbox folder and you can
go on using I2P-Bote, e.g. writing another e-mail, or simply do other
things. I2P-Bote is now sending your e-mail. Once it is sent, it's
automatically removed from Outbox and stored into your Sent folder.
This means, your mail is entirely on the way to its destination
(unless you have set a delay time, which is disabled by default).</font></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">In
I2P-Bote e-mails are automatically signed (unless send without any
sender identity).<br>
You can
also send e-mails without specifying <i>any </i><span style="font-style: normal;">sender
identity/destination/address, just select &#8220;Anonymous&#8221; in the
scroll-down menu &#8220;From:&#8221;.</span></font></p>
<p style="line-height: 150%;"><br><font face="Arial, sans-serif">In the
default settings I2P-Bote will automatically check for new mails, and
all you need to do in order to see if you got e-mails is look into
your Inbox (link 'Inbox' on the left).<br>
You can
force a manual check by clicking the 'Check Mail' button. This is a
global checking, that tries to fetch new mails for all of your
identities, except for those you have excluded from global checking.
[<font color="#ff0000">not yet implemented</font>]</font></p>
<p style="line-height: 150%;"><br><font face="Arial, sans-serif">The
number of unread e-mails is shown in parenthesis next to the folder's
name in the sidebar. </font>
</p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">Click on
&#8220;<span style="font-style: normal;">Inbox&#8221;</span> to have a list of
received e-mails displayed. You will see two columns with x's or
green checks. Those show you if a mail contains a valid signature and
is thus authentic (Sig) and if the sender's e-mail destination key is
locally known, i.e. in your addressbook (Know). Hence, two green
checks next to a mail entry mean that you already know that e-mail
identity and that the mail is signed by that identity. </font>
</p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">If you
have a certain name in your address book and you get a mail from an
identity with that name, yet Know is <i><u>not</u></i><i> </i><span style="font-style: normal;">displaying
a green check, then it is a </span><i><u>different</u></i><span style="font-style: normal;">
destination that sent and signed this mail; he simply has chosen the
same name you have chosen for one of your contacts.</span></font></p>
<p style="font-style: normal; line-height: 150%;"><font face="Arial, sans-serif">Is
there a green check mark for &#8220;Sig&#8221;, then the mail is correctly
signed by the sender and you may add it to your addressbook under a
different name, which now will be displayed as the sender.</font></p>
<p style="font-style: normal; line-height: 150%;"><font face="Arial, sans-serif">Of
course, a mail without sender destination (&#8220;Anonymous&#8221; is
displayed as sender) will have two x's.</font></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">Clicking
one of the e-mails displayed in your inbox will open the mail. </font>
</p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">The same
applies to all other folders.</font></p>
<p style="line-height: 150%;"><br><font face="Arial, sans-serif">(Due to
the distributed nature of I2P-Bote, sending as well as checking for
and retrieving e-mails takes a few minutes. With mail routes
activated respectively more. But you need not keep the browser open
for that, simply leave I2P-Bote running as a background process &#8211;
this is also benefits your anonymity)</font></p>
<p style="line-height: 150%;"><br>
</p>
<p style="line-height: 150%;"><br><font face="Arial, sans-serif"><u>2.2.3
Local Address Book</u></font></p>
<p style="line-height: 150%;"><br><font face="Arial, sans-serif">If you
have the I2P-Bote e-mail key from somebody you want to write to more
frequently, it is handy to store that key locally into your address
book (link on the left), specify a name of your own choosing for this
contact and paste his mail destination in the corresponding line,
<font color="#000000">then save.</font></font></p>
<p style="line-height: 150%;"><font color="#000000"><font face="Arial, sans-serif">You
should normally save destinations to your addressbook, so that next
time you get a mail from the same sender it will be shown to be from
the same, locally known sender (&#8220;Loc&#8221; is checked) and a mail sent
by someone else who is just using the same user name will be marked
as NOT known locally (an x in web-UI's 'Know' column or {UNK} before
the sender address in IMAP), so you know it's a new/different one. </font></font>
</p>
<p style="line-height: 150%;"><br><br>
<font face="Arial, sans-serif"><u>2.2.4
Settings (and what they mean)</u></font></p>
<p style="line-height: 150%;"><br><font face="Arial, sans-serif">Under
settings you can choose the I2P-Bote interface's <i>language</i>
(currently English or German) and decide whether even with a
non-English language setting everything that will be automatically
added to an e-mail when replying will nonetheless stay in English, so
that the recipient does not know your I2P-Bote is set to a different
language.<br>Otherwise the recipient could guess about your
nationality which would decrease your anonymity. </font>
</p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">Here you
can also adjust the interval for <i>automatic checking</i> of e-mails
and decide whether or not to send any <i>time stamp</i> with your
mails, indicating date and time when the mail was sent. The time
stamps are always in UTC.</font></p>
<p style="font-style: normal; line-height: 150%;"><font face="Arial, sans-serif">(When
using mail routes, the timestamps are automatically disabled.) [<font color="#ff0000">not
yet implemented</font>]</font></p>
<p style="font-style: normal; line-height: 150%;"><br>
</p>
<p style="line-height: 150%;"><font face="Arial, sans-serif"><i>automatic
checking for e-mails:</i></font></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">For more
comfort there is the &#8220;Check for mail every XX minutes&#8220; option. </font>
</p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">Here you
can specify how often your I2P-Bote app should try to fetch unread
mails for your identities. This can be set on a per-identity basis
[<font color="#ff0000">not yet implemented</font>]</font></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">If you
specify a random offset, then it will not check _exactly_ every XX
minutes, but rather every (XX+-offset*XX)minutes, i.e. after a
randomly chosen time between (1-offset)XX minutes and (1+offset)XX
minutes. [<font color="#ff0000">not yet implemented</font>]</font></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">You can
also totally disable the automatic checking for a given identity.</font></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">(If you
are not sure about these settings, the defaults should be ok for
you.)</font></p>
<p style="line-height: 150%;"><br><br>
<font face="Arial, sans-serif"><i>Mail
routes</i> are chains of I2P-Bote nodes acting as relays/routers for
other peers and obeying to per-hop delays, thus providing the
high-latency transport for increased anonymity. </font>
</p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">You can
specify the number of nodes (here called hops) that should be chained
to form a mail route. Then each of the e-mail packets sent by the
identity that has mail routes enabled will go through a mail route of
n hops before being stored. You can set a delay for each hop
individually, as no hop should know the time a packet will wait at
the next hop, making the timing unpredictable. [<font color="#ff0000">individual
per-hop and per-identity setting of delays not yet implemented</font>]</font></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">As delay
you can specify a time frame (e.g. 60-600 minutes) &#8211; then a random
wait time between the two values will be chosen for the packet at
that hop &#8211; or a fix time, then the packet will be forwarded at that
fix time, e. g. noon UTC, no matter when it arrived. [<font color="#ff0000">fix
time not yet implemented</font>] </font>
</p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">(When
using mail routes, the timestamps are automatically disabled. [<font color="#ff0000">not
yet implemented</font>])</font></p>
<p style="line-height: 150%;"><br><font face="Arial, sans-serif">Under
&#8220;<i>mínimo en el bote</i>&#8221; (minimum threshold number of relay packets that
will be sent) you can specify a threshold. As your node can only act
reliably as a mix, if there are enough foreign packets to mix and to
blend own packets with, it will accumulate messages who's delay time
is over until reaching this lower limit. Only when it is surpassed,
your node starts sending them out in random order. [<font color="#ff0000">Not
yet implemented</font>]</font><br><br>
</p>
<p style="line-height: 150%;"><font face="Arial, sans-serif"><i>exclude
identity from global checking</i> [<font color="#ff0000">Not yet
implemented</font>]</font></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">If you
enable this option for one of your identities, then this one will not
be affected by the global manual checking for mails nor by any global
automatic mail checking.</font></p>
<p style="line-height: 150%;"><br><br>
</p>
<p style="line-height: 150%;"><font face="Arial, sans-serif"><u>2.2.5
E-mails to and from the Internet</u><span style="text-decoration: none;">
[</span><font color="#ff0000"><span style="text-decoration: none;">NOT
YET FULLY IMPLEMENTED!</span></font><span style="text-decoration: none;">]</span></font></p>
<p style="line-height: 150%;"><br><font face="Arial, sans-serif">In order
to be able to send bote mails to the internet and to receive e-mails
from the internet with your I2P-Bote application, you must first
register with an appropriate mail gateway. Currently there is only
one: postman. </font>
</p>
<p style="line-height: 150%;"><br><font face="Arial, sans-serif">1) First, go to:
<a href="http://hq.postman.i2p/?page_id=16">http://hq.postman.i2p/?page_id=16</a> and
register an account. If you already have an account or if you have
just created one as described, proceed with #2.</font></p>
<p style="line-height: 150%;"><br><font face="Arial, sans-serif">2) For an
existing account you can add your I2P-Bote mail destination, so that
e-mails coming from the internet are forwarded to your I2P-Bote app.
To do so go to: <a href="http://hq.postman.i2p/?page_id=74">http://hq.postman.i2p/?page_id=74</a>
and provide the requested information.</font></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">Now all
e-mails sent to that address (<a href="mailto:name@i2pmail.org">name@i2pmail.org</a>
from the outer internet or <a href="mailto:name@mail.i2p">name@mail.i2p</a>
for mails from other postman subscribers) will be forwarded via the
I2P-Bote network to your I2P-Bote app.</font></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">(N.B.
When using the <a href="mailto:name@mail.i2p">name@mail.i2p</a> or
<a href="mailto:name@i2pmail.org">name@i2pmail.org</a> addresses
instead of the long addresses, e-mails are no longer end-to-end
encrypted. Therefore, it is recommended to exchange the I2P-Bote mail
destination keys for communicating within the network. Postman has
offered high quality services in I2P for quite a while already, but
be aware that it's a centralized point that might go offline one day,
or worse be taken over by an evildoer that will manipulate mails. As
for network-internal e-mail communication, I2P-Bote makes sure that
if you use the address keys, nobody can tamper with the mails you
send or receive.)</font></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">If you
want not only to receive e-mails from the internet, but also enable
sending e-mails from I2P-Bote to the internet, you must provide your
I2P-Bote client with the gateway's mail destination key, so that your
I2P-Bote knows where to send those mails to.<br>
You can
do this under &#8220;settings&#8221;. </font><font face="Arial, sans-serif">This
gateway will allow I2P-Bote users to communicate with the standard
e-mail users on the internet as well as with users of postman's
classical i2pmail service (@mail.i2p).</font><br>
<font face="Arial, sans-serif"><br>
In order
to fight abuse, there will be a limitation of the number of e-mails
you can send out to the internet; just like for normal postman mail
service users: If an I2P-Bote user exceeds the quota with outgoing
e-mails, the additional e-mails will be sent back as bounce.</font></p>
<p style="line-height: 150%;"><br><br>
<br>
</p>
<p style="line-height: 150%;"><font face="Arial, sans-serif"><b>3.
Considerations about Anonymity</b></font></p>
<p style="line-height: 150%;"><br>
<font face="Arial, sans-serif">Don't
send identifying information about you (name, address, geographic
location, time zone, age, websites you have just visited or blogged
about, user names, ip numbers, I2P router id, I2P-Bote id, social
security number, credit card number, &#8230;, copies of your passport,
driver's license, home rental contract, photos &#8211; nude or with
clothes &#8211;, documents that contain your username in author's
settings, and many many more)!</font></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif"><br>
If
possible, </font>
</p>
<ul><li><p style="line-height: 150%;"><font face="Arial, sans-serif">leave
I2P-Bote running 24/7,</font></p>
</li><li><p style="line-height: 150%;"><font face="Arial, sans-serif">use
mailroutes with randomized per-hop delays and/or per-hop fixed send
times, [<font color="#ff0000">not yet </font><font color="#ff0000"><i>fully</i></font><font color="#ff0000">
implemented</font>]</font></p>
</li><li><p style="line-height: 150%;"><font face="Arial, sans-serif">use
a long check interval,</font></p>
</li><li><p style="line-height: 150%;"><font face="Arial, sans-serif">use
a long local delay for own packets,</font></p>
</li><li><p style="line-height: 150%;"><font face="Arial, sans-serif">use
a big check interval randomization. [<font color="#ff0000">not yet
implemented</font>]</font></p>
</li></ul>
<p style="line-height: 150%;"><br><font face="Arial, sans-serif">You can
suppress the sending of date and time in the e-mails' header.</font></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">When you
reply to an e-mail, certain markers, such as &#8220;Re: [subject of the
mail you're replying to]&#8221; or &#8220;[username] wrote:&#8221;. Those are
different for the languages you can chose from in your language
settings. However, if you don't want the recipient to know what
language you have set, you can suppress translation of these markers,
so that they will be in English, no matter what you language setting
is. In order to do so, mark &#8220;Use English for text added to outgoing
email ('Re:', 'wrote:', etc.) &#8220;</font></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">Be
careful with the contents you send! Don't include personal
information or information that only you can possess. Don't write I'm
going to bed now, it's late when including time stamps.<br>
The
language in which your write your e-mails, your style and
formulations can also be of interest for an attacker.</font></p>
<p style="line-height: 150%;"><br><font face="Arial, sans-serif">I2P-Bote
also offers the possibility to use different e-mail
identities.<br>Suppose one of you contacts learns about your
identity, as you forgot to erase identifying information in a secret
document you have sent to him. Now if this e-mail's recipient was to
collaborate with others you are in contact with, he could tell them
the real world identity belonging to the Bote address he knows from
you. Thusly, if you communicate with those others using the same Bote
address, they will know who you are.<br>Not so, if you used a
different address for sending mails to them.</font></p>
<p style="line-height: 150%;"><br><br>
<font face="Arial, sans-serif"><b>4.
Technical Concept</b></font></p>
<p style="line-height: 150%;"><br>
<font face="Arial, sans-serif">I2P-Bote
is an end-to-end encrypted, network-internal, fully decentralized
(i.e. serverless) e-mail system. It supports different identities and
does not expose e-mail headers. Currently, it is still alpha software.
It can be accessed via web console, and it has IMAP and SMTP support,
so bote-mails can be read and written by regular email clients.
It is planned to guarantee additional anonymity by
providing a high-latency transport option. All bote-mails are
automatically end-to-end encrypted, so that there's no need to set up
extra e-mail encryption (though you can do that), and bote-mails will
be authenticated automatically. As it is decentralized, there is no
e-mail server that could link different e-mail identities as
communicating with each other (<i>profiling</i>): Even the nodes
relaying the mails will not know the sender and apart from sender and
receiver, only the end of the high-latency mail tunnel and the
storing nodes will know to whom (anonymous identity) the mail is
destined. The original sender can have gone offline, long before the
mail becomes available on the other side. This adds on the degree of
anonymity that can be reached with I2P-Bote. For those who do not
want high delays: All these settings are be user-adjustable, so each
user decides on how much anonymity he wants.</font></p><font face="Arial, sans-serif"><font color="#000000"><br>I2P-Bote
nodes store encrypted e-mails into a Kademlia DHT. Therefore, an
e-mail can be sent through a number of other
nodes (relays) for increased security, or directly to<font face="Arial, sans-serif"><font color="#000000"> a
set of storage nodes for faster delivery. The same applies to
retrieving email.<br>(When using mail routes, timestamps are
automatically disabled.)<br></font>[Retrieving via relays not yet
implemented]</font></font></font>
<p><br>
</p>
<p style="line-height: 150%;"><font color="#000000"><font face="Arial, sans-serif">All
nodes are created equal: There are no "supernodes" or
designated relay/storage nodes. Everybody acts as a potential relay
and storage node. The maximum amount of disk space used for
relayed/stored email packets can be configured by the user.</font></font></p>
<p style="line-height: 150%;"><font color="#000000"><font face="Arial, sans-serif">Before
an email is sent to a relay, it is broken up into packets and
encrypted with the recipient's public key. These packets are stored
redundantly in a distributed hash table (DHT).</font></font></p>
<p style="line-height: 150%;"><font color="#000000"><font face="Arial, sans-serif">They
are kept for at least 100 days, during which the recipient can
download them.</font></font></p>
<p style="line-height: 150%;"><font color="#000000"><font face="Arial, sans-serif">Relay
packets also expire after 100 days or more.</font></font></p>
<p style="line-height: 150%;"><font color="#000000"><font face="Arial, sans-serif">If
a node runs out of email storage space, and there are no old packets
that can be deleted, the node refuses storage requests.</font></font></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">Furthermore,
I2P-Bote sanitizes the mail headers and does not allow any unneeded
information to be transmitted, thus allowing the use of e-mail
clients without prior checks of what this client sends in the mail
headers.</font></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">All the
encryption, path choosing and profiling is done locally so that there
is no trusted party involved.</font></p>
<p style="font-weight: normal; line-height: 150%;"><font face="Arial, sans-serif">Using
I2P-Bote appropriately, that means keeping in mind the considerations
given above and showing some common sense, nobody will be able to
find out who or where you are. And if you are already being observed
and your internet connection sniffed, the observer will not be able
to find out what you send or receive or to whom you are sending to or
receiving from or where your contacts are located.</font></p>
<p style="line-height: 150%;"><br></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif"><br>
Let's go
a bit more into detail:</font></p>
<p style="line-height: 150%;"><br>
</p>
<p style="line-height: 150%;"><font face="Arial, sans-serif"><u>What
I2P-Bote <i>does hide</i>:</u></font></p>
<p style="line-height: 150%;"><br><font face="Arial, sans-serif"><i>I2P-Bote
hides</i> both, the identity and location of sender and receiver, as
well as those of intermediary nodes (relays and storing nodes), the
content of your mails, their size, the number of mails you send.</font></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">Only the
recipient can know the sender's bote mail destination, and if he
choses not to send his destination, not even the recipient will know
it.</font></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">Even if
you send time stamps, your time zone will not be disclosed.</font></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">Furthermore,
I2P-Bote hides ...</font></p>
<p style="line-height: 150%;">&nbsp;&nbsp;&nbsp; <font face="Arial, sans-serif">- the
fact that you run I2P-Bote</font></p>
<p style="line-height: 150%;">&nbsp;&nbsp;&nbsp; <font face="Arial, sans-serif">- the
fact that you send a mail</font></p>
<p style="line-height: 150%;">&nbsp;&nbsp;&nbsp; <font face="Arial, sans-serif">- the
fact that you receive a mail</font></p>
<p style="line-height: 150%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font face="Arial, sans-serif">and
hence</font></p>
<p style="line-height: 150%;">&nbsp;&nbsp;&nbsp; <font face="Arial, sans-serif">- the
time you send a mail</font></p>
<p style="line-height: 150%;">&nbsp;&nbsp;&nbsp; <font face="Arial, sans-serif">- the
time you receive a mail</font></p>
<p style="line-height: 150%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font face="Arial, sans-serif">and</font></p>
<p style="line-height: 150%;">&nbsp;&nbsp;&nbsp; <font face="Arial, sans-serif">- the
upper limit of number of mails an unknown user receives, - nota bene:
an abstract <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; user, no concrete one, just concluding its
existence from the existence of the mail identity<br>&nbsp;&nbsp;&nbsp; - as he
could always have more than one e-mail identity; and the lower limit
as an <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; identity also sends out test and dummy messages</font></p>
<p style="line-height: 150%;"><br><br>
</p>
<p style="line-height: 150%;"><font face="Arial, sans-serif"><u>What
I2P-Bote <i>hides partially</i>: </u></font>
</p>
<p style="line-height: 150%;"><br><font face="Arial, sans-serif">The
I2P-Bote address of the recipient will only be known to sender and
recipient(s). </font>
</p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">In case
of multiple recipients, each one will see all other recipients that
the mail was addressed to via &#8220;To:&#8221; or &#8220;CC:&#8221;. </font>
</p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">All
entries that were under &#8220;BCC:&#8221; will only be visible to the sender
and this very recipient. </font>
</p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">The time
an sent time will, if at all, only be visible to sender and
recipient.</font></p>
<p style="line-height: 150%;"><br><br>
<font face="Arial, sans-serif"><u>What
I2P-Bote <i>can hide</i> optionally: </u></font>
</p>
<p style="line-height: 150%;"><br><br>
<font face="Arial, sans-serif">- If
mail routes are use, the time a bote mail is sent</font></p>
<p style="line-height: 150%;"> <font face="Arial, sans-serif">- If
mail routes are used, the time a bote mail is fetched. [<font color="#ff0000">not
yet implemented</font>]</font></p>
<p style="line-height: 150%;"> <font face="Arial, sans-serif">- If the
sender suppresses timestamps only the sender himself will know when
he sent a<br> mail.</font></p>
<p style="line-height: 150%;"><br><br>
<font face="Arial, sans-serif"><u>What
I2P-Bote <i>cannot hide</i>: </u></font>
</p>
<p style="line-height: 150%;"><font face="Arial, sans-serif"><br>
I2P-Bote
cannot hide the frequency a given identity checks for new mails nor
the number of mails a given identity receives.</font></p>
<p style="line-height: 150%;"><br><br>
</p>
<p style="line-height: 150%;"><font face="Arial, sans-serif"><br>
Not even
for bootstrapping I2P-Bote depends on a central node, as it uses
Seedless.<br>
</font></p>
<p style="line-height: 150%;"><br><br>
<br>
</p>
<p style="line-height: 150%;"><font face="Arial, sans-serif"><b>5
Terminology/Glossary of Terms:</b></font></p>
<p style="line-height: 150%;"><br>
</p>
<p style="line-height: 150%;"><font face="Arial, sans-serif"><i><u>I2P-Bote
(router/node) id</u>:</i></font></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">This is
the id an I2P-Bote router is known as. It is used for contacting this
router, for storing, relaying and fetching mails, but also used in
the hop-to-hop encryption and for simply contacting it via I2P, as it
is at the same the I2P-Bote router's I2P tunnel destination. It is
displayed to represent an I2P-Bote node in the stats.</font></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">So the
router id corresponds to the I2P destination (the address of an
I2P-Bote node on the I2P network - there is no need to know it unless
you are having problems connecting to other I2P-Bote nodes.)</font></p>
<p style="font-weight: normal; line-height: 150%;"><br><font face="Arial, sans-serif"><i><u>I2P-Bote
e-mail destination:</u></i></font></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">The
I2P-Bote e-mail destination (key) is an identifier by which somebody
can be reached via I2P-Bote, so as the name states: an e-mail
destination. Thus it is for I2P-Bote what an e-mail address is for
standard e-mail system: The e-mail destination is the actual address
for sending e-mails, for storing them into and for fetching them from
the DHT. <br>At the same time it used for the end-to-end encryption
of e-mails, header information and attachments. </font>
</p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">An
I2P-Bote e-mail destination is a Base64 string containing a public
encryption key and a signature verification key. Example:</font></p>
<p style="line-height: 150%;">
</p>
<p style="line-height: 150%;">
<font face="Arial, sans-serif">uQtdwFHqbWHGyxZN8wChjWbCcgWrKuoBRNoziEpE8XDt8koHdJiskYXeUyq7JmpG</font></p>
<p style="line-height: 150%;">
<font face="Arial, sans-serif">In8WKXY5LNue~62IXeZ-ppUYDdqi5V~9BZrcbpvgb5tjuu3ZRtHq9Vn6T9hOO1fa</font></p>
<p style="line-height: 150%;">
<font face="Arial, sans-serif">FYZbK-FqHRiKm~lewFjSmfbBf1e6Fb~FLwQqUBTMtKYrRdO1d3xVIm2XXK83k1Da</font></p>
<p style="line-height: 150%;">
<font face="Arial, sans-serif">-nufGASLaHJfsEkwMMDngg8uqRQmoj0THJb6vRfXzRw4qR5a0nj6dodeBfl2NgL9</font></p>
<p style="line-height: 150%;">
<font face="Arial, sans-serif">HfOLInwrD67haJqjFJ8r~vVyOxRDJYFE8~f9b7k3N0YeyUK4RJSoiPXtTBLQ2RFQ</font></p>
<p style="line-height: 150%;">
<font face="Arial, sans-serif">gOaKg4CuKHE0KCigBRU-Fhhc4weUzyU-g~rbTc2SWPlfvZ6n0voSvhvkZI9V52X3</font></p>
<p style="line-height: 150%;">
<font face="Arial, sans-serif">SptDXk3fAEcwnC7lZzza6RNHurSMDMyOTmppAVz6BD8PB4o4RuWq7MQcnF9znElp</font></p>
<p style="line-height: 150%;">
<font face="Arial, sans-serif">HX3Q10QdV3omVZJDNPxo-Wf~CpEd88C9ga4pS~QGIHSWtMPLFazeGeSHCnPzIRYD</font></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif"><br>I2P-Bote
router/node id and I2P-Bote e-mail destinations look similar, but are
completely independent of each other.</font></p>
<p style="line-height: 150%;"><br><font face="Arial, sans-serif"><i><u>E-mail
address:</u></i></font></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">E-mail
addresses in I2P-Bote are shortcuts for e-mail destinations.</font></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">The
e-mail address &lt;--&gt; e-mail destination mappings are stored in
two places: the local address book and the distributed address
directory [<font color="#ff0000">the latter not yet implemented</font>].</font></p>
<p style="line-height: 150%;"><br><font face="Arial, sans-serif"><i><u>I2P-Bote
e-mail identity:</u></i></font></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">The
I2P-Bote e-mail identity is a set of an I2P-Bote e-mail destination
key, the corresponding private keys and a name given to it by the
user. This name will be sent with the destination key if you do not
suppress sending information about the sender.</font></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">However
it will only be displayed for the recipient in case he does not have
a name for this destination in his local address book.</font></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">So
technically speaking, an e-mail identity consists of four things:</font></p>
<p style="line-height: 150%;"> <font face="Arial, sans-serif">* an
e-mail destination (i.e. two public keys)</font></p>
<p style="line-height: 150%;"> <font face="Arial, sans-serif">* two
private keys for the e-mail destination</font></p>
<p style="line-height: 150%;"> <font face="Arial, sans-serif">* a
public name which can be shown to other people in e-mails</font></p>
<p style="line-height: 150%;"> <font face="Arial, sans-serif">* a
description which is not shown to anybody but you.</font></p>
<p style="line-height: 150%;"> <font face="Arial, sans-serif">(It
helps you remember which e-mail identity you use for which purpose.)</font></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">An e-mail
identity is not required for sending emails (although then only
"Anonymous" can be selected for the "sender"
field).</font></p>
<p style="line-height: 150%;"><br></p><p style="line-height: 150%;"><font face="Arial, sans-serif"><span style="text-decoration: underline; font-style: italic;">Mail
routes</span>:</font></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">Mail
routes are an additional high-latency transport for I2P-Bote. For
this, a chain of I2P-Bote nodes is built, acting as relays/routers
for packets and obeying to individual per-hop delays; [<font color="#ff0000">still
no individual setting for delays implemented</font>]</font></p>
<p style="line-height: 150%; font-weight: bold;"><font face="Arial, sans-serif"><br>
BEWARE!</font></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">If you
choose this option - especially with many hops and / or long delay
times, don't be surprised if your mail does not reach its destination
too soon. It will, of course, take longer &#8211; up to several days!</font><br>
</p>
<p style="line-height: 150%;"><br>
<br>
</p>
<p style="line-height: 150%; font-weight: bold; font-style: italic;"><font face="Arial, sans-serif">6.&nbsp; Credits</font></p>
<p style="line-height: 150%;">
</p><p style="line-height: 150%;"><font face="Arial, sans-serif">Idea &amp;
technical concept: HungryHobo, Mixxy</font></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">Implementation:
HungryHobo</font></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">Plugin
support: zzz, HungryHobo</font></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">User
interface: HungryHobo</font></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">Seedless
integration: sponge</font></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">German
translation: HungryHobo</font></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">French
translation: albat, Redzara, Mixxy</font></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">Spanish
translation: Mixxy</font></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">Alpha
testing: HungryHobo, Mixxy, Returning Novice, sponge, and many others</font></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif"><b><br>
<br>
</b></font></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif"><b>7.
Technical Details</b></font></p>
<p style="line-height: 150%;"><font face="Arial, sans-serif">-- see
techdoc.txt --</font></p>
<p style="line-height: 150%;"><br><br>
</p>
<p style="line-height: 150%;"><br><br>
</p>
<p style="line-height: 150%; font-weight: bold; font-style: italic;"><font face="Arial, sans-serif">ENJOY THE
BOTE FEELING!!</font></p>
</body></html>

View File

@ -0,0 +1,862 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=utf-8">
<TITLE>Guide de l'utilisateur</TITLE>
<META NAME="GENERATOR" CONTENT="LibreOffice 3.3 (Linux)">
<META NAME="CREATED" CONTENT="0;0">
<META NAME="CHANGED" CONTENT="20110407;10200100">
<STYLE TYPE="text/css">
<!--
@page { margin: 2cm }
P { margin-bottom: 0.21cm }
A:link { so-language: zxx }
-->
</STYLE>
</HEAD>
<BODY LANG="fr-FR" DIR="LTR">
<P ALIGN=CENTER STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif"><B>Guide
de l'utilisateur I2P-Bote</B></FONT></P>
<P STYLE="line-height: 150%"><BR><BR>
</P>
<P STYLE="line-height: 150%"><BR><BR>
</P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif"><B>1.
Introduction</B></FONT></P>
<P STYLE="line-height: 150%"><BR><BR><FONT FACE="Arial, sans-serif">I2P-Bote
est une application de messagerie sécurisée pour I2P, à anonymat
élevé et simple à utiliser. C'est un système sans serveur,
entièrement décentralisé, qui constitue et génère un réseau
pairs à pairs sur le réseau d'anonymisation I2P, lui-même conçu
selon les règles de l'art ; l'adjonction optionnelle d'un transport
à la façon de Mixminion le débarrasse des faiblesses intrinsèques
des réseaux à basse latence.</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">I2P-Bote
tire donc le meilleur de l'anonymat fourni par I2P, à quoi il
apporte son propre niveau supplémentaire d'anonymat par l'ajout
d'une autre couche d'anonymisation (sur-réseau).</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Ce
concept d'anonymat étagé est ce rend I2P-Bote si souple :</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Vous
pouvez le configurer pour être extrêmement anonyme et lent, ou
moins anonyme mais plus rapide et efficace. Dans tous les cas,
I2P-Bote<FONT COLOR="#000000"> procure toujours un très bon anonymat
à l'expéditeur et au destinataire, ainsi qu'un cryptage de bout en
bout*. </FONT></FONT>
</P>
<P STYLE="line-height: 150%"><FONT COLOR="#000000"><FONT FACE="Arial, sans-serif">I2P-Bote
permet de rendre vos communications encore plus anonymes, en activant
les routes à haute latence au prix d'une baisse de performance,
cependant. Les utilisateurs qui souhaitent que leurs messages
arrivent au plus vite peuvent désactiver les routes de messages et
utiliser l'envoi «&nbsp;direct&nbsp;» sur I2P. Ils sont ainsi
assurés de bénéficier au minimum de l'anonymat d'origine des
connexions I2P. </FONT></FONT>
</P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif"><FONT COLOR="#000000">Pour
atteindre une ergonomie élevée, nous l'avons conçu pour qu'il
puisse fonctionner avec les logiciels clients de messagerie standards
tels que Thunderbird, Evolution ou Kmail, sans avoir à se préoccuper
des informations supplémentaires que ces applications envoient dans
leurs en-têtes [</FONT><FONT COLOR="#ff0000">PAS ENCORE IMPLÉMENTÉ</FONT><FONT COLOR="#000000">].
De plus, il y a une interface web qui vous permet d'envoyer et de
recevoir des messages, et de gérer vos préférences et vos
identités.</FONT></FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">I2P-Bote
est facile à utiliser : si vous n'utilisez pas déjà I2P, installez
le depuis <A HREF="http://www.i2p2.de/">http://www.i2p2.de</A> puis
installez le greffon I2P-Bote comme expliqué dans ce manuel. Sinon,
continuez la lecture!**</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif"><I>La
version actuelle est la 0.2.6.</I></FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">*Sauf si
vous recevez ou envoyez des messages de/vers l'Internet classique,
TOUS les messages le corps, les pièces jointes et les en-têtes
à part l'adresse du destinataire (objet, date et heure,
expéditeur,...) sont automatiquement cryptés de bout en bout de
façon transparente. L'adresse du destinataire n'est visible que par
le dernier nœud de la route qui stocke les paquets dans le réseau
kad, ainsi que par les nœuds de stockage, mais ils ne peuvent pas
lire les messages, ni qui l'a envoyé, ni qui le relèvera.</FONT></P>
<P STYLE="line-height: 150%"><BR><BR>
</P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">**Bien
sûr, vous pouvez aussi le compiler à partir des sources.</FONT></P>
<P STYLE="line-height: 150%"><BR><BR>
</P>
<P STYLE="line-height: 150%"><BR><BR>
</P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif"><B>2.
Procédures</B></FONT></P>
<P STYLE="line-height: 150%"><BR><BR>
</P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif"><U>2.1.
Installation</U></FONT></P>
<P STYLE="line-height: 150%"><BR><BR>
</P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Pour
installer I2P-Bote, rendez-vous en bas de la page de configuration du
client I2P sur </FONT>
</P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif"><A HREF="http://localhost:7657/configclients.jsp">http://localhost:7657/configclients.jsp</A>
</FONT>
</P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">en entrez
:</FONT></P>
<P STYLE="line-height: 150%"><A HREF="http://tjgidoycrw6s3guetge3kvrvynppqjmvqsosmtbmgqasa6vmsf6a.b32.i2p/i2pbote.xpi2p"><FONT FACE="Arial, sans-serif">http://tjgidoycrw6s3guetge3kvrvynppqjmvqsosmtbmgqasa6vmsf6a.b32.i2p/i2pbote.xpi2p</FONT></A></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">(<A HREF="http://i2pbote.i2p/i2pbote.xpi2p">http://i2pbote.i2p/i2pbote.xpi2p</A>
marche aussi, si vous avez i2pbote.i2p dans votre carnet d'adresses
ou un abonnement)</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">dans le
champ «&nbsp;…, URL de téléchargement&nbsp;:&nbsp;», puis
cliquez sur le bouton «&nbsp;Installer le greffon&nbsp;». Attendez
jusque à ce que le panneau de surveillance sur la gauche indique que
le greffon est installé et démarré. </FONT>
</P>
<P STYLE="line-height: 150%"><BR><BR>
</P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Pour
mettre à jour I2P-Bote, dans la même page, cliquez sur «&nbsp;Mise
à jour&nbsp;»dans le cadre dédié au greffon une fois celui-ci
installé.</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif"><U>2.2.
Utiliser I2P-Bote</U></FONT></P>
<P STYLE="line-height: 150%"><BR><FONT FACE="Arial, sans-serif">Dans
la console du routeur <A HREF="http://127.0.0.1:7657/">http://127.0.0.1:7657/</A>
cliquez sur </FONT><FONT FACE="Arial, sans-serif"><I>SecureMail</I></FONT>
<FONT FACE="Arial, sans-serif">en haut à gauche dans le panneau de
surveillance. Vous êtes maintenant dans l'interface web d'I2P-Bote.</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Après
son lancement, I2P-Bote a besoin d'un peu plus de trois minutes pour
être entièrement opérationnel (Il est configuré pour démarrer
automatiquement en même temps que le routeur). </FONT>
</P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Donc,
quand le panneau de surveillance indique «&nbsp;Réseau&nbsp;: OK&nbsp;»,
c'est prêt..</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Si vous
utiliser I2P-Bote pour vous-même, il vous faut créer une identité.</FONT>
</P>
<P STYLE="line-height: 150%"><BR><BR>
</P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif"><U>2.2.1
Création d'une identité</U></FONT></P>
<P STYLE="line-height: 150%"><BR><FONT FACE="Arial, sans-serif">Cliquez
sur «&nbsp;Identités&nbsp;» sur la gauche, puis sur le bouton
«&nbsp;Nouvelle identité&nbsp;».</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Entrez au
moins un «&nbsp;Nom public&nbsp;» et cliquez sur «&nbsp;Créer&nbsp;».
C'est tout ce qu'il faut faire pour créer une identité.</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Le nom
public est le nom que vous voyez pour cette identité (utile quand
vous en avez plusieurs, pour communiquer avec différents groupes
d'utilisateurs ou pour des besoins différents) et il sera envoyé
aux destinataires en tant que «&nbsp;nom d'expéditeur&nbsp;». Il
n'est pas nécessaire qu'il soit unique. </FONT>
</P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">(Comme on
peut choisir ici n'importe quel nom n'importe qui pourrait
choisir ici HungryHobo comme nom public ce champ n'est pas conçu
pour apporter au destinataire la certitude que deux messages
proviennent du même expéditeur. C'est pourquoi c'est le nom
sauvegardé dans le carnet d'adresses local [il ne peut y avoir qu'un
seul nom par clé de destination] qui est affiché dans la boîte de
réception si l'expéditeur en a sélectionné un lors de l'envoi
[envoi non anonyme], et vous verrez alors une marque verte dans la
colonne «&nbsp;Connu&nbsp;» même si le nom public spécifié par
l'expéditeur est différent pour cette sienne identité, indiquant
ainsi qu'il s'agit bien de la destination connue localement. S'il n'y
a pas d'entrée pour une destination donnée dans le carnet
d'adresses, le nom indiqué par l'expéditeur est affiché précédé
du préfixe [UNK] dans les logiciels clients de messagerie) [<FONT COLOR="#ff0000">POP3
N'EST PAS ENCORE IMPLÉMENTÉ</FONT>].</FONT></P>
<P STYLE="line-height: 150%"><BR><FONT FACE="Arial, sans-serif">Vous
pouvez aussi compléter les autres champs, si vous le souhaitez :</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Description
ce champ est conservé localement, pas diffusé. Il ne sert qu'à
vous : si vous voulez ajouter des informations supplémentaires à
votre usage au sujet de cette identité, ce champ est prévu pour
cela. </FONT>
</P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Adresse
e-mail champ pas encore utilisé.</FONT><FONT COLOR="#ff0000"><FONT FACE="Arial, sans-serif"><BR></FONT></FONT><BR><FONT COLOR="#000000"><FONT FACE="Arial, sans-serif">Choisissez
un algorithme de cryptage parmi ceux proposés. Dans le doute, gardez
celui proposé par défaut.</FONT></FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Vous
pouvez cliquer sur une de vos identités et copier la longue clé
affichée sous «&nbsp;Destination de messagerie&nbsp;». C'est votre
adresse e-mail I2P-Bote. Si vous voulez recevoir des messages de
quelqu'un, il faudra la lui transmettre.</FONT><BR><BR><FONT FACE="Arial, sans-serif">Vous
pouvez maintenant envoyer et recevoir des messages I2P-Bote.</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Mais vous
devriez regarder les réglages d'I2P-Bote et vous assurer qu'il sont
conformes à vos besoins.</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">(Vous
pouvez créer plusieurs identités et leur associer des réglages
différents.)</FONT></P>
<P STYLE="line-height: 150%"><BR><BR>
</P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif"><U><BR>2.2.2
Envoyer et recevoir des messages</U></FONT></P>
<P STYLE="line-height: 150%"><BR><BR>
</P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Vous avez
besoin de la clé de destination de message I2P-Bote du correspondant
à qui vous voulez envoyer un message bote. </FONT>
</P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Pour
envoyer un message, cliquez sur «&nbsp;Nouveau&nbsp;», choisissez
votre identité d'expéditeur ou «&nbsp;Anonyme&nbsp;» dans le
champ «&nbsp;De&nbsp;:&nbsp;» et entrez la destination du
destinataire dans le champ «&nbsp;À&nbsp;:&nbsp;», ou une adresse
mail.</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">(Vous
pouvez aussi cliquer sur le bouton «&nbsp;Carnet d'adresses&nbsp;»
tout proche de ce champ, pour choisir une destination stockée
localement dans votre carnet d'adresses&nbsp;: cochez le/les
utilisateur(s) destinataires et cliquez sur le bouton “Ajouter les
destinataires&nbsp;»)</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Vous
pouvez ajouter plusieurs destinataires et changer l'attribut «&nbsp;À&nbsp;:&nbsp;»
pour «&nbsp;Cc:&nbsp;» ou «&nbsp;Cci:&nbsp;».</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Le bouton
«&nbsp;+&nbsp;» ajoute des lignes destinataires supplémentaires.</FONT></P>
<P STYLE="line-height: 150%"><BR><BR>
</P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Rédigez
maintenant votre message bote et cliquez sur «&nbsp;Envoyer&nbsp;»pour...
l'envoyer, ou «&nbsp;Enregistrer&nbsp;» pour le sauvegarder dans
votre dossier «&nbsp;Brouillons&nbsp;» ou tout autre dossier
personnel [<FONT COLOR="#ff0000">pas encore implémenté</FONT>].</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">L'action
d'envoi déplace le message dans le dossier «&nbsp;Boîte d'envoi&nbsp;»
et vous pouvez continuer à utiliser I2P-Bote, par exemple pour
écrire un autre message, gérer votre carnet d'adresses, etc...
I2P-Bote est alors en train d'envoyer votre message. Une fois envoyé,
il est déplacé de la boîte d'envoi vers le dossier «&nbsp;Courriers
envoyés&nbsp;». Votre message est en route (à moins que vous
n'ayez défini un retard, ce qui n'est pas activé pas défaut).</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Dans
I2P-Bote, les messages sont signés automatiquement (sauf ceux que
vous envoyez comme «&nbsp;Anonyme&nbsp;», c'est à dire sans
choisir d'identité d'expéditeur)&nbsp;: en effet, vous pouvez
décider de ne pas choisir d'identité d'expéditeur.</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">De par
les réglages par défaut, I2P-Bote relève le automatiquement
courrier, et tout ce que vous avez à faire pour savoir si vous avez
reçu de nouveaux messages est de regarder dans la boîte de
réception (lien sur la gauche).<BR>Vous pouvez forcer une relève en
cliquant cliquant sur le bouton «&nbsp;Relever le courrier&nbsp;».
C'est une vérification globale qui tente de récupérer les nouveaux
messages destinés à toutes vos identités à l'exception de celles
exclues de cette fonctionnalité [</FONT><FONT COLOR="#ff0000"><FONT FACE="Arial, sans-serif">pas
encore implémenté</FONT></FONT><FONT FACE="Arial, sans-serif">].</FONT></P>
<P STYLE="line-height: 150%"><BR><FONT FACE="Arial, sans-serif">Le
nombre de messages non lus est indiqué entre parenthèses à
proximité du nom du dossier dans le cadre de gauche. </FONT>
</P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Cliquez
sur «&nbsp;Boîte de réception&nbsp;» pour visualiser la liste des
messages reçus. Vous y voyez deux colonnes peuplées de «&nbsp;x&nbsp;»
et de coches vertes. Elles vous indiquent si le message en question
contient un signature valide et qu'il est donc certifié comme
authentique et intègre (Sig), et si la destination de l'expéditeur
est déjà connue, c'est à dire déjà enregistrée dans votre
carnet d'adresses (Connu). Donc, deux coches vertes pour un message
signalent que vous connaissez son expéditeur et que le message a été
signalé par lui. </FONT>
</P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Si vous
avez dans votre carnet d'adresses un certain nom et que vous recevez
un message de la part d'une identité affichant ce nom, alors si la
colonne «&nbsp;Connu&nbsp;» <U>n'indique pas</U> une <SPAN STYLE="font-style: normal">coche
verte, c'est que le message provient d'une destination </SPAN><SPAN STYLE="font-style: normal"><U>différente</U></SPAN>
<SPAN STYLE="font-style: normal">de celle contenue dans votre carnet
d'adresses&nbsp;; son propriétaire a simplement choisi le même nom
que celui d'un de vos contacts déjà enregistré.</SPAN></FONT></P>
<P STYLE="font-style: normal; line-height: 150%"><FONT FACE="Arial, sans-serif">S'il
y a une coche verte dans la colonne «&nbsp;Sig&nbsp;», c'est que le
message est correctement signé et vous pouvez ajouter l'expéditeur
à votre carnet d'adresses sous un nom différent qui sera dès lors
affiché en tant qu'expéditeur.</FONT></P>
<P STYLE="font-style: normal; line-height: 150%"><FONT FACE="Arial, sans-serif">Évidemment,
un message sans destination d'expéditeur (“Anonyme” affiché
comme expéditeur) sera repéré par deux marques «&nbsp;x&nbsp;».</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Un clic
sur un des messages de la liste ouvre celui-ci. </FONT>
</P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Ceci vaut
pour tous les autres dossiers.</FONT></P>
<P STYLE="line-height: 150%"><BR><FONT FACE="Arial, sans-serif">(De
par la nature décentralisée d'I2P-Bote, l'envoi comme la relève
prennent quelques minutes. Sensiblement plus lorsque les routes de
messages sont activées. Mais vous n'avez pas besoin de garder le
navigateur ouvert&nbsp;: il suffit de laisser tourner I2P-Bote en
tant que processus d'arrière plan ce dont profite aussi votre
anonymat)</FONT></P>
<P STYLE="line-height: 150%"><BR><BR>
</P>
<P STYLE="line-height: 150%"><BR><FONT FACE="Arial, sans-serif"><U>2.2.3
Carnet d'adresses local</U></FONT></P>
<P STYLE="line-height: 150%"><BR><FONT FACE="Arial, sans-serif">Si
vous avez la clé de destination I2P-Bote de quelqu'un à qui vous
voulez écrire souvent, il est commode de l'enregistrer dans votre
carnet d'adresses local (lien sur la gauche)&nbsp;: choisissez un nom
(de façon complètement arbitraire), collez la clé dans le champ
idoine et sauvegardez.</FONT></P>
<P STYLE="line-height: 150%"><FONT COLOR="#000000"><FONT FACE="Arial, sans-serif">C'est
normalement ce que vous devriez faire, en sorte que le prochain
message de ce destinataire soit marqué comme «&nbsp;Connu&nbsp;»,
alors qu'un message d'un autre expéditeur de même nom serait marqué
d'un «&nbsp;x&nbsp;» (ou préfixé [UNK] dans un client de
messagerie), vous prévenant ainsi qu'il provient de quelqu'un
d'autre. </FONT></FONT>
</P>
<P STYLE="line-height: 150%"><BR><BR><FONT FACE="Arial, sans-serif"><U>2.2.4
Les préférences de réglages (et ce qu'elles signifient)</U></FONT></P>
<P STYLE="line-height: 150%"><BR><FONT FACE="Arial, sans-serif">Dans
les préférences vous pouvez choisir la langue de l'interface
d'I2P-Bote et décider que même si vous choisissez une autre langue,
tout ce qui sera automatiquement ajouté comme titres d'en-têtes
restera cependant en anglais pour ne pas dévoiler votre langue (et
par là même, peut-être en déduire votre nationalité et
compromettre votre anonymat à ce sujet, la FAQ I2P-Bote et le
chapitre 3 de ce manuel donnent d'autres conseils).</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Vous
pouvez aussi régler l'intervalle de relève automatique, et
l'inclusion ou l'exclusion des horodatages pour vos messages (les
horodatages sont toujours en UTC).</FONT></P>
<P STYLE="font-style: normal; line-height: 150%"><FONT FACE="Arial, sans-serif">(Quand
vous utilisez les routes de messages, les horodatages sont
automatiquement désactivés [<FONT COLOR="#ff0000">pas encore
implémenté</FONT>]).</FONT></P>
<P STYLE="line-height: 150%"><BR><BR>
</P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif"><I>Relève
automatique:</I></FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Pour le
confort d'utilisation, cochez «&nbsp;Relever le courrier toutes les
XX minutes&nbsp;:&nbsp;» et saisissez la valeur de l'intervalle. </FONT>
</P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Ceci
définit la fréquence de tentatives de téléchargement de nouveaux
messages pour vos identités. Ça peut être différentié par
identité [<FONT COLOR="#ff0000">pas encore implémenté</FONT>].</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Si vous
définissez un décalage aléatoire, la relève n'aura pas lieu
exactement toutes les XX minutes, mais toutes les
(XX+/-décalage*XX)minutes, c'est à dire après un temps aléatoire
compris entre (1-décalage)*XX minutes et (1+décalage)*XX minutes
[<FONT COLOR="#ff0000">pas encore implémenté</FONT>].</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Vous
pouvez également désactiver complètement la relève automatique
pour une identité donnée.</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">(Si vous
n'êtes pas à l'aise avec ces réglages, les valeurs par défaut
vous conviendront très bien)</FONT></P>
<P STYLE="line-height: 150%"><BR><BR><FONT FACE="Arial, sans-serif">Les
</FONT><FONT FACE="Arial, sans-serif"><I>Routes de messagerie </I></FONT><FONT FACE="Arial, sans-serif">sont
des chînes de nœuds I2P-Bote agissant en tant que routeurs relais
pour le compte d'autres pairs et obéissant à des délais par saut
définis par l'expéditeur, fournissant ainsi le transport à haute
latence garant d'un anonymat plus élevé. </FONT>
</P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Vous
pouvez spécifier le nombre de nœuds (sauts) nécessaires à la
constitution d'une route de messagerie. Ensuite, chacun des paquets
de message envoyés par l'identité qui a activé la fonction routes
de messagerie passera par une route de n sauts avant d'être stocké.
Vous pouvez définir un délai pour chaque saut individuel, pour
qu'aucun saut ne puisse savoir combien de temps le paquet attendra au
niveau du saut suivant, ce qui rend la prédiction horaire impossible
[<FONT COLOR="#ff0000">les définitions des retards par saut et par
identité ne sont pas encore implémentées</FONT>].</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Vous
pouvez définir une tranche de temps (p.e. 60-600 minutes) puis
un retard aléatoire entre ces deux valeurs sera choisi pour le
paquet au niveau de tel saut ou une heure fixe à laquelle le
paquet sera transféré, p.e. cet après-midi UTC, indépendamment du
moment où il est arrivé [<FONT COLOR="#ff0000">heure fixe pas
encore implémentée</FONT>]. </FONT>
</P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">(Quand
vous utilisez les routes de messagerie, les horodatages sont
automatiquement désactivés [<FONT COLOR="#ff0000">pas encore
implémenté</FONT>]).</FONT></P>
<P STYLE="line-height: 150%"><BR><FONT FACE="Arial, sans-serif">Sous
«&nbsp; </FONT><FONT FACE="Arial, sans-serif"><I>Minimum dans la
messagerie</I></FONT>&nbsp;<FONT FACE="Arial, sans-serif">» (nombre
minimum de paquets relayés à envoyer), vous pouvez indiquer un
seuil. Comme votre instance I2P-Bote peut fonctionner comme un relais
mélangeur, s'il y a suffisamment de paquets étrangers à mélanger
et avec lesquels camoufler les vôtres, elle va accumuler les
messages pour lesquels le retard demandé n'est pas échu jusqu'à
atteindre ce seuil. Une fois atteint, votre bote commence à les
transférer aléatoirement [</FONT><FONT COLOR="#ff0000"><FONT FACE="Arial, sans-serif">pas
encore implémenté</FONT></FONT><FONT FACE="Arial, sans-serif">].</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif"><I>Exclure
l'identité de la relève globale</I> [<FONT COLOR="#ff0000">pas
encore implémenté</FONT>].</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Si vous
activez cette option pour une de vos identités, elle ne sera pas
prise en compte ni par la fonction de relève globale automatique
planifiée, ni par la relève manuelle globale.</FONT></P>
<P STYLE="line-height: 150%"><BR><BR>
</P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif"><U>2.2.5
E-mails de et vers l'Internet</U><SPAN STYLE="text-decoration: none">
[</SPAN><FONT COLOR="#ff0000"><SPAN STYLE="text-decoration: none">NOT
YET FULLY IMPLEMENTED!</SPAN></FONT><SPAN STYLE="text-decoration: none">]</SPAN></FONT></P>
<P STYLE="line-height: 150%"><BR><FONT FACE="Arial, sans-serif">Pour
pouvoir envoyer des messages bote vers l'Internet et recevoir des
e-mails venant de l'Internet dans l'application I2P-Bote, vous devez
d'abord vous enregistrer auprès d'une passerelle de messagerie. Il
n'y en a actuellement qu'une seule&nbsp;: postman. </FONT>
</P>
<P STYLE="line-height: 150%"><BR><FONT FACE="Arial, sans-serif">1)
D'abord, allez sur : <A HREF="http://hq.postman.i2p/?page_id=16">http://hq.postman.i2p/?page_id=16</A>
et créez un compte. Si vous en avez déjà un, ou si vous venez de
le créer, passer à l'étape 2).</FONT></P>
<P STYLE="line-height: 150%"><BR><FONT FACE="Arial, sans-serif">2)
Pour un compte donné, vous pouvez ajouter votre clé de destination
de messagerie, pour que les messages arrivant d'Internet puissent
être transférés vers votre application I2P-Bote. Pour ce faire
allez sur : <A HREF="http://hq.postman.i2p/?page_id=74">http://hq.postman.i2p/?page_id=74</A>
et indiquez les informations demandées.</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Maintenant,
tous les e-mails envoyés à cette adresse (<A HREF="mailto:name@i2pmail.org">nom@i2pmail.org</A>
depuis l'Internet externe ou depuis <A HREF="mailto:name@mail.i2p">blaze@mail.i2p</A>
pour les messages d'autres comptes postman) seront transférés par
le réseau I2P-Bote à votre application I2P-Bote.</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">(N.B. En
utilisant les adresses <A HREF="mailto:name@mail.i2p">nom@mail.i2p</A>
ou <A HREF="mailto:name@i2pmail.org">nom@i2pmail.org</A> au lieu des
longues clés de destination, les messages ne sont plus cryptés de
bout en bout. En conséquence, il est recommandé d'échanger les
clés I2P-Bote pour la communication intra réseau. Postman offre des
services de haute qualité sur I2P depuis déjà un bon moment, mais
soyez conscient qu'il s'agit d'un point centralisé qui pourrait un
jour cesser de fonctionner, ou pire, tomber sous le contrôle d'un
nuisible qui pourrait manipuler les courriers. Comme pour la
messagerie intra réseau, I2P-Bote vous assure que si vous utilisez
des clés de destination, personne ne peut bricoler les messages que
vous recevez ou envoyez.)</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Si vous
voulez non seulement recevoir des messages d'Internet, mais aussi
pouvoir en envoyer vers Internet depuis I2P-Bote, vous devez indiquer
à votre application cliente I2P-Bote la clé de destination de la
passerelle de messagerie, pour que votre I2P-Bote sache où envoyer
les messages.<BR>Ceci se fait dans les «&nbsp;Préférences&nbsp;».
Cette passerelle permet aux utilisateurs d'I2P-Bote de communiquer
avec les utilisateurs de messagerie standard sur l'Internet classique
et avec ceux qui utilisent le service i2pmail de postman
(@mail.i2p).</FONT><BR><FONT FACE="Arial, sans-serif"><BR>Pour
combattre les abus, il y a une limitation au nombre de messages que
vous pouvez envoyer vers Internet, comme avec le service normal de
postman&nbsp;: si un utilisateur d'I2P-Bote dépasse le quota de
messages envoyés, les messages supplémentaires sont retournés à
l'envoyeur.</FONT></P>
<P STYLE="line-height: 150%"><BR><BR><BR>
</P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif"><B>3.
Considérations sur l'anonymat</B></FONT></P>
<P STYLE="line-height: 150%"><BR><FONT FACE="Arial, sans-serif">N'envoyez
pas d'informations susceptibles de vous identifier (nom, adresse,
situation géographique, fuseau horaire, horodatages, âge, sites web
que vous venez de visiter ou sur lesquels vous venez de parler sur un
blog, noms d'utilisateurs, adresses IP, identités de routeur I2P
routeur, de nœud I2P-Bote, numéros de sécurité sociale, de carte
de crédit, …, copies de passeport, de permis de conduire, de
contrats de location, de photos nu ou habillé , documents qui
contiennent votre nom comme auteur dans les réglages, et une
multitude d'autres) !</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif"><BR>Si
possible, </FONT>
</P>
<UL>
<LI><P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">laissez
I2P-Bote tourner 24h/24 7j/7,</FONT></P>
<LI><P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">utilisez
les routes de messagerie en conjonction avec les retards aléatoires
ou fixes par saut [<FONT COLOR="#ff0000">pas encore </FONT><FONT COLOR="#ff0000"><I>complètement</I></FONT><FONT COLOR="#ff0000">
implémenté</FONT>],</FONT></P>
<LI><P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">utilisez
un intervalle de relève long,</FONT></P>
<LI><P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">utilisez
un long retard pour vos propres paquets,</FONT></P>
<LI><P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">utilisez
un large intervalle de relève aléatoire [<FONT COLOR="#ff0000">pas
encore implémenté</FONT>].</FONT></P>
</UL>
<P STYLE="line-height: 150%"><BR><FONT FACE="Arial, sans-serif">Vous
pouvez supprimer l'envoi des horodatages des en-têtes de messages.</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Quand
vous répondez, certains marqueurs comme, «&nbsp;Rép: [Top
secret]&nbsp;» ou «&nbsp;[mégaphone] a écrit :&nbsp;» sont
ajoutés à votre réponse. Ils diffèrent d'une langue à l'autre,
suivant vos préférences de réglage de langue de l'interface
d'I2P-Bote. Cependant, si vous ne voulez pas que vos destinataires
puissent savoir comment vous avez effectué ce réglage (révélateur
de votre langue et peut-être de votre nationalité), vous pouvez
désactiver la traduction de ces marqueurs pour qu'il restent en
anglais, quelle que soit votre réglage de langue&nbsp;: Cochez la
case «&nbsp;Utiliser l'anglais pour les titres d'en-têtes de
messages sortants ('Re', 'wrote', etc.)&nbsp;».</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Soyez
prudent sur le contenu de vos envois! N'incluez pas d'information
personnelles ou des informations que vous seul pouvez posséder.
N'écrivez pas «&nbsp;je vais me coucher, il est tard&nbsp;»,
lorsque les tampons horaires ne sont pas désactivés.<BR>La langue
dans laquelle vous écrivez, votre style et vos particularités
d'expression sont autant d'autres éléments qui pourraient
intéresser un attaquant.</FONT></P>
<P STYLE="line-height: 150%"><BR><FONT FACE="Arial, sans-serif">I2P-Bote
permet aussi l'utilisation d'identités multiples. Supposez qu'un de
vos contacts découvre votre identité, car vous avez oublié
d'enlever une information vous concernant d'un document confidentiel
que vous lui avez transmis (par erreur ou pas). Maintenant, si ce
correspondant est amené a communiquer/collaborer avec d'autres de
vos contacts, il pourrait leur révéler l'identité réelle liée à
l'identité Bote qu'il connait de vous. Donc, si vous communiquez
avec ces autres avec la même adresse il vous reconnaitrons. Ils ne
pourraient pas si vous aviez utilisé une identité différente pour
vous adresser à eux.</FONT></P>
<P STYLE="line-height: 150%"><BR><BR><FONT FACE="Arial, sans-serif"><B>4.
Concept technique</B></FONT></P>
<P STYLE="line-height: 150%"><BR><FONT FACE="Arial, sans-serif">I2P-Bote
est un système de messagerie totalement décentralisé (sans
serveur) intra réseau crypté de bout en bout. Il supporte
l'utilisation d'identités multiples et n'expose pas les en-têtes de
messages. Il est actuellement encore en version alpha et ne peut être
utilisé que par son interface web intégré à la console du routeur
I2P. Il disposera bientôt du support de POP3, et il est prévu qu'il
garantisse un niveau d'anonymat supplémentaire via une option de
transport à haute latence. Tous les messages bote sont cryptés
automatiquement de bout en bout, de telle sorte qu'il ne soit pas
nécessaire d'utiliser un autre système de cryptage (bien que ça
soit possible), et les messages sont automatiquement authentifiés.
Comme il est décentralisé, il n'y a pas de serveur de messagerie
qui puisse établir de relation entre différentes identités en tant
qu'elles communiqueraient les unes avec les autres (profilage) : même
les nœuds relayant les messages ne connaissent pas l'expéditeur, et
hormis l'expéditeur et le destinataire, seuls le point terminal du
tunnel de messages à haute latence et les nœuds de stockage savent
à qui (identité anonyme) le message est destiné. L'expéditeur
peut être passé hors ligne depuis longtemps lorsque le message
devient disponible côté destinataire. Ceci améliore la classe
d'anonymat qui peut être atteinte par I2P-Bote. Pour ceux qui ne
veulent pas de longs retards, tous ces réglages sont accessibles à
l'utilisateur et chacun peut ainsi ajuster le niveau d'anonymat à
ses désirs.</FONT></P>
<P><FONT COLOR="#000000"><FONT FACE="Arial, sans-serif"><BR>Les
nœudsI2P-Bote stockent les messages cryptés dans une table de
hachage décentralisée (DHT) Kademlia. En conséquence, un message
peut être envoyé via de nombreux autres nœuds (relais) pour
augmenter la sécurité, ou directement sur un groupe de nœuds de
stockage pour une livraison plus rapide. Le même scenario s'applique
aussi à le relève des messages.<BR>(L'utilisation des routes de
message désactive automatiquement les tampons horaires)<BR>[</FONT></FONT><FONT COLOR="#ff0000"><FONT FACE="Arial, sans-serif">La
relève via les relais n'est pas encore implémentée</FONT></FONT><FONT COLOR="#000000"><FONT FACE="Arial, sans-serif">].</FONT></FONT></P>
<P><BR><BR>
</P>
<P STYLE="line-height: 150%"><FONT COLOR="#000000"><FONT FACE="Arial, sans-serif">Tous
les nœuds sont créés égaux : il n'y a pas de «&nbsp;super-nœuds&nbsp;»
ni de nœuds désignés comme relais ou stockeurs. Tout le monde agit
en tant que relais et stockage potentiels. L'utilisation d'espace
disque est configurable par l'utilisateur.</FONT></FONT></P>
<P STYLE="line-height: 150%"><FONT COLOR="#000000"><FONT FACE="Arial, sans-serif">Avant
qu'un message ne soit envoyé à un relais, il est découpé en
paquets et crypté avec la clé publique du destinataire. Ces paquets
sont stockés de façon redondante dans la DHT.</FONT></FONT></P>
<P STYLE="line-height: 150%"><FONT COLOR="#000000"><FONT FACE="Arial, sans-serif">Il
sont conservés au moins 100 jours, pendant lesquels le destinataire
peut les télécharger.</FONT></FONT></P>
<P STYLE="line-height: 150%"><FONT COLOR="#000000"><FONT FACE="Arial, sans-serif">Les
paquets relayés expirent aussi après 100 jours ou plus.</FONT></FONT></P>
<P STYLE="line-height: 150%"><FONT COLOR="#000000"><FONT FACE="Arial, sans-serif">Si
un nœud manque d'espace de stockage et qu'il n'y a pas de vieux
paquets à supprimer, ce nœud refuse les requêtes de stockage.</FONT></FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">De plus,
I2P-Bote nettoie les en-têtes de messages en n'autorisant que les
informations indispensables à la transmission, permettant ainsi
l'utilisation de clients de messagerie sans vérification préalable
de ce qu'ils ajoutent comme en-têtes bavardes [<FONT COLOR="#ff0000">POP3
pas encore implémenté</FONT>].</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Tout le
cryptage, le choix des chemins et le profilage sont effectués
localement en sorte qu'aucune tierce partie de confiance ne soit mise
à contribution.</FONT></P>
<P STYLE="font-weight: normal; line-height: 150%"><FONT FACE="Arial, sans-serif">Par
une utilisation appropriée d'I2P-Bote, c'est à dire en gardant à
l'esprit les considérations signalées plus haut relatives au bon
sens, personne ne saura qui vous êtes ni où vous vous trouvez. Et
si vous êtes déjà surveillé et que votre connexion Internet est
sur écoutes, le nuisible ne pourra pas savoir ce que vous envoyez ou
recevez, ni avec qui vous communiquez et où sont situés vos
correspondants.</FONT></P>
<P STYLE="line-height: 150%"><BR><BR>
</P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif"><BR>Rentrons
un peu dans les détails&nbsp;:</FONT></P>
<P STYLE="line-height: 150%"><BR><BR>
</P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif"><U>Ce
qu'I2P-Bote <I>cache</I> :</U></FONT></P>
<P STYLE="line-height: 150%"><BR><FONT FACE="Arial, sans-serif"><I>I2P-Bote
cache à la fois, l'identité et la situation de l'expéditeur et du
ou destinataires, celles des nœuds intermédiaires (relais et
stockage), le contenu des messages, leur taille, le nombre que vous
envoyez.</I></FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Seul le
destinataire peut connaître l'adresse de l'expéditeur du message
bote, et si ce dernier l'a décidé, même le destinataire peut être
tenu dans l'ignorance de cette donnée.</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Même si
envoyez des horodatages, votre fuseau horaire ne sera pas dévoilé.</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">De plus,
I2P-Bote masque ...</FONT></P>
<P STYLE="line-height: 150%">&nbsp;&nbsp;&nbsp; <FONT FACE="Arial, sans-serif">-
le fait que vous utilisez... I2P-Bote</FONT></P>
<P STYLE="line-height: 150%">&nbsp;&nbsp;&nbsp; <FONT FACE="Arial, sans-serif">-
le fait que vous envoyez un message</FONT></P>
<P STYLE="line-height: 150%">&nbsp;&nbsp;&nbsp; <FONT FACE="Arial, sans-serif">-
le fait que vous recevez un message</FONT></P>
<P STYLE="line-height: 150%">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT FACE="Arial, sans-serif">et
donc</FONT></P>
<P STYLE="line-height: 150%">&nbsp;&nbsp;&nbsp; <FONT FACE="Arial, sans-serif">-
le moment d'envoi d'un message</FONT></P>
<P STYLE="line-height: 150%">&nbsp;&nbsp;&nbsp; <FONT FACE="Arial, sans-serif">-
le moment de réception d'un message</FONT></P>
<P STYLE="line-height: 150%">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT FACE="Arial, sans-serif">ainsi
que</FONT></P>
<P STYLE="line-height: 150%">&nbsp;&nbsp;&nbsp; <FONT FACE="Arial, sans-serif">-
la limite supérieure du nombre de messages qu'un utilisateur inconnu
reçoit, - nota bene : un utilisateur abstrait, pas un concret,
extrapolant simplement son existence de celle de la destination de
messagerie<BR>&nbsp;&nbsp;&nbsp; - car il pourrait toujours avoir
plus d'une identité ; et la limite basse, car une identité envoie
également des messages de test et des messages leurres/«&nbsp;bidons&nbsp;»</FONT></P>
<P STYLE="line-height: 150%"><BR><BR>
</P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif"><U>Ce
qu'I2P-Bote <I>masque partiellement</I> : </U></FONT>
</P>
<P STYLE="line-height: 150%"><BR><FONT FACE="Arial, sans-serif">L'adresse
I2P-Bote du destinataire n'est connue que par l'expéditeur et le(s)
destinataire(s). </FONT>
</P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">En cas de
destinataires multiples, chacun verra tous les autres destinataires
dont les adresses ont été indiquées en «&nbsp;A&nbsp;:» OU
«&nbsp;Cc&nbsp;:&nbsp;».</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Toutes
les entrées «&nbsp;Cci&nbsp;:&nbsp;» ne sont visibles qu'à
l'expéditeur et au destinataire spécifique. </FONT>
</P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Le moment
de l'envoi, s'il est précisé, n'est visible que par l'expéditeur
et le destinataire.</FONT></P>
<P STYLE="line-height: 150%"><BR><BR><FONT FACE="Arial, sans-serif"><U>Ce
qu'I2P-Bote </U></FONT><FONT FACE="Arial, sans-serif"><I><U>peut
masquer optionnellement </U></I></FONT><FONT FACE="Arial, sans-serif"><U>:
</U></FONT>
</P>
<P STYLE="line-height: 150%"><BR><FONT FACE="Arial, sans-serif">- Si
les routes de messagerie sont utilisées, le moment de l'envoi d'un
message</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">- Si les
routes de messagerie sont utilisées, le moment de relève d'un
message [<FONT COLOR="#ff0000">pas encore implémenté</FONT>].</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">- Si
l'expéditeur supprime les horodatages, seul l'expéditeur sait quand
il a envoyé un message.</FONT></P>
<P STYLE="line-height: 150%"><BR><BR><FONT FACE="Arial, sans-serif"><U>Ce
qu'I2P-Bote </U></FONT><FONT FACE="Arial, sans-serif"><I><U>ne peut
pas cacher </U></I></FONT><FONT FACE="Arial, sans-serif"><U>: </U></FONT>
</P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif"><BR>I2P-Bote
ne peut pas masquer la fréquence à laquelle une identité donnée
relève les nouveaux messages, ni ne nombre de messages reçus par
une identité donnée.</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif"><BR>Pour
son démarrage, I2P-Bote ne dépend pas non-plus d'un nœud central
car il utilise Seedless.</FONT></P>
<P STYLE="line-height: 150%"><BR><BR><BR>
</P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif"><B>5
Terminologie/Glossaire:</B></FONT></P>
<P STYLE="line-height: 150%"><BR><BR>
</P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif"><I><U>Identité
du routeur/nœud I2P-Bote </U>:</I></FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">C'est
l'identité par laquelle le routeur I2P-Bote est connu. Elle est
utilisée pour contacter ce routeur, pour stocker, relayer et relever
les messages, mais aussi pour le cryptage par saut et le contacter
via I2P, car c'est celle là même de la destination du tunnel I2P.
Elle est affichée pour représenter le nœud I2P-Bote dans les
statistiques.</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Ainsi
donc, l'identité du routeur (I2P-Bote) correspond à la destination
I2P (l'adresse d'un nœud I2P-Bote sur le réseau I2P il n'y a
pas de nécessité de la connaître, sauf en cas de problèmes de
connexion aux autres nœuds I2P-Bote).</FONT></P>
<P STYLE="font-weight: normal; line-height: 150%"><BR><FONT FACE="Arial, sans-serif"><I><U>Destination
de messagerie I2P-Bote :</U></I></FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">La
destination de messagerie I2P-Bote (clé) est un identifiant par
lequel quelqu'un peut être atteint via I2P-Bote, comme son nom
l'indique&nbsp;: une destination e-mail. C'est donc pour I2P-Bote ce
qu'est une adresse e-mail pour un système de messagerie standard&nbsp;:
la destination de messagerie est l'adresse effective d'envoi de
messages, de stockage et de relève dans la DHT. <BR>Elle est aussi
utilisée pour le cryptage de bout en bout des messages, pour les
informations d'en-têtes et les pièces jointes. </FONT>
</P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Une
destination de messagerie I2P-Bote est une chaîne en base 64
contenant une clé publique de cryptage et une clé de vérification
de signature, par exemple&nbsp;: </FONT>
</P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">uQtdwFHqbWHGyxZN8wChjWbCcgWrKuoBRNoziEpE8XDt8koHdJiskYXeUyq7JmpG</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">In8WKXY5LNue~62IXeZ-ppUYDdqi5V~9BZrcbpvgb5tjuu3ZRtHq9Vn6T9hOO1fa</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">FYZbK-FqHRiKm~lewFjSmfbBf1e6Fb~FLwQqUBTMtKYrRdO1d3xVIm2XXK83k1Da</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">-nufGASLaHJfsEkwMMDngg8uqRQmoj0THJb6vRfXzRw4qR5a0nj6dodeBfl2NgL9</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">HfOLInwrD67haJqjFJ8r~vVyOxRDJYFE8~f9b7k3N0YeyUK4RJSoiPXtTBLQ2RFQ</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">gOaKg4CuKHE0KCigBRU-Fhhc4weUzyU-g~rbTc2SWPlfvZ6n0voSvhvkZI9V52X3</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">SptDXk3fAEcwnC7lZzza6RNHurSMDMyOTmppAVz6BD8PB4o4RuWq7MQcnF9znElp</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">HX3Q10QdV3omVZJDNPxo-Wf~CpEd88C9ga4pS~QGIHSWtMPLFazeGeSHCnPzIRYD</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif"><BR>L'identité
de routeur/nœud I2P-Bote et la destination de messagerie I2P-Bote se
ressemblent mais elles sont complètement indépendantes l'une de
l'autre.</FONT></P>
<P STYLE="line-height: 150%"><BR><FONT FACE="Arial, sans-serif"><I><U>Adresse
e-mail :</U></I></FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Les
adresses e-mail dans I2P-Bote sont des raccourcis des destinations de
messagerie.</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Les
correspondances entre elles sont stockées à deux endroits&nbsp;: le
carnet d'adresses local et l'annuaire d'adresses décentralisé [<FONT COLOR="#ff0000">ce
dernier n'est pas encore implémenté</FONT>].</FONT></P>
<P STYLE="line-height: 150%"><BR><FONT FACE="Arial, sans-serif"><I><U>Identité
de messagerie I2P-Bote :</U></I></FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">L'identité
de messagerie I2P-Bote est un porte clé de destination de messagerie
I2P-Bote avec la clé privée correspondante et le nom que lui a
donné l'utilisateur qui l'a créé. Ce nom sera envoyé avec la clé
de destination si vous ne désactivez pas l'envoi de cette
information sur l'expéditeur.</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Elle ne
sera visible que par le destinataire s'il n'a pas déjà un nom pour
cette destination dans son propre carnet d'adresses local.</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Donc en
termes techniques, une identité de messagerie est constituée de
quatre éléments&nbsp;:</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">* une
destination de messagerie (c'est à dire deux clés publiques)</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">* les
deux clés privées correspondantes</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">* un nom
public qui peut être montré aux correspondants</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">* une
description qui n'est accessible qu'à vous même, le créateur
l'identité.</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">(Pour
vous aider à vous souvenir de l'usage que vous assignez à cette
identité).</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Une
identité n'est pas pas nécessaire pour envoyer des messages (dans
ce cas, seul «&nbsp;Anonyme&nbsp;» est proposé comme expéditeur
dans le champ de sélection).</FONT></P>
<P STYLE="line-height: 150%"><BR><BR>
</P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif"><I><U>Routes
de messagerie </U></I>:</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Les
routes de messagerie sont un mode de transport à haute latence
supplémentaire pour I2P-Bote. Pour son fonctionnement, une chaîne
de nœuds I2P-Bote est construite, agissant en tant que routeurs
relais pour les paquets et obéissant à des retards par saut [<FONT COLOR="#ff0000">les
retards individuels par saut ne sont pas encore implémentés</FONT>]&nbsp;;
</FONT>
</P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif"><B><BR>AVERTISSEMENT!</B></FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Si vous
choisissez cette option particulièrement avec de nombreux sauts
et/ou de longs retards, ne soyez pas surpris si vos messages
n'arrivent pas rapidement à destination. Ça prendra évidemment
plus de temps jusqu'à plusieurs jours !</FONT></P>
<P STYLE="line-height: 150%"><BR><BR>
</P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif"><I><B>6.&nbsp;
Remerciements</B></I></FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Idée &amp;
conception technique : HungryHobo, Mixxy </FONT>
</P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Implémentation
: HungryHobo </FONT>
</P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Maintenance
du greffon : zzz, HungryHobo </FONT>
</P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Interface
utilisateur : HungryHobo </FONT>
</P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Intégration
de Seedless : sponge </FONT>
</P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Traduction
allemande : HungryHobo </FONT>
</P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Traduction
russe : suhr</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Traduction
française : albat, Redzara, Mixxy, magma </FONT>
</P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Traduction
espagnole : Mixxy</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Traduction
portugaise : Mixxy </FONT>
</P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Traduction
hollandaise : KwukDuck </FONT>
</P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Traduction
norvégienne : hej </FONT>
</P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Traduction
suédoise : hottuna</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Traduction
chinoise : walking </FONT>
</P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Traduction
arabe : hamada </FONT>
</P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Testeurs
versions Alpha : HungryHobo, Mixxy, Returning Novice, sponge, et de
nombreux autres. </FONT>
</P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Manuel :
Mixxy</FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Testeurs
versions Alpha : HungryHobo, Mixxy, Returning Novice, sponge, and
many others</FONT></P>
<P STYLE="line-height: 150%">Traduction française du manuel&nbsp;:
magma (avril 2011) (grâce à l'aide inestimable de user pour la
restitution correcte des concepts techniques et l'utilisation des
outils techniques de l'équipe I2P).</P>
<P STYLE="line-height: 150%"><BR><BR>
</P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif"><B>7.
Détails techniques</B></FONT></P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">-- voir
techdoc.txt --</FONT></P>
<P STYLE="line-height: 150%"><BR><BR>
</P>
<P STYLE="line-height: 150%"><BR><BR>
</P>
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif"><I><B>ENJOY
THE BOTE FEELING!!</B></I></FONT></P>
</BODY>
</HTML>

Binary file not shown.

View File

@ -0,0 +1,2 @@
REM This script only works if I2P is installed in the standard directory
@java -cp "%PROGRAMFILES%\\i2p\\lib\\i2p.jar;i2pbote.jar;scrypt-1.4.0.jar" i2p.bote.fileencryption.Decrypt %*

View File

@ -0,0 +1,2 @@
#!/bin/sh
java -cp $I2P/lib/i2p.jar:`dirname $0`/i2pbote.jar:`dirname $0`/scrypt-1.4.0.jar i2p.bote.fileencryption.Decrypt $@

View File

@ -0,0 +1,2 @@
REM This script only works if I2P is installed in the standard directory
@java -cp "%PROGRAMFILES%\\i2p\\lib\\i2p.jar;i2pbote.jar;scrypt-1.4.0.jar" i2p.bote.fileencryption.Encrypt %*

View File

@ -0,0 +1,2 @@
#!/bin/sh
java -cp $I2P/lib/i2p.jar:`dirname $0`/i2pbote.jar:`dirname $0`/scrypt-1.4.0.jar i2p.bote.fileencryption.Encrypt $@

View File

@ -0,0 +1,2 @@
REM This scrypt only works if I2P is installed in the standard directory
@java -cp "%PROGRAMFILES%\\i2p\\lib\\i2p.jar;i2pbote.jar" i2p.bote.fileencryption.FileInfo %*

View File

@ -0,0 +1,2 @@
#!/bin/sh
java -cp $I2P/lib/i2p.jar:`dirname $0`/i2pbote.jar i2p.bote.fileencryption.FileInfo $@

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,74 @@
<%--
Copyright (C) 2009 HungryHobo@mail.i2p
The GPG fingerprint for HungryHobo@mail.i2p is:
6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12
This file is part of I2P-Bote.
I2P-Bote is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
I2P-Bote is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with I2P-Bote. If not, see <http://www.gnu.org/licenses/>.
--%>
<%@ attribute name="address" required="true" description="The email address to display" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="ib" uri="I2pBoteTags" %>
<% jspContext.setAttribute("newline", "\n"); %>
<c:set var="address" value="${ib:getNameAndDestination(address)}"/>
<div>
<c:set var="emailDestination" value="${ib:extractEmailDestination(address)}"/>
<c:set var="name" value="${ib:extractName(address)}"/>
<form action="editContact.jsp" method="POST">
<input type="hidden" name="new" value="true"/>
<input type="hidden" name="destination" value="${emailDestination}"/>
<input type="hidden" name="name" value="${ib:escapeQuotes(name)}"/>
<c:if test="${empty emailDestination}">
${address}
</c:if>
<c:if test="${not empty emailDestination}">
<%-- Print the shortened address which is always visible--%>
<c:set var="shortAdr" value="${name}"/>
<c:if test="${!empty name}">
<c:set var="shortAdr" value="${shortAdr} &lt;"/>
</c:if>
<c:set var="shortAdr" value="${shortAdr}${fn:substring(emailDestination, 0, 10)}..."/>
<c:if test="${!empty name}">
<c:set var="shortAdr" value="${shortAdr}&gt;"/>
</c:if>
${shortAdr}
<%-- Print the full email destination and the button only when expanded --%>
<ib:expandable>
<%-- put wbr tags in the address so the lines don't get too long --%>
<c:set var="wbrDest" value=""/>
<c:forEach begin="0" end="${fn:length(emailDestination)-1}" step="5" var="i">
<c:set var="wbrDest" value="${wbrDest}${fn:substring(emailDestination, i, i+5)}<wbr/>"/>
</c:forEach>
<strong><ib:message key="Email Destination: "/></strong> ${wbrDest}
<c:if test="${!empty emailDestination}">
<c:set var="disabled" value="${ib:isKnown(emailDestination) ? 'disabled=&quot; disabled&quot; title=&quot;The Email Destination already exists in the address book.&quot;' : ''}"/>
<br/>
<button type="submit"${disabled}><ib:message key="Add to Address Book"/></button>
</c:if>
</ib:expandable>
</c:if>
</form>
</div>

View File

@ -0,0 +1,65 @@
<%--
Copyright (C) 2009 HungryHobo@mail.i2p
The GPG fingerprint for HungryHobo@mail.i2p is:
6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12
This file is part of I2P-Bote.
I2P-Bote is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
I2P-Bote is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with I2P-Bote. If not, see <http://www.gnu.org/licenses/>.
--%>
<%--
Makes a hidden input field for each item in the "paramsToCopy" string.
Prefix matching is supported (parameter names can end with an asterisk).
--%>
<%@ attribute name="paramsToCopy" required="true" description="Comma-separated parameter names" %>
<%@ attribute name="paramsToExclude" required="false" description="Comma-separated parameter names to exclude" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="ib" uri="I2pBoteTags" %>
<c:set var="paramArray" value="${fn:split(paramsToCopy, ',')}"/>
<c:set var="excludedArray" value="${fn:split(paramsToExclude, ',')}"/>
<c:forEach var="parameter" items="${param}">
<%-- Test if the parameter matches one of the excluded params --%>
<c:set var="exactMatch" value="false"/>
<c:set var="prefixMatch" value="false"/>
<c:set var="isExcluded" value="false"/>
<c:forEach var="paramToExclude" items="${excludedArray}">
<c:if test="${parameter.key eq paramToExclude}">
<c:set var="exactMatch" value="true"/>
</c:if>
<c:if test="${fn:endsWith(paramToExclude, '*') and fn:startsWith(parameter.key, fn:substringBefore(paramToExclude, '*'))}">
<c:set var="prefixMatch" value="true"/>
</c:if>
</c:forEach>
<%-- If not excluded, test for a match with paramArray --%>
<c:if test="${not exactMatch and not prefixMatch}">
<c:forEach var="paramToCopy" items="${paramArray}">
<c:if test="${parameter.key eq paramToCopy}">
<c:set var="exactMatch" value="true"/>
</c:if>
<c:if test="${fn:endsWith(paramToCopy, '*') and fn:startsWith(parameter.key, fn:substringBefore(paramToCopy, '*'))}">
<c:set var="prefixMatch" value="true"/>
</c:if>
</c:forEach>
<c:if test="${exactMatch or prefixMatch}">
<input type="hidden" name="${parameter.key}" value="${ib:escapeQuotes(parameter.value)}"/>
</c:if>
</c:if>
</c:forEach>

View File

@ -1,2 +0,0 @@
<%@ attribute name="index" required="true" description="0-based index of the email identity" %>
test

View File

@ -0,0 +1,72 @@
<%--
Copyright (C) 2009 HungryHobo@mail.i2p
The GPG fingerprint for HungryHobo@mail.i2p is:
6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12
This file is part of I2P-Bote.
I2P-Bote is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
I2P-Bote is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with I2P-Bote. If not, see <http://www.gnu.org/licenses/>.
--%>
<%--
Shows a "More..." link that unhides the body content of the tag,
i.e. everything between <ib:expandable> and </ib:expandable>.
If JavaScript is disabled, the body content is always shown and
there is no link.
--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="ib" uri="I2pBoteTags" %>
<ib:message key="More..." var="moreText"/>
<ib:message key="Less..." var="lessText"/>
<c:set var="expandableTagCounter" value="${expandableTagCounter + 1}" scope="request"/>
<script>
// Expands / collapses the help text
function toggle(textId, linkId) {
var text = document.getElementById(textId);
var link = document.getElementById(linkId);
if(text.style.display == "block") {
text.style.display = "none";
link.innerHTML = "${moreText}";
}
else {
text.style.display = "block";
link.innerHTML = "${lessText}";
}
link.blur();
}
// fills in the link text
function insertToggleLink() {
var numTags = ${expandableTagCounter};
for (var i=1; i<=numTags; i++) {
var toggleLink = document.getElementById('toggle-link' + i);
toggleLink.innerHTML = "${moreText}";
};
}
window.onload = insertToggleLink;
</script>
<div id="hidden-text${expandableTagCounter}" class="hidden-text">
<jsp:doBody/>
</div>
<a href="#" id="toggle-link${expandableTagCounter}" onclick="toggle('hidden-text${expandableTagCounter}', 'toggle-link${expandableTagCounter}')"></a>
<noscript>
<br/>
<jsp:doBody/>
</noscript>

View File

@ -0,0 +1,59 @@
<%--
Copyright (C) 2009 HungryHobo@mail.i2p
The GPG fingerprint for HungryHobo@mail.i2p is:
6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12
This file is part of I2P-Bote.
I2P-Bote is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
I2P-Bote is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with I2P-Bote. If not, see <http://www.gnu.org/licenses/>.
--%>
<%@ attribute name="dirName" required="true" description="The directory used by the folder" %>
<%@ attribute name="displayName" required="true" description="The display name for the folder; must match the translation for dirName or the page title won't be translated." %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="ib" uri="I2pBoteTags" %>
<jsp:useBean id="jspHelperBean" class="i2p.bote.web.JSPHelper"/>
<c:set var="numEmails" value="${ib:getMailFolder(dirName).numElements}"/>
<c:if test="${jspHelperBean.passwordRequired}">
<ib:message key="{0} emails total" var="linkTitle">
<ib:param value="${numEmails}"/>
</ib:message>
</c:if>
<c:if test="${not jspHelperBean.passwordRequired}">
<c:set var="numNew" value="${ib:getMailFolder(dirName).numNewEmails}"/>
<ib:message key="{0} emails total, {1} new" var="linkTitle">
<ib:param value="${numEmails}"/>
<ib:param value="${numNew}"/>
</ib:message>
</c:if>
<a href="folder.jsp?path=${dirName}" target="_parent" title="${linkTitle}">
<img src="themes/${jspHelperBean.configuration.theme}/images/folder.png"/>${displayName}
</a>
<c:if test="${numNew>0}">(${numNew})</c:if>
<c:if test="${dirName == 'Inbox'}">
<c:set var="numIncomplete" value="${jspHelperBean.numIncompleteEmails}"/>
<c:if test="${numIncomplete>0}">
<ib:message key="{0} incomplete" var="numIncompleteMsg">
<ib:param value="${numIncomplete}"/>
</ib:message>
(${numIncompleteMsg})
</c:if>
</c:if>

View File

@ -0,0 +1,48 @@
<%--
Copyright (C) 2009 HungryHobo@mail.i2p
The GPG fingerprint for HungryHobo@mail.i2p is:
6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12
This file is part of I2P-Bote.
I2P-Bote is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
I2P-Bote is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with I2P-Bote. If not, see <http://www.gnu.org/licenses/>.
--%>
<%--
Prints a date and/or time. If the date is null and printUnknown is true,
a string is printed indicating the date is unknown.
type can be "date", "time", or "both". The default is both.
timeStyle can be "short", "medium", "long", or "full".
--%>
<%@ attribute name="date" type="java.util.Date" required="true" description="The date and/or time to display" %>
<%@ attribute name="type" required="false" description="Whether to print the date, the time, or both. See the time parameter of fmt:formatDate. The default is both." %>
<%@ attribute name="timeStyle" required="false" description="See the timeStyle parameter of fmt:formatDate" %>
<%@ attribute name="printUnknown" type="java.lang.Boolean" required="false" description="Whether to substitute 'unknown' for an empty date. If this is false, nothing is printed." %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="ib" uri="I2pBoteTags" %>
<c:if test="${!empty date}">
<c:if test="${empty type}">
<c:set var="type" value="both"/>
</c:if>
<fmt:formatDate value="${date}" var="date" type="${type}" timeStyle="${timeStyle}"/>
</c:if>
<c:if test="${empty date and printUnknown eq true}">
<ib:message key="Unknown" var="date"/>
</c:if>
${fn:escapeXml(date)}

View File

@ -1,3 +1,24 @@
<%--
Copyright (C) 2009 HungryHobo@mail.i2p
The GPG fingerprint for HungryHobo@mail.i2p is:
6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12
This file is part of I2P-Bote.
I2P-Bote is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
I2P-Bote is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with I2P-Bote. If not, see <http://www.gnu.org/licenses/>.
--%>
<%@ attribute name="text" required="true" description="The text to display" %>
<%@ attribute name="width" required="false" description="The maximum number of characters in each line" %>

View File

@ -8,17 +8,12 @@
<tag>
<name>sendEmail</name>
<tag-class>i2p.bote.web.SendEmailTag</tag-class>
<body-content>empty</body-content>
<body-content>JSP</body-content>
<attribute>
<name>sender</name>
<rtexprvalue>true</rtexprvalue>
<required>true</required>
</attribute>
<attribute>
<name>recipient</name>
<rtexprvalue>true</rtexprvalue>
<required>true</required>
</attribute>
<attribute>
<name>subject</name>
<rtexprvalue>true</rtexprvalue>
@ -29,6 +24,49 @@
<rtexprvalue>true</rtexprvalue>
<required>true</required>
</attribute>
<attribute>
<name>includeSentTime</name>
<rtexprvalue>true</rtexprvalue>
<required>true</required>
</attribute>
</tag>
<tag>
<name>recipient</name>
<info>
Adds an email recipient. Must be inside an ib:sendEmail tag.
</info>
<tag-class>i2p.bote.web.RecipientTag</tag-class>
<body-content>scriptless</body-content>
<attribute>
<name>type</name>
<rtexprvalue>true</rtexprvalue>
<required>true</required>
</attribute>
<attribute>
<name>address</name>
<rtexprvalue>true</rtexprvalue>
<required>true</required>
</attribute>
</tag>
<tag>
<name>attachment</name>
<info>
Adds an email attachment. Must be inside an ib:sendEmail tag.
</info>
<tag-class>i2p.bote.web.AttachmentTag</tag-class>
<body-content>scriptless</body-content>
<attribute>
<name>origFilename</name>
<rtexprvalue>true</rtexprvalue>
<required>true</required>
</attribute>
<attribute>
<name>tempFilename</name>
<rtexprvalue>true</rtexprvalue>
<required>true</required>
</attribute>
</tag>
<tag>
@ -38,74 +76,363 @@
</tag>
<tag>
<name>numDhtPeers</name>
<tag-class>i2p.bote.web.PrintNumDhtPeersTag</tag-class>
<name>showAttachments</name>
<info>
Displays links to all attachments in an email.
</info>
<tag-class>i2p.bote.web.ShowAttachmentsTag</tag-class>
<body-content>empty</body-content>
<attribute>
<name>email</name>
<rtexprvalue>true</rtexprvalue>
<required>true</required>
</attribute>
<attribute>
<name>folder</name>
<rtexprvalue>true</rtexprvalue>
<required>true</required>
</attribute>
</tag>
<tag>
<name>formatPlainText</name>
<tag-class>i2p.bote.web.FormatPlainTextTag</tag-class>
<body-content>empty</body-content>
<attribute>
<name>text</name>
<rtexprvalue>true</rtexprvalue>
<required>true</required>
</attribute>
</tag>
<tag>
<name>setEmailRead</name>
<tag-class>i2p.bote.web.SetEmailReadTag</tag-class>
<body-content>empty</body-content>
<attribute>
<name>folder</name>
<rtexprvalue>true</rtexprvalue>
<required>true</required>
</attribute>
<attribute>
<name>messageId</name>
<rtexprvalue>true</rtexprvalue>
<required>true</required>
</attribute>
<attribute>
<name>read</name>
<rtexprvalue>true</rtexprvalue>
<required>true</required>
</attribute>
</tag>
<tag>
<name>setEmailReplied</name>
<tag-class>i2p.bote.web.SetEmailRepliedTag</tag-class>
<body-content>empty</body-content>
<attribute>
<name>folder</name>
<rtexprvalue>true</rtexprvalue>
<required>true</required>
</attribute>
<attribute>
<name>messageId</name>
<rtexprvalue>true</rtexprvalue>
<required>true</required>
</attribute>
<attribute>
<name>replied</name>
<rtexprvalue>true</rtexprvalue>
<required>true</required>
</attribute>
</tag>
<tag>
<name>quote</name>
<tag-class>i2p.bote.web.QuoteTag</tag-class>
<body-content>empty</body-content>
<attribute>
<name>text</name>
<rtexprvalue>true</rtexprvalue>
<required>true</required>
</attribute>
</tag>
<tag>
<name>saveIdentities</name>
<tag-class>i2p.bote.web.SaveIdentitiesTag</tag-class>
<body-content>empty</body-content>
</tag>
<tag>
<name>numRelayPeers</name>
<tag-class>i2p.bote.web.PrintNumRelayPeersTag</tag-class>
<name>publishDestination</name>
<tag-class>i2p.bote.web.PublishDestinationTag</tag-class>
<body-content>empty</body-content>
<attribute>
<name>destination</name>
<rtexprvalue>true</rtexprvalue>
<required>true</required>
</attribute>
<attribute>
<name>pictureFilename</name>
<rtexprvalue>true</rtexprvalue>
<required>false</required>
</attribute>
<attribute>
<name>text</name>
<rtexprvalue>true</rtexprvalue>
<required>false</required>
</attribute>
</tag>
<tag>
<name>connect</name>
<tag-class>i2p.bote.web.ConnectTag</tag-class>
<body-content>empty</body-content>
</tag>
<tag>
<name>printVersion</name>
<tag-class>i2p.bote.web.PrintAppVersionTag</tag-class>
<name>peerInfo</name>
<tag-class>i2p.bote.web.PeerInfoTag</tag-class>
<body-content>empty</body-content>
</tag>
<tag>
<name>printException</name>
<tag-class>i2p.bote.web.PrintExceptionTag</tag-class>
<body-content>empty</body-content>
<attribute>
<name>exception</name>
<rtexprvalue>true</rtexprvalue>
<required>true</required>
</attribute>
</tag>
<tag>
<name>message</name>
<info>
Same as fmt:message, except that message keys in
the "en" locale translate to the message key itself.
The noextract attribute is only used by the JspStrings util.
</info>
<tag-class>i2p.bote.web.MessageTag</tag-class>
<body-content>JSP</body-content>
<attribute>
<name>key</name>
<rtexprvalue>true</rtexprvalue>
<required>false</required>
</attribute>
<attribute>
<name>bundle</name>
<rtexprvalue>true</rtexprvalue>
<required>false</required>
</attribute>
<attribute>
<name>var</name>
<rtexprvalue>true</rtexprvalue>
<required>false</required>
</attribute>
<attribute>
<name>scope</name>
<rtexprvalue>true</rtexprvalue>
<required>false</required>
</attribute>
<attribute>
<name>hide</name>
<rtexprvalue>true</rtexprvalue>
<required>false</required>
</attribute>
<attribute>
<name>noextract</name>
<rtexprvalue>true</rtexprvalue>
<required>false</required>
</attribute>
</tag>
<tag>
<name>param</name>
<info>
Same as fmt:param. Must be inside an ib:message tag.
</info>
<tag-class>i2p.bote.web.ParamTag</tag-class>
<body-content>scriptless</body-content>
<attribute>
<name>value</name>
<rtexprvalue>true</rtexprvalue>
<required>false</required>
</attribute>
</tag>
<tag>
<name>saveConfiguration</name>
<info>
Saves the configuration to the config file.
</info>
<tag-class>i2p.bote.web.SaveConfigurationTag</tag-class>
<body-content>empty</body-content>
</tag>
<tag>
<name>requirePassword</name>
<info>
Forwards the current page to the password entry page
if the tag body throws a PasswordException.
When the user enters the correct password, the page
pointed to by the forwardTo parameter is loaded.
If forwardTo is not given, the original page is used instead;
all parameters in the query string are lost in this case.
</info>
<tag-class>i2p.bote.web.RequirePasswordTag</tag-class>
<body-content>JSP</body-content>
<attribute>
<name>forwardUrl</name>
<rtexprvalue>true</rtexprvalue>
<required>false</required>
</attribute>
</tag>
<tag>
<name>clearPasswordCache</name>
<tag-class>i2p.bote.web.ClearPasswordCacheTag</tag-class>
<body-content>empty</body-content>
</tag>
<tag>
<info>
Changes the application password. If no password is
currently set, the old password is an empty string.
</info>
<name>setPassword</name>
<tag-class>i2p.bote.web.SetPasswordTag</tag-class>
<body-content>empty</body-content>
<attribute>
<name>oldPassword</name>
<rtexprvalue>true</rtexprvalue>
<required>false</required>
</attribute>
<attribute>
<name>newPassword</name>
<rtexprvalue>true</rtexprvalue>
<required>false</required>
</attribute>
<attribute>
<name>confirmNewPassword</name>
<rtexprvalue>true</rtexprvalue>
<required>false</required>
</attribute>
</tag>
<tag>
<info>
If the password is being changed (i.e. all files are being
reencrypted with a new password), this call blocks until
the password change is finished. If the password isn't being
changed, it returns immediately.
This tag produces no output.
</info>
<name>waitForPasswordChange</name>
<tag-class>i2p.bote.web.WaitForPasswordChangeTag</tag-class>
<body-content>empty</body-content>
</tag>
<function>
<name>getIdentities</name>
<function-class>i2p.bote.web.JSPHelper</function-class>
<name>createOrModifyIdentity</name>
<function-class>i2p.bote.util.GeneralHelper</function-class>
<function-signature>
i2p.bote.email.Identities getIdentities()
boolean createOrModifyIdentity(boolean, int, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, boolean)
</function-signature>
</function>
<function>
<name>getLocalDestination</name>
<function-class>i2p.bote.web.JSPHelper</function-class>
<name>modifyIdentity</name>
<function-class>i2p.bote.util.GeneralHelper</function-class>
<function-signature>
java.lang.String getLocalDestination()
boolean modifyIdentity(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, boolean)
</function-signature>
</function>
<function>
<name>saveIdentity</name>
<function-class>i2p.bote.web.JSPHelper</function-class>
<function-signature>
boolean saveIdentity(java.lang.String, java.lang.String, java.lang.String, java.lang.String)
</function-signature>
</function>
<function>
<name>deleteIdentity</name>
<function-class>i2p.bote.web.JSPHelper</function-class>
<function-class>i2p.bote.util.GeneralHelper</function-class>
<function-signature>
boolean deleteIdentity(java.lang.String)
</function-signature>
</function>
<function>
<name>isCheckingForMail</name>
<function-class>i2p.bote.web.JSPHelper</function-class>
<name>getIdentity</name>
<description>
Looks up an EmailIdentity by destination key.
</description>
<function-class>i2p.bote.util.GeneralHelper</function-class>
<function-signature>
boolean isCheckingForMail()
i2p.bote.email.EmailIdentity getIdentity(java.lang.String)
</function-signature>
</function>
<function>
<name>newMailReceived</name>
<function-class>i2p.bote.web.JSPHelper</function-class>
<name>getContactFingerprint</name>
<description>
Returns the fingerprint of a Contact in a given locale.
</description>
<function-class>i2p.bote.util.GeneralHelper</function-class>
<function-signature>
boolean newMailReceived()
java.lang.String getFingerprint(i2p.bote.packet.dht.Contact, java.lang.String)
</function-signature>
</function>
<function>
<name>getIdentityFingerprint</name>
<description>
Returns the fingerprint of an EmailIdentity in a given locale.
</description>
<function-class>i2p.bote.util.GeneralHelper</function-class>
<function-signature>
java.lang.String getFingerprint(i2p.bote.email.EmailIdentity, java.lang.String)
</function-signature>
</function>
<function>
<name>getCryptoImplementation</name>
<description>
Looks up a CryptoImplementation by ID number.
</description>
<function-class>i2p.bote.util.GeneralHelper</function-class>
<function-signature>
i2p.bote.crypto.CryptoImplementation getCryptoImplementation(int)
</function-signature>
</function>
<function>
<name>saveContact</name>
<function-class>i2p.bote.util.GeneralHelper</function-class>
<function-signature>
boolean saveContact(java.lang.String, java.lang.String, java.lang.String, java.lang.String)
</function-signature>
</function>
<function>
<name>deleteContact</name>
<function-class>i2p.bote.util.GeneralHelper</function-class>
<function-signature>
boolean deleteContact(java.lang.String)
</function-signature>
</function>
<function>
<name>getContact</name>
<description>
Looks up a Contact in the address book by its Email Destination.
</description>
<function-class>i2p.bote.util.GeneralHelper</function-class>
<function-signature>
java.lang.String getContact(java.lang.String)
</function-signature>
</function>
<function>
<name>getMailFolder</name>
<function-class>i2p.bote.web.JSPHelper</function-class>
<function-class>i2p.bote.util.GeneralHelper</function-class>
<function-signature>
i2p.bote.EmailFolder getMailFolder(java.lang.String)
</function-signature>
@ -113,15 +440,259 @@
<function>
<name>getEmail</name>
<function-class>i2p.bote.web.JSPHelper</function-class>
<function-class>i2p.bote.util.GeneralHelper</function-class>
<function-signature>
i2p.bote.email.Email getEmail(java.lang.String, java.lang.String)
</function-signature>
</function>
<function>
<name>getEmails</name>
<function-class>i2p.bote.util.GeneralHelper</function-class>
<function-signature>
java.util.List getEmails(i2p.bote.folder.EmailFolder, i2p.bote.email.EmailAttribute, boolean)
</function-signature>
</function>
<function>
<name>getShortSenderName</name>
<description>
Returns up to maxLength characters of a "sender" header field.
</description>
<function-class>i2p.bote.util.GeneralHelper</function-class>
<function-signature>
java.lang.String getShortSenderName(java.lang.String, int)
</function-signature>
</function>
<function>
<name>getOneLocalRecipient</name>
<function-class>i2p.bote.util.GeneralHelper</function-class>
<function-signature>
java.lang.String getOneLocalRecipient(i2p.bote.email.Email)
</function-signature>
</function>
<function>
<name>getReplyAddress</name>
<function-class>i2p.bote.util.GeneralHelper</function-class>
<function-signature>
java.lang.String getReplyAddress(i2p.bote.email.Email, i2p.bote.email.Identities)
</function-signature>
</function>
<function>
<name>getEmailStatusText</name>
<description>
Returns the status of an email in the outbox. See OutboxProcessor.java.
</description>
<function-class>i2p.bote.web.JSPHelper</function-class>
<function-signature>
java.lang.String getEmailStatusText(i2p.bote.email.Email)
</function-signature>
</function>
<function>
<name>deleteEmail</name>
<function-class>i2p.bote.util.GeneralHelper</function-class>
<function-signature>
java.lang.boolean deleteEmail(java.lang.String, java.lang.String)
</function-signature>
</function>
<function>
<name>getNameAndDestination</name>
<description>
Returns a string containing the locally known name of the Email Destination
in the String argument, and the Base64-encoded Email Destination.
If the Email Destination is not locally known (if it doesn't exist in the
address book or any of the identities), the address is returned unaltered.
</description>
<function-class>i2p.bote.util.GeneralHelper</function-class>
<function-signature>
java.lang.String getNameAndDestination(java.lang.String)
</function-signature>
</function>
<function>
<name>getNameAndShortDestination</name>
<description>
Returns a string containing the locally known name of the Email Destination
in the String argument, and the first 4 characters of the Base64-encoded Email
Destination.
If the Email Destination is not locally known (if it doesn't exist in the
address book or any of the identities), the address is returned unaltered.
</description>
<function-class>i2p.bote.util.GeneralHelper</function-class>
<function-signature>
java.lang.String getNameAndShortDestination(java.lang.String)
</function-signature>
</function>
<function>
<name>extractName</name>
<function-class>i2p.bote.util.GeneralHelper</function-class>
<function-signature>
java.lang.String extractName(java.lang.String)
</function-signature>
</function>
<function>
<name>extractEmailDestination</name>
<function-class>i2p.bote.util.GeneralHelper</function-class>
<function-signature>
i2p.bote.email.EmailDestination extractEmailDestination(java.lang.String)
</function-signature>
</function>
<function>
<name>getSortedRecipientParams</name>
<function-class>i2p.bote.web.JSPHelper</function-class>
<function-signature>
java.util.Map getSortedRecipientParams(java.util.Map)
</function-signature>
</function>
<function>
<name>mergeRecipientFields</name>
<description>
This method is used by newEmail.jsp. It adds the values of all
selectedContact keys as recipient addresses, and returns a List
containing the old recipient addresses as well as the new ones.
If the "action" parameter is set to "addRecipientField", a blank
recipient address is added additionally.
If the action is "removeRecipient" followed by a number, the
recipient field with that index is removed.
</description>
<function-class>i2p.bote.web.JSPHelper</function-class>
<function-signature>
java.util.List mergeRecipientFields(javax.servlet.ServletRequest)
</function-signature>
</function>
<function>
<name>isKnown</name>
<description>
Returns true if a string contains a Base64-encoded Email Destination that
is either in the address book or among the Email Identities.
</description>
<function-class>i2p.bote.util.GeneralHelper</function-class>
<function-signature>
boolean isKnown(java.lang.String)
</function-signature>
</function>
<function>
<name>escapeQuotes</name>
<description>
Converts all double and single quotes in a string to HTML entities,
which makes the string safe to use in hidden form fields.
</description>
<function-class>i2p.bote.web.JSPHelper</function-class>
<function-signature>
java.lang.String escapeQuotes(java.lang.String)
</function-signature>
</function>
<function>
<name>tryPassword</name>
<description>
Tests whether a password is correct. If it is, it is
stored in the password cache and true is returned.
Otherwise, the password is not stored and false is
returned.
</description>
<function-class>i2p.bote.util.GeneralHelper</function-class>
<function-signature>
boolean tryPassword(java.lang.String)
</function-signature>
</function>
<function>
<name>getFileSize</name>
<description>
Returns the size of a file in a human-readable format.
</description>
<function-class>i2p.bote.util.GeneralHelper</function-class>
<function-signature>
java.lang.String getFileSize(java.lang.String)
</function-signature>
</function>
<function>
<name>urlEncode</name>
<description>
URL-encodes a UTF-8 string.
</description>
<function-class>i2p.bote.web.JSPHelper</function-class>
<function-signature>
java.lang.String urlEncode(java.lang.String)
</function-signature>
</function>
<function>
<name>urlDecode</name>
<description>
URL-decodes a string.
</description>
<function-class>i2p.bote.web.JSPHelper</function-class>
<function-signature>
java.lang.String urlDecode(java.lang.String)
</function-signature>
</function>
<function>
<name>getLocalizedFilename</name>
<function-class>i2p.bote.web.JSPHelper</function-class>
<function-signature>
java.lang.String getLocalizedFilename(java.lang.String, javax.servlet.ServletContext)
</function-signature>
</function>
<function>
<name>getLocalizedThemeName</name>
<function-class>i2p.bote.web.JSPHelper</function-class>
<function-signature>
java.lang.String getLocalizedThemeName(java.lang.String)
</function-signature>
</function>
<function>
<name>lookupInDirectory</name>
<function-class>i2p.bote.util.GeneralHelper</function-class>
<function-signature>
i2p.bote.packet.dht.Contact lookupInDirectory(java.lang.String)
</function-signature>
</function>
<tag-file>
<name>printWithLineBreaks</name>
<path>/WEB-INF/tags/printWithLineBreaks.tag</path>
</tag-file>
<tag-file>
<name>folderLink</name>
<path>/WEB-INF/tags/folderLink.tag</path>
</tag-file>
<tag-file>
<name>address</name>
<path>/WEB-INF/tags/address.tag</path>
</tag-file>
<tag-file>
<name>printDate</name>
<path>/WEB-INF/tags/printDate.tag</path>
</tag-file>
<tag-file>
<name>copyParams</name>
<path>/WEB-INF/tags/copyParams.tag</path>
</tag-file>
<tag-file>
<name>expandable</name>
<path>/WEB-INF/tags/expandable.tag</path>
</tag-file>
</taglib>

View File

@ -1,17 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>i2pbote</display-name>
<!-- precompiled servlets -->
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<listener>
<listener-class>i2p.bote.web.ServiceInitializer</listener-class>
</listener>
</web-app>

View File

@ -1,16 +1,77 @@
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>i2pbote</display-name>
<!-- precompiled servlets -->
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<listener>
<listener-class>i2p.bote.web.ServiceInitializer</listener-class>
</listener>
</web-app>
<filter>
<filter-name>CharsetFilter</filter-name>
<filter-class>i2p.bote.web.CharsetFilter</filter-class>
<init-param>
<param-name>requestEncoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter>
<description>
Makes parameters in a multipart/form-data request accessible to JSP/Servlet code.
</description>
<filter-name>MultipartFilter</filter-name>
<filter-class>i2p.bote.web.MultipartFilter</filter-class>
</filter>
<filter>
<description>
Redirects requests for themes not included in the .war, to ThemeServlet
</description>
<filter-name>ThemeFilter</filter-name>
<filter-class>i2p.bote.web.ThemeFilter</filter-class>
<init-param>
<param-name>themeServletPath</param-name>
<param-value>externalThemes</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharsetFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>MultipartFilter</filter-name>
<url-pattern>/newEmail.jsp</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>MultipartFilter</filter-name>
<url-pattern>/publishDestination.jsp</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>ThemeFilter</filter-name>
<url-pattern>/themes/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>ShowAttachment</servlet-name>
<servlet-class>i2p.bote.web.ShowAttachment</servlet-class>
</servlet>
<servlet>
<servlet-name>ThemeServlet</servlet-name>
<servlet-class>i2p.bote.web.ThemeServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ShowAttachment</servlet-name>
<url-pattern>/showAttachment</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ThemeServlet</servlet-name>
<url-pattern>/externalThemes/*</url-pattern>
</servlet-mapping>
</web-app>

View File

@ -20,29 +20,123 @@
--%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="ib" uri="I2pBoteTags" %>
<jsp:include page="header.jsp">
<jsp:param name="title" value="About I2P-Bote"/>
</jsp:include>
<ib:message key="About I2P-Bote" var="title" scope="request"/>
<jsp:include page="header.jsp"/>
<div class="main">
<h2>
I2P-Bote Version <ib:printVersion/>
<ib:message key="I2P-Bote Version {0}">
<jsp:useBean id="jspHelperBean" class="i2p.bote.web.JSPHelper"/>
<ib:param value="${jspHelperBean.appVersion}"/>
</ib:message>
</h2>
<br/>
<table><tr>
<td><strong>Author:</strong></td>
</tr><tr>
<td></td><td>HungryHobo@mail.i2p</td>
</tr><tr>
<td><strong>Contributors:</strong></td>
</tr><tr>
<td></td><td>Mixxy</td>
</tr></table>
<div class="contributor-category"><ib:message key="Main Developer:"/></div>
<div class="contributor-name">
<ib:message key="Click to send an email" var="linkTitle"/>
<ib:message key="Feedback on I2P-Bote" var="subject"/>
<a href="newEmail.jsp?recipient0=hobo37SEJsEMfQHwcpVlvEgnrERGFz34GC1yjVyuRvl1QHnTi0UAoOtrLP~qkFY0oL59BBqj5sCep0RA8I5G8n&amp;recipientType0=to&amp;subject=${subject}" title="${linkTitle}">HungryHobo</a>
</div>
<br/>
<div class="contributor-category"><ib:message key="Contributors:"/></div>
<div>
<div class="contributor-name">Mixxy</div>
<div class="contributor-role"><ib:message key="Translation, QA, usability, technical feedback"/></div>
</div>
<div>
<div class="contributor-name">zzz</div>
<div class="contributor-role"><ib:message key="Pluginization, technical feedback"/></div>
</div>
<div>
<div class="contributor-name">sponge</div>
<div class="contributor-role"><ib:message key="Seedless"/></div>
</div>
<div>
<div class="contributor-name">suhr</div>
<div class="contributor-role"><ib:message key="Russian translation"/></div>
</div>
<div>
<div class="contributor-name">hiddenz</div>
<div class="contributor-role"><ib:message key="Russian translation"/></div>
</div>
<div>
<div class="contributor-name">albat</div>
<div class="contributor-role"><ib:message key="French translation"/></div>
</div>
<div>
<div class="contributor-name">redzara</div>
<div class="contributor-role"><ib:message key="French translation"/></div>
</div>
<div>
<div class="contributor-name">Jrnr601</div>
<div class="contributor-role"><ib:message key="Dutch translation"/></div>
</div>
<div>
<div class="contributor-name">KwukDuck</div>
<div class="contributor-role"><ib:message key="Dutch translation"/></div>
</div>
<div>
<div class="contributor-name">nej</div>
<div class="contributor-role"><ib:message key="Norwegian translation"/></div>
</div>
<div>
<div class="contributor-name">hottuna</div>
<div class="contributor-role"><ib:message key="Swedish translation"/></div>
</div>
<div>
<div class="contributor-name">walking</div>
<div class="contributor-role"><ib:message key="Chinese translation"/></div>
</div>
<div>
<div class="contributor-name">hamada</div>
<div class="contributor-role"><ib:message key="Arabic translation"/></div>
</div>
<div>
<div class="contributor-name">Waseihou Watashi</div>
<div class="contributor-role"><ib:message key="Czech translation"/></div>
</div>
<div>
<div class="contributor-name">D.A. Loader</div>
<div class="contributor-role"><ib:message key="German translation"/></div>
</div>
<div>
<div class="contributor-name">Warton</div>
<div class="contributor-role"><ib:message key="Polish translation"/></div>
</div>
<div>
<div class="contributor-name">digitalmannen</div>
<div class="contributor-role"><ib:message key="Swedish translation"/></div>
</div>
<div>
<div class="contributor-name">mkkid</div>
<div class="contributor-role"><ib:message key="Italian translation"/></div>
</div>
<div>
<div class="contributor-name">gringoire</div>
<div class="contributor-role"><ib:message key="Ukrainian translation"/></div>
</div>
<div>
<div class="contributor-name">AdminLMH</div>
<div class="contributor-role"><ib:message key="Hungarian translation"/></div>
</div>
<div>
<div class="contributor-name">Voulnet</div>
<div class="contributor-role"><ib:message key="Arabic translation"/></div>
</div>
<div>
<div class="contributor-name">KillYourTV</div>
<div class="contributor-role"><ib:message key="Code fixes, translation updates from tx"/></div>
</div>
<div>
<div class="contributor-name">str4d</div>
<div class="contributor-role"><ib:message key="Code fixes, Android app"/></div>
</div>
</div>
<jsp:include page="footer.jsp"/>
<jsp:include page="footer.jsp"/>

139
WebContent/addressBook.jsp Normal file
View File

@ -0,0 +1,139 @@
<%--
Copyright (C) 2009 HungryHobo@mail.i2p
The GPG fingerprint for HungryHobo@mail.i2p is:
6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12
This file is part of I2P-Bote.
I2P-Bote is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
I2P-Bote is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with I2P-Bote. If not, see <http://www.gnu.org/licenses/>.
--%>
<%--
This page behaves differently depending on the "select" boolean parameter.
If select is true, the user can select contacts and add them as recipients.
If select is false, the user can view and edit the address book.
--%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="ib" uri="I2pBoteTags" %>
<ib:message key="Address Book" var="title" scope="request"/>
<jsp:include page="header.jsp"/>
<ib:requirePassword>
<div class="main">
<jsp:useBean id="jspHelperBean" class="i2p.bote.web.JSPHelper"/>
<c:set var="contacts" value="${jspHelperBean.addressBook.all}"/>
<h2>
<c:if test="${!param.select}"><ib:message key="Private Address Book"/></c:if>
<c:if test="${param.select && !empty contacts}"><ib:message key="Select One or More Entries"/></c:if>
</h2>
<c:if test="${empty contacts}">
<ib:message key="The address book is empty."/>
</c:if>
<c:if test="${param.select}">
<form action="${param.forwardUrl}" method="POST">
<ib:copyParams paramsToCopy="${param.paramsToCopy}"/>
</c:if>
<table>
<c:if test="${!empty contacts}">
<tr>
<c:if test="${param.select}"><th class="header-column-check"></th></c:if>
<th class="header-column-name"><ib:message key="Name"/></th>
<th class="header-column-addr-email-dest"><ib:message key="Email Destination"/></th>
<c:if test="${not param.select}"><th class="header-column-trash"></th></c:if>
</tr>
</c:if>
<c:forEach items="${contacts}" var="contact" varStatus="status">
<c:set var="backgroundClass" value="even-table-cell"/>
<c:if test="${status.index%2 != 0}">
<c:set var="backgroundClass" value="odd-table-cell"/>
</c:if>
<tr class="${backgroundClass}">
<c:if test="${param.select}">
<td>
<input type="checkbox" name="selectedContact" value="${ib:escapeQuotes(contact.name)} &lt;${contact.destination}&gt;"/>
</td>
</c:if>
<td>
<c:if test="${!param.select}">
<%-- Insert a random number into the request string so others can't see contacts using the CSS history hack --%>
<a href="editContact.jsp?rnd=${jspHelperBean.randomNumber}&amp;createNew=false&amp;destination=${contact.destination}">
</c:if>
${contact.name}
<c:if test="${!param.select}">
</a>
</c:if>
</td>
<td class="ellipsis">
${contact.destination}
</td>
<c:if test="${!param.select}">
<td>
<a href="deleteContact.jsp?destination=${contact.destination}"><img src="${themeDir}/images/delete.png" alt="<ib:message key='Delete'/>" title='<ib:message key='Delete this contact'/>'/></a>
</td>
</c:if>
</tr>
</c:forEach>
</table>
<p/>
<table>
<c:if test="${!param.select}">
<tr><td>
<form action="editContact.jsp" method="POST">
<input type="hidden" name="createNew" value="true"/>
<button type="submit" value="New"><ib:message key="New Contact"/></button>
</form>
</td></tr>
</c:if>
<c:if test="${param.select}">
<tr><td>
<c:if test="${!empty contacts}">
<button type="submit" value="New"><ib:message key="Add Recipients"/></button>
</c:if>
<c:if test="${empty contacts}">
<button type="submit" value="New"><ib:message key="Return"/></button>
</c:if>
</td></tr>
</c:if>
</table>
<c:if test="${param.select}">
</form>
</c:if>
<c:if test="${not param.select}">
<p/><br/>
<b><ib:message key="Import from the public address directory"/></b><br/>
<form action="importContact.jsp" method="POST">
<ib:message key="Name:"/>
<input type="text" name="name"/>
<button type="submit"><ib:message key="Lookup"/></button>
</form><br/>
Note that only exact matches are found.
</c:if>
</div>
</ib:requirePassword>
<jsp:include page="footer.jsp"/>

View File

@ -26,50 +26,92 @@
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="ib" uri="I2pBoteTags" %>
<c:if test="${ib:isCheckingForMail()}">
<jsp:include page="getStatus.jsp"/>
<c:if test="${param.checkMail eq 1}">
<ib:requirePassword forwardUrl="checkMail.jsp">
<ib:checkForMail/>
</ib:requirePassword>
</c:if>
<jsp:useBean id="jspHelperBean" class="i2p.bote.web.JSPHelper"/>
<c:set var="themeDir" value="themes/${jspHelperBean.configuration.theme}" scope="request"/>
<c:if test="${jspHelperBean.checkingForMail}">
<c:set var="checkingForMail" value="true"/>
</c:if>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="i2pbote.css" />
<c:if test="${checkingForMail}">
<meta http-equiv="refresh" content="20" />
<link rel="stylesheet" href="themes/${jspHelperBean.configuration.theme}/i2pbote.css" />
<%-- Refresh until the Check Mail button becomes ungreyed --%>
<c:if test="${checkingForMail or connStatus eq NOT_STARTED or connStatus eq DELAY}">
<meta http-equiv="refresh" content="20;url=buttonFrame.jsp" />
</c:if>
</head>
<body style="background-color: transparent; margin: 0px;">
<body class="iframe-body">
<table><tr>
<td>
<c:if test="${checkingForMail}">
<div class="checkmail">
<img src="images/wait.gif"/>Checking for mail...
</div>
</c:if>
<c:if test="${!checkingForMail}">
<div class="checkmail">
<form action="checkMail.jsp" target="_top" method="GET">
<input type="hidden" name="path" value="Inbox"/>
<button type="submit" value="Check Mail">Check Mail</button>
</form>
</div>
<c:if test="${ib:newMailReceived()}">
<script language="Javascript">
// If inbox is being displayed, reload so the new email(s) show
if (document.getElementById("inboxFlag"))
window.location.reload();
</script>
<c:if test="${checkingForMail}">
<div class="checkmail">
<img src="${themeDir}/images/wait.gif"/><ib:message key="Checking for mail..."/>
</div>
</c:if>
<c:if test="${!checkingForMail}">
<div class="checkmail">
<c:set var="frame" value=""/>
<c:choose>
<c:when test="${jspHelperBean.identities.none}">
<c:set var="url" value="noIdentities.jsp"/>
<c:set var="frame" value='target="_parent"'/>
</c:when>
<c:otherwise>
<%--
If the user needs to enter a password to check mails, take them
to checkMail.jsp and use the entire browser window
--%>
<c:if test="${jspHelperBean.passwordRequired}">
<c:set var="frame" value='target="_parent"'/>
<c:set var="url" value="checkMail.jsp"/>
</c:if>
<c:if test="${not jspHelperBean.passwordRequired}">
<c:set var="url" value="buttonFrame.jsp"/>
</c:if>
</c:otherwise>
</c:choose>
<form action="${url}" ${frame} method="GET">
<input type="hidden" name="checkMail" value="1"/>
<c:set var="disable" value=""/>
<c:if test="${connStatus == DELAY}">
<c:set var="disable" value="disabled=&quot;disabled&quot;"/>
</c:if>
</c:if>
</td>
<td>
<form action="newEmail.jsp" target="_top" method="GET">
<button type="submit" value="New">New</button>
<button type="submit" value="Check Mail" ${disable}><ib:message key="Check Mail"/></button>
</form>
</td>
</tr></table>
</div>
<c:if test="${jspHelperBean.newMailReceived}">
<script language="Javascript">
// refresh folder list to update the new message count
parent.frames[1].location.href = 'folders.jsp';
// If inbox is being displayed, reload so the new email(s) show
if (parent.document.getElementById('inboxFlag'))
parent.location.href = 'folder.jsp?path=Inbox';
</script>
</c:if>
</c:if>
<div class="compose">
<form action="newEmail.jsp" target="_top" method="GET">
<button type="submit" value="New"><ib:message key="Compose"/></button>
</form>
</div>
<div class="lastcheck">
<ib:message key="Last checked:"/>
<c:set var="lastCheck" value="${jspHelperBean.lastMailCheckTime}" scope="request"/>
<ib:printDate date="${lastCheck}" type="time" timeStyle="short" printUnknown="true"/>
</div>
</body>
</html>
</html>

View File

@ -23,25 +23,9 @@
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="ib" uri="I2pBoteTags" %>
<c:choose>
<c:when test="${empty ib:getIdentities().all}">
<jsp:forward page="noIdentities.jsp"/>
</c:when>
<c:otherwise>
<ib:checkForMail/>
<c:if test="${empty param.nextPage}">
<c:set var="param.nextPage" value="index.jsp"/>
</c:if>
<jsp:forward page="${param.nextPage}"/>
</c:otherwise>
</c:choose>
<p>
TODO checkMailTag, show status at the bottom (or top?),
point the Inbox link here or just check periodically and when the Check Email button is clicked?
</p>
<jsp:include page="footer.jsp"/>
<ib:requirePassword>
<ib:checkForMail/>
<jsp:forward page="/index.jsp"></jsp:forward>
</ib:requirePassword>

View File

@ -0,0 +1,33 @@
<%--
Copyright (C) 2009 HungryHobo@mail.i2p
The GPG fingerprint for HungryHobo@mail.i2p is:
6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12
This file is part of I2P-Bote.
I2P-Bote is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
I2P-Bote is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with I2P-Bote. If not, see <http://www.gnu.org/licenses/>.
--%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib prefix="ib" uri="I2pBoteTags" %>
<ib:clearPasswordCache/>
<ib:message key="Password Cleared" var="title" scope="request"/>
<ib:message key="The password has been cleared from the cache." var="infoMessage" scope="request"/>
<jsp:include page="header.jsp"/>
<jsp:include page="footer.jsp"/>

29
WebContent/connect.jsp Normal file
View File

@ -0,0 +1,29 @@
<%--
Copyright (C) 2009 HungryHobo@mail.i2p
The GPG fingerprint for HungryHobo@mail.i2p is:
6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12
This file is part of I2P-Bote.
I2P-Bote is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
I2P-Bote is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with I2P-Bote. If not, see <http://www.gnu.org/licenses/>.
--%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib prefix="ib" uri="I2pBoteTags" %>
<ib:connect/>
<jsp:forward page="/index.jsp"></jsp:forward>

View File

@ -0,0 +1,38 @@
<%--
Copyright (C) 2009 HungryHobo@mail.i2p
The GPG fingerprint for HungryHobo@mail.i2p is:
6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12
This file is part of I2P-Bote.
I2P-Bote is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
I2P-Bote is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with I2P-Bote. If not, see <http://www.gnu.org/licenses/>.
--%>
<%-- This page shows an exception trace if an exception occurred during startup --%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="ib" uri="I2pBoteTags" %>
<ib:message key="Error Details" var="title" scope="request"/>
<jsp:include page="header.jsp"/>
<div class="main">
<h2><ib:message key="Error"/></h2>
<jsp:useBean id="jspHelperBean" class="i2p.bote.web.JSPHelper"/>
<ib:printException exception="${jspHelperBean.connectError}"/>
</div>
<jsp:include page="footer.jsp"/>

60
WebContent/debug.jsp Normal file
View File

@ -0,0 +1,60 @@
<%--
Copyright (C) 2009 HungryHobo@mail.i2p
The GPG fingerprint for HungryHobo@mail.i2p is:
6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12
This file is part of I2P-Bote.
I2P-Bote is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
I2P-Bote is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with I2P-Bote. If not, see <http://www.gnu.org/licenses/>.
--%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="ib" uri="I2pBoteTags" %>
<ib:message key="Debug" var="title" scope="request"/>
<jsp:include page="header.jsp"/>
<div class="main">
<h2><ib:message key="Debug Page"/></h2>
<c:if test="${empty param.action}">
<form action="debug.jsp">
<input type="hidden" name="action" value="checkFiles"/>
<ib:message key="Test encrypted files" var="submitButtonText"/>
<input type="submit" value="${submitButtonText}"/>
</form>
</c:if>
<c:if test="${param.action eq 'checkFiles'}">
<jsp:useBean id="jspHelperBean" class="i2p.bote.web.JSPHelper"/>
<ib:requirePassword>
<c:set var="undecryptableFiles" value="${jspHelperBean.undecryptableFiles}"/>
<c:if test="${empty undecryptableFiles}">
<b><ib:message key="No file encryption problems found."/></b>
</c:if>
<c:if test="${not empty undecryptableFiles}">
<b><ib:message key="Undecryptable files:"/></b><br/>
<ul>
<c:forEach items="${undecryptableFiles}" var="file">
<li>${file}</li>
</c:forEach>
</ul>
</c:if>
</ib:requirePassword>
</c:if>
</div>
<jsp:include page="footer.jsp"/>

View File

@ -26,27 +26,20 @@
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="ib" uri="I2pBoteTags" %>
<c:if test="${param.action == 'Cancel'}">
<jsp:forward page="identities.jsp"/>
</c:if>
<c:choose>
<c:when test="${empty param.publicName}">
<c:set var="errorMessage" value="Please fill in the Public Name field."/>
</c:when>
<c:otherwise>
<c:set var="errorMessage" value="${ib:saveIdentity(param.key, param.publicName, param.description, param.emailAddress)}"/>
</c:otherwise>
</c:choose>
<ib:requirePassword>
<c:set var="errorMessage" value="${ib:deleteContact(param.destination)}"/>
<c:if test="${empty errorMessage}">
<jsp:forward page="identities.jsp">
<jsp:param name="infoMessage" value="The email identity has been saved."/>
<ib:message key="The contact has been deleted from the address book." var="message"/>
<jsp:forward page="addressBook.jsp">
<jsp:param name="message" value="${message}"/>
</jsp:forward>
</c:if>
<c:if test="${!empty errorMessage}">
<jsp:forward page="editIdentity.jsp">
<jsp:param name="errorMessage" value="${errorMessage}"/>
</jsp:forward>
</c:if>
<jsp:include page="header.jsp"/>
<div class="main">
<ib:message key="Error"/>: ${errorMessage}
</div>
<jsp:include page="footer.jsp"/>
</c:if>
</ib:requirePassword>

View File

@ -0,0 +1,37 @@
<%--
Copyright (C) 2009 HungryHobo@mail.i2p
The GPG fingerprint for HungryHobo@mail.i2p is:
6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12
This file is part of I2P-Bote.
I2P-Bote is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
I2P-Bote is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with I2P-Bote. If not, see <http://www.gnu.org/licenses/>.
--%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="ib" uri="I2pBoteTags" %>
<jsp:include page="header.jsp"/>
<c:set var="deleted" value="${ib:deleteEmail(param.folder, param.messageID)}"/>
<c:if test="${deleted}">
<jsp:forward page="folder.jsp?path=${param.folder}"/>
</c:if>
<c:if test="${!deleted}">
<ib:message key="Error: Couldn't delete email."/>
</c:if>

View File

@ -26,17 +26,20 @@
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="ib" uri="I2pBoteTags" %>
<ib:requirePassword>
<c:set var="errorMessage" value="${ib:deleteIdentity(param.key)}"/>
<c:if test="${empty errorMessage}">
<ib:message key="The email identity has been deleted." var="deleteMsg"/>
<jsp:forward page="identities.jsp">
<jsp:param name="message" value="The email identity has been deleted."/>
<jsp:param name="infoMessage" value="${deleteMsg}"/>
</jsp:forward>
</c:if>
<c:if test="${!empty errorMessage}">
<jsp:include page="header.jsp"/>
<div class="main">
Error: ${errorMessage}
<ib:message key="Error:"/> ${errorMessage}
</div>
<jsp:include page="footer.jsp"/>
</c:if>
</c:if>
</ib:requirePassword>

156
WebContent/editContact.jsp Normal file
View File

@ -0,0 +1,156 @@
<%--
Copyright (C) 2009 HungryHobo@mail.i2p
The GPG fingerprint for HungryHobo@mail.i2p is:
6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12
This file is part of I2P-Bote.
I2P-Bote is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
I2P-Bote is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with I2P-Bote. If not, see <http://www.gnu.org/licenses/>.
--%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="ib" uri="I2pBoteTags" %>
<%--
Valid actions:
<default> - show the "edit contact" form
save - add a contact or update an existing one
cancel - go to the URL in backUrl
Other parameters:
createNew - true for new contact, false for existing contact.
If createNew=true, the name field is populated with
the value of the "name" parameter.
If createNew=false, the name is read from the address
book, and the "name" parameter is ignored.
--%>
<ib:requirePassword>
<c:if test="${param.action eq 'cancel'}">
<c:set var="backUrl" value="${param.backUrl}"/>
<c:if test="${empty backUrl}">
<c:set var="backUrl" value="addressBook.jsp"/>
</c:if>
<jsp:forward page="${backUrl}">
<jsp:param name="action" value="none"/>
</jsp:forward>
</c:if>
<c:if test="${param.action eq 'save'}">
<c:choose>
<c:when test="${empty param.destination}">
<ib:message key="Please fill in the Destination field." var="errorMessage"/>
</c:when>
<c:when test="${empty param.name}">
<ib:message key="Please fill in the Name field." var="errorMessage"/>
</c:when>
<c:otherwise>
<c:set var="errorMessage" value="${ib:saveContact(param.destination, param.name, param.picture, param.text)}"/>
</c:otherwise>
</c:choose>
<c:if test="${empty errorMessage}">
<ib:message key="The contact has been saved." var="infoMessage"/>
<c:set var="forwardUrl" value="${param.forwardUrl}"/>
<c:if test="${empty forwardUrl}">
<c:set var="forwardUrl" value="addressBook.jsp"/>
</c:if>
<jsp:forward page="${forwardUrl}">
<jsp:param name="action" value="none"/>
<jsp:param name="infoMessage" value="${infoMessage}"/>
</jsp:forward>
</c:if>
<c:if test="${!empty errorMessage}">
<jsp:forward page="editContact.jsp">
<jsp:param name="action" value="none"/>
<jsp:param name="errorMessage" value="${errorMessage}"/>
</jsp:forward>
</c:if>
</c:if>
<c:choose>
<c:when test="${param.createNew}">
<ib:message key="New Contact" var="title"/>
<c:set var="title" value="${title}" scope="request"/>
<ib:message key="Add" var="submitButtonText"/>
<c:set var="name" value="${param.name}"/>
</c:when>
<c:otherwise>
<ib:message key="Edit Contact" var="title"/>
<c:set var="title" value="${title}" scope="request"/>
<ib:message key="Save" var="submitButtonText"/>
<c:set var="contact" value="${ib:getContact(param.destination)}"/>
<c:set var="name" value="${contact.name}"/>
</c:otherwise>
</c:choose>
<jsp:include page="header.jsp"/>
<div class="main">
<form name="form" action="editContact.jsp" method="post">
<ib:copyParams paramsToCopy="${param.paramsToCopy}"/>
<div class="contact-form-label">
<div><ib:message key="Email Destination:"/></div>
<c:if test="${empty param.destination}">
<div class="addtl-text"><ib:message key="(required field)"/></div>
</c:if>
</div>
<div class="contact-form-value">
<input type="text" size="60" name="destination" value="${ib:escapeQuotes(param.destination)}"/>
</div>
<div class="contact-form-label">
<div class="field-label"><ib:message key="Name:"/></div>
<c:if test="${empty param.destination}">
<div class="addtl-text"><ib:message key="(required field)"/></div>
</c:if>
</div>
<div class="contact-form-value">
<input type="text" size="40" name="name" value="${ib:escapeQuotes(name)}"/>
</div>
<div class="contact-form-label">
<div class="field-label"><ib:message key="Picture:"/></div>
</div>
<div class="contact-form-picture">
<img src="data:${contact.pictureType};base64,${contact.pictureBase64}"/>
<input type="hidden" name="picture" value="${contact.pictureBase64}"/>
</div>
<div class="contact-form-label">
<div class="field-label"><ib:message key="Text:"/></div>
</div>
<div class="contact-form-text">${fn:escapeXml(contact.text)}</div>
<input type="hidden" name="text" value="${contact.text}"/>
<p/>
<button name="action" value="save">${submitButtonText}</button>
<button name="action" value="cancel"><ib:message key="Cancel"/></button>
</form>
<script type="text/javascript" language="JavaScript">
if (document.forms['form'].elements['destination'].value == "")
document.forms['form'].elements['destination'].focus();
else
document.forms['form'].elements['name'].focus();
</script>
</div>
</ib:requirePassword>
<jsp:include page="footer.jsp"/>

View File

@ -27,73 +27,194 @@
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="ib" uri="I2pBoteTags" %>
<ib:message key="More..." var="moreText"/>
<ib:message key="Less..." var="lessText"/>
<ib:requirePassword>
<jsp:useBean id="jspHelperBean" class="i2p.bote.web.JSPHelper"/>
<c:choose>
<c:when test="${param.new}">
<c:set var="title" value="New Email Identity"/>
<c:set var="commitAction" value="Create"/>
<c:when test="${param.createNew}">
<ib:message key="New Email Identity" var="title" scope="request"/>
<ib:message key="Create" var="commitAction"/>
<c:set var="publicName" value="${param.publicName}"/>
<c:set var="description" value="${param.description}"/>
</c:when>
<c:otherwise>
<c:set var="title" value="Edit Email Identity"/>
<c:set var="commitAction" value="Save"/>
<ib:message key="Edit Email Identity" var="title" scope="request"/>
<ib:message key="Save" var="commitAction"/>
<c:set var="key" value="${param.key}"/>
<c:set var="identity" value="${ib:getIdentity(key)}"/>
<c:set var="publicName" value="${ib:escapeQuotes(identity.publicName)}"/>
<c:set var="description" value="${ib:escapeQuotes(identity.description)}"/>
</c:otherwise>
</c:choose>
<jsp:include page="header.jsp">
<jsp:param name="title" value="${title}"/>
</jsp:include>
<div class="errorMessage">
${param.errorMessage}
</div>
<jsp:include page="header.jsp"/>
<div class="main">
<form name="form" action="saveIdentity.jsp">
<table>
<tr>
<td>
<div style="font-weight: bold;">Public Name:</div>
<div style="font-size: 0.8em;">(required field, shown to recipients)</div>
</td>
<td>
<input type="text" size="25" name="publicName" value="${param.publicName}"/>
</td>
</tr>
<tr>
<td>
<div style="font-weight: bold;">Description:</div>
<div style="font-size: 0.8em;">(optional, kept private)</div>
</td>
<td>
<input type="text" size="25" name="description" value="${param.description}"/>
</td>
</tr>
<tr>
<td>
<div style="font-weight: bold;">Email Address:</div>
<div style="font-size: 0.8em;">(optional)</div>
</td>
<td>
<input type="text" size="50" name="emailAddress" value="${param.emailAddress}"/>
</td>
</tr>
<c:if test="${!empty param.key}">
<tr>
<td style="font-weight: bold; vertical-align: top;">
Email Destination:
</td>
<td>
<textarea cols="64" rows="8" readonly="yes" wrap="soft" style="background-color: transparent; border: none;">${param.key}</textarea>
</td>
</tr>
<h2>${title}</h2>
<c:if test="${param.createNew}">
<ib:message>An Email Identity lets you receive email from other I2P-Bote users.</ib:message>
<ib:expandable>
<jsp:include page="identitiesHelp.jsp"/>
</ib:expandable>
</c:if>
<form name="form" method="post" action="submitIdentity.jsp">
<div class="identity-form-label">
<div class="field-label"><ib:message key="Public Name:"/></div>
<div class="addtl-text"><ib:message key="(required field, shown to recipients)"/></div>
</div>
<div class="identity-form-value">
<input type="text" size="40" name="publicName" value="${publicName}"/>
</div>
<div class="identity-form-label">
<div class="field-label"><ib:message key="Description:"/></div>
<div class="addtl-text"><ib:message key="(optional, kept private)"/></div>
</div>
<div class="identity-form-value">
<input type="text" size="40" name="description" value="${description}"/>
</div>
<div class="identity-form-label">
<div class="field-label"><ib:message key="Picture:"/></div>
<div class="addtl-text"><ib:message key="(published to the address directory)"/></div>
</div>
<div class="identity-form-picture">
<c:if test="${not empty identity.picture}">
<img src="data:${identity.pictureType};base64,${identity.pictureBase64}"/>
</c:if>
</table>
<input type="submit" name="action" value="${commitAction}"/>
<input type="submit" name="action" value="Cancel"/>
<c:if test="${empty identity.picture}">
&nbsp;<br/>&nbsp;<br/>
</c:if>
</div>
<div class="identity-form-label">
<div class="field-label"><ib:message key="Text:"/></div>
<div class="addtl-text"><ib:message key="(published to the address directory)"/></div>
</div>
<div class="identity-form-text"><c:if test="${not empty identity.text}">${fn:escapeXml(identity.text)}</c:if><c:if test="${empty identity.text}">&nbsp;</c:if></div>
<div class="identity-form-label">
<div class="field-label"><ib:message key="Encryption:"/></div>
<c:if test="${param.createNew}">
<div class="addtl-text"><ib:message key="(If unsure, leave the default)"/></div>
</c:if>
</div>
<div class="identity-form-value">
<c:if test="${param.createNew}">
<c:set var="selectedCryptoImplId" value="${param.cryptoImpl}"/>
<c:if test="${empty param.cryptoImpl}">
<c:set var="selectedCryptoImplId" value="2"/>
</c:if>
<select name="cryptoImpl">
<c:forEach items="${jspHelperBean.cryptoImplementations}" var="cryptoImpl">
<c:set var="selected" value=""/>
<c:if test="${selectedCryptoImplId eq cryptoImpl.id}">
<c:set var="selected" value=" selected"/>
</c:if>
<option value="${cryptoImpl.id}"${selected}>
${cryptoImpl.name}
</option>
</c:forEach>
</select>
</c:if>
<c:if test="${not param.createNew}">
<c:set var="cryptoImpl" value="${ib:getCryptoImplementation(identity.cryptoImpl.id)}"/>
${cryptoImpl.name}
</c:if>
</div>
<c:if test="${param.createNew}">
<div class="identity-form-label">
<ib:message key="Vanity Destination:"/>
<div class="addtl-text"><ib:message key="(2 chars takes seconds, 3 takes minutes, etc.)"/></div>
</div>
<div class="identity-form-value">
<input type="text" size="10" name="vanityPrefix" value="${vanityPrefix}"/>
</div>
</c:if>
<c:if test="${not empty param.key}">
<div class="identity-form-label">
<ib:message key="Email Destination:"/>
</div>
<div class="identity-form-value">
<div class="destination">${param.key}</div>
</div>
</c:if>
<c:if test="${not empty param.key}">
<div class="identity-form-label">
<ib:message key="Fingerprint:"/>
</div>
<c:set var="uiLocaleCode" value="${jspHelperBean.language}"/>
<c:set var="fingerprint" value="${ib:getIdentityFingerprint(identity, uiLocaleCode)}"/>
<div class="identity-form-value">
<c:if test="${not empty fingerprint}">
${fingerprint}
<ib:expandable>
<c:forEach items="${jspHelperBean.wordListLocales}" var="localeCode">
<c:if test="${localeCode ne uiLocaleCode}">
&nbsp;&nbsp;<b>${localeCode}</b>: ${ib:getIdentityFingerprint(identity, localeCode)}<br/>
</c:if>
</c:forEach>
</ib:expandable>
</c:if>
</div>
<c:if test="${empty fingerprint}">
&nbsp;
</c:if>
</c:if>
<div class="identity-form-label">
<ib:message key="Default Identity:"/>
</div>
<div class="identity-form-checkbox">
<c:if test="${jspHelperBean.identities.size le 1}">
<c:set var="disabled" value="disabled='disabled'"/>
</c:if>
<c:if test="${param.defaultIdentity or not empty disabled}">
<c:set var="checked" value="checked='checked'"/>
</c:if>
<input type="checkbox" name="defaultIdentity" ${disabled} ${checked}/>
</div>
<c:if test="${not empty param.key}">
<div class="identity-form-label">
<div class="field-label"><ib:message key="Private keys:"/></div>
<div class="warning addtl-text"><ib:message key="(Never reveal to anyone!)"/></div>
</div>
<div class="identity-form-value">
<a href="showFullIdentity.jsp?key=${key}"><ib:message key="Show"/></a>
</div>
</c:if>
<p><br/></p>
<div class="identity-buttons">
<input type="hidden" name="createNew" value="${param.createNew}"/>
<input type="hidden" name="key" value="${param.key}"/>
<button name="action" value="${commitAction}">${commitAction}</button>
<button name="action" value="cancel"><ib:message key="Cancel"/></button>
</div>
<c:if test="${not param.createNew}">
<div class="identity-delete">
<jsp:include page="getStatus.jsp"/>
<c:if test="${connStatus ne CONNECTED}">
<ib:message var="publishTooltip" key="Cannot publish until connected."/>
<c:set var="publishDisabled" value=" disabled='disabled' title='${publishTooltip}'"/>
</c:if>
<button name="action" value="publish"${publishDisabled}><ib:message key="Publish"/></button>
<button name="action" value="delete" title="<ib:message key='Delete this identity'/>"><ib:message key="Delete"/></button>
</div>
</c:if>
</form>
<script type="text/javascript" language="JavaScript">
document.forms['form'].elements['name'].focus();
document.forms['form'].elements['publicName'].focus();
</script>
</div>
</ib:requirePassword>
<jsp:include page="footer.jsp"/>

View File

@ -24,58 +24,211 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="ib" uri="I2pBoteTags" %>
<jsp:include page="header.jsp">
<jsp:param name="title" value="${param.path}"/>
</jsp:include>
<%
pageContext.setAttribute("FROM", i2p.bote.email.EmailAttribute.FROM, PageContext.PAGE_SCOPE);
pageContext.setAttribute("TO", i2p.bote.email.EmailAttribute.TO, PageContext.PAGE_SCOPE);
pageContext.setAttribute("SUBJECT", i2p.bote.email.EmailAttribute.SUBJECT, PageContext.PAGE_SCOPE);
pageContext.setAttribute("DATE", i2p.bote.email.EmailAttribute.DATE, PageContext.PAGE_SCOPE);
pageContext.setAttribute("DELIVERED", i2p.bote.email.EmailAttribute.DELIVERED, PageContext.PAGE_SCOPE);
%>
<%-- The outbox is implemented in a separate JSP --%>
<c:if test="${param.path eq 'Outbox'}">
<jsp:forward page="outbox.jsp"/>
</c:if>
<c:set var="refreshUrl" value="folder.jsp?path=${param.path}&amp;sortcolumn=${param.sortcolumn}&amp;descending=${param.descending}" scope="request"/>
<ib:requirePassword forwardUrl="${refreshUrl}">
<%-- Autorefresh inbox and sent folders --%>
<c:if test="${param.path eq 'Inbox' or param.path eq 'Sent'}">
<c:set var="refreshInterval" value="60" scope="request"/>
</c:if>
<ib:message key="${param.path}" var="title" scope="request" noextract="true"/> <%-- Translation strings are extracted from folders.jsp --%>
<jsp:include page="header.jsp"/>
<c:set var="folderName" value="${param.path}"/>
<c:if test="${empty folderName}">
<c:set var="folderName" value="Inbox"/>
</c:if>
<c:if test="${folderName == 'Inbox'}">
<div id="inboxFlag"></div>
</c:if>
[DEBUG MSG: This is the <b>${param.path}</b> folder.]
<c:set var="isSentFolder" value="false"/>
<c:if test="${folderName == 'Sent'}">
<c:set var="isSentFolder" value="true"/>
</c:if>
<div class="main">
<div class="folder">
<table>
<tr>
<th style="width: 100px;">Sender</th>
<th style="width: 150px;">Subject</th>
<th style="width: 100px;">Date</th>
<th style="width: 20px;"></th>
</tr>
<c:set var="folderName" value="Inbox"/>
<c:forEach items="${ib:getMailFolder(folderName).elements}" var="email">
<tr>
<c:set var="sender" value="${email.sender}"/>
<c:set var="sortcolumn" value="${DATE}"/>
<c:if test="${!empty param.sortcolumn}">
<c:set var="sortcolumn" value="${param.sortcolumn}"/>
</c:if>
<c:choose>
<c:when test="${empty param.descending}">
<%-- Use the default sort direction: descending for date, ascending for everything else --%>
<c:if test="${sortcolumn eq DATE}">
<c:set var="descending" value="true"/>
</c:if>
<c:if test="${sortcolumn ne DATE}">
<c:set var="descending" value="false"/>
</c:if>
</c:when>
<c:otherwise>
<%-- Set the sort direction depending on param.descending --%>
<c:set var="descending" value="false"/>
<c:if test="${param.descending}">
<c:set var="descending" value="true"/>
</c:if>
</c:otherwise>
</c:choose>
<c:if test="${!descending}">
<c:set var="sortIndicator" value="&#x25b4;"/>
<c:set var="reverseSortOrder" value="&amp;descending=true"/>
</c:if>
<c:if test="${descending}">
<c:set var="sortIndicator" value="&#x25be;"/>
<c:set var="reverseSortOrder" value="&amp;descending=false"/>
</c:if>
<div class="main foldermain">
<table>
<c:set var="folder" value="${ib:getMailFolder(folderName)}"/>
<tr>
<th class="header-column-replied"/>
<th class="header-column-from">
<c:set var="sortLink" value="folder.jsp?path=${param.path}&amp;sortcolumn=${FROM}"/>
<c:if test="${sortcolumn eq FROM}">
<c:set var="sortLink" value="${sortLink}${reverseSortOrder}"/>
<c:set var="fromColumnIndicator" value=" ${sortIndicator}"/>
</c:if>
<a href="${sortLink}"><ib:message key="From"/>${fromColumnIndicator}</a>
</th>
<%-- Don't show the "known" column in the sent folder --%>
<c:if test="${not isSentFolder}">
<th class="header-column-known"><ib:message key="Know"/></th>
</c:if>
<th class="header-column-to">
<c:set var="sortLink" value="folder.jsp?path=${param.path}&amp;sortcolumn=${TO}"/>
<c:if test="${sortcolumn eq TO}">
<c:set var="sortLink" value="${sortLink}${reverseSortOrder}"/>
<c:set var="toColumnIndicator" value=" ${sortIndicator}"/>
</c:if>
<a href="${sortLink}"><ib:message key="To"/>${toColumnIndicator}</a>
</th>
<th class="header-column-subject">
<c:set var="sortLink" value="folder.jsp?path=${param.path}&amp;sortcolumn=${SUBJECT}"/>
<c:if test="${sortcolumn eq SUBJECT}">
<c:set var="sortLink" value="${sortLink}${reverseSortOrder}"/>
<c:set var="subjectColumnIndicator" value=" ${sortIndicator}"/>
</c:if>
<a href="${sortLink}"><ib:message key="Subject"/>${subjectColumnIndicator}</a>
</th>
<th class="header-column-date">
<c:set var="sortLink" value="folder.jsp?path=${param.path}&amp;sortcolumn=${DATE}"/>
<c:if test="${sortcolumn eq DATE}">
<c:set var="sortLink" value="${sortLink}${reverseSortOrder}"/>
<c:set var="dateColumnIndicator" value=" ${sortIndicator}"/>
</c:if>
<a href="${sortLink}"><ib:message key="Sent Time"/>${dateColumnIndicator}</a>
</th>
<%-- Show the "delivered" column only in the sent folder --%>
<c:if test="${isSentFolder}">
<th class="header-column-delivery">
<c:set var="sortLink" value="folder.jsp?path=${param.path}&amp;sortcolumn=${DELIVERED}"/>
<c:if test="${sortcolumn eq DELIVERED}">
<c:set var="sortLink" value="${sortLink}${reverseSortOrder}"/>
<c:set var="deliveryColumnIndicator" value=" ${sortIndicator}"/>
</c:if>
<a href="${sortLink}"><ib:message key="Delivered"/>${deliveryColumnIndicator}</a>
</th>
</c:if>
<th class="header-column-trash"></th>
</tr>
<c:forEach items="${ib:getEmails(folder, sortcolumn, descending)}" var="email" varStatus="status">
<c:set var="sender" value="${ib:getNameAndShortDestination(email.oneFromAddress)}"/>
<c:if test="${empty sender}">
<ib:message key="Anonymous" var="sender"/>
</c:if>
<c:set var="known" value=""/>
<c:if test="${ib:isKnown(email.oneFromAddress)}">
<c:set var="known" value="<div class='sender-known'>&#10004;</div>"/>
</c:if>
<c:if test="${isSentFolder}">
<c:set var="delivered" value="<div class='deliveryComplete'>&#10004;</div>"/>
<c:set var="deliveryPercentage" value="${email.deliveryPercentage}"/>
<c:if test="${not email.delivered}">
<c:set var="delivered" value="<div class='deliveryIncomplete' title='${deliveryPercentage}%'><meter max='100' value='${deliveryPercentage}'>${deliveryPercentage}</meter></div>"/>
</c:if>
</c:if>
<c:set var="recipient" value="${ib:getNameAndShortDestination(ib:getOneLocalRecipient(email))}"/>
<c:set var="subject" value="${email.subject}"/>
<c:if test="${empty subject}">
<ib:message key="(No subject)" var="subject"/>
</c:if>
<c:set var="mailUrl" value="showEmail.jsp?folder=${folderName}&amp;messageID=${email.messageID}"/>
<c:choose>
<c:when test="${email.unread}"><c:set var="textClass" value="folder-item-new"/></c:when>
<c:otherwise><c:set var="textClass" value="folder-item-old"/></c:otherwise>
</c:choose>
<c:set var="backgroundClass" value="even-table-cell"/>
<c:if test="${status.index%2 != 0}">
<c:set var="backgroundClass" value="odd-table-cell"/>
</c:if>
<tr class="${textClass} ${backgroundClass}">
<td class="header-column-replied">
<c:if test="${not email.signatureValid and not email.anonymous}">
<ib:message key="Signature is invalid or missing" var="sigMessage"/>
<div class="sig-invalid"><img src="${themeDir}/images/warning.png" title="${sigMessage}"/></div>
</c:if>
<c:if test="${email.signatureValid}">
<c:if test="${email.replied}">&#10550;</c:if>
</c:if>
</td>
<td class="ellipsis"><a href="${mailUrl}">
<c:if test="${email.anonymous}">
<div class="anon-sender">
</c:if>
${fn:escapeXml(sender)}
<c:if test="${empty sender}">
<c:set var="sender" value="Anonymous"/>
</div>
</c:if>
<c:set var="date" value="${email.date}"/>
<c:if test="${empty date}">
<c:set var="date" value="${email.dateString}"/>
</c:if>
<c:if test="${empty date}">
<c:set var="date" value="Unknown"/>
</c:if>
<c:set var="subject" value="${email.subject}"/>
<c:if test="${empty subject}">
<c:set var="subject" value="(No subject)"/>
</c:if>
<c:set var="mailUrl" value="showEmail.jsp?folder=${folderName}&messageID=${email.messageID}"/>
<td><div class="ellipsis"><a href="${mailUrl}">${sender}</a></div></td>
<td><div class="ellipsis"><a href="${mailUrl}">${subject}</a></div></td>
<td><a href="${mailUrl}">${date}</a></td>
<td><a href="deleteEmail.jsp?folder=${folderName}&messageID=${email.messageID}"><img src="images/delete.png" alt="Delete" title="Delete this email"/></a></td>
</tr>
</c:forEach>
</table>
</div>
</a></td>
<%-- Don't show the "known" column in the sent folder --%>
<c:if test="${not isSentFolder}">
<td><c:out value="${known}" escapeXml="false"/></td>
</c:if>
<td class="ellipsis"><a href="${mailUrl}">${fn:escapeXml(recipient)}</a></td>
<td class="ellipsis"><a href="${mailUrl}">${fn:escapeXml(subject)}</a></td>
<td>
<a href="${mailUrl}"><ib:printDate date="${email.sentDate}" type="date" timeStyle="short" printUnknown="true"/></a>
<a href="${mailUrl}"><ib:printDate date="${email.sentDate}" type="time" timeStyle="short"/></a>
</td>
<%-- Show the "delivered" column only in the sent folder --%>
<c:if test="${isSentFolder}">
<td>${delivered}</td>
</c:if>
<td>
<a href="deleteEmail.jsp?folder=${folderName}&amp;messageID=${email.messageID}">
<img src="${themeDir}/images/delete.png" alt="<ib:message key='Delete'/>" title="<ib:message key='Delete this email'/>"/></a>
</td>
</tr>
</c:forEach>
</table>
</div>
</ib:requirePassword>
<jsp:include page="footer.jsp"/>

54
WebContent/folders.jsp Normal file
View File

@ -0,0 +1,54 @@
<%--
Copyright (C) 2009 HungryHobo@mail.i2p
The GPG fingerprint for HungryHobo@mail.i2p is:
6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12
This file is part of I2P-Bote.
I2P-Bote is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
I2P-Bote is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with I2P-Bote. If not, see <http://www.gnu.org/licenses/>.
--%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="ib" uri="I2pBoteTags" %>
<jsp:useBean id="jspHelperBean" class="i2p.bote.web.JSPHelper"/>
<c:set var="themeDir" value="themes/${jspHelperBean.configuration.theme}" scope="request"/>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="${themeDir}/i2pbote.css" />
<c:set var="refreshInterval" value="120"/>
<c:if test="${ib:getMailFolder('Outbox').numElements gt 0}">
<c:set var="refreshInterval" value="20"/>
</c:if>
<meta http-equiv="refresh" content="${refreshInterval}" />
</head>
<body class="iframe-body">
<div class="folderbox">
<h2><ib:message key="Folders"/></h2>
<ib:message key="Inbox" var="displayName"/><ib:folderLink dirName="Inbox" displayName="${displayName}"/><br/>
<ib:message key="Outbox" var="displayName"/><ib:folderLink dirName="Outbox" displayName="${displayName}"/><br/>
<ib:message key="Sent" var="displayName"/><ib:folderLink dirName="Sent" displayName="${displayName}"/><br/>
<ib:message key="Trash" var="displayName"/><ib:folderLink dirName="Trash" displayName="${displayName}"/><br/>
</div>
</body>
</html>

37
WebContent/getStatus.jsp Normal file
View File

@ -0,0 +1,37 @@
<%--
Copyright (C) 2009 HungryHobo@mail.i2p
The GPG fingerprint for HungryHobo@mail.i2p is:
6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12
This file is part of I2P-Bote.
I2P-Bote is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
I2P-Bote is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with I2P-Bote. If not, see <http://www.gnu.org/licenses/>.
--%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="ib" uri="I2pBoteTags" %>
<%
pageContext.setAttribute("NOT_STARTED", i2p.bote.network.NetworkStatus.NOT_STARTED, PageContext.REQUEST_SCOPE);
pageContext.setAttribute("DELAY", i2p.bote.network.NetworkStatus.DELAY, PageContext.REQUEST_SCOPE);
pageContext.setAttribute("CONNECTING", i2p.bote.network.NetworkStatus.CONNECTING, PageContext.REQUEST_SCOPE);
pageContext.setAttribute("CONNECTED", i2p.bote.network.NetworkStatus.CONNECTED, PageContext.REQUEST_SCOPE);
pageContext.setAttribute("ERROR", i2p.bote.network.NetworkStatus.ERROR, PageContext.REQUEST_SCOPE);
%>
<jsp:useBean id="jspHelperBean" class="i2p.bote.web.JSPHelper"/>
<c:set var="connStatus" value="${jspHelperBean.networkStatus}" scope="request"/>

View File

@ -24,62 +24,110 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="ib" uri="I2pBoteTags" %>
<%--
JSP variables that can be passed into this JSP:
title - The page title to set
refreshInterval - If this parameter is set, do an HTTP refresh every refreshInterval seconds
refreshUrl - If refreshInterval is set, load this URL when refreshing
infoMessage - Display an informational message
errorMessage - Display an error message
infoMessage and errorMessage can also be passed in as an HTTP parameter.
--%>
<fmt:requestEncoding value="UTF-8"/>
<jsp:useBean id="jspHelperBean" class="i2p.bote.web.JSPHelper"/>
<c:set var="themeDir" value="themes/${jspHelperBean.configuration.theme}" scope="request"/>
<fmt:setLocale value="${jspHelperBean.language}" scope="request"/>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="i2pbote.css" />
<link rel="icon" type="image/png" href="images/favicon.png" />
<title>${param.title} - I2P-Bote</title>
<%-- Refresh --%>
<c:if test="${not empty refreshInterval}">
<meta http-equiv="refresh" content="${refreshInterval};url=${refreshUrl}" />
</c:if>
<link rel="stylesheet" href="themes/${jspHelperBean.configuration.theme}/i2pbote.css" />
<link rel="icon" type="image/png" href="${themeDir}/images/favicon.png" />
<c:if test="${!empty title}">
<title>${title} <ib:message key="- I2P-Bote"/></title>
</c:if>
</head>
<body>
<div class="titlebar" style="cursor:pointer" onclick="document.location='.'">
<div class="title">I2P-Bote</div>
<div class="titlebar" onclick="document.location='.'">
<c:if test="${jspHelperBean.passwordInCache}">
<div class="password">
<ib:message key="Password is cached. Click to clear the password cache." var="linkTitle"/>
<a href="clearPasswordCache.jsp" title="${linkTitle}"><img src="${themeDir}/images/clear_password.png"/></a>
</div>
</c:if>
<div class="title"><ib:message key="I2P-Bote"/></div>
<br/>
<div class="subtitle">Secure Distributed Email</div>
<div class="subtitle"><ib:message key="Secure Distributed Email"/></div>
</div>
<c:if test="${jspHelperBean.updateAvailable}">
<div class="updateMessage">
<a href="http://localhost:7657/configclients.jsp#plugin" target="_parent"><ib:message key="A new version is available. Click here for the configuration page."/></a>
</div>
</c:if>
<div class="menubox">
<iframe src="buttonFrame.jsp" class="button-frame"></iframe>
</div>
<div class="menubox">
<iframe src="buttonFrame.jsp" width="100%" height="40px" scrolling="no" frameborder="0" allowtransparency="true"></iframe>
<iframe src="folders.jsp" class="folders-frame"></iframe>
</div>
<div class="menubox">
<h2>Folders</h2>
<a href="folder.jsp?path=Inbox"><img src="images/folder.png"/>Inbox</a><br/>
<a href="folder.jsp?path=Outbox"><img src="images/folder.png"/>Outbox</a><br/>
<a href="folder.jsp?path=Sent"><img src="images/folder.png"/>Sent</a><br/>
<a href="folder.jsp?path=Drafts"><img src="images/folder.png"/>Drafts</a><br/>
<a href="folder.jsp?path=Trash"><img src="images/folder.png"/>Trash</a><br/>
<hr/>
<a href="folder.jsp?path=User_created_Folder_1"><img src="images/folder.png"/>User_created_Folder_1</a><br/>
<a href="folder.jsp?path=User_created_Folder_2"><img src="images/folder.png"/>User_created_Folder_2</a><br/>
<a href="folder.jsp?path=User_created_Folder_3"><img src="images/folder.png"/>User_created_Folder_3</a><br/>
<hr/>
<a href=.>Manage Folders</a>
<h2><ib:message key="Addresses"/></h2>
<a href="identities.jsp"><ib:message key="Identities"/></a><br/>
<a href="addressBook.jsp"><ib:message key="Address Book"/></a><br/>
Public Address Directory<br/>
</div>
<div class="menubox">
<h2>Addresses</h2>
<a href="identities.jsp">Identities</a><br/>
<a href=.>Private Address Book</a><br/>
<a href=.>Public Address Directory</a><br/>
<h2><ib:message key="Configuration"/></h2>
<a href="settings.jsp"><ib:message key="Settings"/></a><br/>
</div>
<div class="menubox">
<h2>Configuration</h2>
<a href=.>Settings</a><br/>
<h2><a href="network.jsp"><ib:message key="Network Status"/></a></h2>
<iframe src="statusFrame.jsp" class="status-frame"></iframe>
</div>
<div class="menubox">
<h2>Network Status</h2>
<iframe src="statusFrame.jsp" width="100%" height="40px" scrolling="no" frameborder="0" allowtransparency="true"></iframe>
<h2><ib:message key="Help"/></h2>
<a href="${ib:getLocalizedFilename('User\'s Guide.html', pageContext.servletContext)}"><ib:message key="User Guide"/></a><br/>
<a href="${ib:getLocalizedFilename('FAQ.html', pageContext.servletContext)}"><ib:message key="FAQ"/></a><br/>
<a href="about.jsp"><ib:message key="About"/></a><br/>
</div>
<div class="menubox">
<h2>Help</h2>
<a href=.>User Guide</a><br/>
<a href="about.jsp">About</a><br/>
<div class="infoMessage">
<c:if test="${not empty infoMessage}">
${fn:escapeXml(infoMessage)}
</c:if>
<c:if test="${empty infoMessage}">
${fn:escapeXml(param.infoMessage)}
</c:if>
</div>
<div class="errorMessage">
<c:if test="${not empty errorMessage}">
${fn:escapeXml(errorMessage)}
</c:if>
<c:if test="${empty errorMessage}">
${fn:escapeXml(param.errorMessage)}
</c:if>
</div>

View File

@ -1,336 +0,0 @@
/* Based on the router console css */
body {
margin: 15px 0 0 10px;
padding: 0em;
text-align: center;
background: #eef;
color: #000;
font: 9pt/130% "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
}
.titlebar {
width: 800px;
margin: 0px 20px 20px 240px;
background-color: #fff;
color: #310;
padding: 0 15px 15px 25px;
-moz-border-radius: 4px;
-khtml-border-radius: 4px;
border-radius: 4px;
border: 1px solid #001;
text-align: center;
-moz-box-shadow: inset 0px 0px 1px 0px #002;
white-space: normal;
background: #ddf url('images/lightbluetile.png');
opacity: 1.0;
}
.title {
font: normal bold 20pt/120% 'Lucida Sans Unicode', 'Bitstream Vera Sans', Verdana, Tahoma, Helvetica, sans-serif;
font-weight: bold;
letter-spacing: 0.15em;
text-shadow: 0px 0px 1px rgba(0, 0, 148, 0.9);
}
.subtitle {
font-size: 8pt;
color: #cf0606;
letter-spacing: 5pt;
text-shadow: 0px 0px 1px rgba(148, 0, 0, 0.9);
}
.checkmail {
font: bold 8pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
color: #555;
}
.menubox {
float: left;
width: 175px;
margin: 0px 0px 10px 10px;
padding: 10px;
text-align: left;
border: 1px solid #000033;
background: #ddf url('images/lightbluetile.png');
color: #000;
font-size: 8pt;
clear: left;
-moz-border-radius: 4px;
-khtml-border-radius: 4px;
border-radius: 4px;
-moz-box-shadow: inset 0px 0px 1px 0px #002;
}
.menubox a:link, .menubox a:visited {
text-shadow: 0px 0px 1px rgba(0, 0, 32, 0.5);
}
.menubox a:hover {
text-shadow: 0px 0px 0.5px rgba(255, 255, 255, 0.7);
color: #f60;
}
.menubox h2 {
font-size: 12pt;
color: #001;
letter-spacing: 0.05em;
text-shadow: 0px 0px 1px rgba(0, 0, 64, 0.5);
wordwrap: none;
}
.statusbox table {
width: 100%;
}
.statusbox td {
text-align: left;
color: #000;
font-size: 8pt;
vertical-align: top;
padding: 0px 30px 0px 0px;
width: 100%;
}
.main {
width: 800px;
margin: 0px 20px 20px 240px;
padding: 0 15px 15px 25px;
background: #eef;
font: 9pt/130% "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
text-align: left;
color: #001;
border: 1px solid #000033;
background: #ddf url('images/lightbluetile.png');
-moz-border-radius: 4px;
-khtml-border-radius: 4px;
border-radius: 4px;
-moz-box-shadow: inset 0px 0px 1px 0px #002;
}
.infoMessage {
margin: 0px 20px 5px 240px;
text-align: left;
color: green;
}
.errorMessage {
margin: 0px 20px 5px 240px;
text-align: left;
color: red;
}
img {
border: none;
}
a:active {
color: #900;
}
a:link {
color: #007;
text-decoration: none;
font-weight: bold;
word-wrap: break-word;
}
a:visited {
color: #606;
text-decoration: none;
font-weight: bold;
}
a:hover {
color: #f60;
text-decoration: underline;
font-weight: bold;
}
a:active {
color: #f93;
text-decoration: underline;
font-weight: bold;
}
button, button:visited {
font: bold 8pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
border: 1px outset #999;
padding: 1px 3px;
background: #ddf !important;
text-decoration: none;
border-radius: 4px;
-moz-border-radius: 4px;
-khtml-border-radius: 4px;
margin: 0 1px;
text-align: center;
min-width: 80px;
-moz-box-shadow: inset 0px 2px 8px 0px #fff;
color: #006;
}
button:hover {
border: 1px solid #f60;
background: #f60 !important;
color: #fff;
-moz-box-shadow: inset 0px 0px 0px 1px #fff;
}
button:active {
border: 1px solid #f60;
background: #001 !important;
color: #f60;
-moz-box-shadow: inset 0px 0px 0px 1px #f60;
}
.underline {
border-bottom: 1px solid #000022;
padding: 5px 0px 5px 0px;
margin: 0px 0px 10px 0px;
}
input {
background: #eef;
color: #001;
margin: 5px 10px 5px 10px;
padding: 4px 2px;
font: bold 8pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
border: 1px solid #001;
text-decoration: none;
min-width: 110px;
}
input, input:visited {
border: 1px outset #999;
background: #ddf;
color: #001;
margin: 5px;
font: bold 8pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
padding: 1px 2px;
text-decoration: none;
min-width: 110px;
border-radius: 4px;
-moz-border-radius: 4px;
-khtml-border-radius: 4px;
-moz-box-shadow: inset 0px 2px 8px 0px #fff;
color: #006;
opacity: 0.9;
}
input:hover {
background: #f60;
color: #fff;
border: 1px solid #f60;
opacity: 1.0;
-moz-box-shadow: inset 0px 0px 0px 1px #fff;
}
input:active {
background: #002;
color: #f60;
border: 1px solid #f60;
opacity: 1.0;
-moz-box-shadow: inset 0px 0px 0px 1px #f60;
}
input[type=text] {
width: 100%;
background: #eef;
color: #001;
margin: 5px;
padding: 5px;
font: bold 8pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
border: 1px solid #001;
text-decoration: none;
}
input checkbox {
border: 0 !important;
}
textarea {
width: 100%;
padding: 5px;
margin: 5px;
background: #eef;
color: #003;
border-radius: 4px;
-moz-border-radius: 4px;
-khtml-border-radius: 4px;
font: 8pt "Lucida Console", "DejaVu Sans Mono", Courier, mono;
min-height: 100px;
border: 1px solid #001;
}
submit {
background: #f00;
color: #eef;
margin: 10px 2px 10px 0;
padding: 2px;
font-family: "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
font-weight: bold;
border: 1px solid #001;
text-decoration: none;
}
select {
background: #eef;
color: #003;
padding: 2px;
margin: 5px;
border: 1px solid #001;
font: 9pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
border-radius: 4px;
-moz-border-radius: 4px;
-khtml-border-radius: 4px;
text-align: left !important;
}
.folder table {
table-layout: fixed;
width: 800px;
}
.identities table {
table-layout: fixed;
width: 800px;
}
.identities td, .identities th {
vertical-align: top;
padding: 0px 30px 0px 0px;
white-space: nowrap;
overflow-x: hidden;
}
.ellipsis
{
line-height: 1.2em;
height: 1.2em;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
width: 100%;
-o-text-overflow: ellipsis;
-moz-binding: url(moz_fix2.xml#ellipsis);
}
.moz-ellipsis > DIV:first-child
{
float: left;
margin-right: -26px;
}
.moz-ellipsis > DIV + DIV
{
float: right;
margin-top: -1.2em;
background: url('images/lightbluefade.png');
padding-left: 26px;
}
.moz-ellipsis > DIV + DIV::after
{
background: url('images/lightbluetile.png');
content: '...';
}

View File

@ -26,68 +26,59 @@
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="ib" uri="I2pBoteTags" %>
<jsp:include page="header.jsp">
<jsp:param name="title" value="Identities"/>
</jsp:include>
<div class="infoMessage">
${param.infoMessage}
</div>
<ib:message key="Identities" var="title" scope="request"/>
<jsp:include page="header.jsp"/>
<jsp:useBean id="jspHelperBean" class="i2p.bote.web.JSPHelper"/>
<div class="main">
<h2>
Email Identities
<ib:message key="Email Identities"/>
</h2>
<c:if test="${empty ib:getIdentities().all}">
No email identities are defined.
<ib:requirePassword>
<c:set var="identities" value="${jspHelperBean.identities.all}"/>
</ib:requirePassword>
<c:if test="${empty identities}">
<ib:message key="No email identities are defined."/>
</c:if>
<div class="identities">
<table>
<tr>
<th>Description</th>
<th>Public Name</th>
<th>Email Address</th>
<th>Key</th>
<th style="width: 20px; padding: 0px"></th>
</tr>
<c:forEach items="${ib:getIdentities().all}" var="identity">
<c:if test="${!empty identities}">
<tr>
<td style="width: 100px;">
<div class="ellipsis">
<a href="editIdentity.jsp?new=false&key=${identity.key}&publicName=${identity.publicName}&description=${identity.description}&emailAddress=${identity.emailAddress}">
${identity.publicName}
</a>
</div>
</td>
<td style="width: 150px;">
<div class="ellipsis">
${identity.description}
</div>
</td>
<td style="width: 150px;">
<div class="ellipsis">
${identity.emailAddress}
</div>
</td>
<td style="width: 100px;">
<div class="ellipsis">
${identity.key}
</div>
<th class="header-column-default"><ib:message key="Def."/></th>
<th class="header-column-public-name"><ib:message key="Public Name"/></th>
<th class="header-column-description"><ib:message key="Description"/></th>
<th class="header-column-id-email-dest"><ib:message key="Email Destination"/></th>
</tr>
</c:if>
<c:forEach items="${identities}" var="identity" varStatus="status">
<c:set var="backgroundClass" value="even-table-cell"/>
<c:if test="${status.index%2 != 0}">
<c:set var="backgroundClass" value="odd-table-cell"/>
</c:if>
<tr class="${backgroundClass}">
<td class="data-column-default">
<c:if test="${identity.defaultIdentity}">
<img src="${themeDir}/images/default.png"/>
</c:if>
</td>
<td>
<a href="deleteIdentity.jsp?key=${identity.key}"><img src="images/delete.png" alt="Delete" title="Delete this identity"/></a>
<%-- Insert a random number into the request string so others can't see contacts or identities using the CSS history hack --%>
<a href="editIdentity.jsp?rnd=${jspHelperBean.randomNumber}&amp;createNew=false&amp;key=${identity.key}&amp;cryptoImpl=${identity.cryptoImpl}&amp;publicName=${ib:escapeQuotes(identity.publicName)}&amp;description=${ib:escapeQuotes(identity.description)}&amp;emailAddress=${ib:escapeQuotes(identity.emailAddress)}&amp;defaultIdentity=${identity.defaultIdentity}">
${identity.publicName}
</a>
</td>
<td>${identity.description}</td>
<td class="ellipsis">${identity.key}</td>
</tr>
</c:forEach>
</table>
</div>
<p/>
<form action="editIdentity.jsp?new=true" method="POST">
<button type="submit" value="New">New Identity</button>
<form action="editIdentity.jsp?createNew=true" method="POST">
<button type="submit" value="New"><ib:message key="New Identity"/></button>
</form>
</div>
<jsp:include page="footer.jsp"/>
<jsp:include page="footer.jsp"/>

View File

@ -0,0 +1,60 @@
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib prefix="ib" uri="I2pBoteTags" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<p>
<ib:message>
In order to receive email from other people, you need to create an email identity
first.
</ib:message>
</p>
<ib:message>
Every email identity is associated with an email destination. Anybody can send email
to the email destination, but only the identity holder can read it.
</ib:message>
<br/>
<ib:message>
In a sense, email identities are the equivalent to traditional email accounts -
except that there is no provider that can read all your email because I2P-Bote
stores all emails encrypted on the network.
</ib:message>
<p>
<ib:message>
I2P-Bote automatically decrypts emails sent to you, using the email identity you
created. Email identities are stored in a file named identities; never give
this file to anyone or they will be able to read all your emails.
</ib:message>
<br/>
<ib:message>
Do give out the email destination so others can contact you.
</ib:message>
</p>
<p>
<ib:message>
It is easy to create multiple identities for different purposes, or different
contacts.
</ib:message>
</p>
<ib:message>
When you create a new email identity, you can choose the type of encryption that
will be used by the email identity. While all encryption algorithms offered by
I2P-Bote provide a high level of privacy, the length of an email destination
depends on the encryption used. The choice of encryption also determines what
signing algorithm is used.
</ib:message>
<br/>
<ib:message>
It is generally recommended to choose 256-bit elliptic curve encryption because
it produces the shortest email destinations (86 characters) while still being
highly secure.
</ib:message>
</body>
</html>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 298 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 852 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 780 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 234 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 564 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 794 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 227 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 803 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -0,0 +1,104 @@
<%--
Copyright (C) 2009 HungryHobo@mail.i2p
The GPG fingerprint for HungryHobo@mail.i2p is:
6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12
This file is part of I2P-Bote.
I2P-Bote is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
I2P-Bote is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with I2P-Bote. If not, see <http://www.gnu.org/licenses/>.
--%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="ib" uri="I2pBoteTags" %>
<jsp:useBean id="jspHelperBean" class="i2p.bote.web.JSPHelper"/>
<ib:message key="Address Directory Lookup" var="title" scope="request"/>
<jsp:include page="header.jsp"/>
<div class="main">
<c:if test="${param.confirm eq true}">
<ib:requirePassword>
<c:set var="errorMessage" value="${ib:saveContact(param.destination, param.name, param.picture, param.text)}"/>
<c:if test="${empty errorMessage}">
<ib:message key="The name has been imported to the address book." var="infoMessage" scope="request"/>
</c:if>
<jsp:forward page="addressBook.jsp"/>
</ib:requirePassword>
</c:if>
<c:if test="${param.confirm ne true}">
<c:set var="result" value="${ib:lookupInDirectory(param.name)}"/>
<c:if test="${empty result}">
<ib:message key="The name &quot;{0}&quot; was not found in the directory." var="errorMessage" scope="request">
<ib:param value="${param.name}"/>
</ib:message>
<jsp:forward page="addressBook.jsp"/>
</c:if>
<c:if test="${not empty result}">
<h2><ib:message key="Import Contact"/></h2>
<p>
<ib:message>
A matching record was found in the address directory. Note that the address directory is
not secure against manipulation, so do not click &quot;import&quot; unless you trust
that it is the right email destination.
</ib:message>
</p>
<%-- fingerprint --%>
<c:set var="uiLocaleCode" value="${jspHelperBean.language}"/>
<b><ib:message key="Fingerprint:"/></b> ${ib:getContactFingerprint(result, uiLocaleCode)}
<ib:expandable>
<c:forEach items="${jspHelperBean.wordListLocales}" var="localeCode">
<c:if test="${localeCode ne uiLocaleCode}">
&nbsp;&nbsp;<b>${localeCode}</b>: ${ib:getContactFingerprint(result, localeCode)}<br/>
</c:if>
</c:forEach>
</ib:expandable>
<%-- image, name, text --%>
<p/>
<div class="contact-detail-container">
<div class="contact-detail-left">
<img src="data:${result.pictureType};base64,${result.pictureBase64}"/><br/>
${fn:escapeXml(param.name)}
</div>
<div class="contact-detail-text">${fn:escapeXml(result.text)}</div>
</div>
<div class="contact-detail-dest">
<b><ib:message key="Email Destination: "/></b>
${result.destination}
</div>
<form action="importContact.jsp" method="post">
<input type="hidden" name="confirm" value="true"/>
<input type="hidden" name="name" value="${param.name}"/>
<input type="hidden" name="destination" value="${result.destination}"/>
<input type="hidden" name="picture" value="${result.pictureBase64}"/>
<input type="hidden" name="text" value="${fn:escapeXml(result.text)}"/>
<ib:message key="Import" var="import" scope="request"/>
<input type="submit" value="${import}"/>
</form>
</c:if>
</c:if>
</div>
<jsp:include page="footer.jsp"/>

7
WebContent/index.html Normal file
View File

@ -0,0 +1,7 @@
<html>
<head>
<meta http-equiv="refresh" content="0;url=index.jsp" />
</head>
<body>
</body>
</html>

View File

@ -22,8 +22,5 @@
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="ib" uri="I2pBoteTags" %>
<jsp:forward page="folder.jsp?path=Inbox"/>

View File

@ -1,22 +0,0 @@
<?xml version="1.0"?>
<bindings xmlns="http://www.mozilla.org/xbl" xmlns:html="http://www.w3.org/1999/xhtml">
<binding id="ellipsis" applyauthorstyles="false">
<implementation>
<constructor><![CDATA[
(function(block){
setTimeout(function(){
block.style.mozBinding = '';
var t = document.createElement('DIV');
block.appendChild(t);
block.appendChild(document.createElement('DIV'));
while (block.firstChild != t)
t.appendChild(block.firstChild);
block.className = block.className + ' moz-ellipsis';
}, 0);
})(this);
]]></constructor>
</implementation>
</binding>
</bindings>

50
WebContent/network.jsp Normal file
View File

@ -0,0 +1,50 @@
<%--
Copyright (C) 2009 HungryHobo@mail.i2p
The GPG fingerprint for HungryHobo@mail.i2p is:
6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12
This file is part of I2P-Bote.
I2P-Bote is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
I2P-Bote is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with I2P-Bote. If not, see <http://www.gnu.org/licenses/>.
--%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="ib" uri="I2pBoteTags" %>
<jsp:include page="getStatus.jsp"/>
<ib:message key="Network" var="title" scope="request"/>
<jsp:include page="header.jsp"/>
<div class="main">
<c:choose>
<c:when test="${connStatus==NOT_STARTED || connStatus==DELAY}">
<span class="subheading">
<ib:message key="Network information is not available because I2P-Bote hasn't started connecting to the network yet."/>
</span>
</c:when>
<c:otherwise>
<jsp:useBean id="jspHelperBean" class="i2p.bote.web.JSPHelper"/>
<span class="subheading"><ib:message key="Local destination:"/></span>
${jspHelperBean.localDestination}<p/><br/>
<ib:peerInfo/>
</c:otherwise>
</c:choose>
</div>
<jsp:include page="footer.jsp"/>

View File

@ -24,61 +24,231 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="ib" uri="I2pBoteTags" %>
<jsp:include page="header.jsp">
<jsp:param name="title" value="New Email"/>
</jsp:include>
<%--
Valid actions:
<default> - show the "new email" form
send - send an email using the request data
addToAddrBook - add a recipient to the address book and return here
lookup - add one or more address book entries as recipients and return here
addRecipientField - add a recipient field
removeRecipient<i> - remove the recipient field with index i
attach - add the file given in the parameter "file" as an attachment
removeAttachment<i> - remove the attachment with index i
Other parameters:
new - true for new contact, false for existing contact
--%>
<c:choose>
<c:when test="${param.action eq 'send'}">
<jsp:forward page="sendEmail.jsp"/>
</c:when>
<c:when test="${param.action eq 'addToAddrBook'}">
<c:set var="destparam" value="${param.destparamname}"/>
<jsp:forward page="editContact.jsp">
<jsp:param name="new" value="true"/>
<jsp:param name="destination" value="${ib:escapeQuotes(param[destparam])}"/>
<jsp:param name="forwardUrl" value="newEmail.jsp"/>
<jsp:param name="backUrl" value="newEmail.jsp"/>
<jsp:param name="paramsToCopy" value="sender,recipient*,to*,cc*,bcc*,replyto*,subject,message,attachmentNameOrig*,attachmentNameTemp*,forwardUrl,backUrl,paramsToCopy"/>
</jsp:forward>
</c:when>
<c:when test="${param.action eq 'lookup'}">
<jsp:forward page="addressBook.jsp">
<jsp:param name="select" value="true"/>
<jsp:param name="forwardUrl" value="newEmail.jsp"/>
<jsp:param name="paramsToCopy" value="sender,recipient*,to*,cc*,bcc*,replyto*,subject,message,attachmentNameOrig*,attachmentNameTemp*,forwardUrl"/>
</jsp:forward>
</c:when>
</c:choose>
<%--
The newAttachment request attribute contains a UploadedFile object, see MultipartFilter.java.
When action='attach', originalAttachmentFilename contains the name of the file selected by the user.
--%>
<c:set var="originalAttachmentFilename" value="${requestScope['newAttachment'].originalFilename}"/>
<ib:message key="New Email" var="title" scope="request"/>
<c:if test="${param.action eq 'attach' and empty originalAttachmentFilename}">
<ib:message key="Please select a file to attach and try again." var="noAttachmentMsg"/>
<c:set var="errorMessage" value="${noAttachmentMsg}" scope="request"/>
</c:if>
<jsp:include page="header.jsp"/>
<ib:requirePassword>
<div class="main">
<form action="sendEmail.jsp">
<table>
<tr>
<td>
From:
</td>
<td>
<select name="sender">
<option value="anonymous">Anonymous</option>
<c:forEach items="${ib:getIdentities().all}" var="identity">
<option value="${identity.key}">
${identity.publicName}
<c:if test="${!empty identity.description}"> - ${identity.description}</c:if>
</option>
</c:forEach>
</select>
</td>
</tr>
<tr>
<td>
<select name="recipientType0">
<option value="to">To:</option>
<option value="cc">CC:</option>
<option value="bcc">BCC:</option>
<option value="reply_to">Reply To:</option>
</select>
</td>
<td>
<input type="text" size="80" name="recipient0"/>
</td>
</tr>
<tr>
<td valign="top"><br/>Subject:</td>
<td><input type="text" size="80" name="subject"/></td>
</tr>
<tr>
<td valign="top"><br/>Message:</td>
<td><textarea rows="30" cols="80" name="message"></textarea></td>
</tr>
<tr>
<td colspan=2 align="center">
<input type="submit" value="Send"/>
<input type="submit" value="Cancel"/>
<input type="submit" value="Save"/>
</td>
</tr>
</table>
<form id="emailform" action="newEmail.jsp" method="post" enctype="multipart/form-data" accept-charset="UTF-8">
<div class="email-form-button-send">
<button type="submit" name="action" value="send">&#x2794; <ib:message key="Send"/></button>
</div>
<div class="email-form-label">
<ib:message key="From:"/>
</div>
<div class="email-form-value">
<select name="sender">
<option value="anonymous"><ib:message key="Anonymous"/></option>
<jsp:useBean id="jspHelperBean" class="i2p.bote.web.JSPHelper"/>
<c:forEach items="${jspHelperBean.identities.all}" var="identity">
<c:set var="selected" value=""/>
<c:if test="${fn:contains(param.sender, identity.key)}">
<c:set var="selected" value=" selected"/>
</c:if>
<c:if test="${empty param.sender && identity.defaultIdentity}">
<c:set var="selected" value=" selected"/>
</c:if>
<option value="${identity.publicName} &lt;${identity.key}&gt;"${selected}>
${identity.publicName} &lt;${fn:substring(identity.key, 0, 10)}...&gt;
<c:if test="${!empty identity.description}"> - ${identity.description}</c:if>
</option>
</c:forEach>
</select>
</div>
<%-- Add an address line for each recipient --%>
<c:set var="recipients" value="${ib:mergeRecipientFields(pageContext.request)}"/>
<c:forEach var="recipient" items="${recipients}" varStatus="status">
<c:set var="recipientField" value="recipient${status.index}"/>
<div class="email-form-recipient-label">
<c:set var="recipientTypeField" value="recipientType${status.index}"/>
<c:set var="recipientType" value="${param[recipientTypeField]}"/>
<select name="recipientType${status.index}">
<c:set var="toSelected" value="${recipientType eq 'to' ? ' selected' : ''}"/>
<c:set var="ccSelected" value="${recipientType eq 'cc' ? ' selected' : ''}"/>
<c:set var="bccSelected" value="${recipientType eq 'bcc' ? ' selected' : ''}"/>
<c:set var="replytoSelected" value="${recipientType eq 'replyto' ? ' selected' : ''}"/>
<option value="to"${toSelected}><ib:message key="To:"/></option>
<option value="cc"${ccSelected}><ib:message key="CC:"/></option>
<option value="bcc"${bccSelected}><ib:message key="BCC:"/></option>
<option value="replyto"${replytoSelected}><ib:message key="Reply To:"/></option>
</select>
</div>
<div class="email-form-recipient-value">
<input type="text" size="48" class="email-form-recipient-field" name="${recipientField}" value="${ib:escapeQuotes(recipient.address)}"/>
<c:choose>
<c:when test="${status.last}">
<input type="hidden" name="destparamname" value="${recipientField}"/>
<button type="submit" name="action" value="addToAddrBook">&#x2794;<img src="${themeDir}/images/addressbook.gif"/></button>
</c:when>
<c:otherwise>
<button type="submit" name="action" value="removeRecipient${status.index}">-</button>
</c:otherwise>
</c:choose>
</div>
</c:forEach>
<div class="email-form-button-row">
<button type="submit" name="action" value="addRecipientField">+</button>
<button type="submit" name="action" value="lookup"><ib:message key="Addr. Book..."/></button>
</div>
<div class="email-form-label">
<ib:message key="Subject:"/>
</div>
<div class="email-form-value">
<input type="text" size="48" class="email-form-subject-field" name="subject" value="${ib:escapeQuotes(param.subject)}"/>
</div>
<%-- Attachments --%>
<div class="email-form-attach-label">
<ib:message key="Attachments:"/>
</div>
<div class="email-form-value">
<c:set var="maxAttachmentIndex" value="-1"/>
<c:forEach items="${param}" var="parameter">
<c:if test="${fn:startsWith(parameter.key, 'attachmentNameOrig')}">
<c:set var="attachmentIndex" value="${fn:substringAfter(parameter.key, 'attachmentNameOrig')}"/>
<c:set var="removeAction" value="removeAttachment${attachmentIndex}"/>
<c:set var="removed" value="${param.action eq removeAction}"/>
<c:if test="${!removed}">
<c:if test="${attachmentIndex gt maxAttachmentIndex}">
<c:set var="maxAttachmentIndex" value="${attachmentIndex}"/>
</c:if>
<div class="email-form-attach-files">
<c:set var="tempFileParamName" value="attachmentNameTemp${attachmentIndex}"/>
<c:set var="tempAttachmentFilename" value="${param[tempFileParamName]}"/>
<c:set var="filename" value="${parameter.value}"/>
<c:set var="filesize" value="(${ib:getFileSize(tempAttachmentFilename)})"/>
<div class="email-form-attach-item" title="${filename} ${filesize}">
${filename}
<span class="email-form-attach-size">${filesize}</span>
<input type="hidden" name="attachmentNameOrig${attachmentIndex}" value="${parameter.value}"/>
<input type="hidden" name="attachmentNameTemp${attachmentIndex}" value="${tempAttachmentFilename}"/>
</div>
<div class="email-form-attach-remove">
<ib:message key="Remove this attachment" var="linkTitle"/>
<button type="submit" name="action" value="removeAttachment${attachmentIndex}" title="${linkTitle}">-</button>
</div>
</div>
</c:if>
</c:if>
</c:forEach>
<c:if test="${param.action eq 'attach' and not empty originalAttachmentFilename}">
<c:set var="tempAttachmentFilename" value="${requestScope['newAttachment'].tempFilename}"/>
<c:set var="maxAttachmentIndex" value="${maxAttachmentIndex + 1}"/>
<div class="email-form-attach-files">
<c:set var="filename" value="${originalAttachmentFilename}"/>
<c:set var="filesize" value="(${ib:getFileSize(tempAttachmentFilename)})"/>
<div class="email-form-attach-item" title="${filename} ${filesize}">
${filename}
<span class="email-form-attach-size">${filesize}</span>
<input type="hidden" name="attachmentNameOrig${maxAttachmentIndex}" value="${requestScope['newAttachment'].originalFilename}"/>
<input type="hidden" name="attachmentNameTemp${maxAttachmentIndex}" value="${tempAttachmentFilename}"/>
</div>
<div class="email-form-attach-remove">
<c:remove var="newAttachment" scope="request"/>
<button type="submit" name="action" value="removeAttachment${maxAttachmentIndex}">-</button>
</div>
</div>
</c:if>
<div>
<input type="file" name="newAttachment" onchange="attachFile();"/>
<ib:message key="Add another attachment" var="linkTitle"/>
<button id="attachbutton" type="submit" name="action" value="attach" title="${linkTitle}"><ib:message key="Attach"/></button>
</div>
<div class="email-form-attach-small"><ib:message key="It is recommended to keep attachments below 500 kBytes."/></div>
</div>
<div class="email-form-label">
<ib:message key="Message:"/>
</div>
<div class="email-form-value">
<textarea rows="30" cols="70" name="message"><c:if test="${!empty param.quoteMsgId}">
<%-- The following lines are not indented because the indentation would show up as blank chars on the textarea --%>
<c:set var="origEmail" value="${ib:getEmail(param.quoteMsgFolder, param.quoteMsgId)}"/>
<ib:message key="{0} wrote:" hide="true">
<ib:param value="${ib:getShortSenderName(origEmail.sender, 50)}"></ib:param>
</ib:message><ib:quote text="${fn:escapeXml(origEmail.text)}"/></c:if><c:if test="${empty param.quoteMsgId}">${fn:escapeXml(param.message)}</c:if></textarea>
</div>
<c:if test="${!empty param.quoteMsgId}">
<%-- Parameters needed by sendEmail if the user clicks delete after sending a reply --%>
<input type="hidden" name="quoteMsgFolder" value="${param.quoteMsgFolder}"/>
<input type="hidden" name="quoteMsgId" value="${param.quoteMsgId}"/>
</c:if>
</form>
</div>
</ib:requirePassword>
<jsp:include page="footer.jsp"/>
<script>
// simulates a click on the "attach" button
function attachFile() {
var hiddenField = document.createElement("input");
hiddenField.setAttribute("type", "hidden");
hiddenField.setAttribute("name", "action");
hiddenField.setAttribute("value", "attach");
document.forms["emailform"].appendChild(hiddenField);
document.forms["emailform"].submit();
}
function hideAttachButton() {
document.getElementById("attachbutton").style.visibility="hidden";
}
window.onload = hideAttachButton;
</script>
<jsp:include page="footer.jsp"/>

View File

@ -23,41 +23,18 @@
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<jsp:include page="header.jsp">
<jsp:param name="title" value="No Identity"/>
</jsp:include>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="ib" uri="I2pBoteTags" %>
<c:set var="title" value="No Identity" scope="request"/>
<jsp:include page="header.jsp"/>
<div class="main">
<h2>No Email Identity Defined</h2>
<h2><ib:message key="No Email Identity Defined"/></h2>
<p>
In order to receive email from other people, you need to create an email identity
first.
</p><p>
This is similar to traditional email where you first have to set up an email account
with an email provider. The difference is that in I2P-Bote, there is no provider that
can read all your email because I2P-Bote stores all emails encrypted on the network.
</p><p>
I2P-Bote automatically decrypts emails sent to you, using the email identity you
created.
</p><p>
An email identity has a secret key, and a public key. Anybody who has the secret key
can download and decrypt your emails, so you should never give it to anybody. The
public key, on the other hand, allows people to send email to you. Think of it as
the equivalent of a traditional email address. Give it to everybody you want to be
able to contact you, or make it public.
</p><p>
[TODO paragraph about spam, HashCash].
</p><p>
You will find that email identities are long combinations of numbers and letters,
and that they are impossible to memorize. I2P-Bote lets you assign an email address
to an email identity to make it easier for you and your contacts to remember.
</p><p>
[TODO name attribute, address attribute].
The public addressbook should not be 100% trusted. Only destination keys are secure.
</p><p>
[TODO private address book, address directory].
<jsp:include page="identitiesHelp.jsp"/>
<form action="editIdentity.jsp?new=true" method="POST">
<button type="submit" value="New">Create a New Email Identity</button>
<button type="submit" value="New"><ib:message key="Create a New Email Identity"/></button>
</form>
</div>

167
WebContent/outbox.jsp Normal file
View File

@ -0,0 +1,167 @@
<%--
Copyright (C) 2009 HungryHobo@mail.i2p
The GPG fingerprint for HungryHobo@mail.i2p is:
6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12
This file is part of I2P-Bote.
I2P-Bote is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
I2P-Bote is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with I2P-Bote. If not, see <http://www.gnu.org/licenses/>.
--%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="ib" uri="I2pBoteTags" %>
<%
pageContext.setAttribute("FROM", i2p.bote.email.EmailAttribute.FROM, PageContext.PAGE_SCOPE);
pageContext.setAttribute("TO", i2p.bote.email.EmailAttribute.TO, PageContext.PAGE_SCOPE);
pageContext.setAttribute("SUBJECT", i2p.bote.email.EmailAttribute.SUBJECT, PageContext.PAGE_SCOPE);
pageContext.setAttribute("CREATE_TIME", i2p.bote.email.EmailAttribute.CREATE_TIME, PageContext.PAGE_SCOPE);
pageContext.setAttribute("STATUS", i2p.bote.email.EmailAttribute.STATUS, PageContext.PAGE_SCOPE);
%>
<c:set var="refreshUrl" value="outbox.jsp?sortcolumn=${param.sortcolumn}&amp;descending=${param.descending}" scope="request"/>
<ib:requirePassword forwardUrl="${refreshUrl}">
<%-- Refresh page if there are mails in the outbox --%>
<c:if test="${ib:getMailFolder('Outbox').numElements gt 0}">
<c:set var="refreshInterval" value="20" scope="request"/>
</c:if>
<ib:message key="Outbox" var="title" scope="request"/>
<jsp:include page="header.jsp"/>
<c:set var="sortcolumn" value="${CREATE_TIME}"/>
<c:if test="${!empty param.sortcolumn}">
<c:set var="sortcolumn" value="${param.sortcolumn}"/>
</c:if>
<c:choose>
<c:when test="${empty param.descending}">
<c:set var="descending" value="false"/>
</c:when>
<c:otherwise>
<%-- Set the sort direction depending on param.descending --%>
<c:set var="descending" value="false"/>
<c:if test="${param.descending}">
<c:set var="descending" value="true"/>
</c:if>
</c:otherwise>
</c:choose>
<c:if test="${!descending}">
<c:set var="sortIndicator" value="&#x25b4;"/>
<c:set var="reverseSortOrder" value="&amp;descending=true"/>
</c:if>
<c:if test="${descending}">
<c:set var="sortIndicator" value="&#x25be;"/>
<c:set var="reverseSortOrder" value="&amp;descending=false"/>
</c:if>
<div class="main foldermain">
<table>
<c:set var="folder" value="${ib:getMailFolder('Outbox')}"/>
<tr>
<th class="header-column-from">
<c:set var="sortLink" value="outbox.jsp?sortcolumn=${FROM}"/>
<c:if test="${sortcolumn eq FROM}">
<c:set var="sortLink" value="${sortLink}${reverseSortOrder}"/>
<c:set var="fromColumnIndicator" value=" ${sortIndicator}"/>
</c:if>
<a href="${sortLink}"><ib:message key="From"/>${fromColumnIndicator}</a>
</th>
<th class="header-column-to">
<c:set var="sortLink" value="outbox.jsp?sortcolumn=${TO}"/>
<c:if test="${sortcolumn eq TO}">
<c:set var="sortLink" value="${sortLink}${reverseSortOrder}"/>
<c:set var="toColumnIndicator" value=" ${sortIndicator}"/>
</c:if>
<a href="${sortLink}"><ib:message key="To"/>${toColumnIndicator}</a>
</th>
<th class="header-column-subject">
<c:set var="sortLink" value="outbox.jsp?sortcolumn=${SUBJECT}"/>
<c:if test="${sortcolumn eq SUBJECT}">
<c:set var="sortLink" value="${sortLink}${reverseSortOrder}"/>
<c:set var="subjectColumnIndicator" value=" ${sortIndicator}"/>
</c:if>
<a href="${sortLink}"><ib:message key="Subject"/>${subjectColumnIndicator}</a>
</th>
<th class="header-column-date">
<c:set var="sortLink" value="outbox.jsp?sortcolumn=${CREATE_TIME}"/>
<c:if test="${sortcolumn eq CREATE_TIME}">
<c:set var="sortLink" value="${sortLink}${reverseSortOrder}"/>
<c:set var="createTimeColumnIndicator" value=" ${sortIndicator}"/>
</c:if>
<a href="${sortLink}"><ib:message key="Create Time"/>${createTimeColumnIndicator}</a>
</th>
<th class="header-column-status">
<c:set var="sortLink" value="outbox.jsp?sortcolumn=${STATUS}"/>
<c:if test="${sortcolumn eq STATUS}">
<c:set var="sortLink" value="${sortLink}${reverseSortOrder}"/>
<c:set var="statusColumnIndicator" value=" ${sortIndicator}"/>
</c:if>
<a href="${sortLink}"><ib:message key="Status"/>${statusColumnIndicator}</a>
</th>
<th class="header-column-trash"></th>
</tr>
<c:forEach items="${ib:getEmails(folder, sortcolumn, descending)}" var="email" varStatus="status">
<c:set var="sender" value="${ib:getNameAndShortDestination(email.oneFromAddress)}"/>
<c:if test="${empty sender}">
<ib:message key="Anonymous" var="sender"/>
</c:if>
<c:set var="recipient" value="${ib:getNameAndShortDestination(email.oneRecipient)}"/>
<c:set var="createTime" value="${email.createTime}"/>
<c:set var="subject" value="${email.subject}"/>
<c:if test="${empty subject}">
<ib:message key="(No subject)" var="subject"/>
</c:if>
<c:set var="mailUrl" value="showEmail.jsp?folder=Outbox&amp;messageID=${email.messageID}"/>
<c:choose>
<c:when test="${email.unread}"><c:set var="textClass" value="folder-item-new"/></c:when>
<c:otherwise><c:set var="textClass" value="folder-item-old"/></c:otherwise>
</c:choose>
<c:set var="backgroundClass" value="even-table-cell"/>
<c:if test="${status.index%2 != 0}">
<c:set var="backgroundClass" value="odd-table-cell"/>
</c:if>
<tr class="${textClass} ${backgroundClass}">
<td class="ellipsis"><a href="${mailUrl}">${fn:escapeXml(sender)}</a></td>
<td class="ellipsis"><a href="${mailUrl}">${fn:escapeXml(recipient)}</a></td>
<td class="ellipsis"><a href="${mailUrl}">${fn:escapeXml(subject)}</a></td>
<td>
<a href="${mailUrl}"><ib:printDate date="${email.sentDate}" type="date" timeStyle="short" printUnknown="true"/></a>
<a href="${mailUrl}"><ib:printDate date="${email.sentDate}" type="time" timeStyle="short"/></a>
</td>
<td><div><a href="${mailUrl}">${ib:getEmailStatusText(email)}</a></div></td>
<td>
<a href="deleteEmail.jsp?folder=Outbox&amp;messageID=${email.messageID}">
<img src="${themeDir}/images/delete.png" alt="<ib:message key='Delete'/>" title="<ib:message key='Delete this email'/>"/></a>
</td>
</tr>
</c:forEach>
</table>
</div>
</ib:requirePassword>
<jsp:include page="footer.jsp"/>

57
WebContent/password.jsp Normal file
View File

@ -0,0 +1,57 @@
<%--
Copyright (C) 2009 HungryHobo@mail.i2p
The GPG fingerprint for HungryHobo@mail.i2p is:
6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12
This file is part of I2P-Bote.
I2P-Bote is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
I2P-Bote is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with I2P-Bote. If not, see <http://www.gnu.org/licenses/>.
--%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="ib" uri="I2pBoteTags" %>
<ib:message key="Password Required" var="title" scope="request"/>
<jsp:include page="header.jsp"/>
<c:if test="${param.passwordJspAction eq 'check'}">
<c:choose>
<c:when test="${ib:tryPassword(param.password)}">
<jsp:forward page="${param.passwordJspForwardUrl}"/>
</c:when>
<c:otherwise>
<div class="errorMessage"><ib:message key="Wrong password. Try again."/></div>
</c:otherwise>
</c:choose>
</c:if>
<div class="main">
<h2><ib:message key="Password required"/></h2>
<form name="form" action="password.jsp?passwordJspAction=check" method="POST">
<ib:copyParams paramsToCopy="*" paramsToExclude="password"/>
<ib:message key="Password:"/> <input type="password" name="password"/>
<ib:message key="OK" var="ok"/>
<input type="submit" value="${ok}"/>
</form>
<script type="text/javascript" language="JavaScript">
document.forms['form'].elements['password'].focus();
</script>
</div>
<jsp:include page="footer.jsp"/>

View File

@ -0,0 +1,95 @@
<%--
Copyright (C) 2009 HungryHobo@mail.i2p
The GPG fingerprint for HungryHobo@mail.i2p is:
6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12
This file is part of I2P-Bote.
I2P-Bote is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
I2P-Bote is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with I2P-Bote. If not, see <http://www.gnu.org/licenses/>.
--%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="ib" uri="I2pBoteTags" %>
<%--
Valid actions:
start - Check if the name is taken
step2 - Add a picture and text
store - Store in DHT
Other parameters:
key - The email destination
description - New value for the private description field (publish does save first)
publicName - New value for the public name field
text - Text to include in the DHT record
--%>
<ib:message key="Add Email Destination to Directory" var="title" scope="request"/>
<jsp:include page="header.jsp"/>
<div class="main">
<c:if test="${param.action eq 'start'}">
<%-- If the user changed the Public Name to try a new name that isn't taken, update it so they don't have to click save first --%>
<ib:requirePassword>
${ib:modifyIdentity(param.key, param.publicName, param.description, null, param.emailAddress, false)}
</ib:requirePassword>
<c:set var="result" value="${ib:lookupInDirectory(param.publicName)}"/>
<c:if test="${not empty result}">
<ib:message key="The name exists already. Please choose a different Public Name." var="errorMessage" scope="request"/>
<jsp:forward page="editIdentity.jsp?rnd=${jspHelperBean.randomNumber}&amp;new=false&amp;key=${identity.destination}"/>
</c:if>
<c:if test="${empty result}">
<jsp:forward page="publishDestination.jsp">
<jsp:param name="action" value="step2"/>
<jsp:param name="text" value="${param.text}"/>
<jsp:param name="key" value="${param.key}"/>
</jsp:forward>
</c:if>
</c:if>
<c:if test="${param.action eq 'step2'}">
<h2><ib:message key="Publish to the Address Directory"/></h2>
<form action="publishDestination.jsp?action=store" method="post" enctype="multipart/form-data" accept-charset="UTF-8">
<input type="hidden" name="name" value="${param.publicName}"/>
<input type="hidden" name="destination" value="${param.key}"/>
<div class="publish-form-label">
<ib:message key="Picture to upload:"/>
<div class="addtl-text"><ib:message key="(optional, 7.5 kBytes max)"/></div>
</div>
<div class="publish-form-value">
<input type="file" name="picture"/>
</div>
<div class="publish-form-label">
<ib:message key="Text to include:"/>
<div class="addtl-text"><ib:message key="(optional, 2000 chars max)"/></div>
</div>
<div class="publish-form-value">
<textarea rows="15" cols="50" name="text"></textarea>
</div>
<button type="submit"><ib:message key="Publish"/></button>
</form>
</c:if>
<c:if test="${param.action eq 'store'}">
<c:set var="picFilename" value="${requestScope['picture'].tempFilename}"/>
<ib:publishDestination destination="${param.destination}" pictureFilename="${picFilename}" text="${param.text}"/>
<ib:message var="infoMessage" scope="request" key="The identity has been added to the address directory."/>
<jsp:useBean id="jspHelperBean" class="i2p.bote.web.JSPHelper"/>
<jsp:forward page="editIdentity.jsp?rnd=${jspHelperBean.randomNumber}&new=false&key=${param.destination}"/>
</c:if>
</div>
<jsp:include page="footer.jsp"/>

View File

@ -0,0 +1,41 @@
<%--
Copyright (C) 2009 HungryHobo@mail.i2p
The GPG fingerprint for HungryHobo@mail.i2p is:
6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12
This file is part of I2P-Bote.
I2P-Bote is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
I2P-Bote is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with I2P-Bote. If not, see <http://www.gnu.org/licenses/>.
--%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="ib" uri="I2pBoteTags" %>
<c:catch var="e">
<ib:requirePassword>
<ib:saveIdentities/>
<jsp:forward page="identities.jsp"/>
</ib:requirePassword>
</c:catch>
<c:if test="${not empty e}">
<jsp:include page="header.jsp"/>
<div class="main">
<ib:message key="Error:"/> ${e}
</div>
</c:if>

View File

@ -23,12 +23,53 @@
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="ib" uri="I2pBoteTags" %>
<jsp:include page="header.jsp">
<jsp:param name="title" value="New Email"/>
</jsp:include>
<ib:message key="New Email" var="title" scope="request"/>
<jsp:include page="header.jsp"/>
<ib:sendEmail sender="${param.sender}" recipient="${param.recipient0}" subject="${param.subject}" message="${param.message}" />
<div class="main">
<ib:requirePassword>
<jsp:useBean id="jspHelperBean" class="i2p.bote.web.JSPHelper"/>
<c:set var="configuration" value="${jspHelperBean.configuration}"/>
<div class="subheading">
<ib:sendEmail sender="${param.sender}" subject="${param.subject}" message="${param.message}" includeSentTime="${configuration.includeSentTime}">
<c:forEach var="parameter" items="${ib:getSortedRecipientParams(param)}">
<c:set var="recipientIndex" value="${fn:substringAfter(parameter.key, 'recipient')}"/>
<c:set var="recipientTypeAttrName" value="recipientType${recipientIndex}"/>
<c:if test="${not empty parameter.value}">
<ib:recipient type="${param[recipientTypeAttrName]}" address="${parameter.value}"/>
</c:if>
</c:forEach>
<c:forEach var="parameter" items="${param}">
<c:if test="${fn:startsWith(parameter.key, 'attachmentNameOrig')}">
<c:set var="attachmentIndex" value="${fn:substringAfter(parameter.key, 'attachmentNameOrig')}"/>
<c:set var="tempFileParamName" value="attachmentNameTemp${attachmentIndex}"/>
<ib:attachment origFilename="${parameter.value}" tempFilename="${param[tempFileParamName]}"/>
</c:if>
</c:forEach>
</ib:sendEmail>
</div>
<c:if test="${not empty param.quoteMsgId}">
<ib:setEmailReplied messageId="${param.quoteMsgId}" folder="${ib:getMailFolder(param.quoteMsgFolder)}" replied="true"/>
<br/><p/>
<form action="deleteEmail.jsp" method="post">
Delete original email?
<input type="hidden" name="folder" value="${param.quoteMsgFolder}"/>
<input type="hidden" name="messageID" value="${param.quoteMsgId}"/>
<button type="submit" name="action" value="Delete">Delete</button>
</form>
</c:if>
</ib:requirePassword>
<p/>
<a href="."><ib:message key="Go to inbox"/></a>
</div>
<jsp:include page="footer.jsp"/>

View File

@ -0,0 +1,91 @@
<%--
Copyright (C) 2009 HungryHobo@mail.i2p
The GPG fingerprint for HungryHobo@mail.i2p is:
6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12
This file is part of I2P-Bote.
I2P-Bote is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
I2P-Bote is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with I2P-Bote. If not, see <http://www.gnu.org/licenses/>.
--%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="ib" uri="I2pBoteTags" %>
<ib:message key="Set Password" var="title" scope="request"/>
<c:if test="${param.action eq 'wait'}">
<c:catch var="exception">
<ib:waitForPasswordChange/>
</c:catch>
<c:if test="${empty exception}">
<ib:message key="The password has been changed." var="infoMessage" scope="request"/>
<jsp:forward page="index.jsp"/>
</c:if>
<c:if test="${not empty exception}">
<c:set var="errorMessage" value="${exception.cause.localizedMessage}" scope="request"/>
</c:if>
</c:if>
<c:if test="${param.action eq 'set'}">
<c:set var="refreshUrl" value="setPassword.jsp?action=wait" scope="request"/>
<c:set var="refreshInterval" value="0" scope="request"/>
<ib:setPassword oldPassword="${param.old}" newPassword="${param.new}" confirmNewPassword="${param.confirm}"/>
</c:if>
<jsp:include page="header.jsp"/>
<div class="main">
<c:if test="${param.action eq 'set'}">
<h2><ib:message key="Please wait"/></h2>
<p>
<img src="${themeDir}/images/wait.gif"/> <ib:message key="Please wait while the password is being changed..."/>
</p>
</c:if>
<c:if test="${param.action ne 'set'}">
<h2><ib:message key="Set a new Password"/></h2>
<p>
<ib:message key="If you have not set a password, leave the old password blank."/>
</p><p>
<ib:message>
Please note that if a password is set, emails cannot be checked automatically
but only when the Check Mail button is clicked.
</ib:message>
</p><br/>
<form name="form" action="setPassword.jsp" method="POST">
<input type="hidden" name="action" value="set"/>
<div class="password-label"><ib:message key="Old password:"/></div>
<div class="password-field"><input type="password" name="old"/></div>
<div class="password-label"><ib:message key="New password:"/></div>
<div class="password-field"><input type="password" name="new"/></div>
<div class="password-label"><ib:message key="Confirm:"/></div>
<div class="password-field"><input type="password" name="confirm"/></div>
<p/>
<ib:message key="OK" var="ok"/>
<input type="submit" value="${ok}"/>
</form>
<script type="text/javascript" language="JavaScript">
document.forms['form'].elements['old'].focus();
</script>
</c:if>
</div>
<jsp:include page="footer.jsp"/>

169
WebContent/settings.jsp Normal file
View File

@ -0,0 +1,169 @@
<%--
Copyright (C) 2009 HungryHobo@mail.i2p
The GPG fingerprint for HungryHobo@mail.i2p is:
6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12
This file is part of I2P-Bote.
I2P-Bote is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
I2P-Bote is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with I2P-Bote. If not, see <http://www.gnu.org/licenses/>.
--%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="ib" uri="I2pBoteTags" %>
<jsp:useBean id="jspHelperBean" class="i2p.bote.web.JSPHelper"/>
<c:set var="configuration" value="${jspHelperBean.configuration}"/>
<c:if test="${param.action eq 'save'}">
<jsp:setProperty name="configuration" property="autoMailCheckEnabled" value="${param.autoMailCheckEnabled eq 'on' ? 'true' : 'false'}"/>
<jsp:setProperty name="configuration" property="mailCheckInterval" value="${param.mailCheckInterval}"/>
<jsp:setProperty name="configuration" property="deliveryCheckEnabled" value="${param.deliveryCheckEnabled eq 'on' ? 'true' : 'false'}"/>
<jsp:setProperty name="configuration" property="hideLocale" value="${param.hideLocale eq 'on' ? 'true' : 'false'}"/>
<jsp:setProperty name="configuration" property="includeSentTime" value="${param.includeSentTime eq 'on' ? 'true' : 'false'}"/>
<jsp:setProperty name="configuration" property="numStoreHops" value="${param.numStoreHops}"/>
<jsp:setProperty name="configuration" property="relayMinDelay" value="${param.minDelay}"/>
<jsp:setProperty name="configuration" property="relayMaxDelay" value="${param.maxDelay}"/>
<jsp:setProperty name="configuration" property="gatewayEnabled" value="${param.gatewayEnabled eq 'on' ? 'true' : 'false'}"/>
<jsp:setProperty name="configuration" property="gatewayDestination" value="${param.gatewayDestination}"/>
<jsp:setProperty name="configuration" property="imapPort" value="${param.imapPort}"/>
<%--
Use the special property imapEnabled in JSPHelper which starts/stops the IMAP service.
Do this after setting imapPort so it starts up on the new port if it changed.
--%>
<jsp:setProperty name="jspHelperBean" property="imapEnabled" value="${param.imapEnabled eq 'on' ? 'true' : 'false'}"/>
<jsp:setProperty name="configuration" property="smtpPort" value="${param.smtpPort}"/>
<%--
Use the special property smtpEnabled in JSPHelper which starts/stops the SMTP service.
Do this after setting smtpPort so it starts up on the new port if it changed.
--%>
<jsp:setProperty name="jspHelperBean" property="smtpEnabled" value="${param.smtpEnabled eq 'on' ? 'true' : 'false'}"/>
<jsp:setProperty name="configuration" property="themeUrl" value="${param.theme}"/>
<ib:saveConfiguration/>
<ib:message key="Settings have been saved." var="infoMessage" scope="request"/>
<c:set var="infoMessage" value="${infoMessage}"/>
</c:if>
<ib:message key="Settings" var="title" scope="request"/>
<jsp:include page="header.jsp"/>
<div class="main">
<h2>
<ib:message key="Settings"/>
</h2>
<br/>
<form action="settings.jsp" method="post">
<input type="hidden" name="action" value="save"/>
<%-- Auto mail checking and delivery checking --%>
<c:set var="checked" value="${configuration.autoMailCheckEnabled ? ' checked' : ''}"/>
<input type="checkbox"${checked} name="autoMailCheckEnabled"/>
<ib:message key="Check for mail every {0} minutes">
<ib:param><input type="text" name="mailCheckInterval" size="3" value="${configuration.mailCheckInterval}"/></ib:param>
</ib:message>
<br/>
<c:set var="checked" value="${configuration.deliveryCheckEnabled ? ' checked' : ''}"/>
<input type="checkbox"${checked} name="deliveryCheckEnabled"/>
<ib:message key="Check delivery status of sent emails"/>
<br/>
<%-- Relays --%>
<ib:message key="Use relays when sending mail:"/>
<select name="numStoreHops">
<c:set var="selected" value=""/>
<c:if test="${configuration.numStoreHops eq 0}">
<c:set var="selected" value=" selected"/>
</c:if>
<option value="0"${selected}><ib:message key="None"/></option>
<c:forEach var="hops" begin="1" end="3">
<c:set var="selected" value=""/>
<c:if test="${hops eq configuration.numStoreHops}">
<c:set var="selected" value=" selected"/>
</c:if>
<option value="${hops}"${selected}>${hops}</option>
</c:forEach>
</select>
<br/>
<ib:message key="Delay per relay hop: Between"/>
<input type="text" name="minDelay" size="3" value="${configuration.relayMinDelay}"/>
<ib:message key="and"/>
<input type="text" name="maxDelay" size="3" value="${configuration.relayMaxDelay}"/>
<ib:message key="minutes"/>
<br/>
<%-- Gateway --%>
<c:set var="checked" value="${configuration.gatewayEnabled ? ' checked' : ''}"/>
<input type="checkbox"${checked} name="gatewayEnabled"/>
<ib:message key="Use a gateway when sending to non-I2P email addresses"/>
<br/>
<ib:message key="Email Destination of the gateway:"/>
<input type="text" name="gatewayDestination" size="50" value="${configuration.gatewayDestination}"/>
<br/>
<%-- IMAP --%>
<c:set var="checked" value="${configuration.imapEnabled ? ' checked' : ''}"/>
<input type="checkbox"${checked} name="imapEnabled"/>
<c:set var="imapPortField" value="<input type='text' name='imapPort' size='5' value='${configuration.imapPort}'/>"/>
<ib:message key="Enable IMAP on port {0}">
<ib:param value="${imapPortField}"/>
</ib:message>
<br/>
<%-- SMTP --%>
<c:set var="checked" value="${configuration.smtpEnabled ? ' checked' : ''}"/>
<input type="checkbox"${checked} name="smtpEnabled"/>
<c:set var="smtpPortField" value="<input type='text' name='smtpPort' size='5' value='${configuration.smtpPort}'/>"/>
<ib:message key="Enable SMTP on port {0}">
<ib:param value="${smtpPortField}"/>
</ib:message>
<br/>
<%-- Locale --%>
<c:set var="checked" value="${configuration.hideLocale ? ' checked' : ''}"/>
<input type="checkbox"${checked} name="hideLocale"/>
<ib:message key="Use English for text added to outgoing email ('Re:', 'wrote:', etc.)"/>
<br/>
<%-- Send time --%>
<c:set var="checked" value="${configuration.includeSentTime ? ' checked' : ''}"/>
<input type="checkbox"${checked} name="includeSentTime"/>
<ib:message key="Include send time in outgoing emails"/>
<br/>
<%-- UI theme --%>
<ib:message key="Theme:"/>
<select name="theme">
<c:set var="currentTheme" value="${configuration.theme}"/>
<c:forEach items="${configuration.themes}" var="theme">
<c:set var="selected" value=""/>
<c:if test="${theme.id eq currentTheme}">
<c:set var="selected" value=" selected"/>
</c:if>
<option value="${theme.id}"${selected}>${theme.displayName}</option>
</c:forEach>
</select>
<br/>
<p/>
<button type="submit"><ib:message key="Save"/></button>
</form>
<p><br/></p>
<p><a href="setPassword.jsp"><ib:message key="Change Password"/></a></p>
</div>
<jsp:include page="footer.jsp"/>

View File

@ -27,34 +27,109 @@
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="ib" uri="I2pBoteTags" %>
<ib:requirePassword>
<c:set var="email" value="${ib:getEmail(param.folder, param.messageID)}"/>
<jsp:include page="header.jsp">
<jsp:param name="title" value="${email.subject}"/>
</jsp:include>
<c:if test="${fn:toLowerCase(param.folder) ne 'outbox'}">
<ib:setEmailRead folder="${ib:getMailFolder(param.folder)}" messageId="${param.messageID}" read="true"/>
</c:if>
<div class="main">
<table>
<tr>
<td valign="top"><strong>From:</strong></td>
<td>
<c:forEach var="i" begin="0" end="${fn:length(email.sender)}" step="64">
<c:if test="${i > 0}">
<br/>
</c:if>
${fn:substring(email.sender, i, i+64)}
</c:forEach>
</td>
</tr>
<tr>
<td valign="top"><strong>Subject:</strong></td>
<td>${email.subject}</td>
</tr>
<tr>
<td valign="top"><strong>Message:</strong></td>
<td>${email.bodyText}</td>
</tr>
</table>
<c:set var="title" value="${email.subject}" scope="request"/>
<jsp:include page="header.jsp"/>
<div class="emailtext">
<div class="email-form-label"><ib:message key="From:"/></div>
<div class="show-email-value">
<c:if test="${email.anonymous}">
<ib:message key="Anonymous"/>
</c:if>
<c:if test="${!email.anonymous}">
<ib:address address="${email.oneFromAddress}"/>
</c:if>
</div>
<div class="email-form-label"><ib:message key="Signature:"/></div>
<div class="show-email-value">
<c:if test="${email.signatureValid}"><ib:message key="Valid"/></c:if>
<c:if test="${!email.signatureValid}">
<c:if test="${email.anonymous}">
<ib:message key="N/A (sender is anonymous)"/>
</c:if>
<c:if test="${!email.anonymous}">
<div class="show-email-invalid-sig"><ib:message key="Invalid or missing"/></div>
</c:if>
</c:if>
</div>
<c:forEach var="replyToAddress" varStatus="status" items="${email.replyToAddresses}">
<div class="email-form-label"><ib:message key="Reply To:"/></div>
<div class="show-email-value"><ib:address address="${replyToAddress}"/></div>
</c:forEach>
<c:forEach var="toAddress" varStatus="status" items="${email.toAddresses}">
<div class="email-form-label"><ib:message key="To:"/></div>
<div class="show-email-value"><ib:address address="${toAddress}"/></div>
</c:forEach>
<c:forEach var="ccAddress" varStatus="status" items="${email.CCAddresses}">
<div class="email-form-label"><ib:message key="CC:"/></div>
<div class="show-email-value"><ib:address address="${ccAddress}"/></div>
</c:forEach>
<c:forEach var="bccAddress" varStatus="status" items="${email.BCCAddresses}">
<div class="email-form-label"><ib:message key="BCC:"/></div>
<div class="show-email-value"><ib:address address="${bccAddress}"/></div>
</c:forEach>
<div class="email-form-label"><ib:message key="Sent:"/></div>
<div class="show-email-value"><ib:printDate date="${email.sentDate}" timeStyle="full"/></div>
<div class="email-form-label"><ib:message key="Received:"/></div>
<div class="show-email-value"><ib:printDate date="${email.receivedDate}" timeStyle="full"/></div>
<div class="email-form-label"><ib:message key="Subject:"/></div>
<div class="show-email-value">${fn:escapeXml(email.subject)}</div>
<div class="email-form-label"><ib:message key="Message:"/></div>
<div class="show-email-value"><ib:formatPlainText text="${fn:escapeXml(email.text)}"/></div>
<div class="email-form-label"><ib:message key="Attachments:"/></div>
<div class="show-email-value"><ib:showAttachments email="${email}" folder="${param.folder}"/></div>
<c:if test="${param.folder eq 'Outbox'}">
<div class="email-form-label"><ib:message key="Status:"/></div>
<div class="show-email-value">${ib:getEmailStatusText(email)}</div>
</c:if>
<br/>
<div class="show-email-reply">
<form action="newEmail.jsp" method="post">
<c:set var="replyDisabled" value="${email.anonymous ? 'disabled=&quot;disabled&quot;' : ''}"/>
<button type="submit"${replyDisabled}><ib:message key="Reply"/></button>
<input type="hidden" name="sender" value="${ib:escapeQuotes(ib:getOneLocalRecipient(email))}"/>
<jsp:useBean id="jspHelperBean" class="i2p.bote.web.JSPHelper"/>
<input type="hidden" name="recipient0" value="${ib:escapeQuotes(ib:getReplyAddress(email, jspHelperBean.identities))}"/>
<input type="hidden" name="recipientType0" value="to"/>
<ib:message key="Re:" var="responsePrefix" hide="true"/>
<c:set var="responsePrefix" value="${responsePrefix} "/>
<c:if test="${fn:startsWith(email.subject, responsePrefix)}">
<c:set var="responsePrefix" value=""/>
</c:if>
<input type="hidden" name="subject" value="${responsePrefix}${ib:escapeQuotes(email.subject)}"/>
<input type="hidden" name="quoteMsgFolder" value="${param.folder}"/>
<input type="hidden" name="quoteMsgId" value="${param.messageID}"/>
</form>
</div>
<div class="show-email-delete">
<form action="deleteEmail.jsp" method="post">
<button type="submit"><ib:message key="Delete"/></button>
<input type="hidden" name="folder" value="${param.folder}"/>
<input type="hidden" name="messageID" value="${email.messageID}"/>
</form>
</div>
</div>
</ib:requirePassword>
<jsp:include page="footer.jsp"/>

View File

@ -0,0 +1,55 @@
<%--
Copyright (C) 2009 HungryHobo@mail.i2p
The GPG fingerprint for HungryHobo@mail.i2p is:
6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12
This file is part of I2P-Bote.
I2P-Bote is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
I2P-Bote is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with I2P-Bote. If not, see <http://www.gnu.org/licenses/>.
--%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="ib" uri="I2pBoteTags" %>
<ib:message key="Full Identity" var="title" scope="request"/>
<jsp:include page="header.jsp"/>
<ib:requirePassword>
<div class="main">
<c:set var="key" value="${param.key}"/>
<c:set var="identity" value="${ib:getIdentity(key)}"/>
<c:set var="publicName" value="${ib:escapeQuotes(identity.publicName)}"/>
<div class="full-identity">
<p>
<ib:message key="Full Email Identity for {0}:">
<ib:param value="${publicName}"/>
</ib:message>
</p>
<textarea cols="64" rows="9" readonly="readonly">${identity.fullKey}</textarea>
</div>
<p/>
<div class="warning"><b><ib:message key="Do not show the above information to anyone! It contains your private keys."/></b></div>
<p/>
<form action="editIdentity.jsp">
<input type="hidden" name="key" value="${key}"/>
<button type="submit"><ib:message key="Return"/></button>
</form>
</div>
</ib:requirePassword>
<jsp:include page="footer.jsp"/>

View File

@ -26,21 +26,49 @@
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="ib" uri="I2pBoteTags" %>
<jsp:useBean id="jspHelperBean" class="i2p.bote.web.JSPHelper"/>
<c:set var="themeDir" value="themes/${jspHelperBean.configuration.theme}" scope="request"/>
<jsp:include page="getStatus.jsp"/>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="i2pbote.css" />
<meta http-equiv="refresh" content="20" />
<link rel="stylesheet" href="themes/${jspHelperBean.configuration.theme}/i2pbote.css" />
<c:if test="${connStatus ne CONNECTED and connStatus ne ERROR}">
<meta http-equiv="refresh" content="20" />
</c:if>
</head>
<body style="background-color: transparent; margin: 0px;">
<body class="iframe-body">
<div class="statusbox">
<table><tr>
<td><strong>K-Peers:</strong></td><td style="text-align: right"><ib:numDhtPeers/></td>
<%-- </tr><tr>
<td><strong>R-Peers:</strong></td><td style="text-align: right"><ib:numRelayPeers/></td> --%>
</tr></table>
<c:choose>
<c:when test="${connStatus == NOT_STARTED}"><img src="${themeDir}/images/connect_error.png"/> <ib:message key="Not Started"/></c:when>
<c:when test="${connStatus == DELAY}"><img src="${themeDir}/images/connecting.png"/> <ib:message key="Waiting 3 Minutes..."/><br/></c:when>
<c:when test="${connStatus == CONNECTING}"><img src="${themeDir}/images/connecting.png"/> <ib:message key="Connecting..."/></c:when>
<c:when test="${connStatus == CONNECTED}"><img src="${themeDir}/images/connected.png"/> <ib:message key="Connected"/></c:when>
<c:when test="${connStatus == ERROR}"><img src="${themeDir}/images/connect_error.png"/>
<a href="connectError.jsp" target="_parent"><ib:message key="Error"/></a>
</c:when>
<c:otherwise> <ib:message key="Unknown Status"/></c:otherwise>
</c:choose>
<c:if test="${connStatus == DELAY or connStatus == ERROR}">
<%-- Show the connect button --%>
<div class="status-frame-connect">
<%-- When the connect button is clicked, refresh the entire page so the buttons in buttonFrame.jsp are enabled --%>
<form action="connect.jsp" target="_top" method="GET">
<button type="submit">
<c:if test="${connStatus eq ERROR}">
<ib:message key="Retry Connecting"/>
</c:if>
<c:if test="${connStatus ne ERROR}">
<ib:message key="Connect Now"/>
</c:if>
</button>
</form>
</div>
</c:if>
</div>
</body>

View File

@ -0,0 +1,131 @@
<%--
Copyright (C) 2009 HungryHobo@mail.i2p
The GPG fingerprint for HungryHobo@mail.i2p is:
6DD3 EAA2 9990 29BC 4AD2 7486 1E2C 7B61 76DC DC12
This file is part of I2P-Bote.
I2P-Bote is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
I2P-Bote is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with I2P-Bote. If not, see <http://www.gnu.org/licenses/>.
--%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="ib" uri="I2pBoteTags" %>
<%--
This JSP creates a new email identity if createNew=true, or saves
an existing one if createNew=false. If the chosen cryptoImpl is slow
at generating keys, a "wait" page is displayed.
--%>
<c:if test="${param.action == 'cancel'}">
<jsp:forward page="identities.jsp"/>
</c:if>
<c:if test="${param.action == 'publish'}">
<jsp:forward page="publishDestination.jsp">
<jsp:param name="action" value="start"/>
</jsp:forward>
</c:if>
<c:if test="${param.action == 'delete'}">
<jsp:forward page="deleteIdentity.jsp"/>
</c:if>
<c:if test="${empty keygenCounter}">
<c:set var="keygenCounter" value="0"/>
</c:if>
<c:set var="slow" value="false"/>
<%-- If cryptoImpl=4, show the wait page --%>
<c:if test="${param.cryptoImpl eq 4}">
<c:set var="slow" value="true"/>
</c:if>
<%-- When generating a vanity address, show the wait page --%>
<c:if test="${not empty param.vanityPrefix}">
<c:set var="slow" value="true"/>
</c:if>
<c:choose>
<c:when test="${empty param.publicName}">
<ib:message key="Please fill in the Public Name field." var="errorMessage" scope="request"/>
<jsp:forward page="editIdentity.jsp?createNew=true"/>
</c:when>
<%-- Show the wait page when creating an identity will take a while --%>
<c:when test="${param.createNew eq 'true' and param.action ne 'wait' and empty param.counter and slow}">
<jsp:forward page="submitIdentity.jsp">
<jsp:param name="action" value="wait"/>
</jsp:forward>
</c:when>
<%--
From the wait page, do an HTTP refresh to start the actual identity generation.
The counter is only used if there is a wait page. It prevents another identity
from being generated if the user reloads the page in the browser.
--%>
<c:when test="${param.action eq 'wait'}">
<c:set var="counterParam" value="${keygenCounter+1}"/>
<%-- The double URL encoding prevents GET from breaking special chars --%>
<c:set var="refreshUrl" value="submitIdentity.jsp?counter=${counterParam}&amp;createNew=${param.createNew}&amp;cryptoImpl=${param.cryptoImpl}&amp;vanityPrefix=${param.vanityPrefix}&amp;publicName=${ib:urlEncode(ib:urlEncode(param.publicName))}&amp;description=${param.description}&amp;emailAddress=${param.emailAddress}&amp;defaultIdentity=${param.defaultIdentity}" scope="request"/>
<c:set var="refreshInterval" value="0" scope="request"/>
<jsp:include page="header.jsp"/>
<div class="main">
<h2><ib:message key="Please wait..."/></h2>
<img src="${themeDir}/images/wait.gif"/>
<ib:message key="The Email Identity is being generated. This may take a while."/>
</div>
</c:when>
<%-- This is where the actual identity generation takes place --%>
<c:when test="${param.counter gt keygenCounter or param.createNew ne 'true' or not slow}">
<c:set var="publicName" value="${param.publicName}"/>
<c:if test="${not empty param.counter}">
<c:set var="publicName" value="${ib:urlDecode(publicName)}"/>
</c:if>
<%-- after password entry, go to the wait page if a new "slow" identity is being generated --%>
<c:if test="${param.createNew eq 'true' and slow}">
<c:set var="actionParam" value="action=wait&amp;"/>
</c:if>
<c:set var="forwardUrl" value="submitIdentity.jsp?${actionParam}counter=${param.counter}&amp;createNew=${param.createNew}&amp;cryptoImpl=${param.cryptoImpl}&amp;vanityPrefix=${param.vanityPrefix}&amp;publicName=${param.publicName}&amp;description=${param.description}&amp;emailAddress=${param.emailAddress}&amp;defaultIdentity=${param.defaultIdentity}"/>
<ib:requirePassword forwardUrl="${forwardUrl}">
<c:catch var="exception">
<c:set var="errorMessage" value="${ib:createOrModifyIdentity(param.createNew, param.cryptoImpl, param.vanityPrefix, param.key, publicName, param.description, null, param.emailAddress, param.defaultIdentity=='on')}"/>
</c:catch>
<c:if test="${exception.cause['class'].name eq 'i2p.bote.email.IllegalDestinationParametersException'}">
<jsp:forward page="editIdentity.jsp">
<jsp:param name="errorMessage" value="${exception.cause.localizedMessage}"/>
</jsp:forward>
</c:if>
<c:if test="${not empty param.counter}">
<c:set var="keygenCounter" value="${param.counter}" scope="session"/>
</c:if>
<c:if test="${empty errorMessage}">
<ib:message key="The email identity has been saved." var="infoMessage"/>
<jsp:forward page="saveIdentities.jsp">
<jsp:param name="infoMessage" value="${infoMessage}"/>
</jsp:forward>
</c:if>
<c:if test="${!empty errorMessage}">
<jsp:forward page="editIdentity.jsp">
<jsp:param name="errorMessage" value="${errorMessage}"/>
</jsp:forward>
</c:if>
</ib:requirePassword>
</c:when>
<%-- If the user reloads after an identity has been generated and the wait mechanism was used, just show the identities page --%>
<c:when test="${empty param.counter or param.counter le keygenCounter}">
<jsp:forward page="identities.jsp"/>
</c:when>
</c:choose>

View File

@ -0,0 +1,809 @@
/* Based on the router console css */
body {
margin: 15px 0 0 10px;
padding: 0em;
text-align: center;
background: #eef;
color: #000;
font: 9pt/130% "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
}
iframe {
border: none;
}
.iframe-body {
background-color: transparent;
border: none;
margin: 0px;
}
.button-frame {
width: 100%;
height: 55px;
}
.folders-frame {
width: 100%;
height: 160px;
}
.status-frame {
width: 100%;
height: 40px;
}
.status-frame-connect {
text-align: center;
}
.titlebar {
margin: 0px 20px 20px 240px;
background-color: #fff;
color: #310;
padding: 0 15px 15px 25px;
-moz-border-radius: 4px;
-khtml-border-radius: 4px;
border-radius: 4px;
border: 1px solid #001;
text-align: center;
-moz-box-shadow: inset 0px 0px 1px 0px #002;
white-space: normal;
background: #ddf url('images/background.png');
opacity: 1.0;
cursor: pointer;
}
.title {
font: normal bold 20pt/120% 'Lucida Sans Unicode', 'Bitstream Vera Sans', Verdana, Tahoma, Helvetica, sans-serif;
font-weight: bold;
letter-spacing: 0.15em;
text-shadow: 0px 0px 1px rgba(0, 0, 148, 0.9);
}
.subtitle {
font-size: 8pt;
color: #cf0606;
letter-spacing: 5pt;
text-shadow: 0px 0px 1px rgba(148, 0, 0, 0.9);
}
.checkmail {
font: bold 8pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
float: left;
width: 50%;
}
.compose {
font: bold 8pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
float: right;
width: 50%;
}
.lastcheck {
font: bold 8pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
float: left;
}
.password {
float: right;
margin: 5px;
}
.updateMessage {
margin: 0px 0px 5px 15px;
text-align: left;
width: 190px;
float: left;
}
.updateMessage a:link, a:visited {
color: #0b4;
font-weight: bold;
}
.menubox {
float: left;
width: 180px;
margin: 0px 0px 10px 10px;
padding: 10px;
text-align: left;
border: 1px solid #000033;
background: #ddf url('images/background.png');
color: #000;
font-size: 8pt;
clear: left;
-moz-border-radius: 4px;
-khtml-border-radius: 4px;
border-radius: 4px;
-moz-box-shadow: inset 0px 0px 1px 0px #002;
}
.menubox a:link, .menubox a:visited {
text-shadow: 0px 0px 1px rgba(0, 0, 32, 0.5);
}
.menubox a:hover {
text-shadow: 0px 0px 0.5px rgba(255, 255, 255, 0.7);
color: #f60;
}
.menubox h2 {
font-size: 12pt;
color: #001;
letter-spacing: 0.05em;
text-shadow: 0px 0px 1px rgba(0, 0, 64, 0.5);
word-wrap: none;
}
.statusbox {
font-size: 8pt;
font-weight: bold;
text-align: left;
}
.folderbox {
font-size: 8pt;
font-weight: bold;
text-align: left;
}
.main {
position: relative;
margin: 0px 20px 20px 240px;
padding: 0 15px 15px 25px;
background: #ddf url('images/background.png');
color: #001;
font: 9pt/130% "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
text-align: left;
border: 1px solid #000033;
-moz-border-radius: 4px;
-khtml-border-radius: 4px;
border-radius: 4px;
-moz-box-shadow: inset 0px 0px 1px 0px #002;
}
.foldermain {
padding: 0 15px 15px 15px;
}
.emailtext {
margin: 0px 20px 20px 240px;
padding: 0 15px 15px 25px;
background: #cce2ff;
color: #001;
font: 9pt/130% "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
text-align: left;
border: 1px solid #000033;
-moz-border-radius: 4px;
-khtml-border-radius: 4px;
border-radius: 4px;
-moz-box-shadow: inset 0px 0px 1px 0px #002;
}
.infoMessage {
margin: 0px 20px 5px 240px;
text-align: left;
color: green;
}
.errorMessage {
margin: 0px 20px 5px 240px;
text-align: left;
color: red;
}
.stackTrace {
white-space: pre;
}
.subheading {
font-weight: bold;
}
.warning {
color: red;
}
img {
border: none;
}
a:active {
color: #900;
}
a:link {
color: #007;
text-decoration: none;
font-weight: bold;
word-wrap: break-word;
}
a:visited {
color: #606;
text-decoration: none;
font-weight: bold;
}
a:hover {
color: #f60;
text-decoration: underline;
font-weight: bold;
}
a:active {
color: #f93;
text-decoration: underline;
font-weight: bold;
}
button, button:visited {
font: bold 8pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
border: 1px outset #999;
padding: 1px 3px;
background: #ddf !important;
text-decoration: none;
border-radius: 4px;
-moz-border-radius: 4px;
-khtml-border-radius: 4px;
margin: 0 1px;
text-align: center;
min-width: 80px;
-moz-box-shadow: inset 0px 2px 8px 0px #fff;
color: #006;
}
button:hover {
border: 1px solid #f60;
background: #f60 !important;
color: #fff;
-moz-box-shadow: inset 0px 0px 0px 1px #fff;
}
button:active {
border: 1px solid #f60;
background: #001 !important;
color: #f60;
-moz-box-shadow: inset 0px 0px 0px 1px #f60;
}
button[disabled] {
border: 1px outset #999;
background: #ddf !important;
color: #666;
-moz-box-shadow: inset 0px 0px 0px 1px #999;
}
.underline {
border-bottom: 1px solid #000022;
padding: 5px 0px 5px 0px;
margin: 0px 0px 10px 0px;
}
input {
background: #eef;
color: #001;
margin: 5px 10px 5px 10px;
padding: 4px 2px;
font: bold 8pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
border: 1px solid #001;
text-decoration: none;
min-width: 110px;
}
input, input:visited {
border: 1px outset #999;
background: #ddf;
color: #001;
margin: 5px;
font: bold 8pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
padding: 1px 2px;
text-decoration: none;
min-width: 110px;
border-radius: 4px;
-moz-border-radius: 4px;
-khtml-border-radius: 4px;
-moz-box-shadow: inset 0px 2px 8px 0px #fff;
color: #006;
opacity: 0.9;
}
input:hover {
background: #f60;
color: #fff;
border: 1px solid #f60;
opacity: 1.0;
-moz-box-shadow: inset 0px 0px 0px 1px #fff;
}
input:active {
background: #002;
color: #f60;
border: 1px solid #f60;
opacity: 1.0;
-moz-box-shadow: inset 0px 0px 0px 1px #f60;
}
input[type=text] {
background: #eef;
color: #001;
margin: 5px;
padding: 5px;
font: bold 8pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
border: 1px solid #001;
text-decoration: none;
}
input[type=checkbox] {
min-width: 10px; /* for Chrome */
border: 0 !important;
}
textarea {
width: 100%;
padding: 5px;
margin: 5px;
background: #eef;
color: #003;
border-radius: 4px;
-moz-border-radius: 4px;
-khtml-border-radius: 4px;
font: 9pt/130% "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
min-height: 100px;
border: 1px solid #001;
}
submit {
background: #f00;
color: #eef;
margin: 10px 2px 10px 0;
padding: 2px;
font-family: "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
font-weight: bold;
border: 1px solid #001;
text-decoration: none;
}
select {
background: #eef;
color: #003;
padding: 2px;
margin: 5px;
border: 1px solid #001;
font: 9pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
border-radius: 4px;
-moz-border-radius: 4px;
-khtml-border-radius: 4px;
text-align: left !important;
}
table {
table-layout: fixed;
width: 100%;
}
table td, th {
padding-left: 10px;
padding-top: 3px;
background: url('images/background.png');
white-space: nowrap;
overflow-x: hidden;
}
.even-table-cell td {
background: url('images/background.png');
}
.odd-table-cell td {
background: url('images/background-alt.png');
}
.deleteIdentityBtn {
text-align: right;
}
.addtl-text {
font-weight: normal;
font-size: 0.8em;
}
.field-label {
font-weight: bold;
}
.field-label-multiline {
font-weight: bold;
vertical-align: top;
}
.destination {
color: #003;
font: 8pt "Lucida Console", "DejaVu Sans Mono", Courier, mono;
word-wrap: break-word;
}
.hidden-text {
display: none;
}
.identity-form-label {
position: absolute;
margin-top: 10px;
margin-left: 5px;
font-weight: bold;
}
.identity-form-value {
top: 0px;
margin-left: 220px;
margin-right: 5px;
margin-top: 10px;
}
.identity-form-checkbox {
top: 0px;
margin-left: 220px;
margin-right: 5px;
margin-top: 7px;
}
.identity-form-picture img {
top: 0px;
margin-left: 220px;
margin-right: 5px;
margin-top: 10px;
width: 100px;
}
.identity-form-text {
top: 0px;
margin-left: 220px;
margin-right: 5px;
margin-top: 10px;
white-space: pre;
font-family: monospace;
white-space: -pre-wrap;
white-space: pre-wrap;
word-wrap: break-word;
}
.identity-buttons {
text-align: left;
}
.identity-delete {
text-align: right;
}
.identity-buttons, .identity-delete {
display: inline-block;
width: 250px;
}
.full-identity {
margin-right: 10px;
font-weight: bold;
}
.publish-form-label {
position: absolute;
margin-top: 10px;
margin-left: 5px;
font-weight: bold;
}
.publish-form-value {
top: 0px;
margin-left: 180px;
margin-right: 5px;
margin-top: 10px;
}
.publish-form-value textarea {
width: 600px;
}
.contact-detail-container {
margin: 0px auto;
overflow: hidden;
}
.contact-detail-left {
width: 100px;
float: left;
font-weight: bold;
padding-left: 10px;
padding-right: 15px;
padding-bottom: 10px;
}
.contact-detail-left img {
width: 100%;
padding-bottom: 5px;
}
.contact-detail-text
{
width: 100%;
padding-left: 10px;
padding-bottom: 10px;
white-space: pre;
font-family: monospace;
white-space: -pre-wrap;
white-space: pre-wrap;
word-wrap: break-word;
}
.contact-detail-dest
{
width: 100%;
padding-left: 10px;
padding-bottom: 10px;
word-wrap: break-word;
}
.contact-form-label {
position: absolute;
margin-top: 10px;
margin-left: 5px;
font-weight: bold;
}
.contact-form-value {
top: 0px;
margin-left: 120px;
margin-right: 5px;
margin-top: 10px;
}
.contact-form-picture img {
top: 0px;
margin-left: 120px;
margin-right: 5px;
margin-top: 10px;
width: 100px;
}
.contact-form-text {
top: 0px;
margin-left: 120px;
margin-right: 5px;
margin-top: 10px;
white-space: pre;
font-family: monospace;
white-space: -pre-wrap;
white-space: pre-wrap;
word-wrap: break-word;
}
.header-column-replied {
width: 8px;
}
.header-column-from {
width: 18%;
}
.header-column-known {
width: 4%;
text-align: center;
}
.header-column-delivery {
width: 8%;
text-align: center;
}
.header-column-to {
width: 18%;
}
.header-column-subject {
width: 30%;
}
.header-column-date {
width: 23%;
}
.header-column-status {
width: 100px;
}
.header-column-trash {
width: 30px;
}
.header-column-default {
width: 8%;
}
.data-column-default {
text-align: center;
}
.header-column-public-name {
width: 30%;
}
.header-column-description {
width: 35%;
}
.header-column-id-email-dest {
width: 27%;
}
.header-column-check {
width: 3%;
}
.header-column-name {
width: 30%;
}
.header-column-addr-email-dest {
width: 72%;
}
.sig-invalid {
color: red;
text-align: center;
}
.anon-sender {
font-style: italic;
}
.sender-known {
text-align: center;
}
.deliveryComplete {
color: green;
text-align: center;
}
.deliveryIncomplete {
color: black;
text-align: center;
}
.folder-item-new a {
font-weight: bold;
}
.folder-item-old a {
font-weight: normal;
}
.email-form-button-send {
position: absolute;
right: 20px;
top: 10px;
}
.email-form-button-row {
top: 0px;
margin-left: 120px;
text-align: right;
width: 585px;
white-space: nowrap;
}
.email-form-label {
position: absolute;
padding-top: 10px;
padding-left: 5px;
font-weight: bold;
}
.email-form-recipient-label {
position: absolute;
}
.email-form-recipient-value {
top: 0px;
margin-left: 120px;
max-width: 600px;
white-space: nowrap;
}
.email-form-recipient-field {
width: 475px;
}
.email-form-value {
top: 0px;
margin-left: 120px;
margin-right: 5px;
}
.email-form-subject-field {
margin-right: 5px;
width: 567px;
}
.email-form-attach-label {
position: absolute;
padding-left: 5px;
}
.email-form-attach-files {
padding-left: 5px;
padding-bottom: 3px;
white-space: nowrap;
}
.email-form-attach-item {
position: absolute;
width: 300px;
overflow-x: hidden;
}
.email-form-attach-size {
color: #777;
}
.email-form-attach-remove {
margin-left: 305px;
}
.email-form-attach-small {
font-size: 0.8em;
padding-left: 5px;
}
.show-email-value {
margin-left: 120px;
margin-right: 5px;
padding-top: 10px;
min-height: 1em;
}
.show-email-invalid-sig {
color: red;
}
.show-email-reply {
position: absolute;
}
.show-email-delete {
margin-left: 120px;
}
.password-label {
position: absolute;
padding-top: 5px;
}
.password-field {
margin-left: 115px;
}
.contributor-category {
font-weight: bold;
}
.contributor-name {
margin-left: 100px;
position: absolute;
}
.contributor-role {
color: #555;
margin-left: 250px;
margin-top: 3px;
}
wbr:after { content: "\00200B" } /* For Opera */
.ellipsis {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
-o-text-overflow: ellipsis;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 209 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 956 B

View File

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 633 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 412 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 393 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 396 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 544 B

View File

Before

Width:  |  Height:  |  Size: 475 B

After

Width:  |  Height:  |  Size: 475 B

View File

Before

Width:  |  Height:  |  Size: 478 B

After

Width:  |  Height:  |  Size: 478 B

View File

Before

Width:  |  Height:  |  Size: 600 B

After

Width:  |  Height:  |  Size: 600 B

View File

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 435 B

View File

@ -0,0 +1,793 @@
/* Based on the I2PSnark theme "Vanilla" by dr|z3d */
body {
margin: 15px 0 0 10px;
padding: 0em;
text-align: center;
background: #eef url('images/graytile.png');
color: #000;
font: 9pt/130% "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
}
iframe {
border: none;
}
.iframe-body {
background: #ffd;
background-color: transparent;
border: none;
margin: 0px;
}
.button-frame {
width: 100%;
height: 55px;
}
.folders-frame {
width: 100%;
height: 160px;
}
.status-frame {
width: 100%;
height: 40px;
}
.status-frame-connect {
text-align: center;
}
.titlebar {
margin: 0px 20px 20px 240px;
background-color: #fff;
color: #310;
padding: 0 15px 15px 25px;
-moz-border-radius: 4px;
-khtml-border-radius: 4px;
border-radius: 4px;
border: 1px solid #001;
text-align: center;
-moz-box-shadow: inset 0px 0px 1px 0px #002;
white-space: normal;
background: #ddf url('images/background.png');
opacity: 1.0;
cursor: pointer;
}
.title {
font: normal bold 20pt/120% 'Lucida Sans Unicode', 'Bitstream Vera Sans', Verdana, Tahoma, Helvetica, sans-serif;
font-weight: bold;
letter-spacing: 0.15em;
text-shadow: 0px 0px 1px rgba(0, 0, 148, 0.9);
}
.subtitle {
font-size: 8pt;
color: #cf0606;
letter-spacing: 5pt;
text-shadow: 0px 0px 1px rgba(148, 0, 0, 0.9);
}
.checkmail {
font: bold 8pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
float: left;
width: 50%;
}
.compose {
font: bold 8pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
float: right;
width: 50%;
}
.lastcheck {
margin: 7px 0px 0px 0px;
font: bold 8pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
float: left;
}
.password {
float: right;
margin: 5px;
}
.updateMessage {
margin: 0px 0px 5px 15px;
text-align: left;
width: 190px;
float: left;
}
.updateMessage a:link, a:visited {
color: #0b4;
font-weight: bold;
}
.menubox {
float: left;
width: 180px;
margin: 0px 0px 10px 10px;
padding: 10px;
text-align: left;
border: 1px solid #000033;
background: #ddf url('images/background.png');
color: #000;
font-size: 8pt;
clear: left;
-moz-border-radius: 4px;
-khtml-border-radius: 4px;
border-radius: 4px;
-moz-box-shadow: inset 0px 0px 1px 0px #002;
}
.menubox a:link, .menubox a:visited {
text-shadow: 0px 0px 1px rgba(0, 0, 32, 0.5);
}
.menubox a:hover {
text-shadow: 0px 0px 0.5px rgba(255, 255, 255, 0.7);
color: #f60;
}
.menubox h2 {
font-size: 12pt;
color: #001;
letter-spacing: 0.05em;
text-shadow: 0px 0px 1px rgba(0, 0, 64, 0.5);
wordwrap: none;
}
.statusbox {
font-size: 8pt;
font-weight: bold;
text-align: left;
}
.folderbox {
font-size: 8pt;
font-weight: bold;
text-align: left;
}
.main, .emailtext {
margin: 0px 20px 20px 240px;
padding: 0 15px 15px 25px;
background: #eef url('images/background.png');
color: #001;
font: 9pt/130% "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
text-align: left;
border: 1px solid #000033;
-moz-border-radius: 4px;
-khtml-border-radius: 4px;
border-radius: 4px;
-moz-box-shadow: inset 0px 0px 1px 0px #002;
}
.foldermain {
padding: 0 15px 15px 15px;
}
.infoMessage {
margin: 0px 20px 5px 240px;
text-align: left;
color: #14f;
}
.errorMessage {
margin: 0px 20px 5px 240px;
text-align: left;
color: red;
}
.stackTrace {
white-space: pre;
}
.subheading {
font-weight: bold;
}
.warning {
color: red;
}
img {
border: none;
}
a:active {
color: #900;
}
a:link {
color: #d30;
text-decoration: none;
font-weight: bold;
word-wrap: break-word;
}
a:visited {
color: #a60;
text-decoration: none;
font-weight: bold;
}
a:hover {
color: #f60;
text-decoration: underline;
font-weight: bold;
}
a:active {
color: #fb0;
text-decoration: underline;
font-weight: bold;
}
button, button:visited {
font: bold 8pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
border: 1px outset #bbb;
padding: 1px 3px;
background: #fef url("images/bling.png");
color: #f30;
text-decoration: none;
border-radius: 4px;
-moz-border-radius: 4px;
-khtml-border-radius: 4px;
margin: 0 1px;
text-align: center;
min-width: 80px;
-moz-box-shadow: inset 0px 2px 8px 0px #fff;
}
button:not([disabled]):hover {
border: 1px solid #f60;
background: #f60 !important;
color: #fff;
-moz-box-shadow: inset 0px 0px 0px 1px #fff;
}
button:not([disabled]):active {
border: 1px solid #f60;
background: #001 !important;
color: #f60;
-moz-box-shadow: inset 0px 0px 0px 1px #f60;
}
button[disabled], button[disabled]:active, button[disabled]:hover {
border: 1px outset #999;
background: #f3efc7;
color: GrayText;
-moz-box-shadow: inset 0px 0px 0px 1px #999;
}
.underline {
border-bottom: 1px solid #000022;
padding: 5px 0px 5px 0px;
margin: 0px 0px 10px 0px;
}
input {
background: #fff;
color: #500;
margin: 5px 10px 5px 10px;
padding: 4px 2px;
font: bold 8pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
border: 1px solid #001;
text-decoration: none;
min-width: 110px;
}
input, input:visited {
border: 1px outset #999;
background: #fff;
color: #500;
margin: 5px;
font: bold 8pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
padding: 1px 2px;
text-decoration: none;
min-width: 110px;
border-radius: 4px;
-moz-border-radius: 4px;
-khtml-border-radius: 4px;
-moz-box-shadow: inset 0px 2px 8px 0px #fff;
color: #006;
opacity: 0.9;
}
input:hover {
background: #f60;
color: #fff;
border: 1px solid #f60;
opacity: 1.0;
-moz-box-shadow: inset 0px 0px 0px 1px #fff;
}
input:active {
background: #002;
color: #f60;
border: 1px solid #f60;
opacity: 1.0;
-moz-box-shadow: inset 0px 0px 0px 1px #f60;
}
input[type=text] {
background: #fff;
color: #001;
margin: 5px;
padding: 5px;
font: bold 8pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
border: 1px solid #001;
text-decoration: none;
}
input[type=checkbox] {
min-width: 10px; /* for Chrome */
border: 0 !important;
}
textarea {
width: 100%;
padding: 5px;
margin: 5px;
background: #fff;
color: #500;
border-radius: 4px;
-moz-border-radius: 4px;
-khtml-border-radius: 4px;
font: 9pt/130% "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
min-height: 100px;
border: 1px solid #001;
}
submit {
background: #fff;
color: #500;
margin: 10px 2px 10px 0;
padding: 2px;
font-family: "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
font-weight: bold;
border: 1px solid #001;
text-decoration: none;
}
select {
background: #fff;
color: #500;
padding: 2px;
margin: 5px;
border: 1px solid #001;
font: 9pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
border-radius: 4px;
-moz-border-radius: 4px;
-khtml-border-radius: 4px;
text-align: left !important;
}
table {
table-layout: fixed;
width: 100%;
}
table td, th {
padding-left: 10px;
padding-top: 3px;
background: url('images/background.png');
white-space: nowrap;
overflow-x: hidden;
}
.even-table-cell td {
background: url('images/background.png');
}
.odd-table-cell td {
background: url('images/background-alt.png');
}
.deleteIdentityBtn {
text-align: right;
}
.addtl-text {
font-weight: normal;
font-size: 0.8em;
}
.field-label {
font-weight: bold;
}
.field-label-multiline {
font-weight: bold;
vertical-align: top;
}
.destination {
color: #003;
font: 8pt "Lucida Console", "DejaVu Sans Mono", Courier, mono;
word-wrap: break-word;
}
.hidden-text {
display: none;
outline: none;
}
.identity-form-label {
position: absolute;
margin-top: 10px;
margin-left: 5px;
font-weight: bold;
}
.identity-form-value {
top: 0px;
margin-left: 220px;
margin-right: 5px;
margin-top: 10px;
}
.identity-form-checkbox {
top: 0px;
margin-left: 220px;
margin-right: 5px;
margin-top: 7px;
}
.identity-form-picture img {
top: 0px;
margin-left: 220px;
margin-right: 5px;
margin-top: 10px;
width: 100px;
}
.identity-form-text {
top: 0px;
margin-left: 220px;
margin-right: 5px;
margin-top: 10px;
white-space: pre;
font-family: monospace;
white-space: -pre-wrap;
white-space: pre-wrap;
word-wrap: break-word;
}
.identity-buttons {
text-align: left;
}
.identity-delete {
text-align: right;
}
.identity-buttons, .identity-delete {
display: inline-block;
width: 250px;
}
.full-identity {
margin-right: 10px;
font-weight: bold;
}
.publish-form-label {
position: absolute;
margin-top: 10px;
margin-left: 5px;
font-weight: bold;
}
.publish-form-value {
top: 0px;
margin-left: 180px;
margin-right: 5px;
margin-top: 10px;
}
.publish-form-value textarea {
width: 600px;
}
.contact-detail-container {
margin: 0px auto;
overflow: hidden;
}
.contact-detail-left {
width: 100px;
float: left;
font-weight: bold;
padding-left: 10px;
padding-right: 15px;
padding-bottom: 10px;
}
.contact-detail-left img {
width: 100%;
padding-bottom: 5px;
}
.contact-detail-text
{
width: 100%;
padding-left: 10px;
padding-bottom: 10px;
white-space: pre;
font-family: monospace;
white-space: -pre-wrap;
white-space: pre-wrap;
word-wrap: break-word;
}
.contact-detail-dest
{
width: 100%;
padding-left: 10px;
padding-bottom: 10px;
word-wrap: break-word;
}
.contact-form-label {
position: absolute;
margin-top: 10px;
margin-left: 5px;
font-weight: bold;
}
.contact-form-value {
top: 0px;
margin-left: 120px;
margin-right: 5px;
margin-top: 10px;
}
.contact-form-picture img {
top: 0px;
margin-left: 120px;
margin-right: 5px;
margin-top: 10px;
width: 100px;
}
.contact-form-text {
top: 0px;
margin-left: 120px;
margin-right: 5px;
margin-top: 10px;
white-space: pre;
font-family: monospace;
white-space: -pre-wrap;
white-space: pre-wrap;
word-wrap: break-word;
}
.header-column-replied {
color: grey;
width: 8px;
}
.header-column-from {
width: 18%;
}
.header-column-known {
width: 4%;
text-align: center;
}
.header-column-delivery {
width: 8%;
text-align: center;
}
.header-column-to {
width: 18%;
}
.header-column-subject {
width: 30%;
}
.header-column-date {
width: 23%;
}
.header-column-status {
width: 100px;
}
.header-column-trash {
width: 30px;
}
.header-column-default {
width: 8%;
}
.data-column-default {
text-align: center;
}
.header-column-public-name {
width: 30%;
}
.header-column-description {
width: 35%;
}
.header-column-id-email-dest {
width: 27%;
}
.header-column-check {
width: 3%;
}
.header-column-name {
width: 30%;
}
.header-column-addr-email-dest {
width: 72%;
}
.sig-invalid {
color: orange;
text-align: center;
}
.anon-sender {
font-style: italic;
}
.sender-known {
color: grey;
text-align: center;
}
.deliveryComplete {
color: green;
text-align: center;
}
.deliveryIncomplete {
color: black;
text-align: center;
}
.folder-item-new a {
font-weight: bold;
}
.folder-item-old a {
font-weight: normal;
}
.email-form-button-row {
top: 0px;
margin-left: 120px;
text-align: right;
width: 585px;
white-space: nowrap;
}
.email-form-label {
position: absolute;
padding-top: 10px;
padding-left: 5px;
font-weight: bold;
}
.email-form-recipient-label {
position: absolute;
}
.email-form-recipient-value {
top: 0px;
margin-left: 120px;
max-width: 600px;
white-space: nowrap;
}
.email-form-recipient-field {
width: 475px;
}
.email-form-value {
top: 0px;
margin-left: 120px;
margin-right: 5px;
}
.email-form-subject-field {
margin-right: 5px;
width: 567px;
}
.email-form-attach-label {
position: absolute;
padding-left: 5px;
}
.email-form-attach-files {
padding-left: 5px;
padding-bottom: 3px;
white-space: nowrap;
}
.email-form-attach-item {
position: absolute;
width: 300px;
overflow-x: hidden;
}
.email-form-attach-size {
color: #777;
}
.email-form-attach-remove {
margin-left: 305px;
}
.email-form-attach-small {
font-size: 0.8em;
padding-left: 5px;
}
.show-email-value {
margin-left: 120px;
margin-right: 5px;
padding-top: 10px;
min-height: 1em;
}
.show-email-invalid-sig {
color: red;
}
.show-email-reply {
position: absolute;
}
.show-email-delete {
margin-left: 120px;
}
.password-label {
position: absolute;
padding-top: 5px;
}
.password-field {
margin-left: 115px;
}
.contributor-category {
font-weight: bold;
}
.contributor-name {
margin-left: 100px;
position: absolute;
}
.contributor-role {
color: #555;
margin-left: 250px;
margin-top: 3px;
}
wbr:after { content: "\00200B" } /* For Opera */
.ellipsis {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
-o-text-overflow: ellipsis;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 209 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 B

Some files were not shown because too many files have changed in this diff Show More