Compare commits
621 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
43729833a5 | ||
|
b05aeea342 | ||
|
137c8c7c24 | ||
|
853be194d9 | ||
|
8b36a719c3 | ||
|
8165416c5d | ||
|
b375d81635 | ||
|
e56f8c2c28 | ||
|
ad3691fae9 | ||
|
e0663ab8d8 | ||
|
263b5c13b0 | ||
|
8636ba201b | ||
|
aa24881efc | ||
|
b7b5c1bdf5 | ||
|
59d38f9b14 | ||
|
c44984b2f3 | ||
|
c31c320e83 | ||
|
7f49e691db | ||
|
a346f1612e | ||
|
6b0b71d4ff | ||
|
4683583a0a | ||
|
b038ac2c16 | ||
|
f32863dc54 | ||
|
39d19df187 | ||
|
9bf8c758ec | ||
|
76f770a12b | ||
|
3af376b419 | ||
|
e9a8702b39 | ||
|
25b9141a5f | ||
|
1d0efc02a2 | ||
|
c3362c193d | ||
|
7f0235c9b2 | ||
|
8e0dfacd51 | ||
|
467d001483 | ||
|
e7fb3bcf6d | ||
|
ce740b2109 | ||
|
0bfaba3bd9 | ||
|
e7cbf9ed86 | ||
|
c76a392abf | ||
|
ca8c2d9a4f | ||
|
f287c4cddf | ||
|
59006a98d7 | ||
|
73fcfba2a9 | ||
|
b473d2b7fe | ||
|
4519ab65c6 | ||
|
19bdf0aa49 | ||
|
b8f21ac7eb | ||
|
ff2a7c3e4a | ||
|
7834f79045 | ||
|
b35d993ff1 | ||
|
4e0388b349 | ||
|
add1cd3919 | ||
|
d87449c57f | ||
|
4cf1ef3107 | ||
|
e5e1c118be | ||
|
8e03b6a2ff | ||
|
6963ea33e9 | ||
|
0074e0ca90 | ||
|
9f5daa12b1 | ||
|
44591cc099 | ||
|
ecf16b028b | ||
|
bcaef5c330 | ||
|
9454739818 | ||
|
991f61d271 | ||
|
f62257a595 | ||
|
4f1ead0394 | ||
|
bd910df187 | ||
|
504e8ffd50 | ||
|
7c1d68ec6e | ||
|
4293031f1f | ||
|
44dac729aa | ||
|
55add6a6d3 | ||
|
d36ddcef7f | ||
|
94188be7b3 | ||
|
215a53e2a9 | ||
|
168eaf0086 | ||
|
9f39b67812 | ||
|
7540ffcab5 | ||
|
15ff8c85db | ||
|
4efab0daf0 | ||
|
701eb36b19 | ||
|
b687986980 | ||
|
281e53a887 | ||
|
6216fe2f1a | ||
|
2aa166ac19 | ||
|
4a681a73d2 | ||
|
56bd5222d2 | ||
|
1032a1eb06 | ||
|
e6d109d42d | ||
|
0dc04e659f | ||
|
c8779caef2 | ||
|
898e19e3ea | ||
|
246d19b76e | ||
|
55406cf7e8 | ||
|
b5c917f95a | ||
|
a0378cc0b9 | ||
|
8b42f83b35 | ||
|
9f94467ad1 | ||
|
321b6a9710 | ||
|
cf85fbd2ee | ||
|
9518cb69fa | ||
|
ec7e8cbd68 | ||
|
d0f002bfd1 | ||
|
9841a59a9e | ||
|
1ffcaf5487 | ||
|
150a3c7888 | ||
|
1af3eac566 | ||
|
e437a95baa | ||
|
2828771c2b | ||
|
2148d06d49 | ||
|
dca2f4ead9 | ||
|
8807830122 | ||
|
69ed386765 | ||
|
e6147e1fdc | ||
|
1d64c2dfb0 | ||
|
e5f281c124 | ||
|
06d772159b | ||
|
ff72822e36 | ||
|
09ff51f329 | ||
|
a2442554ad | ||
|
153d0626d2 | ||
|
222b7d35e3 | ||
|
07e0f39b55 | ||
|
73febe287e | ||
|
abbd893438 | ||
|
d67e0531d5 | ||
|
210ab61ba1 | ||
|
b752269c68 | ||
|
d8fb06cb08 | ||
|
88e83b6511 | ||
|
1b8c6b6b8d | ||
|
8295806b1f | ||
|
c30fbe8b6b | ||
|
5a8d7d8324 | ||
|
c9981239c8 | ||
|
c8f13511c1 | ||
|
f41e6e12b9 | ||
|
809de91354 | ||
|
220b8af509 | ||
|
1d57b004d1 | ||
|
518ceec0ef | ||
|
1d4a9414bb | ||
|
0304bbf8fe | ||
|
6ceb877472 | ||
|
1806f78ef3 | ||
|
881b05df91 | ||
|
369ad58134 | ||
|
5f19bbeff0 | ||
|
1c361e9c85 | ||
|
888204e1b9 | ||
|
427dee8214 | ||
|
e089139474 | ||
|
6873fd7f3d | ||
|
9bc2bc7912 | ||
|
9aebecd45f | ||
|
9d68b6475c | ||
|
2c1e1f669e | ||
|
91693c62ad | ||
|
93dc53f7b7 | ||
|
59dc2008a4 | ||
|
10cd2795f3 | ||
|
9c6d618ddc | ||
|
163ad5db79 | ||
|
54d495d8d9 | ||
|
0faa5b3743 | ||
|
2e3e07aa1d | ||
|
3da5a55251 | ||
|
f28c7854c3 | ||
|
57918bbd67 | ||
|
c26a51f83d | ||
|
6938750803 | ||
|
c94c419b38 | ||
|
5e246ee921 | ||
|
443cc3b59b | ||
|
da639b5a69 | ||
|
0d17701ebd | ||
|
5bf0890c02 | ||
|
f8e5ea6d89 | ||
|
7ffb7ca148 | ||
|
5121347640 | ||
|
2c092b0240 | ||
|
2875228359 | ||
|
274c23ea4c | ||
|
4fe3ceaea2 | ||
|
ff587672d9 | ||
|
fef264248d | ||
|
9a9b0d4cea | ||
|
c93eaf17f3 | ||
|
038437595e | ||
|
0446f8219b | ||
|
86653e8700 | ||
|
900294a13d | ||
|
990950bc48 | ||
|
978822ae55 | ||
|
75a382190a | ||
|
6ad3b7402e | ||
|
6a525ae643 | ||
|
55ab661582 | ||
|
7c9e8e6a4e | ||
|
295c781b62 | ||
|
b7072648b7 | ||
|
753cd1a4d7 | ||
|
281f4a94cd | ||
|
c271dc91dc | ||
|
fc6b21e63a | ||
|
2be7beb3a1 | ||
|
d3b54187cb | ||
|
c165ced523 | ||
|
d7a4058644 | ||
|
7d266e6a79 | ||
|
a07ee38fdb | ||
|
c660883a24 | ||
|
8ce33f9573 | ||
|
9d420f3cdc | ||
|
802f9619cf | ||
|
242d067141 | ||
|
b3942d9dce | ||
|
b68bebaf12 | ||
|
fb0454142c | ||
|
d41ed34837 | ||
|
66cf02bcb3 | ||
|
f1ba11abc3 | ||
|
b3afa745c3 | ||
|
c7195db4ca | ||
|
873f4ea1c9 | ||
|
e3643717fe | ||
|
ab18cdd5f8 | ||
|
087d4e66d5 | ||
|
e01b1ac965 | ||
|
00914cb3be | ||
|
8412973c38 | ||
|
b62c551b8b | ||
|
b0476989fb | ||
|
dc02cb1da4 | ||
|
bb206bc700 | ||
|
1378c7b069 | ||
|
137c6fe971 | ||
|
6dc6442b9d | ||
|
8dbdb030db | ||
|
95ce49279d | ||
|
36b0096973 | ||
|
bd327db4e8 | ||
|
6dffba9ff3 | ||
|
37fb3f5f8d | ||
|
b44d0a222a | ||
|
3cc0a372e1 | ||
|
6a9603cb69 | ||
|
cddc0988b7 | ||
|
b01aa6716c | ||
|
6a8c24d813 | ||
|
383761e6cb | ||
|
6beddf4760 | ||
|
eab07041f0 | ||
|
085b104521 | ||
|
ea74f3443c | ||
|
bfe827e084 | ||
|
c5a8e1c119 | ||
|
e5c602cee0 | ||
|
2af599c0ad | ||
|
993ca8eac7 | ||
|
bc41486693 | ||
|
e32456c3db | ||
|
a80169ebe2 | ||
|
26553e49d7 | ||
|
15b902acf6 | ||
|
cc886ad402 | ||
|
7bb69c76b6 | ||
|
88a48ec540 | ||
|
f4fe1a36a6 | ||
|
dab09f1068 | ||
|
cb1c4fd0ed | ||
|
a58448483a | ||
|
3944b1741e | ||
|
fb89ffd35a | ||
|
67adf4a1b8 | ||
|
7aa0d2cf4a | ||
|
502c6b7467 | ||
|
01e0529854 | ||
|
f9f086d622 | ||
|
99c2f24d7d | ||
|
ce07f30252 | ||
|
7b698e52b0 | ||
|
3ec4ad46e5 | ||
|
b5380bbef3 | ||
|
10c3748249 | ||
|
1979903943 | ||
|
a5c6400601 | ||
|
67384695f1 | ||
|
ad9990a0ce | ||
|
67a9c07f7a | ||
|
276a82e5ef | ||
|
c3efeb1132 | ||
|
8c88f25875 | ||
|
738d2671f7 | ||
|
3cd0bcc513 | ||
|
6eeba1ad2f | ||
|
fdb94e4e20 | ||
|
0b53886889 | ||
|
8340584de9 | ||
|
30c2c19652 | ||
|
420bcbcaa8 | ||
|
17c082e21b | ||
|
e00f2ecb3d | ||
|
6f794ff26d | ||
|
2272f3d58f | ||
|
dcfcd74373 | ||
|
f735430c68 | ||
|
68d464483e | ||
|
43eb385a14 | ||
|
df9ba7fd66 | ||
|
33b30221f7 | ||
|
eb4bc13e3f | ||
|
175b97f7a2 | ||
|
4622ebd8d9 | ||
|
95cbe0ea11 | ||
|
987ddbd796 | ||
|
7752675ec3 | ||
|
170b01d5f1 | ||
|
ee313d3765 | ||
|
c012f54c89 | ||
|
e06fff4385 | ||
|
fee1151952 | ||
|
5e29c707e0 | ||
|
5ac7955721 | ||
|
b5e305534e | ||
|
f0f215ad5b | ||
|
7d3e6b0f2f | ||
|
9d8fc023ca | ||
|
6a17c5a77f | ||
|
46acefd3bc | ||
|
dafe584d48 | ||
|
2a6d4e0d9b | ||
|
97f1132023 | ||
|
c3b3efa696 | ||
|
e8e69ad32d | ||
|
32cc2806e9 | ||
|
4edf79d8c4 | ||
|
51715822f8 | ||
|
251264835f | ||
|
47270b659c | ||
|
189c82159f | ||
|
13c6061589 | ||
|
876a0b0302 | ||
|
d15d45a16c | ||
|
a999d26c29 | ||
|
a177503bdd | ||
|
4ca25fc86f | ||
|
15a222a6ae | ||
|
9bee0f3def | ||
|
da3a128cf1 | ||
|
81a2d64835 | ||
|
5b4d7bcd4a | ||
|
6668174852 | ||
|
ac7af7168b | ||
|
c7463cd185 | ||
|
d985054fcd | ||
|
92a8348ea7 | ||
|
7443dcad99 | ||
|
b4884e4956 | ||
|
26bc7c91fc | ||
|
9f981f8168 | ||
|
e66d450b81 | ||
|
2a6cce858c | ||
|
3b1df177b9 | ||
|
45c4bbc525 | ||
|
e2e15f9a3d | ||
|
620fd51aa3 | ||
|
d0460bf4f3 | ||
|
e70b874dc3 | ||
|
520268e357 | ||
|
ad794454ab | ||
|
941283bfb6 | ||
|
04da07813a | ||
|
324d252628 | ||
|
28b0558129 | ||
|
cb4d27e58f | ||
|
c0ee4a7db7 | ||
|
aff71d506b | ||
|
b57be79b00 | ||
|
fb21de8035 | ||
|
bd13a993a2 | ||
|
0d90af5ec1 | ||
|
12e65e0011 | ||
|
f8f7588c93 | ||
|
f740b27659 | ||
|
2f25557747 | ||
|
32d3ea1801 | ||
|
b3b947f6e5 | ||
|
2b6da522c6 | ||
|
03b2e10bc3 | ||
|
1c1a5a4d54 | ||
|
156cff1854 | ||
|
eb099d9bfe | ||
|
c8665bc786 | ||
|
2764c6e230 | ||
|
2a2058c167 | ||
|
34e3a3fe46 | ||
|
7f6410e1f8 | ||
|
c8980f6f51 | ||
|
f2fee61d3b | ||
|
881afbff40 | ||
|
3342b91d3f | ||
|
cb5431dc16 | ||
|
198118571f | ||
|
7eeff8ec75 | ||
|
5109ccd899 | ||
|
da5a9e2c17 | ||
|
1e752885d4 | ||
|
9b10346cb9 | ||
|
4c04ba4e74 | ||
|
e6b22bd0a0 | ||
|
1f5fa4ca41 | ||
|
da416f4329 | ||
|
c221372ed4 | ||
|
95ad15b0dd | ||
|
41879bf5b3 | ||
|
a5da52c8a6 | ||
|
38d908995a | ||
|
ac09c7d91f | ||
|
c8d56b4bd1 | ||
|
f7b7e174b0 | ||
|
628beb02e8 | ||
|
f11d4e8df3 | ||
|
eabdeaf888 | ||
|
906909fd7d | ||
|
585ccf84a2 | ||
|
b12c99fbfe | ||
|
aed9d174a5 | ||
|
c85b6344fc | ||
|
3156fd9601 | ||
|
21356ae9ac | ||
|
57f11f1108 | ||
|
eb775525f5 | ||
|
3e54f66cb9 | ||
|
c2df2abbb0 | ||
|
99fbd475f4 | ||
|
2440817cfa | ||
|
97ec23c973 | ||
|
5e82b2382c | ||
|
18dc3dbf37 | ||
|
5d982fdcac | ||
|
ea1e5c6380 | ||
|
d4984aafa7 | ||
|
9c5bb31d66 | ||
|
e1c594ce0f | ||
|
a2cce31a1f | ||
|
996730f160 | ||
|
dfff273bf3 | ||
|
88370adbf3 | ||
|
aaf3743665 | ||
|
82f02312ea | ||
|
5eafb448c8 | ||
|
77fc111ee8 | ||
|
42c259dea6 | ||
|
5113583707 | ||
|
f8038ea735 | ||
|
4d2cabc8c1 | ||
|
f82c7c7480 | ||
|
fb3ca46017 | ||
|
68bcf9ebc7 | ||
|
7229923d70 | ||
|
6e284dfd7e | ||
|
70402d77a8 | ||
|
38fce60e6c | ||
|
f0b1d7934d | ||
|
aff3854cb9 | ||
|
64abd6ad63 | ||
|
2bc96a5fb1 | ||
|
42c1bbc638 | ||
|
8c84369e92 | ||
|
31a6091b25 | ||
|
4f12f2d0a7 | ||
|
16308232ce | ||
|
cf1f60fbf9 | ||
|
082cbf192b | ||
|
1d22231e8a | ||
|
510f147b97 | ||
|
11d7a26c31 | ||
|
1bfdafd6b1 | ||
|
4bfeb99b7b | ||
|
4468c91242 | ||
|
93bd548b46 | ||
|
074914044d | ||
|
069628c62b | ||
|
5884b1231f | ||
|
4b73492aa5 | ||
|
e06f602890 | ||
|
915db579c4 | ||
|
e34da3bdbf | ||
|
900dbc8cb9 | ||
|
eb3a266725 | ||
|
da872daa7d | ||
|
a6bd06f853 | ||
|
b3f1f4b3fe | ||
|
e8964cde39 | ||
|
acea305a5a | ||
|
26e819c8e3 | ||
|
fc66df8894 | ||
|
2b15eabcd0 | ||
|
24a181cf8d | ||
|
8cc84ef8c6 | ||
|
f62ad4b868 | ||
|
402bd80b34 | ||
|
7959be55a7 | ||
|
40a4b33748 | ||
|
fe62759613 | ||
|
d67f2a5d53 | ||
|
4722af1457 | ||
|
69a3c9555d | ||
|
14dc80ec3c | ||
|
8f1fd2de5f | ||
|
7d223dc851 | ||
|
0c33f9070b | ||
|
5253680f86 | ||
|
b10c0896e9 | ||
|
541b35818b | ||
|
571d9dbf34 | ||
|
325e36b2e0 | ||
|
8b081c759a | ||
|
650aa83958 | ||
|
a65435a771 | ||
|
0bf68a0385 | ||
|
8e737474f5 | ||
|
8910376134 | ||
|
4861ee23c3 | ||
|
4a43765f70 | ||
|
568ccebcc1 | ||
|
4760ddf314 | ||
|
168a794708 | ||
|
31fba2fed2 | ||
|
10e6bd32e8 | ||
|
5efa410d7d | ||
|
edcaf7e3c0 | ||
|
dc8ee2c498 | ||
|
29f82754d4 | ||
|
bd19135472 | ||
|
2594ff515b | ||
|
06498017df | ||
|
8c2aebf3fd | ||
|
c3021a7244 | ||
|
c9c05302d2 | ||
|
b53fdd3162 | ||
|
4ef2b834b6 | ||
|
b96ae1dd89 | ||
|
52a2f4f43a | ||
|
f938b3b83c | ||
|
cce81337c3 | ||
|
a728e34e32 | ||
|
eb81028123 | ||
|
c6b50d04f6 | ||
|
f380db4e1d | ||
|
f9b1c66932 | ||
|
dada15c2b4 | ||
|
5f9132ab5f | ||
|
d6b842b0f4 | ||
|
0f800f7875 | ||
|
20ad94fc6b | ||
|
a610440b5a | ||
|
d7c1718a1c | ||
|
ce78e71cd7 | ||
|
486a48679f | ||
|
b556334407 | ||
|
7a986fc60a | ||
|
a93d817962 | ||
|
84ba1e5c44 | ||
|
1fbb6b0c91 | ||
|
65036a5087 | ||
|
dd9680f626 | ||
|
1995836736 | ||
|
35b2da32ff | ||
|
5b8ad29e0a | ||
|
59853ecbca | ||
|
eaff850d27 | ||
|
5d09e32320 | ||
|
d971969b5f | ||
|
9723d6f0cd | ||
|
3a6e0463fb | ||
|
7be6c63060 | ||
|
c6c058c2dc | ||
|
5ea660e5d4 | ||
|
046241e20d | ||
|
2cb008c8c3 | ||
|
c120818792 | ||
|
6e1ad91f6a | ||
|
033df2dea8 | ||
|
0519b73cdc | ||
|
c6fb31fd49 | ||
|
84d5bd8124 | ||
|
85afb0be01 | ||
|
7e09add0f4 | ||
|
b5b95d1c5c | ||
|
b0a186884a | ||
|
98dfcfcb22 | ||
|
b2b39abd66 | ||
|
5d608cad67 | ||
|
fc613ce501 | ||
|
0bfef4a710 | ||
|
7a20049bbc | ||
|
d9a2c77aa4 | ||
|
9bfda73969 | ||
|
c36cd069e0 | ||
|
73ed053c66 | ||
|
66ddac2c71 | ||
|
315a471f10 | ||
|
7b84f9dcb2 | ||
|
5e17d68740 | ||
|
cf20672735 | ||
|
b02989e766 | ||
|
771b03e13a | ||
|
9521d6b990 | ||
|
38d760364d | ||
|
658daf21b1 | ||
|
297f7c493f | ||
|
5c9f8dac23 | ||
|
bedb69973c | ||
|
f66fbf592c | ||
|
a92a5c5a3f | ||
|
fe73f3db52 | ||
|
0266f330c0 | ||
|
f42f9f640f | ||
|
b11a9220fe |
12
.elasticbeanstalk/config.yml
Normal file
@ -0,0 +1,12 @@
|
||||
branch-defaults:
|
||||
release/prod:
|
||||
environment: mail-prod
|
||||
release/test:
|
||||
environment: mail-test
|
||||
global:
|
||||
application_name: mail
|
||||
default_ec2_keyname: null
|
||||
default_platform: Node.js
|
||||
default_region: eu-central-1
|
||||
profile: eb-cli
|
||||
sc: git
|
9
.gitignore
vendored
@ -5,9 +5,10 @@ test/lib/
|
||||
.sass-cache
|
||||
src/css/
|
||||
dist/
|
||||
compile/
|
||||
release/
|
||||
test/integration/src/
|
||||
src/lib/*.js
|
||||
src/js/crypto/aes-gcm.js
|
||||
src/js/crypto/util.js
|
||||
.elasticbeanstalk/
|
||||
src/img/icons/all.svg
|
||||
test/*/index.js
|
||||
**/*.browserified.js
|
||||
**/*.js.map
|
||||
|
46
.jshintrc
@ -18,33 +18,37 @@
|
||||
"unused": true,
|
||||
|
||||
"predef": [
|
||||
"console",
|
||||
"Notification",
|
||||
"importScripts",
|
||||
"process",
|
||||
"Event",
|
||||
"QUnit",
|
||||
"test",
|
||||
"asyncTest",
|
||||
"ok",
|
||||
"equal",
|
||||
"deepEqual",
|
||||
"start",
|
||||
"chrome",
|
||||
"requirejs",
|
||||
"define",
|
||||
"$",
|
||||
"inject",
|
||||
"Promise",
|
||||
"resolves",
|
||||
"rejects",
|
||||
"self",
|
||||
"describe",
|
||||
"it",
|
||||
"chai",
|
||||
"importScripts",
|
||||
"console",
|
||||
"process",
|
||||
"chrome",
|
||||
"Notification",
|
||||
"Event",
|
||||
"sinon",
|
||||
"mocha",
|
||||
"chai",
|
||||
"expect",
|
||||
"describe",
|
||||
"it",
|
||||
"before",
|
||||
"beforeEach",
|
||||
"after",
|
||||
"afterEach"
|
||||
"afterEach",
|
||||
"FastClick",
|
||||
"angular",
|
||||
"forge",
|
||||
"Lawnchair",
|
||||
"_",
|
||||
"openpgp",
|
||||
"PhoneNumber",
|
||||
"DOMPurify"
|
||||
],
|
||||
|
||||
"globals": {
|
||||
}
|
||||
"globals": {}
|
||||
}
|
@ -1,9 +1,7 @@
|
||||
sudo: false
|
||||
language: node_js
|
||||
node_js:
|
||||
- "0.10"
|
||||
- "0.12"
|
||||
before_install:
|
||||
- gem install sass
|
||||
- npm install -g grunt-cli
|
||||
notifications:
|
||||
email:
|
||||
- build@whiteout.io
|
||||
|
868
Gruntfile.js
@ -1,155 +1,66 @@
|
||||
module.exports = function(grunt) {
|
||||
'use strict';
|
||||
|
||||
require('time-grunt')(grunt);
|
||||
|
||||
var version = grunt.option('release'),
|
||||
zipName = (version) ? version : 'DEV';
|
||||
|
||||
var browserifyOpt = {
|
||||
exclude: ['openpgp', 'node-forge', 'net', 'tls', 'crypto'], // node apis not required at build time
|
||||
ignore: ['buffer'], // node apis to be stubbed for runtime
|
||||
browserifyOptions: {
|
||||
debug: true
|
||||
}
|
||||
};
|
||||
|
||||
// Project configuration.
|
||||
grunt.initConfig({
|
||||
connect: {
|
||||
dev: {
|
||||
options: {
|
||||
port: 8580,
|
||||
base: '.',
|
||||
keepalive: true
|
||||
}
|
||||
},
|
||||
test: {
|
||||
options: {
|
||||
port: 8581,
|
||||
base: '.'
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
jshint: {
|
||||
all: ['Gruntfile.js', 'src/*.js', 'src/js/**/*.js', 'test/unit/*.js', 'test/integration/*.js'],
|
||||
// General
|
||||
|
||||
shell: {
|
||||
options: {
|
||||
jshintrc: '.jshintrc'
|
||||
}
|
||||
stderr: false
|
||||
},
|
||||
|
||||
mocha: {
|
||||
all: {
|
||||
options: {
|
||||
urls: [
|
||||
'http://localhost:<%= connect.test.options.port %>/test/unit/index.html',
|
||||
'http://localhost:<%= connect.test.options.port %>/test/integration/index.html'
|
||||
],
|
||||
run: false,
|
||||
reporter: 'Spec',
|
||||
log: false,
|
||||
|
||||
// phanotmjs is soooo slow
|
||||
timeout: 100000
|
||||
}
|
||||
target: {
|
||||
command: 'dir=$(pwd) && cd node_modules/mailreader/ && npm install --production && cd $dir'
|
||||
}
|
||||
},
|
||||
|
||||
clean: {
|
||||
dist: ['dist', 'src/lib/*.js', 'test/lib', 'test/integration/src']
|
||||
},
|
||||
sass: {
|
||||
dist: {
|
||||
files: {
|
||||
'src/css/read-sandbox.css': 'src/sass/read-sandbox.scss',
|
||||
'src/css/all.css': 'src/sass/all.scss'
|
||||
}
|
||||
}
|
||||
},
|
||||
autoprefixer: {
|
||||
options: {
|
||||
browsers: ['last 2 versions']
|
||||
},
|
||||
dist: {
|
||||
files: {
|
||||
'src/css/read-sandbox.css': 'src/css/read-sandbox.css',
|
||||
'src/css/all.css': 'src/css/all.css'
|
||||
}
|
||||
}
|
||||
},
|
||||
csso: {
|
||||
options: {
|
||||
banner: '/*! Copyright © 2013, Whiteout Networks GmbH. All rights reserved.*/\n'
|
||||
},
|
||||
dist: {
|
||||
files: {
|
||||
'dist/css/read-sandbox.min.css': 'src/css/read-sandbox.css',
|
||||
'dist/css/all.min.css': 'src/css/all.css'
|
||||
}
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
css: {
|
||||
files: ['src/sass/**/*.scss'],
|
||||
tasks: ['dist-css', 'manifest']
|
||||
},
|
||||
js: {
|
||||
files: ['src/js/**/*.js'],
|
||||
tasks: ['copy:js', 'copy:integration', 'manifest']
|
||||
},
|
||||
lib: {
|
||||
files: ['src/lib/**/*.js'],
|
||||
tasks: ['copy:lib', 'manifest']
|
||||
},
|
||||
app: {
|
||||
files: ['src/*.js', 'src/**/*.html', 'src/**/*.json', 'src/manifest.*', 'src/img/**/*', 'src/font/**/*'],
|
||||
tasks: ['copy:app', 'copy:ca', 'copy:tpl', 'copy:img', 'copy:font', 'manifest-dev', 'manifest']
|
||||
}
|
||||
dist: ['dist', 'compile', 'test/lib', 'test/integration/src'],
|
||||
release: ['dist/**/*.browserified.js', 'dist/**/*.js.map', 'dist/js/app.templates.js']
|
||||
},
|
||||
|
||||
copy: {
|
||||
npm: {
|
||||
libTest: {
|
||||
expand: true,
|
||||
flatten: true,
|
||||
cwd: 'node_modules/',
|
||||
cwd: './',
|
||||
src: [
|
||||
'requirejs/require.js',
|
||||
'imap-client/src/*.js',
|
||||
'imap-client/node_modules/browserbox/src/*.js',
|
||||
'imap-client/node_modules/browserbox/node_modules/wo-imap-handler/src/*.js',
|
||||
'imap-client/node_modules/browserbox/node_modules/mimefuncs/src/*.js',
|
||||
'imap-client/node_modules/browserbox/node_modules/tcp-socket/src/*.js',
|
||||
'imap-client/node_modules/browserbox/node_modules/wo-utf7/src/*.js',
|
||||
'mailreader/src/*.js',
|
||||
'mailreader/node_modules/mimeparser/src/*.js',
|
||||
'mailreader/node_modules/mimeparser/node_modules/wo-addressparser/src/*.js',
|
||||
'pgpbuilder/src/*.js',
|
||||
'pgpbuilder/node_modules/mailbuild/src/*.js',
|
||||
'pgpbuilder/node_modules/mailbuild/node_modules/mimetypes/src/*.js',
|
||||
'pgpbuilder/node_modules/mailbuild/node_modules/punycode/punycode.min.js',
|
||||
'pgpmailer/src/*.js',
|
||||
'pgpmailer/node_modules/wo-smtpclient/src/*.js',
|
||||
'pgpmailer/node_modules/wo-smtpclient/node_modules/wo-stringencoding/dist/stringencoding.js',
|
||||
'axe-logger/axe.js',
|
||||
'dompurify/purify.js',
|
||||
'jquery/dist/jquery.min.js',
|
||||
'ng-infinite-scroll/build/ng-infinite-scroll.min.js'
|
||||
'node_modules/mocha/mocha.css',
|
||||
'node_modules/mocha/mocha.js',
|
||||
'node_modules/chai/chai.js',
|
||||
'node_modules/sinon/pkg/sinon.js',
|
||||
'node_modules/browsercrow/src/*.js',
|
||||
'node_modules/browsersmtp/src/*.js',
|
||||
'node_modules/openpgp/dist/openpgp.min.js',
|
||||
'node_modules/openpgp/dist/openpgp.worker.min.js',
|
||||
'src/lib/forge/forge.min.js',
|
||||
'dist/js/pbkdf2-worker.min.js'
|
||||
],
|
||||
dest: 'src/lib/'
|
||||
},
|
||||
npmDev: {
|
||||
expand: true,
|
||||
flatten: true,
|
||||
cwd: 'node_modules/',
|
||||
src: ['requirejs/require.js', 'mocha/mocha.css', 'mocha/mocha.js', 'chai/chai.js', 'sinon/pkg/sinon.js', 'angularjs/src/ngMock/angular-mocks.js', 'browsercrow/src/*.js', 'browsersmtp/src/*.js'],
|
||||
dest: 'test/lib/'
|
||||
},
|
||||
cryptoLib: {
|
||||
expand: true,
|
||||
cwd: 'node_modules/crypto-lib/src/',
|
||||
src: ['*.js'],
|
||||
dest: 'src/js/crypto/'
|
||||
},
|
||||
lib: {
|
||||
expand: true,
|
||||
cwd: 'src/lib/',
|
||||
src: ['**'],
|
||||
dest: 'dist/lib/'
|
||||
},
|
||||
js: {
|
||||
expand: true,
|
||||
cwd: 'src/js/',
|
||||
src: ['**'],
|
||||
flatten: true,
|
||||
cwd: './',
|
||||
src: [
|
||||
'node_modules/openpgp/dist/openpgp.min.js',
|
||||
'node_modules/openpgp/dist/openpgp.worker.min.js',
|
||||
'src/lib/forge/forge.min.js'
|
||||
],
|
||||
dest: 'dist/js/'
|
||||
},
|
||||
font: {
|
||||
@ -167,29 +78,496 @@ module.exports = function(grunt) {
|
||||
tpl: {
|
||||
expand: true,
|
||||
cwd: 'src/tpl/',
|
||||
src: ['*'],
|
||||
src: ['read-sandbox.html'],
|
||||
dest: 'dist/tpl/'
|
||||
},
|
||||
ca: {
|
||||
expand: true,
|
||||
cwd: 'src/ca/',
|
||||
src: ['*'],
|
||||
dest: 'dist/ca/'
|
||||
},
|
||||
app: {
|
||||
expand: true,
|
||||
cwd: 'src/',
|
||||
src: ['*.html', '*.js', '*.json', 'manifest.*'],
|
||||
src: ['*.js', '*.json', 'manifest.*'],
|
||||
dest: 'dist/'
|
||||
},
|
||||
integration: {
|
||||
expand: true,
|
||||
cwd: 'src/',
|
||||
src: ['**'],
|
||||
dest: 'test/integration/src/'
|
||||
}
|
||||
},
|
||||
|
||||
// Stylesheets
|
||||
|
||||
sass: {
|
||||
dist: {
|
||||
files: {
|
||||
'src/css/read-sandbox.css': 'src/sass/read-sandbox.scss',
|
||||
'src/css/all.css': 'src/sass/all.scss'
|
||||
}
|
||||
},
|
||||
styleguide: {
|
||||
files: {
|
||||
'src/css/styleguide.css': 'src/sass/styleguide.scss'
|
||||
}
|
||||
}
|
||||
},
|
||||
autoprefixer: {
|
||||
options: {
|
||||
browsers: ['last 2 versions']
|
||||
},
|
||||
dist: {
|
||||
files: {
|
||||
'src/css/read-sandbox.css': 'src/css/read-sandbox.css',
|
||||
'src/css/all.css': 'src/css/all.css'
|
||||
}
|
||||
},
|
||||
styleguide: {
|
||||
files: {
|
||||
'src/css/styleguide.css': 'src/css/styleguide.css'
|
||||
}
|
||||
}
|
||||
},
|
||||
csso: {
|
||||
options: {
|
||||
banner: '/*! Copyright © 2013, Whiteout Networks GmbH. All rights reserved.*/\n'
|
||||
},
|
||||
dist: {
|
||||
files: {
|
||||
'dist/css/read-sandbox.min.css': 'src/css/read-sandbox.css',
|
||||
'dist/css/all.min.css': 'src/css/all.css'
|
||||
}
|
||||
},
|
||||
styleguide: {
|
||||
files: {
|
||||
'dist/styleguide/css/styleguide.min.css': 'src/css/styleguide.css'
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
// JavaScript
|
||||
|
||||
jshint: {
|
||||
all: ['Gruntfile.js', 'src/*.js', 'src/js/**/*.js', 'test/unit/*-test.js', 'test/integration/*-test.js'],
|
||||
options: {
|
||||
jshintrc: '.jshintrc'
|
||||
}
|
||||
},
|
||||
|
||||
browserify: {
|
||||
app: {
|
||||
files: {
|
||||
'dist/js/app.browserified.js': ['src/js/app.js']
|
||||
},
|
||||
options: browserifyOpt
|
||||
},
|
||||
pbkdf2Worker: {
|
||||
files: {
|
||||
'dist/js/pbkdf2-worker.browserified.js': ['src/js/crypto/pbkdf2-worker.js']
|
||||
},
|
||||
options: browserifyOpt
|
||||
},
|
||||
mailreaderWorker: {
|
||||
files: {
|
||||
'dist/js/mailreader-parser-worker.browserified.js': ['node_modules/mailreader/src/mailreader-parser-worker-browserify.js']
|
||||
},
|
||||
options: browserifyOpt
|
||||
},
|
||||
tlsWorker: {
|
||||
files: {
|
||||
'dist/js/tcp-socket-tls-worker.browserified.js': ['node_modules/tcp-socket/src/tcp-socket-tls-worker.js']
|
||||
},
|
||||
options: browserifyOpt
|
||||
},
|
||||
compressionWorker: {
|
||||
files: {
|
||||
'dist/js/browserbox-compression-worker.browserified.js': ['node_modules/imap-client/node_modules/browserbox/src/browserbox-compression-worker.js']
|
||||
},
|
||||
options: browserifyOpt
|
||||
},
|
||||
unitTest: {
|
||||
files: {
|
||||
'test/unit/index.browserified.js': [
|
||||
'test/main.js',
|
||||
'test/unit/util/dialog-test.js',
|
||||
'test/unit/util/connection-doctor-test.js',
|
||||
'test/unit/util/update-handler-test.js',
|
||||
'test/unit/util/status-display-test.js',
|
||||
'test/unit/crypto/pgp-test.js',
|
||||
'test/unit/crypto/crypto-test.js',
|
||||
'test/unit/service/rest-dao-test.js',
|
||||
'test/unit/service/admin-dao-test.js',
|
||||
'test/unit/service/auth-test.js',
|
||||
'test/unit/service/oauth-test.js',
|
||||
'test/unit/service/publickey-dao-test.js',
|
||||
'test/unit/service/privatekey-dao-test.js',
|
||||
'test/unit/service/lawnchair-dao-test.js',
|
||||
'test/unit/service/keychain-dao-test.js',
|
||||
'test/unit/service/devicestorage-dao-test.js',
|
||||
'test/unit/service/newsletter-service-test.js',
|
||||
'test/unit/service/mail-config-service-test.js',
|
||||
'test/unit/service/invitation-dao-test.js',
|
||||
'test/unit/service/publickey-verifier-test.js',
|
||||
'test/unit/email/outbox-bo-test.js',
|
||||
'test/unit/email/email-dao-test.js',
|
||||
'test/unit/email/account-test.js',
|
||||
'test/unit/email/search-test.js',
|
||||
'test/unit/controller/login/add-account-ctrl-test.js',
|
||||
'test/unit/controller/login/create-account-ctrl-test.js',
|
||||
'test/unit/controller/login/validate-phone-ctrl-test.js',
|
||||
'test/unit/controller/login/login-existing-ctrl-test.js',
|
||||
'test/unit/controller/login/login-initial-ctrl-test.js',
|
||||
'test/unit/controller/login/login-new-device-ctrl-test.js',
|
||||
'test/unit/controller/login/login-privatekey-download-ctrl-test.js',
|
||||
'test/unit/controller/login/login-privatekey-upload-ctrl-test.js',
|
||||
'test/unit/controller/login/login-verify-public-key-ctrl-test.js',
|
||||
'test/unit/controller/login/login-set-credentials-ctrl-test.js',
|
||||
'test/unit/controller/login/login-ctrl-test.js',
|
||||
'test/unit/controller/app/dialog-ctrl-test.js',
|
||||
'test/unit/controller/app/publickey-import-ctrl-test.js',
|
||||
'test/unit/controller/app/account-ctrl-test.js',
|
||||
'test/unit/controller/app/set-passphrase-ctrl-test.js',
|
||||
'test/unit/controller/app/contacts-ctrl-test.js',
|
||||
'test/unit/controller/app/read-ctrl-test.js',
|
||||
'test/unit/controller/app/navigation-ctrl-test.js',
|
||||
'test/unit/controller/app/mail-list-ctrl-test.js',
|
||||
'test/unit/controller/app/write-ctrl-test.js',
|
||||
'test/unit/controller/app/action-bar-ctrl-test.js',
|
||||
]
|
||||
},
|
||||
options: browserifyOpt
|
||||
},
|
||||
integrationTest: {
|
||||
files: {
|
||||
'test/integration/index.browserified.js': [
|
||||
'test/main.js',
|
||||
'test/integration/email-dao-test.js',
|
||||
'test/integration/publickey-verifier-test.js'
|
||||
]
|
||||
},
|
||||
options: browserifyOpt
|
||||
}
|
||||
},
|
||||
|
||||
exorcise: {
|
||||
app: {
|
||||
files: {
|
||||
'dist/js/app.browserified.js.map': ['dist/js/app.browserified.js'],
|
||||
}
|
||||
},
|
||||
unitTest: {
|
||||
files: {
|
||||
'test/unit/index.browserified.js.map': ['test/unit/index.browserified.js'],
|
||||
}
|
||||
},
|
||||
integrationTest: {
|
||||
files: {
|
||||
'test/integration/index.browserified.js.map': ['test/integration/index.browserified.js'],
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
ngtemplates: {
|
||||
mail: {
|
||||
src: [
|
||||
'tpl/**/*.html'
|
||||
],
|
||||
dest: 'dist/js/app.templates.js',
|
||||
cwd: 'src/',
|
||||
options: {
|
||||
htmlmin: {
|
||||
collapseWhitespace: true,
|
||||
removeComments: true // we do not use comment directives
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
concat: {
|
||||
options: {
|
||||
separator: ';\n',
|
||||
sourceMap: true
|
||||
},
|
||||
app: {
|
||||
src: [
|
||||
'src/lib/underscore/underscore.js',
|
||||
'node_modules/jquery/dist/jquery.min.js',
|
||||
'src/lib/angular/angular.js',
|
||||
'src/lib/angular/angular-route.js',
|
||||
'src/lib/angular/angular-animate.js',
|
||||
'src/lib/ngtagsinput/ng-tags-input.min.js',
|
||||
'node_modules/ng-infinite-scroll/build/ng-infinite-scroll.min.js',
|
||||
'node_modules/iframe-resizer/js/iframeResizer.min.js',
|
||||
'src/lib/fastclick/fastclick.js',
|
||||
'src/lib/lawnchair/lawnchair-git.js',
|
||||
'src/lib/lawnchair/lawnchair-adapter-webkit-sqlite-git.js',
|
||||
'src/lib/lawnchair/lawnchair-adapter-indexed-db-git.js',
|
||||
'src/lib/phonenumber/PhoneNumberMetadata.js',
|
||||
'src/lib/phonenumber/PhoneNumberNormalizer.js',
|
||||
'src/lib/phonenumber/PhoneNumber.js',
|
||||
'dist/js/app.browserified.js',
|
||||
'<%= ngtemplates.mail.dest %>'
|
||||
],
|
||||
dest: 'dist/js/app.min.js',
|
||||
options: {
|
||||
sourceMapName: 'dist/js/app.js.map'
|
||||
}
|
||||
},
|
||||
readSandbox: {
|
||||
src: [
|
||||
'node_modules/dompurify/src/purify.js',
|
||||
'node_modules/iframe-resizer/js/iframeResizer.contentWindow.min.js',
|
||||
'src/js/controller/app/read-sandbox.js'
|
||||
],
|
||||
dest: 'dist/js/read-sandbox.min.js'
|
||||
},
|
||||
pbkdf2Worker: {
|
||||
src: ['dist/js/pbkdf2-worker.browserified.js'],
|
||||
dest: 'dist/js/pbkdf2-worker.min.js'
|
||||
},
|
||||
mailreaderWorker: {
|
||||
src: ['dist/js/mailreader-parser-worker.browserified.js'],
|
||||
dest: 'dist/js/mailreader-parser-worker.min.js'
|
||||
},
|
||||
tlsWorker: {
|
||||
src: ['dist/js/tcp-socket-tls-worker.browserified.js'],
|
||||
dest: 'dist/js/tcp-socket-tls-worker.min.js'
|
||||
},
|
||||
compressionWorker: {
|
||||
src: ['dist/js/browserbox-compression-worker.browserified.js'],
|
||||
dest: 'dist/js/browserbox-compression-worker.min.js'
|
||||
},
|
||||
unitTest: {
|
||||
src: [
|
||||
'src/lib/underscore/underscore.js',
|
||||
'node_modules/jquery/dist/jquery.min.js',
|
||||
'src/lib/angular/angular.js',
|
||||
'src/lib/angular/angular-route.js',
|
||||
'src/lib/angular/angular-mocks.js',
|
||||
'src/lib/lawnchair/lawnchair-git.js',
|
||||
'src/lib/lawnchair/lawnchair-adapter-webkit-sqlite-git.js',
|
||||
'src/lib/lawnchair/lawnchair-adapter-indexed-db-git.js',
|
||||
'src/lib/phonenumber/PhoneNumberMetadata.js',
|
||||
'src/lib/phonenumber/PhoneNumberNormalizer.js',
|
||||
'src/lib/phonenumber/PhoneNumber.js',
|
||||
'test/unit/index.browserified.js'
|
||||
],
|
||||
dest: 'test/unit/index.js',
|
||||
options: {
|
||||
sourceMapName: 'test/unit/index.js.map'
|
||||
}
|
||||
},
|
||||
integrationTest: {
|
||||
src: [
|
||||
'src/lib/underscore/underscore.js',
|
||||
'node_modules/jquery/dist/jquery.min.js',
|
||||
'src/lib/angular/angular.js',
|
||||
'src/lib/angular/angular-mocks.js',
|
||||
'src/lib/lawnchair/lawnchair-git.js',
|
||||
'src/lib/lawnchair/lawnchair-adapter-webkit-sqlite-git.js',
|
||||
'src/lib/lawnchair/lawnchair-adapter-indexed-db-git.js',
|
||||
'test/integration/index.browserified.js'
|
||||
],
|
||||
dest: 'test/integration/index.js',
|
||||
options: {
|
||||
sourceMapName: 'test/integration/index.js.map'
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
uglify: {
|
||||
app: {
|
||||
files: {
|
||||
'dist/js/app.min.js': ['dist/js/app.min.js']
|
||||
},
|
||||
options: {
|
||||
mangle: false,
|
||||
sourceMap: true,
|
||||
sourceMapIn: 'dist/js/app.js.map',
|
||||
sourceMapIncludeSources: true,
|
||||
sourceMapName: 'dist/js/app.min.js.map'
|
||||
}
|
||||
},
|
||||
readSandbox: {
|
||||
files: {
|
||||
'dist/js/read-sandbox.min.js': ['dist/js/read-sandbox.min.js']
|
||||
},
|
||||
options: {
|
||||
sourceMap: true,
|
||||
sourceMapName: 'dist/js/read-sandbox.min.js.map'
|
||||
}
|
||||
},
|
||||
pbkdf2Worker: {
|
||||
files: {
|
||||
'dist/js/pbkdf2-worker.min.js': ['dist/js/pbkdf2-worker.min.js']
|
||||
}
|
||||
},
|
||||
mailreaderWorker: {
|
||||
files: {
|
||||
'dist/js/mailreader-parser-worker.min.js': ['dist/js/mailreader-parser-worker.min.js']
|
||||
},
|
||||
options: {
|
||||
sourceMap: true,
|
||||
sourceMapName: 'dist/js/mailreader-parser-worker.min.js.map'
|
||||
}
|
||||
},
|
||||
tlsWorker: {
|
||||
files: {
|
||||
'dist/js/tcp-socket-tls-worker.min.js': ['dist/js/tcp-socket-tls-worker.min.js']
|
||||
},
|
||||
options: {
|
||||
sourceMap: true,
|
||||
sourceMapName: 'dist/js/tcp-socket-tls-worker.min.js.map'
|
||||
}
|
||||
},
|
||||
compressionWorker: {
|
||||
files: {
|
||||
'dist/js/browserbox-compression-worker.min.js': ['dist/js/browserbox-compression-worker.min.js']
|
||||
},
|
||||
options: {
|
||||
sourceMap: true,
|
||||
sourceMapName: 'dist/js/browserbox-compression-worker.min.js.map'
|
||||
}
|
||||
},
|
||||
options: {
|
||||
banner: '/*! Copyright © <%= grunt.template.today("yyyy") %>, Whiteout Networks GmbH.*/\n'
|
||||
}
|
||||
},
|
||||
|
||||
mocha_phantomjs: {
|
||||
all: {
|
||||
options: {
|
||||
urls: [
|
||||
'http://localhost:<%= connect.test.options.port %>/test/unit/index.html',
|
||||
'http://localhost:<%= connect.test.options.port %>/test/integration/index.html'
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
// Assets
|
||||
|
||||
svgmin: {
|
||||
options: {
|
||||
plugins: [{
|
||||
removeViewBox: false
|
||||
}, {
|
||||
removeUselessStrokeAndFill: false
|
||||
}]
|
||||
},
|
||||
icons: {
|
||||
files: [{
|
||||
expand: true,
|
||||
src: ['img/icons/*.svg', '!img/icons/all.svg'],
|
||||
cwd: 'src/',
|
||||
dest: 'compile/'
|
||||
}]
|
||||
}
|
||||
},
|
||||
svgstore: {
|
||||
options: {
|
||||
prefix: 'icon-',
|
||||
svg: {
|
||||
viewBox: '0 0 100 100',
|
||||
xmlns: 'http://www.w3.org/2000/svg'
|
||||
},
|
||||
cleanup: ['fill', 'stroke']
|
||||
},
|
||||
icons: {
|
||||
files: {
|
||||
'src/img/icons/all.svg': ['compile/img/icons/*.svg'],
|
||||
}
|
||||
}
|
||||
},
|
||||
'string-replace': {
|
||||
index: {
|
||||
files: {
|
||||
'dist/index.html': 'src/index.html'
|
||||
},
|
||||
options: {
|
||||
replacements: [{
|
||||
pattern: /<!-- @import (.*?) -->/ig,
|
||||
replacement: function(match, p1) {
|
||||
return grunt.file.read('src/' + p1);
|
||||
}
|
||||
}]
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
// Styleguide
|
||||
|
||||
assemble: {
|
||||
options: {
|
||||
assets: 'dist',
|
||||
layoutdir: 'src/styleguide/layouts',
|
||||
layout: 'default.hbs',
|
||||
partials: ['src/styleguide/blocks/**/*.hbs'],
|
||||
helpers: [
|
||||
'handlebars-helper-compose',
|
||||
'src/styleguide/helpers/**/*.js'
|
||||
],
|
||||
data: [
|
||||
'dist/manifest.json'
|
||||
],
|
||||
flatten: true
|
||||
},
|
||||
styleguide: {
|
||||
files: [{
|
||||
'dist/styleguide/': ['src/styleguide/*.hbs']
|
||||
}]
|
||||
}
|
||||
},
|
||||
|
||||
// Development
|
||||
|
||||
connect: {
|
||||
dev: {
|
||||
options: {
|
||||
port: 8580,
|
||||
base: '.',
|
||||
keepalive: true
|
||||
}
|
||||
},
|
||||
test: {
|
||||
options: {
|
||||
port: 8581,
|
||||
base: '.'
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
// Utilities
|
||||
|
||||
watch: {
|
||||
css: {
|
||||
files: ['src/sass/**/*.scss'],
|
||||
tasks: ['dist-css', 'offline-cache', 'dist-styleguide']
|
||||
},
|
||||
styleguide: {
|
||||
files: ['src/styleguide/**/*.hbs', 'src/styleguide/**/*.js'],
|
||||
tasks: ['dist-styleguide']
|
||||
},
|
||||
jsApp: {
|
||||
files: ['src/js/**/*.js', 'src/*.html', 'src/tpl/**/*.html'],
|
||||
tasks: ['dist-js-app']
|
||||
},
|
||||
jsUnitTest: {
|
||||
files: ['test/unit/**/*-test.js', 'test/*.js'],
|
||||
tasks: ['dist-js-unitTest']
|
||||
},
|
||||
jsIntegrationTest: {
|
||||
files: ['test/integration/*-test.js', 'test/*.js'],
|
||||
tasks: ['dist-js-integrationTest']
|
||||
},
|
||||
icons: {
|
||||
files: ['src/index.html', 'src/img/icons/*.svg', '!src/img/icons/all.svg'],
|
||||
tasks: ['svgmin', 'svgstore', 'string-replace', 'dist-styleguide', 'offline-cache']
|
||||
},
|
||||
lib: {
|
||||
files: ['src/lib/**/*.js'],
|
||||
tasks: ['copy:lib', 'offline-cache']
|
||||
},
|
||||
app: {
|
||||
files: ['src/*.js', 'src/*.html', 'src/tpl/**/*.html', 'src/**/*.json', 'src/manifest.*', 'src/img/**/*', 'src/font/**/*'],
|
||||
tasks: ['copy:app', 'copy:tpl', 'copy:img', 'copy:font', 'manifest-dev', 'offline-cache']
|
||||
}
|
||||
},
|
||||
|
||||
// Deployment
|
||||
|
||||
compress: {
|
||||
main: {
|
||||
options: {
|
||||
@ -200,16 +578,15 @@ module.exports = function(grunt) {
|
||||
cwd: 'dist/',
|
||||
src: ['**/*'],
|
||||
dest: 'release/'
|
||||
}
|
||||
},
|
||||
nodeWebkit: {
|
||||
options: {
|
||||
mode: 'zip',
|
||||
archive: 'release/whiteout-mail_' + zipName + '.nw'
|
||||
},
|
||||
expand: true,
|
||||
cwd: 'dist/',
|
||||
src: ['**/*'],
|
||||
dest: '/'
|
||||
|
||||
// Offline caching
|
||||
|
||||
swPrecache: {
|
||||
prod: {
|
||||
handleFetch: true,
|
||||
rootDir: 'dist'
|
||||
}
|
||||
},
|
||||
|
||||
@ -220,31 +597,133 @@ module.exports = function(grunt) {
|
||||
timestamp: true,
|
||||
hash: true,
|
||||
cache: ['socket.io/socket.io.js'],
|
||||
exclude: ['appcache.manifest', 'manifest.webapp'],
|
||||
exclude: [
|
||||
'appcache.manifest',
|
||||
'manifest.webapp',
|
||||
'manifest.mobile.json',
|
||||
'background.js',
|
||||
'service-worker.js',
|
||||
'styleguide/css/styleguide.min.css',
|
||||
'styleguide/index.html',
|
||||
'js/app.templates.js',
|
||||
'js/app.js.map',
|
||||
'js/app.min.js.map',
|
||||
'js/app.browserified.js',
|
||||
'js/app.browserified.js.map',
|
||||
'js/crypto/pbkdf2-worker.browserified.js',
|
||||
'js/pbkdf2-worker.browserified.js',
|
||||
'js/pbkdf2-worker.min.js.map',
|
||||
'js/read-sandbox.min.js.map',
|
||||
'js/mailreader-parser-worker.browserified.js',
|
||||
'js/mailreader-parser-worker.min.js.map',
|
||||
'js/tcp-socket-tls-worker.browserified.js',
|
||||
'js/tcp-socket-tls-worker.min.js.map',
|
||||
'js/browserbox-compression-worker.browserified.js',
|
||||
'js/browserbox-compression-worker.min.js.map',
|
||||
'img/icon-100-ios.png',
|
||||
'img/icon-114-ios.png',
|
||||
'img/icon-120-ios.png',
|
||||
'img/icon-128-chrome.png',
|
||||
'img/icon-144-android.png',
|
||||
'img/icon-144-ios.png',
|
||||
'img/icon-152-ios.png',
|
||||
'img/icon-180-ios.png',
|
||||
'img/icon-192-android.png',
|
||||
'img/icon-29-ios.png',
|
||||
'img/icon-36-android.png',
|
||||
'img/icon-40-ios.png',
|
||||
'img/icon-48-android.png',
|
||||
'img/icon-50-ios.png',
|
||||
'img/icon-57-ios.png',
|
||||
'img/icon-58-ios.png',
|
||||
'img/icon-60-android.png',
|
||||
'img/icon-60-ios.png',
|
||||
'img/icon-72-android.png',
|
||||
'img/icon-72-ios.png',
|
||||
'img/icon-76-ios.png',
|
||||
'img/icon-78-android.png',
|
||||
'img/icon-80-ios.png',
|
||||
'img/icon-87-ios.png',
|
||||
'img/icon-96-android.png',
|
||||
'img/Default-568h@2x~iphone.png',
|
||||
'img/Default-667h.png',
|
||||
'img/Default-736h.png',
|
||||
'img/Default-Landscape-736h.png',
|
||||
'img/Default-Landscape@2x~ipad.png',
|
||||
'img/Default-Landscape~ipad.png',
|
||||
'img/Default-Portrait@2x~ipad.png',
|
||||
'img/Default-Portrait~ipad.png',
|
||||
'img/Default@2x~iphone.png',
|
||||
'img/Default~iphone.png'
|
||||
],
|
||||
master: ['index.html']
|
||||
},
|
||||
src: ['**/*.*'],
|
||||
dest: 'dist/appcache.manifest'
|
||||
}
|
||||
},
|
||||
}
|
||||
|
||||
nodewebkit: {
|
||||
options: {
|
||||
version: '0.9.2', // node-webkit version
|
||||
build_dir: './release/node-webkit/', // Where the build version of my node-webkit app is saved
|
||||
mac: true, // We want to build it for mac
|
||||
win: false, // We want to build it for win
|
||||
linux32: false, // We don't need linux32
|
||||
linux64: false, // We don't need linux64
|
||||
},
|
||||
src: ['./dist/**/*'] // Your node-webkit app
|
||||
});
|
||||
|
||||
// generate service-worker stasks
|
||||
grunt.registerMultiTask('swPrecache', function() {
|
||||
var fs = require('fs');
|
||||
var path = require('path');
|
||||
var swPrecache = require('sw-precache');
|
||||
var packageJson = require('./package.json');
|
||||
|
||||
var done = this.async();
|
||||
var rootDir = this.data.rootDir;
|
||||
var handleFetch = this.data.handleFetch;
|
||||
|
||||
generateServiceWorkerFileContents(rootDir, handleFetch, function(error, serviceWorkerFileContents) {
|
||||
if (error) {
|
||||
grunt.fail.warn(error);
|
||||
}
|
||||
fs.writeFile(path.join(rootDir, 'service-worker.js'), serviceWorkerFileContents, function(error) {
|
||||
if (error) {
|
||||
grunt.fail.warn(error);
|
||||
}
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
function generateServiceWorkerFileContents(rootDir, handleFetch, callback) {
|
||||
var config = {
|
||||
cacheId: packageJson.name,
|
||||
// If handleFetch is false (i.e. because this is called from swPrecache:dev), then
|
||||
// the service worker will precache resources but won't actually serve them.
|
||||
// This allows you to test precaching behavior without worry about the cache preventing your
|
||||
// local changes from being picked up during the development cycle.
|
||||
handleFetch: handleFetch,
|
||||
logger: grunt.log.writeln,
|
||||
dynamicUrlToDependencies: {
|
||||
'socket.io/socket.io.js': ['node_modules/socket.io/node_modules/socket.io-client/socket.io.js'],
|
||||
},
|
||||
staticFileGlobs: [
|
||||
rootDir + '/*.html',
|
||||
rootDir + '/tpl/*.html',
|
||||
rootDir + '/js/**/*.min.js',
|
||||
rootDir + '/css/**/*.css',
|
||||
rootDir + '/img/**/*.svg',
|
||||
rootDir + '/img/*-universal.png',
|
||||
rootDir + '/font/**.*',
|
||||
rootDir + '/*.json'
|
||||
],
|
||||
maximumFileSizeToCacheInBytes: 100 * 1024 * 1024,
|
||||
stripPrefix: path.join(rootDir, path.sep)
|
||||
};
|
||||
|
||||
swPrecache(config, callback);
|
||||
}
|
||||
});
|
||||
|
||||
// Load the plugin(s)
|
||||
grunt.loadNpmTasks('grunt-browserify');
|
||||
grunt.loadNpmTasks('grunt-contrib-concat');
|
||||
grunt.loadNpmTasks('grunt-contrib-uglify');
|
||||
grunt.loadNpmTasks('grunt-contrib-connect');
|
||||
grunt.loadNpmTasks('grunt-contrib-jshint');
|
||||
grunt.loadNpmTasks('grunt-mocha');
|
||||
grunt.loadNpmTasks('grunt-contrib-clean');
|
||||
grunt.loadNpmTasks('grunt-csso');
|
||||
grunt.loadNpmTasks('grunt-contrib-sass');
|
||||
@ -252,18 +731,50 @@ module.exports = function(grunt) {
|
||||
grunt.loadNpmTasks('grunt-contrib-watch');
|
||||
grunt.loadNpmTasks('grunt-contrib-copy');
|
||||
grunt.loadNpmTasks('grunt-contrib-compress');
|
||||
grunt.loadNpmTasks('grunt-node-webkit-builder');
|
||||
grunt.loadNpmTasks('grunt-manifest');
|
||||
grunt.loadNpmTasks('grunt-mocha-phantomjs');
|
||||
grunt.loadNpmTasks('grunt-exorcise');
|
||||
grunt.loadNpmTasks('grunt-string-replace');
|
||||
grunt.loadNpmTasks('grunt-svgmin');
|
||||
grunt.loadNpmTasks('grunt-svgstore');
|
||||
grunt.loadNpmTasks('grunt-shell');
|
||||
grunt.loadNpmTasks('grunt-angular-templates');
|
||||
grunt.loadNpmTasks('assemble');
|
||||
|
||||
// Build tasks
|
||||
grunt.registerTask('dist-npm', ['copy:npm', 'copy:npmDev', 'copy:cryptoLib']);
|
||||
grunt.registerTask('dist-css', ['sass', 'autoprefixer', 'csso']);
|
||||
grunt.registerTask('dist-css', ['sass:dist', 'autoprefixer:dist', 'csso:dist']);
|
||||
grunt.registerTask('dist-js', ['browserify', 'exorcise', 'ngtemplates', 'concat', 'uglify']);
|
||||
grunt.registerTask('dist-js-app', [
|
||||
'browserify:app',
|
||||
'browserify:pbkdf2Worker',
|
||||
'exorcise:app',
|
||||
'ngtemplates',
|
||||
'concat:app',
|
||||
'concat:readSandbox',
|
||||
'concat:pbkdf2Worker',
|
||||
'offline-cache'
|
||||
]);
|
||||
grunt.registerTask('dist-js-unitTest', [
|
||||
'browserify:unitTest',
|
||||
'exorcise:unitTest',
|
||||
'concat:unitTest'
|
||||
]);
|
||||
grunt.registerTask('dist-js-integrationTest', [
|
||||
'browserify:integrationTest',
|
||||
'exorcise:integrationTest',
|
||||
'concat:integrationTest'
|
||||
]);
|
||||
grunt.registerTask('dist-copy', ['copy']);
|
||||
grunt.registerTask('dist', ['clean', 'dist-npm', 'dist-css', 'dist-copy', 'manifest']);
|
||||
grunt.registerTask('dist-assets', ['svgmin', 'svgstore', 'string-replace']);
|
||||
grunt.registerTask('dist-styleguide', ['sass:styleguide', 'autoprefixer:styleguide', 'csso:styleguide', 'assemble:styleguide']);
|
||||
// generate styleguide after manifest to forward version number to styleguide
|
||||
grunt.registerTask('dist', ['clean:dist', 'shell', 'dist-css', 'dist-js', 'dist-assets', 'dist-copy', 'manifest', 'dist-styleguide']);
|
||||
|
||||
grunt.registerTask('offline-cache', ['manifest', 'swPrecache:prod']);
|
||||
|
||||
// Test/Dev tasks
|
||||
grunt.registerTask('dev', ['connect:dev']);
|
||||
grunt.registerTask('test', ['jshint', 'connect:test', 'mocha']);
|
||||
grunt.registerTask('test', ['jshint', 'connect:test', 'mocha_phantomjs']);
|
||||
grunt.registerTask('prod', ['connect:prod']);
|
||||
|
||||
//
|
||||
@ -273,12 +784,12 @@ module.exports = function(grunt) {
|
||||
grunt.registerTask('manifest-dev', function() {
|
||||
patchManifest({
|
||||
suffix: ' (DEV)',
|
||||
version: '9999.9999.9999.9999'
|
||||
version: '9999.9999.9999'
|
||||
});
|
||||
});
|
||||
grunt.registerTask('manifest-test', function() {
|
||||
if (!version) {
|
||||
throw new Error('You must specify the version: "--release=1.0"');
|
||||
throw new Error('You must specify the version: "--release=1.0.0"');
|
||||
}
|
||||
|
||||
patchManifest({
|
||||
@ -288,16 +799,15 @@ module.exports = function(grunt) {
|
||||
deleteKey: true
|
||||
});
|
||||
});
|
||||
grunt.registerTask('manifest-stable', function() {
|
||||
grunt.registerTask('manifest-prod', function() {
|
||||
if (!version) {
|
||||
throw new Error('You must specify the version: "--release=1.0"');
|
||||
throw new Error('You must specify the version: "--release=1.0.0"');
|
||||
}
|
||||
|
||||
patchManifest({
|
||||
version: version,
|
||||
deleteKey: true,
|
||||
keyServer: 'https://keys.whiteout.io/',
|
||||
keychainServer: 'https://keychain.whiteout.io/'
|
||||
keyServer: 'https://keys.whiteout.io/'
|
||||
});
|
||||
});
|
||||
|
||||
@ -319,10 +829,6 @@ module.exports = function(grunt) {
|
||||
var ksIndex = manifest.permissions.indexOf('https://keys-test.whiteout.io/');
|
||||
manifest.permissions[ksIndex] = options.keyServer;
|
||||
}
|
||||
if (options.keychainServer) {
|
||||
var kcsIndex = manifest.permissions.indexOf('https://keychain-test.whiteout.io/');
|
||||
manifest.permissions[kcsIndex] = options.keychainServer;
|
||||
}
|
||||
if (options.deleteKey) {
|
||||
delete manifest.key;
|
||||
}
|
||||
@ -330,9 +836,9 @@ module.exports = function(grunt) {
|
||||
fs.writeFileSync(path, JSON.stringify(manifest, null, 2));
|
||||
}
|
||||
|
||||
grunt.registerTask('release-dev', ['dist', 'manifest-dev', 'compress']);
|
||||
grunt.registerTask('release-test', ['dist', 'manifest-test', 'compress']);
|
||||
grunt.registerTask('release-stable', ['dist', 'manifest-stable', 'compress']);
|
||||
grunt.registerTask('release-dev', ['dist', 'manifest-dev', 'swPrecache:prod', 'compress']);
|
||||
grunt.registerTask('release-test', ['dist', 'manifest-test', 'clean:release', 'swPrecache:prod', 'compress']);
|
||||
grunt.registerTask('release-prod', ['dist', 'manifest-prod', 'clean:release', 'swPrecache:prod', 'compress']);
|
||||
grunt.registerTask('default', ['release-dev']);
|
||||
|
||||
};
|
25
LICENSE.txt
@ -1,6 +1,21 @@
|
||||
Copyright © 2014, Whiteout Networks GmbH. All rights reserved.
|
||||
The MIT License (MIT)
|
||||
|
||||
The code is open for inspection and peer review by the security community.
|
||||
The code is currently not licensed under an open source license. If you're
|
||||
interested in contributing or getting a license, please get in touch with
|
||||
us (info@whiteout.io).
|
||||
Copyright (c) 2014 Whiteout Networks GmbH.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
107
README.md
@ -1,25 +1,23 @@
|
||||
![App Icon](https://raw.githubusercontent.com/whiteout-io/mail-html5/master/src/img/icon-128.png)
|
||||
|
||||
Whiteout Mail [![Build Status](https://travis-ci.org/whiteout-io/mail-html5.svg?branch=master)](https://travis-ci.org/whiteout-io/mail-html5)
|
||||
Whiteout Mail [![Build Status](https://travis-ci.org/whiteout-io/mail.svg?branch=master)](https://travis-ci.org/whiteout-io/mail)
|
||||
==========
|
||||
|
||||
Whiteout Mail is an easy to use email client with integrated OpenPGP encryption written in pure JavaScript. Download the official version under [whiteout.io](http://whiteout.io).
|
||||
Whiteout Mail is an easy to use email client with integrated OpenPGP encryption written in pure JavaScript. Download the official version under [whiteout.io](https://whiteout.io/#product).
|
||||
|
||||
![Screenshot](https://whiteout.io/img/screens.png)
|
||||
|
||||
### Features
|
||||
|
||||
You can read about product features and our future roadmap in our [FAQ](https://github.com/whiteout-io/mail-html5/wiki/FAQ).
|
||||
You can read about product features and our future roadmap in our [FAQ](https://github.com/whiteout-io/mail/wiki/FAQ).
|
||||
|
||||
### Privacy and Security
|
||||
|
||||
We take the privacy of your data very seriously. Here are some of the technical details:
|
||||
|
||||
* Messages are [encrypted end-to-end ](http://en.wikipedia.org/wiki/End-to-end_encryption) using the [OpenPGP](http://en.wikipedia.org/wiki/Pretty_Good_Privacy) standard. This means that only you and the recipient can read your mail. Your messages and private PGP key are stored encrypted on your computer.
|
||||
* The code has undergone a [full security audit](https://blog.whiteout.io/2015/06/11/whiteout-mail-1-0-and-security-audit-by-cure53/) by [Cure53](https://cure53.de).
|
||||
|
||||
* Users have the option to use [encrypted private key sync](https://blog.whiteout.io/2014/07/07/secure-pgp-key-sync-a-proposal/) if they want to use Whiteout on multiple devices.
|
||||
* Messages are [encrypted end-to-end ](http://en.wikipedia.org/wiki/End-to-end_encryption) using the [OpenPGP](http://en.wikipedia.org/wiki/Pretty_Good_Privacy) standard. This means that only you and the recipient can read your mail. Your messages and private PGP key are stored only on your computer (in IndexedDB).
|
||||
|
||||
* Like most native email clients whiteout mail uses raw [TCP sockets](http://developer.chrome.com/apps/socket.html) to communicate directly with your mail server via IMAP/SMTP.
|
||||
|
||||
* The app is deployed as a [Chrome Packaged App](https://developer.chrome.com/apps/about_apps.html) with [auditable static versions](https://github.com/whiteout-io/mail-html5/releases) in order to prevent [problems with host-based security](http://tonyarcieri.com/whats-wrong-with-webcrypto).
|
||||
* Users have the option to use [encrypted private key sync](https://github.com/whiteout-io/mail/wiki/Secure-OpenPGP-Key-Pair-Synchronization-via-IMAP) if they want to use Whiteout on multiple devices.
|
||||
|
||||
* [Content Security Policy (CSP)](http://www.html5rocks.com/en/tutorials/security/content-security-policy/) is enforced to prevent injection attacks.
|
||||
|
||||
@ -27,26 +25,36 @@ We take the privacy of your data very seriously. Here are some of the technical
|
||||
|
||||
* Displaying mail images is optional and opt-in by default.
|
||||
|
||||
* Like most native email clients, whiteout mail uses raw [TCP sockets](http://developer.chrome.com/apps/socket.html) to communicate directly with your mail server via IMAP/SMTP. TLS is used to protect your password and message data in transit.
|
||||
|
||||
* The app is deployed as a signed [Chrome Packaged App](https://developer.chrome.com/apps/about_apps.html) with [auditable static versions](https://github.com/whiteout-io/mail/releases) in order to prevent [problems with host-based security](https://blog.whiteout.io/2014/04/13/heartbleed-and-javascript-crypto/).
|
||||
|
||||
* The app can also be used from any modern web browser in environments where installing an app is not possible (e.g. a locked down corporate desktop). The IMAP/SMTP TLS sessions are still terminated in the user's browser using JS crypto ([Forge](https://github.com/digitalbazaar/forge)), but the encrypted TLS payload is proxied via [socket.io](http://socket.io/), due to the lack of raw sockets in the browser. **Please keep in mind that this mode of operation is not as secure as using the signed packaged app, since users must trust the webserver to deliver the correct code. This mode will still protect user against passive attacks like wiretapping (since PGP and TLS are still applied in the user's browser), but not against active attacks from the webserver. So it's best to decide which threat model applies to you.**
|
||||
|
||||
### Architecture
|
||||
|
||||
![client architecture](https://whiteout.io/img/app_layers.png)
|
||||
|
||||
### Reporting bugs and feature requests
|
||||
|
||||
* We will launch a bug bounty program later on for independant security researchers. If you find any security vulnerabilities, don't hesitate to contact us [security@whiteout.io](mailto:security@whiteout.io).
|
||||
* We will launch a bug bounty program later on for independent security researchers. If you find any security vulnerabilities, don't hesitate to contact us [security@whiteout.io](mailto:security@whiteout.io).
|
||||
|
||||
* You can also just create an [issue](https://github.com/whiteout-io/mail-html5/issues) on GitHub if you're missing a feature or just want to give us feedback. It would be much appreciated!
|
||||
* You can also just create an [issue](https://github.com/whiteout-io/mail/issues) on GitHub if you're missing a feature or just want to give us feedback. It would be much appreciated!
|
||||
|
||||
### Testing
|
||||
|
||||
You can download a prebuilt bundle under [releases](https://github.com/whiteout-io/mail-html5/releases) or build your own from source (requires [node.js](http://nodejs.org/download/), [grunt](http://gruntjs.com/getting-started#installing-the-cli) and [sass](http://sass-lang.com/install)):
|
||||
You can download a prebuilt bundle under [releases](https://github.com/whiteout-io/mail/releases) or build your own from source (requires [node.js](http://nodejs.org/download/), [grunt](http://gruntjs.com/getting-started#installing-the-cli) and [sass](http://sass-lang.com/install)):
|
||||
|
||||
npm install && npm test
|
||||
|
||||
This will download all dependencies, run the tests and build the Chrome Packaged App bundle **DEV.zip** which can be installed under [chrome://extensions](chrome://extensions) in developer mode.
|
||||
This will download all dependencies, run the tests and build the Chrome Packaged App bundle **release/whiteout-mail_DEV.zip** which can be installed under [chrome://extensions](chrome://extensions) in developer mode.
|
||||
|
||||
### Development
|
||||
For development you can start a connect dev server:
|
||||
|
||||
grunt dev
|
||||
|
||||
Then visit [http://localhost:8580/dist/#/desktop?dev=true](http://localhost:8580/dist/#/desktop?dev=true) for front-end code or [http://localhost:8580/test/unit/](http://localhost:8580/test/unit/) to test JavaScript changes. You can also start a watch task so you don't have rebuild everytime you make a change:
|
||||
Then visit [http://localhost:8580/dist/#/account?dev=true](http://localhost:8580/dist/#/account?dev=true) for front-end code or [http://localhost:8580/test/unit/](http://localhost:8580/test/unit/) to test JavaScript changes. You can also start a watch task so you don't have rebuild everytime you make a change:
|
||||
|
||||
grunt watch
|
||||
|
||||
@ -55,24 +63,75 @@ Then visit [http://localhost:8580/dist/#/desktop?dev=true](http://localhost:8580
|
||||
grunt release-test --release=0.0.0.x
|
||||
grunt release-stable --release=0.x.0
|
||||
|
||||
## Deploying Web App
|
||||
## Deploying Web App & Selfhosting
|
||||
|
||||
First build and generate the `dist/` directory:
|
||||
The App can be used either as a Chrome Packaged App or just by hosting it on your own trusted web server. You can build the app from source.
|
||||
|
||||
grunt
|
||||
### Build from source
|
||||
|
||||
Then deploy that directoy by adding it to a local git branch. Push that branch to your node.js server and then start the server:
|
||||
Clone the git repository
|
||||
|
||||
git clone https://github.com/whiteout-io/mail.git
|
||||
|
||||
Build and generate the `dist/` directory:
|
||||
|
||||
npm install && grunt
|
||||
|
||||
### Running the server
|
||||
|
||||
To test the server, start it in development mode (without SSL):
|
||||
|
||||
node server.js --dev
|
||||
|
||||
Navigate to [http://localhost:8889](http://localhost:8889) (or whatever port is set using the `PORT` environment variable).
|
||||
|
||||
To start the server for production use (this automatically redirects to `https`)
|
||||
|
||||
npm start
|
||||
|
||||
**A note on security: The app should not be used without SSL so it's best to set up a reverse proxy or Loadbalancer with your SSL certificates. If you are not sure how to do this it might be easier to use our managed web hosting or packaged apps under [https://whiteout.io/#product](https://whiteout.io/#product).**
|
||||
|
||||
You can limit incoming and outgoing connections to the socket.io proxy by setting the following environment variables:
|
||||
|
||||
# the web socket proxy listens to this port
|
||||
# if unset, defaults to 8889
|
||||
PORT=12345
|
||||
|
||||
# the socket.io proxy accepts connections from these origins to tunnel them to tcp,
|
||||
# separate with commas
|
||||
# if unset, defaults to 'localhost:' + port
|
||||
INBOUND_ORIGINS='foo:1234,bar:569'
|
||||
|
||||
# the socket.io proxy opens tcp connections with these ports to tunnel them to socket.io
|
||||
# separate with commas
|
||||
# if unset, defaults to '143,465,587,993' (25 is forbidden by default)
|
||||
OUTBOUND_PORTS='123,456,789'
|
||||
|
||||
To start the server in development mode (no forced HTTPS, iframe loads http content), run `node server.js --dev`
|
||||
|
||||
## License
|
||||
|
||||
Copyright © 2014, Whiteout Networks GmbH. All rights reserved.
|
||||
The MIT License (MIT)
|
||||
|
||||
The code is open for inspection and peer review by the security community.
|
||||
The code is currently not licensed under an open source license. If you're
|
||||
interested in contributing or getting a license, please get in touch with
|
||||
us (info@whiteout.io).
|
||||
Copyright (c) 2014 Whiteout Networks GmbH.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
|
||||
### Third party libraries
|
||||
|
||||
|
@ -1,9 +1,16 @@
|
||||
'use strict';
|
||||
|
||||
var port = process.env.PORT || 8889;
|
||||
|
||||
module.exports = {
|
||||
server: {
|
||||
port: process.env.PORT || 8889,
|
||||
host: "0.0.0.0"
|
||||
port: port,
|
||||
inboundOrigins: (process.env.INBOUND_ORIGINS || ('localhost:' + port)).split(',').map(function(host) {
|
||||
return host.trim();
|
||||
}),
|
||||
outboundPorts: (process.env.OUTBOUND_PORTS || '143,465,587,993').split(',').map(function(i) {
|
||||
return parseInt(i, 10);
|
||||
})
|
||||
},
|
||||
log: {
|
||||
level: "silly",
|
||||
|
72
package.json
@ -1,24 +1,8 @@
|
||||
{
|
||||
"name": "whiteout-mail",
|
||||
"version": "0.0.1",
|
||||
"description": "Mail App with integrated OpenPGP encryption.",
|
||||
"author": "Whiteout Networks",
|
||||
"homepage": "https://whiteout.io",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/whiteout-io/mail-html5.git"
|
||||
},
|
||||
"keywords": [
|
||||
"email",
|
||||
"mail",
|
||||
"client",
|
||||
"app",
|
||||
"openpgp",
|
||||
"pgp",
|
||||
"gpg",
|
||||
"imap",
|
||||
"smtp"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=0.10"
|
||||
},
|
||||
@ -27,42 +11,58 @@
|
||||
"start": "node server.js"
|
||||
},
|
||||
"dependencies": {
|
||||
"axe-logger": "~0.0.2",
|
||||
"compression": "^1.0.11",
|
||||
"crypto-lib": "~0.2.1",
|
||||
"dompurify": "~0.4.2",
|
||||
"express": "^4.8.3",
|
||||
"imap-client": "~0.4.0",
|
||||
"jquery": "~2.1.1",
|
||||
"mailreader": "~0.3.5",
|
||||
"ng-infinite-scroll": "~1.1.2",
|
||||
"pgpbuilder": "~0.4.0",
|
||||
"pgpmailer": "~0.4.0",
|
||||
"requirejs": "~2.1.14",
|
||||
"config": "^1.0.2",
|
||||
"express": "^4.8.3",
|
||||
"morgan": "^1.2.3",
|
||||
"npmlog": "^0.1.1",
|
||||
"socket.io": "^1.0.6"
|
||||
},
|
||||
"devDependencies": {
|
||||
"angularjs": "https://github.com/whiteout-io/angular.js/tarball/npm-version",
|
||||
"assemble": "~0.4.42",
|
||||
"axe-logger": "~0.0.2",
|
||||
"browsercrow": "https://github.com/whiteout-io/browsercrow/tarball/master",
|
||||
"browsersmtp": "https://github.com/whiteout-io/browsersmtp/tarball/master",
|
||||
"chai": "~1.7.2",
|
||||
"chai": "~1.9.2",
|
||||
"crypto-lib": "~0.2.1",
|
||||
"dompurify": "~0.7.3",
|
||||
"grunt": "~0.4.1",
|
||||
"grunt-contrib-clean": "~0.5.0",
|
||||
"grunt-contrib-copy": "~0.4.1",
|
||||
"grunt-manifest": "^0.4.0",
|
||||
"grunt-angular-templates": "~0.5.7",
|
||||
"grunt-autoprefixer": "~0.7.2",
|
||||
"grunt-browserify": "3.7.0",
|
||||
"insert-module-globals": "6.5.0",
|
||||
"grunt-contrib-clean": "~0.5.0",
|
||||
"grunt-contrib-compress": "~0.5.2",
|
||||
"grunt-contrib-concat": "^0.5.0",
|
||||
"grunt-contrib-connect": "~0.5.0",
|
||||
"grunt-contrib-copy": "~0.4.1",
|
||||
"grunt-contrib-jshint": "~0.6.4",
|
||||
"grunt-contrib-sass": "~0.7.3",
|
||||
"grunt-contrib-uglify": "^0.6.0",
|
||||
"grunt-contrib-watch": "~0.5.3",
|
||||
"grunt-csso": "~0.6.1",
|
||||
"grunt-mocha": "~0.4.1",
|
||||
"grunt-node-webkit-builder": "~0.1.17",
|
||||
"mocha": "~1.13.0",
|
||||
"sinon": "~1.7.3"
|
||||
"grunt-exorcise": "^0.2.0",
|
||||
"grunt-manifest": "^0.4.0",
|
||||
"grunt-mocha-phantomjs": "^0.7.0",
|
||||
"grunt-shell": "~1.1.1",
|
||||
"grunt-string-replace": "~1.0.0",
|
||||
"grunt-svgmin": "~1.0.0",
|
||||
"grunt-svgstore": "~0.3.4",
|
||||
"handlebars-helper-compose": "~0.2.12",
|
||||
"iframe-resizer": "^2.8.3",
|
||||
"imap-client": "~0.14.2",
|
||||
"jquery": "~2.1.1",
|
||||
"mailbuild": "^0.3.7",
|
||||
"mailreader": "~0.4.0",
|
||||
"mocha": "^1.21.4",
|
||||
"ng-infinite-scroll": "~1.1.2",
|
||||
"openpgp": "^1.0.0",
|
||||
"pgpbuilder": "~0.6.0",
|
||||
"pgpmailer": "~0.9.1",
|
||||
"sinon": "~1.7.3",
|
||||
"sw-precache": "^1.3.0",
|
||||
"tcp-socket": "~0.5.0",
|
||||
"time-grunt": "^1.0.0",
|
||||
"wo-smtpclient": "~0.6.0"
|
||||
}
|
||||
}
|
2
res/android-release-keys.properties
Normal file
@ -0,0 +1,2 @@
|
||||
storeFile=/Users/tanx/.keystore
|
||||
keyAlias=mykey
|
@ -1,2 +0,0 @@
|
||||
key.store=${user.home}/.keystore
|
||||
key.alias=mykey
|
45
res/aws_release.sh
Executable file
@ -0,0 +1,45 @@
|
||||
#!/bin/sh
|
||||
|
||||
# go to root
|
||||
cd `dirname $0`
|
||||
cd ..
|
||||
|
||||
if [ "$#" -ne 3 ] || [ "$1" != "prod" ] && [ "$1" != "test" ] ; then
|
||||
echo 'Usage: ./res/aws_release prod|test from-branch 1.0.0'
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# switch branch
|
||||
git checkout $2
|
||||
git branch -D release/$1
|
||||
git checkout -b release/$1
|
||||
git merge $2 --no-edit
|
||||
|
||||
# abort if tests fail
|
||||
set -e
|
||||
|
||||
# build and test
|
||||
rm -rf node_modules/
|
||||
npm cache clear
|
||||
npm install
|
||||
npm test
|
||||
grunt release-$1 --release=$3
|
||||
|
||||
# install only production dependencies
|
||||
rm -rf node_modules/
|
||||
npm install --production
|
||||
|
||||
# delete .gitignore files before adding to git for aws deployment
|
||||
find node_modules/ -name ".gitignore" -exec rm -rf {} \;
|
||||
|
||||
# Add runtime dependencies to git
|
||||
sed -i "" '/dist/d' .gitignore
|
||||
sed -i "" '/node_modules/d' .gitignore
|
||||
git add .gitignore node_modules/ dist/
|
||||
git commit -m "Update release"
|
||||
|
||||
# push to aws
|
||||
eb deploy
|
||||
|
||||
# switch back to $2 branch
|
||||
git checkout $2
|
@ -1,10 +1,18 @@
|
||||
#!/bin/sh
|
||||
|
||||
# reads values from JSON
|
||||
jsonValue() {
|
||||
KEY=$1
|
||||
num=$2
|
||||
awk -F"[,:}]" '{for(i=1;i<=NF;i++){if($i~/'$KEY'\042/){print $(i+1)}}}' | tr -d '"' | sed -n ${num}p
|
||||
}
|
||||
|
||||
# go to root
|
||||
cd `dirname $0`
|
||||
cd ..
|
||||
|
||||
DIR=release/cca
|
||||
PROJNAME=`less dist/manifest.json | jsonValue name 1 | sed -e 's/^ *//' -e 's/ *$//'`
|
||||
|
||||
# create
|
||||
rm -rf $DIR
|
||||
@ -15,5 +23,51 @@ cca create $DIR/Whiteout --link-to=dist/manifest.json
|
||||
cd $DIR/Whiteout
|
||||
cca prepare
|
||||
|
||||
#
|
||||
# post-build tweaks
|
||||
#
|
||||
|
||||
echo ""
|
||||
echo "## Running post-build tweaks"
|
||||
|
||||
# cp signing config
|
||||
cp ../../../res/ant.properties ./platforms/android/
|
||||
echo "Copy Android signing config"
|
||||
cp ../../../res/android-release-keys.properties .
|
||||
|
||||
# status bar should not overlay the web view
|
||||
echo "Tweaking iOS status bar to not overlay the web view"
|
||||
sed -i "" 's/StatusBarOverlaysWebView" value="true"/StatusBarOverlaysWebView" value="false"/' "platforms/ios/$PROJNAME/config.xml"
|
||||
|
||||
# status bar should use dark font on light background
|
||||
echo "Tweaking iOS status bar to use dark font on light background"
|
||||
sed -i "" 's/StatusBarStyle" value="lightcontent"/StatusBarStyle" value="darkcontent"/' "platforms/ios/$PROJNAME/config.xml"
|
||||
|
||||
# copy splash screens
|
||||
echo "Copying splash screens"
|
||||
cp ../../../src/img/Default* "platforms/ios/$PROJNAME/Resources/splash"
|
||||
|
||||
# fixing missing/wrong icons
|
||||
echo "Fixing wrong/missing iOS icons"
|
||||
cp ../../../src/img/icon-40-ios.png "platforms/ios/$PROJNAME/Resources/icons/icon-40.png"
|
||||
cp ../../../src/img/icon-80-ios.png "platforms/ios/$PROJNAME/Resources/icons/icon-40@2x.png"
|
||||
cp ../../../src/img/icon-120-ios.png "platforms/ios/$PROJNAME/Resources/icons/icon-40@3x.png"
|
||||
cp ../../../src/img/icon-50-ios.png "platforms/ios/$PROJNAME/Resources/icons/icon-50.png"
|
||||
cp ../../../src/img/icon-100-ios.png "platforms/ios/$PROJNAME/Resources/icons/icon-50@2x.png"
|
||||
cp ../../../src/img/icon-60-ios.png "platforms/ios/$PROJNAME/Resources/icons/icon-60.png"
|
||||
cp ../../../src/img/icon-120-ios.png "platforms/ios/$PROJNAME/Resources/icons/icon-60@2x.png"
|
||||
cp ../../../src/img/icon-180-ios.png "platforms/ios/$PROJNAME/Resources/icons/icon-60@3x.png"
|
||||
cp ../../../src/img/icon-72-ios.png "platforms/ios/$PROJNAME/Resources/icons/icon-72.png"
|
||||
cp ../../../src/img/icon-144-ios.png "platforms/ios/$PROJNAME/Resources/icons/icon-72@2x.png"
|
||||
cp ../../../src/img/icon-76-ios.png "platforms/ios/$PROJNAME/Resources/icons/icon-76.png"
|
||||
cp ../../../src/img/icon-152-ios.png "platforms/ios/$PROJNAME/Resources/icons/icon-76@2x.png"
|
||||
cp ../../../src/img/icon-29-ios.png "platforms/ios/$PROJNAME/Resources/icons/icon-small.png"
|
||||
cp ../../../src/img/icon-58-ios.png "platforms/ios/$PROJNAME/Resources/icons/icon-small@2x.png"
|
||||
cp ../../../src/img/icon-87-ios.png "platforms/ios/$PROJNAME/Resources/icons/icon-small@3x.png"
|
||||
cp ../../../src/img/icon-57-ios.png "platforms/ios/$PROJNAME/Resources/icons/icon.png"
|
||||
cp ../../../src/img/icon-114-ios.png "platforms/ios/$PROJNAME/Resources/icons/icon@2x.png"
|
||||
|
||||
# print reminder for manual work in xcode
|
||||
echo ""
|
||||
echo "### Reminder for manual steps required for iOS release"
|
||||
echo "### Change deployment target to iOS 8.1"
|
||||
echo "### Add retina icons to build, migrate to icon set, fix splash screens config"
|
||||
|
@ -4,6 +4,8 @@
|
||||
cd `dirname $0`
|
||||
cd ..
|
||||
|
||||
cd release/cca/Whiteout
|
||||
DIR=release/cca
|
||||
|
||||
./platforms/android/cordova/build --release
|
||||
#prepare
|
||||
cd $DIR/Whiteout
|
||||
cca build android --release
|
78
server.js
@ -5,6 +5,7 @@ process.chdir(__dirname);
|
||||
var cluster = require('cluster');
|
||||
var config = require('config');
|
||||
var log = require('npmlog');
|
||||
var os = require('os');
|
||||
|
||||
log.level = config.log.level;
|
||||
|
||||
@ -70,24 +71,33 @@ app.disable('x-powered-by');
|
||||
// web server config
|
||||
//
|
||||
|
||||
var port = process.env.PORT || 8585,
|
||||
development = process.argv[2] === '--dev';
|
||||
var development = (process.argv[2] === '--dev');
|
||||
|
||||
// set HTTP headers
|
||||
app.use(function(req, res, next) {
|
||||
// prevent rendering website in foreign iframe (Clickjacking)
|
||||
res.set('X-Frame-Options', 'DENY');
|
||||
// HSTS
|
||||
res.set('Strict-Transport-Security', 'max-age=16070400; includeSubDomains');
|
||||
// CSP
|
||||
var iframe = development ? "http://" + req.hostname + ":" + port : "https://" + req.hostname; // allow iframe to load assets
|
||||
res.set('Content-Security-Policy', "default-src 'self' " + iframe + "; object-src 'none'; connect-src *; style-src 'self' 'unsafe-inline' " + iframe + "; img-src 'self' data:");
|
||||
var iframe = development ? "http://" + req.hostname + ":" + config.server.port : "https://" + req.hostname; // allow iframe to load assets
|
||||
var csp = "default-src 'self' " + iframe + "; object-src 'none'; connect-src *; style-src 'self' 'unsafe-inline' " + iframe + "; img-src *";
|
||||
res.set('Content-Security-Policy', csp);
|
||||
res.set('X-Content-Security-Policy', csp);
|
||||
// set Cache-control Header (for AppCache)
|
||||
res.set('Cache-control', 'public, max-age=0');
|
||||
next();
|
||||
});
|
||||
app.use('/service-worker.js', noCache);
|
||||
app.use('/appcache.manifest', noCache);
|
||||
|
||||
app.use('/appcache.manifest', function(req, res, next) {
|
||||
function noCache(req, res, next) {
|
||||
res.set('Cache-control', 'no-cache');
|
||||
next();
|
||||
}
|
||||
app.use('/tpl/read-sandbox.html', function(req, res, next) {
|
||||
res.set('X-Frame-Options', 'SAMEORIGIN');
|
||||
next();
|
||||
});
|
||||
|
||||
// redirect all http traffic to https
|
||||
@ -110,50 +120,49 @@ app.use(express.static(__dirname + '/dist'));
|
||||
//
|
||||
|
||||
io.on('connection', function(socket) {
|
||||
|
||||
log.info('io', 'New connection [%s]', socket.conn.id);
|
||||
|
||||
var idCounter = 0;
|
||||
log.info('io', 'New connection [%s] from %s', socket.conn.id, socket.conn.remoteAddress);
|
||||
|
||||
socket.on('open', function(data, fn) {
|
||||
var socketId = ++idCounter;
|
||||
var tcp;
|
||||
if (!development && config.server.outboundPorts.indexOf(data.port) < 0) {
|
||||
log.info('io', 'Open request to %s:%s was rejected, closing [%s]', data.host, data.port, socket.conn.id);
|
||||
socket.disconnect();
|
||||
return;
|
||||
}
|
||||
|
||||
log.verbose('io', 'Open request to %s:%s [%s:%s]', data.host, data.port, socket.conn.id, socketId);
|
||||
|
||||
tcp = net.connect(data.port, data.host, function() {
|
||||
log.verbose('io', 'Opened tcp connection to %s:%s [%s:%s]', data.host, data.port, socket.conn.id, socketId);
|
||||
log.verbose('io', 'Open request to %s:%s [%s]', data.host, data.port, socket.conn.id);
|
||||
var tcp = net.connect(data.port, data.host, function() {
|
||||
log.verbose('io', 'Opened tcp connection to %s:%s [%s]', data.host, data.port, socket.conn.id);
|
||||
|
||||
tcp.on('data', function(chunk) {
|
||||
log.silly('io', 'Received %s bytes from %s:%s [%s:%s]', chunk.length, data.host, data.port, socket.conn.id, socketId);
|
||||
socket.emit('data-' + socketId, chunk);
|
||||
log.silly('io', 'Received %s bytes from %s:%s [%s]', chunk.length, data.host, data.port, socket.conn.id);
|
||||
socket.emit('data', chunk);
|
||||
});
|
||||
|
||||
tcp.on('error', function(err) {
|
||||
log.verbose('io', 'Error for %s:%s [%s:%s]: %s', data.host, data.port, socket.conn.id, socketId, err.message);
|
||||
socket.emit('error-' + socketId, err.message);
|
||||
log.verbose('io', 'Error for %s:%s [%s]: %s', data.host, data.port, socket.conn.id, err.message);
|
||||
socket.emit('error', err.message);
|
||||
});
|
||||
|
||||
tcp.on('end', function() {
|
||||
socket.emit('end-' + socketId);
|
||||
socket.emit('end');
|
||||
});
|
||||
|
||||
tcp.on('close', function() {
|
||||
log.verbose('io', 'Closed tcp connection to %s:%s [%s:%s]', data.host, data.port, socket.conn.id, socketId);
|
||||
socket.emit('close-' + socketId);
|
||||
log.verbose('io', 'Closed tcp connection to %s:%s [%s]', data.host, data.port, socket.conn.id);
|
||||
socket.emit('close');
|
||||
|
||||
socket.removeAllListeners('data-' + socketId);
|
||||
socket.removeAllListeners('end-' + socketId);
|
||||
socket.removeAllListeners('data');
|
||||
socket.removeAllListeners('end');
|
||||
});
|
||||
|
||||
socket.on('data-' + socketId, function(chunk, fn) {
|
||||
socket.on('data', function(chunk, fn) {
|
||||
if (!chunk || !chunk.length) {
|
||||
if (typeof fn === 'function') {
|
||||
fn();
|
||||
}
|
||||
return;
|
||||
}
|
||||
log.silly('io', 'Sending %s bytes to %s:%s [%s:%s]', chunk.length, data.host, data.port, socket.conn.id, socketId);
|
||||
log.silly('io', 'Sending %s bytes to %s:%s [%s]', chunk.length, data.host, data.port, socket.conn.id);
|
||||
tcp.write(chunk, function() {
|
||||
if (typeof fn === 'function') {
|
||||
fn();
|
||||
@ -161,29 +170,30 @@ io.on('connection', function(socket) {
|
||||
});
|
||||
});
|
||||
|
||||
socket.on('end-' + socketId, function() {
|
||||
log.verbose('io', 'Received request to close connection to %s:%s [%s:%s]', data.host, data.port, socket.conn.id, socketId);
|
||||
socket.on('end', function() {
|
||||
log.verbose('io', 'Received request to close connection to %s:%s [%s]', data.host, data.port, socket.conn.id);
|
||||
tcp.end();
|
||||
});
|
||||
|
||||
if (typeof fn === 'function') {
|
||||
fn(socketId);
|
||||
fn(os.hostname());
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
socket.on('disconnect', function() {
|
||||
log.info('io', 'Closed connection [%s]', socket.conn.id);
|
||||
log.verbose('io', 'Closed connection [%s], closing connection to %s:%s ', socket.conn.id, data.host, data.port);
|
||||
tcp.end();
|
||||
socket.removeAllListeners();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
//
|
||||
// start server
|
||||
//
|
||||
|
||||
server.listen(port);
|
||||
server.listen(config.server.port);
|
||||
if (development) {
|
||||
console.log(' > starting in development mode');
|
||||
}
|
||||
console.log(' > listening on http://localhost:' + port + '\n');
|
||||
console.log(' > listening on http://localhost:' + config.server.port + '\n');
|
@ -2,19 +2,13 @@
|
||||
|
||||
chrome.app.runtime.onLaunched.addListener(function() {
|
||||
|
||||
chrome.runtime.getPlatformInfo(function(info) {
|
||||
// don't render statusbar over app UI on iOS
|
||||
if (info.os === 'cordova-ios' && window.StatusBar) {
|
||||
window.StatusBar.overlaysWebView(false);
|
||||
}
|
||||
|
||||
// open chrome app in new window
|
||||
chrome.app.window.create('index.html', {
|
||||
'bounds': {
|
||||
'width': 1024,
|
||||
'height': 768
|
||||
id: '0',
|
||||
innerBounds: {
|
||||
width: 1280,
|
||||
height: 800
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
});
|
@ -1,28 +0,0 @@
|
||||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
||||
<svg xmlns="http://www.w3.org/2000/svg">
|
||||
<metadata>Generated by IcoMoon</metadata>
|
||||
<defs>
|
||||
<font id="icons" horiz-adv-x="1024">
|
||||
<font-face units-per-em="1024" ascent="960" descent="-64" />
|
||||
<missing-glyph horiz-adv-x="1024" />
|
||||
<glyph unicode=" " d="" horiz-adv-x="0" />
|
||||
<glyph unicode="" d="M512 960c-282.046 0-512-229.954-512-512s229.954-512 512-512c282.046 0 512 229.954 512 512s-229.954 512-512 512zM620.454 448l216.954-216.954-108.454-108.454-216.954 216.954-216.954-216.954-108.454 108.454 216.954 216.954-216.954 216.954 108.454 108.454 216.954-216.954 216.954 216.954 108.454-108.454-216.954-216.954z" />
|
||||
<glyph unicode="" d="M923.090 828.37h426.728v-125.254h-426.728zM1076.13 976.802h125.254v-426.728h-125.254zM848.85-39.052c-4.654-32.488 0-32.488-46.406-37.096-27.834-4.654-194.84-4.654-366.452-4.654-194.84 0-398.894 0-412.812 4.654-55.668 13.918-23.18 120.6 51.014 171.614 60.322 37.096 180.922 97.42 213.364 102.028 46.406 9.262 51.014 37.096 0 125.254-9.262 18.572-23.18 78.848-23.18 143.778 0 102.028 18.572 171.614 106.682 208.756 18.572 4.654 37.096 9.262 55.668 9.262 60.322 0 115.944-32.488 139.17-83.502 32.488-64.93 18.572-236.544-18.572-296.866-41.752-69.586-37.096-92.766 9.262-102.028 27.834-9.262 120.6-51.014 208.756-97.42 60.326-32.442 92.768-88.112 83.506-143.78zM1136.454 81.548c0-23.18 0-27.834-32.488-32.488-18.572-4.654-102.028-4.654-208.756-4.654-18.572 41.752-51.014 83.502-102.028 106.682-55.668 32.488-115.944 60.322-167.006 83.502 32.488 13.918 60.322 27.834 74.24 32.488 32.488 9.262 37.096 27.834 0 97.42-9.262 18.572-18.572 64.93-23.18 115.944 0 78.848 18.572 134.516 88.11 162.35 13.918 4.654 27.834 4.654 41.752 4.654 46.406 0 88.11-23.18 106.682-64.93 23.18-51.014 13.918-185.53-13.918-236.544-32.488-55.668-27.834-74.24 9.262-78.848 23.18-4.654 92.766-41.752 162.35-78.848 41.8-23.226 69.588-64.978 64.98-106.728z" horiz-adv-x="1348" />
|
||||
<glyph unicode="" d="M0 551.488l458.048 420.416v-213.312c884.736 0 821.952-840.768 821.952-840.768-175.68 583.552-821.952 414.144-821.952 414.144v-213.312l-458.048 432.832z" horiz-adv-x="1280" />
|
||||
<glyph unicode="" d="M677.79 796.648c4.876 4.876 39.010 39.010 97.524 58.514 78.020 24.38 160.914 4.876 224.304-58.514s87.772-141.41 58.514-224.304c-19.504-58.514-53.638-97.524-58.514-102.4l-448.61-448.61c-78.020-78.020-273.066-180.42-453.486 0s-78.020 375.466 0 448.61l482.742 482.742c19.504 19.504 48.762 19.504 63.39 0 19.504-19.504 19.504-48.762 0-63.39l-482.742-482.742c-9.752-4.876-160.914-160.914 0-321.828 156.038-156.038 307.2-14.628 321.828 0l448.61 453.486c0 0 24.38 24.38 39.010 63.39 14.628 48.762 4.876 87.772-39.010 131.658-87.772 87.772-175.542 14.628-195.048 0l-419.352-419.352c-14.628-14.628-24.38-39.010 0-68.266 24.38-24.38 48.762-14.628 63.39 0l292.572 292.572c19.504 14.628 48.762 14.628 63.39 0 19.504-19.504 19.504-48.762 0-68.266l-292.572-287.696c-39.010-39.010-121.904-68.266-195.048 0-73.142 68.266-39.010 156.038 0 195.048l429.108 419.348z" horiz-adv-x="1072" />
|
||||
<glyph unicode="" d="M0 951.326h1445.648v-193.114h-1445.648zM0 137.788h1445.648v-193.174h-1445.648zM0 547.508h1445.648v-193.174h-1445.648z" horiz-adv-x="1444" />
|
||||
<glyph unicode="" d="M764.712 818.958c26.138 0 46.996-20.912 46.996-46.996v-31.366c0-20.912-15.684-41.822-36.594-46.996v-679.182c0-41.822-36.594-78.362-83.59-78.362l-574.626-0.056c-46.996 0-83.59 36.594-83.59 78.362v679.182c-20.912 5.228-36.596 26.14-36.596 47.050v31.314c0 26.138 20.912 46.996 46.996 46.996h141.042l0.056 57.506c0 46.996 36.54 83.59 78.362 83.59h276.912c46.996 0 83.59-36.594 83.59-83.59v-57.452h141.042zM670.666 30.046c5.228 0 10.456 5.228 10.456 10.456v653.042h-553.822v-653.042c0-5.228 5.228-10.456 10.456-10.456h532.91zM237.030 82.27c-26.138 0-46.996 20.912-46.996 46.996l-0.002 465.004c0 26.138 20.912 41.822 46.996 41.822h10.456c26.138 0 46.996-20.912 46.996-41.822v-465.004c0-26.138-20.912-46.996-46.996-46.996h-10.454zM263.168 886.864c-5.228 0-10.456 0-10.456-10.454v-57.452h302.996v57.452c0 5.228-5.228 10.456-10.456 10.456l-282.084-0.002zM398.982 82.27c-26.138 0-46.996 20.912-46.996 46.996v465.004c0 26.138 20.912 41.822 46.996 41.822h5.228c26.138 0 46.996-20.912 46.996-41.822v-465.004c0-26.138-20.912-46.996-46.996-46.996h-5.228zM560.936 82.27c-26.138 0-46.996 20.912-46.996 46.996v465.004c0 26.138 20.912 41.822 46.996 41.822h10.456c26.138 0 46.996-20.912 46.996-41.822v-465.004c0-26.138-20.912-46.996-46.996-46.996h-10.456z" horiz-adv-x="808" />
|
||||
<glyph unicode="" d="M876.828 327.396l126.066 126.066v-372.622c0-76.744-60.302-136.988-131.528-136.988l-739.838-0.058c-76.744 0-131.528 60.302-131.528 136.988v734.378c0 76.688 60.302 136.99 131.528 136.99h750.762l-126.066-126.066h-580.836c-27.42 0-49.322-21.902-49.322-49.322v-652.118c0-27.42 21.902-49.322 49.322-49.322h652.118c27.42 0 49.322 21.902 49.322 49.322v202.752zM613.774 239.73l-131.528 131.528-49.322-180.85 180.85 49.322zM657.636 283.592l427.464 427.464-131.586 131.468-427.406-421.944 131.528-136.988zM1134.364 754.858l60.302 60.302-136.988 136.99-60.302-60.302 136.988-136.99z" horiz-adv-x="1194" />
|
||||
<glyph unicode="" d="M117.76 954.88l906.176-906.112-121.408-121.408-906.176 906.112zM-3.648 57.536l906.112 906.112 121.408-121.344-906.112-906.176z" />
|
||||
<glyph unicode="" d="M0 960l1024-1024h-1024z" />
|
||||
<glyph unicode="" d="M681.984 655.104v-119.744h-153.6v119.744c0 81.472-64.768 147.712-144.384 147.712s-144.384-66.24-144.384-147.712v-119.744h-153.6v119.744c-0.064 168.064 133.696 304.896 297.984 304.896 164.352 0 297.984-136.832 297.984-304.896zM0 476.096v-540.096h768v540.096h-768zM308.224-0.896l24.192 195.968 5.12 41.792c-21.632 15.232-35.712 40.64-35.712 69.44 0 11.136 2.112 21.696 5.888 31.296 12.096 30.848 41.664 52.736 76.288 52.736s64.192-21.888 76.288-52.736c3.776-9.664 5.888-20.224 5.888-31.296 0-28.8-14.208-54.272-35.84-69.312l5.184-41.856 24.064-195.968h-151.36z" horiz-adv-x="768" />
|
||||
<glyph unicode="" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM512 32c-229.75 0-416 186.25-416 416s186.25 416 416 416 416-186.25 416-416-186.25-416-416-416zM448 704h128v-128h-128zM640 192h-256v64h64v192h-64v64h192v-256h64z" />
|
||||
<glyph unicode="" d="M768 320.032l-182.82 182.822 438.82 329.15-128.010 127.996-548.52-219.442-172.7 172.706c-49.78 49.778-119.302 61.706-154.502 26.508-35.198-35.198-23.268-104.726 26.51-154.5l172.686-172.684-219.464-548.582 127.99-128.006 329.19 438.868 182.826-182.828v-255.98h127.994l63.992 191.988 191.988 63.996v127.992l-255.98-0.004z" />
|
||||
<glyph unicode="" d="M1120.549 655.726v-119.954h-155.063v119.954c0 81.92-64.366 146.286-143.36 146.286s-143.36-67.291-143.36-146.286v-119.954h-155.063v119.954c0 166.766 134.583 304.274 298.423 304.274s298.423-137.509 298.423-304.274zM0 477.257v-541.257h766.537v541.257h-766.537zM307.2 0.366l23.406 196.023 5.851 40.96c-20.48 14.629-35.109 40.96-35.109 70.217 0 11.703 2.926 20.48 5.851 32.183 11.703 32.183 40.96 52.663 76.069 52.663s64.366-20.48 76.069-52.663c2.926-8.777 5.851-20.48 5.851-32.183 0-29.257-14.629-55.589-35.109-70.217l5.851-40.96 23.406-196.023h-152.137z" horiz-adv-x="1121" />
|
||||
<glyph unicode="" d="M1352.048-64l-49.054 141.030c-91.976 257.533-300.455 309.653-459.88 309.653-76.647 0-144.096-12.263-174.754-21.461l9.198-214.611-459.88 389.365 423.090 420.024 9.198-202.347c85.844 3.066 162.491-6.132 233.006-24.527h6.132l3.066-3.066c469.078-122.635 459.88-640.766 459.88-643.832v-150.228zM843.114 441.868c144.096 0 324.982-39.856 441.485-208.479-30.659 150.228-125.701 374.036-407.76 444.551l-6.132 3.066c-70.515 18.395-153.293 24.527-245.269 21.461h-27.593l-6.132 134.898-291.257-288.192 318.85-269.796-6.132 128.766 21.461 6.132c0 0 91.976 27.593 208.479 27.593zM462.946 153.677l-462.946 389.365 423.090 416.958 12.263-171.689-55.186-6.132-6.132 52.12-291.257-288.192 315.784-266.731-3.066 49.054 55.186 6.132z" horiz-adv-x="1355" />
|
||||
<glyph unicode="" d="M1073.595-64l-40.843 134.199c-81.687 268.399-297.573 323.829-466.781 323.829-61.265 0-110.86-8.752-137.117-11.67v-207.134l-428.855 399.681 428.855 385.094v-198.382c212.969-5.835 376.342-70.017 490.12-192.547 186.712-201.299 166.291-481.368 166.291-493.037l-11.67-140.034zM568.889 449.459c125.447 0 335.499-32.091 455.111-224.638-14.587 93.356-52.513 212.969-142.952 312.16-107.943 116.695-268.399 175.043-475.533 175.043h-26.256v131.282l-300.49-268.399 300.49-277.151v128.365l20.422 5.835c0 0 70.017 17.504 169.208 17.504z" horiz-adv-x="1085" />
|
||||
<glyph unicode="" d="M458.105-64v272.842h-458.105v495.158l458.105 3.368v252.632l461.474-424.421 101.053-97.684-562.526-501.895zM60.632 269.474h458.105v-198.737l410.947 367.158-53.895 53.895-357.053 330.105v-175.158l-458.105-3.368v-373.895z" horiz-adv-x="1017" />
|
||||
<glyph unicode="" d="M-0.001 447.998l511.995 511.995 47.513-47.513-511.995-511.995-47.513 47.513zM47.517 495.519l511.995-511.995-47.513-47.513-511.995 511.995 47.513 47.513z" horiz-adv-x="560" />
|
||||
<glyph unicode="" d="M890 186.6l-169.6 171.8c27.6 48.2 42 101.8 42 155.8 0 175.2-142.4 317.8-317.2 317.8s-317.2-142.6-317.2-317.8c0-175.2 142.4-317.8 317.2-317.8 55.8 0 111 15.4 160.2 44.8l168.8-171.2c3.8-3.8 9.2-6.2 14.6-6.2s10.8 2.2 14.6 6.2l86.6 87.6c8 8.2 8 21 0 29zM445.2 708.2c106.8 0 193.6-87 193.6-194s-86.8-194-193.6-194c-106.8 0-193.6 87-193.6 194s86.8 194 193.6 194z" />
|
||||
</font></defs></svg>
|
Before Width: | Height: | Size: 9.3 KiB |
BIN
src/img/Default-568h@2x~iphone.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
src/img/Default-667h.png
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
src/img/Default-736h.png
Normal file
After Width: | Height: | Size: 30 KiB |
BIN
src/img/Default-Landscape-736h.png
Normal file
After Width: | Height: | Size: 28 KiB |
BIN
src/img/Default-Landscape@2x~ipad.png
Normal file
After Width: | Height: | Size: 34 KiB |
BIN
src/img/Default-Landscape~ipad.png
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
src/img/Default-Portrait@2x~ipad.png
Normal file
After Width: | Height: | Size: 34 KiB |
BIN
src/img/Default-Portrait~ipad.png
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
src/img/Default@2x~iphone.png
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
src/img/Default~iphone.png
Normal file
After Width: | Height: | Size: 4.9 KiB |
Before Width: | Height: | Size: 8.8 KiB |
Before Width: | Height: | Size: 14 KiB |
BIN
src/img/icon-100-ios.png
Normal file
After Width: | Height: | Size: 5.7 KiB |
BIN
src/img/icon-114-ios.png
Normal file
After Width: | Height: | Size: 7.3 KiB |
Before Width: | Height: | Size: 12 KiB |
BIN
src/img/icon-144-android.png
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
src/img/icon-144-ios.png
Normal file
After Width: | Height: | Size: 9.6 KiB |
BIN
src/img/icon-180-ios.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
src/img/icon-192-android.png
Normal file
After Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
BIN
src/img/icon-29-ios.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
src/img/icon-36-android.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
BIN
src/img/icon-40-ios.png
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
src/img/icon-48-android.png
Normal file
After Width: | Height: | Size: 2.4 KiB |
BIN
src/img/icon-50-ios.png
Normal file
After Width: | Height: | Size: 2.4 KiB |
BIN
src/img/icon-57-ios.png
Normal file
After Width: | Height: | Size: 2.8 KiB |
BIN
src/img/icon-58-ios.png
Normal file
After Width: | Height: | Size: 2.8 KiB |
BIN
src/img/icon-60-android.png
Normal file
After Width: | Height: | Size: 4.2 KiB |
BIN
src/img/icon-60-ios.png
Normal file
After Width: | Height: | Size: 3.0 KiB |
BIN
src/img/icon-72-android.png
Normal file
After Width: | Height: | Size: 4.8 KiB |
BIN
src/img/icon-72-ios.png
Normal file
After Width: | Height: | Size: 3.8 KiB |
BIN
src/img/icon-76-ios.png
Normal file
After Width: | Height: | Size: 4.0 KiB |
BIN
src/img/icon-78-android.png
Normal file
After Width: | Height: | Size: 3.8 KiB |
BIN
src/img/icon-80-ios.png
Normal file
After Width: | Height: | Size: 4.4 KiB |
BIN
src/img/icon-87-ios.png
Normal file
After Width: | Height: | Size: 4.6 KiB |
BIN
src/img/icon-96-android.png
Normal file
After Width: | Height: | Size: 5.3 KiB |
20
src/img/icon.svg
Normal file
@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 17.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="212.72px" height="212.72px" viewBox="0 0 212.72 212.72" enable-background="new 0 0 212.72 212.72" xml:space="preserve">
|
||||
<polygon opacity="0.55" fill="#00C6FF" points="124.65,160.54 49.73,160.54 49.73,82.94 "/>
|
||||
<path opacity="0.3" fill="#00C6FF" d="M162.98,82.62h-44.36c-1.82-5.01-6.63-8.6-12.27-8.6c-5.63,0-10.44,3.59-12.26,8.6H49.73
|
||||
l56.63-58.65L162.98,82.62z"/>
|
||||
<polygon opacity="0.4" fill="#00C6FF" points="162.98,82.94 162.98,160.54 124.65,160.54 106.36,141.59 "/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" fill="#00C6FF" d="M128.46,87.06v10.45h-9.06V87.06c0-1.56-0.27-3.05-0.78-4.44
|
||||
c-1.82-5.01-6.63-8.6-12.27-8.6c-5.63,0-10.44,3.59-12.26,8.6c-0.51,1.39-0.78,2.88-0.78,4.44v10.45h-9.06V87.06
|
||||
c0-1.52,0.15-3,0.45-4.44c2.06-10.07,10.99-17.66,21.65-17.66c10.67,0,19.6,7.59,21.66,17.66
|
||||
C128.31,84.06,128.46,85.54,128.46,87.06z"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" fill="#00C6FF" d="M77.88,100.03l0.66,12.75l22.53,23.33l1.46-11.59l0.38-3.03
|
||||
c-1.61-1.1-2.65-2.95-2.65-5.03c0-0.81,0.16-1.58,0.44-2.27c0.89-2.24,3.09-3.83,5.65-3.83c2.57,0,4.77,1.59,5.66,3.83
|
||||
c0.28,0.69,0.44,1.46,0.44,2.27c0,2.08-1.05,3.93-2.66,5.02l0.39,3.04l1.45,11.61l22.53-23.34l0.67-12.76H77.88z"/>
|
||||
<path fill="#00C6FF" d="M212.72,106.36c0,58.741-47.619,106.36-106.36,106.36S0,165.101,0,106.36S47.619,0,106.36,0
|
||||
S212.72,47.619,212.72,106.36z M201.72,106.36c0-52.582-42.778-95.36-95.36-95.36C53.778,11,11,53.778,11,106.36
|
||||
c0,52.582,42.778,95.36,95.36,95.36C158.942,201.72,201.72,158.942,201.72,106.36z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 1.8 KiB |
25
src/img/icons/about.svg
Normal file
@ -0,0 +1,25 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="_x2014_ŽÓť_x5F_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
x="0px" y="0px" viewBox="155.9 279.2 283.5 283.5" enable-background="new 155.9 279.2 283.5 283.5" xml:space="preserve">
|
||||
<g>
|
||||
<path d="M297.2,557.2C296.7,557.2,296.7,557.2,297.2,557.2l-6.8-4.5c-1.8-0.9-3.2-2.3-4.5-3.2c-1.4-0.9-2.7-2.3-4.1-3.2l-3.2-2.3
|
||||
l-2.3-0.9l0,0l-2.3-2.3c-60-45-96.3-86.8-111.3-127.2l0,0l-0.9-4.1c-2.3-4.1-3.2-8.6-4.1-14.1l0,0c0-0.9-0.5-1.8-0.5-3.2
|
||||
c-0.5-0.9-0.5-2.3-0.5-3.2v-0.9c-0.9-2.3-0.9-4.5-0.9-6.4v-15.4l0,0c1.8-23.6,10.4-44.1,24.5-59.1c12.3-12.7,28.2-20.9,44.1-21.8
|
||||
c4.5-0.9,8.6-0.9,12.7-0.9c4.1,0,9.5,0,14.1,0.9c17.3,2.7,31.3,10.9,45,25.4c13.6-14.5,27.7-22.7,45-25.4c5.5-0.9,9.5-0.9,15-0.9
|
||||
c4.1,0,8.6,0,14.1,0.9c16.4,1.8,31.8,9.5,44.1,22.3c14.1,14.5,22.7,35,25,58.6l0,0v15c0,0.9-0.5,2.3-0.5,3.2
|
||||
c-0.5,1.4-0.5,2.7-0.5,4.5v0.9c0,1.8-0.5,3.2-0.5,4.5c-0.5,0.9-0.5,1.8-0.5,2.7v0.9l0,0c-0.5,2.3-1.4,4.5-2.3,6.8
|
||||
c-0.9,2.3-1.8,5-2.3,7.3c0,0.5-0.5,0.5-0.5,0.5c-0.5,0-0.5,0-0.5,0.5c0,0,0,0,0,0.5l-2.3,5.5c-7.7,20-20,39.5-38.6,60
|
||||
c-18.2,20-40.9,40.4-70.4,62.2l0,0l-2.3,0.9c-0.9,0.5-1.8,1.4-2.7,2.3c-0.9,0.9-1.8,1.8-2.7,2.3c-1.4,0.9-2.7,2.3-4.1,3.2
|
||||
c-1.4,0.9-2.7,2.3-4.5,3.2L297.2,557.2L297.2,557.2z M287.6,534.1c2.3,0.9,4.1,2.3,5.9,3.6c0.5,0.5,1.4,0.9,2.3,1.4
|
||||
c2.7-0.9,5.9-2.7,7.7-5c0.5-0.5,0.5-0.5,0.9-0.9c1.8-1.8,2.7-2.7,4.5-3.6c0,0,0,0,0.5,0s0.5,0,0.5-0.5c0.5-0.5,0.5-0.5,1.4-0.5
|
||||
c29.5-21.8,53.6-43.2,71.3-64.1c15.9-18.6,27.3-36.8,33.6-54.5l0,0c1.8-3.6,2.7-8.2,3.6-12.3c0-0.5,0-0.9,0.5-1.4v-0.9
|
||||
c0-0.9,0.5-2.3,0.5-3.2c0.5-0.9,0.5-1.8,0.5-3.2v-0.9c0,0,0,0,0-0.5c0.9-1.8,0.9-4.1,0.9-5.9v-13.6c-4.1-44.1-32.3-66.3-56.8-68.1
|
||||
l0,0c-4.1-0.9-8.2-0.9-11.4-0.9c-4.1,0-8.2,0-10.9,0.9l0,0c-20.4,3.2-31.8,14.5-45.4,30l-0.5,0.5c0,0-0.5,0-0.5-0.5
|
||||
c-13.6-15.4-25-26.8-45.4-30l0,0c-4.1-0.9-8.2-0.9-12.3-0.9h-12.3c-13.2,0.9-26.3,7.7-36.3,18.6c-11.8,12.7-19.1,30-20.4,49.5v21.8
|
||||
c0,0.9,0.5,1.8,0.5,3.2c0.5,0.9,0.5,2.3,0.5,3.2v0.9v0.5c0.9,4.1,1.8,7.7,4.1,12.7c6.8,17.7,18.2,36.3,33.6,54.5
|
||||
c17.7,20.9,41.8,42.2,71.3,64.1c0.5,0,0.9,0.5,1.4,0.9c0.5,0,0.5,0.5,0.5,0.5h0.5c0.5,0.5,0.5,0.5,0.9,0.9
|
||||
C285.4,532.2,286.3,533.1,287.6,534.1z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.4 KiB |
18
src/img/icons/account.svg
Normal file
@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Isolationsmodus" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
|
||||
y="0px" viewBox="155.9 279.2 283.5 283.5" enable-background="new 155.9 279.2 283.5 283.5" xml:space="preserve">
|
||||
<g>
|
||||
<path d="M298.1,562.7c-77.9,0-116.5-25.5-122-30.6l-2.3-0.9l-1.4-2.3v-2.3c0-1.4,0.5-4.2,0.9-7.9c1.9-21.3,6.5-71.5,20.4-86.3
|
||||
l1.4-1.4c0.9-0.5,15.3-10.2,29.2-13.9c0.5,0,21.3-5.1,30.6-15.3l0.9-0.9l0.9-9.3c0-0.5-0.5-0.9-0.9-1.4c-1.9-3.2-5.6-9.3-7.4-16.2
|
||||
c-5.1-5.1-7.4-13.5-6.5-23.2v-6l0.5-1.9l0.5-0.5c0-0.5,0.5-0.9,0.9-1.4c0-13.9,0.5-40.4,17.6-51.5c2.3-1.9,12.1-10.2,34.3-10.2
|
||||
c22.7,0,33.4,7.9,37.1,11.6c18.1,12.5,17.2,42.2,16.7,50.6l2.3,1.4l1.4,1.9v8.4c0,11.1-3.2,18.1-7,21.8c-1.9,6.5-5.1,12.1-8.4,17.6
|
||||
l0.9,9.3l0.5,0.5c7.9,8.8,23.2,13.9,30.6,15.3c13.9,3.7,28.3,13.5,28.8,13.9l1.4,1.4c16.2,18.1,21.8,84.9,21.8,93.7l0.9,0.5v3.7
|
||||
l-1.9,2.3l-2.8,1.4C412.7,538.6,374.7,562.7,298.1,562.7z M189.5,523.7c8.8,5.1,44.1,23.2,108.1,23.2c65.4,0,100.7-18.6,108.1-23.2
|
||||
c-1.4-21.8-7.4-66.8-16.2-78.4c-0.5-0.5-1.4-0.5-1.9-0.9c-4.2-2.3-13-7.4-21.3-9.3c-3.7-0.5-26.9-6-39-20.4l-3.7-5.1l-0.5-1.4
|
||||
l-1.4-19.5l0.5-1.9l1.4-1.4c0,0,4.6-7,7.9-15.8l2.3-21.8c1.9-16.7,0.5-38.5-9.7-45.5l-0.5-0.5l-1.4-1.4c0,0-7-6.5-25.1-7.9
|
||||
c-18.1,1.4-25.1,7.9-25.1,7.9l-1.4,1.4l-0.5,0.5c-11.1,7-11.6,31.1-9.7,44.1l2.3,22.7c3.2,9.3,7,16.2,7,16.2l-0.5,1.4v1.4v19.5v1.4
|
||||
l-3.2,5.1c-12.1,14.4-35.3,20-39,20.4c-7.4,1.9-15.3,6.5-19.5,9.3c-0.9,0.5-1.9,0.9-2.3,1.4C195.6,456.9,190.5,501,189.5,523.7z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.7 KiB |
17
src/img/icons/add_contact.svg
Normal file
@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="-396.7 279.2 283.5 283.5" enable-background="new -396.7 279.2 283.5 283.5" xml:space="preserve">
|
||||
<g id="icomoon-ignore">
|
||||
<line fill="none" stroke="#449FDB" x1="-255" y1="420.9" x2="-255" y2="420.9"/>
|
||||
</g>
|
||||
<path d="M-193,332.3h79.7v23.4H-193V332.3z M-164.4,304.6h23.4v79.7h-23.4V304.6z M-206.8,494.4c-0.9,6.1,0,6.1-8.7,6.9
|
||||
c-5.2,0.9-36.4,0.9-68.4,0.9c-36.4,0-74.5,0-77.1-0.9c-10.4-2.6-4.3-22.5,9.5-32.1c11.3-6.9,33.8-18.2,39.9-19.1
|
||||
c8.7-1.7,9.5-6.9,0-23.4c-1.7-3.5-4.3-14.7-4.3-26.9c0-19.1,3.5-32.1,19.9-39c3.5-0.9,6.9-1.7,10.4-1.7c11.3,0,21.7,6.1,26,15.6
|
||||
c6.1,12.1,3.5,44.2-3.5,55.4c-7.8,13-6.9,17.3,1.7,19.1c5.2,1.7,22.5,9.5,39,18.2C-211.2,473.6-205.1,484-206.8,494.4L-206.8,494.4z
|
||||
M-153.1,471.8c0,4.3,0,5.2-6.1,6.1c-3.5,0.9-19.1,0.9-39,0.9c-3.5-7.8-9.5-15.6-19.1-19.9c-10.4-6.1-21.7-11.3-31.2-15.6
|
||||
c6.1-2.6,11.3-5.2,13.9-6.1c6.1-1.7,6.9-5.2,0-18.2c-1.7-3.5-3.5-12.1-4.3-21.7c0-14.7,3.5-25.1,16.5-30.3c2.6-0.9,5.2-0.9,7.8-0.9
|
||||
c8.7,0,16.5,4.3,19.9,12.1c4.3,9.5,2.6,34.7-2.6,44.2c-6.1,10.4-5.2,13.9,1.7,14.7c4.3,0.9,17.3,7.8,30.3,14.7
|
||||
C-157.5,456.3-152.3,464.1-153.1,471.8L-153.1,471.8z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 1.5 KiB |
15
src/img/icons/attachment.svg
Normal file
@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="-404.7 279.2 283.5 283.5" enable-background="new -404.7 279.2 283.5 283.5" xml:space="preserve">
|
||||
<g id="icomoon-ignore">
|
||||
<line fill="none" stroke="#449FDB" x1="-263" y1="420.9" x2="-263" y2="420.9"/>
|
||||
</g>
|
||||
<path d="M-225,327.8c1.3-1.3,10.3-10.3,25.8-15.5c20.6-6.4,42.5-1.3,59.2,15.5c16.7,16.7,23.2,37.3,15.5,59.2
|
||||
c-5.1,15.5-14.2,25.8-15.5,27l-118.5,118.5c-20.6,20.6-72.1,47.6-119.8,0s-20.6-99.2,0-118.5l127.5-127.5c5.2-5.2,12.9-5.2,16.7,0
|
||||
c5.2,5.2,5.2,12.9,0,16.7l-127.5,127.5c-2.6,1.3-42.5,42.5,0,85c41.2,41.2,81.1,3.9,85,0L-158,396c0,0,6.4-6.4,10.3-16.7
|
||||
c3.9-12.9,1.3-23.2-10.3-34.8c-23.2-23.2-46.4-3.9-51.5,0l-110.8,110.8c-3.9,3.9-6.4,10.3,0,18c6.4,6.4,12.9,3.9,16.7,0l77.3-77.3
|
||||
c5.2-3.9,12.9-3.9,16.7,0c5.2,5.2,5.2,12.9,0,18l-77.3,76c-10.3,10.3-32.2,18-51.5,0c-19.3-18-10.3-41.2,0-51.5L-225,327.8
|
||||
L-225,327.8z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 1.2 KiB |
7
src/img/icons/back.svg
Normal file
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="684.8 369 470.1 841.9" enable-background="new 684.8 369 470.1 841.9" xml:space="preserve">
|
||||
<polygon points="783,789.9 1154.9,1161.8 1105.8,1210.9 684.8,789.9 724.1,750.7 1105.8,369 1154.9,418.1 "/>
|
||||
</svg>
|
After Width: | Height: | Size: 582 B |
28
src/img/icons/bug.svg
Normal file
@ -0,0 +1,28 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="155.9 279.2 283.5 283.5" enable-background="new 155.9 279.2 283.5 283.5" xml:space="preserve">
|
||||
<g>
|
||||
<path fill="#1A171B" d="M434.1,411l-40.1-1.9c16-23.1,13.2-55.1-8-76.4c-20.7-20.7-52.8-24-75.4-9l-1.4-38.7c0-3.3-2.8-6.1-6.1-5.7
|
||||
c-3.3,0-6.1,2.8-5.7,6.1l1.9,48.5v0.5l0,0h-0.5c-5.2-0.5-10.8-0.5-16,0l0,0c0-0.9,0-1.4-0.5-1.9L264,296c-1.4-2.8-5.2-4.2-8-2.4
|
||||
c-2.8,1.4-4.2,5.2-2.4,8L271,337l0,0c-6.6,1.9-13.2,4.2-19.3,7.5c-1.4,0.9-3.3,1.9-4.7,2.8c0.5,0,0.5-0.5,0.9-0.9
|
||||
c1.4-0.9,2.4-1.4,3.8-2.4l-32.1-30.2c-2.4-2.4-6.1-2.4-8.5,0c-2.4,2.4-1.9,6.1,0,8.5l30.2,28.3c-2.8,1.9-5.2,4.2-8,7.1l-63.2,62.7
|
||||
c-33,33,1.4,117.8,2.8,121.6c0.5,0.9,0.9,1.4,1.4,1.9c0.5,0.5,1.4,0.9,1.9,1.4c3.8,1.4,88.6,35.8,121.6,2.8l62.2-62.2
|
||||
c2.4-2.4,4.7-5.2,7.1-8l29.7,31.1c2.4,2.4,6.1,2.4,8.5,0.5c2.4-2.4,2.4-6.1,0-8.5l-32.1-33.5l0,0c3.3-6.1,5.7-12.3,7.5-18.9l0,0
|
||||
l0,0l36.8,18.4c2.8,1.4,6.6,0.5,8-2.4c1.4-2.8,0.5-6.6-2.4-8L386,438.4c-0.9-0.5-2.4-0.9-3.3-0.9l0,0c0.5-5.7,0.9-10.8,0-16.5l0,0
|
||||
l0,0l0,0c0,0,0,0,0,0.5l50.4,1.9c3.3,0,6.1-2.4,6.1-5.7C439.8,413.8,437.4,411,434.1,411z M309.2,348.8c-1.4-0.5-3.3-0.9-4.7-0.9
|
||||
l0,0l0,0c-0.5,0-0.9,0-1.4,0c0,0,0,0-0.5,0c0,0,0,0,0.5,0l0,0c0.5,0,0.9,0,1.4,0.5l0,0l0,0l0,0
|
||||
C305.9,348.3,307.8,348.3,309.2,348.8z M299.8,346.9c0,0-0.5,0-0.9,0C298.8,346.9,299.3,346.9,299.8,346.9z M253.1,356.8
|
||||
c-0.5,0.5-0.9,0.9-1.4,0.9C252.2,357.3,253.1,356.8,253.1,356.8z M178.7,428.5l62.2-62.2c1.9-1.9,3.3-3.3,5.2-4.7
|
||||
c7.1,23.1,20.3,44.8,38.2,63.6L181,528.4C171.1,501.5,158.4,449.2,178.7,428.5z M351.6,477.5l-62.2,62.2
|
||||
c-20.3,20.3-73.1,7.1-100.4-2.4l103.2-103.2c18.9,17.9,41,31.1,64.1,38.2C354.9,473.7,353.5,475.6,351.6,477.5z M363,461.4
|
||||
c-24-7.1-46.7-20.7-66-39.6l-0.5-0.5c0,0-0.5-0.5-0.9-0.9C276.7,401.1,263,379,256,354.9c28.3-15.1,66-9,90.5,16
|
||||
C371.9,395.5,378.5,433.2,363,461.4z M310.6,349.3c1.4,0.5,2.4,0.9,3.3,0.9c0.9,0.5,1.9,0.5,2.8,0.9c-0.9-0.5-1.9-0.5-2.8-0.9
|
||||
C312.5,349.7,311.6,349.7,310.6,349.3z M326.7,355.9c7.5,3.8,14.1,9,20.7,15.1c3.3,3.3,6.1,7.1,9,10.8c-2.8-3.8-5.7-7.5-9-10.8
|
||||
C341.3,364.8,334.2,359.6,326.7,355.9z M381.3,408.7c-2.4-9.9-6.1-19.8-11.8-29.2C375.2,388.9,379.5,398.8,381.3,408.7L381.3,408.7
|
||||
z M380.9,405.8c-4.2-16-12.7-31.6-25-43.8c-1.4-1.4-2.8-2.8-4.7-4.2c1.4,1.4,2.8,2.8,4.2,4.2c5.2,5.2,9.9,10.8,13.2,17
|
||||
c-3.8-6.1-8-11.3-13.2-16.5c-13.2-13.2-28.8-21.7-45.3-25.5l0,0c4.2,0.9,8,1.9,11.8,3.8c-3.3-1.4-6.6-2.4-9.9-3.3
|
||||
c18.4-15.6,46.7-14.1,64.6,4.2C395,359.2,396.4,387.4,380.9,405.8z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.8 KiB |
7
src/img/icons/check.svg
Normal file
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Isolationsmodus" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
|
||||
y="0px" viewBox="155.9 279.2 283.5 283.5" enable-background="new 155.9 279.2 283.5 283.5" xml:space="preserve">
|
||||
<polygon fill="#231F20" points="262.4,524.6 155.9,417.4 185.5,387.8 262.4,464.7 409.8,317.3 439.4,346.9 "/>
|
||||
</svg>
|
After Width: | Height: | Size: 595 B |
10
src/img/icons/close.svg
Normal file
@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="-406.7 279.2 283.5 283.5" enable-background="new -406.7 279.2 283.5 283.5" xml:space="preserve">
|
||||
<g id="icomoon-ignore">
|
||||
<line fill="none" stroke="#449FDB" x1="-265" y1="420.9" x2="-265" y2="420.9"/>
|
||||
</g>
|
||||
<path d="M-373.2,280.4l250,250l-33.5,33.5l-250-250L-373.2,280.4z M-406.7,527.9l250-250l33.5,33.5l-250,250L-406.7,527.9z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 716 B |
11
src/img/icons/close_circle.svg
Normal file
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="-406.7 279.2 283.5 283.5" enable-background="new -406.7 279.2 283.5 283.5" xml:space="preserve">
|
||||
<g id="icomoon-ignore">
|
||||
<line fill="none" stroke="#449FDB" x1="-265" y1="420.9" x2="-265" y2="420.9"/>
|
||||
</g>
|
||||
<path d="M-265,279.2c-78.1,0-141.7,63.7-141.7,141.7s63.7,141.7,141.7,141.7s141.7-63.7,141.7-141.7S-186.9,279.2-265,279.2z
|
||||
M-235,420.9l60.1,60.1l-30,30l-60.1-60.1l-60.1,60.1l-30-30l60.1-60.1l-60.1-60.1l30-30l60.1,60.1l60.1-60.1l30,30L-235,420.9z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 844 B |
53
src/img/icons/contact.svg
Normal file
@ -0,0 +1,53 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Isolationsmodus" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
|
||||
y="0px" viewBox="155.9 279.2 283.5 283.5" enable-background="new 155.9 279.2 283.5 283.5" xml:space="preserve">
|
||||
<path d="M258.2,535.7c-60,0-91.7-18.5-97.4-22.3l-3-1.5c-0.8-0.4-1.9-1.1-1.9-1.9v-2.3l0.8-0.8c1.1-18.5,5.7-62.7,17.4-75.5l1.1-0.8
|
||||
l1.1-0.4c0,0,0.8-0.4,1.1-0.8c3.8-2.3,12.5-7.5,21.5-9.8c0.4,0,0.8-0.4,1.9-0.8c4.2-1.1,16.6-4.9,22.6-11.7l0.4-0.8l0.8-7.9
|
||||
c-0.4-0.4-0.4-0.8-0.8-1.5c-1.9-3-4.2-7.5-6-12.8c-4.5-4.5-6.4-10.6-5.7-18.5v-5.7c0-0.8,0.4-1.1,0.8-1.5l0.4-0.4
|
||||
c0.4-0.4,0.8-1.1,1.1-1.5c-0.4-9.8,0.8-31.3,14.3-40.8c1.1-1.1,8.7-8.7,28.7-9.8c6.4,0.4,21.5,1.9,29.4,9.8
|
||||
c12.5,8.3,14.3,26.8,14,40.8c0.4,0.4,0.8,0.8,1.1,1.1l0.8,0.4c0.4,0.4,0.8,1.1,0.8,1.5v5.3c0,7.5-1.1,13.6-5.7,18.5
|
||||
c-2.3,6.4-4.9,11.7-6.8,14.3l0.4,8.3l0.8,0.8c1.5,1.5,3,2.6,4.2,3.4c0.8-0.4,1.9-0.8,2.6-0.8c2.3-0.4,15.1-3.8,21.1-10.2l0.4-0.8
|
||||
l0.4-6.8c-1.5-2.6-3.4-7.2-5.3-12.5c-2.3-1.9-4.5-6.8-4.5-16.6v-4.2c0-0.8-0.4-1.1,0-1.5l1.1-1.5c-0.4-4.5-0.4-10.9,1.1-17.7
|
||||
c1.9-8.7,5.7-14.7,10.9-18.9c1.1-1.1,8.7-7.9,25.7-8.3c16.2,0.4,23.8,6,26.4,8.7c11.3,7.5,12.8,25.3,12.5,35.9
|
||||
c0.4,0.4,0.8,0.8,1.1,1.5v0.4c0.4,0.4,0.4,1.1,0.4,1.5v4.9c0,9.8-3,14.3-4.9,16.2c-1.9,5.7-4.2,10.2-5.7,12.5l0.8,6.8l0.8,0.8
|
||||
c4.5,5.3,15.1,9.1,21.1,10.2c10.9,3,20.8,10.2,20.8,10.2l0.8,0.4l0.4,0.4c7.2,8.3,12.1,29.4,14.7,64.5c0,0.4,0,1.1,0,1.1
|
||||
c0.4,0.4,0.4,0.8,0.4,1.1v2.3c0,0.8-0.4,1.1-0.8,1.9c-1.1,0.8-1.5,1.1-1.9,1.5l0,0c-1.1,0.8-8.3,5.3-21.5,10.2
|
||||
c-17.7,6-38.5,9.4-60.8,9.8C347.7,518,316.3,535.7,258.2,535.7z M171.4,504.4c8.7,4.9,37.4,18.5,86.4,18.5c28.3,0,53.2-4.5,77-13.6
|
||||
l0,0c4.9-2.3,9.8-4.2,9.8-4.9V504c0-7.2-1.5-21.1-4.2-34.7c-3-17.7-6-24.9-8.3-27.9c-0.4,0-0.8-0.4-1.1-0.8
|
||||
c-3.4-1.9-10.6-6.4-17.4-8.3c-1.5,0-11.3-2.6-20-7.2l-0.8-0.4c-2.3-1.1-4.9-2.6-7.5-4.9c-0.4-0.4-0.8-0.4-0.8-0.8l-0.4-0.4
|
||||
c-0.8-0.8-1.9-1.5-2.6-2.6l-3-3.4c-0.4-0.4-0.4-0.8-0.4-1.5l-1.5-15.5c0-0.8,0-1.1,0.4-1.5l1.5-1.9c0,0,3.8-4.9,6.4-12.5l2.3-17.4
|
||||
c0.4-2.3,0.8-10.6-0.4-18.9c-1.1-8.7-3.8-14.3-7.9-17l0,0h-0.4l-0.8-0.8c-1.5-1.5-7.9-5.7-20.4-6c-11.7,0.4-18.1,4.5-19.6,6
|
||||
l-0.8,0.8l-0.4,0.4c-9.4,6-9.8,27.2-8.3,35.9l2.3,18.1c2.3,7.2,6,12.1,6,12.1l1.1,1.5c0.4,0.4,0.4,0.8,0.4,1.1l-0.8,15.5
|
||||
c0,0.4-0.4,1.1-0.8,1.5l-3,3.4c-10.6,11.3-29.4,15.9-32.1,16.2c-6.4,1.9-14.3,6.4-17.4,8.3l-0.4,0.4
|
||||
C176.7,450.8,172.5,487.8,171.4,504.4z M316.3,419.8c11.3,2.6,23,10.6,23.8,11.3l0.8,0.8c11.3,13.2,15.5,54.7,16.6,69.8
|
||||
c17.4-0.8,33.2-3,47.6-7.5c10.9-3.4,18.1-6.8,21.5-8.7c-1.1-18.5-4.9-47.9-11.3-55.5c-2.3-1.9-9.1-5.7-15.9-7.2
|
||||
c-2.3-0.4-18.9-4.9-27.9-14.3l-2.6-3c-0.4-0.4-0.4-0.8-0.4-1.1l-0.8-13.6c0-0.4,0-0.8,0.4-1.5l0.8-1.5l0.4,0.4l0.4-0.4l-0.4-0.4l0,0
|
||||
c0,0,3.4-4.5,5.3-11.3l2.3-15.1c0.8-6.4,1.1-25.7-7.2-31l0,0h-0.4l-0.8-0.8c-1.1-1.5-6.8-4.9-17.4-5.3c-10.6,0.4-15.9,3.8-17,4.9
|
||||
l-1.1,1.1l-0.4,0.4c-8.3,4.9-7.5,24.5-6.8,31l1.9,15.5c1.9,4.9,4.5,9.4,5.3,10.6l0,0l0,0l0.8,1.5c0.4,0.4,0.4,0.8,0.4,1.1l-0.8,13.2
|
||||
c0,0.4,0,0.8-0.4,1.1l-2.6,3.4c-4.9,5.3-11.3,8.3-17.4,10.9C313.3,418.7,316.3,419.8,316.3,419.8z"/>
|
||||
<path d="M257.8,534c-59.6,0-91-18.5-96.6-22.3l0,0l-2.3-1.5c-0.4,0-0.4-0.4-0.4-0.8v-1.9l0,0v-0.4c1.1-18.1,4.9-62.3,16.6-74.4
|
||||
l0.8-0.8h0.4c0,0,0.8-0.4,1.5-0.8c3.8-2.3,12.5-7.5,21.1-9.8c0.4,0,0.8-0.4,1.9-0.8c4.5-1.5,17-4.9,23-12.1l0.8-1.1l0.8-9.1
|
||||
c-0.4-0.4-0.8-1.1-1.1-1.9c-1.5-3-4.2-7.5-6-12.8c-4.2-4.5-6-10.2-5.3-17.7v-5.7c0,0,0-0.4,0.4-0.4l0.8-0.8c0-0.8,0.8-1.1,1.1-1.5
|
||||
c-0.4-9.4,0.4-31.3,13.6-40.4c1.1-1.1,8.3-8.3,27.9-9.4l0,0c6,0.4,20.8,1.9,28.3,9.4c12.1,8.3,14,26.4,13.6,40.4c0,0,0.4,0,0.4,0.4
|
||||
c0.4,0.4,0.8,0.8,1.1,1.1l0.8,0.8l0.4,0.4v5.3c0.8,7.5-1.1,13.2-5.3,17.7c-1.9,6.4-4.9,12.1-7.2,14.7l0.4,9.1l1.1,1.1
|
||||
c1.9,1.5,3.4,3,5.3,4.2l0,0h0.4c0.8-0.4,1.5-0.8,2.3-0.8c1.1-0.4,15.5-3.4,22.3-10.9l0.8-1.1l0.4-7.5c-1.5-2.6-4.2-7.2-6-13.2
|
||||
c-1.9-1.5-5.7-5.7-4.9-15.5v-4.5c0,0,0-0.4,0.4-0.4l1.9-1.9c-0.4-4.5,0-11.3,1.1-17.7c1.9-8.3,5.3-14.3,10.6-17.7
|
||||
c1.5-1.5,8.7-7.5,24.9-8.3l0,0c16.2,0.4,23.4,6.4,25.3,8.3c11.3,7.5,12.5,25.3,11.7,35.5c0.8,0.4,1.1,0.8,1.1,1.5l0.8,0.8l0.4,0.4
|
||||
v4.9c0.4,9.8-3,14-4.9,15.5c-1.9,6-4.9,10.6-6,13.2l0.8,7.5l0.8,1.1c5.3,6,17,9.8,22.3,10.9l0,0c9.8,2.6,18.9,9.1,20,9.8l0.8,0.4
|
||||
l0,0c6.8,7.9,11.7,29.4,14,63.8c0,0.8,0,1.1,0,1.5c0.4,0,0.4,0.4,0.4,0.8v2.3c0,0.4,0,0.4-0.4,0.4l-1.9,1.5
|
||||
c-0.8,0.4-7.5,5.3-21.1,9.8c-17.7,6-38.1,9.4-60.4,9.8h-0.4C349.2,514.7,317.8,534,257.8,534z M169.5,504.9
|
||||
c8.3,4.9,37.4,19.3,87.9,19.3c28.3,0,53.6-4.5,77.4-13.6l0,0c5.7-2.3,9.4-4.5,10.9-5.3v-1.5l0,0c-0.4-5.7-1.5-20.8-4.2-35.1
|
||||
c-2.6-14.7-5.7-24.5-9.1-28.7c-0.4,0-0.8-0.4-1.1-0.8c-3.4-1.9-10.9-6.4-18.1-8.3c-1.5,0-10.9-2.6-19.6-7.2l-0.8-0.4
|
||||
c-2.3-1.1-4.9-2.6-7.2-4.5c-0.4-0.4-0.8-0.8-1.1-1.1c-0.8-0.8-1.5-1.5-2.3-2.3l-3-3.4v-0.4l-1.5-15.5v-0.4l1.5-1.9
|
||||
c0,0,3.8-5.3,6.4-12.8l2.3-17.7c0.4-2.3,0.8-10.6-0.4-19.2c-1.1-9.1-4.2-15.1-8.7-18.1l0,0l-0.8-0.8c-1.9-1.9-9.1-6-21.1-6.4
|
||||
c-12.1,0.4-18.9,4.2-20.8,6.4l-0.8,0.8l0,0c-10.2,6.8-10.6,27.9-9.1,37.4l2.3,18.1c2.6,7.5,6.4,12.8,6.4,12.8l0,0l0.8,1.5v0.4
|
||||
l-0.8,15.5v0.4l-3,3.4c-10.2,10.9-29.1,15.5-31,15.9c-7.2,1.9-15.1,6.8-18.1,8.7c-0.4,0-0.4,0.4-0.8,0.4
|
||||
C174.8,450.2,170.3,488.3,169.5,504.9z M306.9,418.5c3.8,1.1,6.4,1.9,8.7,2.6c11.3,2.6,22.6,10.2,23,10.9l0.8,0.8l0,0
|
||||
c11.7,13.6,15.5,59.3,16.2,70.2c17.7-0.4,34.3-3,49.1-7.5c12.1-3.8,19.6-7.5,22.6-9.4c-1.1-16.2-4.5-48.7-11.7-57
|
||||
c-2.3-1.5-9.4-6-16.6-7.9c-1.9-0.4-18.5-4.5-27.2-14l-2.6-3v-0.4l-0.8-13.2v-0.4l0.8-1.5l0,0c0,0,3.4-4.9,5.7-11.7l2.3-15.5
|
||||
c0.8-7.2,1.1-26.8-7.5-32.5l0,0l-0.8-0.8c-1.5-1.9-7.5-5.3-18.5-5.7c-10.6,0.4-16.6,3.8-18.1,5.7l-0.8,0.8l0,0
|
||||
c-9.1,5.7-8.7,25.3-7.5,32.5l1.9,15.5c2.3,6.4,5.7,11.3,5.7,11.3l0,0l0.8,1.5v0.4l-0.8,13.2v0.4l-2.6,3
|
||||
C322.4,412.5,314.1,415.8,306.9,418.5z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 5.8 KiB |
15
src/img/icons/decrypted.svg
Normal file
@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="155.9 279.2 283.5 283.5" enable-background="new 155.9 279.2 283.5 283.5" xml:space="preserve">
|
||||
<g>
|
||||
<g id="icomoon-ignore_1_">
|
||||
<line fill="none" stroke="#449FDB" x1="155.9" y1="291.3" x2="155.9" y2="291.3"/>
|
||||
</g>
|
||||
<path d="M439.4,368.2v30.2h-39.3v-30.2c0-20.7-16.4-37.2-36.3-37.2c-19.9,0-36.3,16.9-36.3,37.2v30.2h-39.3v-30.2
|
||||
c0-42.3,34.1-76.9,75.6-76.9S439.4,326.3,439.4,368.2z M155.9,413.6v137h194v-137H155.9z M233.7,534.2l6-49.7l1.3-10.4
|
||||
c-5.2-3.9-9.1-10.4-9.1-17.7c0-3,0.9-5.2,1.3-8.2c3-8.2,10.4-13.4,19-13.4c9.1,0,16.4,5.2,19,13.4c0.9,2.2,1.3,5.2,1.3,8.2
|
||||
c0,7.3-3.9,14.3-9.1,17.7l1.3,10.4l6,49.7C272.1,534.2,233.7,534.2,233.7,534.2z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.0 KiB |
18
src/img/icons/delete.svg
Normal file
@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="155.9 279.2 283.5 283.5" enable-background="new 155.9 279.2 283.5 283.5" xml:space="preserve">
|
||||
<path fill="#0A0A0A" d="M214.6,562.9c-12.3,0-22.2-9.9-22.2-21.8V344.5c0-0.5-0.5-0.9-0.9-0.9c-3.8,0-8-2.8-8-10.9
|
||||
c0-6.6,7.1-7.6,12.3-7.6H234c0.5,0,0.9-0.5,0.9-0.9v-23.6c0-5.7,2.4-11.3,6.6-15.1c4.3-4.3,9.9-6.1,16.1-6.1h79.9
|
||||
c6.1,0,11.8,2.4,15.6,6.1c4.3,4.3,6.6,9.5,6.6,15.1v23.6c0,0.5,0.5,0.9,0.9,0.9h38.8c5.7,0,12.3,1.9,12.3,7.6c0,5.2-2.8,9.9-8,9.9
|
||||
c-0.5,0-0.9,0.5-0.9,0.9v197.2c0,11.8-9.9,21.8-22.7,21.8L214.6,562.9L214.6,562.9z M212.3,337.9c-3.8,0-7.1,3.3-7.1,7.1v197.7
|
||||
c0,2.4,3.8,7.6,6.6,7.6l172.6,1.4c2.4,0,6.1-4.3,6.1-6.6l-0.9-199.1c0-3.8-3.3-7.1-7.1-7.1L212.3,337.9z M253,291
|
||||
c-2.4,0-4.3,1.4-4.3,3.8v29.3c0,0.5,0.5,0.9,0.9,0.9h95.5c0.5,0,0.9-0.5,0.9-0.9v-29.3c0-2.4-1.9-3.8-4.3-3.8H253z M346.1,514.2
|
||||
c-1.4,0-2.4-0.5-3.3-1.4c-3.3-3.3-2.8-10.9-2.8-10.9V383.2l0,0c0,0-0.5-7.1,2.4-9.9c0.9-0.9,1.9-1.4,3.3-1.4c1.4,0,2.4,0.5,3.3,1.4
|
||||
c2.8,3.3,2.8,9.9,2.8,9.9v118.2l0,0c0,0,0.5,7.6-2.8,10.9C348.5,513.8,347.5,514.2,346.1,514.2z M298.3,514.2
|
||||
c-1.4,0-2.4-0.5-3.3-1.4c-3.3-3.3-2.8-10.9-2.8-10.9V383.2l0,0c0,0-0.5-7.1,2.4-9.9c0.9-0.9,1.9-1.4,3.3-1.4c1.4,0,2.4,0.5,3.3,1.4
|
||||
c2.8,3.3,2.8,9.9,2.8,9.9v118.2l0,0c0,0,0.5,7.6-2.8,10.9C300.7,513.8,299.8,514.2,298.3,514.2z M251.1,514.2
|
||||
c-1.4,0-2.4-0.5-3.3-1.4c-3.3-3.3-2.8-10.9-2.8-10.9V383.2l0,0c0,0-0.5-7.1,2.4-9.9c0.9-0.9,1.9-1.4,3.3-1.4s2.4,0.5,3.3,1.4
|
||||
c2.8,3.3,2.8,9.9,2.8,9.9v118.2l0,0c0,0,0.5,7.6-2.8,10.9C253.4,513.8,252,514.2,251.1,514.2z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 1.8 KiB |
12
src/img/icons/draft.svg
Normal file
@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Isolationsmodus" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
|
||||
y="0px" viewBox="155.9 279.2 283.5 283.5" enable-background="new 155.9 279.2 283.5 283.5" xml:space="preserve">
|
||||
<g id="_x31__1_">
|
||||
<path fill="#231F20" d="M383.9,562.7H211.4c-13.6,0-24.6-11.1-24.6-24.6V303.9c0-13.6,11.1-24.6,24.6-24.6h113.4l83.8,83.8v175
|
||||
C408.6,551.6,397.5,562.7,383.9,562.7z M211.4,291.5c-6.8,0-12.3,5.5-12.3,12.3V538c0,6.8,5.5,12.3,12.3,12.3h172.5
|
||||
c6.8,0,12.3-5.5,12.3-12.3V367.9l-76.4-76.4H211.4z"/>
|
||||
<path fill="#231F20" d="M402.4,371.6h-73.9c-6.8,0-12.3-5.5-12.3-12.3v-73.9h12.3v73.9h73.9V371.6z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 910 B |
8
src/img/icons/dropdown.svg
Normal file
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="155.9 279.2 283.5 283.5" enable-background="new 155.9 279.2 283.5 283.5" xml:space="preserve">
|
||||
<path d="M434.5,382.9c6.5-4.3,6.5-13,0-17.4L415,348.1c-6.5-4.3-15.2-4.3-19.5,0l-97.8,82.6L202,348.1c-6.5-4.3-15.2-4.3-19.5,0
|
||||
l-21.7,17.4c-6.5,4.3-6.5,13,0,17.4l128.1,110.9c6.5,4.3,15.2,4.3,19.5,0L434.5,382.9z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 693 B |
8
src/img/icons/dropup.svg
Normal file
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="141.7 281.5 283.5 283.5" enable-background="new 141.7 281.5 283.5 283.5" xml:space="preserve">
|
||||
<path d="M146.6,461.2c-6.5,4.4-6.5,13,0,17.4l19.5,17.4c6.5,4.4,15.2,4.4,19.5,0l97.8-82.5l95.6,82.5c6.5,4.4,15.2,4.4,19.5,0
|
||||
l21.7-17.4c6.5-4.4,6.5-13,0-17.4L292.1,350.4c-6.5-4.4-15.2-4.4-19.5,0L146.6,461.2z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 690 B |
13
src/img/icons/encrypted.svg
Normal file
@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="155.9 279.2 283.5 283.5" enable-background="new 155.9 279.2 283.5 283.5" xml:space="preserve">
|
||||
<g>
|
||||
<path fill="#1A171B" d="M380.8,364.3v33.5h-42.5v-33.5c0-23.1-18-40.6-40.6-40.6c-21.3,0-40.6,18-40.6,40.6v33.5h-42.5v-33.5
|
||||
c0-47.7,37.3-85,83.1-85S380.8,316.5,380.8,364.3z"/>
|
||||
<path fill="#1A171B" d="M191.3,413.9v148.8h212.6V413.9H191.3z M276.4,544.7l7.1-52.9l1.9-12.3c-5.2-3.3-10.4-10.4-10.4-19.4
|
||||
c0-3.3,0-5.2,1.9-9c3.3-9,12.3-14.2,21.3-14.2c9,0,18,5.2,21.3,14.2c1.9,3.3,1.9,5.2,1.9,9c0,9-3.3,14.2-10.4,19.4l1.9,12.3
|
||||
l7.1,52.9H276.4L276.4,544.7z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 950 B |
14
src/img/icons/folder.svg
Normal file
@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Isolationsmodus" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
|
||||
y="0px" viewBox="155.9 279.2 283.5 283.5" enable-background="new 155.9 279.2 283.5 283.5" xml:space="preserve">
|
||||
<g id="_x32__6_">
|
||||
<path fill="#231F20" d="M415.2,541.6H180c-13.3,0-24.1-10.9-24.1-24.1V378.7c0-13.3,10.9-24.1,24.1-24.1h235.2
|
||||
c13.3,0,24.1,10.9,24.1,24.1v138.7C439.4,530.7,428.5,541.6,415.2,541.6z M180,366.7c-6.6,0-12.1,5.4-12.1,12.1v138.7
|
||||
c0,6.6,5.4,12.1,12.1,12.1h235.2c6.6,0,12.1-5.4,12.1-12.1V378.7c0-6.6-5.4-12.1-12.1-12.1H180z"/>
|
||||
<path fill="#231F20" d="M439.4,378.7h-12.1v-24.1c0-6.6-5.4-12.1-12.1-12.1H289.8c-5.4,0-13.3-3-16.9-7.2L253.6,316
|
||||
c-1.8-1.8-6-3.6-8.4-3.6H180c-6.6,0-12.1,5.4-12.1,12.1v54.3h-12.1v-54.3c0-13.3,10.9-24.1,24.1-24.1h65.1c5.4,0,13.3,3,16.9,7.2
|
||||
l19.3,19.3c1.8,1.8,6,3.6,8.4,3.6h125.4c13.3,0,24.1,10.9,24.1,24.1V378.7z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.1 KiB |
8
src/img/icons/forward_light.svg
Normal file
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="155.9 279.2 283.5 283.5" enable-background="new 155.9 279.2 283.5 283.5" xml:space="preserve">
|
||||
<path d="M277.7,563.1v-62H162.7V351.5l115.1,0.4v-72.7l154.9,143.4L277.7,563.1z M179.1,484.7h115.1v41.5L408,422.6L294.1,317v51.4
|
||||
L179.1,368V484.7z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 630 B |
18
src/img/icons/inbox.svg
Normal file
@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Isolationsmodus" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
|
||||
y="0px" viewBox="155.9 279.2 283.5 283.5" enable-background="new 155.9 279.2 283.5 283.5" xml:space="preserve">
|
||||
<g>
|
||||
<path fill="#231F20" d="M425.5,455.9l-37.1-146.5v-0.1c-1.2-5.4-7-10-12.6-10h-157c-4.7,0-11.3,4.5-12.6,10l0,0.1l-36.4,146.5
|
||||
l-13.9-3.4L192.3,306c2.7-11.6,14.6-21,26.5-21h157c12.1,0,23.7,9.2,26.5,21l37,146.4L425.5,455.9z"/>
|
||||
<g>
|
||||
<g>
|
||||
<path fill="#231F20" d="M425.8,462.4v74.2c0,4-2.7,6.8-6.8,6.8H176.1c-4,0-6.8-2.7-6.8-6.8v-74.2h68.9
|
||||
c6.1,27,30.4,47.2,59.4,47.2c28.3,0,53.3-20.2,59.4-47.2H425.8 M439.4,448.8h-88.4c-3.4,0-6.1,2.7-6.8,6.1
|
||||
c-2.7,23-22.3,41.2-46.6,41.2c-24.3,0-43.9-18.2-46.6-41.2c-0.7-3.4-3.4-6.1-6.8-6.1h-88.4v87.8c0,11.5,8.8,20.2,20.2,20.2h242.9
|
||||
c11.5,0,20.2-8.8,20.2-20.2L439.4,448.8L439.4,448.8z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.1 KiB |
12
src/img/icons/info.svg
Normal file
@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="-406.7 279.2 283.5 283.5" enable-background="new -406.7 279.2 283.5 283.5" xml:space="preserve">
|
||||
<g id="icomoon-ignore">
|
||||
<line fill="none" stroke="#449FDB" x1="-265" y1="420.9" x2="-265" y2="420.9"/>
|
||||
</g>
|
||||
<path d="M-265,279.2c-78.3,0-141.7,63.5-141.7,141.7s63.5,141.7,141.7,141.7s141.7-63.5,141.7-141.7S-186.7,279.2-265,279.2z
|
||||
M-265,536c-63.6,0-115.2-51.6-115.2-115.2s51.6-115.2,115.2-115.2s115.2,51.6,115.2,115.2S-201.4,536-265,536z M-282.7,350h35.4
|
||||
v35.4h-35.4V350z M-229.6,491.8h-70.9V474h17.7v-53.1h-17.7v-17.7h53.1V474h17.7V491.8z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 932 B |
19
src/img/icons/key.svg
Normal file
@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Isolationsmodus" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
|
||||
y="0px" viewBox="155.9 279.2 283.5 283.5" enable-background="new 155.9 279.2 283.5 283.5" xml:space="preserve">
|
||||
<path fill="#1A171B" d="M212.5,561.6l-40.3-0.9c-2.3,0-4.7-1.9-5.2-4.7l-6.6-55.7c0-1.4,0.5-2.8,1.4-4.2c0.9-0.9,2.3-1.4,3.7-1.4
|
||||
h23.4v-22.5c0-1.4,0.5-2.8,1.4-3.7c0.9-0.9,2.3-1.4,3.7-1.4h22v-22c0-1.4,0.5-2.8,1.4-3.7c0.9-0.9,2.3-1.4,3.7-1.4h22l-0.5-30.4
|
||||
c0-1.4,0.5-2.8,1.4-3.7L265,385c-7-28.6,1.4-59,22.5-80.1c15.5-15.5,37-24.8,59.9-24.8s44,8.9,60.4,24.8
|
||||
c33.2,33.2,33.2,87.1,0,120.3c-15.5,15.5-37,24.8-59.9,24.8c-6.6,0-13.1-0.9-19.2-1.9L217.2,559.7
|
||||
C215.3,561.1,213.9,561.6,212.5,561.6L212.5,561.6z M184.4,550.3l26.2,0.9L323,438.9c1.4-1.4,3.3-1.9,5.2-1.4
|
||||
c6.1,1.4,13.1,2.3,19.7,2.3c20.1,0,38.4-7.5,52.4-21.5c29-29,29-76.8,0-105.8c-14-14-32.8-22-52.9-22s-38.4,7.5-52.9,22
|
||||
c-18.7,18.7-26.2,46.8-18.7,72.6c0.5,1.9,0,3.7-1.4,5.2l-21.1,21.1l0.5,33.2c0,1.4-0.5,2.8-1.4,3.7c-0.9,0.9-2.3,1.4-3.7,1.4H227v22
|
||||
c0,1.4-0.5,2.8-1.4,3.7c-0.9,0.9-2.3,1.4-3.7,1.4h-22v22.5c0,1.4-0.5,2.8-1.4,3.7c-0.9,0.9-2.3,1.4-3.7,1.4h-22.5l4.7,38.9
|
||||
L279,439.8c1.9-1.9,5.2-1.9,7.5,0c1.9,1.9,1.9,5.2,0,7.5L184.4,550.3L184.4,550.3z M368.5,371.4c-7,0-14-2.8-19.7-8
|
||||
c-10.8-10.8-10.8-28.1,0-38.9c5.2-5.2,11.7-8,19.7-8c7,0,14,2.8,19.7,8c5.2,5.2,8,11.7,8,19.7s-2.8,14-8,19.7
|
||||
C383,368.2,376,371.4,368.5,371.4L368.5,371.4z M368.5,326.5c-4.7,0-8.9,1.9-11.7,4.7c-6.6,6.6-6.6,17.3,0,24.4
|
||||
c3.3,3.3,7.5,4.7,11.7,4.7c4.7,0,8.9-1.9,11.7-4.7c3.3-3.3,4.7-7.5,4.7-11.7c0-4.7-1.9-8.9-4.7-11.7
|
||||
C377.4,328.3,373.1,326.5,368.5,326.5L368.5,326.5z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 1.9 KiB |
20
src/img/icons/logout.svg
Normal file
@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="155.9 279.2 283.5 283.5" enable-background="new 155.9 279.2 283.5 283.5" xml:space="preserve">
|
||||
<g>
|
||||
<g>
|
||||
<g>
|
||||
<g>
|
||||
<path fill="#010202" d="M314.4,475.6c0,0,0,32.4,0,48.7c-13.7,0-27,0-40.7,0c0,4.9,0,9.6,0,14.3c0.9,0.1,1.7,0,2.4,0
|
||||
c16.4,0,32.9-0.1,49.3,0c2.4,0-2.2,0,3,0c-0.1-19,0-62.9,0-62.9H314.4z"/>
|
||||
<path fill="#010202" d="M314.4,366.8c0,0,0-32.4,0-48.7c-13.7,0-27,0-40.7,0c0-4.9,0-9.6,0-14.3c0.9-0.1,1.7,0,2.4,0
|
||||
c16.4,0,32.9,0.1,49.3,0c2.4,0-2.2,0,3,0c-0.1,19,0,62.9,0,62.9H314.4z"/>
|
||||
</g>
|
||||
<polygon fill="#010202" points="345.1,491.6 345.1,458.8 274.7,458.8 274.7,383.2 345.1,383.4 345.1,346.2 424.3,419.7 "/>
|
||||
</g>
|
||||
</g>
|
||||
<path fill="#010202" d="M248.7,298.4V542L185,518V315.5L248.7,298.4 M262.8,280L171,304.7v223.1l91.8,34.5V280L262.8,280z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.2 KiB |
9
src/img/icons/navicon.svg
Executable file
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generated by IcoMoon.io -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="45" height="32" viewBox="0 0 45 32">
|
||||
<g id="icomoon-ignore">
|
||||
<line stroke-width="1" x1="" y1="" x2="" y2="" stroke="#449FDB" opacity=""></line>
|
||||
</g>
|
||||
<path d="M0 0.271h45.176v6.035h-45.176zM0 25.694h45.176v6.037h-45.176zM0 12.89h45.176v6.037h-45.176z" fill="#000000"></path>
|
||||
</svg>
|
After Width: | Height: | Size: 558 B |
12
src/img/icons/offline.svg
Normal file
@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="-406.7 279.2 283.5 283.5" enable-background="new -406.7 279.2 283.5 283.5" xml:space="preserve">
|
||||
<g id="icomoon-ignore">
|
||||
<line fill="none" stroke="#449FDB" x1="-265" y1="420.9" x2="-265" y2="420.9"/>
|
||||
</g>
|
||||
<path d="M-194.1,456.3l-50.6-50.6l121.5-91.1l-35.4-35.4l-151.8,60.8l-47.8-47.8c-13.8-13.8-33-17.1-42.8-7.3
|
||||
c-9.7,9.7-6.4,29,7.3,42.8l47.8,47.8l-60.8,151.9l35.4,35.4l91.1-121.5l50.6,50.6v70.9h35.4l17.7-53.1l53.1-17.7v-35.4L-194.1,456.3
|
||||
L-194.1,456.3z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 850 B |
18
src/img/icons/outbox.svg
Normal file
@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="155.9 279.2 283.5 283.5" enable-background="new 155.9 279.2 283.5 283.5" xml:space="preserve">
|
||||
<g>
|
||||
<path fill="#010202" d="M420.8,471.1l-21.2-83.7l-10.6,8.5l19,73.6h-62.6c-2.8,0-5.3,2.9-6.1,6.2c-2.4,20.2-19.6,35.8-40,35.8
|
||||
c-20.5,0-37.6-15-40-35.2c-0.6-3.1-3-5.2-5.9-5.2l-62.4,0.2L221,350.4c1.2-4.7,6.7-9.1,10.7-9.1h42c4-4,7.7-8.1,12.9-12.1h-55
|
||||
c-10.3,0-20.6,8.3-22.9,18.3L178,470.6l-1.7,75.3c0,9.8,7.8,16.4,19.4,16.4h208.1c10,0,17.6-6.8,17.6-16.7L420.8,471.1z
|
||||
M409.5,546.7c0,3.4-2.2,4.5-5.6,4.5h-209c-3.4,0-6.3-1.8-6.3-5.2v-63l59.2-0.1c2.5,11.4,9.5,21.7,18.7,29.1
|
||||
c9.3,7.6,21,11.6,33,11.6c11.7,0,23.3-4.1,32.7-11.6c9.3-7.5,15.9-17.8,18.4-29l59-0.2V546.7L409.5,546.7z"/>
|
||||
<g>
|
||||
<path fill="#010202" d="M438.4,348.6l-40.2,33.9l-10.6,8.9l-25.5,21.5l1.5-35.6c-5-1.5-16.2-3.5-29-3.5
|
||||
c-26.3,0-60.9,8.6-76.2,51.3l-8.1,23.5c0,0,0-24.9,0.1-25c0-0.4-0.7-47.8,31.2-80.3c4-4.2,8.7-8.1,13.9-11.6
|
||||
c8.7-5.9,19-10.7,31.2-13.9c0,0,25.6-5,39.9-4.5l1.5-33.9L438.4,348.6z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.3 KiB |
13
src/img/icons/reply.svg
Normal file
@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="155.9 279.2 283.5 283.5" enable-background="new 155.9 279.2 283.5 283.5" xml:space="preserve">
|
||||
<g id="icomoon-ignore_3_">
|
||||
<line fill="none" stroke="#449FDB" x1="297.6" y1="420.9" x2="297.6" y2="420.9"/>
|
||||
</g>
|
||||
<g>
|
||||
<path d="M439.4,548.4L427,513c-23-64.4-75-77.2-114.7-77.2c-19.2,0-35.8,3-43.5,5.5l2.1,53.7l-115.1-97.2l105.7-104.4l2.1,51.2
|
||||
c21.3-0.9,60.1,6.8,60.1,6.8C441.1,382.2,438.9,510,438.9,510.9C439.4,510.5,439.4,548.4,439.4,548.4z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 837 B |
15
src/img/icons/reply_all_light.svg
Normal file
@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="155.9 279.2 283.5 283.5" enable-background="new 155.9 279.2 283.5 283.5" xml:space="preserve">
|
||||
<g>
|
||||
<path d="M243.9,444.2l-10.6-8.4v17.6l-60.5-51l60.2-59.5v21.5l10.9-10.2v-38l-88,86.5l88,73.9L243.9,444.2L243.9,444.2z"/>
|
||||
<g>
|
||||
<path d="M439.1,495.2c0-0.7,1.8-106.2-95-131.6c0,0-32-6.3-49.6-5.6l-1.8-42.2l-87.2,86.2l94.6,80.2l-1.8-44.3
|
||||
c6.3-1.8,20.1-4.6,35.9-4.6c32.7,0,75.6,10.6,94.6,63.7l10.2,29.2C439.5,526.5,439.5,495.2,439.1,495.2z M334.6,422
|
||||
c-23.9,0-42.9,5.6-42.9,5.6l-4.6,1.4l1.4,26.4l-65.8-55.6l60.2-58l1.4,29.2h5.6c19,0,33.1,0.4,48.5,3.5l0,0
|
||||
c58,14.4,81.3,60.2,87.2,91.1C401.5,430.8,364.2,422,334.6,422z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.0 KiB |
12
src/img/icons/reply_light.svg
Normal file
@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="155.9 279.2 283.5 283.5" enable-background="new 155.9 279.2 283.5 283.5" xml:space="preserve">
|
||||
<g>
|
||||
<path d="M439.4,511c0-0.9,2.1-128.9-115.3-159.7c0,0-38.8-7.7-60.2-6.8l-2.1-51.2L155.9,397.9l114.8,97.3l-2.1-53.8
|
||||
c7.7-2.1,24.3-5.5,43.5-5.5c39.7,0,91.8,12.8,114.8,77.3l12.4,35.4C439.4,549,439.4,511,439.4,511z M312.2,422.2
|
||||
c-29,0-52.1,6.8-52.1,6.8l-5.5,1.7l1.7,32l-79.8-67.5l73-70.4l1.7,35.4h6.8c23.1,0,40.1,0.4,58.9,4.3l0,0
|
||||
c70.4,17.5,98.6,73,105.9,110.6C393.3,432.9,348,422.2,312.2,422.2z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 893 B |
18
src/img/icons/search.svg
Normal file
@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="155.9 279.2 283.5 283.5" enable-background="new 155.9 279.2 283.5 283.5" xml:space="preserve">
|
||||
<g>
|
||||
<g>
|
||||
<path d="M264.3,493.4c-45.4,0-86.1-28.7-101.9-71.3c-15.8-42.1-2.4-91.8,32.5-121c19.6-16.3,44-25.3,69.3-25.3
|
||||
c45.4,0,86.1,28.7,101.9,71.3c15.8,42.1,2.4,91.8-32.5,121C314.1,484.8,289.2,493.4,264.3,493.4z M264.3,295.4
|
||||
c-37.3,0-71.7,24.4-84.2,59.3c-12.4,35.4-1.4,75.1,27.7,99.5c15.8,12.9,35.9,20.1,56.9,20.1c16.3,0,32-4.3,45.9-12.9
|
||||
c32-19.6,48.8-57.4,41.6-93.7C343.7,326.5,305.9,295.4,264.3,295.4z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path d="M427.4,566.1c-1,0-2.4-0.5-2.9-1.4l-85.6-85.6c-1.4-1.9-1.4-4.3,0-5.7l7.7-7.7c1-1,1.9-1.4,2.9-1.4c1,0,1.9,0.5,2.9,1
|
||||
l85.6,85.6c1,1,1.4,1.9,1.4,2.9s-0.5,2.4-1.4,2.9l-7.2,7.2C429.8,566.1,428.9,566.1,427.4,566.1z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.1 KiB |
12
src/img/icons/sent.svg
Normal file
@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="_x2014_ŽÓť_x5F_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
x="0px" y="0px" viewBox="155.9 279.2 283.5 283.5" enable-background="new 155.9 279.2 283.5 283.5" xml:space="preserve">
|
||||
<g>
|
||||
<g>
|
||||
<path fill="#1A171B" d="M155.9,388.8L272.6,446l57.2,116.7l109.6-283.5L155.9,388.8z M186.6,390.7l217.8-84.6l-129,129
|
||||
L186.6,390.7z M329.3,532.9l-44.9-89.3l129.4-129.4L329.3,532.9z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 703 B |
12
src/img/icons/signature-invalid.svg
Executable file
@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="100px" height="100px" viewBox="0 0 100 100" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">
|
||||
<!-- Generator: Sketch 3.0.4 (8053) - http://www.bohemiancoding.com/sketch -->
|
||||
<title>signature-invalid-cutout</title>
|
||||
<desc>Created with Sketch.</desc>
|
||||
<defs></defs>
|
||||
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">
|
||||
<g id="signature-invalid-cutout" sketch:type="MSArtboardGroup" transform="translate(0.110156, 0.000000)" fill="#000000">
|
||||
<path d="M77.3119658,92 L50,64.6787909 L22.6865385,92 L8.00299145,77.3054987 L35.3149573,49.9977557 L8,22.6870202 L22.6850427,8.00149623 L50,35.3137279 L77.3149573,8 L92,22.6825315 L64.6850427,49.9977557 L91.9970085,77.3054987 L77.3119658,92 Z" sketch:type="MSShapeGroup"></path>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 995 B |
12
src/img/icons/signature-verified.svg
Executable file
@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="100px" height="100px" viewBox="0 0 100 100" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">
|
||||
<!-- Generator: Sketch 3.0.4 (8053) - http://www.bohemiancoding.com/sketch -->
|
||||
<title>signature-verified-cutout</title>
|
||||
<desc>Created with Sketch.</desc>
|
||||
<defs></defs>
|
||||
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">
|
||||
<g id="signature-verified-cutout" sketch:type="MSArtboardGroup" transform="translate(0.110156, 0.000000)" fill="#000000">
|
||||
<path d="M50,97 C75.9573832,97 97,75.9573832 97,50 C97,24.0426168 75.9573832,3 50,3 C24.0426168,3 3,24.0426168 3,50 C3,75.9573832 24.0426168,97 50,97 Z M46.2732912,77.5085 L20,57.830916 L27.9184401,47.6349702 L43.3096859,59.5152262 L70.31112,23 L80.867825,30.7782191 L46.2732912,77.5085 Z" sketch:type="MSShapeGroup"></path>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.0 KiB |
9
src/img/icons/star.svg
Normal file
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="155.9 279.2 283.5 283.5" enable-background="new 155.9 279.2 283.5 283.5" xml:space="preserve">
|
||||
<path fill="#1A171B" d="M383.5,555.1l-87.6-45.2l-87.2,45.2l16.5-96.6l-69.3-69.3l97.9-13.4l43.8-89l43.8,89l97.9,13.4l-72.4,69.3
|
||||
L383.5,555.1z M181.4,398.6l57.2,55.9l-13.4,80l70.6-37.6l70.6,37.6l-13.4-80l58.6-55.9l-80-12.1l-34.9-72.4l-36.2,72.4L181.4,398.6
|
||||
z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 743 B |
8
src/img/icons/star_filled.svg
Normal file
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="155.9 279.2 283.5 283.5" enable-background="new 155.9 279.2 283.5 283.5" xml:space="preserve">
|
||||
<path fill="#1A171B" d="M383,555.1l-87.2-45.2l-87.2,45.2l16.5-96.6l-69.3-69.3l97.9-13.4l43.8-89l43.8,89l97.9,13.4l-72.9,69.3
|
||||
L383,555.1z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 621 B |
14
src/img/icons/write.svg
Normal file
@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="155.9 279.2 283.5 283.5" enable-background="new 155.9 279.2 283.5 283.5" xml:space="preserve">
|
||||
<g>
|
||||
<polygon points="316.6,462.8 288.9,435.1 278.6,473.1 "/>
|
||||
<polygon points="325.8,453.6 416.3,363.1 388.6,335.4 298.1,424.5 "/>
|
||||
<rect x="409.5" y="312.8" transform="matrix(-0.7071 0.7071 -0.7071 -0.7071 950.0844 272.8144)" width="18.1" height="40.8"/>
|
||||
<path d="M386.1,430.2l12.8-12.4v78.8c0,16.3-12.8,28.8-27.7,28.8H214.7c-16.3,0-27.7-12.8-27.7-28.8V341.4
|
||||
c0-16.3,12.8-28.8,27.7-28.8h158.7l-12.8,12.8H213.3c-5.7,0-13.5,7.8-13.5,13.5v159c0,5.7,7.8,13.5,13.5,13.5h159
|
||||
c5.7,0,13.5-7.8,13.5-13.5v-67.8H386.1z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1011 B |
Before Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 47 KiB |
Before Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 178 KiB |
@ -1,12 +1,9 @@
|
||||
<!DOCTYPE html>
|
||||
<html ng-app="mail" ng-csp manifest="appcache.manifest">
|
||||
<html ng-csp manifest="appcache.manifest">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Whiteout Mail</title>
|
||||
|
||||
<!-- Theses CSP rules are used as a fallback in runtimes such as Cordova -->
|
||||
<meta http-equiv="Content-Security-Policy" content="default-src 'self' chrome-extension: file: gap:; object-src 'none'; script-src 'self' 'unsafe-eval' chrome-extension: file: gap:; connect-src *; style-src 'self' 'unsafe-inline' chrome-extension: file: gap:; img-src 'self' chrome-extension: file: gap: data:">
|
||||
|
||||
<!-- iOS homescreen link -->
|
||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||
<!-- iOS iPad icon (retina) -->
|
||||
@ -15,10 +12,22 @@
|
||||
<link rel="apple-touch-icon" sizes="120x120" href="img/icon-120-ios.png">
|
||||
<!-- iOS status bar black with white text -->
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="black">
|
||||
|
||||
<!-- standard homescreen link -->
|
||||
<meta name="mobile-web-app-capable" content="yes">
|
||||
<!-- standard icon (retina) -->
|
||||
<link rel="icon" sizes="196x196" href="img/icon-196.png">
|
||||
<!-- standard icons -->
|
||||
<link rel="icon" sizes="36x36" href="img/icon-36-android.png">
|
||||
<link rel="icon" sizes="48x48" href="img/icon-48-android.png">
|
||||
<link rel="icon" sizes="72x72" href="img/icon-72-android.png">
|
||||
<link rel="icon" sizes="96x96" href="img/icon-96-android.png">
|
||||
<link rel="icon" sizes="144x144" href="img/icon-144-android.png">
|
||||
<link rel="icon" sizes="192x192" href="img/icon-192-android.png">
|
||||
<link rel="icon" sizes="196x196" href="img/icon-196-universal.png">
|
||||
|
||||
<!-- theme color -->
|
||||
<meta name="theme-color" content="#00c6ff">
|
||||
<!-- standard web app manifest -->
|
||||
<link rel="manifest" href="webapp.json">
|
||||
|
||||
<!-- Viewport and styles -->
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
|
||||
@ -26,19 +35,23 @@
|
||||
|
||||
<!-- The Scripts -->
|
||||
<script src="socket.io/socket.io.js"></script>
|
||||
<script src="lib/require.js"></script>
|
||||
<script src="require-config.js"></script>
|
||||
<script src="js/app.js"></script>
|
||||
<script src="js/openpgp.min.js"></script>
|
||||
<script src="js/forge.min.js"></script>
|
||||
<script src="js/app.min.js"></script>
|
||||
</head>
|
||||
|
||||
<body key-shortcuts>
|
||||
<body wo-key-shortcuts>
|
||||
|
||||
<!-- inline icons have to come first, hide immediately with inline styles -->
|
||||
<div style="width: 0; height: 0; visibility: hidden;">
|
||||
<!-- @import img/icons/all.svg -->
|
||||
</div>
|
||||
|
||||
<div ng-view class="main-app-view"></div>
|
||||
|
||||
<!-- error dialog lightbox -->
|
||||
<div class="lightbox-overlay" ng-class="{'show': state.dialog.open}">
|
||||
<div class="lightbox dialog view-dialog" ng-include="'tpl/dialog.html'"></div>
|
||||
</div><!--/.lightbox-overlay-->
|
||||
<div class="lightbox lightbox--dialog" ng-class="{'lightbox--show': state.dialog.open}"
|
||||
ng-include="'tpl/dialog.html'"></div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
@ -1,190 +1,82 @@
|
||||
define(function(require) {
|
||||
'use strict';
|
||||
'use strict';
|
||||
|
||||
var _ = require('underscore'),
|
||||
app = {},
|
||||
appVersion, cloudUrl, keychainUrl, clientId;
|
||||
var appCfg = {};
|
||||
|
||||
// parse manifest to get configurations for current runtime
|
||||
try {
|
||||
var manifest = chrome.runtime.getManifest();
|
||||
// get key server base url
|
||||
cloudUrl = _.find(manifest.permissions, function(permission) {
|
||||
return typeof permission === 'string' && permission.indexOf('https://keys') === 0;
|
||||
});
|
||||
// remove last '/' from url due to required syntax in manifest
|
||||
cloudUrl = cloudUrl.substring(0, cloudUrl.length - 1);
|
||||
// get keychain server base url
|
||||
keychainUrl = _.find(manifest.permissions, function(permission) {
|
||||
return typeof permission === 'string' && permission.indexOf('https://keychain') === 0;
|
||||
});
|
||||
// remove last '/' from url due to required syntax in manifest
|
||||
keychainUrl = keychainUrl.substring(0, keychainUrl.length - 1);
|
||||
// get client ID for OAuth requests
|
||||
clientId = manifest.oauth2.client_id;
|
||||
// get the app version
|
||||
appVersion = manifest.version;
|
||||
} catch (e) {}
|
||||
var ngModule = angular.module('woAppConfig', []);
|
||||
ngModule.factory('appConfig', function() {
|
||||
return appCfg;
|
||||
});
|
||||
module.exports = appCfg;
|
||||
|
||||
/**
|
||||
/**
|
||||
* Global app configurations
|
||||
*/
|
||||
app.config = {
|
||||
cloudUrl: cloudUrl || 'https://keys.whiteout.io',
|
||||
privkeyServerUrl: keychainUrl || 'https://keychain.whiteout.io',
|
||||
appCfg.config = {
|
||||
pgpComment: 'Whiteout Mail - https://whiteout.io',
|
||||
keyServerUrl: 'https://keys.whiteout.io',
|
||||
hkpUrl: 'http://keyserver.ubuntu.com',
|
||||
adminUrl: 'https://admin-node.whiteout.io',
|
||||
wmailDomain: 'wmail.io',
|
||||
settingsUrl: 'https://settings.whiteout.io/autodiscovery/',
|
||||
mailServer: {
|
||||
domain: 'wmail.io',
|
||||
imap: {
|
||||
hostname: 'imap.wmail.io',
|
||||
port: 993,
|
||||
secure: true
|
||||
},
|
||||
smtp: {
|
||||
hostname: 'smtp.wmail.io',
|
||||
port: 465,
|
||||
secure: true
|
||||
}
|
||||
},
|
||||
oauthDomains: [/\.gmail\.com$/, /\.googlemail\.com$/],
|
||||
ignoreUploadOnSentDomains: [/\.gmail\.com$/, /\.googlemail\.com$/],
|
||||
serverPrivateKeyId: 'EE342F0DDBB0F3BE',
|
||||
symKeySize: 256,
|
||||
symIvSize: 96,
|
||||
asymKeySize: 2048,
|
||||
workerPath: 'js',
|
||||
reconnectInterval: 10000,
|
||||
wmail: {
|
||||
imap: {
|
||||
host: 'imap.wmail.io',
|
||||
port: 993,
|
||||
secure: true,
|
||||
ca: '-----BEGIN CERTIFICATE-----\r\nMIIGiTCCBXGgAwIBAgIDAn03MA0GCSqGSIb3DQEBBQUAMIGMMQswCQYDVQQGEwJJ\r\nTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0\r\nYWwgQ2VydGlmaWNhdGUgU2lnbmluZzE4MDYGA1UEAxMvU3RhcnRDb20gQ2xhc3Mg\r\nMiBQcmltYXJ5IEludGVybWVkaWF0ZSBTZXJ2ZXIgQ0EwHhcNMTQwOTIxMTQ0ODQ0\r\nWhcNMTYwOTIxMTE0MzIxWjCBmTEZMBcGA1UEDRMQQ1NIeEdsdlg4Z3lRQ2c3TzEL\r\nMAkGA1UEBhMCREUxDzANBgNVBAgTBkJheWVybjEPMA0GA1UEBxMGTXVuaWNoMRUw\r\nEwYDVQQKEwxUYW5rcmVkIEhhc2UxEzARBgNVBAMUCioud21haWwuaW8xITAfBgkq\r\nhkiG9w0BCQEWEndlYm1hc3RlckB3bWFpbC5pbzCCASIwDQYJKoZIhvcNAQEBBQAD\r\nggEPADCCAQoCggEBAMkbMzFfZLYqfWG8yw2HvuNiFs5ajBFMrjG3fobePE674mPd\r\niFtXqbl3ydQ+umTtbJ6bztgxB3KgrL3lhp6IkD4VxB8YQJoYGhU6YH7FhP4QMm8l\r\ncnFLUZXEbcpcCg1tjL6+vvoTMUWEbV/zNtF/oiJ4AIOKwf0zUMZkTu1FCNrOrvpj\r\n6SAkOdBGzLTOAP5vxP43PfpZPZ4dLL2Be7ENYKXqPs0jSlUWpdT9l4AZG8rHKa2d\r\nccWvRoAsCfvpzGDoMYEx9+a1F1XjNZfzo7yJQcHdaE3Mj1eNqbjZe0+Vmact1S/3\r\nsubdcDVkFSfUMsAB5rH0D5mEhy7sMpt1WWCvOF8CAwEAAaOCAuMwggLfMAkGA1Ud\r\nEwQCMAAwCwYDVR0PBAQDAgOoMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcD\r\nATAdBgNVHQ4EFgQUv+9x4PISm5Roq4pdNoaFJeIZFfUwHwYDVR0jBBgwFoAUEdsj\r\nRf1UzGpxb4SKA9e+9wEvJoYwHwYDVR0RBBgwFoIKKi53bWFpbC5pb4IId21haWwu\r\naW8wggFWBgNVHSAEggFNMIIBSTAIBgZngQwBAgIwggE7BgsrBgEEAYG1NwECAzCC\r\nASowLgYIKwYBBQUHAgEWImh0dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5w\r\nZGYwgfcGCCsGAQUFBwICMIHqMCcWIFN0YXJ0Q29tIENlcnRpZmljYXRpb24gQXV0\r\naG9yaXR5MAMCAQEagb5UaGlzIGNlcnRpZmljYXRlIHdhcyBpc3N1ZWQgYWNjb3Jk\r\naW5nIHRvIHRoZSBDbGFzcyAyIFZhbGlkYXRpb24gcmVxdWlyZW1lbnRzIG9mIHRo\r\nZSBTdGFydENvbSBDQSBwb2xpY3ksIHJlbGlhbmNlIG9ubHkgZm9yIHRoZSBpbnRl\r\nbmRlZCBwdXJwb3NlIGluIGNvbXBsaWFuY2Ugb2YgdGhlIHJlbHlpbmcgcGFydHkg\r\nb2JsaWdhdGlvbnMuMDUGA1UdHwQuMCwwKqAooCaGJGh0dHA6Ly9jcmwuc3RhcnRz\r\nc2wuY29tL2NydDItY3JsLmNybDCBjgYIKwYBBQUHAQEEgYEwfzA5BggrBgEFBQcw\r\nAYYtaHR0cDovL29jc3Auc3RhcnRzc2wuY29tL3N1Yi9jbGFzczIvc2VydmVyL2Nh\r\nMEIGCCsGAQUFBzAChjZodHRwOi8vYWlhLnN0YXJ0c3NsLmNvbS9jZXJ0cy9zdWIu\r\nY2xhc3MyLnNlcnZlci5jYS5jcnQwIwYDVR0SBBwwGoYYaHR0cDovL3d3dy5zdGFy\r\ndHNzbC5jb20vMA0GCSqGSIb3DQEBBQUAA4IBAQDEDbCBvdfs/lEsEJk0xGB6OghO\r\ngUAHplmWJEXoHb0h7p2QAIcs/QKorMDi35bu/J2vbVRIP7i5wBTZLIHBaf03mqAR\r\nZxYFy/ymyROVmmKl1x1/ry1aumomfU86UN8hCkvJc+40V2KC1lCZcjqPWufECjpo\r\n37QXFA+te/rVyVgvoMhIq+zOBZEK0/2mYGCwlpEQo3HElCQIwV9upChOHnQ2jZyF\r\nCmoUyv0JNr8dkh6H7+KTV6FzWaC+b6Liier9bpfEq/zDAp41GR+L/pdbaliSDtRg\r\nfPhAyCZqwsXid6HgIyTBqxUpGDGRiuygqghmqlFfppZuAqz02wrNceDHH7Up\r\n-----END CERTIFICATE-----\r\n',
|
||||
pinned: true,
|
||||
ignoreTLS: false
|
||||
|
||||
},
|
||||
smtp: {
|
||||
host: 'smtp.wmail.io',
|
||||
port: 465,
|
||||
secure: true,
|
||||
ca: '-----BEGIN CERTIFICATE-----\r\nMIIGiTCCBXGgAwIBAgIDAn03MA0GCSqGSIb3DQEBBQUAMIGMMQswCQYDVQQGEwJJ\r\nTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0\r\nYWwgQ2VydGlmaWNhdGUgU2lnbmluZzE4MDYGA1UEAxMvU3RhcnRDb20gQ2xhc3Mg\r\nMiBQcmltYXJ5IEludGVybWVkaWF0ZSBTZXJ2ZXIgQ0EwHhcNMTQwOTIxMTQ0ODQ0\r\nWhcNMTYwOTIxMTE0MzIxWjCBmTEZMBcGA1UEDRMQQ1NIeEdsdlg4Z3lRQ2c3TzEL\r\nMAkGA1UEBhMCREUxDzANBgNVBAgTBkJheWVybjEPMA0GA1UEBxMGTXVuaWNoMRUw\r\nEwYDVQQKEwxUYW5rcmVkIEhhc2UxEzARBgNVBAMUCioud21haWwuaW8xITAfBgkq\r\nhkiG9w0BCQEWEndlYm1hc3RlckB3bWFpbC5pbzCCASIwDQYJKoZIhvcNAQEBBQAD\r\nggEPADCCAQoCggEBAMkbMzFfZLYqfWG8yw2HvuNiFs5ajBFMrjG3fobePE674mPd\r\niFtXqbl3ydQ+umTtbJ6bztgxB3KgrL3lhp6IkD4VxB8YQJoYGhU6YH7FhP4QMm8l\r\ncnFLUZXEbcpcCg1tjL6+vvoTMUWEbV/zNtF/oiJ4AIOKwf0zUMZkTu1FCNrOrvpj\r\n6SAkOdBGzLTOAP5vxP43PfpZPZ4dLL2Be7ENYKXqPs0jSlUWpdT9l4AZG8rHKa2d\r\nccWvRoAsCfvpzGDoMYEx9+a1F1XjNZfzo7yJQcHdaE3Mj1eNqbjZe0+Vmact1S/3\r\nsubdcDVkFSfUMsAB5rH0D5mEhy7sMpt1WWCvOF8CAwEAAaOCAuMwggLfMAkGA1Ud\r\nEwQCMAAwCwYDVR0PBAQDAgOoMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcD\r\nATAdBgNVHQ4EFgQUv+9x4PISm5Roq4pdNoaFJeIZFfUwHwYDVR0jBBgwFoAUEdsj\r\nRf1UzGpxb4SKA9e+9wEvJoYwHwYDVR0RBBgwFoIKKi53bWFpbC5pb4IId21haWwu\r\naW8wggFWBgNVHSAEggFNMIIBSTAIBgZngQwBAgIwggE7BgsrBgEEAYG1NwECAzCC\r\nASowLgYIKwYBBQUHAgEWImh0dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5w\r\nZGYwgfcGCCsGAQUFBwICMIHqMCcWIFN0YXJ0Q29tIENlcnRpZmljYXRpb24gQXV0\r\naG9yaXR5MAMCAQEagb5UaGlzIGNlcnRpZmljYXRlIHdhcyBpc3N1ZWQgYWNjb3Jk\r\naW5nIHRvIHRoZSBDbGFzcyAyIFZhbGlkYXRpb24gcmVxdWlyZW1lbnRzIG9mIHRo\r\nZSBTdGFydENvbSBDQSBwb2xpY3ksIHJlbGlhbmNlIG9ubHkgZm9yIHRoZSBpbnRl\r\nbmRlZCBwdXJwb3NlIGluIGNvbXBsaWFuY2Ugb2YgdGhlIHJlbHlpbmcgcGFydHkg\r\nb2JsaWdhdGlvbnMuMDUGA1UdHwQuMCwwKqAooCaGJGh0dHA6Ly9jcmwuc3RhcnRz\r\nc2wuY29tL2NydDItY3JsLmNybDCBjgYIKwYBBQUHAQEEgYEwfzA5BggrBgEFBQcw\r\nAYYtaHR0cDovL29jc3Auc3RhcnRzc2wuY29tL3N1Yi9jbGFzczIvc2VydmVyL2Nh\r\nMEIGCCsGAQUFBzAChjZodHRwOi8vYWlhLnN0YXJ0c3NsLmNvbS9jZXJ0cy9zdWIu\r\nY2xhc3MyLnNlcnZlci5jYS5jcnQwIwYDVR0SBBwwGoYYaHR0cDovL3d3dy5zdGFy\r\ndHNzbC5jb20vMA0GCSqGSIb3DQEBBQUAA4IBAQDEDbCBvdfs/lEsEJk0xGB6OghO\r\ngUAHplmWJEXoHb0h7p2QAIcs/QKorMDi35bu/J2vbVRIP7i5wBTZLIHBaf03mqAR\r\nZxYFy/ymyROVmmKl1x1/ry1aumomfU86UN8hCkvJc+40V2KC1lCZcjqPWufECjpo\r\n37QXFA+te/rVyVgvoMhIq+zOBZEK0/2mYGCwlpEQo3HElCQIwV9upChOHnQ2jZyF\r\nCmoUyv0JNr8dkh6H7+KTV6FzWaC+b6Liier9bpfEq/zDAp41GR+L/pdbaliSDtRg\r\nfPhAyCZqwsXid6HgIyTBqxUpGDGRiuygqghmqlFfppZuAqz02wrNceDHH7Up\r\n-----END CERTIFICATE-----\r\n',
|
||||
pinned: true,
|
||||
ignoreTLS: false
|
||||
}
|
||||
},
|
||||
gmail: {
|
||||
clientId: clientId || '440907777130.apps.googleusercontent.com',
|
||||
imap: {
|
||||
host: 'imap.gmail.com',
|
||||
port: 993,
|
||||
secure: true,
|
||||
ca: '-----BEGIN CERTIFICATE-----\r\nMIIEBDCCAuygAwIBAgIDAjppMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT\r\nMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i\r\nYWwgQ0EwHhcNMTMwNDA1MTUxNTU1WhcNMTUwNDA0MTUxNTU1WjBJMQswCQYDVQQG\r\nEwJVUzETMBEGA1UEChMKR29vZ2xlIEluYzElMCMGA1UEAxMcR29vZ2xlIEludGVy\r\nbmV0IEF1dGhvcml0eSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB\r\nAJwqBHdc2FCROgajguDYUEi8iT/xGXAaiEZ+4I/F8YnOIe5a/mENtzJEiaB0C1NP\r\nVaTOgmKV7utZX8bhBYASxF6UP7xbSDj0U/ck5vuR6RXEz/RTDfRK/J9U3n2+oGtv\r\nh8DQUB8oMANA2ghzUWx//zo8pzcGjr1LEQTrfSTe5vn8MXH7lNVg8y5Kr0LSy+rE\r\nahqyzFPdFUuLH8gZYR/Nnag+YyuENWllhMgZxUYi+FOVvuOAShDGKuy6lyARxzmZ\r\nEASg8GF6lSWMTlJ14rbtCMoU/M4iarNOz0YDl5cDfsCx3nuvRTPPuj5xt970JSXC\r\nDTWJnZ37DhF5iR43xa+OcmkCAwEAAaOB+zCB+DAfBgNVHSMEGDAWgBTAephojYn7\r\nqwVkDBF9qn1luMrMTjAdBgNVHQ4EFgQUSt0GFhu89mi1dvWBtrtiGrpagS8wEgYD\r\nVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwOgYDVR0fBDMwMTAvoC2g\r\nK4YpaHR0cDovL2NybC5nZW90cnVzdC5jb20vY3Jscy9ndGdsb2JhbC5jcmwwPQYI\r\nKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwOi8vZ3RnbG9iYWwtb2NzcC5n\r\nZW90cnVzdC5jb20wFwYDVR0gBBAwDjAMBgorBgEEAdZ5AgUBMA0GCSqGSIb3DQEB\r\nBQUAA4IBAQA21waAESetKhSbOHezI6B1WLuxfoNCunLaHtiONgaX4PCVOzf9G0JY\r\n/iLIa704XtE7JW4S615ndkZAkNoUyHgN7ZVm2o6Gb4ChulYylYbc3GrKBIxbf/a/\r\nzG+FA1jDaFETzf3I93k9mTXwVqO94FntT0QJo544evZG0R0SnU++0ED8Vf4GXjza\r\nHFa9llF7b1cq26KqltyMdMKVvvBulRP/F/A8rLIQjcxz++iPAsbw+zOzlTvjwsto\r\nWHPbqCRiOwY1nQ2pM714A5AuTHhdUDqB1O6gyHA43LL5Z/qHQF1hwFGPa4NrzQU6\r\nyuGnBXj8ytqU0CwIPX4WecigUCAkVDNx\r\n-----END CERTIFICATE-----',
|
||||
pinned: true,
|
||||
ignoreTLS: false
|
||||
},
|
||||
smtp: {
|
||||
host: 'smtp.gmail.com',
|
||||
port: 465,
|
||||
secure: true,
|
||||
ca: '-----BEGIN CERTIFICATE-----\r\nMIIEBDCCAuygAwIBAgIDAjppMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT\r\nMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i\r\nYWwgQ0EwHhcNMTMwNDA1MTUxNTU1WhcNMTUwNDA0MTUxNTU1WjBJMQswCQYDVQQG\r\nEwJVUzETMBEGA1UEChMKR29vZ2xlIEluYzElMCMGA1UEAxMcR29vZ2xlIEludGVy\r\nbmV0IEF1dGhvcml0eSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB\r\nAJwqBHdc2FCROgajguDYUEi8iT/xGXAaiEZ+4I/F8YnOIe5a/mENtzJEiaB0C1NP\r\nVaTOgmKV7utZX8bhBYASxF6UP7xbSDj0U/ck5vuR6RXEz/RTDfRK/J9U3n2+oGtv\r\nh8DQUB8oMANA2ghzUWx//zo8pzcGjr1LEQTrfSTe5vn8MXH7lNVg8y5Kr0LSy+rE\r\nahqyzFPdFUuLH8gZYR/Nnag+YyuENWllhMgZxUYi+FOVvuOAShDGKuy6lyARxzmZ\r\nEASg8GF6lSWMTlJ14rbtCMoU/M4iarNOz0YDl5cDfsCx3nuvRTPPuj5xt970JSXC\r\nDTWJnZ37DhF5iR43xa+OcmkCAwEAAaOB+zCB+DAfBgNVHSMEGDAWgBTAephojYn7\r\nqwVkDBF9qn1luMrMTjAdBgNVHQ4EFgQUSt0GFhu89mi1dvWBtrtiGrpagS8wEgYD\r\nVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwOgYDVR0fBDMwMTAvoC2g\r\nK4YpaHR0cDovL2NybC5nZW90cnVzdC5jb20vY3Jscy9ndGdsb2JhbC5jcmwwPQYI\r\nKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwOi8vZ3RnbG9iYWwtb2NzcC5n\r\nZW90cnVzdC5jb20wFwYDVR0gBBAwDjAMBgorBgEEAdZ5AgUBMA0GCSqGSIb3DQEB\r\nBQUAA4IBAQA21waAESetKhSbOHezI6B1WLuxfoNCunLaHtiONgaX4PCVOzf9G0JY\r\n/iLIa704XtE7JW4S615ndkZAkNoUyHgN7ZVm2o6Gb4ChulYylYbc3GrKBIxbf/a/\r\nzG+FA1jDaFETzf3I93k9mTXwVqO94FntT0QJo544evZG0R0SnU++0ED8Vf4GXjza\r\nHFa9llF7b1cq26KqltyMdMKVvvBulRP/F/A8rLIQjcxz++iPAsbw+zOzlTvjwsto\r\nWHPbqCRiOwY1nQ2pM714A5AuTHhdUDqB1O6gyHA43LL5Z/qHQF1hwFGPa4NrzQU6\r\nyuGnBXj8ytqU0CwIPX4WecigUCAkVDNx\r\n-----END CERTIFICATE-----',
|
||||
pinned: true,
|
||||
ignoreTLS: false
|
||||
},
|
||||
ignoreUploadOnSent: true
|
||||
},
|
||||
yahoo: {
|
||||
imap: {
|
||||
host: 'imap.mail.yahoo.com',
|
||||
port: 993,
|
||||
secure: true,
|
||||
ca: '-----BEGIN CERTIFICATE-----\r\nMIIFUjCCBDqgAwIBAgIQdThnkckQvgouzHOsQA7ctTANBgkqhkiG9w0BAQUFADCB\r\ntTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL\r\nExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTswOQYDVQQLEzJUZXJtcyBvZiB1c2Ug\r\nYXQgaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYSAoYykxMDEvMC0GA1UEAxMm\r\nVmVyaVNpZ24gQ2xhc3MgMyBTZWN1cmUgU2VydmVyIENBIC0gRzMwHhcNMTQwNDIy\r\nMDAwMDAwWhcNMTUwNDIzMjM1OTU5WjCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgT\r\nCkNhbGlmb3JuaWExEjAQBgNVBAcUCVN1bm55dmFsZTETMBEGA1UEChQKWWFob28g\r\nSW5jLjEfMB0GA1UECxQWSW5mb3JtYXRpb24gVGVjaG5vbG9neTEeMBwGA1UEAxQV\r\nKi5pbWFwLm1haWwueWFob28uY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB\r\nCgKCAQEAw36HN2sgtMNQ0TZlqGgfqInK/UT6y3ZgqDdmFRU9D5D5675hfxcwJoS+\r\nb0hIn/UixbZDpSLhNkjAkOTAbFEFWar7628D2dU5WtCUlFMiwg2TA0Un8B9EbUi5\r\nwDrqzXDyABVnBVR5I2eKwr5cuB9ldjxAabcCyqQhVKdH0+IskRpUrvxAb84uQtJg\r\nJyNieOZAWdxg9fkubk1YKw/MgJHnaY8P4lUlYY8fIY39d6gW6My8oT0IersrH1X1\r\n/oCmqUIGM1PawXBvvpPKYdI4fCH75/UaEQ41BFSUn1NsinFYZUPlVcBCOvLFEOQi\r\nuU+4Tjybq3x7NNhd3uBxfm4jo4h5zQIDAQABo4IBgzCCAX8wNQYDVR0RBC4wLIIV\r\nKi5pbWFwLm1haWwueWFob28uY29tghNpbWFwLm1haWwueWFob28uY29tMAkGA1Ud\r\nEwQCMAAwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEF\r\nBQcDAjBlBgNVHSAEXjBcMFoGCmCGSAGG+EUBBzYwTDAjBggrBgEFBQcCARYXaHR0\r\ncHM6Ly9kLnN5bWNiLmNvbS9jcHMwJQYIKwYBBQUHAgIwGRoXaHR0cHM6Ly9kLnN5\r\nbWNiLmNvbS9ycGEwHwYDVR0jBBgwFoAUDURcFlNEwYJ+HSCrJfQBY9i+eaUwKwYD\r\nVR0fBCQwIjAgoB6gHIYaaHR0cDovL3NkLnN5bWNiLmNvbS9zZC5jcmwwVwYIKwYB\r\nBQUHAQEESzBJMB8GCCsGAQUFBzABhhNodHRwOi8vc2Quc3ltY2QuY29tMCYGCCsG\r\nAQUFBzAChhpodHRwOi8vc2Quc3ltY2IuY29tL3NkLmNydDANBgkqhkiG9w0BAQUF\r\nAAOCAQEAVxsglXJTtBTCoTwOd6j0iJQ+P9cxFVqHcmbshEfEQBlPwr4Sp9tLJ4kj\r\nfVi0XorWU6e6e57dtYtxpcPz+6WNSNKT0B0IBOTUTIBwSLJMHxEZI6gSS/fo1agt\r\n81B06rB8Rhn4yHwyDO/9uRvXbNYiEgpa5e6gIpXY6h6p1HscQMcuROaUA9ETvGd8\r\nDKG4XSZE7QAF9iB9WSLa/IQUD4sGMDaMp2q4XkoWZTnyL1bEDKwUvw9Z17PxVmrF\r\n8c7S5HTNU+1kyZw2LJRu3SgtsYXSWA88WFiKUPuqU+EBXmbrwLAwLAJ6mVc2bGFC\r\ng5fLGbtTscaARBlb1u3Iee2Fd419jg==\r\n-----END CERTIFICATE-----',
|
||||
pinned: true,
|
||||
ignoreTLS: false
|
||||
},
|
||||
smtp: {
|
||||
host: 'smtp.mail.yahoo.com',
|
||||
port: 465,
|
||||
secure: true,
|
||||
ca: '-----BEGIN CERTIFICATE-----\r\nMIIHITCCBgmgAwIBAgIQBlVSvxlwsqw8Kc8eVV5EKTANBgkqhkiG9w0BAQUFADBm\r\nMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\r\nd3cuZGlnaWNlcnQuY29tMSUwIwYDVQQDExxEaWdpQ2VydCBIaWdoIEFzc3VyYW5j\r\nZSBDQS0zMB4XDTE0MDYwNTAwMDAwMFoXDTE1MDYyMzEyMDAwMFowYjELMAkGA1UE\r\nBhMCVVMxCzAJBgNVBAgTAkNBMRIwEAYDVQQHEwlTdW5ueXZhbGUxFDASBgNVBAoM\r\nC1lhaG9vISBJbmMuMRwwGgYDVQQDExNzbXRwLm1haWwueWFob28uY29tMIIBIjAN\r\nBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA339OSxTIuW6NVqKwYHFBbg4/tmEx\r\nMYpzohtObPaWgvLTsYdce+WlQFBU5rxaCMUtVsVAGJWs5uQRDVHXRLPnOWe+foqZ\r\n5ItgjYIQc1XeMv6BZEeaF3Bum5ehUyLB3y48cjbWxma1QlkZ8XAK0f9AS7ySWAen\r\no5OXJlMFAqXGtKMAhY46dzSY0wjgdrvgiomFRy0iQKV1DxGsXoXSMEszlUTQoNQ3\r\nWTsiA3O//cdWE06wWeA3/90cb7QkU3KflSoyfi878BQGpPR1L+rLNsqnc8QuucbD\r\nz4Q++rxGqgg4QYrOtmZfAn96TXhPWCwKld6FN+f3uV5ITOBFx44M5v1ILQIDAQAB\r\no4IDzTCCA8kwHwYDVR0jBBgwFoAUUOpzidsp+xCPnuUBINTeeZlIg/cwHQYDVR0O\r\nBBYEFEhOpSFQjO/QrSNfVwyInZUhyzhsMIICJAYDVR0RBIICGzCCAheCE3NtdHAu\r\nbWFpbC55YWhvby5jb22CFnNtdHAubWFpbC55YWhvby5jb20uYXKCFnNtdHAubWFp\r\nbC55YWhvby5jb20uYXWCFnNtdHAubWFpbC55YWhvby5jb20uYnKCFnNtdHAubWFp\r\nbC55YWhvby5jb20uY26CFnNtdHAubWFpbC55YWhvby5jb20uaGuCFnNtdHAubWFp\r\nbC55YWhvby5jb20ubXmCFnNtdHAubWFpbC55YWhvby5jb20ucGiCFnNtdHAubWFp\r\nbC55YWhvby5jb20uc2eCFnNtdHAubWFpbC55YWhvby5jb20udHeCFnNtdHAubWFp\r\nbC55YWhvby5jb20udm6CFXNtdHAubWFpbC55YWhvby5jby5pZIIVc210cC5tYWls\r\nLnlhaG9vLmNvLmlughVzbXRwLm1haWwueWFob28uY28ua3KCFXNtdHAubWFpbC55\r\nYWhvby5jby50aIIVc210cC5tYWlsLnlhaG9vLmNvLnVrghJzbXRwLm1haWwueWFo\r\nb28uY2GCEnNtdHAubWFpbC55YWhvby5jboISc210cC5tYWlsLnlhaG9vLmRlghJz\r\nbXRwLm1haWwueWFob28uZXOCEnNtdHAubWFpbC55YWhvby5mcoISc210cC5tYWls\r\nLnlhaG9vLml0gg9zbXRwLnk3bWFpbC5jb22CFHNtdHAuY29ycmVvLnlhaG9vLmVz\r\nMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIw\r\nYQYDVR0fBFowWDAqoCigJoYkaHR0cDovL2NybDMuZGlnaWNlcnQuY29tL2NhMy1n\r\nMjguY3JsMCqgKKAmhiRodHRwOi8vY3JsNC5kaWdpY2VydC5jb20vY2EzLWcyOC5j\r\ncmwwQgYDVR0gBDswOTA3BglghkgBhv1sAQEwKjAoBggrBgEFBQcCARYcaHR0cHM6\r\nLy93d3cuZGlnaWNlcnQuY29tL0NQUzB7BggrBgEFBQcBAQRvMG0wJAYIKwYBBQUH\r\nMAGGGGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0LmNvbTBFBggrBgEFBQcwAoY5aHR0cDov\r\nL2NhY2VydHMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0SGlnaEFzc3VyYW5jZUNBLTMu\r\nY3J0MAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQEFBQADggEBABshjUND4hADHGfe\r\ncV9XGXcr9h3u7mT5kgdcgGFhcrFAlwkzt0NUCbuN0X8DWHE72Tpb3zRE25CmUUJe\r\nktBbq9PQb4b5/Wt1htAEw0qUs3BsUbqejK9OHJ/11Jn2ek4+SLJuYlijzc7KM3F/\r\nyz7ZTZtKR0PglkXfqbpvWYGabYpfL2FRLoJ7alTLsMJcFxbSLYcAIMxufj7RyTBJ\r\nbKgRJl4wmP4+Zc2Q1p59mENY0u5HqVAAOmWc0jNb0/31+tRr5f6EgXxK++7TQOpF\r\n0TOaFsXlzRlpKfmIbzVr2nfwghV5/bRZj96TK3g1OoOz4C8ksK4INHnUdTAqZ18M\r\nvHpnJw4=\r\n-----END CERTIFICATE-----',
|
||||
pinned: true,
|
||||
ignoreTLS: false
|
||||
}
|
||||
},
|
||||
tonline: {
|
||||
imap: {
|
||||
host: 'secureimap.t-online.de',
|
||||
port: 993,
|
||||
secure: true,
|
||||
ca: '-----BEGIN CERTIFICATE-----\r\nMIIGmzCCBYOgAwIBAgIIIbZ3foy9DqgwDQYJKoZIhvcNAQEFBQAwcTELMAkGA1UE\r\nBhMCREUxHDAaBgNVBAoTE0RldXRzY2hlIFRlbGVrb20gQUcxHzAdBgNVBAsTFlQt\r\nVGVsZVNlYyBUcnVzdCBDZW50ZXIxIzAhBgNVBAMTGkRldXRzY2hlIFRlbGVrb20g\r\nUm9vdCBDQSAyMB4XDTEzMDMwMTEzNTgyOVoXDTE5MDcwOTIzNTkwMFowgckxCzAJ\r\nBgNVBAYTAkRFMSUwIwYDVQQKExxULVN5c3RlbXMgSW50ZXJuYXRpb25hbCBHbWJI\r\nMR8wHQYDVQQLExZULVN5c3RlbXMgVHJ1c3QgQ2VudGVyMQwwCgYDVQQIEwNOUlcx\r\nDjAMBgNVBBETBTU3MjUwMRAwDgYDVQQHEwdOZXRwaGVuMSAwHgYDVQQJExdVbnRl\r\ncmUgSW5kdXN0cmllc3RyLiAyMDEgMB4GA1UEAxMXVGVsZVNlYyBTZXJ2ZXJQYXNz\r\nIERFLTEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCwg+9QiuYAxX9/\r\n4F9XRZrS1o0q+aa9L/5/K3vc+RqPpliiZ24vTkJc1JDpXrbWXS25uT3yzHukQrhI\r\nq0AbcRqNEAeFi5EhUiEM/vtb4BYGHdqfXQ3etgYYcCtJ43NAHaSgsyQ9kyGV2lmM\r\nwkeAX3qZ2CGE9/cR6w+bOogHArBdk2JaHG09myNZDytr6oUbWLjLd/qhC9YzyZSX\r\nbZgE/kh5L5Y6P9paw2pDdn7+Ni4pXzlmoj1k43uiz+h2ibe3DO9dKMZAaEKeyG1O\r\ng0f0r53M8O+8Bm2sXtWelrAgrfFlISgWzO1hkNs12rWpr4c5Ygde/behx9OQmPwp\r\nmS+e3WvTAgMBAAGjggLcMIIC2DAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFGJP\r\nE842Z4TNGfygTxmL7xVUATIcMB8GA1UdIwQYMBaAFDHDeRu69VPXF+CJei0XbAqz\r\nK50zMBIGA1UdEwEB/wQIMAYBAf8CAQAwWQYDVR0gBFIwUDBEBgkrBgEEAb1HDQIw\r\nNzA1BggrBgEFBQcCARYpaHR0cDovL3d3dy50ZWxlc2VjLmRlL3NlcnZlcnBhc3Mv\r\nY3BzLmh0bWwwCAYGZ4EMAQICMIHvBgNVHR8EgecwgeQwOqA4oDaGNGh0dHA6Ly9j\r\ncmwuc2VydmVycGFzcy50ZWxlc2VjLmRlL3JsL0RUX1JPT1RfQ0FfMi5jcmwwgaWg\r\ngaKggZ+GgZxsZGFwOi8vbGRhcC5zZXJ2ZXJwYXNzLnRlbGVzZWMuZGUvQ049RGV1\r\ndHNjaGUlMjBUZWxla29tJTIwUm9vdCUyMENBJTIwMixPVT1ULVRlbGVTZWMlMjBU\r\ncnVzdCUyMENlbnRlcixPPURldXRzY2hlJTIwVGVsZWtvbSUyMEFHLEM9REU/QXV0\r\naG9yaXR5UmV2b2NhdGlvbkxpc3QwggEjBggrBgEFBQcBAQSCARUwggERMCoGCCsG\r\nAQUFBzABhh5odHRwOi8vb2NzcDAyLnRlbGVzZWMuZGUvb2NzcHIwQQYIKwYBBQUH\r\nMAKGNWh0dHA6Ly9jcmwuc2VydmVycGFzcy50ZWxlc2VjLmRlL2NydC9EVF9ST09U\r\nX0NBXzIuY2VyMIGfBggrBgEFBQcwAoaBkmxkYXA6Ly9sZGFwLnNlcnZlcnBhc3Mu\r\ndGVsZXNlYy5kZS9DTj1EZXV0c2NoZSUyMFRlbGVrb20lMjBSb290JTIwQ0ElMjAy\r\nLE9VPVQtVGVsZVNlYyUyMFRydXN0JTIwQ2VudGVyLE89RGV1dHNjaGUlMjBUZWxl\r\na29tJTIwQUcsQz1ERT9jQUNlcnRpZmljYXRlMA0GCSqGSIb3DQEBBQUAA4IBAQBO\r\nE04qoEkEc9ad+WwSurVYfcDdjGvpqrtbI89woXDsWLQTMhA7D7jVuls90SJns0vc\r\nK9qoYkEGt0/ZlawLe2lyNWtueHfUf+dgleUunwHYLxuj3jQ2ERzQLVLrswjecRpX\r\nvGAGej89WpGQ9PMq27WGNC5WCmzVC9rk5naFgacsbwKwyjU0LoBArtAQnAAlpHDw\r\nPenv1Pe7MhUkCK0LqdTvkI/AHFzPYg/l5E3j8lQQ8hiKx8U6wf9xVKECLA2RlRqY\r\nUX2rpjQNxnvEq/mEQv3x3mLOEFJ3TAKI+soDgOOi0OG8+ywhm6S+7Z9lTlJ+BcD6\r\noy1MNKd4CQbltHLMTFUH\r\n-----END CERTIFICATE-----',
|
||||
pinned: true,
|
||||
ignoreTLS: false
|
||||
},
|
||||
smtp: {
|
||||
host: 'securesmtp.t-online.de',
|
||||
port: 465,
|
||||
secure: true,
|
||||
ca: '-----BEGIN CERTIFICATE-----\r\nMIIGmzCCBYOgAwIBAgIIIbZ3foy9DqgwDQYJKoZIhvcNAQEFBQAwcTELMAkGA1UE\r\nBhMCREUxHDAaBgNVBAoTE0RldXRzY2hlIFRlbGVrb20gQUcxHzAdBgNVBAsTFlQt\r\nVGVsZVNlYyBUcnVzdCBDZW50ZXIxIzAhBgNVBAMTGkRldXRzY2hlIFRlbGVrb20g\r\nUm9vdCBDQSAyMB4XDTEzMDMwMTEzNTgyOVoXDTE5MDcwOTIzNTkwMFowgckxCzAJ\r\nBgNVBAYTAkRFMSUwIwYDVQQKExxULVN5c3RlbXMgSW50ZXJuYXRpb25hbCBHbWJI\r\nMR8wHQYDVQQLExZULVN5c3RlbXMgVHJ1c3QgQ2VudGVyMQwwCgYDVQQIEwNOUlcx\r\nDjAMBgNVBBETBTU3MjUwMRAwDgYDVQQHEwdOZXRwaGVuMSAwHgYDVQQJExdVbnRl\r\ncmUgSW5kdXN0cmllc3RyLiAyMDEgMB4GA1UEAxMXVGVsZVNlYyBTZXJ2ZXJQYXNz\r\nIERFLTEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCwg+9QiuYAxX9/\r\n4F9XRZrS1o0q+aa9L/5/K3vc+RqPpliiZ24vTkJc1JDpXrbWXS25uT3yzHukQrhI\r\nq0AbcRqNEAeFi5EhUiEM/vtb4BYGHdqfXQ3etgYYcCtJ43NAHaSgsyQ9kyGV2lmM\r\nwkeAX3qZ2CGE9/cR6w+bOogHArBdk2JaHG09myNZDytr6oUbWLjLd/qhC9YzyZSX\r\nbZgE/kh5L5Y6P9paw2pDdn7+Ni4pXzlmoj1k43uiz+h2ibe3DO9dKMZAaEKeyG1O\r\ng0f0r53M8O+8Bm2sXtWelrAgrfFlISgWzO1hkNs12rWpr4c5Ygde/behx9OQmPwp\r\nmS+e3WvTAgMBAAGjggLcMIIC2DAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFGJP\r\nE842Z4TNGfygTxmL7xVUATIcMB8GA1UdIwQYMBaAFDHDeRu69VPXF+CJei0XbAqz\r\nK50zMBIGA1UdEwEB/wQIMAYBAf8CAQAwWQYDVR0gBFIwUDBEBgkrBgEEAb1HDQIw\r\nNzA1BggrBgEFBQcCARYpaHR0cDovL3d3dy50ZWxlc2VjLmRlL3NlcnZlcnBhc3Mv\r\nY3BzLmh0bWwwCAYGZ4EMAQICMIHvBgNVHR8EgecwgeQwOqA4oDaGNGh0dHA6Ly9j\r\ncmwuc2VydmVycGFzcy50ZWxlc2VjLmRlL3JsL0RUX1JPT1RfQ0FfMi5jcmwwgaWg\r\ngaKggZ+GgZxsZGFwOi8vbGRhcC5zZXJ2ZXJwYXNzLnRlbGVzZWMuZGUvQ049RGV1\r\ndHNjaGUlMjBUZWxla29tJTIwUm9vdCUyMENBJTIwMixPVT1ULVRlbGVTZWMlMjBU\r\ncnVzdCUyMENlbnRlcixPPURldXRzY2hlJTIwVGVsZWtvbSUyMEFHLEM9REU/QXV0\r\naG9yaXR5UmV2b2NhdGlvbkxpc3QwggEjBggrBgEFBQcBAQSCARUwggERMCoGCCsG\r\nAQUFBzABhh5odHRwOi8vb2NzcDAyLnRlbGVzZWMuZGUvb2NzcHIwQQYIKwYBBQUH\r\nMAKGNWh0dHA6Ly9jcmwuc2VydmVycGFzcy50ZWxlc2VjLmRlL2NydC9EVF9ST09U\r\nX0NBXzIuY2VyMIGfBggrBgEFBQcwAoaBkmxkYXA6Ly9sZGFwLnNlcnZlcnBhc3Mu\r\ndGVsZXNlYy5kZS9DTj1EZXV0c2NoZSUyMFRlbGVrb20lMjBSb290JTIwQ0ElMjAy\r\nLE9VPVQtVGVsZVNlYyUyMFRydXN0JTIwQ2VudGVyLE89RGV1dHNjaGUlMjBUZWxl\r\na29tJTIwQUcsQz1ERT9jQUNlcnRpZmljYXRlMA0GCSqGSIb3DQEBBQUAA4IBAQBO\r\nE04qoEkEc9ad+WwSurVYfcDdjGvpqrtbI89woXDsWLQTMhA7D7jVuls90SJns0vc\r\nK9qoYkEGt0/ZlawLe2lyNWtueHfUf+dgleUunwHYLxuj3jQ2ERzQLVLrswjecRpX\r\nvGAGej89WpGQ9PMq27WGNC5WCmzVC9rk5naFgacsbwKwyjU0LoBArtAQnAAlpHDw\r\nPenv1Pe7MhUkCK0LqdTvkI/AHFzPYg/l5E3j8lQQ8hiKx8U6wf9xVKECLA2RlRqY\r\nUX2rpjQNxnvEq/mEQv3x3mLOEFJ3TAKI+soDgOOi0OG8+ywhm6S+7Z9lTlJ+BcD6\r\noy1MNKd4CQbltHLMTFUH\r\n-----END CERTIFICATE-----',
|
||||
pinned: true,
|
||||
ignoreTLS: false
|
||||
}
|
||||
},
|
||||
outlook: {
|
||||
imap: {
|
||||
host: 'imap-mail.outlook.com',
|
||||
port: 993,
|
||||
secure: true,
|
||||
ca: '-----BEGIN CERTIFICATE-----\r\nMIIFQjCCBCqgAwIBAgISESHl0vjrML7zKmGlv42YL75vMA0GCSqGSIb3DQEBBQUA\r\nMF0xCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMTMwMQYD\r\nVQQDEypHbG9iYWxTaWduIE9yZ2FuaXphdGlvbiBWYWxpZGF0aW9uIENBIC0gRzIw\r\nHhcNMTMwNDI0MjAzNTA5WhcNMTYwNDI0MjAzNTA5WjBsMQswCQYDVQQGEwJVUzET\r\nMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMV\r\nTWljcm9zb2Z0IENvcnBvcmF0aW9uMRYwFAYDVQQDDA0qLmhvdG1haWwuY29tMIIB\r\nIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAumSiBWrzHZf6WFP5a/j4+K7D\r\n1izLoYKj5Omll0pdxKvKcBRDf+iaIkCbSOPNpx2uWGZdwNwkabYCQavaBf2ebwmS\r\nS8i1CJpHflO+k0qYd5WUi7sSsZ3+6RaCMdLoDIPGyYMQuy7TFtVO7LSt5+qscyyi\r\nET8c3lE2aj/XW13UZvRrV65ZJvMjUtwaDnIcAxGeasYoebLsKdqHQ2uTr4PmNwCc\r\nviGVFSOzkGAoC0PfyqKB2xUWy3Kc5zRI2xvUW8Jb2b/9Ze3g55pIUzKsjpglkQTm\r\nedVPSYYPGNz6Kl/ZshBXdBAk398q1JkSmUaTMa2hJgBbcC+73ax40AJDGJlz+QID\r\nAQABo4IB6zCCAecwDgYDVR0PAQH/BAQDAgWgMEkGA1UdIARCMEAwPgYGZ4EMAQIC\r\nMDQwMgYIKwYBBQUHAgEWJmh0dHBzOi8vd3d3Lmdsb2JhbHNpZ24uY29tL3JlcG9z\r\naXRvcnkvMEAGA1UdEQQ5MDeCDSouaG90bWFpbC5jb22CCioubGl2ZS5jb22CDSou\r\nb3V0bG9vay5jb22CC2hvdG1haWwuY29tMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYI\r\nKwYBBQUHAwEGCCsGAQUFBwMCMEUGA1UdHwQ+MDwwOqA4oDaGNGh0dHA6Ly9jcmwu\r\nZ2xvYmFsc2lnbi5jb20vZ3MvZ3Nvcmdhbml6YXRpb252YWxnMi5jcmwwgZYGCCsG\r\nAQUFBwEBBIGJMIGGMEcGCCsGAQUFBzAChjtodHRwOi8vc2VjdXJlLmdsb2JhbHNp\r\nZ24uY29tL2NhY2VydC9nc29yZ2FuaXphdGlvbnZhbGcyLmNydDA7BggrBgEFBQcw\r\nAYYvaHR0cDovL29jc3AyLmdsb2JhbHNpZ24uY29tL2dzb3JnYW5pemF0aW9udmFs\r\nZzIwHQYDVR0OBBYEFHbgHqTLsXDt7uMRyE62rnDEfLn9MB8GA1UdIwQYMBaAFF1G\r\nso3ES3Qcu+31c7Y6tziPdZ5+MA0GCSqGSIb3DQEBBQUAA4IBAQByy1+3N6ZRVooI\r\nxqw8Ng+UFz0g7UHkbPEnvTu1uxJ2AojFuP/P1PAk+/6uMRvpPlWg/5uqmOIWxKxJ\r\nLo6xSbkDf4LN+KYwes3XSuPyziZ4QbPnehHhZ0377iiA8fpRJADg9NWKCRHh5aAd\r\ne9QvJUW/GgYkBN+F4yYc2jIjR3Rehv4JYOKS3iXO9OoHsDS2CcCFaS2imgQVfYLg\r\nslBwT/A08PCOhW5huiluSmih7x5Qf7sFDv8jineu6ehKzi8pKnOq4k8G4QiWn38Y\r\nCeiBkkwFOwj7T3M/ITiiSS9DHDGeokj16eBi83Zx3YYiJ9YZvnQ+4GvqJ5eJJ6pR\r\nKKvemr+m\r\n-----END CERTIFICATE-----',
|
||||
pinned: true,
|
||||
ignoreTLS: false
|
||||
},
|
||||
smtp: {
|
||||
host: 'smtp-mail.outlook.com',
|
||||
port: 587,
|
||||
secure: false,
|
||||
ca: '-----BEGIN CERTIFICATE-----\r\nMIIFQjCCBCqgAwIBAgISESHl0vjrML7zKmGlv42YL75vMA0GCSqGSIb3DQEBBQUA\r\nMF0xCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMTMwMQYD\r\nVQQDEypHbG9iYWxTaWduIE9yZ2FuaXphdGlvbiBWYWxpZGF0aW9uIENBIC0gRzIw\r\nHhcNMTMwNDI0MjAzNTA5WhcNMTYwNDI0MjAzNTA5WjBsMQswCQYDVQQGEwJVUzET\r\nMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMV\r\nTWljcm9zb2Z0IENvcnBvcmF0aW9uMRYwFAYDVQQDDA0qLmhvdG1haWwuY29tMIIB\r\nIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAumSiBWrzHZf6WFP5a/j4+K7D\r\n1izLoYKj5Omll0pdxKvKcBRDf+iaIkCbSOPNpx2uWGZdwNwkabYCQavaBf2ebwmS\r\nS8i1CJpHflO+k0qYd5WUi7sSsZ3+6RaCMdLoDIPGyYMQuy7TFtVO7LSt5+qscyyi\r\nET8c3lE2aj/XW13UZvRrV65ZJvMjUtwaDnIcAxGeasYoebLsKdqHQ2uTr4PmNwCc\r\nviGVFSOzkGAoC0PfyqKB2xUWy3Kc5zRI2xvUW8Jb2b/9Ze3g55pIUzKsjpglkQTm\r\nedVPSYYPGNz6Kl/ZshBXdBAk398q1JkSmUaTMa2hJgBbcC+73ax40AJDGJlz+QID\r\nAQABo4IB6zCCAecwDgYDVR0PAQH/BAQDAgWgMEkGA1UdIARCMEAwPgYGZ4EMAQIC\r\nMDQwMgYIKwYBBQUHAgEWJmh0dHBzOi8vd3d3Lmdsb2JhbHNpZ24uY29tL3JlcG9z\r\naXRvcnkvMEAGA1UdEQQ5MDeCDSouaG90bWFpbC5jb22CCioubGl2ZS5jb22CDSou\r\nb3V0bG9vay5jb22CC2hvdG1haWwuY29tMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYI\r\nKwYBBQUHAwEGCCsGAQUFBwMCMEUGA1UdHwQ+MDwwOqA4oDaGNGh0dHA6Ly9jcmwu\r\nZ2xvYmFsc2lnbi5jb20vZ3MvZ3Nvcmdhbml6YXRpb252YWxnMi5jcmwwgZYGCCsG\r\nAQUFBwEBBIGJMIGGMEcGCCsGAQUFBzAChjtodHRwOi8vc2VjdXJlLmdsb2JhbHNp\r\nZ24uY29tL2NhY2VydC9nc29yZ2FuaXphdGlvbnZhbGcyLmNydDA7BggrBgEFBQcw\r\nAYYvaHR0cDovL29jc3AyLmdsb2JhbHNpZ24uY29tL2dzb3JnYW5pemF0aW9udmFs\r\nZzIwHQYDVR0OBBYEFHbgHqTLsXDt7uMRyE62rnDEfLn9MB8GA1UdIwQYMBaAFF1G\r\nso3ES3Qcu+31c7Y6tziPdZ5+MA0GCSqGSIb3DQEBBQUAA4IBAQByy1+3N6ZRVooI\r\nxqw8Ng+UFz0g7UHkbPEnvTu1uxJ2AojFuP/P1PAk+/6uMRvpPlWg/5uqmOIWxKxJ\r\nLo6xSbkDf4LN+KYwes3XSuPyziZ4QbPnehHhZ0377iiA8fpRJADg9NWKCRHh5aAd\r\ne9QvJUW/GgYkBN+F4yYc2jIjR3Rehv4JYOKS3iXO9OoHsDS2CcCFaS2imgQVfYLg\r\nslBwT/A08PCOhW5huiluSmih7x5Qf7sFDv8jineu6ehKzi8pKnOq4k8G4QiWn38Y\r\nCeiBkkwFOwj7T3M/ITiiSS9DHDGeokj16eBi83Zx3YYiJ9YZvnQ+4GvqJ5eJJ6pR\r\nKKvemr+m\r\n-----END CERTIFICATE-----',
|
||||
pinned: true,
|
||||
ignoreTLS: false
|
||||
}
|
||||
},
|
||||
gmx: {
|
||||
imap: {
|
||||
host: 'imap.gmx.net',
|
||||
port: 993,
|
||||
secure: true,
|
||||
ca: '-----BEGIN CERTIFICATE-----\r\nMIIHUDCCBjigAwIBAgIIM52e2Oc5J8kwDQYJKoZIhvcNAQEFBQAwgckxCzAJBgNV\r\nBAYTAkRFMSUwIwYDVQQKExxULVN5c3RlbXMgSW50ZXJuYXRpb25hbCBHbWJIMR8w\r\nHQYDVQQLExZULVN5c3RlbXMgVHJ1c3QgQ2VudGVyMQwwCgYDVQQIEwNOUlcxDjAM\r\nBgNVBBETBTU3MjUwMRAwDgYDVQQHEwdOZXRwaGVuMSAwHgYDVQQJExdVbnRlcmUg\r\nSW5kdXN0cmllc3RyLiAyMDEgMB4GA1UEAxMXVGVsZVNlYyBTZXJ2ZXJQYXNzIERF\r\nLTEwHhcNMTMxMTEyMTAxNzMxWhcNMTYxMTE3MjM1OTU5WjCBnTELMAkGA1UEBhMC\r\nREUxHjAcBgNVBAoMFTEmMSBNYWlsICYgTWVkaWEgR21iSDEdMBsGA1UECBMUUmhp\r\nbmVsYW5kLVBhbGF0aW5hdGUxEjAQBgNVBAcTCU1vbnRhYmF1cjEkMCIGCSqGSIb3\r\nDQEJARYVc2VydmVyLWNlcnRzQDF1bmQxLmRlMRUwEwYDVQQDEwxpbWFwLmdteC5u\r\nZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDHP3QN1ztX5m8LaC9m\r\nt2nrcLBEfxb61FQCieXW4OV/D5HEy7vgQIAeS+pg2/9ClawprQFbLUa46owUcJuq\r\no2SaefsYqjRhIP/tPeyGRJQmfnyCRRoHIYno57/bz2qmHjzvkqEUMvNGVVej7BJv\r\nGukNKPXYicodkRodF3EicTPnGitGeXOsAxyPuCPIsBPAMuuuBzKenS7nj+yseSGe\r\nkM7/kjtNgbjDyBXi2BvoUS/U+Gm9p1lq0ymT9fhGj/k9/Qz312GHYxfZB1bhL0pk\r\nadF25P8fTIy5tKMWqJfgCF+eaOwgkYecxeCcrt2E3D8ThLvmkBRrXsTT51ZzD7sp\r\n7hPpAgMBAAGjggNkMIIDYDAfBgNVHSMEGDAWgBRiTxPONmeEzRn8oE8Zi+8VVAEy\r\nHDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMB\r\nMB0GA1UdDgQWBBRfb2gYyD6V+oBN2Ii5WQj0AddemjBZBgNVHSAEUjBQMEQGCSsG\r\nAQQBvUcNAjA3MDUGCCsGAQUFBwIBFilodHRwOi8vd3d3LnRlbGVzZWMuZGUvc2Vy\r\ndmVycGFzcy9jcHMuaHRtbDAIBgZngQwBAgIwggEhBgNVHR8EggEYMIIBFDBFoEOg\r\nQYY/aHR0cDovL2NybC5zZXJ2ZXJwYXNzLnRlbGVzZWMuZGUvcmwvVGVsZVNlY19T\r\nZXJ2ZXJQYXNzX0RFLTEuY3JsMIHKoIHHoIHEhoHBbGRhcDovL2xkYXAuc2VydmVy\r\ncGFzcy50ZWxlc2VjLmRlL2NuPVRlbGVTZWMlMjBTZXJ2ZXJQYXNzJTIwREUtMSxv\r\ndT1ULVN5c3RlbXMlMjBUcnVzdCUyMENlbnRlcixvPVQtU3lzdGVtcyUyMEludGVy\r\nbmF0aW9uYWwlMjBHbWJILGM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9ubGlzdD9i\r\nYXNlP2NlcnRpZmljYXRlUmV2b2NhdGlvbmxpc3Q9KjCCATkGCCsGAQUFBwEBBIIB\r\nKzCCAScwMwYIKwYBBQUHMAGGJ2h0dHA6Ly9vY3NwLnNlcnZlcnBhc3MudGVsZXNl\r\nYy5kZS9vY3NwcjBMBggrBgEFBQcwAoZAaHR0cDovL2NybC5zZXJ2ZXJwYXNzLnRl\r\nbGVzZWMuZGUvY3J0L1RlbGVTZWNfU2VydmVyUGFzc19ERS0xLmNlcjCBoQYIKwYB\r\nBQUHMAKGgZRsZGFwOi8vbGRhcC5zZXJ2ZXJwYXNzLnRlbGVzZWMuZGUvY249VGVs\r\nZVNlYyUyMFNlcnZlclBhc3MlMjBERS0xLG91PVQtU3lzdGVtcyUyMFRydXN0JTIw\r\nQ2VudGVyLG89VC1TeXN0ZW1zJTIwSW50ZXJuYXRpb25hbCUyMEdtYkgsYz1kZT9j\r\nQUNlcnRpZmljYXRlMAwGA1UdEwEB/wQCMAAwJAYDVR0RBB0wG4IMaW1hcC5nbXgu\r\nbmV0ggtpbWFwLmdteC5kZTANBgkqhkiG9w0BAQUFAAOCAQEADl442s2ouynDNEzl\r\nBPzhCxjp47TmKzgzrCGh1AH3+UOkw54mYU65UaY9cJ51jgOu+pjNB4KxVfcqyG5O\r\nJcowS09ZtZ+khb1OkzXAAbEqNj0oyH/1K550d5Ir5VbXF0ZdVKVTzEFRyjvUt5NJ\r\n/b6Q2bbY/sPm8QiK9SPaYkO5/3J1KB0u7PkqqfOhZ9UJE6mIN66T2bpFmAwle3zL\r\n6+L/VwYSgUNs/w2l6xWlYP3pFFaT12TO43Q057I3vP7yCt3QE/VLDpdQOQ3H0oy2\r\nJQGPJLFby9MPYNkmEmwjh4e95TAY4ZkZMe08ix0J1Smy8DwjTz6SXqYC+EC/PQlh\r\nE0UHxA==\r\n-----END CERTIFICATE-----',
|
||||
pinned: true,
|
||||
ignoreTLS: false
|
||||
},
|
||||
smtp: {
|
||||
host: 'mail.gmx.net',
|
||||
port: 587,
|
||||
secure: false,
|
||||
ca: '-----BEGIN CERTIFICATE-----\r\nMIIHbDCCBlSgAwIBAgIJAJ74Ek9UaA0TMA0GCSqGSIb3DQEBBQUAMIHJMQswCQYD\r\nVQQGEwJERTElMCMGA1UEChMcVC1TeXN0ZW1zIEludGVybmF0aW9uYWwgR21iSDEf\r\nMB0GA1UECxMWVC1TeXN0ZW1zIFRydXN0IENlbnRlcjEMMAoGA1UECBMDTlJXMQ4w\r\nDAYDVQQREwU1NzI1MDEQMA4GA1UEBxMHTmV0cGhlbjEgMB4GA1UECRMXVW50ZXJl\r\nIEluZHVzdHJpZXN0ci4gMjAxIDAeBgNVBAMTF1RlbGVTZWMgU2VydmVyUGFzcyBE\r\nRS0xMB4XDTEzMTExMjEwMTY0N1oXDTE2MTExNzIzNTk1OVowgZ0xCzAJBgNVBAYT\r\nAkRFMR4wHAYDVQQKDBUxJjEgTWFpbCAmIE1lZGlhIEdtYkgxHTAbBgNVBAgTFFJo\r\naW5lbGFuZC1QYWxhdGluYXRlMRIwEAYDVQQHEwlNb250YWJhdXIxJDAiBgkqhkiG\r\n9w0BCQEWFXNlcnZlci1jZXJ0c0AxdW5kMS5kZTEVMBMGA1UEAxMMbWFpbC5nbXgu\r\nbmV0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsEUYppbJXUpQELIL\r\nETAFUwreDfSmbyi9gJPUqquogROHEoRV+bBFZ2YCiHgLU8AggcLmM74HAQMFt8F5\r\neS2OyuEar3E3tNW5XFiI1QblTtY3B7o1coKyq/i+tV3b1jGq4+1aJeeD3UpcraBm\r\nk2XuQgQ6WAeY+XCYyI/OzZ56ZjQ17LHMMI0ayu7SSV+VBpG9loC9E5A82iVtZsqo\r\nSaUZpZf/xICpUgNJ+RlalSsoE6FdCywE/gEEmkpAUh+Mv0WvHITk6aqtMFWex8tE\r\n8cwJGQbmJGt9x8BExbhMY6uQ+HsnsDCPCMVh5JGKx7/e+qyxtHYGChOeI16m2+MT\r\nz47jSQIDAQABo4IDfzCCA3swHwYDVR0jBBgwFoAUYk8TzjZnhM0Z/KBPGYvvFVQB\r\nMhwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcD\r\nATAdBgNVHQ4EFgQUH8mLfxsd5FEh9M+3t3rP6qLiFTEwWQYDVR0gBFIwUDBEBgkr\r\nBgEEAb1HDQIwNzA1BggrBgEFBQcCARYpaHR0cDovL3d3dy50ZWxlc2VjLmRlL3Nl\r\ncnZlcnBhc3MvY3BzLmh0bWwwCAYGZ4EMAQICMIIBIQYDVR0fBIIBGDCCARQwRaBD\r\noEGGP2h0dHA6Ly9jcmwuc2VydmVycGFzcy50ZWxlc2VjLmRlL3JsL1RlbGVTZWNf\r\nU2VydmVyUGFzc19ERS0xLmNybDCByqCBx6CBxIaBwWxkYXA6Ly9sZGFwLnNlcnZl\r\ncnBhc3MudGVsZXNlYy5kZS9jbj1UZWxlU2VjJTIwU2VydmVyUGFzcyUyMERFLTEs\r\nb3U9VC1TeXN0ZW1zJTIwVHJ1c3QlMjBDZW50ZXIsbz1ULVN5c3RlbXMlMjBJbnRl\r\ncm5hdGlvbmFsJTIwR21iSCxjPWRlP2NlcnRpZmljYXRlUmV2b2NhdGlvbmxpc3Q/\r\nYmFzZT9jZXJ0aWZpY2F0ZVJldm9jYXRpb25saXN0PSowggE5BggrBgEFBQcBAQSC\r\nASswggEnMDMGCCsGAQUFBzABhidodHRwOi8vb2NzcC5zZXJ2ZXJwYXNzLnRlbGVz\r\nZWMuZGUvb2NzcHIwTAYIKwYBBQUHMAKGQGh0dHA6Ly9jcmwuc2VydmVycGFzcy50\r\nZWxlc2VjLmRlL2NydC9UZWxlU2VjX1NlcnZlclBhc3NfREUtMS5jZXIwgaEGCCsG\r\nAQUFBzAChoGUbGRhcDovL2xkYXAuc2VydmVycGFzcy50ZWxlc2VjLmRlL2NuPVRl\r\nbGVTZWMlMjBTZXJ2ZXJQYXNzJTIwREUtMSxvdT1ULVN5c3RlbXMlMjBUcnVzdCUy\r\nMENlbnRlcixvPVQtU3lzdGVtcyUyMEludGVybmF0aW9uYWwlMjBHbWJILGM9ZGU/\r\nY0FDZXJ0aWZpY2F0ZTAMBgNVHRMBAf8EAjAAMD8GA1UdEQQ4MDaCDG1haWwuZ214\r\nLm5ldIILbWFpbC5nbXguZGWCDHNtdHAuZ214Lm5ldIILc210cC5nbXguZGUwDQYJ\r\nKoZIhvcNAQEFBQADggEBAJ5SKsBXoOTO0ztsFh8RVd/iu6sijEMpKVF+/cs74TZN\r\nK1QWIz8Ay1f3SUPWXTvkmvayUXWGtxZfYoRIrx3feWBdUozJxe0wz1O3tDQOQgRX\r\nnkcwk7nibTUmW2rk5AIwV0jzOHtIbAGjSdc6my0543e7dVkhcuoCOC+g2NmD+pHF\r\ni1KpmqTLecDlFvprIZUJ23AT1uTnuXYg/tFHeDn3ga00Gce82xZQJelRirJs01SR\r\nDGEBaPXBjJVJNoAP/qEy3jQNRWo5TbSgwn3DTR81FJvltmf0c+zlt4fmcpjpr5ni\r\nFvK7L0rZQL5MOGHPpgRIukEBZCowYr3OYpZYBEaB94I=\r\n-----END CERTIFICATE-----',
|
||||
pinned: true,
|
||||
ignoreTLS: false
|
||||
}
|
||||
},
|
||||
webde: {
|
||||
imap: {
|
||||
host: 'imap.web.de',
|
||||
port: 993,
|
||||
secure: true,
|
||||
ca: '-----BEGIN CERTIFICATE-----\r\nMIIHUjCCBjqgAwIBAgIIHvqUOScyxYUwDQYJKoZIhvcNAQEFBQAwgckxCzAJBgNV\r\nBAYTAkRFMSUwIwYDVQQKExxULVN5c3RlbXMgSW50ZXJuYXRpb25hbCBHbWJIMR8w\r\nHQYDVQQLExZULVN5c3RlbXMgVHJ1c3QgQ2VudGVyMQwwCgYDVQQIEwNOUlcxDjAM\r\nBgNVBBETBTU3MjUwMRAwDgYDVQQHEwdOZXRwaGVuMSAwHgYDVQQJExdVbnRlcmUg\r\nSW5kdXN0cmllc3RyLiAyMDEgMB4GA1UEAxMXVGVsZVNlYyBTZXJ2ZXJQYXNzIERF\r\nLTEwHhcNMTMwODIxMDgzMTE2WhcNMTYwODI2MjM1OTU5WjCBrTELMAkGA1UEBhMC\r\nREUxHjAcBgNVBAoMFTEmMSBNYWlsICYgTWVkaWEgR21iSDEPMA0GA1UECxMGV0VC\r\nLkRFMR0wGwYDVQQIExRSaGluZWxhbmQtUGFsYXRpbmF0ZTESMBAGA1UEBxMJTW9u\r\ndGFiYXVyMSQwIgYJKoZIhvcNAQkBFhVzZXJ2ZXItY2VydHNAMXVuZDEuZGUxFDAS\r\nBgNVBAMTC2ltYXAud2ViLmRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC\r\nAQEA5dvpcnYczFs9GANTYN5N3mP6ATFVm7P4nYhRIQMj/YssSjmbrOPIEbe12JNC\r\nRO9CI7Z4Dnk42BM5TiH+QKGpcfnitofOv4gKPjwCMcPDHfY152/+YDaiyU/md2Hg\r\n/WrZ/50KwC8Sw1tZkYDXWB0zeJkfPdS2r4ATNrpMR0fYcG08+elz5T2SWNg+c1xL\r\nKFdCh33wZLkijOfW0HA164QjXaLPBjxa+GyZFY19ywOQ85KdFVVLmGUrLz8n4ZLc\r\n7K6KUuzYttnUuVxctFauQ4DRHE/CfUvvNHHgn5d+A2XS7jNUgmUb0gjzy3OtlTP3\r\ngM4ostVufmnlS7qqFDR7A3v4lQIDAQABo4IDVjCCA1IwHwYDVR0jBBgwFoAUYk8T\r\nzjZnhM0Z/KBPGYvvFVQBMhwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsG\r\nAQUFBwMCBggrBgEFBQcDATAdBgNVHQ4EFgQUDH66P/Y4NlKGphPniIzmutEI9ocw\r\nWQYDVR0gBFIwUDBEBgkrBgEEAb1HDQIwNzA1BggrBgEFBQcCARYpaHR0cDovL3d3\r\ndy50ZWxlc2VjLmRlL3NlcnZlcnBhc3MvY3BzLmh0bWwwCAYGZ4EMAQICMIIBIQYD\r\nVR0fBIIBGDCCARQwRaBDoEGGP2h0dHA6Ly9jcmwuc2VydmVycGFzcy50ZWxlc2Vj\r\nLmRlL3JsL1RlbGVTZWNfU2VydmVyUGFzc19ERS0xLmNybDCByqCBx6CBxIaBwWxk\r\nYXA6Ly9sZGFwLnNlcnZlcnBhc3MudGVsZXNlYy5kZS9jbj1UZWxlU2VjJTIwU2Vy\r\ndmVyUGFzcyUyMERFLTEsb3U9VC1TeXN0ZW1zJTIwVHJ1c3QlMjBDZW50ZXIsbz1U\r\nLVN5c3RlbXMlMjBJbnRlcm5hdGlvbmFsJTIwR21iSCxjPWRlP2NlcnRpZmljYXRl\r\nUmV2b2NhdGlvbmxpc3Q/YmFzZT9jZXJ0aWZpY2F0ZVJldm9jYXRpb25saXN0PSow\r\nggE5BggrBgEFBQcBAQSCASswggEnMDMGCCsGAQUFBzABhidodHRwOi8vb2NzcC5z\r\nZXJ2ZXJwYXNzLnRlbGVzZWMuZGUvb2NzcHIwTAYIKwYBBQUHMAKGQGh0dHA6Ly9j\r\ncmwuc2VydmVycGFzcy50ZWxlc2VjLmRlL2NydC9UZWxlU2VjX1NlcnZlclBhc3Nf\r\nREUtMS5jZXIwgaEGCCsGAQUFBzAChoGUbGRhcDovL2xkYXAuc2VydmVycGFzcy50\r\nZWxlc2VjLmRlL2NuPVRlbGVTZWMlMjBTZXJ2ZXJQYXNzJTIwREUtMSxvdT1ULVN5\r\nc3RlbXMlMjBUcnVzdCUyMENlbnRlcixvPVQtU3lzdGVtcyUyMEludGVybmF0aW9u\r\nYWwlMjBHbWJILGM9ZGU/Y0FDZXJ0aWZpY2F0ZTAMBgNVHRMBAf8EAjAAMBYGA1Ud\r\nEQQPMA2CC2ltYXAud2ViLmRlMA0GCSqGSIb3DQEBBQUAA4IBAQAp7MQjjOWQ0M7N\r\n21GrPDfWSMR3eJnuMs37I9G2t9i99w7xKtmoVBPyYMORL1zRHn/DEguo4j5ua7CH\r\nrKLh9Sd1wDKqVWGFxvmP4f/mvEx5YVI68mg+M2VQf/h58IXTTZRbUcsv3HVeruI6\r\npgQNUsEQqRVJmrgT/iPd98RhhzBqef6Wfrt3Ns6N835egphxUVcVj/v/PqBCZKQb\r\nNl5QsoaHDqh3XC+Og2awOGvWHUzxUKEqkP5nsMs2YjfOtcQRtxdislQAfRktuUBA\r\nWMZAlvoVF/CIyFvcUH11KNur7HfK5PptvtdvLQaF2c+lN+LGP6D+nbTLqAo1v09o\r\nnZpHbQOt\r\n-----END CERTIFICATE-----',
|
||||
pinned: true,
|
||||
ignoreTLS: false
|
||||
},
|
||||
smtp: {
|
||||
host: 'smtp.web.de',
|
||||
port: 587,
|
||||
secure: false,
|
||||
ca: '-----BEGIN CERTIFICATE-----\r\nMIIHUzCCBjugAwIBAgIJAKaEwtMgQ2s5MA0GCSqGSIb3DQEBBQUAMIHJMQswCQYD\r\nVQQGEwJERTElMCMGA1UEChMcVC1TeXN0ZW1zIEludGVybmF0aW9uYWwgR21iSDEf\r\nMB0GA1UECxMWVC1TeXN0ZW1zIFRydXN0IENlbnRlcjEMMAoGA1UECBMDTlJXMQ4w\r\nDAYDVQQREwU1NzI1MDEQMA4GA1UEBxMHTmV0cGhlbjEgMB4GA1UECRMXVW50ZXJl\r\nIEluZHVzdHJpZXN0ci4gMjAxIDAeBgNVBAMTF1RlbGVTZWMgU2VydmVyUGFzcyBE\r\nRS0xMB4XDTEzMDgyMTA4MzU1MVoXDTE2MDgyNjIzNTk1OVowga0xCzAJBgNVBAYT\r\nAkRFMR4wHAYDVQQKDBUxJjEgTWFpbCAmIE1lZGlhIEdtYkgxDzANBgNVBAsTBldF\r\nQi5ERTEdMBsGA1UECBMUUmhpbmVsYW5kLVBhbGF0aW5hdGUxEjAQBgNVBAcTCU1v\r\nbnRhYmF1cjEkMCIGCSqGSIb3DQEJARYVc2VydmVyLWNlcnRzQDF1bmQxLmRlMRQw\r\nEgYDVQQDEwtzbXRwLndlYi5kZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC\r\nggEBAL1WfyFqmifaEr6h9yntJKs33fnEVu0pQqS5RV9rnQU0E/cJYJ9RJOoTjhpE\r\nkT1LW8DyTM5vUzpgtFHQM0BOO6jOeZXUYNUaopK3yO4l/cpiitigtk9ZnWfKzbU3\r\n9hlhf+YwUUvoqjUA8I6fSu+VNPNlOBvamo18oHljXAPltL9oiwAxvTLNktBMy4T9\r\njxU1DeGoPbJKGwV7zIBQ2qUHuLkMvy5/H39t79Tih+zfzgfY/xIUfdmPNY9dK8ZY\r\nAtyF/RiUS199pd9dV4Vwh6JLvtNlWchBnKVhragLCGbkjnvUXmS1BPrclLR23s1v\r\nMehgOD2WhXl8PoqrOPb6y+lgMlECAwEAAaOCA1YwggNSMB8GA1UdIwQYMBaAFGJP\r\nE842Z4TNGfygTxmL7xVUATIcMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggr\r\nBgEFBQcDAgYIKwYBBQUHAwEwHQYDVR0OBBYEFAUuppozNCv2UzMV5p6CTpkEhsRS\r\nMFkGA1UdIARSMFAwRAYJKwYBBAG9Rw0CMDcwNQYIKwYBBQUHAgEWKWh0dHA6Ly93\r\nd3cudGVsZXNlYy5kZS9zZXJ2ZXJwYXNzL2Nwcy5odG1sMAgGBmeBDAECAjCCASEG\r\nA1UdHwSCARgwggEUMEWgQ6BBhj9odHRwOi8vY3JsLnNlcnZlcnBhc3MudGVsZXNl\r\nYy5kZS9ybC9UZWxlU2VjX1NlcnZlclBhc3NfREUtMS5jcmwwgcqggceggcSGgcFs\r\nZGFwOi8vbGRhcC5zZXJ2ZXJwYXNzLnRlbGVzZWMuZGUvY249VGVsZVNlYyUyMFNl\r\ncnZlclBhc3MlMjBERS0xLG91PVQtU3lzdGVtcyUyMFRydXN0JTIwQ2VudGVyLG89\r\nVC1TeXN0ZW1zJTIwSW50ZXJuYXRpb25hbCUyMEdtYkgsYz1kZT9jZXJ0aWZpY2F0\r\nZVJldm9jYXRpb25saXN0P2Jhc2U/Y2VydGlmaWNhdGVSZXZvY2F0aW9ubGlzdD0q\r\nMIIBOQYIKwYBBQUHAQEEggErMIIBJzAzBggrBgEFBQcwAYYnaHR0cDovL29jc3Au\r\nc2VydmVycGFzcy50ZWxlc2VjLmRlL29jc3ByMEwGCCsGAQUFBzAChkBodHRwOi8v\r\nY3JsLnNlcnZlcnBhc3MudGVsZXNlYy5kZS9jcnQvVGVsZVNlY19TZXJ2ZXJQYXNz\r\nX0RFLTEuY2VyMIGhBggrBgEFBQcwAoaBlGxkYXA6Ly9sZGFwLnNlcnZlcnBhc3Mu\r\ndGVsZXNlYy5kZS9jbj1UZWxlU2VjJTIwU2VydmVyUGFzcyUyMERFLTEsb3U9VC1T\r\neXN0ZW1zJTIwVHJ1c3QlMjBDZW50ZXIsbz1ULVN5c3RlbXMlMjBJbnRlcm5hdGlv\r\nbmFsJTIwR21iSCxjPWRlP2NBQ2VydGlmaWNhdGUwDAYDVR0TAQH/BAIwADAWBgNV\r\nHREEDzANggtzbXRwLndlYi5kZTANBgkqhkiG9w0BAQUFAAOCAQEAGFtJxVxWrURy\r\nFfR4UfmW+N1cZZx9sfC5jolV8LGje87DgbWdqu5TRL9FoQ1pwOTbM9mc3yWSoIbU\r\nx6E+rziJK+SFGMIy+Lt13P9M9Oc8JzVHoVEAgqlEeO6OYxrGE6SaSjZODJxPaEtU\r\nzEAKf0HVJQoGaU6fD+/8l3yhksAlsF/L85nP+KcZtoancOkJWE0GQMZp7pdLU0Ou\r\nFUQoAcqMIyHQfDqJ5iwvx/9C7jmy3Nvw9tXdPrdn2O7ywrnFeJuT2xiorZzg6ezn\r\nUlc/sMvd/LPX0f60pSQr9tkZgU4f8Jvx9EvPUCFTRXlXqkBIhgJhgCadZC+wKB1P\r\neQMS8rksXw==\r\n-----END CERTIFICATE-----',
|
||||
pinned: true,
|
||||
ignoreTLS: false
|
||||
}
|
||||
},
|
||||
checkOutboxInterval: 5000,
|
||||
iconPath: '/img/icon-128-chrome.png',
|
||||
verificationUrl: '/verify/',
|
||||
verificationUuidLength: 36,
|
||||
dbVersion: 5,
|
||||
appVersion: appVersion,
|
||||
dbVersion: 6,
|
||||
appVersion: undefined,
|
||||
outboxMailboxPath: 'OUTBOX',
|
||||
outboxMailboxName: 'Outbox',
|
||||
outboxMailboxType: 'Outbox',
|
||||
connDocTimeout: 5000,
|
||||
};
|
||||
imapUpdateBatchSize: 25
|
||||
};
|
||||
|
||||
/**
|
||||
// parse manifest to get configurations for current runtime
|
||||
if (typeof chrome !== 'undefined' && chrome.runtime && chrome.runtime.getManifest) {
|
||||
setConfigParams(chrome.runtime.getManifest());
|
||||
} else if (typeof $ !== 'undefined' && $.get) {
|
||||
$.get('/manifest.json', setConfigParams, 'json');
|
||||
}
|
||||
|
||||
function setConfigParams(manifest) {
|
||||
var cfg = appCfg.config;
|
||||
|
||||
function getUrl(beginsWith) {
|
||||
return _.find(manifest.permissions, function(permission) {
|
||||
return typeof permission === 'string' && permission.indexOf(beginsWith) === 0;
|
||||
}).replace(/\/$/, ''); // remove last '/' from url due to required syntax in manifest
|
||||
}
|
||||
|
||||
// get key server base url
|
||||
cfg.keyServerUrl = getUrl('https://keys');
|
||||
// get the app version
|
||||
cfg.appVersion = manifest.version;
|
||||
}
|
||||
|
||||
/**
|
||||
* Strings are maintained here
|
||||
*/
|
||||
app.string = {
|
||||
appCfg.string = {
|
||||
fallbackSubject: '(no subject)',
|
||||
invitationSubject: 'Invitation to a private conversation',
|
||||
invitationMessage: 'Hi,\n\nI use Whiteout Mail to send and receive encrypted email. I would like to exchange encrypted messages with you as well.\n\nPlease install the Whiteout Mail application. This application makes it easy to read and write messages securely with PGP encryption applied.\n\nGo to the Whiteout Networks homepage to learn more and to download the application: https://whiteout.io\n\n',
|
||||
@ -207,7 +99,7 @@ define(function(require) {
|
||||
certificateFaqLink: 'https://github.com/whiteout-io/mail-html5/wiki/FAQ#what-does-the-ssl-certificate-for-the-mail-server--changed-mean',
|
||||
bugReportTitle: 'Report a bug',
|
||||
bugReportSubject: '[Bug] I want to report a bug',
|
||||
bugReportBody: 'Steps to reproduce\n1. \n2. \n3. \n\nWhat happens?\n\n\nWhat do you expect to happen instead?\n\n\n\n== PLEASE DONT PUT ANY KEYS HERE! ==\n\n\n## Log\n\nBelow is the log. It includes your interactions with your email provider in an anonymized way from the point where you started the app for the last time. Any information provided by you will be used for the porpose of locating and fixing the bug you reported. It will be deleted subsequently. However, you can edit this log and/or remove log data in the event that something would show up.\n\n',
|
||||
bugReportBody: 'Steps to reproduce\n1. \n2. \n3. \n\nWhat happens?\n\n\nWhat do you expect to happen instead?\n\n\n\n== PLEASE DONT PUT ANY KEYS HERE! ==\n\n\n## Log\n\nBelow is the log. It includes your interactions with your email provider from the point where you started the app for the last time. Login data and email content has been stripped. Any information provided by you will be used for the purpose of locating and fixing the bug you reported. It will be deleted subsequently. However, you can edit this log and/or remove log data in the event that something would show up.\n\nUser-Agent: {0}\nVersion: {1}\n\n',
|
||||
supportAddress: 'mail.support@whiteout.io',
|
||||
connDocOffline: 'It appears that you are offline. Please retry when you are online.',
|
||||
connDocTlsWrongCert: 'A connection to {0} was rejected because the TLS certificate is invalid. Please have a look at the FAQ for information on how to fix this error.',
|
||||
@ -215,8 +107,9 @@ define(function(require) {
|
||||
connDocHostTimeout: 'We could not establish a connection to {0} within {1} ms. Please check the server settings and encryption mode!',
|
||||
connDocAuthRejected: 'Your credentials for {0} were rejected. Please check your username and password!',
|
||||
connDocNoInbox: 'We could not detect an IMAP inbox folder on {0}. Please have a look at the FAQ for information on how to fix this error.',
|
||||
connDocGenericError: 'There was an error connecting to {0}: {1}'
|
||||
};
|
||||
|
||||
return app;
|
||||
});
|
||||
connDocGenericError: 'There was an error connecting to {0}: {1}',
|
||||
logoutTitle: 'Logout',
|
||||
logoutMessage: 'Are you sure you want to log out? Please back up your encryption key before proceeding!',
|
||||
removePreAuthAccountTitle: 'Remove account',
|
||||
removePreAuthAccountMessage: 'Are you sure you want to remove your account from this device?'
|
||||
};
|
@ -1,227 +0,0 @@
|
||||
/**
|
||||
* The main application controller
|
||||
*/
|
||||
define(function(require) {
|
||||
'use strict';
|
||||
|
||||
var axe = require('axe'),
|
||||
Auth = require('js/bo/auth'),
|
||||
PGP = require('js/crypto/pgp'),
|
||||
PgpMailer = require('pgpmailer'),
|
||||
OAuth = require('js/util/oauth'),
|
||||
PgpBuilder = require('pgpbuilder'),
|
||||
OutboxBO = require('js/bo/outbox'),
|
||||
mailreader = require('mailreader'),
|
||||
ImapClient = require('imap-client'),
|
||||
Crypto = require('js/crypto/crypto'),
|
||||
RestDAO = require('js/dao/rest-dao'),
|
||||
appConfig = require('js/app-config'),
|
||||
EmailDAO = require('js/dao/email-dao'),
|
||||
AdminDao = require('js/dao/admin-dao'),
|
||||
KeychainDAO = require('js/dao/keychain-dao'),
|
||||
PublicKeyDAO = require('js/dao/publickey-dao'),
|
||||
LawnchairDAO = require('js/dao/lawnchair-dao'),
|
||||
PrivateKeyDAO = require('js/dao/privatekey-dao'),
|
||||
InvitationDAO = require('js/dao/invitation-dao'),
|
||||
DeviceStorageDAO = require('js/dao/devicestorage-dao'),
|
||||
ConnectionDoctor = require('js/util/connection-doctor'),
|
||||
UpdateHandler = require('js/util/update/update-handler'),
|
||||
config = appConfig.config,
|
||||
str = appConfig.string;
|
||||
|
||||
var self = {};
|
||||
|
||||
/**
|
||||
* Start the application
|
||||
*/
|
||||
self.start = function(options, callback) {
|
||||
if (self.started) {
|
||||
return callback();
|
||||
}
|
||||
|
||||
self.started = true;
|
||||
self.onError = options.onError;
|
||||
|
||||
// are we running in a cordova app or in a browser environment?
|
||||
if (window.cordova) {
|
||||
// wait for 'deviceready' event to make sure plugins are loaded
|
||||
axe.debug('Assuming Cordova environment...');
|
||||
document.addEventListener("deviceready", onDeviceReady, false);
|
||||
} else {
|
||||
// No need to wait on events... just start the app
|
||||
axe.debug('Assuming Browser environment...');
|
||||
onDeviceReady();
|
||||
}
|
||||
|
||||
function onDeviceReady() {
|
||||
axe.debug('Starting app.');
|
||||
|
||||
self.buildModules();
|
||||
|
||||
// Handle offline and online gracefully
|
||||
window.addEventListener('online', self.onConnect.bind(self, self.onError));
|
||||
window.addEventListener('offline', self.onDisconnect.bind(self));
|
||||
|
||||
self._appConfigStore.init('app-config', callback);
|
||||
}
|
||||
};
|
||||
|
||||
self.buildModules = function() {
|
||||
var lawnchairDao, restDao, pubkeyDao, privkeyDao, crypto, emailDao, keychain, pgp, userStorage, pgpbuilder, oauth, appConfigStore, auth;
|
||||
|
||||
// start the mailreader's worker thread
|
||||
mailreader.startWorker(config.workerPath + '/../lib/mailreader-parser-worker.js');
|
||||
|
||||
// init objects and inject dependencies
|
||||
restDao = new RestDAO();
|
||||
lawnchairDao = new LawnchairDAO();
|
||||
pubkeyDao = new PublicKeyDAO(restDao);
|
||||
privkeyDao = new PrivateKeyDAO(new RestDAO(config.privkeyServerUrl));
|
||||
oauth = new OAuth(new RestDAO('https://www.googleapis.com'));
|
||||
|
||||
crypto = new Crypto();
|
||||
self._pgp = pgp = new PGP();
|
||||
self._keychain = keychain = new KeychainDAO(lawnchairDao, pubkeyDao, privkeyDao, crypto, pgp);
|
||||
keychain.requestPermissionForKeyUpdate = function(params, callback) {
|
||||
var message = params.newKey ? str.updatePublicKeyMsgNewKey : str.updatePublicKeyMsgRemovedKey;
|
||||
message = message.replace('{0}', params.userId);
|
||||
|
||||
self.onError({
|
||||
title: str.updatePublicKeyTitle,
|
||||
message: message,
|
||||
positiveBtnStr: str.updatePublicKeyPosBtn,
|
||||
negativeBtnStr: str.updatePublicKeyNegBtn,
|
||||
showNegativeBtn: true,
|
||||
callback: callback
|
||||
});
|
||||
};
|
||||
|
||||
self._appConfigStore = appConfigStore = new DeviceStorageDAO(new LawnchairDAO());
|
||||
self._auth = auth = new Auth(appConfigStore, oauth, pgp);
|
||||
self._userStorage = userStorage = new DeviceStorageDAO(lawnchairDao);
|
||||
self._invitationDao = new InvitationDAO(restDao);
|
||||
self._pgpbuilder = pgpbuilder = new PgpBuilder();
|
||||
self._emailDao = emailDao = new EmailDAO(keychain, pgp, userStorage, pgpbuilder, mailreader);
|
||||
self._outboxBo = new OutboxBO(emailDao, keychain, userStorage);
|
||||
self._updateHandler = new UpdateHandler(appConfigStore, userStorage, auth);
|
||||
self._adminDao = new AdminDao(new RestDAO(config.adminUrl));
|
||||
self._doctor = new ConnectionDoctor();
|
||||
|
||||
emailDao.onError = self.onError;
|
||||
};
|
||||
|
||||
self.isOnline = function() {
|
||||
return navigator.onLine;
|
||||
};
|
||||
|
||||
self.onDisconnect = function() {
|
||||
self._emailDao.onDisconnect();
|
||||
};
|
||||
|
||||
self.onConnect = function(callback) {
|
||||
if (!self.isOnline() || !self._emailDao || !self._emailDao._account) {
|
||||
// prevent connection infinite loop
|
||||
callback();
|
||||
return;
|
||||
}
|
||||
|
||||
self._auth.getCredentials(function(err, credentials) {
|
||||
if (err) {
|
||||
callback(err);
|
||||
return;
|
||||
}
|
||||
|
||||
initClients(credentials);
|
||||
});
|
||||
|
||||
function initClients(credentials) {
|
||||
var pgpMailer = new PgpMailer(credentials.smtp, self._pgpbuilder);
|
||||
var imapClient = new ImapClient(credentials.imap);
|
||||
imapClient.onError = onConnectionError;
|
||||
pgpMailer.onError = onConnectionError;
|
||||
|
||||
// certificate update handling
|
||||
imapClient.onCert = self._auth.handleCertificateUpdate.bind(self._auth, 'imap', self.onConnect, self.onError);
|
||||
pgpMailer.onCert = self._auth.handleCertificateUpdate.bind(self._auth, 'smtp', self.onConnect, self.onError);
|
||||
|
||||
// after-setup configuration depending on the provider:
|
||||
// gmail does not require you to upload to the sent items folder
|
||||
// after successful sending, whereas most other providers do
|
||||
self._emailDao.ignoreUploadOnSent = !!(config[self._auth.provider] && config[self._auth.provider].ignoreUploadOnSent);
|
||||
|
||||
// connect to clients
|
||||
self._emailDao.onConnect({
|
||||
imapClient: imapClient,
|
||||
pgpMailer: pgpMailer
|
||||
}, callback);
|
||||
}
|
||||
|
||||
function onConnectionError(error) {
|
||||
axe.debug('Connection error. Attempting reconnect in ' + config.reconnectInterval + ' ms. Error: ' + (error.errMsg || error.message) + (error.stack ? ('\n' + error.stack) : ''));
|
||||
|
||||
setTimeout(function() {
|
||||
axe.debug('Reconnecting...');
|
||||
// re-init client modules on error
|
||||
self.onConnect(function(err) {
|
||||
if (err) {
|
||||
axe.error('Reconnect attempt failed! ' + (err.errMsg || err.message) + (err.stack ? ('\n' + err.stack) : ''));
|
||||
return;
|
||||
}
|
||||
|
||||
axe.debug('Reconnect attempt complete.');
|
||||
});
|
||||
}, config.reconnectInterval);
|
||||
}
|
||||
};
|
||||
|
||||
self.checkForUpdate = function() {
|
||||
self._updateHandler.checkForUpdate(self.onError);
|
||||
};
|
||||
|
||||
/**
|
||||
* Instanciate the mail email data access object and its dependencies. Login to imap on init.
|
||||
*/
|
||||
self.init = function(options, callback) {
|
||||
// init user's local database
|
||||
self._userStorage.init(options.emailAddress, function(err) {
|
||||
if (err) {
|
||||
callback(err);
|
||||
return;
|
||||
}
|
||||
|
||||
// Migrate the databases if necessary
|
||||
self._updateHandler.update(onUpdate);
|
||||
});
|
||||
|
||||
function onUpdate(err) {
|
||||
if (err) {
|
||||
callback({
|
||||
errMsg: 'Update failed, please reinstall the app.',
|
||||
err: err
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
// account information for the email dao
|
||||
var account = {
|
||||
realname: options.realname,
|
||||
emailAddress: options.emailAddress,
|
||||
asymKeySize: config.asymKeySize
|
||||
};
|
||||
|
||||
// init email dao
|
||||
self._emailDao.init({
|
||||
account: account
|
||||
}, function(err, keypair) {
|
||||
if (err) {
|
||||
callback(err);
|
||||
return;
|
||||
}
|
||||
|
||||
callback(null, keypair);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
return self;
|
||||
});
|
213
src/js/app.js
@ -1,161 +1,132 @@
|
||||
'use strict';
|
||||
|
||||
// Check if a new ApaCache is available on page load.
|
||||
if (typeof window.applicationCache !== 'undefined') {
|
||||
window.onload = function() {
|
||||
window.applicationCache.onupdateready = function() {
|
||||
if (window.applicationCache.status === window.applicationCache.UPDATEREADY) {
|
||||
// Browser downloaded a new app cache
|
||||
if (window.confirm('A new version of Whiteout Mail is available. Restart the app to update?')) {
|
||||
window.location.reload();
|
||||
}
|
||||
}
|
||||
};
|
||||
};
|
||||
}
|
||||
// use service-worker or app-cache for offline caching
|
||||
require('./offline-cache');
|
||||
|
||||
// hey Angular, we're bootstrapping manually!
|
||||
window.name = 'NG_DEFER_BOOTSTRAP!';
|
||||
//
|
||||
// Angular app config
|
||||
//
|
||||
|
||||
requirejs([
|
||||
'angular',
|
||||
'js/controller/dialog',
|
||||
'js/controller/popover',
|
||||
'js/controller/add-account',
|
||||
'js/controller/account',
|
||||
'js/controller/set-passphrase',
|
||||
'js/controller/privatekey-upload',
|
||||
'js/controller/contacts',
|
||||
'js/controller/about',
|
||||
'js/controller/login',
|
||||
'js/controller/login-initial',
|
||||
'js/controller/login-new-device',
|
||||
'js/controller/login-existing',
|
||||
'js/controller/login-privatekey-download',
|
||||
'js/controller/login-set-credentials',
|
||||
'js/controller/mail-list',
|
||||
'js/controller/read',
|
||||
'js/controller/write',
|
||||
'js/controller/navigation',
|
||||
'js/crypto/util',
|
||||
'js/util/error',
|
||||
'js/util/backbutton-handler',
|
||||
'fastclick',
|
||||
'angularRoute',
|
||||
'angularAnimate',
|
||||
'ngInfiniteScroll',
|
||||
'ngTagsInput'
|
||||
], function(
|
||||
angular,
|
||||
DialogCtrl,
|
||||
PopoverCtrl,
|
||||
AddAccountCtrl,
|
||||
AccountCtrl,
|
||||
SetPassphraseCtrl,
|
||||
PrivateKeyUploadCtrl,
|
||||
ContactsCtrl,
|
||||
AboutCtrl,
|
||||
LoginCtrl,
|
||||
LoginInitialCtrl,
|
||||
LoginNewDeviceCtrl,
|
||||
LoginExistingCtrl,
|
||||
LoginPrivateKeyDownloadCtrl,
|
||||
LoginSetCredentialsCtrl,
|
||||
MailListCtrl,
|
||||
ReadCtrl,
|
||||
WriteCtrl,
|
||||
NavigationCtrl,
|
||||
util,
|
||||
errorUtil,
|
||||
backButtonUtil,
|
||||
FastClick
|
||||
) {
|
||||
// reset window.name
|
||||
window.name = util.UUID();
|
||||
var axe = require('axe-logger');
|
||||
|
||||
// init main angular module including dependencies
|
||||
var app = angular.module('mail', [
|
||||
// include angular modules
|
||||
require('./app-config');
|
||||
require('./directive');
|
||||
require('./util');
|
||||
require('./crypto');
|
||||
require('./service');
|
||||
require('./email');
|
||||
|
||||
// init main angular module including dependencies
|
||||
var app = angular.module('mail', [
|
||||
'ngRoute',
|
||||
'ngAnimate',
|
||||
'navigation',
|
||||
'mail-list',
|
||||
'write',
|
||||
'read',
|
||||
'contacts',
|
||||
'login-new-device',
|
||||
'privatekey-upload',
|
||||
'popover',
|
||||
'infinite-scroll',
|
||||
'ngTagsInput'
|
||||
]);
|
||||
'ngTagsInput',
|
||||
'woAppConfig',
|
||||
'woDirectives',
|
||||
'woUtil',
|
||||
'woCrypto',
|
||||
'woServices',
|
||||
'woEmail',
|
||||
'infinite-scroll'
|
||||
]);
|
||||
|
||||
// set router paths
|
||||
app.config(function($routeProvider) {
|
||||
$routeProvider.when('/add-account', {
|
||||
templateUrl: 'tpl/add-account.html',
|
||||
controller: AddAccountCtrl
|
||||
});
|
||||
// set router paths
|
||||
app.config(function($routeProvider, $animateProvider) {
|
||||
$routeProvider.when('/login', {
|
||||
templateUrl: 'tpl/login.html',
|
||||
controller: LoginCtrl
|
||||
controller: require('./controller/login/login')
|
||||
});
|
||||
$routeProvider.when('/add-account', {
|
||||
templateUrl: 'tpl/add-account.html',
|
||||
controller: require('./controller/login/add-account')
|
||||
});
|
||||
$routeProvider.when('/create-account', {
|
||||
templateUrl: 'tpl/create-account.html',
|
||||
controller: require('./controller/login/create-account')
|
||||
});
|
||||
$routeProvider.when('/validate-phone', {
|
||||
templateUrl: 'tpl/validate-phone.html',
|
||||
controller: require('./controller/login/validate-phone')
|
||||
});
|
||||
$routeProvider.when('/login-set-credentials', {
|
||||
templateUrl: 'tpl/login-set-credentials.html',
|
||||
controller: LoginSetCredentialsCtrl
|
||||
controller: require('./controller/login/login-set-credentials')
|
||||
});
|
||||
$routeProvider.when('/login-privatekey-upload', {
|
||||
templateUrl: 'tpl/login-privatekey-upload.html',
|
||||
controller: require('./controller/login/login-privatekey-upload')
|
||||
});
|
||||
$routeProvider.when('/login-verify-public-key', {
|
||||
templateUrl: 'tpl/login-verify-public-key.html',
|
||||
controller: require('./controller/login/login-verify-public-key')
|
||||
});
|
||||
$routeProvider.when('/login-existing', {
|
||||
templateUrl: 'tpl/login-existing.html',
|
||||
controller: LoginExistingCtrl
|
||||
controller: require('./controller/login/login-existing')
|
||||
});
|
||||
$routeProvider.when('/login-initial', {
|
||||
templateUrl: 'tpl/login-initial.html',
|
||||
controller: LoginInitialCtrl
|
||||
controller: require('./controller/login/login-initial')
|
||||
});
|
||||
$routeProvider.when('/login-new-device', {
|
||||
templateUrl: 'tpl/login-new-device.html',
|
||||
controller: LoginNewDeviceCtrl
|
||||
controller: require('./controller/login/login-new-device')
|
||||
});
|
||||
$routeProvider.when('/login-privatekey-download', {
|
||||
templateUrl: 'tpl/login-privatekey-download.html',
|
||||
controller: LoginPrivateKeyDownloadCtrl
|
||||
controller: require('./controller/login/login-privatekey-download')
|
||||
});
|
||||
$routeProvider.when('/desktop', {
|
||||
$routeProvider.when('/account', {
|
||||
templateUrl: 'tpl/desktop.html',
|
||||
controller: NavigationCtrl
|
||||
controller: require('./controller/app/navigation'),
|
||||
reloadOnSearch: false // don't reload controllers in main app when query params change
|
||||
});
|
||||
$routeProvider.otherwise({
|
||||
redirectTo: '/login'
|
||||
});
|
||||
});
|
||||
|
||||
app.run(function($rootScope) {
|
||||
// activate ngAnimate for whitelisted classes only
|
||||
$animateProvider.classNameFilter(/lightbox/);
|
||||
});
|
||||
|
||||
app.run(function($rootScope) {
|
||||
// global state... inherited to all child scopes
|
||||
$rootScope.state = {};
|
||||
|
||||
// attach global error handler
|
||||
errorUtil.attachHandler($rootScope);
|
||||
|
||||
// attach the back button handler to the root scope
|
||||
backButtonUtil.attachHandler($rootScope);
|
||||
|
||||
// attach fastclick
|
||||
FastClick.attach(document.body);
|
||||
});
|
||||
});
|
||||
|
||||
// inject controllers from ng-included view templates
|
||||
app.controller('ReadCtrl', ReadCtrl);
|
||||
app.controller('WriteCtrl', WriteCtrl);
|
||||
app.controller('MailListCtrl', MailListCtrl);
|
||||
app.controller('AccountCtrl', AccountCtrl);
|
||||
app.controller('SetPassphraseCtrl', SetPassphraseCtrl);
|
||||
app.controller('PrivateKeyUploadCtrl', PrivateKeyUploadCtrl);
|
||||
app.controller('ContactsCtrl', ContactsCtrl);
|
||||
app.controller('AboutCtrl', AboutCtrl);
|
||||
app.controller('DialogCtrl', DialogCtrl);
|
||||
app.controller('PopoverCtrl', PopoverCtrl);
|
||||
// inject controllers from ng-included view templates
|
||||
app.controller('ReadCtrl', require('./controller/app/read'));
|
||||
app.controller('WriteCtrl', require('./controller/app/write'));
|
||||
app.controller('MailListCtrl', require('./controller/app/mail-list'));
|
||||
app.controller('AccountCtrl', require('./controller/app/account'));
|
||||
app.controller('SetPassphraseCtrl', require('./controller/app/set-passphrase'));
|
||||
app.controller('PublicKeyImportCtrl', require('./controller/app/publickey-import'));
|
||||
app.controller('ContactsCtrl', require('./controller/app/contacts'));
|
||||
app.controller('AboutCtrl', require('./controller/app/about'));
|
||||
app.controller('DialogCtrl', require('./controller/app/dialog'));
|
||||
app.controller('ActionBarCtrl', require('./controller/app/action-bar'));
|
||||
app.controller('StatusDisplayCtrl', require('./controller/app/status-display'));
|
||||
|
||||
// manually bootstrap angular due to require.js
|
||||
angular.element().ready(function() {
|
||||
//
|
||||
// Manual angular bootstraping
|
||||
//
|
||||
|
||||
// are we running in a cordova app or in a browser environment?
|
||||
if (window.cordova) {
|
||||
// wait for 'deviceready' event to make sure plugins are loaded
|
||||
axe.debug('Assuming Cordova environment...');
|
||||
document.addEventListener('deviceready', bootstrap, false);
|
||||
} else {
|
||||
// No need to wait on events... just start the app
|
||||
axe.debug('Assuming Browser environment...');
|
||||
bootstrap();
|
||||
}
|
||||
|
||||
function bootstrap() {
|
||||
angular.element(document).ready(function() {
|
||||
angular.bootstrap(document, ['mail']);
|
||||
});
|
||||
});
|
||||
}
|