Compare commits
982 Commits
i2pbote_0_
...
i2pbote_0_
Author | SHA1 | Date | |
---|---|---|---|
e030e9ed5f | |||
1896fccf1f | |||
ca19e9d9e0 | |||
729a4ac99f | |||
729f59e729 | |||
78b66b5509 | |||
5cdcae1416 | |||
348262e7a2 | |||
adb290658a | |||
c04fc24445 | |||
4762f8486e | |||
52a717d7e3 | |||
e9ffb4643b | |||
382f75f4a4 | |||
4a6fc262e7 | |||
4cd24cd579 | |||
32ce92d7cb | |||
96bb3a0719 | |||
5cebc0b2ee | |||
4e7d57d8e3 | |||
0ad03ce6d4 | |||
2082fd0856 | |||
98c56de3a5 | |||
1801e308b2 | |||
f318587209 | |||
38d5833551 | |||
6bbd015d38 | |||
f20ae940a8 | |||
f7f185a68c | |||
a47100d14a | |||
32bd6e45a8 | |||
ca19b0929e | |||
3dede23a24 | |||
e190587330 | |||
0d92ddb6e1 | |||
52f6405c74 | |||
99fb8bf264 | |||
fa22d47252 | |||
2dfa656b06 | |||
56aa3f3c1c | |||
c2e75290fb | |||
3387cdd90c | |||
c3088c5931 | |||
a149a0bdc0 | |||
7867198fe9 | |||
38293ebcf9 | |||
6f4a0615ff | |||
22fa6105ac | |||
946fa8d6ec | |||
5a8d9c6f4f | |||
5c53c2071b | |||
c84770036d | |||
d9756407b0 | |||
fe9c6d9d47 | |||
ee96addef6 | |||
1f9aa61d2f | |||
5e559846db | |||
bbd24eaaff | |||
4db680f067 | |||
79595913f2 | |||
b387b77bfb | |||
dce43d11ae | |||
8fec6b28e8 | |||
17282cda4d | |||
1664253417 | |||
654b136cb0 | |||
2b5de7958e | |||
10b9b2e593 | |||
3571adf2ec | |||
44027e80ca | |||
9d821f66b9 | |||
bef847d270 | |||
967a523130 | |||
c35e9c9139 | |||
c0b62e25c1 | |||
936e1e7d50 | |||
592793eaac | |||
f1c9ac9788 | |||
bdd24d7e9d | |||
de36d91909 | |||
1a6ae22b99 | |||
adde9736be | |||
173d08d798 | |||
acb1ace33a | |||
ffa7450e77 | |||
d9d9c47124 | |||
d960308461 | |||
616df8de9f | |||
427e293bac | |||
163f8d58c0 | |||
43e34eb221 | |||
c2d1334c04 | |||
a05890eaec | |||
2a744fb1cd | |||
ed60728edd | |||
48e69d3cd5 | |||
df09332ead | |||
585413fa2b | |||
68c48cb332 | |||
ae87a801ea | |||
901b051546 | |||
6590e3122a | |||
e601b5f46e | |||
641085ab24 | |||
5d371f983a | |||
8fc111fc86 | |||
2dc809c025 | |||
7b0149dc39 | |||
24509df2b5 | |||
263b68550e | |||
ae3ac8b5be | |||
7c22899f32 | |||
3970d6d015 | |||
4464301119 | |||
f0622d202b | |||
63e260f932 | |||
87ad8db92a | |||
cc7e0209ec | |||
1a4c25a32f | |||
79339a0208 | |||
249389a4d3 | |||
92a5a998d6 | |||
e1a49cf440 | |||
e30cb79c5f | |||
49268b21ea | |||
74384e0517 | |||
9bfde0ac33 | |||
55d5ea6084 | |||
0e36c3dcc3 | |||
0155e5f57f | |||
a2b3833602 | |||
200d9ceb3d | |||
69fd2431c8 | |||
66020b2fc7 | |||
34e76ce627 | |||
79393f0ea8 | |||
c4cdbb98cc | |||
eda69d1e7e | |||
1f2c528b9b | |||
6a99b034b7 | |||
17db81eee1 | |||
d50c843145 | |||
7cbf364407 | |||
bd8674950e | |||
0a0418f83f | |||
a5832cd1e4 | |||
ccbc2c3e01 | |||
d5c6c2d046 | |||
d8a606946e | |||
dbaa00d5b1 | |||
844bfcb842 | |||
882a6d207a | |||
730aff2a50 | |||
de6d2d60a9 | |||
a724a521cd | |||
eaaf3c90e4 | |||
a0febacdfd | |||
2f0cb066ab | |||
fc89896246 | |||
e9c262c8b7 | |||
093e439e04 | |||
bf07f9c664 | |||
bba9ac405a | |||
a0457273b7 | |||
e6a330944d | |||
20940f209b | |||
bbc71ad13c | |||
64917757a4 | |||
b966ebbcfd | |||
ca7f4124c4 | |||
b24fe46661 | |||
1db3aee096 | |||
db5a566e15 | |||
f485c68472 | |||
78013d6725 | |||
261d05a1d6 | |||
4a79a28d28 | |||
844a7a24fe | |||
9937ec73f9 | |||
54629d8d05 | |||
15dcd78936 | |||
087a4a68be | |||
7829c44d0d | |||
476d06a588 | |||
53223be28d | |||
691b8ade1c | |||
7ac255ec94 | |||
cf84a6aeee | |||
15c45ad820 | |||
10100b8177 | |||
6adef679ac | |||
00411877ad | |||
7dc9f6caa0 | |||
dcb2b0f945 | |||
f396729698 | |||
0aff058acd | |||
55f363aa73 | |||
6fec35ce85 | |||
42001079b5 | |||
ab3d23a3af | |||
3b0c9774e5 | |||
8b44166b90 | |||
46ca0add8a | |||
6e967b2365 | |||
bc72ebb865 | |||
e204d01fa2 | |||
4a05868f11 | |||
6400913229 | |||
d7d3f2f01c | |||
f9014d7b7b | |||
a64ece90c2 | |||
e8f16cc83c | |||
d7b7355dd1 | |||
816cf49b8c | |||
bf2e2224c9 | |||
2824c9a773 | |||
1dbbcd8b78 | |||
d7d6257a36 | |||
020ef33b95 | |||
8cfe4c5660 | |||
e04deb28a1 | |||
fc0837ede4 | |||
3ade199175 | |||
7bffe19e9e | |||
3ffcf9d8d3 | |||
111b3d8dbb | |||
e177cd4567 | |||
a0ce9017a9 | |||
bc1848ddcf | |||
1f595fc079 | |||
22c0b789c4 | |||
967286aed0 | |||
ef357a5f2a | |||
9fb05ba42e | |||
f13743d7b9 | |||
549c39681d | |||
a3e8f657dd | |||
9cb3409a1a | |||
5e87d6fa2d | |||
902db81fa7 | |||
3cd0f09a41 | |||
d0204effa2 | |||
ec619dd830 | |||
10e3df428c | |||
e11f41d7f2 | |||
f7aae2de4e | |||
d1e4d1a715 | |||
9435b23ab2 | |||
bdffd2b8c4 | |||
590b9a9e05 | |||
86ec61db22 | |||
45f60e9242 | |||
56be74a167 | |||
14376afddb | |||
d2adcd64a7 | |||
13c19addff | |||
dad6a579c1 | |||
83d585f651 | |||
90ceef4583 | |||
0bf899e291 | |||
bbdfc5745b | |||
c3e6a437c9 | |||
dbe4400409 | |||
bb5d075a54 | |||
5d87d5ec00 | |||
d24eea365c | |||
abd4a55956 | |||
732b14115b | |||
4455fbb172 | |||
673d43cd86 | |||
b45a162826 | |||
b06d07b5d1 | |||
52ac133ffa | |||
4a240fbb5b | |||
252a7f0dad | |||
1cd51c811d | |||
dda1f5b585 | |||
fb5e1fc4c2 | |||
0e6a32a0a0 | |||
d9bc25e1aa | |||
b124a1046d | |||
cd21435b60 | |||
44130323ad | |||
ef339c29d0 | |||
8ea8e86d99 | |||
0edf2cfbe3 | |||
a4b284a71c | |||
e1b9eb5bbc | |||
f45a185502 | |||
be545c0836 | |||
6c10b8ac64 | |||
92ff6b58f0 | |||
1f54ed9ba8 | |||
19452867b4 | |||
1fe6c4fc36 | |||
57ead77d39 | |||
dd3ed14174 | |||
efc2363ade | |||
19a586b170 | |||
3851faff3f | |||
a583a1fcc3 | |||
0464c76884 | |||
2bc05d4d46 | |||
19970b1d53 | |||
035cd346a4 | |||
cb1d5bbf67 | |||
058d09d262 | |||
14c728c588 | |||
7823b38d24 | |||
cb76489c0f | |||
fb0352cd7e | |||
b7fcbb5829 | |||
80a04a70cb | |||
b48534b5f7 | |||
a1085909e1 | |||
dc7777be7f | |||
0ed58252d9 | |||
660b77c112 | |||
1c2fe9a481 | |||
dc2d8397ab | |||
926a06e53c | |||
7de621dc82 | |||
35bf2b930a | |||
307e4e8863 | |||
04569977d5 | |||
b11bd7b53b | |||
4f42050cf2 | |||
4b95f34430 | |||
e10933cc0e | |||
db4c3f23cd | |||
3ff443fcc8 | |||
3c302441ea | |||
250f12a69f | |||
cc15bff91b | |||
9b8828109c | |||
72e033e2ef | |||
08f96661fa | |||
7bfffe413c | |||
1425a641ae | |||
8ed88d1331 | |||
a99c08d0e7 | |||
c1191d803c | |||
844f1d3741 | |||
612753b39e | |||
cecccddc2e | |||
17073ed8cd | |||
efe14faae4 | |||
08aa68d257 | |||
2b9b19030f | |||
87b70ff7bc | |||
6776b87040 | |||
210ad7f767 | |||
3960e41534 | |||
32fc56754a | |||
082f553be4 | |||
bcb31dca0a | |||
a508fa1a0f | |||
dbf769a8cb | |||
f3825f3890 | |||
4125ada488 | |||
6a425d1880 | |||
173c89306f | |||
8c6e3bedfb | |||
db9a13d58d | |||
fa37238e00 | |||
2f10c2bb29 | |||
437686b1e6 | |||
53508009b9 | |||
49ff872b88 | |||
115688de03 | |||
346d0cd822 | |||
e51c29565e | |||
15f209844d | |||
86a50c7986 | |||
5d44198fef | |||
3ab31b8b16 | |||
4bbab19d14 | |||
d532c6117d | |||
63dc3ea208 | |||
82cb40e9bf | |||
ec0b072fca | |||
4718424d11 | |||
4300ce67e8 | |||
c58a8bb562 | |||
55859d669b | |||
e11e80832a | |||
e5f7e1e78f | |||
6893f5b487 | |||
d56ccaf436 | |||
1110bbe386 | |||
65290098e6 | |||
5fd314753b | |||
8dd98f2733 | |||
d33882848f | |||
0e174f870c | |||
6954e5c7a8 | |||
8de6a0ab07 | |||
d7cf897072 | |||
596d19d212 | |||
4e44fc204e | |||
277a535be4 | |||
1dbd6ebc4c | |||
bcf869586f | |||
6b5bc59775 | |||
17feb49b0a | |||
9625566913 | |||
b2a3308c2e | |||
89e5a195f8 | |||
e4c130f51f | |||
899c0f6796 | |||
fc1287a016 | |||
fd3ca21a0c | |||
789f8ddc3f | |||
bda40109ed | |||
8c44d3890d | |||
0e2b89dff1 | |||
7c46127738 | |||
d33b8da111 | |||
5d6c30f0bb | |||
7008c26545 | |||
b8597014dd | |||
0457bd307f | |||
eb446f8703 | |||
9df307365c | |||
fcd4fb63ed | |||
27713fb7b6 | |||
0db3ce5026 | |||
0f04c2c51a | |||
206be17615 | |||
2511c5b851 | |||
4db98b2c2b | |||
8d2d360180 | |||
7d7b509eb9 | |||
124ca1ba62 | |||
e9cd4a9f6c | |||
c627299a35 | |||
e0f183efa8 | |||
89395885ba | |||
a77309ab36 | |||
efd04f322c | |||
a12f90d432 | |||
5919da4930 | |||
2d291f1ce2 | |||
e299d2e83d | |||
76551e3d3f | |||
2f134bfbe4 | |||
c03c481b94 | |||
7d1fed76da | |||
7148172e9c | |||
5c102da3a0 | |||
f3a1c618e5 | |||
5c221f31d9 | |||
7ac42c0e4e | |||
4da3ee6aed | |||
3aecc56933 | |||
5ea124b7d2 | |||
7fb33a0d35 | |||
6d2878db5c | |||
9bee5057f1 | |||
bdce2ecad5 | |||
d3ee66ff60 | |||
647efead3b | |||
09f5d107c9 | |||
d33bc11a31 | |||
2d6066ad58 | |||
0bdd216ef0 | |||
75336e899d | |||
3870ca5335 | |||
5aaae853af | |||
a64cdca34e | |||
99f64adc05 | |||
05c24ab545 | |||
897d43ff51 | |||
46b9e3a039 | |||
018209bed5 | |||
fe14f97dfd | |||
f2b1d3cc1c | |||
0600b6e595 | |||
aab0b139d3 | |||
872c386929 | |||
23f57da28e | |||
7fbd29b75d | |||
b8fd5b5c1d | |||
c81f2cb46c | |||
6c859388c5 | |||
087b8ddc42 | |||
0eba059a8c | |||
7136ab215c | |||
3f867d8041 | |||
a8bb3652fe | |||
1672d95ae6 | |||
c3c832649c | |||
c115278016 | |||
a65653b30b | |||
d92f66720a | |||
0954398245 | |||
50da5ccc80 | |||
2b71438c82 | |||
1b5356e845 | |||
9c951dc2f1 | |||
117c35cc5a | |||
dbd46e2b4f | |||
a2c55a78fc | |||
c423b7331e | |||
a031f4da28 | |||
7573eed929 | |||
1e78638692 | |||
19ea512d79 | |||
b9155254d0 | |||
0ebe7e68c7 | |||
48340cb790 | |||
02b803fda7 | |||
4d306d5f85 | |||
388843a439 | |||
e03521821a | |||
ac77853485 | |||
ce664ebf8b | |||
93041cb1d4 | |||
d68fd5429e | |||
a7b4b9acc6 | |||
20841b7a4a | |||
e7f186b7f3 | |||
2a2adc6645 | |||
9989940693 | |||
f71f0e1470 | |||
3c7bd9acf6 | |||
1439358221 | |||
0895c3c976 | |||
8a6c6c2627 | |||
c3883bb069 | |||
4e5104ff52 | |||
ecf093119a | |||
cbd7a8dffb | |||
08cd5406f4 | |||
af2f63565f | |||
1b481dcf24 | |||
6ee5005944 | |||
b4b94ad38a | |||
aa4551fc14 | |||
9d77f57123 | |||
3115faedb2 | |||
4e7b0c115e | |||
c28c99060b | |||
d3a072c54b | |||
174a94f492 | |||
9f6806a738 | |||
809dc90bc8 | |||
c14faf5fc4 | |||
d9034fee31 | |||
c30180fcbf | |||
110a4bd484 | |||
06106c0b57 | |||
a006e3b688 | |||
d37911e5b1 | |||
b128693296 | |||
85d958a0cc | |||
ca1d5e6d8c | |||
245e50aaa9 | |||
4d0d5d245c | |||
f1d8554ab3 | |||
c76a33fa69 | |||
5a3e49c4dd | |||
2ad8d2ac8e | |||
d0c4fd7ca8 | |||
6b38f0d520 | |||
0105bb360a | |||
35d22a9638 | |||
2cce8c9a7a | |||
a525c3d920 | |||
8f090fd3e3 | |||
c36b24bad6 | |||
9b8fd8e6fc | |||
078f0952ef | |||
834331903e | |||
b112ad89f3 | |||
73f8295c9c | |||
c2da679543 | |||
ac46459a0d | |||
c663415ebc | |||
68f9360f40 | |||
e0436d1e43 | |||
a488294bb3 | |||
175345dfe4 | |||
78bb4f7366 | |||
29f485f4e2 | |||
b794aaf0e0 | |||
465d509bcc | |||
a4b25f0ae8 | |||
7feba2f15e | |||
2e72fb7f36 | |||
a225fa20b1 | |||
f87fe26811 | |||
d2b38a3f33 | |||
ef8a143eb0 | |||
e33d186ed0 | |||
0527c1f246 | |||
7ee570e375 | |||
c7182a27cf | |||
f972c9e2e6 | |||
29df785ab6 | |||
e3448c9b17 | |||
a3a8c77963 | |||
67dab8aaf7 | |||
7c2fc47933 | |||
0a3a2bedf8 | |||
38ab0630af | |||
d6be15ca4d | |||
77ec925d45 | |||
2bd6eac5af | |||
50673b6358 | |||
ee578e7b06 | |||
4025734680 | |||
2bbba38007 | |||
479b28f35f | |||
07a3340ffa | |||
69f289b0d9 | |||
308330c8a0 | |||
aac785dda8 | |||
6bd4cab290 | |||
816eb59c94 | |||
889a28063d | |||
a783a0ddb8 | |||
617122dfe1 | |||
e471ddd57a | |||
1999eb2432 | |||
a22eea0f66 | |||
62a1a85a8f | |||
00fbabded2 | |||
53a052382f | |||
66b970d22b | |||
2b5ce8cf27 | |||
408f63bdf9 | |||
1ce75177e9 | |||
0df770bc68 | |||
120de4af9e | |||
b557973e79 | |||
6b833622cf | |||
99baa56af3 | |||
95ac52b7ea | |||
e4696b2bad | |||
00226dfe4d | |||
c0ad846a3d | |||
9a0226674f | |||
5d5a4bc50f | |||
2976f10d92 | |||
9ac0fd128d | |||
4062cfa97c | |||
ff0d6e2ff2 | |||
9461bc1edb | |||
f06e936e10 | |||
f90f6059c3 | |||
f529cd3db0 | |||
a9a0a5202e | |||
67a871814e | |||
24d2f2fd9a | |||
c3a3a19751 | |||
37643b15b7 | |||
defbb68445 | |||
744c1c1b61 | |||
88e0f5c081 | |||
01eb01dc24 | |||
03dac6db84 | |||
535dd76c8e | |||
e211b1040c | |||
8533790aa3 | |||
09a271ba12 | |||
09337fa259 | |||
97a93db976 | |||
9c9b4b5404 | |||
9212075b08 | |||
0c95890d77 | |||
135190058a | |||
ff87fa0a78 | |||
ed1b2bcdd2 | |||
6b796c1715 | |||
cdfbd98612 | |||
8e471d84a1 | |||
db72661f57 | |||
5524b4b563 | |||
6488aeac56 | |||
91e6daa303 | |||
f56c3ca1bf | |||
8c5b402edf | |||
50eb754d19 | |||
ae41a90478 | |||
892a795c68 | |||
d2634bd130 | |||
6a482911b3 | |||
35f1320ef1 | |||
6a9729f898 | |||
a064857ff5 | |||
3fab712da7 | |||
d4542b8449 | |||
366fa10ce8 | |||
050a6dbbbc | |||
8bb3313f38 | |||
e7575018bc | |||
863b58913a | |||
6d581f37a9 | |||
8c152f27d8 | |||
07fdac2312 | |||
e467e6232a | |||
6e2a14af39 | |||
f23db925ad | |||
93bf69d0aa | |||
cd74c6aac2 | |||
240a8c12eb | |||
4888f0dd54 | |||
7c5aa40d26 | |||
d9fb751b7b | |||
a23983f686 | |||
561b4244d6 | |||
331f72ef67 | |||
bea47a0c5d | |||
232e6f72e7 | |||
1557694beb | |||
1824e0ddcc | |||
d6d0756a6b | |||
c08eff08db | |||
7664dcbd5b | |||
1e666ca7de | |||
56baffba77 | |||
529b39efe9 | |||
a826750254 | |||
cff2752b8f | |||
3daa866b10 | |||
e1e1a7a8e4 | |||
b76288e944 | |||
905f9aa974 | |||
57a2d2b891 | |||
7d060c495a | |||
e2c83d58da | |||
f5a73349fb | |||
f02148e159 | |||
e03a6640fb | |||
a4c37841ec | |||
b44f67011f | |||
a5765a5920 | |||
ae7c0947cf | |||
af9e46c983 | |||
eb39dfdb90 | |||
6b5ad92ea6 | |||
d60f26561a | |||
f36d0f2298 | |||
c796311c55 | |||
4ee42e9a1f | |||
33ce63db4e | |||
340d6cd83b | |||
560f6e4946 | |||
6445dd5d4c | |||
86fe700d9f | |||
d2d4031f2e | |||
e598b81600 | |||
7f9f55fbac | |||
a707f2830b | |||
0f95825828 | |||
c764008170 | |||
dc43492537 | |||
e87a4efe2f | |||
95cfab5e71 | |||
ab1ad92278 | |||
f2afa866f9 | |||
de53a1fbc9 | |||
97f078721b | |||
52f295396c | |||
ade9804ae6 | |||
7fb9cb8290 | |||
3d262db251 | |||
d093f81e46 | |||
1c2af589fd | |||
daa289bed1 | |||
40ad4cd488 | |||
d9931f519d | |||
78a5d59ef3 | |||
c4be1543ce | |||
2652d75346 | |||
72621a20c9 | |||
960f480d3a | |||
d8f7d8bfb2 | |||
4b0fdf6932 | |||
739e517c3f | |||
0af131b043 | |||
b780f79e30 | |||
6fcaf3761c | |||
9bf0f45ad0 | |||
d23ac867a4 | |||
3195fd1cb3 | |||
76fd98c346 | |||
f3bdebead6 | |||
d735db129a | |||
903c58d7ce | |||
96d51bbc4d | |||
35050ae5c9 | |||
2fa58dc2c2 | |||
f307561705 | |||
d313cd89e6 | |||
13174f7164 | |||
668c7c4896 | |||
8724648d53 | |||
707aaf0bd0 | |||
bb055ce55c | |||
5bf930102c | |||
554b0e251d | |||
9a84bb2ae1 | |||
ce6bcecff9 | |||
d6fd4e971e | |||
f399f8d691 | |||
5acebd19fe | |||
80db993ca7 | |||
9d59cd074c | |||
e86ef43058 | |||
b928c41d22 | |||
1cc96558d5 | |||
7371f835de | |||
e9010555a1 | |||
ee2f9f7471 | |||
8c1e166007 | |||
030ec907f4 | |||
e9bd3ed60e | |||
e156962b24 | |||
aa6b5489f7 | |||
1adec9c83b | |||
e21db2b740 | |||
5ff0f41988 | |||
302db49850 | |||
b11459eeba | |||
1ae332a85d | |||
653a162643 | |||
cf3d58920a | |||
1431272618 | |||
3c0fb794d9 | |||
5135d07fa4 | |||
c1aa31bdfb | |||
79b2197dc0 | |||
ec7e057b6d | |||
d6a69e237e | |||
cc48d56682 | |||
831d263449 | |||
7ae9575ed2 | |||
215a9ab160 | |||
5fac243e70 | |||
6b3c11322e | |||
422eacd53d | |||
947ad0014c | |||
b91f08fa01 | |||
2227955eee | |||
fddefc9275 | |||
352df69d51 | |||
82917aaaab | |||
75fbcbaecf | |||
45c0fff636 | |||
cc846c3abe | |||
a131fa6600 | |||
40bd121a77 | |||
e4d317c76d | |||
22a0ef14b6 | |||
f26c8116e8 | |||
0a03d90696 | |||
3d7788632e | |||
6df3e8b845 | |||
39fed9ec83 | |||
e2cc37c3e3 | |||
b17bcbaa07 | |||
8bdb64c39b | |||
ff880b25ef | |||
c341d47b27 | |||
8212edca98 | |||
bdabe0e19a | |||
37cbc5cfd9 | |||
015af37a59 | |||
38ad423353 | |||
b64614ea45 | |||
c7277b944a | |||
27e8723753 | |||
bdce1fc8a3 | |||
cf6a89a731 | |||
e929c8fb18 | |||
4e051a8111 | |||
e5385f4017 | |||
146bb6f876 | |||
3698843c0f | |||
24fb21ea2c | |||
44d09a1b37 | |||
64fe831e0c | |||
0bc9825a46 | |||
4c7f3bd029 | |||
be58442eed | |||
aafcce644e | |||
24c76dd897 | |||
38171179df | |||
808b895951 | |||
540b0990eb | |||
f5e3b128f3 | |||
0d12ee1240 | |||
d26032595e | |||
80c66d7c23 | |||
5785c5836b | |||
1c52df1713 | |||
591c3bff98 | |||
28f09ac7d4 | |||
6a059521f0 | |||
7164b7f428 | |||
471e8f4b25 | |||
84eb1ded73 | |||
db3429d0e0 | |||
ed4439ef4d | |||
63b8bf29e8 | |||
7a09d652d1 | |||
2ebb389900 | |||
2e50916897 | |||
b40e327508 | |||
b9534b2a2a | |||
c022088190 | |||
f5db9e18b5 | |||
87cc21dcf1 | |||
d0af45125e | |||
39b66e85ce | |||
b4072d4813 | |||
525cd894f5 | |||
b8dfe7f96d | |||
289c78108d | |||
fb9fb7844e | |||
10e32012f9 | |||
1218c1545c | |||
a3be21648b | |||
7694ea3e58 | |||
c6a12fc336 | |||
f50b0a9da1 | |||
e9554c7924 | |||
424e0dfb35 | |||
fec9052413 | |||
cc85ef3d0b | |||
35fbaa377c | |||
ee941ea7a1 | |||
2005a2db4d | |||
31cd0b9bd1 | |||
e8fc716b21 | |||
bb33c8dcd9 | |||
ff88ec13ba | |||
62f1850144 | |||
0e4a732c76 | |||
7d4b9d051f | |||
b3d883f7fa | |||
7c51fd6848 | |||
02e28eb59f | |||
737237c836 | |||
3d343e7949 | |||
278f612aa4 | |||
b858cccb59 | |||
6d535e6699 | |||
af193ec09b | |||
e5d84be0db | |||
e330c4bf22 | |||
b5191bc663 | |||
9dc72d2c70 | |||
19758eab8e | |||
fb2726b0b0 | |||
11438e3649 | |||
b03534c339 | |||
f6ac9b910a | |||
ed765834fe | |||
459075ca7f | |||
47da9495fe | |||
b51733ff2f | |||
df463fd6d0 | |||
d50d9a5318 | |||
3b7b748e71 | |||
d77b61e939 | |||
fbba5d461b | |||
0fc434b6d7 | |||
57be687166 | |||
9880a54337 | |||
08629cb759 | |||
4fe2c5c08d | |||
f9ee3ae653 | |||
ab26312aa0 | |||
a1687cb50d | |||
76d6008daa | |||
05e93e53dd | |||
1509a65bee | |||
ab6a498fb7 | |||
bf50d5049d |
22
.tx/config
Normal 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
@ -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
@ -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/>
|
||||
– see the section “Concept” of the Manual –<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 …</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 – 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 …
|
||||
<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, …) 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 –therefore it is referred to as a
|
||||
“destination” or short “dest” – 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 – in the highly unlikely case it should be necessary – 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 …</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 ‧ 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 “Know” column
|
||||
or by putting “{UNK}” 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 “Know” has a green
|
||||
check.
|
||||
</p>
|
||||
<div class="date"></div>
|
||||
|
||||
<p>
|
||||
<strong>What do “BktPfx”, “Distance” and “Locked?” mean?</strong><br/>
|
||||
• BktPfx = BucketPrefix<br>
|
||||
• Distance: the distance of an I2P-Bote node to your own node in keyspace<br>
|
||||
• 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,
|
||||
…)</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 “Re:” 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 – 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
|
||||
“Send” 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/>
|
||||
• I2P was lacking a decentralized e-mail service and HungryHobo is an I2P user.<br/>
|
||||
• I2P offers very good anonymity, is mature and incorporates years of
|
||||
experience.<br>
|
||||
• So being on top of it, kind of represents an anonymity fall-back even if there were some
|
||||
crucial bugs in I2P-Bote.<br/>
|
||||
• 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/>
|
||||
• I2P with it the many other apps running on top of it creates a lot of traffic that blends with
|
||||
I2P-Bote traffic.<br/>
|
||||
• 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 –
|
||||
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 – if enabled –
|
||||
I2P-Bote mails <i>paranoidly</i> anonymous.
|
||||
</p>
|
||||
<div class="date"></div>
|
||||
|
||||
<p>
|
||||
<strong>Is I2P-Bote open source?</strong><br/>
|
||||
Of course!<br/>“ <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>” <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/>
|
||||
• Use I2P-Bote and give feedback<br/><br/>
|
||||
• Tell your friends, family, collegues et al. about I2P-Bote and lend them a hand<br/><br/>
|
||||
• Mention I2P-Bote on your blog, eepsite or website<br/><br/>
|
||||
• Write a user's guide or improve the technical documentation<br/><br/>
|
||||
• 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 & 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
@ -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…</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é… 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… <i>pour nous</i> (et peut-être pour vous, aussi;
|
||||
décidez vous-même!), que…</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…) 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… 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… 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…</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 “[UNK]” 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…). 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>
|
||||
• BktPfx = BucketPrefix (préfixe de paquet)<br>
|
||||
• Distance: la distance d'un nœud I2P-Bote au votre propre dans l'espace de clés.
|
||||
<br>
|
||||
• 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, …)</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>
|
||||
• I2P manquait d'une messagerie décentralisée et HungryHobo est un utilisateur
|
||||
d'I2P.<br>
|
||||
• I2P offre un excellent anonymat, il est bien au point et bénéficie de
|
||||
nombreuses années d'expérience.<br>
|
||||
• Donc, en faire ses fondations représente une assurance d'anonymat s'il y avait
|
||||
des bogues critiques dans I2P-Bote.<br>
|
||||
• Souplesse: nous voulons aussi offrir une méthode de communication à faible
|
||||
latence, tout en gardant un haut niveau de protection.<br>
|
||||
• 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>
|
||||
• 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>
|
||||
• Utilisez I2P-Bote et faites part de vos commentaires/<br><br>
|
||||
• Parlez d'I2P-Bote à vos amis, à votre famille et à vos collègues, et aidez-les.
|
||||
<br><br>
|
||||
• Mentionnez I2P-Bote sur votre blog, votre eepsite et votre web.<br><br>
|
||||
• Rédigez un guide utilisateur ou améliorez la documentation technique.<br><br>
|
||||
• 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 & 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>
|
879
WebContent/User's Guide.html
Normal 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 – 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 – 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
|
||||
“Plugin Installation Download Url” line, then hit “Install
|
||||
Plugin”. 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 “New Identity” 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 “sender's name”
|
||||
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 – anyone could call himself HungryHobo
|
||||
there – 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 “Know” 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
|
||||
– 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 – 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 “From” and enter the recipient's e-mail
|
||||
destination key or alternatively an address in the “To:” line.</font></p>
|
||||
<p style="line-height: 150%;"><font face="Arial, sans-serif">Alternatively,
|
||||
you can hit the “Addr. Book” 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 “Add Recipients” 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 “+”
|
||||
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
|
||||
“Send” 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 “Anonymous” in the
|
||||
scroll-down menu “From:”.</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
|
||||
“<span style="font-style: normal;">Inbox”</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 “Sig”, 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 (“Anonymous” 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 –
|
||||
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 (“Loc” 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 “Check for mail every XX minutes“ 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) – then a random
|
||||
wait time between the two values will be chosen for the packet at
|
||||
that hop – 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
|
||||
“<i>mínimo en el bote</i>” (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 “settings”. </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, …, copies of your passport,
|
||||
driver's license, home rental contract, photos – nude or with
|
||||
clothes –, 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 “Re: [subject of the
|
||||
mail you're replying to]” or “[username] wrote:”. 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 “Use English for text added to outgoing
|
||||
email ('Re:', 'wrote:', etc.) “</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%;"> <font face="Arial, sans-serif">- the
|
||||
fact that you run I2P-Bote</font></p>
|
||||
<p style="line-height: 150%;"> <font face="Arial, sans-serif">- the
|
||||
fact that you send a mail</font></p>
|
||||
<p style="line-height: 150%;"> <font face="Arial, sans-serif">- the
|
||||
fact that you receive a mail</font></p>
|
||||
<p style="line-height: 150%;"> <font face="Arial, sans-serif">and
|
||||
hence</font></p>
|
||||
<p style="line-height: 150%;"> <font face="Arial, sans-serif">- the
|
||||
time you send a mail</font></p>
|
||||
<p style="line-height: 150%;"> <font face="Arial, sans-serif">- the
|
||||
time you receive a mail</font></p>
|
||||
<p style="line-height: 150%;"> <font face="Arial, sans-serif">and</font></p>
|
||||
<p style="line-height: 150%;"> <font face="Arial, sans-serif">- the
|
||||
upper limit of number of mails an unknown user receives, - nota bene:
|
||||
an abstract <br> user, no concrete one, just concluding its
|
||||
existence from the existence of the mail identity<br> - as he
|
||||
could always have more than one e-mail identity; and the lower limit
|
||||
as an <br> 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 “To:” or “CC:”. </font>
|
||||
</p>
|
||||
<p style="line-height: 150%;"><font face="Arial, sans-serif">All
|
||||
entries that were under “BCC:” 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 <--> 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 – 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. Credits</font></p>
|
||||
<p style="line-height: 150%;">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</p><p style="line-height: 150%;"><font face="Arial, sans-serif">Idea &
|
||||
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>
|
862
WebContent/User's Guide_fr.html
Normal 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 « direct » 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 « …, URL de téléchargement : », puis
|
||||
cliquez sur le bouton « Installer le greffon ». 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 « Mise
|
||||
à jour »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 « Réseau : OK »,
|
||||
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 « Identités » sur la gauche, puis sur le bouton
|
||||
« Nouvelle identité ».</FONT></P>
|
||||
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Entrez au
|
||||
moins un « Nom public » et cliquez sur « Créer ».
|
||||
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 « nom d'expéditeur ». 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 « Connu » 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 « Destination de messagerie ». 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 « Nouveau », choisissez
|
||||
votre identité d'expéditeur ou « Anonyme » dans le
|
||||
champ « De : » et entrez la destination du
|
||||
destinataire dans le champ « À : », ou une adresse
|
||||
mail.</FONT></P>
|
||||
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">(Vous
|
||||
pouvez aussi cliquer sur le bouton « Carnet d'adresses »
|
||||
tout proche de ce champ, pour choisir une destination stockée
|
||||
localement dans votre carnet d'adresses : cochez le/les
|
||||
utilisateur(s) destinataires et cliquez sur le bouton “Ajouter les
|
||||
destinataires »)</FONT></P>
|
||||
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Vous
|
||||
pouvez ajouter plusieurs destinataires et changer l'attribut « À : »
|
||||
pour « Cc: » ou « Cci: ».</FONT></P>
|
||||
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Le bouton
|
||||
« + » 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 « Envoyer »pour...
|
||||
l'envoyer, ou « Enregistrer » pour le sauvegarder dans
|
||||
votre dossier « Brouillons » 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 « Boîte d'envoi »
|
||||
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 « Courriers
|
||||
envoyés ». 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 « Anonyme », c'est à dire sans
|
||||
choisir d'identité d'expéditeur) : 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 « Relever le courrier ».
|
||||
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 « Boîte de réception » pour visualiser la liste des
|
||||
messages reçus. Vous y voyez deux colonnes peuplées de « x »
|
||||
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 « Connu » <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 ; 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 « Sig », 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 « x ».</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 : 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) : 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 « Connu »,
|
||||
alors qu'un message d'un autre expéditeur de même nom serait marqué
|
||||
d'un « x » (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 « Relever le courrier toutes les
|
||||
XX minutes : » 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
|
||||
« </FONT><FONT FACE="Arial, sans-serif"><I>Minimum dans la
|
||||
messagerie</I></FONT> <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 : 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 « Préférences ».
|
||||
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 : 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, « Rép: [Top
|
||||
secret] » ou « [mégaphone] a écrit : » 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 : Cochez la
|
||||
case « Utiliser l'anglais pour les titres d'en-têtes de
|
||||
messages sortants ('Re', 'wrote', etc.) ».</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 « je vais me coucher, il est tard »,
|
||||
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 « super-nœuds »
|
||||
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 :</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%"> <FONT FACE="Arial, sans-serif">-
|
||||
le fait que vous utilisez... I2P-Bote</FONT></P>
|
||||
<P STYLE="line-height: 150%"> <FONT FACE="Arial, sans-serif">-
|
||||
le fait que vous envoyez un message</FONT></P>
|
||||
<P STYLE="line-height: 150%"> <FONT FACE="Arial, sans-serif">-
|
||||
le fait que vous recevez un message</FONT></P>
|
||||
<P STYLE="line-height: 150%"> <FONT FACE="Arial, sans-serif">et
|
||||
donc</FONT></P>
|
||||
<P STYLE="line-height: 150%"> <FONT FACE="Arial, sans-serif">-
|
||||
le moment d'envoi d'un message</FONT></P>
|
||||
<P STYLE="line-height: 150%"> <FONT FACE="Arial, sans-serif">-
|
||||
le moment de réception d'un message</FONT></P>
|
||||
<P STYLE="line-height: 150%"> <FONT FACE="Arial, sans-serif">ainsi
|
||||
que</FONT></P>
|
||||
<P STYLE="line-height: 150%"> <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> - 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/« bidons »</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 « A :» OU
|
||||
« Cc : ».</FONT></P>
|
||||
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Toutes
|
||||
les entrées « Cci : » 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 : une destination e-mail. C'est donc pour I2P-Bote ce
|
||||
qu'est une adresse e-mail pour un système de messagerie standard :
|
||||
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 : </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 : 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 :</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 « Anonyme » 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>] ;
|
||||
</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.
|
||||
Remerciements</B></I></FONT></P>
|
||||
<P STYLE="line-height: 150%"><FONT FACE="Arial, sans-serif">Idée &
|
||||
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 :
|
||||
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>
|
BIN
WebContent/WEB-INF/lib/bcprov-ecc-jdk16-146.jar
Normal file
2
WebContent/WEB-INF/lib/decrypt.bat
Executable 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 %*
|
2
WebContent/WEB-INF/lib/decrypt.sh
Executable 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 $@
|
2
WebContent/WEB-INF/lib/encrypt.bat
Executable 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 %*
|
2
WebContent/WEB-INF/lib/encrypt.sh
Executable 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 $@
|
2
WebContent/WEB-INF/lib/fileinfo.bat
Executable 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 %*
|
2
WebContent/WEB-INF/lib/fileinfo.sh
Executable file
@ -0,0 +1,2 @@
|
||||
#!/bin/sh
|
||||
java -cp $I2P/lib/i2p.jar:`dirname $0`/i2pbote.jar i2p.bote.fileencryption.FileInfo $@
|
BIN
WebContent/WEB-INF/lib/flexi-gmss-1.7p1.jar
Normal file
BIN
WebContent/WEB-INF/lib/lzma-9.20.jar
Normal file
BIN
WebContent/WEB-INF/lib/mailapi.jar
Normal file
BIN
WebContent/WEB-INF/lib/ntruenc-1.2.jar
Normal file
BIN
WebContent/WEB-INF/lib/scrypt-1.4.0.jar
Normal file
74
WebContent/WEB-INF/tags/address.tag
Normal 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} <"/>
|
||||
</c:if>
|
||||
<c:set var="shortAdr" value="${shortAdr}${fn:substring(emailDestination, 0, 10)}..."/>
|
||||
<c:if test="${!empty name}">
|
||||
<c:set var="shortAdr" value="${shortAdr}>"/>
|
||||
</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=" disabled" title="The Email Destination already exists in the address book."' : ''}"/>
|
||||
<br/>
|
||||
<button type="submit"${disabled}><ib:message key="Add to Address Book"/></button>
|
||||
</c:if>
|
||||
</ib:expandable>
|
||||
</c:if>
|
||||
</form>
|
||||
</div>
|
65
WebContent/WEB-INF/tags/copyParams.tag
Normal 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>
|
@ -1,2 +0,0 @@
|
||||
<%@ attribute name="index" required="true" description="0-based index of the email identity" %>
|
||||
test
|
72
WebContent/WEB-INF/tags/expandable.tag
Normal 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>
|
59
WebContent/WEB-INF/tags/folderLink.tag
Normal 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>
|
48
WebContent/WEB-INF/tags/printDate.tag
Normal 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)}
|
@ -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" %>
|
||||
|
||||
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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&recipientType0=to&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
@ -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)} <${contact.destination}>"/>
|
||||
</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}&createNew=false&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"/>
|
@ -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="disabled""/>
|
||||
</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>
|
||||
|
@ -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>
|
33
WebContent/clearPasswordCache.jsp
Normal 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
@ -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>
|
38
WebContent/connectError.jsp
Normal 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
@ -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"/>
|
@ -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>
|
37
WebContent/deleteEmail.jsp
Normal 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>
|
@ -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
@ -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"/>
|
@ -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}">
|
||||
<br/> <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}"> </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}">
|
||||
<b>${localeCode}</b>: ${ib:getIdentityFingerprint(identity, localeCode)}<br/>
|
||||
</c:if>
|
||||
</c:forEach>
|
||||
</ib:expandable>
|
||||
</c:if>
|
||||
</div>
|
||||
<c:if test="${empty fingerprint}">
|
||||
|
||||
</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"/>
|
@ -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}&sortcolumn=${param.sortcolumn}&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="▴"/>
|
||||
<c:set var="reverseSortOrder" value="&descending=true"/>
|
||||
</c:if>
|
||||
<c:if test="${descending}">
|
||||
<c:set var="sortIndicator" value="▾"/>
|
||||
<c:set var="reverseSortOrder" value="&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}&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}&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}&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}&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}&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'>✔</div>"/>
|
||||
</c:if>
|
||||
|
||||
<c:if test="${isSentFolder}">
|
||||
<c:set var="delivered" value="<div class='deliveryComplete'>✔</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}&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}">⤶</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}&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
@ -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
@ -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"/>
|
@ -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>
|
@ -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: '...';
|
||||
}
|
@ -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}&createNew=false&key=${identity.key}&cryptoImpl=${identity.cryptoImpl}&publicName=${ib:escapeQuotes(identity.publicName)}&description=${ib:escapeQuotes(identity.description)}&emailAddress=${ib:escapeQuotes(identity.emailAddress)}&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"/>
|
||||
|
60
WebContent/identitiesHelp.jsp
Normal 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>
|
Before Width: | Height: | Size: 298 B |
Before Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 852 B |
Before Width: | Height: | Size: 780 B |
Before Width: | Height: | Size: 234 B |
Before Width: | Height: | Size: 564 B |
Before Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 794 B |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 227 B |
Before Width: | Height: | Size: 803 B |
Before Width: | Height: | Size: 1.3 KiB |
104
WebContent/importContact.jsp
Normal 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 "{0}" 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 "import" 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}">
|
||||
<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
@ -0,0 +1,7 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="refresh" content="0;url=index.jsp" />
|
||||
</head>
|
||||
<body>
|
||||
</body>
|
||||
</html>
|
@ -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"/>
|
@ -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
@ -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"/>
|
@ -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">➔ <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} <${identity.key}>"${selected}>
|
||||
${identity.publicName} <${fn:substring(identity.key, 0, 10)}...>
|
||||
<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">➔<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"/>
|
||||
|
@ -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
@ -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}&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="▴"/>
|
||||
<c:set var="reverseSortOrder" value="&descending=true"/>
|
||||
</c:if>
|
||||
<c:if test="${descending}">
|
||||
<c:set var="sortIndicator" value="▾"/>
|
||||
<c:set var="reverseSortOrder" value="&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&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&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
@ -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"/>
|
95
WebContent/publishDestination.jsp
Normal 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}&new=false&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"/>
|
41
WebContent/saveIdentities.jsp
Normal 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>
|
@ -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"/>
|
91
WebContent/setPassword.jsp
Normal 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
@ -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"/>
|
@ -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="disabled"' : ''}"/>
|
||||
<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"/>
|
55
WebContent/showFullIdentity.jsp
Normal 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"/>
|
@ -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>
|
||||
|
131
WebContent/submitIdentity.jsp
Normal 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}&createNew=${param.createNew}&cryptoImpl=${param.cryptoImpl}&vanityPrefix=${param.vanityPrefix}&publicName=${ib:urlEncode(ib:urlEncode(param.publicName))}&description=${param.description}&emailAddress=${param.emailAddress}&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&"/>
|
||||
</c:if>
|
||||
<c:set var="forwardUrl" value="submitIdentity.jsp?${actionParam}counter=${param.counter}&createNew=${param.createNew}&cryptoImpl=${param.cryptoImpl}&vanityPrefix=${param.vanityPrefix}&publicName=${param.publicName}&description=${param.description}&emailAddress=${param.emailAddress}&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>
|
809
WebContent/themes/lblue/i2pbote.css
Normal 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;
|
||||
}
|
BIN
WebContent/themes/lblue/images/addressbook.gif
Normal file
After Width: | Height: | Size: 209 B |
BIN
WebContent/themes/lblue/images/background-alt.png
Normal file
After Width: | Height: | Size: 956 B |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
BIN
WebContent/themes/lblue/images/clear_password.png
Normal file
After Width: | Height: | Size: 633 B |
BIN
WebContent/themes/lblue/images/connect_error.png
Normal file
After Width: | Height: | Size: 412 B |
BIN
WebContent/themes/lblue/images/connected.png
Normal file
After Width: | Height: | Size: 393 B |
BIN
WebContent/themes/lblue/images/connecting.png
Normal file
After Width: | Height: | Size: 396 B |
BIN
WebContent/themes/lblue/images/default.png
Normal file
After Width: | Height: | Size: 544 B |
Before Width: | Height: | Size: 475 B After Width: | Height: | Size: 475 B |
Before Width: | Height: | Size: 478 B After Width: | Height: | Size: 478 B |
Before Width: | Height: | Size: 600 B After Width: | Height: | Size: 600 B |
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
BIN
WebContent/themes/lblue/images/warning.png
Normal file
After Width: | Height: | Size: 435 B |
793
WebContent/themes/vanilla/i2pbote.css
Normal 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;
|
||||
}
|
BIN
WebContent/themes/vanilla/images/addressbook.gif
Normal file
After Width: | Height: | Size: 209 B |
BIN
WebContent/themes/vanilla/images/background-alt.png
Normal file
After Width: | Height: | Size: 112 B |