Compare commits
1015 Commits
photos-v0.
...
leap_of_fa
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9e0eb9303f | ||
|
|
e1aee3cfbd | ||
|
|
eb34372a21 | ||
|
|
27beed354e | ||
|
|
73bbf39256 | ||
|
|
1a3d665655 | ||
|
|
02f3afc4cc | ||
|
|
d492a0e695 | ||
|
|
299363c8c4 | ||
|
|
37774c31d7 | ||
|
|
9fe36985d6 | ||
|
|
eee6705e11 | ||
|
|
719ac8539b | ||
|
|
7f1d8dba94 | ||
|
|
92fe34d43f | ||
|
|
a6a77ffb9c | ||
|
|
a638cb1ece | ||
|
|
cf3cfe7275 | ||
|
|
edc39f3fd8 | ||
|
|
85729c9426 | ||
|
|
1e50f52801 | ||
|
|
46c941fb8c | ||
|
|
88abe4dac1 | ||
|
|
e1633eccb7 | ||
|
|
12e441a27b | ||
|
|
c6497dcb5a | ||
|
|
70be419562 | ||
|
|
6f7e56e796 | ||
|
|
051ea691af | ||
|
|
b7db8e9e77 | ||
|
|
d2e5b87bf7 | ||
|
|
de5ece27f2 | ||
|
|
55871c1f2e | ||
|
|
71a195a4de | ||
|
|
320a397b1c | ||
|
|
a295eb39f7 | ||
|
|
df7ffefdf8 | ||
|
|
5e7ac4437f | ||
|
|
b855d38864 | ||
|
|
23712e6bd3 | ||
|
|
dff5e9f4a6 | ||
|
|
fe58758523 | ||
|
|
bf70129fb6 | ||
|
|
8083cdfaa6 | ||
|
|
f14f1ab6bb | ||
|
|
914802f057 | ||
|
|
80e41c9882 | ||
|
|
8d9ec328f4 | ||
|
|
963ac63898 | ||
|
|
7b704d9ea7 | ||
|
|
46669c623b | ||
|
|
e74c6fd582 | ||
|
|
4be86c4c00 | ||
|
|
d21f7c1a93 | ||
|
|
a60048a4d0 | ||
|
|
737977358a | ||
|
|
f03fa338b1 | ||
|
|
e3c09d7af0 | ||
|
|
1fb6b3dc89 | ||
|
|
e68fa04a14 | ||
|
|
daf33bcb3a | ||
|
|
154a46b2ef | ||
|
|
584d993bc0 | ||
|
|
ddc4c9d275 | ||
|
|
61b5e0ae60 | ||
|
|
e0789b0d5a | ||
|
|
8e847f12f2 | ||
|
|
52086eb697 | ||
|
|
383b7542c8 | ||
|
|
7e50de6e61 | ||
|
|
82cb806fab | ||
|
|
3e89692ebc | ||
|
|
847cba9a8b | ||
|
|
5ed9ac0578 | ||
|
|
be790b5bc5 | ||
|
|
092640af7e | ||
|
|
f8b9bcf79f | ||
|
|
510768bbd6 | ||
|
|
c59dd66c0d | ||
|
|
be894d0aaa | ||
|
|
aa07b53bbd | ||
|
|
3caeaef2b7 | ||
|
|
5804feedc4 | ||
|
|
cc098346b8 | ||
|
|
2639b88348 | ||
|
|
dd061e6171 | ||
|
|
f874396694 | ||
|
|
ed8a17ffd8 | ||
|
|
3988c9ad9d | ||
|
|
088c52b0df | ||
|
|
ed231c2260 | ||
|
|
b712ac8bf1 | ||
|
|
39a93ea8ef | ||
|
|
18e1745146 | ||
|
|
c5fabbd50b | ||
|
|
d7806d3441 | ||
|
|
0658a5a59f | ||
|
|
5203b764c5 | ||
|
|
d357d9ecbe | ||
|
|
9bddc98827 | ||
|
|
8fb51174ce | ||
|
|
d80093bfed | ||
|
|
8ba43d913a | ||
|
|
bd095f3062 | ||
|
|
7b214c1dc0 | ||
|
|
1047767d90 | ||
|
|
2c20ace110 | ||
|
|
6b9e4b186e | ||
|
|
c3f8e6a11d | ||
|
|
f93dbf0633 | ||
|
|
54cf5dba01 | ||
|
|
748b737f74 | ||
|
|
071ffefffd | ||
|
|
3863591d26 | ||
|
|
d92838d9f2 | ||
|
|
220e46109d | ||
|
|
4ace6675ce | ||
|
|
f3c5e769fe | ||
|
|
c094a5afb5 | ||
|
|
8555fed3d6 | ||
|
|
ccca42f757 | ||
|
|
4de5b9b8bb | ||
|
|
da5d81fe91 | ||
|
|
4ad13a2991 | ||
|
|
c7859131b0 | ||
|
|
211171b78a | ||
|
|
e9fd33890e | ||
|
|
ee43a9c14c | ||
|
|
011bfc1e0b | ||
|
|
94cb146b3c | ||
|
|
c48963244d | ||
|
|
03d7d826cf | ||
|
|
ef5babd40c | ||
|
|
01ebe68f09 | ||
|
|
6d02686331 | ||
|
|
d2ffea6cf9 | ||
|
|
ca841dcced | ||
|
|
9933bd5385 | ||
|
|
90e052fa49 | ||
|
|
ad12458774 | ||
|
|
fa00c06cf8 | ||
|
|
b8f475bf2e | ||
|
|
ffc87312d1 | ||
|
|
48f0f62d7c | ||
|
|
9ac2ebfc08 | ||
|
|
c96102c2b8 | ||
|
|
f69dd18364 | ||
|
|
6d2c317877 | ||
|
|
3454536799 | ||
|
|
1ecd688fb8 | ||
|
|
54971cbaf8 | ||
|
|
a892061446 | ||
|
|
f6d4c632c7 | ||
|
|
919f0e2b57 | ||
|
|
388add5984 | ||
|
|
404d1feef6 | ||
|
|
d6e0b85af9 | ||
|
|
58c164d2c2 | ||
|
|
7830f9b1b1 | ||
|
|
efe3240bf4 | ||
|
|
1446f20d69 | ||
|
|
296579b80b | ||
|
|
aea6961676 | ||
|
|
6c33671da7 | ||
|
|
982e0068ee | ||
|
|
256178240d | ||
|
|
9d931e2d8b | ||
|
|
92234752a2 | ||
|
|
1d908cbed6 | ||
|
|
305f727078 | ||
|
|
9244a1799a | ||
|
|
d76c512d96 | ||
|
|
8fbbb3a18c | ||
|
|
1b0ed23df9 | ||
|
|
9230ddba3f | ||
|
|
5f2a1e9386 | ||
|
|
0d40c382ac | ||
|
|
c1b73dc18c | ||
|
|
84888df08b | ||
|
|
b43c0f6cc7 | ||
|
|
fb10d78c34 | ||
|
|
5b1365e7d1 | ||
|
|
85bf7bbc48 | ||
|
|
f1bf091faf | ||
|
|
f1a345d04d | ||
|
|
2988a3983e | ||
|
|
6fd19b3dca | ||
|
|
58fce85696 | ||
|
|
fbde5625b2 | ||
|
|
269660c487 | ||
|
|
dbae45ee44 | ||
|
|
0b76611e11 | ||
|
|
b77ac99bbb | ||
|
|
7cfad45b65 | ||
|
|
a3384adfb0 | ||
|
|
e1e05d4781 | ||
|
|
b8e2b265c3 | ||
|
|
e3ffe3e1f0 | ||
|
|
3c352e9ca2 | ||
|
|
85d50890a6 | ||
|
|
0a4ad32d9c | ||
|
|
1201cfc42d | ||
|
|
528526ac10 | ||
|
|
2049bf769d | ||
|
|
597190e375 | ||
|
|
e1327a5896 | ||
|
|
7a9110cc9b | ||
|
|
f64e62ba61 | ||
|
|
54681d3bde | ||
|
|
749109fc73 | ||
|
|
58f84b2a73 | ||
|
|
86c9b1ef00 | ||
|
|
e98b0f4e10 | ||
|
|
930224a2e5 | ||
|
|
3de324f342 | ||
|
|
2e0dcc17ef | ||
|
|
10e6f797eb | ||
|
|
e8e7744af3 | ||
|
|
e42024c912 | ||
|
|
18cc16bcc0 | ||
|
|
01c2348b6e | ||
|
|
4fd3a269b0 | ||
|
|
5e41952e62 | ||
|
|
37d38a0e6b | ||
|
|
2a5d67b5ca | ||
|
|
1b320000fb | ||
|
|
faed01ca01 | ||
|
|
ec147d57dd | ||
|
|
5250f7f355 | ||
|
|
df769a97ec | ||
|
|
9f14d60b42 | ||
|
|
b70de5cc67 | ||
|
|
95ae2c30ec | ||
|
|
05d83cf390 | ||
|
|
a72ae560c9 | ||
|
|
6980f56cc3 | ||
|
|
48169e9794 | ||
|
|
14fbec6b94 | ||
|
|
a845642cfe | ||
|
|
4b7397c9bf | ||
|
|
bf19e07512 | ||
|
|
e3540b7681 | ||
|
|
6ee6e7f217 | ||
|
|
cb4fcfdd25 | ||
|
|
330a3b4dea | ||
|
|
bf1613d91d | ||
|
|
0f7445b219 | ||
|
|
47914126e5 | ||
|
|
bc7400c0a2 | ||
|
|
c15a7909e8 | ||
|
|
5243515beb | ||
|
|
48db372251 | ||
|
|
9671f4e3fc | ||
|
|
e093a0de61 | ||
|
|
4e7c97a45f | ||
|
|
4fac219e52 | ||
|
|
65ea4f755f | ||
|
|
189f647ffe | ||
|
|
eed50f753b | ||
|
|
0ba76ebbf0 | ||
|
|
78ae7c8595 | ||
|
|
45eff8edb3 | ||
|
|
0498fa644b | ||
|
|
6192ea8b3a | ||
|
|
34b20573b5 | ||
|
|
f39ac3529f | ||
|
|
0869421d9c | ||
|
|
e2876d3d24 | ||
|
|
e0b9b27537 | ||
|
|
cecb7fd4f4 | ||
|
|
68319ca725 | ||
|
|
92a718ca0f | ||
|
|
e4e01cce9e | ||
|
|
a77fe84ea4 | ||
|
|
8e3608c396 | ||
|
|
3f673d409a | ||
|
|
b24b249352 | ||
|
|
662cb8135e | ||
|
|
e7a53f87ca | ||
|
|
5a8d45fa98 | ||
|
|
3a7914e1bf | ||
|
|
6afce67d51 | ||
|
|
edcd916744 | ||
|
|
9fdc1c1baf | ||
|
|
0b60603559 | ||
|
|
c080d16ae7 | ||
|
|
14a806c4ea | ||
|
|
a60f1ec213 | ||
|
|
ba53da4a69 | ||
|
|
79b9b2f84e | ||
|
|
17b2348fca | ||
|
|
6453c3d243 | ||
|
|
0842edc82d | ||
|
|
ab9e1f4a3d | ||
|
|
533e20ad46 | ||
|
|
6d257f04b5 | ||
|
|
f6ca34c6e9 | ||
|
|
96e8b09555 | ||
|
|
bdd7dccd74 | ||
|
|
70877b9103 | ||
|
|
888a604633 | ||
|
|
37172c8291 | ||
|
|
beb09defca | ||
|
|
e23f7fd63e | ||
|
|
93f4e9f2c0 | ||
|
|
495c950386 | ||
|
|
8d29e837cd | ||
|
|
226830acaa | ||
|
|
96a18d9f2b | ||
|
|
548955a803 | ||
|
|
f7896d5a82 | ||
|
|
18ca154578 | ||
|
|
d625816eb3 | ||
|
|
094e08c387 | ||
|
|
f7c8a563a9 | ||
|
|
00c43b10ea | ||
|
|
bcaafe7e33 | ||
|
|
a754fe740f | ||
|
|
26020c2e99 | ||
|
|
9e4c3d826a | ||
|
|
da582a2436 | ||
|
|
208e4cbbab | ||
|
|
fbcba9903e | ||
|
|
d37af17445 | ||
|
|
d8b995c3d6 | ||
|
|
58d5374910 | ||
|
|
90db26c07b | ||
|
|
48de9850e5 | ||
|
|
c4d6323a36 | ||
|
|
bc6ede54f9 | ||
|
|
0c92ed96a6 | ||
|
|
20c6f15a0f | ||
|
|
8407816d14 | ||
|
|
369999e0aa | ||
|
|
9295908dc5 | ||
|
|
b2a21084da | ||
|
|
95a27397d3 | ||
|
|
d9c1a21b0c | ||
|
|
821965308e | ||
|
|
22bec8eee7 | ||
|
|
e77998fd71 | ||
|
|
b6ae571b0b | ||
|
|
b3d8072a38 | ||
|
|
892f130580 | ||
|
|
b25e5a9443 | ||
|
|
55994e472a | ||
|
|
9c23c03f23 | ||
|
|
7dda0ecf81 | ||
|
|
09bfca7aa4 | ||
|
|
7c3fe5d57c | ||
|
|
08c4842f20 | ||
|
|
aea5f78765 | ||
|
|
2bd36b0795 | ||
|
|
13860afbc2 | ||
|
|
a7a21e66a7 | ||
|
|
f0e4678307 | ||
|
|
782ef5eeb0 | ||
|
|
7fc7d365ad | ||
|
|
f98be148dc | ||
|
|
09c29362af | ||
|
|
bed645044b | ||
|
|
07618b8041 | ||
|
|
7e0dc22abe | ||
|
|
d37675cc57 | ||
|
|
1ac0903561 | ||
|
|
adffe6362a | ||
|
|
2cade6f271 | ||
|
|
ac08d5b37d | ||
|
|
9d1cc2a014 | ||
|
|
167807c758 | ||
|
|
ebd4b89f34 | ||
|
|
6217c3a8f5 | ||
|
|
4d307ded5e | ||
|
|
6e7ced0ecc | ||
|
|
2dad8f6db0 | ||
|
|
9b729fb170 | ||
|
|
7598351211 | ||
|
|
657949d109 | ||
|
|
1d118b07f9 | ||
|
|
a0bb50fc37 | ||
|
|
29e77245d7 | ||
|
|
a0a001e8e7 | ||
|
|
d6c58bc9ca | ||
|
|
65ed594574 | ||
|
|
f3952fad49 | ||
|
|
09b88e5bab | ||
|
|
bfdd111dc1 | ||
|
|
a2166308d2 | ||
|
|
29f4bbb0de | ||
|
|
f235da8a05 | ||
|
|
cae38e22e3 | ||
|
|
c4702cdc22 | ||
|
|
05fc91576a | ||
|
|
c64af87e33 | ||
|
|
14f13d9dde | ||
|
|
6d7210cc69 | ||
|
|
1ff4f7d0bb | ||
|
|
ba0ac8ab08 | ||
|
|
8de32ca12d | ||
|
|
bd13a2373a | ||
|
|
ab5f0e7de4 | ||
|
|
cd190f21d1 | ||
|
|
544a124318 | ||
|
|
6134baea55 | ||
|
|
5cabc406af | ||
|
|
86704252e0 | ||
|
|
481d3e3700 | ||
|
|
dcd920cbb4 | ||
|
|
efa6d0289d | ||
|
|
f4d7bbae34 | ||
|
|
c4f5265ff3 | ||
|
|
7e1038a0f6 | ||
|
|
3a7e0c23ac | ||
|
|
cd93cf1be6 | ||
|
|
0a3e1087ef | ||
|
|
2345265e19 | ||
|
|
6468fe9637 | ||
|
|
8e653912cd | ||
|
|
80f64b2f8c | ||
|
|
b022d0292f | ||
|
|
d12aad2817 | ||
|
|
55281b7e32 | ||
|
|
a155855b45 | ||
|
|
81206c0e36 | ||
|
|
d0738f0988 | ||
|
|
4d65e3b233 | ||
|
|
a6f2eae418 | ||
|
|
84e16057b6 | ||
|
|
b91ee793bf | ||
|
|
0059f1817b | ||
|
|
dc401f6f72 | ||
|
|
69025f7ebf | ||
|
|
e02c6dfab9 | ||
|
|
92104e9a42 | ||
|
|
de23adec73 | ||
|
|
53b868215c | ||
|
|
fbe77affa0 | ||
|
|
988a3e74b4 | ||
|
|
fc4f35aae0 | ||
|
|
6176ec6cb9 | ||
|
|
6bdc1f5d65 | ||
|
|
f5ee666a52 | ||
|
|
fc89b9bfc1 | ||
|
|
2071cbc61b | ||
|
|
f7fba3438f | ||
|
|
bba1eb99e6 | ||
|
|
e06bfd0724 | ||
|
|
e01f92adcc | ||
|
|
e06dbb0ef1 | ||
|
|
b1b70a0d08 | ||
|
|
e50ab7ca84 | ||
|
|
a575e5f3c8 | ||
|
|
90076dd984 | ||
|
|
fe19868623 | ||
|
|
61e1153a36 | ||
|
|
94a145dafc | ||
|
|
70d957e649 | ||
|
|
039bfc3521 | ||
|
|
84ad5e9363 | ||
|
|
69661b0d30 | ||
|
|
8610854155 | ||
|
|
f3110f65a1 | ||
|
|
ac8804a1c1 | ||
|
|
34ddeff6bc | ||
|
|
5204fdc768 | ||
|
|
5738f5262b | ||
|
|
099dce43de | ||
|
|
9bab498d41 | ||
|
|
39a9cd3db4 | ||
|
|
06daaa1205 | ||
|
|
85f407ff7d | ||
|
|
07830e4dac | ||
|
|
4e57688dab | ||
|
|
6cd59a7f52 | ||
|
|
3327b75133 | ||
|
|
69ddb6fb2c | ||
|
|
da8d1f25ab | ||
|
|
c839dc5e9b | ||
|
|
c0e701f223 | ||
|
|
635c742535 | ||
|
|
26264dde04 | ||
|
|
27ecf6c3d3 | ||
|
|
aabe2a5bcf | ||
|
|
47ad0aab2d | ||
|
|
425b110b40 | ||
|
|
e456e6986a | ||
|
|
642c01a908 | ||
|
|
a3fea1656e | ||
|
|
6aa3733111 | ||
|
|
98c8e82ca7 | ||
|
|
9e3d412e99 | ||
|
|
858de20726 | ||
|
|
453f23ffba | ||
|
|
17c2bd24e4 | ||
|
|
771d12bd9b | ||
|
|
89a411c6a1 | ||
|
|
0e6d39fcc7 | ||
|
|
475f839593 | ||
|
|
a3db3e496a | ||
|
|
fe9682823f | ||
|
|
40e3338ead | ||
|
|
5ec4998f13 | ||
|
|
36bd0b1d92 | ||
|
|
11d080f721 | ||
|
|
41ddfb90f2 | ||
|
|
d2df920606 | ||
|
|
0b31f9321c | ||
|
|
58b300d8d4 | ||
|
|
90a8ecf0ab | ||
|
|
53c872ceec | ||
|
|
3816ea42ab | ||
|
|
7e5a38a687 | ||
|
|
fc8d5837c3 | ||
|
|
6ed5203485 | ||
|
|
7bc5af0bb8 | ||
|
|
b3df62e2bc | ||
|
|
cf977a7fa1 | ||
|
|
a1b0e82d56 | ||
|
|
8370cf44b5 | ||
|
|
fb63e66abb | ||
|
|
31009f7a58 | ||
|
|
927267f19f | ||
|
|
a2c5c1e67a | ||
|
|
43b6140808 | ||
|
|
ff8fdb0cc1 | ||
|
|
b6094e5aa8 | ||
|
|
8c932dc3f2 | ||
|
|
bbf001e5cb | ||
|
|
fd4c4ab226 | ||
|
|
f049aa96fc | ||
|
|
ed7bc529f5 | ||
|
|
8fa4e8e2d1 | ||
|
|
647a04af96 | ||
|
|
a4e49daeb1 | ||
|
|
c4c8447f54 | ||
|
|
9451124c38 | ||
|
|
27f6a899f7 | ||
|
|
27711dcb0e | ||
|
|
13040cc53e | ||
|
|
3188643583 | ||
|
|
ff9bec5bb2 | ||
|
|
065c13cd06 | ||
|
|
c7bc8e97d5 | ||
|
|
f11d4d540b | ||
|
|
90d84b04b6 | ||
|
|
628f195c0e | ||
|
|
334a4869b2 | ||
|
|
6bd8e73c8a | ||
|
|
c00b70cbde | ||
|
|
629311ca2c | ||
|
|
975ed72ff6 | ||
|
|
5ccfbbf263 | ||
|
|
d2c2bae3eb | ||
|
|
a1db956ae8 | ||
|
|
312a82cea5 | ||
|
|
c6b1dcba87 | ||
|
|
01ff0a62bc | ||
|
|
a34d2a9c1a | ||
|
|
c1b7ebf863 | ||
|
|
b43f4b1a2a | ||
|
|
8b276a55ef | ||
|
|
e850dae7be | ||
|
|
90c36a5eee | ||
|
|
718dcafdd0 | ||
|
|
c082c542ef | ||
|
|
20524177b1 | ||
|
|
105878c3b5 | ||
|
|
c23c92573e | ||
|
|
ab5209070c | ||
|
|
121e1380c7 | ||
|
|
60e144ab5e | ||
|
|
07dd081f0e | ||
|
|
26f4c9e0fe | ||
|
|
a9952e14d0 | ||
|
|
45b2f91da5 | ||
|
|
8290809dfb | ||
|
|
a4b14fe5b1 | ||
|
|
bec84530e6 | ||
|
|
6081dcf7a8 | ||
|
|
e4ebdddb7f | ||
|
|
cea2f5b2df | ||
|
|
0b5e6f9ced | ||
|
|
48dc09ad38 | ||
|
|
9ff57b765c | ||
|
|
03be554025 | ||
|
|
5f2e18c25f | ||
|
|
2b7d514328 | ||
|
|
3e7c66f9fe | ||
|
|
fb1cfbf541 | ||
|
|
471b3f2c94 | ||
|
|
27beac3288 | ||
|
|
9f17c9a564 | ||
|
|
a62335df85 | ||
|
|
1043f7c9a2 | ||
|
|
d95df66b9c | ||
|
|
c19119afc4 | ||
|
|
58cb9f480f | ||
|
|
14e413effa | ||
|
|
728a8c4976 | ||
|
|
dc779ae53f | ||
|
|
ab5bda8074 | ||
|
|
3782165155 | ||
|
|
2fc8d6e0c4 | ||
|
|
3fa18b3560 | ||
|
|
a15556264a | ||
|
|
267f54d943 | ||
|
|
1015c87dd2 | ||
|
|
a71c284708 | ||
|
|
89e1efbde4 | ||
|
|
5e317b9f37 | ||
|
|
6a4e992843 | ||
|
|
6e5e28d2bd | ||
|
|
fcb7221820 | ||
|
|
4abfb5b8bd | ||
|
|
09b15d8645 | ||
|
|
e0eae10007 | ||
|
|
47ec5e78c0 | ||
|
|
0060389251 | ||
|
|
07f55020df | ||
|
|
d345de9ff3 | ||
|
|
3bbb3c5767 | ||
|
|
7ac322b799 | ||
|
|
1e8750c330 | ||
|
|
07786e3162 | ||
|
|
d413c1d8dc | ||
|
|
0466067c55 | ||
|
|
d8b7d76d55 | ||
|
|
b1c62f6c93 | ||
|
|
edb5e901e4 | ||
|
|
5620be6c15 | ||
|
|
91462bcb3c | ||
|
|
c040935c52 | ||
|
|
ffe7535cd2 | ||
|
|
219e5590bc | ||
|
|
7c7ce15177 | ||
|
|
b2e164af75 | ||
|
|
d495d6f281 | ||
|
|
1e45ae5bbc | ||
|
|
636d493dfe | ||
|
|
1684192dc0 | ||
|
|
e7d6362eaa | ||
|
|
85cf1de12c | ||
|
|
19135a0dfc | ||
|
|
3d2b8974df | ||
|
|
d836e190e3 | ||
|
|
5e54b0af36 | ||
|
|
75509ff339 | ||
|
|
adf8542301 | ||
|
|
eca1ff6bb6 | ||
|
|
c731833863 | ||
|
|
cf27dd5889 | ||
|
|
45e8006652 | ||
|
|
df9124d4f9 | ||
|
|
39a54a08c0 | ||
|
|
d3fecf3831 | ||
|
|
e9ed423094 | ||
|
|
7ff6555770 | ||
|
|
6eb381b64a | ||
|
|
2bbd2d9185 | ||
|
|
9f67d06844 | ||
|
|
17ab295983 | ||
|
|
0ab9fbec49 | ||
|
|
dd600c05cd | ||
|
|
ed8ce66ce5 | ||
|
|
ab8525ca3d | ||
|
|
6c68052a55 | ||
|
|
72af9a2435 | ||
|
|
305c63f921 | ||
|
|
bb4e42331b | ||
|
|
4243a331a3 | ||
|
|
2bf58aff45 | ||
|
|
85c5ccd218 | ||
|
|
0f63930e52 | ||
|
|
4826fdc999 | ||
|
|
6621944a66 | ||
|
|
3bfd3b5220 | ||
|
|
969a9c554f | ||
|
|
e6e4540671 | ||
|
|
e2ccfe5f48 | ||
|
|
4c518f6b13 | ||
|
|
ff3da665a3 | ||
|
|
2b8c6494cd | ||
|
|
ff81711043 | ||
|
|
96605d7702 | ||
|
|
02fb6888ab | ||
|
|
0309db9466 | ||
|
|
ffde143247 | ||
|
|
8e26433dd2 | ||
|
|
e92b5c3397 | ||
|
|
77db220327 | ||
|
|
7e320693a1 | ||
|
|
714a37d461 | ||
|
|
db7f38a926 | ||
|
|
a7232d7401 | ||
|
|
dbc7861cee | ||
|
|
43adef8899 | ||
|
|
73af752f52 | ||
|
|
3cf050c2e8 | ||
|
|
3d89d852a0 | ||
|
|
815848450c | ||
|
|
b6d267e0cd | ||
|
|
aaeab874d8 | ||
|
|
8cd2267f5d | ||
|
|
67398ea9e4 | ||
|
|
8705d878f4 | ||
|
|
a37bd085d6 | ||
|
|
9a01518200 | ||
|
|
f1e1939983 | ||
|
|
60de6018a1 | ||
|
|
14ff82da27 | ||
|
|
0e34b92398 | ||
|
|
929f749ad9 | ||
|
|
1dd831e72d | ||
|
|
9e4ad1280f | ||
|
|
3970724ade | ||
|
|
0f5d921ddb | ||
|
|
ef55e2dc23 | ||
|
|
a17fb4e2fb | ||
|
|
210e055d9c | ||
|
|
1788d07cdd | ||
|
|
ae68998069 | ||
|
|
9041269af7 | ||
|
|
b5fd289ae9 | ||
|
|
2cdc14aed3 | ||
|
|
4bb9c3b290 | ||
|
|
ccb07a45d9 | ||
|
|
0f03545929 | ||
|
|
4f1659f7b7 | ||
|
|
703277fc1d | ||
|
|
7de379580a | ||
|
|
e224609e7d | ||
|
|
1bb04f2650 | ||
|
|
a164f1b839 | ||
|
|
c69eb1dc52 | ||
|
|
371960d479 | ||
|
|
fd50eb9c13 | ||
|
|
f1bd625585 | ||
|
|
de253865ac | ||
|
|
776fdc6d03 | ||
|
|
58d2f740a5 | ||
|
|
df04d0ec2e | ||
|
|
4de573190b | ||
|
|
8e044f4f50 | ||
|
|
2ef78be038 | ||
|
|
cb90e064ab | ||
|
|
18d091ea4e | ||
|
|
82a2c6e12b | ||
|
|
cb085ba0f3 | ||
|
|
491e446454 | ||
|
|
bfe62d2209 | ||
|
|
0a359b0835 | ||
|
|
1a1b5cac3b | ||
|
|
0b95e84143 | ||
|
|
c5ab6e7c66 | ||
|
|
6fe6233664 | ||
|
|
38895eaf56 | ||
|
|
9e91029105 | ||
|
|
169af1628d | ||
|
|
634aa10aff | ||
|
|
03903ae605 | ||
|
|
8961939d37 | ||
|
|
870cb61adb | ||
|
|
786b0bac4f | ||
|
|
03deaa9b8e | ||
|
|
2117a5b6e8 | ||
|
|
15446d3d98 | ||
|
|
a002733d3f | ||
|
|
3008fac19c | ||
|
|
3f324a599c | ||
|
|
67acabf7c7 | ||
|
|
03c1ff366f | ||
|
|
94eef9b596 | ||
|
|
394798d232 | ||
|
|
fb70460ec5 | ||
|
|
57e8eb7c03 | ||
|
|
d8443c5f6f | ||
|
|
5c7127cba9 | ||
|
|
b871f00150 | ||
|
|
bc8ebab531 | ||
|
|
b70b00cda4 | ||
|
|
52653b6fe4 | ||
|
|
0b26d9abc5 | ||
|
|
d2defe4d27 | ||
|
|
926e179d57 | ||
|
|
b7841e2aee | ||
|
|
77fdfe84ec | ||
|
|
d9fc53137d | ||
|
|
470d14d81f | ||
|
|
5611f2f9d9 | ||
|
|
5302f67679 | ||
|
|
4ed620db28 | ||
|
|
c4f2e9e319 | ||
|
|
b7dd90158b | ||
|
|
ba6418fcf2 | ||
|
|
806839d5ab | ||
|
|
f324e5e11c | ||
|
|
d24f9aff72 | ||
|
|
20bbd61fce | ||
|
|
24aff9268a | ||
|
|
588236dcb4 | ||
|
|
e4b26e7e74 | ||
|
|
61cd5de725 | ||
|
|
7310d4da03 | ||
|
|
804b91b825 | ||
|
|
c7fab49d68 | ||
|
|
75c3c54a5a | ||
|
|
59e3f864ce | ||
|
|
1322739707 | ||
|
|
c72b4a428a | ||
|
|
59f6bb5f48 | ||
|
|
1915fa0bb6 | ||
|
|
5f5de6b640 | ||
|
|
944caafe76 | ||
|
|
6171488375 | ||
|
|
5328e6cfee | ||
|
|
429fcbf062 | ||
|
|
cccefc8d9b | ||
|
|
674106593c | ||
|
|
70191d752b | ||
|
|
8366a8fe4d | ||
|
|
9e8e2af51d | ||
|
|
b0318e4ec3 | ||
|
|
78dc93f6d7 | ||
|
|
12793858d0 | ||
|
|
c7896d0e68 | ||
|
|
038a08f583 | ||
|
|
b316947548 | ||
|
|
2db54bc1ce | ||
|
|
d2bdec909d | ||
|
|
5477d09155 | ||
|
|
bd0b3aadf8 | ||
|
|
dea20345da | ||
|
|
ba0ea26e93 | ||
|
|
d34cb01a07 | ||
|
|
d3b1f0f5ab | ||
|
|
7913debe8c | ||
|
|
f282761ad2 | ||
|
|
351883c002 | ||
|
|
fc81dd9df3 | ||
|
|
f61ba74797 | ||
|
|
9602d70a14 | ||
|
|
e620116371 | ||
|
|
ed6ea753a2 | ||
|
|
dd01a4aaa5 | ||
|
|
16747b48b0 | ||
|
|
4cf3302cff | ||
|
|
51597ed48d | ||
|
|
131cf43f73 | ||
|
|
ad4716256e | ||
|
|
4c1e434b96 | ||
|
|
7417bb6830 | ||
|
|
e475c0d507 | ||
|
|
f3f7d67fb3 | ||
|
|
c44e558259 | ||
|
|
038b47ebeb | ||
|
|
e996664b57 | ||
|
|
8b9830fe79 | ||
|
|
75149a4a70 | ||
|
|
66e85567a6 | ||
|
|
36f7bb5364 | ||
|
|
58db7e8a91 | ||
|
|
d7e62f2b26 | ||
|
|
a1117da632 | ||
|
|
003f1ec0e8 | ||
|
|
a0078dd966 | ||
|
|
6a71d6359a | ||
|
|
04ea4ac027 | ||
|
|
5074f7d9f4 | ||
|
|
125f386df1 | ||
|
|
41ed5dd17e | ||
|
|
6031101600 | ||
|
|
73a8550844 | ||
|
|
2c6022186c | ||
|
|
1713be30b7 | ||
|
|
629cbe6887 | ||
|
|
c2306ed4e9 | ||
|
|
7d1670d210 | ||
|
|
1638b7584f | ||
|
|
bf256863b9 | ||
|
|
e7aeef6e2e | ||
|
|
3a77db9ff6 | ||
|
|
00c279096d | ||
|
|
0de1b344ad | ||
|
|
a913e2c6e7 | ||
|
|
05f86b8951 | ||
|
|
2396cc8d30 | ||
|
|
52f3e7a293 | ||
|
|
a15c9620ec | ||
|
|
626b403657 | ||
|
|
20310d2ef5 | ||
|
|
75e146e23b | ||
|
|
bfabeaefb9 | ||
|
|
882d66ee52 | ||
|
|
16a804c329 | ||
|
|
db77e45aab | ||
|
|
9e1570032a | ||
|
|
cb88e1662b | ||
|
|
80bea2b31b | ||
|
|
b63d6ad859 | ||
|
|
d13e9bc11a | ||
|
|
8bfb5fcba5 | ||
|
|
794fe3cad6 | ||
|
|
1b9ad83653 | ||
|
|
7236b24d96 | ||
|
|
7757409976 | ||
|
|
58150319f0 | ||
|
|
b4b719ffc4 | ||
|
|
4fc82e2b98 | ||
|
|
6b55e8598f | ||
|
|
f50c88fd15 | ||
|
|
882850e3d5 | ||
|
|
cb9083677f | ||
|
|
d968310f73 | ||
|
|
4a27596a2e | ||
|
|
c302f1ba2a | ||
|
|
8fef83adaf | ||
|
|
baa081510e | ||
|
|
77248175c2 | ||
|
|
c506346c2a | ||
|
|
4c75253e0a | ||
|
|
e81b6acbdd | ||
|
|
08278fb169 | ||
|
|
09d2158ca4 | ||
|
|
25d66dd238 | ||
|
|
52cbd024f7 | ||
|
|
fdd7f20518 | ||
|
|
44566d7e64 | ||
|
|
397248557b | ||
|
|
2a532cf1d2 | ||
|
|
62edaa62d8 | ||
|
|
b41909477e | ||
|
|
4926783905 | ||
|
|
e593274fec | ||
|
|
085e11302c | ||
|
|
f925d98686 | ||
|
|
8b038e7439 | ||
|
|
3db0b73648 | ||
|
|
474f9b8433 | ||
|
|
e8f11effe7 | ||
|
|
8560304b1d | ||
|
|
4a6910ce46 | ||
|
|
3f38ed4611 | ||
|
|
537f1c3d0c | ||
|
|
07944d9ac0 | ||
|
|
db8270987b | ||
|
|
c750f2ea7e | ||
|
|
57a2650e8d | ||
|
|
cfe86b00aa | ||
|
|
167ed91a01 | ||
|
|
b595272713 | ||
|
|
6e258490fe | ||
|
|
ca118c397b | ||
|
|
9fe58e44b0 | ||
|
|
04f860c97a | ||
|
|
021cde5b7e | ||
|
|
ca08f39a4e | ||
|
|
05ee252be8 | ||
|
|
6c7a409c35 | ||
|
|
f0789b1fca | ||
|
|
cf6cd23ea4 | ||
|
|
079a84fc82 | ||
|
|
acc367d522 | ||
|
|
1de19e7a3e | ||
|
|
1f122c79f7 | ||
|
|
7a99377dc9 | ||
|
|
50f4cb8e13 | ||
|
|
ff01477021 | ||
|
|
6c4c0a4ed9 | ||
|
|
eba6429e99 | ||
|
|
a197851fe9 | ||
|
|
d359d750c4 | ||
|
|
1115bf7b56 | ||
|
|
5dba461481 | ||
|
|
f9df92212a | ||
|
|
da38726f40 | ||
|
|
f7b89b7126 | ||
|
|
f19f1b0c68 | ||
|
|
1a3716f649 | ||
|
|
ffeb9da0d6 | ||
|
|
3d96e4bd94 | ||
|
|
bf19aa61d7 | ||
|
|
9aa49a7067 | ||
|
|
a299dbcd6b | ||
|
|
3a50c45dde | ||
|
|
d84edcf85c | ||
|
|
7193a61a11 | ||
|
|
03bfd854df | ||
|
|
d8490322d9 | ||
|
|
13da082cda | ||
|
|
f7fc50f2e6 | ||
|
|
fe91f3ee9b | ||
|
|
7bc688d18b | ||
|
|
426cd70c31 | ||
|
|
1fa3d87369 | ||
|
|
8152159583 | ||
|
|
68ac9cbe26 | ||
|
|
01b7a01dc5 | ||
|
|
bbfa447e42 | ||
|
|
c83bd41dae | ||
|
|
223b22ef46 | ||
|
|
982b4a4244 | ||
|
|
3a09d50972 | ||
|
|
9898baddbb | ||
|
|
520d4e4f26 | ||
|
|
ba04e20aeb | ||
|
|
672c209140 | ||
|
|
f15c9ec4d2 | ||
|
|
5c760f8384 | ||
|
|
f1b7deb706 | ||
|
|
b7e60297a0 | ||
|
|
4456797e90 | ||
|
|
0e5942446d | ||
|
|
6918987ffe | ||
|
|
9130e86460 | ||
|
|
b2d2f0d76d |
2
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
@@ -1,6 +1,6 @@
|
||||
name: Report a bug
|
||||
description: Let us know if something's not working the way you expected.
|
||||
labels: ["triage"]
|
||||
labels: []
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
|
||||
4
.github/workflows/web-deploy.yml
vendored
@@ -4,7 +4,7 @@ on:
|
||||
schedule:
|
||||
# [Note: Run workflow every 24 hours]
|
||||
#
|
||||
# Run everyday at ~8:00 AM IST (except Sundays).
|
||||
# Run every weekday at ~8:00 AM IST.
|
||||
#
|
||||
# First field is minute, second is hour of the day. Last is day of week,
|
||||
# 0 being Sunday.
|
||||
@@ -15,7 +15,7 @@ on:
|
||||
# https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#schedule
|
||||
# https://crontab.guru/
|
||||
#
|
||||
- cron: "25 2 * * 1-6"
|
||||
- cron: "25 2 * * 1-5"
|
||||
# Also allow manually running the workflow
|
||||
workflow_dispatch:
|
||||
|
||||
|
||||
@@ -46,6 +46,7 @@
|
||||
<!-- Don't delete the meta-data below.
|
||||
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
|
||||
<meta-data android:name="flutterEmbedding" android:value="2"/>
|
||||
<meta-data android:name="flutter_deeplinking_enabled" android:value="false" />
|
||||
|
||||
<meta-data android:name="io.sentry.dsn"
|
||||
android:value="https://ed4ddd6309b847ba8849935e26e9b648@sentry.ente.io/9"/>
|
||||
|
||||
@@ -1,24 +1,19 @@
|
||||
Ente Auth helps you generate and store 2 step verification (2FA)
|
||||
tokens on your mobile devices.
|
||||
Ente Auth helps you generate and store 2 step verification (2FA) tokens on your mobile devices.
|
||||
|
||||
|
||||
FEATURES
|
||||
|
||||
- Secure Backups
|
||||
Auth provides end-to-end encrypted cloud backups so that you don't have to worry
|
||||
about losing your tokens. We use the same protocols Ente Photos uses to encrypt
|
||||
and preserve your data.
|
||||
Auth provides end-to-end encrypted cloud backups so that you don't have to worry about losing your tokens. We use the same protocols Ente Photos uses to encrypt and preserve your data.
|
||||
|
||||
- Multi Device Synchronization
|
||||
Auth will automatically sync the 2FA tokens you add to your account, across all
|
||||
your devices. Every new device you sign into will have access to these tokens.
|
||||
Auth will automatically sync the 2FA tokens you add to your account, across all your devices. Every new device you sign into will have access to these tokens.
|
||||
|
||||
- Web access
|
||||
You can access your 2FA code from any web browser by visiting https://auth.ente.io .
|
||||
|
||||
- Offline Mode
|
||||
Auth generates 2FA tokens offline, so your network connectivity will not get in
|
||||
the way of your workflow.
|
||||
Auth generates 2FA tokens offline, so your network connectivity will not get in the way of your workflow.
|
||||
|
||||
- Import and Export Tokens
|
||||
You can add tokens to Auth by one of the following methods:
|
||||
@@ -30,8 +25,7 @@ otpauth://totp/provider.com:you@email.com?secret=YOUR_SECRET
|
||||
|
||||
The codes maybe separated by new lines or commas.
|
||||
|
||||
You can also export the codes you have added to Auth, to an **unencrypted** text
|
||||
file, that adheres to the above format.
|
||||
You can also export the codes you have added to Auth, to an **unencrypted** text file, that adheres to the above format.
|
||||
|
||||
|
||||
SUPPORT
|
||||
|
||||
BIN
auth/assets/2.0x/calender_banner_dark.png
Normal file
|
After Width: | Height: | Size: 55 KiB |
BIN
auth/assets/2.0x/calender_banner_light.png
Normal file
|
After Width: | Height: | Size: 50 KiB |
BIN
auth/assets/2.0x/discount.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
auth/assets/2.0x/ente_5gb.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
auth/assets/2.0x/rate_us.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
auth/assets/2.0x/star_us.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
auth/assets/3.0x/calender_banner_dark.png
Normal file
|
After Width: | Height: | Size: 104 KiB |
BIN
auth/assets/3.0x/calender_banner_light.png
Normal file
|
After Width: | Height: | Size: 93 KiB |
BIN
auth/assets/3.0x/discount.png
Normal file
|
After Width: | Height: | Size: 32 KiB |
BIN
auth/assets/3.0x/ente_5gb.png
Normal file
|
After Width: | Height: | Size: 33 KiB |
BIN
auth/assets/3.0x/rate_us.png
Normal file
|
After Width: | Height: | Size: 34 KiB |
BIN
auth/assets/3.0x/star_us.png
Normal file
|
After Width: | Height: | Size: 28 KiB |
BIN
auth/assets/calender_banner_dark.png
Normal file
|
After Width: | Height: | Size: 19 KiB |
BIN
auth/assets/calender_banner_light.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
@@ -55,6 +55,14 @@
|
||||
"title": "AzurWare",
|
||||
"slug": "azuware"
|
||||
},
|
||||
{
|
||||
"title": "Badlion",
|
||||
"slug": "badlion",
|
||||
"altNames": [
|
||||
"Badlion Client",
|
||||
"BadlionClient"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "BaiduCloud",
|
||||
"slug": "baidu_cloud",
|
||||
@@ -249,9 +257,16 @@
|
||||
"Crypto com"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "CSAM"
|
||||
},
|
||||
{
|
||||
"title": "CSFloat"
|
||||
},
|
||||
{
|
||||
"title": "CSGORoll",
|
||||
"slug": "csgoroll"
|
||||
},
|
||||
{
|
||||
"title": "DCS",
|
||||
"altNames": [
|
||||
@@ -280,6 +295,9 @@
|
||||
{
|
||||
"title": "DMarket"
|
||||
},
|
||||
{
|
||||
"title": "DocuSeal"
|
||||
},
|
||||
{
|
||||
"title": "Doppler"
|
||||
},
|
||||
@@ -330,8 +348,7 @@
|
||||
"title": "Estateguru"
|
||||
},
|
||||
{
|
||||
"title": "Fastmail",
|
||||
"hex": "0067B9"
|
||||
"title": "Fastmail"
|
||||
},
|
||||
{
|
||||
"title": "Fidelity",
|
||||
@@ -343,6 +360,10 @@
|
||||
{
|
||||
"title": "Filen"
|
||||
},
|
||||
{
|
||||
"title": "Finanzfluss",
|
||||
"slug": "finanzfluss"
|
||||
},
|
||||
{
|
||||
"title": "Firefox",
|
||||
"slug": "mozilla"
|
||||
@@ -362,6 +383,14 @@
|
||||
{
|
||||
"title": "GMX"
|
||||
},
|
||||
{
|
||||
"title": "GommeHD.net",
|
||||
"slug": "gommehd",
|
||||
"altNames": [
|
||||
"GommeHD",
|
||||
"GommeHDnet"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Google"
|
||||
},
|
||||
@@ -463,6 +492,12 @@
|
||||
{
|
||||
"title": "Kagi"
|
||||
},
|
||||
{
|
||||
"title": "Keygen",
|
||||
"altNames": [
|
||||
"keygen.sh"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Kick"
|
||||
},
|
||||
@@ -507,6 +542,10 @@
|
||||
"title": "La Poste",
|
||||
"slug": "laposte"
|
||||
},
|
||||
{
|
||||
"title": "LabyMod",
|
||||
"slug": "labymod"
|
||||
},
|
||||
{
|
||||
"title": "Lark",
|
||||
"slug": "lark",
|
||||
@@ -622,6 +661,10 @@
|
||||
"title": "Name.com",
|
||||
"slug": "name_com"
|
||||
},
|
||||
{
|
||||
"title": "Nextcloud",
|
||||
"slug": "nextcloud"
|
||||
},
|
||||
{
|
||||
"title": "NeteaseMail",
|
||||
"slug": "netease_mail",
|
||||
@@ -647,6 +690,22 @@
|
||||
"title": "ngrok",
|
||||
"hex": "858585"
|
||||
},
|
||||
{
|
||||
"title": "NekoHosting",
|
||||
"slug": "nekohosting",
|
||||
"altNames": [
|
||||
"NekoHosting Billing",
|
||||
"NekoHosting Dashboard"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "NekoHosting Gaming Panel",
|
||||
"slug": "nekohosting_gp",
|
||||
"altNames": [
|
||||
"NekoHosting Game Panel",
|
||||
"NekoHosting GamePanel"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Nelnet"
|
||||
},
|
||||
@@ -697,6 +756,10 @@
|
||||
"欧易"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Parqet",
|
||||
"slug": "parqet"
|
||||
},
|
||||
{
|
||||
"title": "Parsec"
|
||||
},
|
||||
@@ -798,6 +861,9 @@
|
||||
"Registro.br"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "reMarkable"
|
||||
},
|
||||
{
|
||||
"title": "Restorecord"
|
||||
},
|
||||
@@ -880,6 +946,19 @@
|
||||
"title": "Standard Notes",
|
||||
"slug": "standardnotes"
|
||||
},
|
||||
{
|
||||
"title": "Starbreeze",
|
||||
"altNames": [
|
||||
"Starbreeze Nebula",
|
||||
"Starbreeze Account",
|
||||
"PAYDAY",
|
||||
"PAYDAY 3"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "STRATO",
|
||||
"hex": "FF8800"
|
||||
},
|
||||
{
|
||||
"title": "Surfshark"
|
||||
},
|
||||
@@ -939,15 +1018,18 @@
|
||||
"title": "Termius",
|
||||
"hex": "858585"
|
||||
},
|
||||
{
|
||||
"title": "Titan"
|
||||
},
|
||||
{
|
||||
"title": "tianyiyun",
|
||||
"altNames": [
|
||||
"天翼云"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "TikTok"
|
||||
},
|
||||
{
|
||||
"title": "Titan"
|
||||
},
|
||||
{
|
||||
"title": "TorGuard"
|
||||
},
|
||||
@@ -1043,8 +1125,7 @@
|
||||
"title": "WHMCS"
|
||||
},
|
||||
{
|
||||
"title": "Windscribe",
|
||||
"hex": "858585"
|
||||
"title": "Windscribe"
|
||||
},
|
||||
{
|
||||
"title": "Wise"
|
||||
@@ -1058,11 +1139,24 @@
|
||||
"Work OS"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "World Cube Association",
|
||||
"slug": "wca",
|
||||
"altNames": [
|
||||
"WCA",
|
||||
"worldcubeassociation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "WYZE"
|
||||
},
|
||||
{
|
||||
"title": "yahoo"
|
||||
"title": "Xbox",
|
||||
"hex": "107C10"
|
||||
},
|
||||
{
|
||||
"title": "Yahoo",
|
||||
"hex": "5F01D2"
|
||||
},
|
||||
{
|
||||
"title": "Yandex",
|
||||
@@ -1077,6 +1171,9 @@
|
||||
"altNames": [
|
||||
"You Need A Budget"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Zoom"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
22
auth/assets/custom-icons/icons/badlion.svg
Normal file
@@ -0,0 +1,22 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="312.4" height="356.75" data-name="Layer 1" version="1.1" viewBox="0 0 312.4 356.75">
|
||||
<path d="m312.4 254.38v-151.8c0-9.6-5.1-18.4-13.3-23.2l-129.3-75.7c-8.4-4.9-18.8-4.9-27.2 0l-129.3 75.6c-8.3 4.8-13.3 13.7-13.3 23.2v151.8c0 9.6 5.1 18.4 13.3 23.2l129.3 75.6c8.4 4.9 18.8 4.9 27.2 0l129.3-75.6c8.3-4.8 13.3-13.7 13.3-23.2z" fill="#2caddc" />
|
||||
<g transform="translate(-43.8,-21.525)">
|
||||
<path d="m208.8 327.5c-0.4-0.8-1.7-4.2-2.8-7.4-1.8-5.3-2-5.6-2.3-3.1-0.1 1.5-0.6 2.7-1 2.7s-0.8 1.6-0.8 3.5c0 4-1 3.5-2.5-1.3l-1-3.3-2.6 5.6-0.5-5c-0.6-6.7-2.2-6.6-4.7 0.3-2.3 6.3-3.4 7.7-4.1 5.2-0.4-1.3-1.3-1.8-3-1.8s-2.6-0.4-3.4-3.3c-1.2-3.9-2-4.2-3.1-1l-0.8 2.3v-2.9c-0.2-2.6-0.3-2.7-1.2-1.3-1 1.5-2.1 2.9-3.2 4.2l-2.2 2.6-0.9-2.4c-0.5-1.3-0.8-2.8-0.9-4.2 0-1.7-0.3-3.4-0.5-5l-0.5-3.2-4.4 4.3-4.4 4.4-0.6-3.9c-0.6-4.3-1.5-4.7-5.5-2.6-1.4 0.7-2.7 1.2-2.8 1s-0.6-1.6-1-3.2c-0.7-2.8-0.9-3-5.8-3.7s-5.1-0.9-5.5-3.5c-0.8-5-3.1-8.7-5.3-8.7s-1.8-0.4-1.5-0.8c0.7-1.1-0.9-1.1-3.1 0-1.7 0.9-1.7 0.8-1.2-3 0.4-3 0.3-4-0.7-4.4-0.7-0.3-3.4-3.2-6-6.5l-5.3-6.6c-0.3-0.3-2.5 0-4.9 0.7s-4.5 1.2-4.7 1 0.6-3.1 1.7-6.5c2-6.4 2-7.6 0-7.6s-1.2-1.2-1.2-5 0-5-2.9-5.9l-2.9-0.9 1.2-3c1.7-4.1 1-5.3-3-5.3s-3.4-0.3-3.4-0.7 1.3-2.4 2.9-4.6 2.9-4 2.9-4.2-1.2-0.7-2.7-1-2.9-0.8-4.3-1.4c-1.4-0.8-1.3-1.1 1.6-4.1l3.2-3.3-2.7 0.5c-2.7 0.5-3.9-0.7-1.4-1.6 1.9-0.7 1.5-1.8-1.3-2.8-2-0.8-2.5-1.4-2.5-3.5s-0.6-2.9-1.3-3.3c-1.1-0.6-1.1-0.9 0.6-2 1.2-0.8 2.5-1.4 3.8-1.9 1.2-0.3 2-1.4 1.9-2.6 0-1.7-0.5-2-3.1-2.3l-3.1-0.3 2.3-1.2c2.7-1.4 2.9-2.3 0.6-3-2.2-0.7-2.2-2.1 0-2.1s2.1-3.8-1.3-5.9c-2.5-1.6-2.8-2-1.7-2.6 0.7-0.4 1.3-1.7 1.3-2.8 0-1.3 0.4-2.5 1-3.6 0.8-1.3 0.6-2.1-0.8-4.6-2.5-4.2-2.6-11.8-0.2-12.6 2.6-0.8 2.5-3.9-0.3-6.9l-2.5-2.7 2.6-0.9c2.6-0.9 4.1-3.3 3.1-5-0.3-0.5-0.1-1.9 0.4-3.1 0.6-1.5 1-3.1 1.2-4.8 0.1-1.3 0.4-2.5 0.8-3.8 2.5-6.8 3.2-10.3 2.4-12.4s-0.6-2.5 2.9-4.7c2.2-1.4 3.7-2.9 3.7-3.9s1-2.8 2.3-4.3 3.4-4.2 4.6-5.9c1.9-2.5 2.9-3.1 5.1-3.1s5.5-2 5.5-3.9 1.8-1 4-1.3 5.1-1.1 6.4-1.9 4-1.6 6-1.7 4.2-0.6 4.9-1.2 1.7-0.9 2.3-0.8c3.8 0.5 6.5-0.2 7-1.8s0.7-1.6 2-0.4c2.2 2 6.2 1.6 8.5-0.8l2-2.1 1.1 2.1c1.4 2.6 4.4 2.8 7.7 0.4 2-1.5 2.8-1.6 5.6-0.9 1.8 0.5 4.3 1.1 5.6 1.3 1.3 0.3 2.3 1.1 2.3 1.8 0 1.1 3.1 2.9 4.9 2.9 0.3 0 1.3-1.1 2.2-2.5l1.7-2.5 5.2 6.2 8.6-5.4 1.9 1.7c1.8 1.7 2.1 1.7 11.9 0.6 5.5-0.7 11.9-1.2 14.2-1.2 2.9-0.1 5.9-0.5 8.7-1.3 4.7-1.3 5.9-1.1 5.9 0.8s2.4 2.1 6.3 0l3.8-2.1-0.2 2.8c-0.2 2.7-0.1 2.8 3.1 3.1 1.8 0.1 4.4 1 5.7 2 1.5 1.1 4.4 1.9 7.7 2.3 5.3 0.5 8.7 2.4 8.7 4.8s1.6 2.3 3.6 3.7 4.1 3.6 4.7 4.8 3 4.2 5.3 6.5c3.9 4 4.1 4.3 2.4 4.9-2.9 0.9-2 2.9 2.2 4.6 3.7 1.5 4 2.3 1.8 4.7-1.8 1.9-1.8 2.1-0.4 3.1 1.2 0.9 1.3 1.5 0.6 2.7-1.3 2.4-0.2 6.2 2.2 8.3 2 1.7 2.1 1.9 0.7 3.8-1.8 2.6-1.8 3.7 0.5 6.7l1.9 2.5-1.8 1.4c-2.6 2-1.8 7.5 1.5 10.7 3 2.9 3 3.7 0 3.7s-2.5 0.4-2.8 2.5c-0.2 1.4 0 3 0.3 3.6s0.7 2.1 0.7 3.3 0.7 2.6 1.5 3.1c1.3 0.7 1.1 1-1.3 2.3-1.5 0.8-2.7 2-2.7 2.5 0 0.8-0.2 1.5-0.5 2.2-0.3 0.9 0.2 1.3 1.9 1.6l2.4 0.3-2.3 1.1c-1.3 0.6-2.3 1.4-2.3 1.7s1 1.1 2.3 1.7l2.3 1.2-2.7 0.3c-3.7 0.4-3.9 3.7-0.2 5.2 3.4 1.4 4.8 3.2 3 3.9-0.8 0.3-1.3 1.5-1.3 3s-0.5 2.7-2.3 3.4c-1.3 0.5-2.4 1.1-2.6 1.2s0.6 1 1.7 2l2 1.7-3.3-0.4-3.3-0.5 3.2 2.9c3.6 3.3 3.4 4-2 5.6l-3.6 1 3 3.9c1.6 2.2 3 4.3 3 4.8s-1.5 0.9-3.3 0.9c-4.1 0-4.6 0.8-3 4.7 0.7 1.7 1.3 3.2 1.3 3.3s-1.3 0.7-2.9 1.2c-2.9 1-2.9 1-2.9 5.9s-0.3 5-1.1 5-1.8 0.5-2.6 1.1c-1.4 1-1.4 1.4 0.4 7.5 1 3.5 1.6 6.7 1.4 7s-2.9 0-5.8-0.8l-5.3-1.3-9.6 9.6 1.1 5.2c0.6 2.9 0.9 5.2 0.6 5.2s-1.5-0.6-2.6-1.2c-5.2-2.9-8.2-1-10.1 6.3l-1 4-4.9 0.5c-4.8 0.5-4.9 0.6-5.8 3.9-0.5 1.8-1.1 3.3-1.2 3.3s-1.7-0.6-3.3-1.4-3.2-1.2-3.5-0.9-0.7 3.2-1 6.4-0.7 5.9-1 5.9-2.4-1.9-4.6-4.1c-2.2-2.3-4.4-3.9-4.8-3.7s-0.7 1.7-0.7 3.2-0.5 3.4-1.1 4.3c-1 1.4-1.3 1.3-3.5-1.7-3.9-5.3-4-5.3-3.4 0.5 0.5 5 0.4 5.3-0.7 3.8-0.7-0.9-1.3-1.9-1.3-2.3 0-2-1.5-0.3-2.2 2.5-0.6 2.6-1.2 3.2-3.1 3.4-1.3 0.1-2.8 1-3.5 2-1.1 1.6-1.2 1.6-2 0.2z" fill="#030303" />
|
||||
<path d="m197.3 280c-1.3-4.3-2.3-4.9-4.4-2.3-0.9 1.2-2.4 2.2-3.3 2.2-1.6 0-2.3-1.2-5.1-8.3l-0.8-2.1-1.3 3.1c-1.6 4-3.3 3.3-4.1-1.6l-0.6-3.8-3.6 4.6-17.8-10.3c-17.1-9.9-17.8-10.4-19.4-14.1-1.7-3.9-6.9-10.1-8.6-10.1s-1.8-0.8-2.7-1.9l-1.8-1.9 8.2-10.8-7.8-1.6 8.2-4.4-4.4-2.3c-4.7-2.5-5.6-4.8-2.9-7.5 1.3-1.3 1.3-1.5-0.2-3-1.4-1.6-1.4-1.7 0-3.3 1.3-1.5 1.3-1.8 0.2-3-2.4-2.4-1.6-4.5 2.9-7.3l4.3-2.7-8-4.2 3.9-0.8 3.9-0.7-8.4-10.8 3.8-4 22.2 22.2v12.8l1.8-0.3c1.1-0.2 8.9-1.4 17.4-2.8 21-3.4 19.2-2.7 19.2-6.7v-3.3h25.9v3.3c0 3.9-1.9 3.3 19.2 6.8 8.5 1.4 16 2.5 17 2.7 0.7 0.2 2 0.3 2 0.3s0.2-2.3 0.2-6.2v-6.6l10-10c7.7-7.7 10.3-9.8 11-9 1.1 1.1 1.2 0.9-4.5 7.9l-3.2 3.9 8.6 1.2-8.8 4.6 4.7 2.7c2.6 1.4 4.7 3.2 4.7 3.8s-0.7 2.1-1.8 3.3l-1.8 2.2 2.2 1c2 0.9 2.9 2.3 1.5 2.4-0.3 0-1.3 0.6-2.2 1.2-1.5 1.1-1.4 1.3 0.3 2.9 2.6 2.6 1.8 4.3-3.3 7l-4.5 2.4 8.8 4.6-3.9 0.6c-2.2 0.3-3.9 0.8-3.9 1s1.7 2.6 3.7 5.3c2.1 2.7 3.8 5.2 3.7 5.6 0 0.4-2.7 2.9-5.9 5.6-4.1 3.5-6.5 6.3-8.2 9.7l-2.4 4.8-35.4 20.4-4-4.6v2.9c0 5.6-1.3 5.6-3.3 0-1-2.8-2-5.1-2.1-5.1s-1.4 3.1-2.9 6.9-3 7.2-3.3 7.6-1.7-0.3-2.9-1.5c-1.3-1.3-2.3-2.1-2.4-2s-0.8 1.3-1.4 2.6l-1.3 2.3-0.8-3.6zm-7.9-22.4 9.7-2.7 11.2 2.7c5.8 1.5 10.7 2 10.9 1.8 0.9-0.9-1.2-2-6.5-3.3-3-0.8-7.4-1.9-9.9-2.7l-4.4-1.7 0.3-8.8 0.2-9.3 12.4-7.8c6.8-4.3 12.6-7.9 12.9-8.2s-11.6-0.5-26.4-0.5-26.8 0.3-26.8 0.7 5.6 4 12.4 8.2l12.3 7.6v18.2l-9.5 3.4c-5.3 1.4-9.7 3-9.9 3.6-0.5 1.3-0.7 1.8 11.2-1.3zm-1.4-74.9v-5.3l-18.6-3.1c-10.3-1.7-19.5-2.9-19.8-3.1v9.5l-8.7-8.7c-4.8-4.8-8.6-9.2-8.5-9.8s0.8-1.8 1.4-2.6 2.7-3.7 4.3-6.3c2.5-3.9 3.6-4.8 6.1-5.3 1.7-0.3 4.5-1.8 6.4-3.4 2.6-2.1 3.9-2.7 5.4-2.4 1.9 0.5 3.2-0.5 8.3-6.9l1.5-1.9 10.8 8.6 1.8-8.2 2 4c1.1 2.2 2.2 4 2.5 4s1.4-1.9 2.5-4.2c2.2-4.6 4-5.3 6.9-2.7 1.6 1.4 1.7 1.3 3.6-1.1 1.1-1.3 2-2.1 2-1.6s0.5 1.6 1.1 2.3c1 1.4 1.3 1.4 4.1-0.3l3-1.8 5.4 10 4.4-8.6 0.6 4c0.3 2.2 0.8 4 0.9 4s2.7-1.8 5.7-4.2l5.3-4.2 3.8 4.5c3.3 3.8 4.3 4.5 6.7 4.4 2.1 0 3.5 0.6 5.4 2.5 1.6 1.6 3.8 2.8 5.8 3.1 2.8 0.5 3.6 1.2 6.7 6.1 1.9 3.1 5 6.7 6.8 7.9s3.3 2.6 3.3 2.9-3.4 3.9-7.5 8.1l-7.5 7.5v-4.7c0-2.7-0.3-4.8-0.7-4.8s-8.9 1.3-19.1 3l-18.8 3.3v4.8l-12.4 0.3c-6.7 0.3-11.8 0-13.3 0z" fill="#feb730" />
|
||||
<circle cx="188.4" cy="236.7" r="1.7" fill="#71470d" />
|
||||
<circle cx="181.7" cy="236.7" r="1.7" fill="#71470d" />
|
||||
<circle cx="175" cy="236.7" r="1.7" fill="#71470d" />
|
||||
<circle cx="181.7" cy="243.4" r="1.7" fill="#71470d" />
|
||||
<circle cx="188.4" cy="243.4" r="1.7" fill="#71470d" />
|
||||
<circle cx="175" cy="243.4" r="1.7" fill="#71470d" />
|
||||
<circle cx="181.7" cy="250.1" r="1.7" fill="#71470d" />
|
||||
<circle cx="208.5" cy="236.7" r="1.7" fill="#71470d" />
|
||||
<circle cx="215.1" cy="236.7" r="1.7" fill="#71470d" />
|
||||
<circle cx="221.8" cy="236.7" r="1.7" fill="#71470d" />
|
||||
<circle cx="208.5" cy="243.4" r="1.7" fill="#71470d" />
|
||||
<circle cx="215.1" cy="243.4" r="1.7" fill="#71470d" />
|
||||
<circle cx="221.8" cy="243.4" r="1.7" fill="#71470d" />
|
||||
<circle cx="215.1" cy="250.1" r="1.7" fill="#71470d" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 6.8 KiB |
@@ -1 +1 @@
|
||||
<svg viewBox="0 0 508 508" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2"><g transform="matrix(.26718 0 0 .26718 0 0)"><circle cx="950" cy="950" r="950" fill="#7d2ae7"/><circle cx="950" cy="950" r="950" fill="url(#prefix___Radial1)"/><circle cx="950" cy="950" r="950" fill="url(#prefix___Radial2)"/><circle cx="950" cy="950" r="950" fill="url(#prefix___Radial3)"/><circle cx="950" cy="950" r="950" fill="url(#prefix___Radial4)"/></g><path d="M446.744 276.845c-.665 0-1.271.43-1.584 1.33-4.011 11.446-9.43 18.254-13.891 18.254-2.563 0-3.6-2.856-3.6-7.336 0-11.21 6.71-34.982 10.095-45.82.392-1.312.646-2.485.646-3.483 0-3.15-1.722-4.696-5.987-4.696-4.598 0-9.547 1.8-14.36 10.233-1.663-7.435-6.691-10.683-13.715-10.683-8.12 0-15.965 5.224-22.421 13.696-6.456 8.471-14.048 11.25-19.76 9.88 4.108-10.057 5.634-17.57 5.634-23.145 0-8.746-4.324-14.028-11.308-14.028-10.624 0-16.747 10.134-16.747 20.797 0 8.237 3.736 16.708 11.954 20.817-6.887 15.573-16.943 29.66-20.758 29.66-4.93 0-6.379-24.123-6.105-41.38.176-9.9.998-10.408.998-13.401 0-1.722-1.115-2.896-5.595-2.896-10.448 0-13.676 8.844-14.165 18.998a50.052 50.052 0 01-1.8 11.406c-4.363 15.573-13.363 27.39-19.232 27.39-2.72 0-3.463-2.72-3.463-6.28 0-11.21 6.28-25.219 6.28-37.173 0-8.784-3.854-14.34-11.112-14.34-8.55 0-19.858 10.173-30.56 29.229 3.521-14.595 4.97-28.721-5.459-28.721a14.115 14.115 0 00-6.476 1.683 3.689 3.689 0 00-2.113 3.56c.998 15.535-12.521 55.329-25.336 55.329-2.328 0-3.463-2.524-3.463-6.593 0-11.23 6.691-34.943 10.056-45.801.43-1.409.666-2.622.666-3.678 0-2.974-1.84-4.5-6.007-4.5-4.578 0-9.547 1.741-14.34 10.174-1.683-7.435-6.711-10.683-13.735-10.683-11.523 0-24.397 12.19-30.051 28.076-7.572 21.208-22.832 41.692-43.375 41.692-18.645 0-28.486-15.515-28.486-40.03 0-35.392 25.982-64.308 45.253-64.308 9.215 0 13.617 5.869 13.617 14.869 0 10.897-6.085 15.964-6.085 20.112 0 1.272 1.057 2.524 3.15 2.524 8.374 0 18.234-9.841 18.234-23.262 0-13.422-10.897-23.243-30.168-23.243-31.851 0-63.898 32.047-63.898 73.113 0 32.673 16.121 52.374 44 52.374 19.017 0 35.628-14.79 44.588-32.047 1.018 14.302 7.513 21.776 17.413 21.776 8.804 0 15.925-5.243 21.364-14.458 2.094 9.645 7.65 14.36 14.87 14.36 8.275 0 15.201-5.243 21.794-14.986-.097 7.65 1.644 14.85 8.276 14.85 3.13 0 6.867-.725 7.533-3.464 6.984-28.877 24.24-52.453 29.523-52.453 1.565 0 1.995 1.507 1.995 3.287 0 7.846-5.537 23.928-5.537 34.2 0 11.092 4.716 18.43 14.459 18.43 10.8 0 21.775-13.227 29.092-32.556 2.29 18.058 7.24 32.633 14.987 32.633 9.508 0 26.392-20.014 36.625-41.203 4.01.509 10.036.372 15.827-3.717-2.465 6.241-3.912 13.07-3.912 19.897 0 19.663 9.39 25.18 17.47 25.18 8.785 0 15.907-5.243 21.365-14.458 1.8 8.315 6.398 14.34 14.85 14.34 13.225 0 24.71-13.519 24.71-24.612 0-2.934-1.252-4.715-2.72-4.715zm-274.51 18.547c-5.342 0-7.435-5.38-7.435-13.401 0-13.93 9.528-37.193 19.604-37.193 4.402 0 6.065 5.185 6.065 11.524 0 14.145-9.059 39.07-18.235 39.07zm182.948-41.574c-3.189-3.796-4.343-8.961-4.343-13.559 0-5.673 2.074-10.467 4.558-10.467 2.485 0 3.248 2.446 3.248 5.85 0 5.693-2.035 14.008-3.463 18.176zm41.418 41.574c-5.34 0-7.434-6.182-7.434-13.401 0-13.441 9.528-37.193 19.682-37.193 4.402 0 5.967 5.146 5.967 11.524 0 14.145-8.902 39.07-18.215 39.07z" fill="#fff" fill-rule="nonzero"/><defs><radialGradient id="prefix___Radial1" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="scale(1469.491) rotate(-49.416 1.37 .302)"><stop offset="0" stop-color="#6420ff"/><stop offset="1" stop-color="#6420ff" stop-opacity="0"/></radialGradient><radialGradient id="prefix___Radial2" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="rotate(54.703 42.717 594.194) scale(1657.122)"><stop offset="0" stop-color="#00c4cc"/><stop offset="1" stop-color="#00c4cc" stop-opacity="0"/></radialGradient><radialGradient id="prefix___Radial3" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1023 -1030 473.711 470.491 367 1684)"><stop offset="0" stop-color="#6420ff"/><stop offset="1" stop-color="#6420ff" stop-opacity="0"/></radialGradient><radialGradient id="prefix___Radial4" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(595.999 1372 -2298.41 998.431 777 256)"><stop offset="0" stop-color="#00c4cc" stop-opacity=".73"/><stop offset="0" stop-color="#00c4cc"/><stop offset="1" stop-color="#00c4cc" stop-opacity="0"/></radialGradient></defs></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><defs><radialGradient id="a" cx="0" cy="0" r="1" gradientTransform="rotate(-49.415 25.434 5.598) scale(18.562)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#6420FF"/><stop offset="1" stop-color="#6420FF" stop-opacity="0"/></radialGradient><radialGradient id="b" cx="0" cy="0" r="1" gradientTransform="rotate(54.702 .54 7.506) scale(20.932)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#00C4CC"/><stop offset="1" stop-color="#00C4CC" stop-opacity="0"/></radialGradient><radialGradient id="c" cx="0" cy="0" r="1" gradientTransform="matrix(12.922 -13.011 5.9837 5.943 4.636 21.272)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#6420FF"/><stop offset="1" stop-color="#6420FF" stop-opacity="0"/></radialGradient><radialGradient id="d" cx="0" cy="0" r="1" gradientTransform="matrix(7.5284 17.331 -29.032 12.612 9.815 3.234)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#00C4CC" stop-opacity=".726"/><stop offset="0" stop-color="#00C4CC"/><stop offset="1" stop-color="#00C4CC" stop-opacity="0"/></radialGradient></defs><g stroke-width=".013"><path fill="#7d2ae7" d="M24 12a12 12 0 0 1-12 12A12 12 0 0 1 0 12 12 12 0 0 1 12 0a12 12 0 0 1 12 12z"/><path fill="url(#a)" d="M24 12a12 12 0 0 1-12 12A12 12 0 0 1 0 12 12 12 0 0 1 12 0a12 12 0 0 1 12 12z"/><path fill="url(#b)" d="M24 12a12 12 0 0 1-12 12A12 12 0 0 1 0 12 12 12 0 0 1 12 0a12 12 0 0 1 12 12z"/><path fill="url(#c)" d="M24 12a12 12 0 0 1-12 12A12 12 0 0 1 0 12 12 12 0 0 1 12 0a12 12 0 0 1 12 12z"/><path fill="url(#d)" d="M24 12a12 12 0 0 1-12 12A12 12 0 0 1 0 12 12 12 0 0 1 12 0a12 12 0 0 1 12 12z"/><path fill="#fff" d="M17.598 14.462c-.099 0-.186.084-.277.266-1.024 2.077-2.793 3.546-4.84 3.546-2.367 0-3.833-2.136-3.833-5.088 0-5 2.786-7.89 5.233-7.89 1.144 0 1.842.718 1.842 1.861 0 1.357-.771 2.076-.771 2.554 0 .215.133.345.398.345 1.065 0 2.315-1.223 2.315-2.951 0-1.676-1.459-2.908-3.906-2.908-4.043 0-7.637 3.75-7.637 8.937 0 4.015 2.292 6.668 5.83 6.668 3.755 0 5.927-3.736 5.927-4.948 0-.269-.138-.392-.28-.392z"/></g></svg>
|
||||
|
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 2.1 KiB |
4
auth/assets/custom-icons/icons/csam.svg
Normal file
@@ -0,0 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024">
|
||||
<circle cx="512" cy="512" r="512" fill="#9a2857"/>
|
||||
<path d="M727 278.6q-99 37.09-197.74 74.76a27.83 27.83 0 0 1-20.85.41q-102.54-36.2-205.09-72.35c-4.45-1.57-9-2.82-14.22-4.56v469.89c3.42-1.16 5.67-1.83 7.84-2.7 69-28.07 138.13-55.9 206.95-84.41a34.06 34.06 0 0 1 29.52.36c66.62 29.54 133.53 58.41 201.5 88V276c-3.35 1.09-5.67 1.74-7.91 2.6Zm-208 339-.57-225.6c18.21-6.66 36.44-13.21 54.6-20 42.69-15.8 85.34-31.83 129.09-48.23v373.44C640.57 671 579.79 644.3 519 617.63Zm162.1-107a14 14 0 0 1-12.86 13.31 14.34 14.34 0 0 1-13.66-12.66c-.32-5.93 6.92-13.46 13-13.53a14.58 14.58 0 0 1 13.51 12.88Z" fill="#fff"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 683 B |
1
auth/assets/custom-icons/icons/csgoroll.svg
Normal file
|
After Width: | Height: | Size: 9.4 KiB |
1
auth/assets/custom-icons/icons/docuseal.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><g stroke-width=".047"><path fill="#aa968c" d="M23.625 11.625c0 6.006-5.205 11.25-11.625 11.25S.375 17.631.375 11.625 5.58 1.125 12 1.125s11.625 4.494 11.625 10.5z"/><path fill="#aa968c" d="M12 1.125C5.58 1.125.375 5.619.375 11.625c0 1.155.194 2.28.55 3.347a6.546 6.546 0 0 0 5.263 2.653A6.558 6.558 0 0 0 12 14.103a6.558 6.558 0 0 0 5.813 3.522 6.546 6.546 0 0 0 5.262-2.653c.356-1.067.55-2.192.55-3.347 0-6.006-5.205-10.5-11.625-10.5z"/><path fill="#c8af9b" d="M18.375 16.5A6.375 6.375 0 0 1 12 22.875 6.375 6.375 0 0 1 5.625 16.5 6.375 6.375 0 0 1 12 10.125a6.375 6.375 0 0 1 6.375 6.375z"/></g><g fill="#464655" stroke-width=".047"><path d="M7.5 9.563a1.313 1.313 0 0 1-1.313 1.312 1.313 1.313 0 0 1-1.312-1.313A1.313 1.313 0 0 1 6.188 8.25 1.313 1.313 0 0 1 7.5 9.563zM19.125 9.563a1.313 1.313 0 0 1-1.313 1.312A1.313 1.313 0 0 1 16.5 9.562a1.313 1.313 0 0 1 1.313-1.312 1.313 1.313 0 0 1 1.312 1.313zM12.654 13.337c-.36.503-.948.503-1.308 0l-.567-.794c-.36-.504-.148-.916.471-.916h1.5c.619 0 .83.412.471.916z"/></g><path fill="#aa968c" d="M16.451 18.75c-1.61 0-2.435-2.25-4.457-2.25s-2.848 2.25-4.457 2.25c-.722 0-1.363-.274-1.883-1.181.514 3.01 3.153 5.306 6.34 5.306s5.826-2.295 6.34-5.306c-.52.907-1.16 1.181-1.883 1.181z"/><g fill="#8c7873" stroke-width=".047"><path d="M1.5 19.875a.375.375 0 0 1-.14-.723l7.501-3a.375.375 0 1 1 .278.697l-7.5 3a.375.375 0 0 1-.139.026zM.75 17.625a.375.375 0 0 1-.096-.738l7.125-1.875a.375.375 0 1 1 .192.726L.846 17.613a.377.377 0 0 1-.096.012zM.375 15.75a.375.375 0 0 1-.065-.744l6.375-1.125a.375.375 0 0 1 .13.738L.44 15.744a.385.385 0 0 1-.065.006zM22.5 19.875a.375.375 0 0 0 .14-.723l-7.501-3a.375.375 0 0 0-.278.697l7.5 3a.375.375 0 0 0 .139.026zM23.25 17.625a.375.375 0 0 0 .095-.738l-7.125-1.875a.375.375 0 1 0-.19.726l7.124 1.875a.378.378 0 0 0 .096.012zM23.625 15.75a.375.375 0 0 0 .065-.744l-6.375-1.125a.375.375 0 0 0-.13.738l6.374 1.125a.386.386 0 0 0 .066.006z"/></g></svg>
|
||||
|
After Width: | Height: | Size: 1.9 KiB |
8
auth/assets/custom-icons/icons/finanzfluss.svg
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="474.2" height="474.2" version="1.1" viewBox="0 0 474.2 474.2" xml:space="preserve">
|
||||
<g transform="translate(-20.412 -2.725)">
|
||||
<circle transform="matrix(.7071 -.7071 .7071 .7071 -94.131 252.34)" cx="257.5" cy="239.8" r="237.1" fill="#4D6BDD" />
|
||||
<path d="m350.6 211.4c-8.9-9.6-12.2-30.5-12.2-30.5l-2.6-12s-3.1-11.3-5.4-14.6c-1-2.6-2.8-9.7 3.5-16.9 0 0 6.3-8.1-2.8-14.6 0 0-10-8.3-17.2 1.2 0 0-6.7 12.3-16.4 10.4-2.6-0.7-4.3-1-4.3-1s-21.7-4.2-35.7-4.3c-14 0-35.7 4.3-35.7 4.3s-1.6 0.3-4.3 1c-9.6 1.8-16.4-10.4-16.4-10.4-7.2-9.6-17.2-1.2-17.2-1.2-9.2 6.6-2.8 14.6-2.8 14.6 6.3 7.2 4.5 14.4 3.5 16.9-2.3 3.4-5.4 14.6-5.4 14.6l-2.6 12s-3.3 20.8-12.2 30.5c0 0-60.2 54.1-19.4 109.4 0 0 26.8 31.8 71 7.2 0 0 20.6-11.4 41.5-11.5 20.8 0 41.5 11.5 41.5 11.5 44.2 24.6 70.9-7.2 70.9-7.2 40.9-55.3-19.3-109.4-19.3-109.4zm-132.8 45.8c-4.2 5.6-14.6 5-23.2-1.4s-12.2-16.2-8-21.8 14.6-5 23.2 1.4 12.2 16.2 8 21.8zm7-60.5c-7.6 0-13.8-7.1-13.8-12.4h11.4c1.3 0 1.7-2.2 0.9-3.3l-7.2-9.6c2.4-1.9 5.4-3.4 8.7-3.4 7.6 0 13.8 6.7 13.8 14.3 0.1 7.7-6.1 14.4-13.8 14.4zm51.6-12.4h11.4c1.3 0 1.7-2.2 0.9-3.3l-7.2-9.6c2.4-1.9 5.4-3.4 8.7-3.4 7.6 0 13.8 6 13.8 13.6s-6.2 15.2-13.8 15.2-13.8-7.2-13.8-12.5zm44.1 70.1c-8.6 6.4-19 7-23.2 1.4-4.2-5.7-0.6-15.4 8-21.8s19-7 23.2-1.4 0.7 15.4-8 21.8z" fill="#FFF" />
|
||||
<path d="m257.6 331.6c-27.6 0-39.9 15.3-39.9 15.3s-12.4 13.4 39.9 13.4 39.9-13.4 39.9-13.4-12.3-15.3-39.9-15.3z" fill="#FFF" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.5 KiB |
243
auth/assets/custom-icons/icons/gommehd.svg
Normal file
@@ -0,0 +1,243 @@
|
||||
<svg width="86" height="79" version="1.1" viewBox="0 0 86 79" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><image width="86" height="79" preserveAspectRatio="none" xlink:href="data:image/png;base64,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
|
||||
AAvYWZcFHibQAAAAAElFTkSuQmCC
|
||||
"/></svg>
|
||||
|
After Width: | Height: | Size: 18 KiB |
19
auth/assets/custom-icons/icons/keygen.svg
Normal file
@@ -0,0 +1,19 @@
|
||||
<svg width="100%" height="100%" viewBox="0 0 113 113" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
|
||||
<g transform="matrix(1,0,0,1,-1298.97,-1016.72)">
|
||||
<g transform="matrix(0.5,0,0,0.5,736.463,641.721)">
|
||||
<g transform="matrix(0.834925,0,0,0.834925,161.667,288.323)">
|
||||
<circle cx="1198.72" cy="777.527" r="44.914" style="fill:#000811;"/>
|
||||
</g>
|
||||
</g>
|
||||
<g transform="matrix(0.5,0,0,0.5,736.463,641.721)">
|
||||
<g transform="matrix(0.834925,0,0,0.834925,311.66,138.323)">
|
||||
<circle cx="1198.72" cy="777.527" r="44.914" style="fill:#000811;"/>
|
||||
</g>
|
||||
</g>
|
||||
<g transform="matrix(0.5,0,0,0.5,736.463,641.721)">
|
||||
<g transform="matrix(1,0,0,1,281.792,137.715)">
|
||||
<path d="M955.708,762.285C935.011,762.285 918.208,745.482 918.208,724.785C918.208,704.088 935.011,687.285 955.708,687.285C976.405,687.285 993.208,704.088 993.208,724.785C993.208,745.482 1010.01,762.285 1030.71,762.285C1051.4,762.285 1068.21,779.088 1068.21,799.785C1068.21,820.482 1051.4,837.285 1030.71,837.285C1010.01,837.285 993.208,820.482 993.208,799.785C993.208,779.088 976.405,762.285 955.708,762.285Z" style="fill:#000811;"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.4 KiB |
163
auth/assets/custom-icons/icons/labymod.svg
Normal file
@@ -0,0 +1,163 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
width="533.33331"
|
||||
height="533.33331"
|
||||
viewBox="0 0 533.33331 533.33331"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs1">
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath6">
|
||||
<path
|
||||
d="M 0,400 H 400 V 0 H 0 Z"
|
||||
transform="translate(-199.8565,-316.05771)"
|
||||
id="path6" />
|
||||
</clipPath>
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath8">
|
||||
<path
|
||||
d="M 0,400 H 400 V 0 H 0 Z"
|
||||
transform="translate(-154.47981,-66.407704)"
|
||||
id="path8" />
|
||||
</clipPath>
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath10">
|
||||
<path
|
||||
d="M 0,400 H 400 V 0 H 0 Z"
|
||||
transform="translate(-173.84721,-187.2259)"
|
||||
id="path10" />
|
||||
</clipPath>
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath12">
|
||||
<path
|
||||
d="M 0,400 H 400 V 0 H 0 Z"
|
||||
transform="translate(-224.58621,-187.2259)"
|
||||
id="path12" />
|
||||
</clipPath>
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath14">
|
||||
<path
|
||||
d="M 0,400 H 400 V 0 H 0 Z"
|
||||
transform="translate(-116.893,-254.432)"
|
||||
id="path14" />
|
||||
</clipPath>
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath16">
|
||||
<path
|
||||
d="M 0,400 H 400 V 0 H 0 Z"
|
||||
transform="translate(-245.23801,-66.407704)"
|
||||
id="path16" />
|
||||
</clipPath>
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath18">
|
||||
<path
|
||||
d="M 0,400 H 400 V 0 H 0 Z"
|
||||
transform="translate(-282.99751,-254.432)"
|
||||
id="path18" />
|
||||
</clipPath>
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath20">
|
||||
<path
|
||||
d="M 0,400 H 400 V 0 H 0 Z"
|
||||
transform="translate(-179.5,-68.443902)"
|
||||
id="path20" />
|
||||
</clipPath>
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath22">
|
||||
<path
|
||||
d="M 0,400 H 400 V 0 H 0 Z"
|
||||
id="path22" />
|
||||
</clipPath>
|
||||
</defs>
|
||||
<g
|
||||
id="layer-MC1">
|
||||
<path
|
||||
id="path1"
|
||||
d="m 0,0 -45.38,24.103 -5.988,3.182 -2.203,6.628 -11.87,35.716 -20.153,16.347 -62.304,50.532 -10.044,8.146 5.074,11.876 35.049,82.011 -4.269,75.046 -2.054,36.132 29.25,-21.284 49.904,-36.312 48.547,13.344 4.5,1.236 4.498,-1.236 48.548,-13.344 49.903,36.312 29.251,21.284 -2.054,-36.132 -4.269,-75.046 35.048,-82.011 5.074,-11.876 -10.043,-8.146 L 101.711,85.976 81.557,69.629 69.687,33.913 67.484,27.285 61.497,24.103 16.117,0 8.059,-4.281 Z M -23.274,51.29 8.059,34.649 39.39,51.29 l 15.394,46.323 0.941,2.35 21.632,42.862 32.587,64.568 -9.139,21.384 -1.57,3.673 0.227,3.987 2.44,42.897 -27.26,-19.837 -6.61,-4.809 -7.964,2.189 -52.009,14.297 -52.012,-14.297 -7.962,-2.189 -6.609,4.809 -27.262,19.837 2.44,-42.897 0.227,-3.987 -1.57,-3.673 -9.138,-21.382 32.588,-64.57 21.631,-42.862 0.94,-2.35 z m -70.522,85.48 -3.125,63.385 -19.311,-45.188 z m 226.146,18.197 -19.311,45.184 -3.128,-63.381 z"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
transform="matrix(1.3333333,0,0,-1.3333333,255.73453,496.95893)" />
|
||||
<path
|
||||
id="path2"
|
||||
d="m 0,0 -45.38,24.104 -17.597,52.95 -21.632,42.862 1.767,-35.821 -62.304,50.532 36.618,85.685 -4.495,79.032 56.513,-41.123 56.51,15.534 56.51,-15.534 56.513,41.123 -4.496,-79.032 36.618,-85.685 L 82.841,84.095 84.608,119.916 62.976,77.054 45.379,24.104 Z"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
transform="matrix(1.3333333,0,0,-1.3333333,266.47933,476.71373)" />
|
||||
<path
|
||||
id="path3"
|
||||
d="m 0,0 -45.379,24.104 -3.421,1.818 -1.26,3.787 -17.324,52.131 -0.561,1.11 0.572,-11.603 -17.042,13.823 -62.303,50.532 -5.739,4.654 2.899,6.787 35.721,83.585 -4.365,76.755 -1.174,20.647 16.714,-12.163 52.736,-38.374 51.96,14.283 2.571,0.706 2.57,-0.706 51.961,-14.283 52.735,38.374 16.715,12.163 -1.174,-20.647 -4.365,-76.755 35.721,-83.585 2.898,-6.787 -5.739,-4.654 L 93.625,85.17 76.583,71.347 77.155,82.95 76.594,81.84 59.269,29.709 58.01,25.922 54.588,24.104 9.21,0 4.605,-2.446 Z m -32.748,39.639 37.353,-19.84 37.352,19.84 16.338,49.163 0.538,1.344 21.633,42.861 20.806,41.226 -2.274,-46.102 -0.688,-13.936 39.523,32.055 -33.717,78.899 -0.898,2.099 0.129,2.277 3.323,58.385 -39.799,-28.96 -3.777,-2.748 -4.55,1.251 -53.939,14.827 -53.939,-14.827 -4.55,-1.251 -3.777,2.748 -39.798,28.96 3.32,-58.385 0.131,-2.277 -0.898,-2.099 -33.718,-78.899 39.523,-32.056 -0.687,13.937 -2.274,46.101 20.807,-41.225 21.632,-42.861 0.537,-1.344 z"
|
||||
style="fill:#000d26;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
transform="matrix(1.3333333,0,0,-1.3333333,260.33933,488.498)" />
|
||||
<path
|
||||
id="path4"
|
||||
d="m 0,0 -45.38,24.104 -17.597,52.95 -21.632,42.862 1.767,-35.821 -62.304,50.532 36.618,85.685 -4.495,79.032 56.513,-41.123 56.51,15.534 56.51,-15.534 56.513,41.123 -4.496,-79.032 36.618,-85.685 L 82.841,84.095 84.608,119.916 62.976,77.054 45.379,24.104 Z"
|
||||
style="fill:#008fe8;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
transform="matrix(1.3333333,0,0,-1.3333333,266.47933,476.92973)" />
|
||||
<path
|
||||
id="path5"
|
||||
d="m 0,0 56.511,-15.533 56.513,41.122 -4.496,-79.032 36.62,-85.685 -62.306,-50.532 1.767,35.821 L 62.013,-196.22 45.378,-249.65 0,-273.754 l -0.665,0.353 c 0,0 -3.805,-0.865 -0.53,26.953 3.274,27.818 -1.05,78.74 -2.395,121.674 v -0.001 l -9.525,-8.658 8.842,43.362 -20.08,-8.665 19.549,35.619 -24.589,-4.137 17.15,23.546 -27.686,-9.391 29.551,40.46 -46.132,-2.894 55.845,15.351 z"
|
||||
style="fill:#3bb4ff;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
transform="matrix(1.3333333,0,0,-1.3333333,266.47533,111.92307)"
|
||||
clip-path="url(#clipPath6)" />
|
||||
<path
|
||||
id="path7"
|
||||
d="m 0,0 -17.596,52.949 -21.633,42.862 1.766,-35.821 -62.303,50.532 36.618,85.685 -4.464,78.475 41.419,-97.788 -27.817,11.282 -5.738,-35.7 -7.627,16.399 -3.771,-32.944 -4.781,12.116 -13.554,-35.107 26.294,-23.118 0.958,21.19 14.583,-29.362 0.109,44.478 33.394,-60.557 2.569,14.938 L 4.8,3.564 l 36.833,-19.011 -1.88,-5.67 z"
|
||||
style="fill:#00619e;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
transform="matrix(1.3333333,0,0,-1.3333333,205.97307,444.78973)"
|
||||
clip-path="url(#clipPath8)" />
|
||||
<path
|
||||
id="path9"
|
||||
d="M 0,0 -50.69,20.972 -39.263,-3.23 -3.426,-14.233 8.692,-27.173 Z"
|
||||
style="fill:#000d26;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
transform="matrix(1.3333333,0,0,-1.3333333,231.79627,283.6988)"
|
||||
clip-path="url(#clipPath10)" />
|
||||
<path
|
||||
id="path11"
|
||||
d="M 0,0 50.691,20.972 39.263,-3.23 3.427,-14.233 -8.692,-27.173 Z"
|
||||
style="fill:#000d26;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
transform="matrix(1.3333333,0,0,-1.3333333,299.44827,283.6988)"
|
||||
clip-path="url(#clipPath12)" />
|
||||
<path
|
||||
id="path13"
|
||||
d="m 0,0 -35.476,9.923 5.419,77.292 14.697,-70.121 z"
|
||||
style="fill:#000d26;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
transform="matrix(1.3333333,0,0,-1.3333333,155.85733,194.09067)"
|
||||
clip-path="url(#clipPath14)" />
|
||||
<path
|
||||
id="path15"
|
||||
d="M 0,0 17.597,52.949 39.23,95.811 37.463,59.99 l 62.304,50.532 -36.619,85.685 4.464,78.475 -41.418,-97.788 27.817,11.282 5.738,-35.7 7.626,16.399 3.771,-32.944 4.783,12.116 L 89.481,112.94 62.061,88.694 61.666,119.06 48.773,79.076 47.538,126.128 14.144,65.571 11.575,80.509 -4.799,3.564 l -36.834,-19.011 1.881,-5.67 z"
|
||||
style="fill:#d6efff;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
transform="matrix(1.3333333,0,0,-1.3333333,326.984,444.78973)"
|
||||
clip-path="url(#clipPath16)" />
|
||||
<path
|
||||
id="path17"
|
||||
d="M 0,0 35.304,9.923 30.056,87.215 15.36,17.094 Z"
|
||||
style="fill:#000d26;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
transform="matrix(1.3333333,0,0,-1.3333333,377.33,194.09067)"
|
||||
clip-path="url(#clipPath18)" />
|
||||
<path
|
||||
id="path19"
|
||||
d="M 0,0 20.501,-11.245 41,0 v 7.634 9.868 L 29.715,22.437 20.462,26.512 11.197,22.437 0,17.502 V 7.634 Z"
|
||||
style="fill:#000d26;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
transform="matrix(1.3333333,0,0,-1.3333333,239.33333,442.0748)"
|
||||
clip-path="url(#clipPath20)" />
|
||||
<path
|
||||
id="path21"
|
||||
d="m 194.5,66.895 h 11 v -28 h -11 z"
|
||||
style="fill:#000d26;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
transform="matrix(1.3333333,0,0,-1.3333333,0,533.33333)"
|
||||
clip-path="url(#clipPath22)" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 8.5 KiB |
1
auth/assets/custom-icons/icons/nekohosting.svg
Normal file
|
After Width: | Height: | Size: 15 KiB |
1
auth/assets/custom-icons/icons/nekohosting_gp.svg
Normal file
|
After Width: | Height: | Size: 19 KiB |
18
auth/assets/custom-icons/icons/nextcloud.svg
Normal file
@@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
id="Layer_1"
|
||||
width="121.48518"
|
||||
height="55.305733"
|
||||
x="0"
|
||||
y="0"
|
||||
enable-background="new 0 0 196.6 72"
|
||||
version="1.1"
|
||||
viewBox="0 0 113.89219 51.848675"
|
||||
xml:space="preserve"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"><metadata
|
||||
id="metadata20" /><defs
|
||||
id="defs18" /><path
|
||||
id="path1052"
|
||||
d="M 57.032896,-3.3856248e-4 C 45.227625,-3.3856248e-4 35.221679,8.0028574 32.120504,18.846282 29.425259,13.094765 23.58457,9.0653444 16.85711,9.0653444 7.60526,9.0653444 0,16.670607 0,25.922452 c 0,9.251833 7.60526,16.860567 16.85711,16.860567 6.72746,0 12.568149,-4.031885 15.263395,-9.784412 3.101175,10.84425 13.10712,18.850106 24.912391,18.850106 11.717964,0 21.67289,-7.885111 24.853382,-18.607048 2.745036,5.621934 8.513436,9.541354 15.145342,9.541354 9.25185,0 16.86057,-7.608734 16.86057,-16.860567 0,-9.251845 -7.60872,-16.8571076 -16.86057,-16.8571076 -6.631906,0 -12.400306,3.9169646 -15.145342,9.5378906 C 78.705786,7.8821364 68.75086,-3.3856248e-4 57.032896,-3.3856248e-4 Z m 0,9.89551796248 c 8.911648,0 16.030748,7.1156526 16.030748,16.0272726 0,8.911605 -7.1191,16.030737 -16.030748,16.030737 -8.911593,0 -16.027247,-7.119132 -16.027247,-16.030737 0,-8.91162 7.115653,-16.0272706 16.027247,-16.0272726 z M 16.85711,18.960863 c 3.90438,0 6.96505,3.057188 6.96505,6.961589 0,3.904386 -3.06067,6.965049 -6.96505,6.965049 -3.90439,0 -6.96161,-3.060663 -6.96161,-6.965049 0,-3.904401 3.05722,-6.961589 6.96161,-6.961589 z m 80.17451,0 c 3.90442,0 6.96506,3.057188 6.96506,6.961589 0,3.904386 -3.06066,6.965049 -6.96506,6.965049 -3.90436,0 -6.961576,-3.060663 -6.961576,-6.965049 0,-3.904401 3.057226,-6.961589 6.961576,-6.961589 z"
|
||||
style="color:#000000;font-style:normal;font-variant:normal;font-weight:400;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#0082c9;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:5.5659;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /></svg>
|
||||
|
After Width: | Height: | Size: 2.7 KiB |
18
auth/assets/custom-icons/icons/parqet.svg
Normal file
@@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="550.00049"
|
||||
height="398.08325"
|
||||
viewBox="0 0 550.00049 398.08325"
|
||||
fill="none"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs1" />
|
||||
<path
|
||||
d="m 141.11125,269.62825 133.889,-77.073 223.151,128.456 -133.892,77.072 z m -104.137,-59.944 c -49.299,-28.379 -49.299,-74.387 0,-102.763 l 44.63,-25.693 133.889,77.073 -133.889,77.073 z m 297.533,-51.383 133.889,-77.073 44.63,25.693 c 49.299,28.376 49.299,74.384 0,102.763 l -44.63,25.69 z m -193.396,-111.327 44.63,-25.69 c 49.296,-28.379 129.222,-28.379 178.518,0 l 44.63,25.69 -133.889,77.073 z"
|
||||
fill="#ffffff"
|
||||
id="path1"
|
||||
style="fill:#009991;fill-opacity:1" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 794 B |
@@ -1,30 +1,15 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 943.11 911.62"><script xmlns=""/>
|
||||
<defs>
|
||||
<style>
|
||||
.cls-1 {
|
||||
fill: #fff;
|
||||
}
|
||||
|
||||
.cls-2 {
|
||||
fill: #37474f;
|
||||
}
|
||||
|
||||
.cls-3 {
|
||||
fill: #46509e;
|
||||
}
|
||||
</style>
|
||||
</defs>
|
||||
<ellipse class="cls-3" cx="471.56" cy="454.28" rx="471.56" ry="454.28"/>
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" id="Layer_1" data-name="Layer 1" viewBox="0 0 943.11 911.62"><script />
|
||||
<ellipse cx="471.56" cy="454.28" rx="471.56" ry="454.28" fill="#46509e" />
|
||||
<g>
|
||||
<g>
|
||||
<ellipse class="cls-2" cx="471.56" cy="390.28" rx="233.66" ry="207"/>
|
||||
<path class="cls-2" d="m705.22,848.95c-36.69,21.14-123.09,64.33-240.64,62.57-109.54-1.63-190.04-41.45-226.68-62.57v-454.19h467.33v454.19Z"/>
|
||||
<ellipse cx="471.56" cy="390.28" rx="233.66" ry="207" fill="#37474f" />
|
||||
<path d="m705.22,848.95c-36.69,21.14-123.09,64.33-240.64,62.57-109.54-1.63-190.04-41.45-226.68-62.57v-454.19h467.33v454.19Z" fill="#37474f" />
|
||||
</g>
|
||||
<path class="cls-1" d="m658.81,397.7v475.8c-36.98,15.7-98.93,36.54-177.98,38.04-88.67,1.69-157.75-21.73-196.2-38.04v-475.8c0-95.55,83.77-173.02,187.09-173.02s187.09,77.47,187.09,173.02Z"/>
|
||||
<polygon class="cls-3" points="565.02 431.68 471.56 514.49 378.09 431.68 565.02 431.68"/>
|
||||
<ellipse class="cls-2" cx="378.09" cy="369.58" rx="23.37" ry="20.7"/>
|
||||
<ellipse class="cls-2" cx="565.02" cy="369.58" rx="23.37" ry="20.7"/>
|
||||
<path class="cls-2" d="m658.49,400.63c0-40.04-36.59-72.45-81.78-72.45s-81.78,32.41-81.78,72.45c0,11.14,2.81,21.65,7.9,31.05h-62.54c5.1-9.4,7.9-19.91,7.9-31.05,0-40.04-36.59-72.45-81.78-72.45s-81.78,32.41-81.78,72.45l-46.73-10.35c0-114.32,104.63-207,233.66-207s233.66,92.69,233.66,207l-46.73,10.35Z"/>
|
||||
<path d="m658.81,397.7v475.8c-36.98,15.7-98.93,36.54-177.98,38.04-88.67,1.69-157.75-21.73-196.2-38.04v-475.8c0-95.55,83.77-173.02,187.09-173.02s187.09,77.47,187.09,173.02Z" fill="#fff" />
|
||||
<polygon points="565.02 431.68 471.56 514.49 378.09 431.68 565.02 431.68" fill="#46509e" />
|
||||
<ellipse cx="378.09" cy="369.58" rx="23.37" ry="20.7" fill="#37474f" />
|
||||
<ellipse cx="565.02" cy="369.58" rx="23.37" ry="20.7" fill="#37474f" />
|
||||
<path d="m658.49,400.63c0-40.04-36.59-72.45-81.78-72.45s-81.78,32.41-81.78,72.45c0,11.14,2.81,21.65,7.9,31.05h-62.54c5.1-9.4,7.9-19.91,7.9-31.05,0-40.04-36.59-72.45-81.78-72.45s-81.78,32.41-81.78,72.45l-46.73-10.35c0-114.32,104.63-207,233.66-207s233.66,92.69,233.66,207l-46.73,10.35Z" fill="#37474f" />
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.2 KiB |
3
auth/assets/custom-icons/icons/remarkable.svg
Normal file
@@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 960 960">
|
||||
<path fill="#000000" d="M494.86,409.59l-37.52-83.51h-35.35v1.44c2.89,2.52,4.69,9.56,4.69,17.31v80.63c0,12.8-1.62,19.12-4.33,21.83v1.44h20.56s0-1.44,0-1.44c-2.71-2.71-5.41-7.22-5.41-21.83v-80.99s46.18,104.26,46.18,104.26h5.23l46.19-104.61v84.05c0,10.1-1.62,16.42-4.33,19.12v1.44h34.81s0-1.44,0-1.44c-2.71-2.71-4.33-9.01-4.33-19.12v-83.34c0-7.76,1.81-14.79,4.69-17.31v-1.44h-34.09l-36.98,83.51h0ZM378.21,373.87v-20.2h-.73l-31.03,11.19v1.27c3.79,3.25,6.49,10.28,6.49,20.92v41.12c0,10.1-1.62,16.42-4.33,19.12v1.44h35.71s0-1.44,0-1.44c-3.06-2.35-6.14-6.68-6.14-19.12v-47.98c3.79-3.6,9.56-5.6,16.96-5.6,6.14,0,11.9,1.08,16.23,3.25h1.44s0-22.54,0-22.54c-1.62-.36-3.97-.54-6.49-.54-12.44,0-22.37,8.66-28.14,19.12h.01Z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 784 B |
16
auth/assets/custom-icons/icons/starbreeze.svg
Normal file
@@ -0,0 +1,16 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" id="Lager_1" data-name="Lager 1" viewBox="0 0 189.11 188.93">
|
||||
<path d="M515.5,279.22a94.56,94.56,0,1,1-94.56-94.47A94.51,94.51,0,0,1,515.5,279.22Z" transform="translate(-326.39 -184.75)" fill="#000" />
|
||||
<path d="M388.45,300.05c-1.94,8.41-12.59,1.73-15.15,12-2.42,9.71,7.54,19.77,1.62,19.42-8.11-.48-18-2.84-12.78,11.64-2.5-16.77,14.88-4.2,18.93-9.7s-5.92-19.23,2.81-19.12,11.89,2,15.58-3.46C395.14,308,392.36,305.21,388.45,300.05Z" transform="translate(-326.39 -184.75)" fill="#fff" />
|
||||
<path d="M412.37,239.33c11.71-12.4-2.75-9.08-2.75-18.16.07-5.18,15.13-6.72,17.07-12s-20.14-9.51-5.84-18.11c-8.05,11.07,10.86,9.87,10.43,18.11-.36,6.62-11.08,9-11.08,12.07-.21,5.56,15.66,5.72,9.2,18.3A39.57,39.57,0,0,0,412.37,239.33Z" transform="translate(-326.39 -184.75)" fill="#fff" />
|
||||
<path d="M442.81,245.1c1.86-4.54,6-10.44,14.59-8,14.41,4.09,1.48-9.39,10.51-14.21,7.66-4.11,11.06,6.13,20.79,3.31-6.61,7.84-14.16-4.16-18.5,2.24-3.85,5.66,3.15,11.12.91,15.22-3.51,6.36-10.36.78-13.8,3.33s-3,6.88-3,10.37C451.87,252.48,447.08,248.24,442.81,245.1Z" transform="translate(-326.39 -184.75)" fill="#fff" />
|
||||
<path d="M459.71,270.1c10.31,9.5,11-3.49,17.62-3.5,5.78,0,8.12,17.32,14.11,17.51,6.79.2,10.64-15.69,18.73-5-9.61-5.29-11.14,9.84-18.53,10-10.84.18-11.22-12.56-14.53-12.56-4.54.22-4.5,17.44-17.9,10.43A36.93,36.93,0,0,0,459.71,270.1Z" transform="translate(-326.39 -184.75)" fill="#fff" />
|
||||
<path d="M441.56,311.37c8.81,5.91.67,11.88,5.51,16.58,3.45,3.31,13.88-4,18.59-2.52,3,1-2.63,9.82,1.92,13.41,3.83,3,11.91,2.08,15.82-.8-5.36.62-11.13,1.45-13.45-3.86s3.81-12.27,1.3-15.35c-2.19-2.67-16,5.2-15-4.28.43-3.77,3.15-12-2.92-14.27A40.5,40.5,0,0,1,441.56,311.37Z" transform="translate(-326.39 -184.75)" fill="#fff" />
|
||||
<path d="M412.93,316.48c-2.42,10.89,6.09,12.37,6.25,16.28.24,5.88-9.29,6.94-9.12,14.06.11,4.61,16.23,9.05,10.49,18.07,8.06-6.25-4-13.61-3.82-17.92.29-8,14.07-6.12,13.8-15.05-.21-7.85-6.11-5.67-.93-15.45A42.33,42.33,0,0,1,412.93,316.48Z" transform="translate(-326.39 -184.75)" fill="#fff" />
|
||||
<path d="M382.27,270.8c-13.19-4.74-16.29,11-20,10.81S354,266,349.36,270.07c-8.09,7.13-6.68,12.48-14.61,9.24,7.33,7.23,9.09-1.91,15-5.25,5-2.8,4.85,16.63,12.69,16.83,4.33.11,9.5-7,12.18-7a11.29,11.29,0,0,1,8.15,3.9A39,39,0,0,1,382.27,270.8Z" transform="translate(-326.39 -184.75)" fill="#fff" />
|
||||
<path d="M387.73,257.21c-8.38-2.34-6.54-10.82-5.79-16.22.72-5.23.37-8.75-8-3.9s-14.66-4.52-9.71-9.8c4.33-4.63-2-7.48-6.53-6.16,1.56-1.92,9.08-5.59,11.55,2,1.34,4.12-2.73,7.4-.53,9.09,4.09,3.13,9.78-8.44,16.32-6.12,5.79,2.06,3.4,6.33,5.69,13.72,1.09,3.47,3.89,5.43,7.74,5.77A38.31,38.31,0,0,0,387.73,257.21Z" transform="translate(-326.39 -184.75)" fill="#fff" />
|
||||
<path d="M409.85,272.86c-2.28-.32-1.89-2.08-1.89-2.08l-2.61-1s-.83,5.07,4.25,5.06c4.82,0,5.61-2.24,5.68-2.75a31,31,0,0,0-3.14-.53C411.75,272.16,411.73,273.13,409.85,272.86Z" transform="translate(-326.39 -184.75)" fill="#fff" />
|
||||
<path d="M434.69,270.35a1.63,1.63,0,0,1-1.34,2.51c-1.88.27-2.14-.57-2.41-1.42-1,.19-2.36.33-3.45.57.07.52,1.72,3.07,6.46,2.23,5.18-.92,3.34-5,3.34-5S435.55,270,434.69,270.35Z" transform="translate(-326.39 -184.75)" fill="#fff" />
|
||||
<path d="M420.74,293.72c-14.62.21-22.05-3.89-23.72-5.91-.63,2.23,7,17.47,24.38,17.32C440.23,305,445,287.89,445,285.06,442.31,288.11,439.06,293.44,420.74,293.72Z" transform="translate(-326.39 -184.75)" fill="#fff" />
|
||||
<path d="M420.91,241.27a36.51,36.51,0,1,0,36.51,36.51A36.5,36.5,0,0,0,420.91,241.27ZM422,267.54c1.51,3,.26,4.91,10.47,1.74,3.82-1.17,10.61-7.94,16.46-1.64-4.15-3.13-9.22-.58-8.93,1.15-.19.92.14,5-5.42,6.26-5.32,1.19-7.78-1.85-8.5-2.64C422.12,272.47,421.79,269.07,422,267.54Zm1.77,14.94c-1.27.94,1.15-2.3,2.81-1.6s-1,4.28-.31,2.09C426.83,281.18,425.19,281.39,423.74,282.48Zm-13-12.82c10,2.92,9.33.72,9.67-.19.11.66-.11,3-4.05,2.94-.71.79-.92,3.65-6.58,3.61-6.84,0-7.21-5.11-7.31-6.29-.21-2.68-5.71-2.67-8.31-2.09C400.29,264.68,406.86,268.54,410.7,269.66Zm6.4,14.28c.33,1.19-2.53-1.32-.3-2.14s3.53,1.73,3,1.33C418.21,282,416.5,281.71,417.1,283.94Zm29.71,0c-.65,7-5.71,21.68-25.34,21.87-16.91.16-25.79-11.3-26.29-18.11-1.12,1.22-1.7,3.22-1.68,5.77-.48-1.06-1.07-6,1.56-8a3.56,3.56,0,0,1,3.33-.23c-1.24.65-.88.25-1.34.72.66,1.63,8.88,7.06,23.49,7.05,16.14,0,22-5.63,24.36-10.67a4.44,4.44,0,0,0-2.6-1.14,5.06,5.06,0,0,1,4.78.25c1.65,1.14,2.74,4.23,2.6,7.56C449.46,287.4,448.4,284.46,446.81,284Z" transform="translate(-326.39 -184.75)" fill="#fff" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.4 KiB |
1
auth/assets/custom-icons/icons/strato.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17.143 8.572c0-.947-.768-1.715-1.714-1.715H1.715C.768 6.857 0 7.625 0 8.572v13.714C0 23.232.768 24 1.715 24h13.714c.946 0 1.714-.768 1.714-1.714V8.572M12 3.429A3.429 3.429 0 0 1 8.573 0h12A3.428 3.428 0 0 1 24 3.43v12A3.429 3.429 0 0 1 20.572 12V5.143c0-.946-.767-1.714-1.714-1.714H12"/></svg>
|
||||
|
After Width: | Height: | Size: 363 B |
1
auth/assets/custom-icons/icons/tiktok.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="#25f4ee" d="M9.844 20.069a3.323 3.323 0 0 0 2.295-.945c.616-.6.98-1.418 1.018-2.282l.008-15.815h2.843L16 .992A5.541 5.541 0 0 1 15.913 0h-3.92v15.846a3.342 3.342 0 0 1-.465 1.59 3.3 3.3 0 0 1-1.17 1.165 3.26 3.26 0 0 1-3.18.062c.302.43.702.782 1.166 1.027.463.244.978.374 1.5.379zM21.355 6.442v-.944a5.373 5.373 0 0 1-2.97-.896c.765.883 1.797 1.577 2.97 1.84z"/><g fill="#fe2c55" stroke-width="2"><path d="M18.386 4.602a5.507 5.507 0 0 1-1.34-3.606h-1.075c.14.734.427 1.432.842 2.052.415.62.95 1.149 1.573 1.554zM8.703 12.359a3.278 3.278 0 0 0-2.05.704c-.584.46-.999 1.107-1.175 1.835a3.362 3.362 0 0 0 .204 2.177 3.317 3.317 0 0 0 1.495 1.58 3.334 3.334 0 0 1-.013-3.89 3.28 3.28 0 0 1 1.633-1.21 3.247 3.247 0 0 1 2.025-.009V9.51a7.175 7.175 0 0 0-.971-.071h-.197v3.049a3.004 3.004 0 0 0-.951-.13z"/><path d="M21.355 6.375h-.021l-.01 3.044a9.23 9.23 0 0 1-5.437-1.781v8.08a7.34 7.34 0 0 1-1.054 3.755 7.241 7.241 0 0 1-2.822 2.667 7.151 7.151 0 0 1-7.432-.463 7.183 7.183 0 0 0 3.678 2.142 7.132 7.132 0 0 0 4.233-.323 7.212 7.212 0 0 0 3.316-2.676 7.324 7.324 0 0 0 1.248-4.099V8.678a9.254 9.254 0 0 0 5.446 1.768V6.498c-.385 0-.769-.041-1.146-.123z"/></g><path d="M15.913 15.714V7.68a9.249 9.249 0 0 0 5.446 1.768V6.375a5.444 5.444 0 0 1-2.973-1.773c-.62-.407-1.15-.936-1.56-1.556s-.692-1.318-.828-2.05h-2.863V16.84a3.338 3.338 0 0 1-.681 1.907c-.418.548-.996.95-1.652 1.15-.656.2-1.358.188-2.007-.035a3.287 3.287 0 0 1-1.611-1.208 3.309 3.309 0 0 1-1.473-1.577 3.353 3.353 0 0 1-.196-2.16 3.326 3.326 0 0 1 1.165-1.822 3.268 3.268 0 0 1 2.03-.707c.329.001.656.053.97.154v-3.1a7.149 7.149 0 0 0-3.884 1.259A7.255 7.255 0 0 0 3.21 13.89c-.539 1.292-.696 2.714-.453 4.095s.876 2.66 1.823 3.686a7.138 7.138 0 0 0 7.457.497 7.227 7.227 0 0 0 2.831-2.679 7.325 7.325 0 0 0 1.044-3.775z"/><path fill="#25f4ee" d="M9.674 9.484v-.976a7.14 7.14 0 0 0-4.62.934 7.253 7.253 0 0 0-3.059 3.62 7.341 7.341 0 0 0-.186 4.757 7.268 7.268 0 0 0 2.765 3.853l-.1-.11a7.31 7.31 0 0 1-1.704-3.678c-.212-1.364-.034-2.76.51-4.027s1.437-2.35 2.569-3.124a7.157 7.157 0 0 1 3.825-1.249z"/></svg>
|
||||
|
After Width: | Height: | Size: 2.1 KiB |
@@ -1,5 +1 @@
|
||||
<svg width="500" height="500" viewBox="0 0 500 500" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g style="mix-blend-mode:difference">
|
||||
<path d="M234.915 0C79.5084 0 12.429 138.162 12.429 138.162L32.1744 152.281C32.1744 152.281 7.3264 199.477 8.01401 260.013C8.01401 383.59 106.503 500 251.486 500C383.198 500 492 392.923 492 260.317C492 87.3677 357.722 0 234.916 0H234.915ZM236.263 42.1591C357.682 42.1591 451.9 139.886 451.9 253.497C451.9 373.933 361.21 457.689 255.53 457.689C177.753 457.689 107.59 398.53 107.59 317.419C107.59 270.572 132.52 237.911 160.456 220.504L164.544 224.935C156.899 230.91 135.1 265.885 135.1 300.261C135.1 364.077 185.205 408.275 248.333 408.275C328.747 408.275 382.377 339.771 382.377 260.231C382.377 167.686 300.59 89.1181 202.165 89.1181C147.726 89.1181 101.521 112.502 74.9709 133.145L70.8393 129.41C105.574 75.9175 165.725 42.1591 236.263 42.1591ZM200.034 130.691C262.843 130.691 324.165 172.193 339.471 231.103L333.904 233.21C306.421 196.961 261.388 166.92 208.21 166.92C110.357 166.92 58.9672 255.732 66.5114 329.908L60.749 332.016C60.749 332.016 49.9411 308.197 49.9411 279.952C49.9411 198.161 117.19 130.691 200.034 130.691ZM241.548 233.34C271.284 233.34 295.066 257.414 295.066 285.991C295.066 309.639 279.864 323.654 279.864 323.654L297.87 336.229C297.87 336.229 280.015 364.227 243.57 364.227C208.707 364.227 177.875 336.122 177.875 298.327C177.875 259.384 211.412 233.34 241.548 233.34Z" fill="white"/>
|
||||
</g>
|
||||
</svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M23.561 11.988C23.301-.304 6.954-4.89.656 6.634c.282.206.661.477.943.672a11.747 11.747 0 0 0-.976 3.067 11.885 11.885 0 0 0-.184 2.071C.439 18.818 5.621 24 12.005 24c6.385 0 11.556-5.17 11.556-11.556v-.455zm-20.27 2.06c-.152 1.246-.054 1.636-.054 1.788l-.282.098c-.108-.206-.37-.932-.488-1.908C2.163 10.308 4.7 6.96 8.57 6.33c3.544-.52 6.937 1.68 7.728 4.758l-.282.098c-.087-.087-.228-.336-.77-.878-4.281-4.281-11.002-2.32-11.956 3.74zm11.002 2.081a3.145 3.145 0 0 1-2.59 1.355 3.15 3.15 0 0 1-3.155-3.155 3.159 3.159 0 0 1 2.927-3.144c1.018-.043 1.972.51 2.416 1.398a2.58 2.58 0 0 1-.455 2.95c.293.205.575.4.856.595zm6.58.12c-1.669 3.782-5.106 5.766-8.77 5.712-7.034-.347-9.083-8.466-4.38-11.393l.207.206c-.076.108-.358.325-.791 1.182-.51 1.041-.672 2.081-.607 2.732.369 5.67 8.314 6.83 11.045 1.214C21.057 8.217 11.822.401 3.626 6.374l-.184-.184C5.599 2.808 9.816 1.3 13.837 2.309c6.147 1.55 9.453 7.956 7.035 13.94z"/></svg>
|
||||
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 996 B |
129
auth/assets/custom-icons/icons/wca.svg
Normal file
@@ -0,0 +1,129 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="256"
|
||||
height="256"
|
||||
id="svg2"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="1.3 (0e150ed6c4, 2023-07-21)"
|
||||
sodipodi:docname="WCA Logo Only Positive Primary.svg"
|
||||
inkscape:output_extension="org.inkscape.output.svg.inkscape"
|
||||
version="1.0"
|
||||
xml:space="preserve"
|
||||
inkscape:export-filename="WCA Logo Only Negative Primary.png"
|
||||
inkscape:export-xdpi="1536"
|
||||
inkscape:export-ydpi="1536"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"><defs
|
||||
id="defs4"><inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 488.98764 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="744.09448 : 488.98764 : 1"
|
||||
inkscape:persp3d-origin="372.04724 : 313.59394 : 1"
|
||||
id="perspective10" /><inkscape:perspective
|
||||
id="perspective2708"
|
||||
inkscape:persp3d-origin="0.5 : -36.860118 : 1"
|
||||
inkscape:vp_z="1 : -36.693451 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : -36.693451 : 1"
|
||||
sodipodi:type="inkscape:persp3d" /></defs><sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
gridtolerance="10000"
|
||||
guidetolerance="10"
|
||||
objecttolerance="10"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="4"
|
||||
inkscape:cx="210"
|
||||
inkscape:cy="265.125"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="g3312"
|
||||
showgrid="false"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
inkscape:window-width="2560"
|
||||
inkscape:window-height="1369"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="1432"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:window-maximized="1" /><metadata
|
||||
id="metadata7"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-440.9061,488.30753)"><g
|
||||
id="g3312"
|
||||
transform="matrix(0.499989,0,0,0.499989,301.618,-244.854)"><g
|
||||
id="g4"
|
||||
transform="matrix(1.0018562,0,0,1,-0.51713006,0)"><path
|
||||
style="fill:#ddda45;stroke-width:0.873144"
|
||||
d="m 536.25328,-428.58851 c -0.021,-19.97227 -0.0227,-27.82159 -5e-4,-58.32991 105.40638,-0.17805 182.31227,64.21817 218.15501,126.42486 -45.15016,26.27039 -50.10755,29.12785 -50.10755,29.12785 -33.11708,-56.63926 -96.17928,-96.54551 -168.04696,-97.2228 z"
|
||||
id="path8"
|
||||
sodipodi:nodetypes="ccccc" /><path
|
||||
style="fill:#ddda45;stroke-width:0.873144"
|
||||
d="m 366.2197,-133.72782 0.0151,-192.06002 166.02237,95.88619 -0.17907,191.155551 C 476.51709,-69.927771 366.2197,-133.72782 366.2197,-133.72782 Z"
|
||||
id="path2730" /><path
|
||||
sodipodi:nodetypes="ccccc"
|
||||
style="fill:#e7762a;stroke-width:0.873144"
|
||||
d="m 706.37054,-133.96383 c 36.2716,-65.47593 30.50843,-138.95072 -0.0298,-193.85497 0.39613,-1.03249 33.46343,-19.33855 50.10377,-29.13739 51.21862,93.81548 36.51984,189.21677 0.1421,252.07328 -20.3537,-11.42655 -31.0669,-17.78432 -50.21605,-29.08092 z"
|
||||
id="path2726" /><path
|
||||
style="fill:#e02826;stroke-width:0.873144"
|
||||
d="m 311.34759,-356.46181 50.35175,28.2771 c -35.18504,70.65751 -31.88557,124.21147 -0.28702,194.132 l -50.13488,28.72384 c -50.42479,-90.8489 -36.1234,-187.14573 0.0702,-251.13294 z"
|
||||
id="path4" /><path
|
||||
style="fill:#e02826;stroke-width:0.873144"
|
||||
d="m 536.2423,-229.90781 c 56.13671,-32.73903 165.61719,-95.11799 165.61719,-95.11799 -0.67575,128.21382 0.0532,8.15816 -0.21804,191.35217 -54.38973,32.37299 -105.23267,61.003461 -165.50176,94.927531 -0.31544,-40.223801 0.10261,-46.61912 0.10261,-191.161711 z"
|
||||
id="path2724"
|
||||
sodipodi:nodetypes="ccccc" /><path
|
||||
sodipodi:nodetypes="ccccc"
|
||||
style="fill:#3d9c46;stroke-width:0.873144"
|
||||
d="m 313.7727,-360.67732 c 38.71037,-70.10178 124.6252,-126.43919 218.12075,-126.24058 v 58.32974 c -79.9296,2.84524 -135.21709,43.39695 -168.14346,96.87297 -19.03513,-11.01192 -28.32282,-16.47474 -49.97729,-28.96213 z"
|
||||
id="path2722" /><path
|
||||
id="path2802"
|
||||
d="m 363.46745,-130.48995 c 36.87186,61.386523 101.90167,96.576564 168.55822,97.399755 l 0.0525,58.183687 C 444.56118,25.630318 359.24663,-22.728811 313.43202,-101.575 Z"
|
||||
style="fill:#eeeeec;stroke-width:0.873144"
|
||||
sodipodi:nodetypes="ccccc" /><path
|
||||
style="fill:#304a96;stroke-width:0.873144"
|
||||
d="m 368.78398,-329.03858 165.28088,-95.18971 165.54442,95.6062 -165.35954,95.09314 z"
|
||||
id="path5" /><path
|
||||
style="fill:#304a96;stroke-width:0.873144"
|
||||
d="m 536.25206,25.093492 c -0.14995,-22.2466531 -0.26346,-38.397197 -0.11279,-58.184006 78.82367,0.02164 144.07151,-53.088696 168.10562,-97.178966 21.6542,12.49748 29.7479,17.20359 50.23519,29.02341 C 683.82068,20.035204 554.37926,25.093492 536.25206,25.093492 Z"
|
||||
id="path2720"
|
||||
sodipodi:nodetypes="ccccc" /><path
|
||||
style="fill:#ffffff;fill-opacity:1;stroke-width:0.873144"
|
||||
d="m 494.47153,-109.23902 c 0,-11.24557 -0.16402,-13.10126 -1.27163,-14.3936 -0.69937,-0.81604 -15.49557,-9.23821 -32.88042,-18.71602 -34.42705,-18.76883 -37.64764,-20.6942 -42.21281,-25.23604 -5.5503,-5.52185 -5.57501,-5.66443 -5.85792,-33.80463 -0.24306,-24.17526 -0.20649,-24.97725 1.18835,-25.9983 2.91343,-2.13292 2.42236,-2.36343 44.5433,20.90507 36.85908,20.36163 34.92959,19.39131 35.80541,18.00702 0.36489,-0.57671 0.66848,-6.81646 0.67461,-13.86596 0.0107,-11.18148 -0.15111,-13.00198 -1.26052,-14.2642 -1.48226,-1.68665 -69.35219,-39.35146 -74.69152,-41.4505 -12.36338,-4.86053 -20.15829,-2.79877 -24.22969,6.40879 -2.51248,5.68199 -2.97922,11.7884 -2.97114,38.87079 0.0107,35.38896 1.46043,44.78242 8.86025,57.4045 3.60238,6.14475 13.57792,16.31539 20.27503,20.67168 2.64641,1.7214 19.97676,11.39689 38.51189,21.50099 24.61856,13.4204 33.94498,18.168905 34.60851,17.620833 0.66439,-0.548858 0.9083,-4.216849 0.9083,-13.660423 z"
|
||||
id="path7" /><path
|
||||
style="fill:#ffffff;fill-opacity:1;stroke-width:0.873144"
|
||||
d="m 505.09984,-276.94542 c 1.62571,-0.8294 3.4446,-2.26258 4.04199,-3.18479 0.59738,-0.92222 6.23639,-11.5682 12.53121,-23.65766 6.29474,-12.08947 11.67266,-21.98079 11.95089,-21.98079 0.2782,0 5.72494,10.1654 12.10386,22.58972 7.96677,15.51716 12.33445,23.24274 13.95007,24.67522 4.82285,4.27605 13.93275,4.70162 19.40752,0.90658 2.71831,-1.88433 4.51003,-5.1519 23.16429,-42.24514 11.11996,-22.11158 20.04063,-40.66537 19.82372,-41.23064 -0.31784,-0.82827 -2.69013,-1.0256 -12.22507,-1.0166 -6.5069,0.009 -12.20035,0.25138 -12.65217,0.54501 -0.45185,0.29355 -6.76874,12.43017 -14.03759,26.97002 -7.35167,14.70566 -13.48862,26.15206 -13.83028,25.79573 -0.33785,-0.35232 -5.59609,-10.28669 -11.68508,-22.0764 -6.089,-11.78971 -11.88326,-22.53418 -12.87619,-23.87655 -4.87781,-6.5946 -16.58774,-6.78809 -21.98661,-0.36323 -0.98258,1.16931 -7.01834,12.16665 -13.41277,24.43842 -6.39441,12.27186 -11.80174,22.31573 -12.01628,22.31983 -0.21457,0.009 -6.08797,-11.51895 -13.05211,-25.60669 -6.9641,-14.08774 -13.13378,-26.18628 -13.71036,-26.88567 -0.91743,-1.11282 -2.46328,-1.27016 -12.38026,-1.26047 -6.23258,0.009 -11.79127,0.30193 -12.35263,0.6573 -1.12002,0.70908 4.58354,13.16491 26.31245,57.46273 11.69014,23.83212 13.1777,26.0988 18.40631,28.04573 3.75182,1.39712 10.7486,0.90493 14.52509,-1.02166 z"
|
||||
id="path6" /><path
|
||||
id="path2"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke-width:0.873144"
|
||||
d="m 631.01971,-246.39217 c -0.47323,0.0208 -0.97529,0.0984 -1.52122,0.21829 -2.82269,0.61994 -7.13602,4.93796 -9.07953,9.08636 -0.83468,1.78164 -8.7296,23.67679 -17.54171,48.65496 -8.81211,24.97818 -19.81733,56.13532 -24.45539,69.2391 -4.63806,13.10378 -8.22951,24.152572 -7.98126,24.554305 0.44123,0.713882 6.65438,-2.39945 15.95229,-7.994895 l 4.35899,-2.6229 6.53849,-18.88216 6.5419,-18.87874 23.23432,-12.89962 c 12.78056,-7.09376 23.46988,-12.89621 23.75277,-12.89621 0.28285,0 2.86467,4.26279 5.73695,9.47518 2.87232,5.21241 5.79232,10.17904 6.48733,11.03733 l 1.262,1.56215 8.26776,-4.69325 c 4.54677,-2.58163 8.36975,-5.23035 8.49629,-5.88704 0.12637,-0.65668 -7.09396,-15.03901 -16.04438,-31.95912 -8.95039,-16.92012 -19.15933,-36.26049 -22.68859,-42.97941 -6.07668,-11.5688 -8.00443,-14.27992 -11.31701,-14.13433 z m -3.31189,35.64962 c 1.02361,0.32811 12.91735,22.28651 12.46645,23.01602 -0.40514,0.65556 -22.03366,12.56041 -24.52019,13.49651 -0.98208,0.36969 0.12893,-3.59332 5.0855,-18.12154 3.48879,-10.22634 6.62422,-18.50118 6.96824,-18.39099 z" /></g><g
|
||||
id="g4-1"
|
||||
transform="matrix(1.7463512,0,0,1.7463512,829.98941,-617.46454)"
|
||||
style="stroke:#ffffff;stroke-opacity:1"><g
|
||||
id="g2-7"
|
||||
transform="matrix(0.12458447,0,0,0.12458447,-46.754768,344.21344)"
|
||||
style="stroke:#ffffff;stroke-opacity:1"><g
|
||||
id="g3-6"
|
||||
transform="translate(-93.696521,-2082.5864)"
|
||||
style="stroke:#ffffff;stroke-opacity:1"><path
|
||||
id="circle1-2"
|
||||
style="fill:none;stroke-width:20"
|
||||
d="m 176.38791,2073.0198 a 88.5,88.5 0 0 1 -88.500001,88.5 88.5,88.5 0 0 1 -88.50000006,-88.5 88.5,88.5 0 0 1 88.50000006,-88.5 88.5,88.5 0 0 1 88.500001,88.5 z" /><path
|
||||
d="m 82.487909,2065.0198 c 5.500001,0 9.500001,-1.1 11.900001,-3.2 2.4,-2 3.7,-5.4 3.7,-10.2 0,-4.7 -1.3,-8 -3.7,-10.1 -2.4,-2 -6.4,-3 -11.900001,-3 h -11.2 v 26.5 h 11.2 m -11.2,18.3 v 39 H 44.687911 v -103.1 h 40.599998 c 13.600001,0 23.500001,2.3 29.800001,6.9 6.4,4.5 9.5,11.7 9.5,21.6 0,6.8 -1.6,12.4 -4.9,16.8 -3.3,4.3 -8.2,7.6 -14.9,9.6 3.7,0.9 6.9,2.8 9.8,5.7 2.9,2.9 5.8,7.3 8.7,13.3 l 14.5,29.2 h -28.3 l -12.6,-25.6 c -2.5,-5.1 -5.1,-8.7 -7.7,-10.5 -2.600001,-1.9 -6.100001,-2.9 -10.400001,-2.9 h -7.5"
|
||||
id="path1-5"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1.00334;stroke-dasharray:none;stroke-opacity:1" /></g></g></g></g></g></svg>
|
||||
|
After Width: | Height: | Size: 10 KiB |
@@ -1,15 +1 @@
|
||||
<svg width="500" height="500" viewBox="0 0 500 500" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_191_1078)">
|
||||
<g style="mix-blend-mode:difference">
|
||||
<path d="M261.198 1.60387L416.423 70.2759C420.678 72.1581 424.082 75.5557 425.971 79.8079L498.384 242.732C499.414 245.05 499.963 247.552 499.998 250.089C500.033 252.625 499.553 255.142 498.587 257.487L432.481 418.019C430.609 422.563 427.028 426.191 422.508 428.122L257.746 498.494C255.471 499.465 253.026 499.977 250.552 500C248.078 500.022 245.624 499.555 243.332 498.625L84.66 434.251C80.1712 432.43 76.5614 428.942 74.587 424.519L1.628 261.068C0.585027 258.731 0.0312788 256.206 0.000838817 253.648C-0.0296012 251.089 0.463911 248.551 1.451 246.191L71.265 79.2509C72.2146 76.9794 73.6024 74.9172 75.3491 73.1822C77.0958 71.4472 79.1672 70.0732 81.445 69.1389L246.493 1.40487C248.831 0.444804 251.339 -0.0324825 253.866 0.00171599C256.393 0.0359145 258.887 0.580891 261.198 1.60387ZM253.336 39.1309L102.865 100.883L39.175 253.184L105.754 402.34L250.196 460.942L400.726 396.649L460.856 250.63L394.639 101.645L253.336 39.1329V39.1309Z" fill="white"/>
|
||||
</g>
|
||||
<g style="mix-blend-mode:difference">
|
||||
<path d="M168.865 308.963L237.36 243.644C244.618 236.723 256.037 236.738 263.276 243.679L332.104 309.671V168.751C332.104 158.402 340.504 150.001 350.854 150.001C361.201 150.001 369.604 158.402 369.604 168.751V329.907C369.604 340.262 361.208 348.657 350.854 348.657H326.115C321.279 348.656 316.629 346.788 313.138 343.441L250.264 283.156L187.012 343.476C183.525 346.802 178.891 348.657 174.072 348.657H150.115C139.76 348.657 131.365 340.262 131.365 329.907V168.751C131.365 158.402 139.767 150.001 150.115 150.001C160.464 150.001 168.865 158.402 168.865 168.751V308.963Z" fill="white"/>
|
||||
</g>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_191_1078">
|
||||
<rect width="500" height="500" fill="white"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><g fill-rule="evenodd" clip-rule="evenodd"><path fill="#030407" d="M20.5 20.5 12 24l-8.5-3.5L0 12l3.5-8.5L12 0l8.5 3.5L24 12z"/><g fill="#fff"><path fill-opacity=".5" d="m3 12 2.75-6.25L12 3l6.25 2.75L21 12h-3V7h-2.5L14 8.5V12h-4V8.5L8.5 7H6v5z"/><path d="M6 7v10.5h2.75L12 14l3.25 3.5H18V7h-2.5v7.5L12 10.75 8.5 14.5V7z"/><path d="m19.25 4.75-7.25-3-7.25 3-3 7.25 3 7.25 7.25 3 7.25-3 3-7.25zM20.5 20.5 12 24l-8.5-3.5L0 12l3.5-8.5L12 0l8.5 3.5L24 12z"/></g></g></svg>
|
||||
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 528 B |
1
auth/assets/custom-icons/icons/xbox.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4.102 21.033A11.947 11.947 0 0 0 12 24a11.96 11.96 0 0 0 7.902-2.967c1.877-1.912-4.316-8.709-7.902-11.417-3.582 2.708-9.779 9.505-7.898 11.417zm11.16-14.406c2.5 2.961 7.484 10.313 6.076 12.912A11.942 11.942 0 0 0 24 12.004a11.95 11.95 0 0 0-3.57-8.536s-.027-.022-.082-.042a.824.824 0 0 0-.281-.045c-.592 0-1.985.434-4.805 3.246zM3.654 3.426c-.057.02-.082.041-.086.042A11.956 11.956 0 0 0 0 12.004c0 2.854.998 5.473 2.661 7.533-1.401-2.605 3.579-9.951 6.08-12.91-2.82-2.813-4.216-3.245-4.806-3.245a.725.725 0 0 0-.281.046v-.002zM12 3.551S9.055 1.828 6.755 1.746c-.903-.033-1.454.295-1.521.339C7.379.646 9.659 0 11.984 0H12c2.334 0 4.605.646 6.766 2.085-.068-.046-.615-.372-1.52-.339C14.946 1.828 12 3.545 12 3.545v.006z"/></svg>
|
||||
|
After Width: | Height: | Size: 797 B |
@@ -1 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024"><circle cx="512" cy="512" r="512" style="fill:#6001d2"/><path d="M256 390.61h101.45l59.06 151 59.83-151H575L426.38 748.15H327l40.66-94.74Zm332.7 143.54a61.36 61.36 0 1 0 61.37 61.35 61.36 61.36 0 0 0-61.37-61.35M768 275.85H657.83l-98.09 235.67h110.55Z" style="fill:#fff"/></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m18.86 1.56-4.59 10.31h5.13L24 1.56h-5.14M0 6.71l5.15 11.56-1.85 4.17h4.53l6.86-15.73h-4.5l-2.8 6.73-2.77-6.73H0m15.62 6.16c-1.67 0-2.91 1.25-2.91 2.71 0 1.42 1.2 2.61 2.79 2.61 1.68 0 2.93-1.23 2.93-2.69 0-1.47-1.2-2.63-2.81-2.63Z"/></svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 344 B After Width: | Height: | Size: 311 B |
1
auth/assets/custom-icons/icons/zoom.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><defs><linearGradient id="a" x1="7.573" x2="24.427" y1="30.596" y2="1.404" gradientTransform="scale(.75)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#0845BF"/><stop offset=".6" stop-color="#0B5CFF"/><stop offset="1" stop-color="#4F90EE"/></linearGradient></defs><path fill="url(#a)" d="M23.7 8.232A9.602 9.602 0 0 0 15.769.3a23.749 23.749 0 0 0-7.537 0A9.602 9.602 0 0 0 .3 8.232a23.749 23.749 0 0 0 0 7.536A9.602 9.602 0 0 0 8.232 23.7a23.751 23.751 0 0 0 7.537 0 9.602 9.602 0 0 0 7.931-7.932 23.752 23.752 0 0 0 0-7.536z"/><path fill="#fff" d="M10.204 15.721H4.265c-.417 0-.789-.249-.948-.634s-.073-.824.222-1.118l4.114-4.114H4.704c-.81 0-1.466-.657-1.466-1.467h5.477c.417 0 .789.249.948.634.16.385.073.824-.222 1.119l-4.114 4.114h3.41c.81 0 1.467.656 1.467 1.466zm10.559-4.583a2.863 2.863 0 0 0-2.86-2.86c-.843 0-1.602.368-2.126.95a2.853 2.853 0 0 0-2.127-.95 2.863 2.863 0 0 0-2.86 2.86v4.583c.81 0 1.467-.657 1.467-1.466v-3.117c0-.768.625-1.393 1.393-1.393s1.393.625 1.393 1.393v3.117c0 .81.657 1.466 1.467 1.466v-4.583c0-.768.625-1.393 1.393-1.393s1.393.625 1.393 1.393v3.117c0 .81.657 1.466 1.467 1.466z"/></svg>
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
BIN
auth/assets/discount.png
Normal file
|
After Width: | Height: | Size: 5.7 KiB |
BIN
auth/assets/ente_5gb.png
Normal file
|
After Width: | Height: | Size: 6.0 KiB |
BIN
auth/assets/rate_us.png
Normal file
|
After Width: | Height: | Size: 6.2 KiB |
BIN
auth/assets/star_us.png
Normal file
|
After Width: | Height: | Size: 5.2 KiB |
@@ -1,24 +1,19 @@
|
||||
ente's Authenticator app helps you generate and store 2 step verification (2FA)
|
||||
tokens on your mobile devices.
|
||||
ente's Authenticator app helps you generate and store 2 step verification (2FA) tokens on your mobile devices.
|
||||
|
||||
|
||||
FEATURES
|
||||
|
||||
- Secure Backups
|
||||
ente provides end-to-end encrypted cloud backups so that you don't have to worry
|
||||
about losing your tokens. We use the same protocols Ente Photos uses to encrypt
|
||||
and preserve your data.
|
||||
ente provides end-to-end encrypted cloud backups so that you don't have to worry about losing your tokens. We use the same protocols Ente Photos uses to encrypt and preserve your data.
|
||||
|
||||
- Multi Device Synchronization
|
||||
ente will automatically sync the 2FA tokens you add to your account, across all
|
||||
your devices. Every new device you sign into will have access to these tokens.
|
||||
ente will automatically sync the 2FA tokens you add to your account, across all your devices. Every new device you sign into will have access to these tokens.
|
||||
|
||||
- Web access
|
||||
You can access your 2FA code from any web browser by visiting https://auth.ente.io .
|
||||
|
||||
- Offline Mode
|
||||
ente generates 2FA tokens offline, so your network connectivity will not get in
|
||||
the way of your workflow.
|
||||
ente generates 2FA tokens offline, so your network connectivity will not get in the way of your workflow.
|
||||
|
||||
- Import and Export Tokens
|
||||
You can add tokens to ente by one of the following methods:
|
||||
@@ -30,8 +25,7 @@ otpauth://totp/provider.com:you@email.com?secret=YOUR_SECRET
|
||||
|
||||
The codes maybe separated by new lines or commas.
|
||||
|
||||
You can also export the codes you have added to ente, to an **unencrypted** text
|
||||
file, that adheres to the above format.
|
||||
You can also export the codes you have added to ente, to an **unencrypted** text file, that adheres to the above format.
|
||||
|
||||
|
||||
SUPPORT
|
||||
|
||||
@@ -82,8 +82,6 @@ PODS:
|
||||
- qr_code_scanner (0.2.0):
|
||||
- Flutter
|
||||
- MTBBarcodeScanner
|
||||
- scan (0.0.1):
|
||||
- Flutter
|
||||
- SDWebImage (5.20.0):
|
||||
- SDWebImage/Core (= 5.20.0)
|
||||
- SDWebImage/Core (5.20.0)
|
||||
@@ -146,7 +144,6 @@ DEPENDENCIES:
|
||||
- path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`)
|
||||
- privacy_screen (from `.symlinks/plugins/privacy_screen/ios`)
|
||||
- qr_code_scanner (from `.symlinks/plugins/qr_code_scanner/ios`)
|
||||
- scan (from `.symlinks/plugins/scan/ios`)
|
||||
- sentry_flutter (from `.symlinks/plugins/sentry_flutter/ios`)
|
||||
- share_plus (from `.symlinks/plugins/share_plus/ios`)
|
||||
- shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`)
|
||||
@@ -208,8 +205,6 @@ EXTERNAL SOURCES:
|
||||
:path: ".symlinks/plugins/privacy_screen/ios"
|
||||
qr_code_scanner:
|
||||
:path: ".symlinks/plugins/qr_code_scanner/ios"
|
||||
scan:
|
||||
:path: ".symlinks/plugins/scan/ios"
|
||||
sentry_flutter:
|
||||
:path: ".symlinks/plugins/sentry_flutter/ios"
|
||||
share_plus:
|
||||
@@ -250,7 +245,6 @@ SPEC CHECKSUMS:
|
||||
path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46
|
||||
privacy_screen: 1a131c052ceb3c3659934b003b0d397c2381a24e
|
||||
qr_code_scanner: bb67d64904c3b9658ada8c402e8b4d406d5d796e
|
||||
scan: aea35bb4aa59ccc8839c576a18cd57c7d492cc86
|
||||
SDWebImage: 73c6079366fea25fa4bb9640d5fb58f0893facd8
|
||||
Sentry: f8374b5415bc38dfb5645941b3ae31230fbeae57
|
||||
sentry_flutter: 0eb93e5279eb41e2392212afe1ccd2fecb4f8cbe
|
||||
|
||||
@@ -63,6 +63,8 @@
|
||||
<string>Main</string>
|
||||
<key>UIStatusBarHidden</key>
|
||||
<false/>
|
||||
<key>FlutterDeepLinkingEnabled</key>
|
||||
<false/>
|
||||
<key>UISupportedInterfaceOrientations</key>
|
||||
<array>
|
||||
<string>UIInterfaceOrientationPortrait</string>
|
||||
|
||||
@@ -504,5 +504,13 @@
|
||||
"deselectAll": "Deselect all",
|
||||
"selectAll": "Select all",
|
||||
"deleteDuplicates": "Delete duplicates",
|
||||
"plainHTML": "Plain HTML"
|
||||
"plainHTML": "Plain HTML",
|
||||
"tellUsWhatYouThink": "Tell us what you think",
|
||||
"dropReview": "Drop a review on the App/Play Store",
|
||||
"supportEnte": "Support <bold-green>ente</bold-green>",
|
||||
"giveUsAStarOnGithub": "Give us a star on Github",
|
||||
"free5GB": "5GB free on <bold-green>ente</bold-green> Photos",
|
||||
"loginWithAuthAccount": "Login with your Auth account",
|
||||
"freeStorageOffer": "10% off on <bold-green>ente</bold-green> photos",
|
||||
"freeStorageOfferDescription": "Use code \"AUTH\" to get 10% off first year"
|
||||
}
|
||||
@@ -88,6 +88,8 @@
|
||||
"useRecoveryKey": "Usar clave de recuperación",
|
||||
"incorrectPasswordTitle": "Contraseña incorrecta",
|
||||
"welcomeBack": "¡Te damos la bienvenida otra vez!",
|
||||
"emailAlreadyRegistered": "Correo electrónico ya registrado.",
|
||||
"emailNotRegistered": "Correo electrónico no registrado.",
|
||||
"madeWithLoveAtPrefix": "hecho con ❤️ en ",
|
||||
"supportDevs": "Suscríbase a <bold-green>ente</bold-green> para apoyar este proyecto",
|
||||
"supportDiscount": "Utiliza el cupón promocional \"AUTH\" para obtener un 10% de descuento en el primer año",
|
||||
|
||||
@@ -504,5 +504,13 @@
|
||||
"deselectAll": "Tout désélectionner",
|
||||
"selectAll": "Tout sélectionner",
|
||||
"deleteDuplicates": "Supprimer les doublons",
|
||||
"plainHTML": "HTML Pur"
|
||||
"plainHTML": "HTML Pur",
|
||||
"tellUsWhatYouThink": "Dites-nous ce que vous pensez",
|
||||
"dropReview": "Déposez un avis sur l'App/Play Store",
|
||||
"supportEnte": "Soutenir <bold-green>Ente</bold-green>",
|
||||
"giveUsAStarOnGithub": "Donnez-nous une étoile sur Github",
|
||||
"free5GB": "5 Go gratuits sur <bold-green>Ente</bold-green> Photos",
|
||||
"loginWithAuthAccount": "Connectez-vous avec votre compte Auth",
|
||||
"freeStorageOffer": "10% de réduction sur <bold-green>Ente</bold-green> Photos",
|
||||
"freeStorageOfferDescription": "Utilisez le code coupon \"AUTH\" pour obtenir 10% de réduction la première année"
|
||||
}
|
||||
@@ -88,6 +88,8 @@
|
||||
"useRecoveryKey": "Utilizza un codice di recupero",
|
||||
"incorrectPasswordTitle": "Password sbagliata",
|
||||
"welcomeBack": "Bentornato!",
|
||||
"emailAlreadyRegistered": "Email già registrata.",
|
||||
"emailNotRegistered": "Email non registrata.",
|
||||
"madeWithLoveAtPrefix": "realizzato con ❤️ a ",
|
||||
"supportDevs": "Iscriviti a <bold-green>ente</bold-green> per supportare questo progetto.",
|
||||
"supportDiscount": "Utilizzare il codice coupon \"AUTH\" per ottenere il 10% di sconto al primo anno",
|
||||
|
||||
@@ -88,6 +88,8 @@
|
||||
"useRecoveryKey": "回復キーを使用",
|
||||
"incorrectPasswordTitle": "パスワードが正しくありません",
|
||||
"welcomeBack": "おかえりなさい!",
|
||||
"emailAlreadyRegistered": "メールアドレスはすでに登録されています。",
|
||||
"emailNotRegistered": "メールアドレスはまだ登録されていません。",
|
||||
"madeWithLoveAtPrefix": "made with ❤️ at ",
|
||||
"supportDevs": "プロジェクト支援のために <bold-green>ente</bold-green> に登録",
|
||||
"supportDiscount": "クーポンコード \"AUTH\" の使用で初年度が 10% オフに",
|
||||
@@ -258,6 +260,10 @@
|
||||
"areYouSureYouWantToLogout": "本当にログアウトしてよろしいですか?",
|
||||
"yesLogout": "はい、ログアウトします",
|
||||
"exit": "やめる",
|
||||
"theme": "テーマ",
|
||||
"lightTheme": "ライト",
|
||||
"darkTheme": "ダーク",
|
||||
"systemTheme": "システム",
|
||||
"verifyingRecoveryKey": "回復キーを確認中...",
|
||||
"recoveryKeyVerified": "回復キーが確認されました",
|
||||
"recoveryKeySuccessBody": "素晴らしい!回復キーは有効です。ご確認いただきありがとうございます。\n\n回復キーを安全にバックアップしておいてください。",
|
||||
@@ -490,5 +496,10 @@
|
||||
"appLockNotEnabled": "アプリロックが有効になっていません",
|
||||
"appLockNotEnabledDescription": "セキュリティ > アプリロック からアプリロックを有効化してください",
|
||||
"authToViewPasskey": "パスキーを見るには認証してください",
|
||||
"appLockOfflineModeWarning": "バックアップなしで進むことを選択しました。アプリロックを忘れると、データにアクセスできなくなります。"
|
||||
"appLockOfflineModeWarning": "バックアップなしで進むことを選択しました。アプリロックを忘れると、データにアクセスできなくなります。",
|
||||
"duplicateCodes": "重複コード",
|
||||
"noDuplicates": "✨ 重複なし",
|
||||
"plainHTML": "Plain HTML",
|
||||
"tellUsWhatYouThink": "ご意見をお聞かせください",
|
||||
"loginWithAuthAccount": "認証アカウントでログイン"
|
||||
}
|
||||
@@ -16,7 +16,7 @@
|
||||
"secretCanNotBeEmpty": "Paslaptis negali būti tuščia.",
|
||||
"bothIssuerAndAccountCanNotBeEmpty": "Tiek išdavėjas ir paskyra negali būti tušti.",
|
||||
"incorrectDetails": "Neteisingi duomenys",
|
||||
"pleaseVerifyDetails": "Patikrinkite duomenis ir bandykite dar kartą.",
|
||||
"pleaseVerifyDetails": "Patvirtinkite duomenis ir bandykite dar kartą.",
|
||||
"codeIssuerHint": "Išdavėjas",
|
||||
"codeSecretKeyHint": "Slaptasis raktas",
|
||||
"secret": "Paslaptis",
|
||||
@@ -504,5 +504,6 @@
|
||||
"deselectAll": "Naikinti visų pasirinkimą",
|
||||
"selectAll": "Pasirinkti viską",
|
||||
"deleteDuplicates": "Ištrinti dublikatus",
|
||||
"plainHTML": "Grynasis HTML"
|
||||
"plainHTML": "Grynasis HTML",
|
||||
"freeStorageOfferDescription": "Naudokite kodą „AUTH“, kad gautumėte 10 % nuolaida pirmiesiems metams. "
|
||||
}
|
||||
@@ -88,6 +88,8 @@
|
||||
"useRecoveryKey": "Herstelsleutel gebruiken",
|
||||
"incorrectPasswordTitle": "Onjuist wachtwoord",
|
||||
"welcomeBack": "Welkom terug!",
|
||||
"emailAlreadyRegistered": "E-mail is al geregistreerd.",
|
||||
"emailNotRegistered": "E-mail niet geregistreerd.",
|
||||
"madeWithLoveAtPrefix": "met ❤️ gemaakt door",
|
||||
"supportDevs": "Abonneer u op <bold-green>ente</bold-green> om ons te steunen",
|
||||
"supportDiscount": "Gebruik couponcode \"AUTH\" om het eerste jaar 10% korting te krijgen",
|
||||
@@ -502,5 +504,13 @@
|
||||
"deselectAll": "Alles deselecteren",
|
||||
"selectAll": "Alles selecteren",
|
||||
"deleteDuplicates": "Dubbelen verwijderen",
|
||||
"plainHTML": "Alleen HTML"
|
||||
"plainHTML": "Alleen HTML",
|
||||
"tellUsWhatYouThink": "Vertel ons wat je vindt",
|
||||
"dropReview": "Laat een beoordeling achter in de App/Play Store",
|
||||
"supportEnte": "Steun <bold-green>ente</bold-green>",
|
||||
"giveUsAStarOnGithub": "Geef ons een ster op Github",
|
||||
"free5GB": "5GB gratis op <bold-green>ente</bold-green> Photos",
|
||||
"loginWithAuthAccount": "Log in met je Auth account",
|
||||
"freeStorageOffer": "10% korting op <bold-green>ente</bold-green> photos",
|
||||
"freeStorageOfferDescription": "Gebruik de code \"AUTH\" voor 10% korting op je eerste jaar"
|
||||
}
|
||||
@@ -504,5 +504,13 @@
|
||||
"deselectAll": "Odznacz wszystko",
|
||||
"selectAll": "Zaznacz wszystko",
|
||||
"deleteDuplicates": "Usuń duplikaty",
|
||||
"plainHTML": "Zwykły HTML"
|
||||
"plainHTML": "Zwykły HTML",
|
||||
"tellUsWhatYouThink": "Wyraź swoją opinię",
|
||||
"dropReview": "Napisz recenzję w App Store/Play Store",
|
||||
"supportEnte": "Wesprzyj <bold-green>ente</bold-green>",
|
||||
"giveUsAStarOnGithub": "Daj nam gwiazdkę na Githubie",
|
||||
"free5GB": "5 GB za darmo na zdjęcia <bold-green>ente</bold-green>",
|
||||
"loginWithAuthAccount": "Zaloguj się przy użyciu konta Auth",
|
||||
"freeStorageOffer": "10% zniżki na zdjęcia <bold-green>ente</bold-green>",
|
||||
"freeStorageOfferDescription": "Użyj kodu „AUTH”, aby uzyskać 10% zniżki na pierwszy rok"
|
||||
}
|
||||
@@ -6,7 +6,7 @@
|
||||
"@counterAppBarTitle": {
|
||||
"description": "Text shown in the AppBar of the Counter Page"
|
||||
},
|
||||
"onBoardingBody": "Copie com segurança seus códigos 2FA",
|
||||
"onBoardingBody": "Salve com segurança seus códigos 2FA",
|
||||
"onBoardingGetStarted": "Introdução",
|
||||
"setupFirstAccount": "Configure sua primeira conta",
|
||||
"importScanQrCode": "Escanear QR code",
|
||||
@@ -19,7 +19,7 @@
|
||||
"pleaseVerifyDetails": "Verifique os detalhes e tente novamente",
|
||||
"codeIssuerHint": "Emissor",
|
||||
"codeSecretKeyHint": "Chave secreta",
|
||||
"secret": "Segredo",
|
||||
"secret": "Chave secreta",
|
||||
"all": "Todos",
|
||||
"notes": "Notas",
|
||||
"notesLengthLimit": "Notas tem um limite de até {count} caracteres",
|
||||
@@ -504,5 +504,13 @@
|
||||
"deselectAll": "Deselecionar tudo",
|
||||
"selectAll": "Selecionar tudo",
|
||||
"deleteDuplicates": "Excluir duplicados",
|
||||
"plainHTML": "HTML simples"
|
||||
"plainHTML": "HTML simples",
|
||||
"tellUsWhatYouThink": "Diga-nos o que pensa",
|
||||
"dropReview": "Deixe uma avaliação na App/Play Store",
|
||||
"supportEnte": "Apoie o <bold-green>ente.io</bold-green>",
|
||||
"giveUsAStarOnGithub": "Dê-nos uma estrela no Github",
|
||||
"free5GB": "5GB grátis no <bold-green>ente</bold-green> Photos",
|
||||
"loginWithAuthAccount": "Registrar-se com sua conta Auth",
|
||||
"freeStorageOffer": "10% de desconto no <bold-green>ente</bold-green> photos",
|
||||
"freeStorageOfferDescription": "Use o cupom \"AUTH\" para obter 10% de desconto no primeiro ano"
|
||||
}
|
||||
@@ -88,6 +88,8 @@
|
||||
"useRecoveryKey": "Использовать ключ восстановления",
|
||||
"incorrectPasswordTitle": "Неправильный пароль",
|
||||
"welcomeBack": "С возвращением!",
|
||||
"emailAlreadyRegistered": "Адрес электронной почты уже зарегистрирован.",
|
||||
"emailNotRegistered": "Адрес электронной почты не зарегистрирован.",
|
||||
"madeWithLoveAtPrefix": "сделана с ❤️ в ",
|
||||
"supportDevs": "Подпишитесь на <bold-green>ente</bold-green> для поддержки нашего проекта",
|
||||
"supportDiscount": "Используйте код скидки \"AUTH\", чтобы получить скидку 10% на первый год",
|
||||
@@ -257,6 +259,10 @@
|
||||
"areYouSureYouWantToLogout": "Вы уверены, что хотите выйти?",
|
||||
"yesLogout": "Да, выйти",
|
||||
"exit": "Выйти",
|
||||
"theme": "Тема",
|
||||
"lightTheme": "Светлая",
|
||||
"darkTheme": "Тёмная",
|
||||
"systemTheme": "Системная",
|
||||
"verifyingRecoveryKey": "Проверка ключа восстановления...",
|
||||
"recoveryKeyVerified": "Ключ восстановления подтвержден",
|
||||
"recoveryKeySuccessBody": "Отлично! Ваш ключ восстановления действителен. Спасибо за проверку.\n\nПожалуйста, не забудьте сохранить ключ восстановления безопасно.",
|
||||
@@ -327,6 +333,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"mostRecentlyUsed": "Недавно использованные",
|
||||
"activeSessions": "Активные сеансы",
|
||||
"somethingWentWrongPleaseTryAgain": "Что-то пошло не так. Попробуйте еще раз",
|
||||
"thisWillLogYouOutOfThisDevice": "Вы выйдете из этого устройства!",
|
||||
@@ -482,5 +489,9 @@
|
||||
"appLockNotEnabled": "Блокировка приложения отключена",
|
||||
"appLockNotEnabledDescription": "Пожалуйста, включите блокировку приложения в безопасности > Блокировка приложений",
|
||||
"authToViewPasskey": "Пожалуйста, авторизуйтесь, чтобы просмотреть пароль",
|
||||
"appLockOfflineModeWarning": "Вы решили продолжить работу без резервного копирования. Если вы забудете свой пароль, доступ к вашим данным будет заблокирован."
|
||||
"appLockOfflineModeWarning": "Вы решили продолжить работу без резервного копирования. Если вы забудете свой пароль, доступ к вашим данным будет заблокирован.",
|
||||
"duplicateCodes": "Дублировать коды",
|
||||
"noDuplicates": "✨ Дубликатов нет",
|
||||
"selectAll": "Выбрать все",
|
||||
"plainHTML": "Обычный HTML"
|
||||
}
|
||||
@@ -88,6 +88,8 @@
|
||||
"useRecoveryKey": "Använd återställningsnyckel",
|
||||
"incorrectPasswordTitle": "Felaktigt lösenord",
|
||||
"welcomeBack": "Välkommen tillbaka!",
|
||||
"emailAlreadyRegistered": "E-postadress redan registrerad.",
|
||||
"emailNotRegistered": "E-postadress ej registrerad.",
|
||||
"madeWithLoveAtPrefix": "gjord med ❤️ av ",
|
||||
"supportDevs": "Prenumerera på <bold-green>ente</bold-green> för att stödja oss",
|
||||
"supportDiscount": "Använd kupongkoden \"AUTH\" för att få 10% rabatt första året",
|
||||
@@ -321,7 +323,11 @@
|
||||
"terminate": "Avsluta",
|
||||
"thisDevice": "Den här enheten",
|
||||
"thisEmailIsAlreadyInUse": "Denna e-postadress används redan",
|
||||
"verificationFailedPleaseTryAgain": "Verifiering misslyckades, vänligen försök igen",
|
||||
"yourVerificationCodeHasExpired": "Din verifieringskod har upphört att gälla",
|
||||
"incorrectCode": "Felaktig kod",
|
||||
"sorryTheCodeYouveEnteredIsIncorrect": "Tyvärr, den kod som du har angett är felaktig",
|
||||
"authenticationFailedPleaseTryAgain": "Autentisering misslyckades, vänligen försök igen",
|
||||
"authenticationSuccessful": "Autentisering lyckades!",
|
||||
"twofactorAuthenticationSuccessfullyReset": "Tvåfaktorsautentisering återställd",
|
||||
"incorrectRecoveryKey": "Felaktig återställningsnyckel",
|
||||
|
||||
@@ -504,5 +504,13 @@
|
||||
"deselectAll": "取消全选",
|
||||
"selectAll": "全选",
|
||||
"deleteDuplicates": "删除重复项",
|
||||
"plainHTML": "Plain HTML"
|
||||
"plainHTML": "Plain HTML",
|
||||
"tellUsWhatYouThink": "告诉我们您的想法",
|
||||
"dropReview": "在 App Store/Play 商店上发表评测",
|
||||
"supportEnte": "支持 <bold-green>ente</bold-green>",
|
||||
"giveUsAStarOnGithub": "在 Github 上给我们一个星标",
|
||||
"free5GB": "<bold-green>ente</bold-green> Photos 上 5GB 可用空间",
|
||||
"loginWithAuthAccount": "使用您的认证账户登录",
|
||||
"freeStorageOffer": "购买 <bold-green>ente</bold-green> Photos 可享受 10% 优惠",
|
||||
"freeStorageOfferDescription": "使用优惠码“AUTH”可享受首年 10% 折扣"
|
||||
}
|
||||
@@ -71,6 +71,7 @@ void main() async {
|
||||
await WindowListenerService.instance.init();
|
||||
WindowOptions windowOptions = WindowOptions(
|
||||
size: WindowListenerService.instance.getWindowSize(),
|
||||
maximumSize: const Size(8192, 8192),
|
||||
);
|
||||
await windowManager.waitUntilReadyToShow(windowOptions, () async {
|
||||
await DirectoryUtils.migrateNamingChanges();
|
||||
@@ -103,7 +104,12 @@ Future<void> _runInForeground() async {
|
||||
final savedThemeMode = _themeMode(await AdaptiveTheme.getThemeMode());
|
||||
return await _runWithLogs(() async {
|
||||
_logger.info("Starting app in foreground");
|
||||
await _init(false, via: 'mainMethod');
|
||||
try {
|
||||
await _init(false, via: 'mainMethod');
|
||||
} catch (e, s) {
|
||||
_logger.severe("Failed to init", e, s);
|
||||
rethrow;
|
||||
}
|
||||
final Locale? locale = await getLocale(noFallback: true);
|
||||
unawaited(UpdateService.instance.showUpdateNotification());
|
||||
runApp(
|
||||
@@ -155,7 +161,7 @@ void _registerWindowsProtocol() {
|
||||
|
||||
Future<void> _init(bool bool, {String? via}) async {
|
||||
_registerWindowsProtocol();
|
||||
await initCryptoUtil();
|
||||
await CryptoUtil.init();
|
||||
|
||||
await PreferenceService.instance.init();
|
||||
await CodeStore.instance.init();
|
||||
|
||||
@@ -7,7 +7,5 @@ String twoFactorTypeToString(TwoFactorType type) {
|
||||
return "totp";
|
||||
case TwoFactorType.passkey:
|
||||
return "passkey";
|
||||
default:
|
||||
return type.name;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -364,12 +364,13 @@ class _SetupEnterSecretKeyPageState extends State<SetupEnterSecretKeyPage> {
|
||||
widget.code?.display.copyWith(tags: selectedTags) ??
|
||||
CodeDisplay(tags: selectedTags);
|
||||
display.note = notes;
|
||||
|
||||
if (widget.code!.issuer != issuer) {
|
||||
display.iconID = issuer.toLowerCase();
|
||||
}
|
||||
if (widget.code!.display.iconID != _customIconID.toLowerCase()) {
|
||||
display.iconID = _customIconID.toLowerCase();
|
||||
if (widget.code != null) {
|
||||
if (widget.code!.issuer != issuer) {
|
||||
display.iconID = issuer.toLowerCase();
|
||||
}
|
||||
if (widget.code!.display.iconID != _customIconID.toLowerCase()) {
|
||||
display.iconID = _customIconID.toLowerCase();
|
||||
}
|
||||
}
|
||||
|
||||
display.iconSrc =
|
||||
|
||||
@@ -23,6 +23,7 @@ class PreferenceService {
|
||||
static const kShouldAutoFocusOnSearchBar = "should_auto_focus_on_search_bar";
|
||||
static const kShouldMinimizeOnCopy = "should_minimize_on_copy";
|
||||
static const kCompactMode = "vi.compactMode";
|
||||
static const kAppInstallTime = "appInstallTime";
|
||||
|
||||
Future<void> init() async {
|
||||
_prefs = await SharedPreferences.getInstance();
|
||||
@@ -103,4 +104,14 @@ class PreferenceService {
|
||||
Future<void> setShouldMinimizeOnCopy(bool value) async {
|
||||
await _prefs.setBool(kShouldMinimizeOnCopy, value);
|
||||
}
|
||||
|
||||
int getAppInstalledTime() {
|
||||
if (_prefs.containsKey(kAppInstallTime)) {
|
||||
return _prefs.getInt(kAppInstallTime)!;
|
||||
} else {
|
||||
int installedTimeinMillis = DateTime.now().millisecondsSinceEpoch;
|
||||
_prefs.setInt(kAppInstallTime, installedTimeinMillis).ignore();
|
||||
return installedTimeinMillis;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -689,7 +689,7 @@ class UserService {
|
||||
"${_config.getHttpEndpoint()}/users/srp/create-session",
|
||||
data: {
|
||||
"srpUserID": srpAttributes.srpUserID,
|
||||
"srpA": base64Encode(SRP6Util.encodeBigInt(A!)),
|
||||
"srpA": base64Encode(SRP6Util.getPadded(A!, 512)),
|
||||
},
|
||||
);
|
||||
final String sessionID = createSessionResponse.data["sessionID"];
|
||||
@@ -705,7 +705,7 @@ class UserService {
|
||||
data: {
|
||||
"sessionID": sessionID,
|
||||
"srpUserID": srpAttributes.srpUserID,
|
||||
"srpM1": base64Encode(SRP6Util.encodeBigInt(clientM!)),
|
||||
"srpM1": base64Encode(SRP6Util.getPadded(clientM!, 32)),
|
||||
},
|
||||
);
|
||||
if (response.statusCode == 200) {
|
||||
@@ -877,6 +877,7 @@ class UserService {
|
||||
"twoFactorType": twoFactorTypeToString(type),
|
||||
},
|
||||
);
|
||||
await dialog.hide();
|
||||
if (response.statusCode == 200) {
|
||||
// ignore: unawaited_futures
|
||||
Navigator.of(context).pushAndRemoveUntil(
|
||||
@@ -974,6 +975,7 @@ class UserService {
|
||||
"twoFactorType": twoFactorTypeToString(type),
|
||||
},
|
||||
);
|
||||
await dialog.hide();
|
||||
if (response.statusCode == 200) {
|
||||
showShortToast(
|
||||
context,
|
||||
|
||||
@@ -1,10 +1,15 @@
|
||||
import 'dart:async';
|
||||
import 'dart:ui';
|
||||
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import 'package:window_manager/window_manager.dart';
|
||||
|
||||
class WindowListenerService {
|
||||
static const double minWindowHeight = 320.0;
|
||||
static const double minWindowWidth = 800.0;
|
||||
static const double maxWindowHeight = 8192.0;
|
||||
static const double maxWindowWidth = 8192.0;
|
||||
late SharedPreferences _preferences;
|
||||
|
||||
WindowListenerService._privateConstructor();
|
||||
@@ -17,20 +22,20 @@ class WindowListenerService {
|
||||
}
|
||||
|
||||
Size getWindowSize() {
|
||||
final double windowWidth = _preferences.getDouble('windowWidth') ?? 450.0;
|
||||
final double windowHeight = _preferences.getDouble('windowHeight') ?? 800.0;
|
||||
return Size(windowWidth, windowHeight);
|
||||
final double windowWidth =
|
||||
_preferences.getDouble('windowWidth') ?? minWindowWidth;
|
||||
final double windowHeight =
|
||||
_preferences.getDouble('windowHeight') ?? minWindowHeight;
|
||||
final w = windowWidth.clamp(200.0, maxWindowWidth);
|
||||
final h = windowHeight.clamp(400.0, maxWindowHeight);
|
||||
return Size(w, h);
|
||||
}
|
||||
|
||||
Future<void> onWindowResize() async {
|
||||
final width = (await windowManager.getSize()).width;
|
||||
final height = (await windowManager.getSize()).height;
|
||||
// Save the window size to shared preferences
|
||||
await _preferences.setDouble(
|
||||
'windowWidth',
|
||||
(await windowManager.getSize()).width,
|
||||
);
|
||||
await _preferences.setDouble(
|
||||
'windowHeight',
|
||||
(await windowManager.getSize()).height,
|
||||
);
|
||||
await _preferences.setDouble('windowWidth', width);
|
||||
await _preferences.setDouble('windowHeight', height);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -64,22 +64,6 @@ class CodeStore {
|
||||
return true;
|
||||
}
|
||||
|
||||
Future<void> updateCodeIndex(Code code) async {
|
||||
final key = code.generatedID!;
|
||||
|
||||
_cacheCodes.remove(key);
|
||||
int deletedIndex = code.display.position;
|
||||
|
||||
_cacheCodes.forEach((key, c) async {
|
||||
if (c.display.position > deletedIndex) {
|
||||
Code updatedCode = c.copyWith(
|
||||
display: c.display.copyWith(position: c.display.position - 1),
|
||||
);
|
||||
await addCode(updatedCode);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Future<List<Code>> getAllCodes({
|
||||
AccountMode? accountMode,
|
||||
bool sortCodes = true,
|
||||
@@ -179,7 +163,6 @@ class CodeStore {
|
||||
Future<void> removeCode(Code code, {AccountMode? accountMode}) async {
|
||||
final mode = accountMode ?? _authenticatorService.getAccountMode();
|
||||
await _authenticatorService.deleteEntry(code.generatedID!, mode);
|
||||
await updateCodeIndex(code);
|
||||
Bus.instance.fire(CodesUpdatedEvent());
|
||||
}
|
||||
|
||||
|
||||
@@ -33,12 +33,14 @@ class CodeWidget extends StatefulWidget {
|
||||
final Code code;
|
||||
final bool isCompactMode;
|
||||
final CodeSortKey? sortKey;
|
||||
final bool isReordering;
|
||||
|
||||
const CodeWidget(
|
||||
this.code, {
|
||||
super.key,
|
||||
required this.isCompactMode,
|
||||
this.sortKey,
|
||||
this.isReordering = false,
|
||||
});
|
||||
|
||||
@override
|
||||
@@ -100,7 +102,7 @@ class _CodeWidgetState extends State<CodeWidget> {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
ignorePin = widget.sortKey == null || widget.sortKey == CodeSortKey.manual;
|
||||
ignorePin = widget.sortKey != null && widget.sortKey == CodeSortKey.manual;
|
||||
final colorScheme = getEnteColorScheme(context);
|
||||
if (isMaskingEnabled != PreferenceService.instance.shouldHideCodes()) {
|
||||
isMaskingEnabled = PreferenceService.instance.shouldHideCodes();
|
||||
@@ -222,25 +224,27 @@ class _CodeWidgetState extends State<CodeWidget> {
|
||||
);
|
||||
}
|
||||
: null,
|
||||
onLongPress: () {
|
||||
showModalBottomSheet(
|
||||
context: context,
|
||||
builder: (_) {
|
||||
return BottomActionBarWidget(
|
||||
code: widget.code,
|
||||
showPin: !ignorePin,
|
||||
onEdit: () => _onEditPressed(true),
|
||||
onShare: () => _onSharePressed(true),
|
||||
onPin: () => _onPinPressed(true),
|
||||
onTrashed: () => _onTrashPressed(true),
|
||||
onDelete: () => _onDeletePressed(true),
|
||||
onRestore: () => _onRestoreClicked(true),
|
||||
onShowQR: () => _onShowQrPressed(true),
|
||||
onCancel: () => Navigator.of(context).pop(),
|
||||
);
|
||||
},
|
||||
);
|
||||
},
|
||||
onLongPress: widget.isReordering
|
||||
? null
|
||||
: () {
|
||||
showModalBottomSheet(
|
||||
context: context,
|
||||
builder: (_) {
|
||||
return BottomActionBarWidget(
|
||||
code: widget.code,
|
||||
showPin: !ignorePin,
|
||||
onEdit: () => _onEditPressed(true),
|
||||
onShare: () => _onSharePressed(true),
|
||||
onPin: () => _onPinPressed(true),
|
||||
onTrashed: () => _onTrashPressed(true),
|
||||
onDelete: () => _onDeletePressed(true),
|
||||
onRestore: () => _onRestoreClicked(true),
|
||||
onShowQR: () => _onShowQrPressed(true),
|
||||
onCancel: () => Navigator.of(context).pop(),
|
||||
);
|
||||
},
|
||||
);
|
||||
},
|
||||
child: getCardContents(l10n),
|
||||
),
|
||||
),
|
||||
@@ -645,7 +649,12 @@ class _CodeWidgetState extends State<CodeWidget> {
|
||||
firstButtonLabel: l10n.delete,
|
||||
isCritical: true,
|
||||
firstButtonOnTap: () async {
|
||||
await CodeStore.instance.removeCode(widget.code);
|
||||
try {
|
||||
await CodeStore.instance.removeCode(widget.code);
|
||||
} catch (e, s) {
|
||||
logger.severe('Failed to delete code', e, s);
|
||||
showGenericErrorDialog(context: context, error: e).ignore();
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
202
auth/lib/ui/components/banner_widget.dart
Normal file
@@ -0,0 +1,202 @@
|
||||
import 'package:dotted_border/dotted_border.dart';
|
||||
import 'package:ente_auth/services/update_service.dart';
|
||||
import 'package:ente_auth/theme/ente_theme.dart';
|
||||
import 'package:ente_auth/utils/platform_util.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:styled_text/tags/styled_text_tag.dart';
|
||||
import 'package:styled_text/widgets/styled_text.dart';
|
||||
import 'package:url_launcher/url_launcher.dart';
|
||||
|
||||
enum BannerType {
|
||||
rateUs,
|
||||
starUs,
|
||||
freeStorage,
|
||||
discount,
|
||||
}
|
||||
|
||||
class BannerWidget extends StatelessWidget {
|
||||
final String text;
|
||||
final String? subText;
|
||||
final BannerType type;
|
||||
final TextStyle? mainTextStyle;
|
||||
|
||||
const BannerWidget({
|
||||
super.key,
|
||||
required this.text,
|
||||
required this.type,
|
||||
this.subText,
|
||||
this.mainTextStyle,
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
bool isLightMode =
|
||||
MediaQuery.of(context).platformBrightness == Brightness.light;
|
||||
|
||||
final colorScheme = getEnteColorScheme(context);
|
||||
Color dashColor;
|
||||
List<BoxShadow>? boxShadow;
|
||||
String imagePath;
|
||||
Uri? url;
|
||||
final result = UpdateService.instance.getRateDetails();
|
||||
final String rateUrl = result.item2;
|
||||
|
||||
switch (type) {
|
||||
case BannerType.rateUs:
|
||||
if (PlatformUtil.isMobile()) {
|
||||
url = Uri.parse(rateUrl);
|
||||
} else if (PlatformUtil.isDesktop()) {
|
||||
url = Uri.parse(
|
||||
"https://play.google.com/store/apps/details?id=io.ente.auth",
|
||||
);
|
||||
}
|
||||
imagePath = "assets/rate_us.png";
|
||||
dashColor = const Color.fromRGBO(255, 191, 12, 1);
|
||||
boxShadow = [
|
||||
BoxShadow(
|
||||
color: const Color(0xFFFDB816).withOpacity(0.1),
|
||||
blurRadius: 50,
|
||||
spreadRadius: 80,
|
||||
),
|
||||
BoxShadow(
|
||||
color: const Color(0xFFFDB816).withOpacity(0.2),
|
||||
blurRadius: 25,
|
||||
),
|
||||
];
|
||||
break;
|
||||
|
||||
case BannerType.starUs:
|
||||
url = Uri.parse("https://github.com/ente-io/ente");
|
||||
imagePath = "assets/star_us.png";
|
||||
dashColor = const Color.fromRGBO(233, 233, 233, 1);
|
||||
boxShadow = [
|
||||
BoxShadow(
|
||||
color: const Color.fromRGBO(78, 78, 78, 1).withOpacity(0.2),
|
||||
blurRadius: 50,
|
||||
spreadRadius: 100,
|
||||
),
|
||||
BoxShadow(
|
||||
color: const Color.fromRGBO(23, 22, 22, 0.30).withOpacity(0.1),
|
||||
blurRadius: 25,
|
||||
),
|
||||
];
|
||||
break;
|
||||
|
||||
case BannerType.freeStorage:
|
||||
imagePath = "assets/ente_5gb.png";
|
||||
dashColor = const Color.fromRGBO(29, 185, 84, 1);
|
||||
boxShadow = [
|
||||
BoxShadow(
|
||||
color: const Color.fromRGBO(38, 203, 95, 1).withOpacity(0.08),
|
||||
blurRadius: 50,
|
||||
spreadRadius: 100,
|
||||
),
|
||||
BoxShadow(
|
||||
color: const Color.fromRGBO(0, 0, 0, 0.50).withOpacity(0.08),
|
||||
blurRadius: 25,
|
||||
),
|
||||
];
|
||||
break;
|
||||
|
||||
case BannerType.discount:
|
||||
dashColor = const Color.fromRGBO(29, 185, 84, 1);
|
||||
imagePath = "assets/discount.png";
|
||||
boxShadow = [
|
||||
BoxShadow(
|
||||
color: const Color.fromRGBO(38, 203, 95, 1).withOpacity(0.08),
|
||||
blurRadius: 50,
|
||||
spreadRadius: 100,
|
||||
),
|
||||
BoxShadow(
|
||||
color: const Color.fromRGBO(0, 0, 0, 0.50).withOpacity(0.08),
|
||||
blurRadius: 25,
|
||||
),
|
||||
];
|
||||
break;
|
||||
}
|
||||
return GestureDetector(
|
||||
onTap: () {
|
||||
url != null ? launchUrl(url) : null;
|
||||
},
|
||||
child: ClipRRect(
|
||||
borderRadius: const BorderRadius.all(Radius.circular(50)),
|
||||
child: DottedBorder(
|
||||
borderType: BorderType.RRect,
|
||||
radius: const Radius.circular(50),
|
||||
dashPattern: const <double>[3, 3],
|
||||
color: dashColor,
|
||||
child: Stack(
|
||||
children: [
|
||||
if (BannerType.starUs == type)
|
||||
Positioned(
|
||||
right: 0,
|
||||
top: 0,
|
||||
bottom: 0,
|
||||
child: ClipRRect(
|
||||
borderRadius: const BorderRadius.all(Radius.circular(50)),
|
||||
child: isLightMode
|
||||
? Image.asset("assets/calender_banner_light.png")
|
||||
: Image.asset("assets/calender_banner_dark.png"),
|
||||
),
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
Stack(
|
||||
alignment: Alignment.center,
|
||||
children: [
|
||||
if (!isLightMode)
|
||||
Container(
|
||||
height: 80,
|
||||
width: 80,
|
||||
decoration: BoxDecoration(
|
||||
shape: BoxShape.circle,
|
||||
boxShadow: boxShadow,
|
||||
),
|
||||
),
|
||||
Padding(
|
||||
padding: const EdgeInsets.all(10.0),
|
||||
child: SizedBox(
|
||||
height: 60,
|
||||
width: 60,
|
||||
child: Image.asset(imagePath),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
Expanded(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
StyledText(
|
||||
text: text,
|
||||
style: getEnteTextTheme(context).large,
|
||||
textAlign: TextAlign.left,
|
||||
tags: {
|
||||
'bold-green': StyledTextTag(
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.bold,
|
||||
color: colorScheme.primaryGreen,
|
||||
),
|
||||
),
|
||||
},
|
||||
),
|
||||
const SizedBox(height: 5),
|
||||
Text(
|
||||
subText ?? "",
|
||||
textAlign: TextAlign.left,
|
||||
style: const TextStyle(
|
||||
color: Colors.grey,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -210,7 +210,7 @@ class _MenuItemWidgetState extends State<MenuItemWidget> {
|
||||
|
||||
Future<void> _onTap() async {
|
||||
if (executionStateNotifier.value == ExecutionState.inProgress ||
|
||||
executionStateNotifier.value == ExecutionState.successful) return;
|
||||
executionStateNotifier.value == ExecutionState.successful) {return;}
|
||||
_debouncer.run(
|
||||
() => Future(
|
||||
() {
|
||||
@@ -247,7 +247,7 @@ class _MenuItemWidgetState extends State<MenuItemWidget> {
|
||||
|
||||
void _onTapDown(details) {
|
||||
if (executionStateNotifier.value == ExecutionState.inProgress ||
|
||||
executionStateNotifier.value == ExecutionState.successful) return;
|
||||
executionStateNotifier.value == ExecutionState.successful) {return;}
|
||||
setState(() {
|
||||
if (widget.pressedColor == null) {
|
||||
hasPassedGestureCallbacks()
|
||||
@@ -265,7 +265,7 @@ class _MenuItemWidgetState extends State<MenuItemWidget> {
|
||||
|
||||
void _onTapUp(details) {
|
||||
if (executionStateNotifier.value == ExecutionState.inProgress ||
|
||||
executionStateNotifier.value == ExecutionState.successful) return;
|
||||
executionStateNotifier.value == ExecutionState.successful) {return;}
|
||||
Future.delayed(
|
||||
const Duration(milliseconds: 100),
|
||||
() => setState(() {
|
||||
@@ -276,7 +276,7 @@ class _MenuItemWidgetState extends State<MenuItemWidget> {
|
||||
|
||||
void _onCancel() {
|
||||
if (executionStateNotifier.value == ExecutionState.inProgress ||
|
||||
executionStateNotifier.value == ExecutionState.successful) return;
|
||||
executionStateNotifier.value == ExecutionState.successful) {return;}
|
||||
setState(() {
|
||||
menuItemColor = widget.menuItemColor;
|
||||
});
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import 'package:ente_auth/l10n/l10n.dart';
|
||||
import 'package:ente_auth/services/auth_feature_flag.dart';
|
||||
import 'package:ente_auth/theme/ente_theme.dart';
|
||||
import 'package:ente_auth/ui/settings/data/import_page.dart';
|
||||
import 'package:ente_auth/utils/navigation_util.dart';
|
||||
@@ -10,13 +9,11 @@ import 'package:logging/logging.dart';
|
||||
class HomeEmptyStateWidget extends StatelessWidget {
|
||||
final VoidCallback? onScanTap;
|
||||
final VoidCallback? onManuallySetupTap;
|
||||
final VoidCallback? onImportFromGallery;
|
||||
|
||||
const HomeEmptyStateWidget({
|
||||
super.key,
|
||||
required this.onScanTap,
|
||||
required this.onManuallySetupTap,
|
||||
this.onImportFromGallery,
|
||||
});
|
||||
|
||||
@override
|
||||
@@ -62,23 +59,6 @@ class HomeEmptyStateWidget extends StatelessWidget {
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 18),
|
||||
if (PlatformUtil.isMobile() &&
|
||||
FeatureFlagService.instance
|
||||
.isInternalUserOrDebugBuild())
|
||||
SizedBox(
|
||||
width: 400,
|
||||
child: OutlinedButton(
|
||||
onPressed: onImportFromGallery,
|
||||
style: OutlinedButton.styleFrom(
|
||||
padding: const EdgeInsets.symmetric(vertical: 8),
|
||||
),
|
||||
child: const Text(
|
||||
"Import from gallery",
|
||||
textAlign: TextAlign.center,
|
||||
),
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 18),
|
||||
SizedBox(
|
||||
width: 400,
|
||||
child: OutlinedButton(
|
||||
|
||||
@@ -14,7 +14,6 @@ import 'package:ente_auth/models/code.dart';
|
||||
import 'package:ente_auth/onboarding/model/tag_enums.dart';
|
||||
import 'package:ente_auth/onboarding/view/common/tag_chip.dart';
|
||||
import 'package:ente_auth/onboarding/view/setup_enter_secret_key_page.dart';
|
||||
import 'package:ente_auth/services/auth_feature_flag.dart';
|
||||
import 'package:ente_auth/services/preference_service.dart';
|
||||
import 'package:ente_auth/services/user_service.dart';
|
||||
import 'package:ente_auth/store/code_display_store.dart';
|
||||
@@ -40,7 +39,6 @@ import 'package:ente_auth/utils/dialog_util.dart';
|
||||
import 'package:ente_auth/utils/lock_screen_settings.dart';
|
||||
import 'package:ente_auth/utils/platform_util.dart';
|
||||
import 'package:ente_auth/utils/totp_util.dart';
|
||||
import 'package:file_picker/file_picker.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
@@ -48,7 +46,6 @@ import 'package:flutter_speed_dial/flutter_speed_dial.dart';
|
||||
import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';
|
||||
import 'package:logging/logging.dart';
|
||||
import 'package:move_to_background/move_to_background.dart';
|
||||
import 'package:scan/scan.dart';
|
||||
|
||||
class HomePage extends StatefulWidget {
|
||||
const HomePage({super.key});
|
||||
@@ -93,8 +90,8 @@ class _HomePageState extends State<HomePage> {
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_textController.addListener(_applyFilteringAndRefresh);
|
||||
_codeSortKey = PreferenceService.instance.codeSortKey();
|
||||
_textController.addListener(_applyFilteringAndRefresh);
|
||||
_loadCodes();
|
||||
_streamSubscription = Bus.instance.on<CodesUpdatedEvent>().listen((event) {
|
||||
_loadCodes();
|
||||
@@ -274,7 +271,6 @@ class _HomePageState extends State<HomePage> {
|
||||
);
|
||||
break;
|
||||
case CodeSortKey.manual:
|
||||
default:
|
||||
codes.sort((a, b) => a.display.position.compareTo(b.display.position));
|
||||
break;
|
||||
}
|
||||
@@ -483,7 +479,6 @@ class _HomePageState extends State<HomePage> {
|
||||
return HomeEmptyStateWidget(
|
||||
onScanTap: _redirectToScannerPage,
|
||||
onManuallySetupTap: _redirectToManualEntryPage,
|
||||
onImportFromGallery: _importFromGallery,
|
||||
);
|
||||
} else {
|
||||
final anyCodeHasError =
|
||||
@@ -585,7 +580,7 @@ class _HomePageState extends State<HomePage> {
|
||||
|
||||
return ClipRect(
|
||||
child: CodeWidget(
|
||||
key: ValueKey('${code.hashCode}_$newIndex'),
|
||||
key: ValueKey('${code.hashCode}_${newIndex}_$_codeSortKey'),
|
||||
code,
|
||||
isCompactMode: isCompactMode,
|
||||
sortKey: _codeSortKey,
|
||||
@@ -621,6 +616,7 @@ class _HomePageState extends State<HomePage> {
|
||||
key: ValueKey('${codeState.hashCode}_$index'),
|
||||
codeState,
|
||||
isCompactMode: isCompactMode,
|
||||
sortKey: _codeSortKey,
|
||||
);
|
||||
}),
|
||||
itemCount: _filteredCodes.length,
|
||||
@@ -671,16 +667,24 @@ class _HomePageState extends State<HomePage> {
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
int lastScanTime = DateTime.now().millisecondsSinceEpoch - 1000;
|
||||
void _handleDeeplink(BuildContext context, String? link) {
|
||||
if (!Configuration.instance.hasConfiguredAccount() || link == null) {
|
||||
bool isAccountConfigured = Configuration.instance.hasConfiguredAccount();
|
||||
bool isOfflineModeEnabled = Configuration.instance.hasOptedForOfflineMode() &&
|
||||
Configuration.instance.getOfflineSecretKey() != null;
|
||||
if (!(isAccountConfigured || isOfflineModeEnabled) || link == null) {
|
||||
return;
|
||||
}
|
||||
if (DateTime.now().millisecondsSinceEpoch - lastScanTime < 1000) {
|
||||
_logger.info("Ignoring potential event for same deeplink");
|
||||
return;
|
||||
}
|
||||
lastScanTime = DateTime.now().millisecondsSinceEpoch;
|
||||
if (mounted && link.toLowerCase().startsWith("otpauth://")) {
|
||||
try {
|
||||
final newCode = Code.fromOTPAuthUrl(link);
|
||||
getNextTotp(newCode);
|
||||
CodeStore.instance.addCode(newCode);
|
||||
CodeStore.instance.addCode(newCode, shouldSync: false);
|
||||
_focusNewCode(newCode);
|
||||
} catch (e, s) {
|
||||
showGenericErrorDialog(
|
||||
@@ -699,29 +703,6 @@ class _HomePageState extends State<HomePage> {
|
||||
_applyFilteringAndRefresh();
|
||||
}
|
||||
|
||||
Future<void> _importFromGallery() async {
|
||||
try {
|
||||
final FilePickerResult? result = await FilePicker.platform.pickFiles(
|
||||
type: FileType.image,
|
||||
allowMultiple: false,
|
||||
);
|
||||
if (result != null) {
|
||||
final path = result.files.single.path!;
|
||||
String? res = await Scan.parse(path);
|
||||
final Code? code = res != null ? Code.fromOTPAuthUrl(res) : null;
|
||||
if (code != null) {
|
||||
await CodeStore.instance.addCode(code);
|
||||
if ((_allCodes?.where((e) => !e.hasError).length ?? 0) > 2) {
|
||||
_focusNewCode(code);
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (e, s) {
|
||||
await showGenericErrorDialog(context: context, error: e);
|
||||
_logger.severe("Error while importing from gallery", e, s);
|
||||
}
|
||||
}
|
||||
|
||||
Widget _getFab() {
|
||||
if (PlatformUtil.isDesktop()) {
|
||||
return FloatingActionButton(
|
||||
@@ -752,15 +733,6 @@ class _HomePageState extends State<HomePage> {
|
||||
labelWidget: SpeedDialLabelWidget(context.l10n.scanAQrCode),
|
||||
onTap: _redirectToScannerPage,
|
||||
),
|
||||
if (PlatformUtil.isMobile() &&
|
||||
FeatureFlagService.instance.isInternalUserOrDebugBuild())
|
||||
SpeedDialChild(
|
||||
child: const Icon(Icons.image),
|
||||
foregroundColor: Theme.of(context).colorScheme.fabForegroundColor,
|
||||
backgroundColor: Theme.of(context).colorScheme.fabBackgroundColor,
|
||||
labelWidget: const SpeedDialLabelWidget("Import from gallery"),
|
||||
onTap: _importFromGallery,
|
||||
),
|
||||
SpeedDialChild(
|
||||
child: const Icon(Icons.keyboard),
|
||||
foregroundColor: Theme.of(context).colorScheme.fabForegroundColor,
|
||||
|
||||
@@ -90,6 +90,7 @@ class _ReorderCodesPageState extends State<ReorderCodesPage> {
|
||||
key: ValueKey(code.generatedID),
|
||||
code,
|
||||
isCompactMode: isCompactMode,
|
||||
isReordering: true,
|
||||
),
|
||||
),
|
||||
],
|
||||
|
||||
111
auth/lib/ui/settings/notification_banner_widget.dart
Normal file
@@ -0,0 +1,111 @@
|
||||
import 'package:ente_auth/core/configuration.dart';
|
||||
import 'package:ente_auth/l10n/l10n.dart';
|
||||
import 'package:ente_auth/models/user_details.dart';
|
||||
import 'package:ente_auth/services/preference_service.dart';
|
||||
import 'package:ente_auth/services/user_service.dart';
|
||||
import 'package:ente_auth/ui/components/banner_widget.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class NotificationBannerWidget extends StatelessWidget {
|
||||
const NotificationBannerWidget({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
List<Widget> contents = [];
|
||||
const sectionSpacing = SizedBox(height: 14);
|
||||
final currentTime = DateTime.now();
|
||||
final appInstallTime = PreferenceService.instance.getAppInstalledTime();
|
||||
final differenceInDays = currentTime
|
||||
.difference(DateTime.fromMillisecondsSinceEpoch(appInstallTime))
|
||||
.inDays;
|
||||
final l10n = context.l10n;
|
||||
|
||||
if (Configuration.instance.hasConfiguredAccount()) {
|
||||
return FutureBuilder<UserDetails>(
|
||||
future: UserService.instance.getUserDetailsV2(),
|
||||
builder: (context, snapshot) {
|
||||
if (snapshot.hasData) {
|
||||
final userDetails = snapshot.data;
|
||||
|
||||
if (differenceInDays >= 0 && differenceInDays <= 3) {
|
||||
return const SizedBox.shrink();
|
||||
} else if (differenceInDays >= 4 && differenceInDays <= 7) {
|
||||
contents.clear();
|
||||
contents.addAll(
|
||||
[
|
||||
BannerWidget(
|
||||
text: l10n.tellUsWhatYouThink,
|
||||
subText: l10n.dropReview,
|
||||
type: BannerType.rateUs,
|
||||
),
|
||||
sectionSpacing,
|
||||
BannerWidget(
|
||||
text: l10n.supportEnte,
|
||||
subText: l10n.giveUsAStarOnGithub,
|
||||
type: BannerType.starUs,
|
||||
),
|
||||
],
|
||||
);
|
||||
return buildWidget(context, contents);
|
||||
} else if (differenceInDays >= 7 && differenceInDays <= 30) {
|
||||
if (userDetails?.usage == 0) {
|
||||
contents.clear();
|
||||
contents.addAll(
|
||||
[
|
||||
BannerWidget(
|
||||
text: l10n.free5GB,
|
||||
subText: l10n.loginWithAuthAccount,
|
||||
type: BannerType.freeStorage,
|
||||
),
|
||||
],
|
||||
);
|
||||
} else if (userDetails!.usage < 5 * 1024 * 1024 * 1024 ||
|
||||
userDetails.subscription.productID == 'free') {
|
||||
contents.addAll(
|
||||
[
|
||||
BannerWidget(
|
||||
text: l10n.freeStorageOffer,
|
||||
subText: l10n.freeStorageOfferDescription,
|
||||
type: BannerType.discount,
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
return buildWidget(context, contents);
|
||||
}
|
||||
}
|
||||
return const SizedBox.shrink();
|
||||
},
|
||||
);
|
||||
} else {
|
||||
if (differenceInDays >= 4 && differenceInDays <= 7) {
|
||||
contents.clear();
|
||||
contents.addAll(
|
||||
[
|
||||
BannerWidget(
|
||||
text: l10n.tellUsWhatYouThink,
|
||||
subText: l10n.dropReview,
|
||||
type: BannerType.rateUs,
|
||||
),
|
||||
sectionSpacing,
|
||||
BannerWidget(
|
||||
text: l10n.supportEnte,
|
||||
subText: l10n.giveUsAStarOnGithub,
|
||||
type: BannerType.starUs,
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
return buildWidget(context, contents);
|
||||
}
|
||||
}
|
||||
|
||||
Widget buildWidget(
|
||||
BuildContext context,
|
||||
List<Widget> contents,
|
||||
) {
|
||||
return Column(
|
||||
children: contents,
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -18,9 +18,9 @@ import 'package:ente_auth/ui/settings/data/data_section_widget.dart';
|
||||
import 'package:ente_auth/ui/settings/data/export_widget.dart';
|
||||
import 'package:ente_auth/ui/settings/developer_settings_widget.dart';
|
||||
import 'package:ente_auth/ui/settings/general_section_widget.dart';
|
||||
import 'package:ente_auth/ui/settings/notification_banner_widget.dart';
|
||||
import 'package:ente_auth/ui/settings/security_section_widget.dart';
|
||||
import 'package:ente_auth/ui/settings/social_section_widget.dart';
|
||||
import 'package:ente_auth/ui/settings/support_dev_widget.dart';
|
||||
import 'package:ente_auth/ui/settings/support_section_widget.dart';
|
||||
import 'package:ente_auth/ui/settings/theme_switch_widget.dart';
|
||||
import 'package:ente_auth/ui/settings/title_bar_widget.dart';
|
||||
@@ -162,7 +162,7 @@ class SettingsPage extends StatelessWidget {
|
||||
const AboutSectionWidget(),
|
||||
const AppVersionWidget(),
|
||||
const DeveloperSettingsWidget(),
|
||||
const SupportDevWidget(),
|
||||
const NotificationBannerWidget(),
|
||||
const Padding(
|
||||
padding: EdgeInsets.only(bottom: 60),
|
||||
),
|
||||
|
||||
@@ -33,8 +33,7 @@ class _LockScreenState extends State<LockScreen> with WidgetsBindingObserver {
|
||||
int remainingTimeInSeconds = 0;
|
||||
final _lockscreenSetting = LockScreenSettings.instance;
|
||||
late Brightness _platformBrightness;
|
||||
final bool hasOptedForOfflineMode =
|
||||
Configuration.instance.hasOptedForOfflineMode();
|
||||
final bool isLoggedIn = Configuration.instance.isLoggedIn();
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
@@ -56,15 +55,15 @@ class _LockScreenState extends State<LockScreen> with WidgetsBindingObserver {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
elevation: 0,
|
||||
leading: hasOptedForOfflineMode
|
||||
? const SizedBox.shrink()
|
||||
: IconButton(
|
||||
leading: isLoggedIn
|
||||
? IconButton(
|
||||
icon: const Icon(Icons.logout_outlined),
|
||||
color: Theme.of(context).iconTheme.color,
|
||||
onPressed: () {
|
||||
_onLogoutTapped(context);
|
||||
},
|
||||
),
|
||||
)
|
||||
: const SizedBox.shrink(),
|
||||
),
|
||||
body: GestureDetector(
|
||||
onTap: () {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import 'package:ente_auth/l10n/l10n.dart';
|
||||
import 'package:ente_auth/models/account/two_factor.dart';
|
||||
import 'package:ente_auth/services/user_service.dart';
|
||||
import 'package:ente_auth/theme/ente_theme.dart';
|
||||
import 'package:ente_auth/utils/email_util.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
@@ -97,7 +98,8 @@ class _TwoFactorRecoveryPageState extends State<TwoFactorRecoveryPage> {
|
||||
style: TextStyle(
|
||||
decoration: TextDecoration.underline,
|
||||
fontSize: 12,
|
||||
color: Colors.white.withOpacity(0.9),
|
||||
color:
|
||||
getEnteColorScheme(context).textBase.withOpacity(0.9),
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
@@ -90,7 +90,6 @@ class LockScreenSettings {
|
||||
: await PrivacyScreen.instance.enable(
|
||||
iosOptions: const PrivacyIosOptions(
|
||||
enablePrivacy: true,
|
||||
privacyImageName: 'LaunchImage',
|
||||
),
|
||||
androidOptions: const PrivacyAndroidOptions(
|
||||
enableSecure: true,
|
||||
|
||||
@@ -387,7 +387,7 @@ packages:
|
||||
description:
|
||||
path: "."
|
||||
ref: HEAD
|
||||
resolved-ref: e2e66ffd03f23bef5e0bb138b5f01b32d8e9b7bb
|
||||
resolved-ref: f91e1545f8263df127762240c4da54a0c42835b2
|
||||
url: "https://github.com/ente-io/ente_crypto_dart.git"
|
||||
source: git
|
||||
version: "1.0.0"
|
||||
@@ -1301,14 +1301,6 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "4.1.0"
|
||||
scan:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: scan
|
||||
sha256: b343ec36f863a88d41eb4c174b810c055c6bd1f1822b2188ab31aab684fb7cdb
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.6.0"
|
||||
screen_retriever:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
|
||||
name: ente_auth
|
||||
description: ente two-factor authenticator
|
||||
version: 4.2.7+427
|
||||
version: 4.3.2+432
|
||||
publish_to: none
|
||||
|
||||
environment:
|
||||
@@ -82,8 +82,7 @@ dependencies:
|
||||
privacy_screen: ^0.0.6
|
||||
protobuf: ^3.0.0
|
||||
qr_code_scanner: ^1.0.1
|
||||
qr_flutter: ^4.1.0
|
||||
scan: ^1.6.0
|
||||
qr_flutter: ^4.1.0
|
||||
sentry: ^8.7.0
|
||||
sentry_flutter: ^8.7.0
|
||||
share_plus: ^10.0.2
|
||||
|
||||
@@ -10,7 +10,7 @@ DefaultDirName={{INSTALL_DIR_NAME}}
|
||||
DisableProgramGroupPage=yes
|
||||
OutputDir=.
|
||||
OutputBaseFilename={{OUTPUT_BASE_FILENAME}}
|
||||
Compression=lzma
|
||||
Compression=zip
|
||||
SolidCompression=yes
|
||||
SetupIconFile={{SETUP_ICON_FILE}}
|
||||
WizardStyle=modern
|
||||
|
||||
@@ -65,7 +65,7 @@ type AlbumFileEntry struct {
|
||||
func SortAlbumFileEntry(entries []*AlbumFileEntry) {
|
||||
sort.Slice(entries, func(i, j int) bool {
|
||||
if entries[i].IsDeleted != entries[j].IsDeleted {
|
||||
return !entries[i].IsDeleted && entries[j].IsDeleted
|
||||
return entries[i].IsDeleted && !entries[j].IsDeleted
|
||||
}
|
||||
return entries[i].AlbumID < entries[j].AlbumID
|
||||
})
|
||||
|
||||
@@ -12,10 +12,10 @@ on:
|
||||
description: "Branch (ente-io/ente) to build"
|
||||
type: string
|
||||
schedule:
|
||||
# Run everyday at ~8:00 AM IST (except Sundays).
|
||||
# Run every weekday at ~8:00 AM IST.
|
||||
# See: [Note: Run workflow every 24 hours]
|
||||
#
|
||||
- cron: "45 2 * * 1-6"
|
||||
- cron: "45 2 * * 1-5"
|
||||
push:
|
||||
# Run when a tag matching the pattern "vd.d.d" is pushed. In particular,
|
||||
# this excludes the "-beta" tags.
|
||||
|
||||
7
desktop/.gitignore
vendored
@@ -20,3 +20,10 @@ out
|
||||
|
||||
# electron-builder
|
||||
dist/
|
||||
|
||||
# Legacy, people who checked out main for a brief while in Jan 2025 may have
|
||||
# this. Can be removed in the future.
|
||||
build/magick*
|
||||
|
||||
# We download it on demand, if needed for the particular OS/arch.
|
||||
build/vips*
|
||||
|
||||
@@ -2,6 +2,9 @@
|
||||
|
||||
## v1.7.9 (Unreleased)
|
||||
|
||||
- Light mode.
|
||||
- Faster and more stable thumbnail generation.
|
||||
- Support `.supplemental-metadata` JSON files in Google Takeout.
|
||||
- .
|
||||
|
||||
## v1.7.8
|
||||
|
||||
45
desktop/build/io.ente.photos.appdata.xml
Normal file
@@ -0,0 +1,45 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<component type="desktop-application">
|
||||
<id>io.ente.photos</id>
|
||||
|
||||
<metadata_license>CC0-1.0</metadata_license>
|
||||
<project_license>AGPL-3.0</project_license>
|
||||
|
||||
<name>Ente Photos</name>
|
||||
<summary>Safe home for your photos</summary>
|
||||
|
||||
<developer id="io.github.ente-io.ente">
|
||||
<name>Ente.io Developers</name>
|
||||
</developer>
|
||||
|
||||
<description>
|
||||
<p>
|
||||
Ente is an open-source, end-to-end encrypted (E2EE) photo storage app, that provides a secure way to backup your photos.
|
||||
</p>
|
||||
</description>
|
||||
|
||||
<launchable type="desktop-id">ente.desktop</launchable>
|
||||
|
||||
<content_rating type="oars-1.0" />
|
||||
|
||||
<url type="bugtracker">https://github.com/ente-io/ente/issues</url>
|
||||
<url type="homepage">https://ente.io</url>
|
||||
<url type="vcs-browser">https://github.com/ente-io/ente</url>
|
||||
|
||||
<screenshots>
|
||||
<screenshot type="default">
|
||||
<image>https://raw.githubusercontent.com/ente-io/ente/main/.github/assets/photos.png</image>
|
||||
</screenshot>
|
||||
</screenshots>
|
||||
|
||||
<branding>
|
||||
<color type="primary" scheme_preference="light">#1db954</color>
|
||||
<color type="primary" scheme_preference="dark">#1db954</color>
|
||||
</branding>
|
||||
|
||||
<releases>
|
||||
<release version="1.7.8" date="2025-01-13">
|
||||
<url type="details">https://github.com/ente-io/photos-desktop/releases/tag/v1.7.8</url>
|
||||
</release>
|
||||
</releases>
|
||||
</component>
|
||||
@@ -103,18 +103,20 @@ Some extra ones specific to the code here are:
|
||||
|
||||
### Format conversion
|
||||
|
||||
The main tool we use is for arbitrary conversions is ffmpeg. To bundle a
|
||||
For video conversions and metadata extraction, we use ffmpeg. To bundle a
|
||||
(platform specific) static binary of ffmpeg with our app, we use
|
||||
[ffmpeg-static](https://github.com/eugeneware/ffmpeg-static).
|
||||
|
||||
> There is a significant (~20x) speed difference between using the compiled
|
||||
> ffmpeg binary and using the wasm one (that our renderer process already has).
|
||||
> FFmpeg binary and using the Wasm one (that our renderer process already has).
|
||||
> Which is why we bundle it to speed up operations on the desktop app.
|
||||
|
||||
In addition, we also bundle a static Linux binary of imagemagick in our extra
|
||||
resources (`build`) folder. This is used for thumbnail generation on Linux.
|
||||
On Linux and Windows, we use `vips` for thumbnail generation and JPEG conversion
|
||||
of unpreviewable images. A static OS/architecture specific binary of this is
|
||||
bundled in our extra resources (`build`) folder by `scripts/vips.sh` and/or
|
||||
`scripts/beforeBuild.js`. See "[Note: vips]" for more details.
|
||||
|
||||
On macOS, we use the `sips` CLI tool for conversion, but that is already
|
||||
On macOS, we use the `sips` CLI tool for these tasks, but that is already
|
||||
available on the host machine, and is not bundled with our app.
|
||||
|
||||
### ML
|
||||
|
||||
@@ -6,6 +6,7 @@ files:
|
||||
extraFiles:
|
||||
- from: build
|
||||
to: resources
|
||||
beforeBuild: scripts/beforeBuild.js
|
||||
protocols:
|
||||
- name: Ente
|
||||
schemes: ["ente"]
|
||||
@@ -33,3 +34,4 @@ mac:
|
||||
arch: [universal]
|
||||
category: public.app-category.photography
|
||||
hardenedRuntime: true
|
||||
mergeASARs: false
|
||||
|
||||
@@ -19,7 +19,7 @@ export default ts.config(
|
||||
{
|
||||
// The list of (minimatch) globs to ignore. This needs to be the only
|
||||
// key in this configuration object.
|
||||
ignores: ["eslint.config.mjs", "app/", "out/", "dist/"],
|
||||
ignores: ["eslint.config.mjs", "scripts/*.js", "app/", "out/", "dist/"],
|
||||
},
|
||||
{
|
||||
// Rule customizations.
|
||||
|
||||
@@ -8,17 +8,18 @@
|
||||
"main": "app/main.js",
|
||||
"scripts": {
|
||||
"build": "yarn build-renderer && yarn build-main",
|
||||
"build-main": "tsc && electron-builder",
|
||||
"build-main:quick": "tsc && electron-builder --dir --config.compression=store --config.mac.identity=null",
|
||||
"build-renderer": "cross-env-shell _ENTE_IS_DESKTOP=1 \"cd ../web && yarn install && yarn build:photos && cd ../desktop && shx rm -f out && shx ln -sf ../web/apps/photos/out out\"",
|
||||
"build:ci": "yarn build-renderer && tsc",
|
||||
"build:quick": "yarn build-renderer && yarn build-main:quick",
|
||||
"build-main": "tsc && electron-builder",
|
||||
"build-main:quick": "tsc && electron-builder --dir --config.compression=store --config.mac.identity=null",
|
||||
"build-renderer": "cross-env-shell _ENTE_IS_DESKTOP=1 \"cd ../web && yarn install && yarn build:photos && cd ../desktop && shx rm -rf out && shx cp -r ../web/apps/photos/out out\"",
|
||||
"dev": "concurrently --kill-others --success first --names 'main,rndr' \"yarn dev-main\" \"yarn dev-renderer\"",
|
||||
"dev-main": "tsc && electron .",
|
||||
"dev-renderer": "cross-env-shell _ENTE_IS_DESKTOP=1 \"cd ../web && yarn install && yarn workspace photos next dev -p 3008\"",
|
||||
"postinstall": "electron-builder install-app-deps",
|
||||
"lint": "yarn prettier --check --log-level warn . && yarn eslint && yarn tsc",
|
||||
"lint-fix": "yarn prettier --write --log-level warn . && yarn eslint && yarn tsc"
|
||||
"lint-fix": "yarn prettier --write --log-level warn . && yarn eslint && yarn tsc",
|
||||
"prepare": "node scripts/vips.js"
|
||||
},
|
||||
"resolutions": {
|
||||
"jackspeak": "2.1.1"
|
||||
@@ -30,9 +31,9 @@
|
||||
"clip-bpe-js": "^0.0.6",
|
||||
"comlink": "^4.4.2",
|
||||
"compare-versions": "^6.1.1",
|
||||
"electron-log": "^5.2.4",
|
||||
"electron-log": "^5.3.0",
|
||||
"electron-store": "^8.2.0",
|
||||
"electron-updater": "^6.3.9",
|
||||
"electron-updater": "^6.4.0",
|
||||
"ffmpeg-static": "^5.2.0",
|
||||
"lru-cache": "^11.0.2",
|
||||
"next-electron-server": "^1.0.0",
|
||||
@@ -40,23 +41,23 @@
|
||||
"onnxruntime-node": "^1.20.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@eslint/js": "^9.17.0",
|
||||
"@eslint/js": "^9.19.0",
|
||||
"@tsconfig/node20": "^20.1.4",
|
||||
"@types/auto-launch": "^5.0.5",
|
||||
"@types/eslint__js": "^8.42.3",
|
||||
"@types/ffmpeg-static": "^3.0.3",
|
||||
"ajv": "^8.17.1",
|
||||
"concurrently": "^9.1.1",
|
||||
"concurrently": "^9.1.2",
|
||||
"cross-env": "^7.0.3",
|
||||
"electron": "^33.2.1",
|
||||
"electron-builder": "^25.1.8",
|
||||
"electron": "^34.0.2",
|
||||
"electron-builder": "^26.0.0",
|
||||
"eslint": "^9",
|
||||
"prettier": "3.4.2",
|
||||
"prettier-plugin-organize-imports": "^4.1.0",
|
||||
"prettier-plugin-packagejson": "^2.5.6",
|
||||
"prettier-plugin-packagejson": "^2.5.8",
|
||||
"shx": "^0.3.4",
|
||||
"typescript": "^5.7.2",
|
||||
"typescript-eslint": "^8.18.2"
|
||||
"typescript-eslint": "^8.23.0"
|
||||
},
|
||||
"packageManager": "yarn@1.22.22",
|
||||
"productName": "ente"
|
||||
|
||||
66
desktop/scripts/beforeBuild.js
Executable file
@@ -0,0 +1,66 @@
|
||||
const fsp = require("fs/promises");
|
||||
|
||||
/**
|
||||
* This hook is invoked during the initial build (e.g. when triggered by "yarn
|
||||
* build"), and importantly, on each rebuild for a different architecture during
|
||||
* the build. We use it to ensure that the vips binary is for the current
|
||||
* architecture being built. See "[Note: vips]" for more details.
|
||||
*
|
||||
* The documentation for this hook is at:
|
||||
* https://www.electron.build/app-builder-lib.interface.configuration#beforebuild
|
||||
*
|
||||
* > The function to be run before dependencies are installed or rebuilt.
|
||||
*
|
||||
* Here is an example of the context that it gets
|
||||
* https://www.electron.build/app-builder-lib.interface.beforebuildcontext
|
||||
*
|
||||
* appDir: '/path/to/ente/desktop',
|
||||
* platform: Platform {
|
||||
* name: 'mac',
|
||||
* buildConfigurationKey: 'mac',
|
||||
* nodeName: 'darwin'
|
||||
* },
|
||||
* arch: 'arm64'
|
||||
*
|
||||
* Note that we must not return falsey from this function, because:
|
||||
*
|
||||
* > Resolving to false will skip dependencies install or rebuild.
|
||||
*
|
||||
*/
|
||||
module.exports = async (context) => {
|
||||
const { appDir, platform, arch } = context;
|
||||
|
||||
// The arch used by Electron Builder is not the same as the arch used by
|
||||
// Node's process, but for the two cases that we care about, "x64" and
|
||||
// "arm64", both of them use the string constant and thus can be compared.
|
||||
//
|
||||
// https://github.com/electron-userland/electron-builder/blob/master/packages/builder-util/src/arch.ts#L9
|
||||
// https://nodejs.org/api/process.html#processarch
|
||||
if (arch == process.arch) {
|
||||
// `vips.js` would've already downloaded the file, nothing to do.
|
||||
return true;
|
||||
}
|
||||
|
||||
const download = async (downloadName, outputName) => {
|
||||
const out = `${appDir}/build/${outputName}`;
|
||||
console.log(`Downloading ${downloadName}`);
|
||||
const downloadPath = `https://github.com/ente-io/libvips-packaging/releases/download/v8.16.0/${downloadName}`;
|
||||
return fetch(downloadPath)
|
||||
.then((res) => res.blob())
|
||||
.then((blob) => fsp.writeFile(out, blob.stream()))
|
||||
.then(() => fsp.chmod(out, "744"));
|
||||
};
|
||||
|
||||
switch (`${platform.nodeName}-${arch}`) {
|
||||
case "linux-x64":
|
||||
await download("vips-x64", "vips");
|
||||
case "linux-arm64":
|
||||
await download("vips-arm64", "vips");
|
||||
case "win32-x64":
|
||||
await download("vips-x86_64.exe", "vips.exe");
|
||||
case "linux-arm64":
|
||||
await download("vips-aarch64.exe", "vips.exe");
|
||||
}
|
||||
|
||||
return true;
|
||||
};
|
||||
68
desktop/scripts/vips.js
Executable file
@@ -0,0 +1,68 @@
|
||||
/**
|
||||
* [Note: vips]
|
||||
*
|
||||
* For use within our Electron app we need static builds for Linux and Windows
|
||||
* for both x64 and ARM. For this, we need a custom workflow because (as of
|
||||
* writing) upstream doesn't publish these.
|
||||
*
|
||||
* This is our custom workflow, which runs on a fork of upstream:
|
||||
* https://github.com/ente-io/libvips-packaging/commit/a298aff3e1f25f713508d31d0c3a55a4f828fdd3
|
||||
*
|
||||
* The binaries it creates are available at
|
||||
* https://github.com/ente-io/libvips-packaging/releases/tag/v8.16.0
|
||||
*
|
||||
* To integrate this binary, we need to modify two places:
|
||||
*
|
||||
* 1. This script, `vips.js`, runs during "yarn install" (it is set as the
|
||||
* "prepare" step in our `package.json`). It downloads the relevant binary
|
||||
* for the current OS/arch combination and places it in the `build` folder,
|
||||
* allowing it to be used during development.
|
||||
*
|
||||
* 2. The sibling script, `beforeBuild.js`, runs during "yarn build" (it is set
|
||||
* as the beforeBuild script in `electrons-builder.yml`). It downloads the
|
||||
* relevant binary for the OS/arch combination being built.
|
||||
*
|
||||
* Note that `vips.js` would've already run once `beforeBuild.js` is run, but on
|
||||
* our CI we prepare builds for multiple architectures in one go, so we need to
|
||||
* unconditonally replace the binary with the relevant one for the current
|
||||
* architecture being built (which might be different from the one we're running
|
||||
* on). `beforeBuild.js` runs for each architecture being built.
|
||||
*
|
||||
* On macOS, we don't need `vips` since there we use the native `sips`.
|
||||
*/
|
||||
|
||||
const fs = require("fs");
|
||||
const fsp = require("fs/promises");
|
||||
|
||||
const main = () => {
|
||||
switch (`${process.platform}-${process.arch}`) {
|
||||
case "linux-x64":
|
||||
return downloadIfNeeded("vips-x64", "vips");
|
||||
case "linux-arm64":
|
||||
return downloadIfNeeded("vips-arm64", "vips");
|
||||
case "win32-x64":
|
||||
return downloadIfNeeded("vips-x86_64.exe", "vips.exe");
|
||||
case "linux-arm64":
|
||||
return downloadIfNeeded("vips-aarch64.exe", "vips.exe");
|
||||
}
|
||||
};
|
||||
|
||||
const downloadIfNeeded = (downloadName, outputName) => {
|
||||
const out = `build/${outputName}`;
|
||||
|
||||
try {
|
||||
// Making the file executable is the last step, so if the file exists at
|
||||
// this path and is executable, we assume it is the correct one.
|
||||
fs.accessSync(out, fs.constants.X_OK);
|
||||
return;
|
||||
} catch {}
|
||||
|
||||
console.log(`Downloading ${downloadName}`);
|
||||
const downloadPath = `https://github.com/ente-io/libvips-packaging/releases/download/v8.16.0/${downloadName}`;
|
||||
return fetch(downloadPath)
|
||||
.then((res) => res.blob())
|
||||
.then((blob) => fsp.writeFile(out, blob.stream()))
|
||||
.then(() => fsp.chmod(out, "744"));
|
||||
};
|
||||
|
||||
main();
|
||||
@@ -10,14 +10,15 @@
|
||||
*/
|
||||
|
||||
import { nativeImage, shell } from "electron/common";
|
||||
import type { WebContents } from "electron/main";
|
||||
import {
|
||||
BrowserWindow,
|
||||
Menu,
|
||||
Tray,
|
||||
app,
|
||||
dialog,
|
||||
nativeTheme,
|
||||
protocol,
|
||||
type WebContents,
|
||||
} from "electron/main";
|
||||
import serveNextAt from "next-electron-server";
|
||||
import { existsSync } from "node:fs";
|
||||
@@ -95,10 +96,10 @@ const main = () => {
|
||||
/**
|
||||
* Handle an open URL request, but ensuring that we have a mainWindow.
|
||||
*/
|
||||
const handleOpenURLEnsuringWindow = (url: string) => {
|
||||
const handleOpenEnteURLEnsuringWindow = (url: string) => {
|
||||
log.info(`Attempting to handle request to open URL: ${url}`);
|
||||
if (mainWindow) handleEnteLinks(mainWindow, url);
|
||||
else setTimeout(() => handleOpenURLEnsuringWindow(url), 1000);
|
||||
else setTimeout(() => handleOpenEnteURLEnsuringWindow(url), 1000);
|
||||
};
|
||||
|
||||
app.on("second-instance", (_, argv: string[]) => {
|
||||
@@ -109,9 +110,15 @@ const main = () => {
|
||||
mainWindow.focus();
|
||||
}
|
||||
// On Windows and Linux, this is how we get deeplinks.
|
||||
//
|
||||
// See: registerForEnteLinks
|
||||
const url = argv.pop();
|
||||
if (url) handleOpenURLEnsuringWindow(url);
|
||||
//
|
||||
// Note that Chromium reserves the right to fudge with the order of the
|
||||
// command line arguments, including inserting things in arbitrary
|
||||
// places, so we need to go through the args to find the one that is
|
||||
// pertinent to us (if any) instead of looking at a fixed position.
|
||||
const url = argv.find((arg) => arg.startsWith("ente://app"));
|
||||
if (url) handleOpenEnteURLEnsuringWindow(url);
|
||||
});
|
||||
|
||||
// Emitted once, when Electron has finished initializing.
|
||||
@@ -170,7 +177,7 @@ const main = () => {
|
||||
});
|
||||
|
||||
// On macOS, this is how we get deeplinks. See: registerForEnteLinks
|
||||
app.on("open-url", (_, url) => handleOpenURLEnsuringWindow(url));
|
||||
app.on("open-url", (_, url) => handleOpenEnteURLEnsuringWindow(url));
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -272,7 +279,7 @@ const handleEnteLinks = (mainWindow: BrowserWindow, url: string) => {
|
||||
// - the protocol we're using to serve/ our bundled web app
|
||||
//
|
||||
// use the same scheme ("ente://"), so the URL can directly be forwarded.
|
||||
mainWindow.webContents.send("openURL", url);
|
||||
mainWindow.webContents.send("openEnteURL", url);
|
||||
};
|
||||
|
||||
/** Attach handlers to the (node) process. */
|
||||
@@ -319,6 +326,8 @@ const attachProcessHandlers = () => {
|
||||
*/
|
||||
const waitForRendererDevServer = () => wait(1000);
|
||||
|
||||
const wipDesktopCustomTitlebar = process.env.ENTE_WIP_TITLEBAR == "1";
|
||||
|
||||
/**
|
||||
* Create an return the {@link BrowserWindow} that will form our app's UI.
|
||||
*
|
||||
@@ -341,9 +350,35 @@ const createMainWindow = () => {
|
||||
...(bounds ?? {}),
|
||||
// Enforce a minimum size
|
||||
...minimumWindowSize(),
|
||||
// [Note: Customize the desktop title bar]
|
||||
//
|
||||
// 1. Remove the default title bar.
|
||||
// 2. Reintroduce the title bar controls.
|
||||
// 3. Show a custom title bar in the renderer.
|
||||
//
|
||||
// For step 3, we use `app-region: drag` to allow dragging the window by
|
||||
// the title bar, and use the Window Controls Overlay CSS environment
|
||||
// variables to determine its dimensions. Note that these overlay CSS
|
||||
// environment vars are only available when titleBarOverlay is true, so
|
||||
// unlike the tutorial which enables it only for Windows and Linux, we
|
||||
// do it (Step 2) unconditionally (i.e., on macOS too).
|
||||
//
|
||||
// https://www.electronjs.org/docs/latest/tutorial/custom-title-bar#create-a-custom-title-bar
|
||||
...(wipDesktopCustomTitlebar
|
||||
? {
|
||||
titleBarStyle: "hidden",
|
||||
titleBarOverlay: true,
|
||||
}
|
||||
: {}),
|
||||
// The color to show in the window until the web content gets loaded.
|
||||
// See: https://www.electronjs.org/docs/latest/api/browser-window#setting-the-backgroundcolor-property
|
||||
backgroundColor: "black",
|
||||
// https://www.electronjs.org/docs/latest/api/browser-window#setting-the-backgroundcolor-property
|
||||
//
|
||||
// To avoid a flash, we want to use the same background color as the
|
||||
// theme of their choice. Unless the user has modified their preference
|
||||
// to not follow the system, we can deduce it from the current OS theme.
|
||||
//
|
||||
// See: https://www.electronjs.org/docs/latest/tutorial/dark-mode
|
||||
backgroundColor: nativeTheme.shouldUseDarkColors ? "black" : "white",
|
||||
// We'll show it conditionally depending on `wasAutoLaunched` later.
|
||||
show: false,
|
||||
});
|
||||
|
||||
@@ -9,7 +9,7 @@ import {
|
||||
makeTempFilePath,
|
||||
} from "../utils/temp";
|
||||
|
||||
/* Ditto in the web app's code (used by the WASM FFmpeg invocation). */
|
||||
/* Ditto in the web app's code (used by the Wasm FFmpeg invocation). */
|
||||
const ffmpegPathPlaceholder = "FFMPEG";
|
||||
const inputPathPlaceholder = "INPUT";
|
||||
const outputPathPlaceholder = "OUTPUT";
|
||||
@@ -19,7 +19,7 @@ const outputPathPlaceholder = "OUTPUT";
|
||||
*
|
||||
* [Note: FFmpeg in Electron]
|
||||
*
|
||||
* There is a wasm build of FFmpeg, but that is currently 10-20 times slower
|
||||
* There is a Wasm build of FFmpeg, but that is currently 10-20 times slower
|
||||
* that the native build. That is slow enough to be unusable for our purposes.
|
||||
* https://ffmpegwasm.netlify.app/docs/performance
|
||||
*
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
import fs from "node:fs/promises";
|
||||
import path from "node:path";
|
||||
import { CustomErrorMessage, type ZipItem } from "../../types/ipc";
|
||||
import { type ZipItem } from "../../types/ipc";
|
||||
import { execAsync, isDev } from "../utils/electron";
|
||||
import {
|
||||
deleteTempFileIgnoringErrors,
|
||||
@@ -14,7 +14,6 @@ export const convertToJPEG = async (imageData: Uint8Array) => {
|
||||
const inputFilePath = await makeTempFilePath();
|
||||
const outputFilePath = await makeTempFilePath("jpeg");
|
||||
|
||||
// Construct the command first, it may throw NotAvailable on win32.
|
||||
const command = convertToJPEGCommand(inputFilePath, outputFilePath);
|
||||
|
||||
try {
|
||||
@@ -44,25 +43,22 @@ const convertToJPEGCommand = (
|
||||
];
|
||||
|
||||
case "linux":
|
||||
// The bundled binary is an ELF x86-64 executable.
|
||||
if (process.arch != "x64")
|
||||
throw new Error(CustomErrorMessage.NotAvailable);
|
||||
return [
|
||||
imageMagickPath(),
|
||||
inputFilePath,
|
||||
"-quality",
|
||||
"100%",
|
||||
outputFilePath,
|
||||
];
|
||||
case "win32":
|
||||
return [vipsPath(), "copy", inputFilePath, outputFilePath];
|
||||
|
||||
default: // "win32"
|
||||
throw new Error(CustomErrorMessage.NotAvailable);
|
||||
default:
|
||||
throw new Error("Not available on the current OS/arch");
|
||||
}
|
||||
};
|
||||
|
||||
/** Path to the Linux image-magick executable bundled with our app */
|
||||
const imageMagickPath = () =>
|
||||
path.join(isDev ? "build" : process.resourcesPath, "image-magick");
|
||||
/**
|
||||
* Path to the vips executable bundled with our app on Linux and Windows.
|
||||
*/
|
||||
const vipsPath = () =>
|
||||
path.join(
|
||||
isDev ? "build" : process.resourcesPath,
|
||||
process.platform == "win32" ? "vips.exe" : "vips",
|
||||
);
|
||||
|
||||
export const generateImageThumbnail = async (
|
||||
dataOrPathOrZipItem: Uint8Array | string | ZipItem,
|
||||
@@ -133,25 +129,16 @@ const generateImageThumbnailCommand = (
|
||||
];
|
||||
|
||||
case "linux":
|
||||
// The bundled binary is an ELF x86-64 executable.
|
||||
if (process.arch != "x64")
|
||||
throw new Error(CustomErrorMessage.NotAvailable);
|
||||
case "win32":
|
||||
return [
|
||||
imageMagickPath(),
|
||||
"-define",
|
||||
`jpeg:size=${2 * maxDimension}x${2 * maxDimension}`,
|
||||
vipsPath(),
|
||||
"thumbnail",
|
||||
inputFilePath,
|
||||
"-auto-orient",
|
||||
"-thumbnail",
|
||||
`${maxDimension}x${maxDimension}`,
|
||||
"-unsharp",
|
||||
"0x.5",
|
||||
"-quality",
|
||||
`${quality}`,
|
||||
outputFilePath,
|
||||
`${outputFilePath}[Q=${quality}]`,
|
||||
`${maxDimension}`,
|
||||
];
|
||||
|
||||
default: // "win32"
|
||||
throw new Error(CustomErrorMessage.NotAvailable);
|
||||
default:
|
||||
throw new Error("Not available on the current OS/arch");
|
||||
}
|
||||
};
|
||||
|
||||
@@ -20,7 +20,7 @@ let _child: UtilityProcess | undefined;
|
||||
* [Note: ML IPC]
|
||||
*
|
||||
* The primary reason for doing ML tasks in the Node.js layer is so that we can
|
||||
* use the binary ONNX runtime, which is 10-20x faster than the WASM one that
|
||||
* use the binary ONNX runtime, which is 10-20x faster than the Wasm one that
|
||||
* can be used directly on the web layer.
|
||||
*
|
||||
* For this to work, the main and renderer process need to communicate with each
|
||||
|
||||