Compare commits
1106 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c8fcf6227e | ||
|
|
310b6de2cc | ||
|
|
306535a2a6 | ||
|
|
5944b1b6f5 | ||
|
|
6de9e1d4bd | ||
|
|
4bf6ab9c8c | ||
|
|
1e93dfa35e | ||
|
|
7f2567264c | ||
|
|
d9a9246f1b | ||
|
|
aa8fb62f15 | ||
|
|
6d5eeb88d3 | ||
|
|
ea1d710209 | ||
|
|
032b787b66 | ||
|
|
7024cd22de | ||
|
|
b9b66d5af1 | ||
|
|
b73a0d6347 | ||
|
|
a0bc318ff9 | ||
|
|
642e8464cd | ||
|
|
63a9e55d4e | ||
|
|
a07c73155f | ||
|
|
efbc32d3ed | ||
|
|
83f50bd0d8 | ||
|
|
87cb0f50b5 | ||
|
|
73c779c238 | ||
|
|
40615cf17a | ||
|
|
6dd1448667 | ||
|
|
d8b4091043 | ||
|
|
7ea920efa9 | ||
|
|
7306dfbdd3 | ||
|
|
53c8c41133 | ||
|
|
395dfe5fe7 | ||
|
|
2ec0074a45 | ||
|
|
93dce378ea | ||
|
|
df6fae7aa5 | ||
|
|
57e0705e64 | ||
|
|
f3b31479c4 | ||
|
|
b914be9f0e | ||
|
|
2d0a4b79d8 | ||
|
|
d090b29c55 | ||
|
|
5a8be94cdc | ||
|
|
176a436ad4 | ||
|
|
1a05435691 | ||
|
|
49ce3edbdb | ||
|
|
51df759e25 | ||
|
|
992aa00c3c | ||
|
|
d87d933058 | ||
|
|
e0d639cba0 | ||
|
|
1cbbfb25cc | ||
|
|
f205e6f5c1 | ||
|
|
5e67ea22f5 | ||
|
|
99f522e625 | ||
|
|
f04cd7e28b | ||
|
|
3392a1f17c | ||
|
|
d0d9a1a65d | ||
|
|
16d04fe485 | ||
|
|
43d5c51e7c | ||
|
|
647013f3ff | ||
|
|
2ef631a440 | ||
|
|
86315a245b | ||
|
|
b0ce1b87a9 | ||
|
|
541c16aea6 | ||
|
|
ee1a3fc683 | ||
|
|
b90edcccbd | ||
|
|
4614b93780 | ||
|
|
4f548803cb | ||
|
|
d16dd95d65 | ||
|
|
97f7494c34 | ||
|
|
6179dabfa6 | ||
|
|
05ca683f91 | ||
|
|
170e61e73f | ||
|
|
33f0356ca7 | ||
|
|
4b9117dcb4 | ||
|
|
ec274c90da | ||
|
|
e7a1f013df | ||
|
|
c287bc2f22 | ||
|
|
5b8f8f2c5d | ||
|
|
887c2d0f42 | ||
|
|
06d7aa6623 | ||
|
|
5ed142a6b8 | ||
|
|
da9ca8a1f4 | ||
|
|
1cb5375a92 | ||
|
|
fd11cc30f5 | ||
|
|
a1bfdc0f18 | ||
|
|
e88362ce80 | ||
|
|
b5f0a64e7c | ||
|
|
e3623420b0 | ||
|
|
3344ed4b99 | ||
|
|
b0c91f7804 | ||
|
|
f8cf7f0717 | ||
|
|
29a6b78f27 | ||
|
|
388370b49d | ||
|
|
4d67c25e5a | ||
|
|
eec0dcca82 | ||
|
|
f1dc33761d | ||
|
|
7ea74d0fe3 | ||
|
|
0c635534a1 | ||
|
|
f70a3a4207 | ||
|
|
0fc174b5b3 | ||
|
|
d4eddf042d | ||
|
|
a4210c7e6b | ||
|
|
106438d61d | ||
|
|
94365d2cc9 | ||
|
|
b633c43078 | ||
|
|
84c3f1d786 | ||
|
|
1c963e9aff | ||
|
|
a2fe7f79cc | ||
|
|
8dabdb3f11 | ||
|
|
b9f2957104 | ||
|
|
bdeda87600 | ||
|
|
e98a538f53 | ||
|
|
2e0cb923db | ||
|
|
2e532abf6b | ||
|
|
51e865c98d | ||
|
|
2c27248aa1 | ||
|
|
43c2084e15 | ||
|
|
14cb0f46f3 | ||
|
|
162d507468 | ||
|
|
8624851cf5 | ||
|
|
2d92e93b7b | ||
|
|
78f9018083 | ||
|
|
ecb8a01aaa | ||
|
|
cca2c99f6b | ||
|
|
028d0dd7d8 | ||
|
|
7753e0481c | ||
|
|
5b35e68cf2 | ||
|
|
8b4115fe48 | ||
|
|
8bc1c3e0ed | ||
|
|
69061ed537 | ||
|
|
f151b1268d | ||
|
|
35d9c0e548 | ||
|
|
7baae289d1 | ||
|
|
a33c50361f | ||
|
|
ecc4920b04 | ||
|
|
1f3e28fe83 | ||
|
|
a9132d7b46 | ||
|
|
f54929c6cb | ||
|
|
1a181d08b9 | ||
|
|
94b32f0f73 | ||
|
|
ab98382984 | ||
|
|
5498035ca9 | ||
|
|
a1444659ea | ||
|
|
b9d65ea0e2 | ||
|
|
aac35294b5 | ||
|
|
fef33d652d | ||
|
|
8ef6f420e4 | ||
|
|
7675ebc7d3 | ||
|
|
90e4b36106 | ||
|
|
e7ac2321f2 | ||
|
|
e0d8ade2d0 | ||
|
|
f5546b6a49 | ||
|
|
3c13f82d61 | ||
|
|
121b5cdf32 | ||
|
|
593c03b035 | ||
|
|
3a4e3fa22a | ||
|
|
098b87d09e | ||
|
|
8783b89f21 | ||
|
|
a29d0a6cf6 | ||
|
|
4d0d62a00b | ||
|
|
d951e26fa8 | ||
|
|
52e2c2ccd2 | ||
|
|
87cb5a5c24 | ||
|
|
59967dd1f0 | ||
|
|
46e57af6dd | ||
|
|
9ec69d895c | ||
|
|
c20b239351 | ||
|
|
09d9491354 | ||
|
|
68bc03d6a5 | ||
|
|
95e6b1a59c | ||
|
|
b2fb0b2130 | ||
|
|
b5e90f63a3 | ||
|
|
566a5904a6 | ||
|
|
7678a1a88b | ||
|
|
8490540384 | ||
|
|
2aabae6faa | ||
|
|
d9c841842e | ||
|
|
7cb4f4560a | ||
|
|
d110409944 | ||
|
|
891d9e5e1b | ||
|
|
980aba1cda | ||
|
|
37e8a79159 | ||
|
|
ac3f502547 | ||
|
|
75cbc3c249 | ||
|
|
f8b6b5272b | ||
|
|
86d2e6258d | ||
|
|
8878853319 | ||
|
|
d04f229ffa | ||
|
|
856e12bdc7 | ||
|
|
66e6f9b3f7 | ||
|
|
e77e1d5503 | ||
|
|
7aa61e142e | ||
|
|
5ed57780a3 | ||
|
|
9cc4513ba1 | ||
|
|
f487dc83c4 | ||
|
|
b86cbb3a39 | ||
|
|
ec32fca3f9 | ||
|
|
a4aaa7282b | ||
|
|
f0290da391 | ||
|
|
2ab0807b05 | ||
|
|
9489567576 | ||
|
|
8a3acac3e1 | ||
|
|
e7fe5f795a | ||
|
|
c35b22dc53 | ||
|
|
1341d62da4 | ||
|
|
dfa2739bb1 | ||
|
|
4112263286 | ||
|
|
9c705c4fc9 | ||
|
|
73fd1ef9b4 | ||
|
|
74ba402d5d | ||
|
|
bde96af7da | ||
|
|
6ef0ba3098 | ||
|
|
89ffaff64d | ||
|
|
29131e39d2 | ||
|
|
76b0d76eaa | ||
|
|
60a9605302 | ||
|
|
b35489ee63 | ||
|
|
6d58e5b675 | ||
|
|
d0ad78920f | ||
|
|
b34a2d60e3 | ||
|
|
ca8042c2e9 | ||
|
|
31d7c5173f | ||
|
|
7b5be5feee | ||
|
|
2d683c6ab1 | ||
|
|
5e46ce4210 | ||
|
|
47e8e59a52 | ||
|
|
923ab5b903 | ||
|
|
8c8eaeb92f | ||
|
|
d6a5f23345 | ||
|
|
ba8fa0b37b | ||
|
|
0714aea30d | ||
|
|
da3ac55122 | ||
|
|
f651d9336a | ||
|
|
b7cbb39b51 | ||
|
|
eb96791223 | ||
|
|
ffd8f870f3 | ||
|
|
1ea7990314 | ||
|
|
4839c02d50 | ||
|
|
b6dffae33e | ||
|
|
d925455356 | ||
|
|
ef8506e5ec | ||
|
|
f138ad9885 | ||
|
|
c7abe29762 | ||
|
|
c29a8ed864 | ||
|
|
ca9315314a | ||
|
|
0299b1a5e5 | ||
|
|
3db771bf5f | ||
|
|
1599724239 | ||
|
|
a7f6be8f3f | ||
|
|
d86becd127 | ||
|
|
8e2785cfd1 | ||
|
|
685d097250 | ||
|
|
ee3d8730cc | ||
|
|
3b5ceaa483 | ||
|
|
b68be7385f | ||
|
|
488085324f | ||
|
|
ccc33bf498 | ||
|
|
d137599ac3 | ||
|
|
0a80300563 | ||
|
|
9eb9ba1039 | ||
|
|
0f8f3eca81 | ||
|
|
4ad406a8c3 | ||
|
|
f332a59b76 | ||
|
|
c56d225c1f | ||
|
|
057ddc00c0 | ||
|
|
6499e50775 | ||
|
|
8cde20cef3 | ||
|
|
68713007c8 | ||
|
|
772bedfa34 | ||
|
|
ef78a3c5b6 | ||
|
|
6c818c7a57 | ||
|
|
1b6d8862bc | ||
|
|
7b70b490e7 | ||
|
|
6d9ffaabf8 | ||
|
|
6ebd4ed15b | ||
|
|
eff474df1c | ||
|
|
55a2688f77 | ||
|
|
f6efb6d21f | ||
|
|
eb7503efdd | ||
|
|
e0fdfd6284 | ||
|
|
f7fbf9488a | ||
|
|
516ecdf84c | ||
|
|
a81d2deaab | ||
|
|
6e7314dfbf | ||
|
|
9d14530402 | ||
|
|
c52bd3a2aa | ||
|
|
5df98e9fd8 | ||
|
|
4f7268dae9 | ||
|
|
33f981d4f9 | ||
|
|
35805317ef | ||
|
|
5bd372de88 | ||
|
|
442323f2dc | ||
|
|
1a61bb4670 | ||
|
|
8ea3f077e5 | ||
|
|
525f6c3bf1 | ||
|
|
c790b1ee88 | ||
|
|
9c81ce9612 | ||
|
|
b86c9b360e | ||
|
|
92b821eb37 | ||
|
|
c5fa10f675 | ||
|
|
9df9f6b81a | ||
|
|
fea243aca5 | ||
|
|
f634d234d6 | ||
|
|
5164d6566d | ||
|
|
7d4d5433ef | ||
|
|
61425415c6 | ||
|
|
e880e95c3d | ||
|
|
6f7291940e | ||
|
|
879687e0af | ||
|
|
c43c4d9eb3 | ||
|
|
e0bec8a9d4 | ||
|
|
0dbf06a2e6 | ||
|
|
afc863f48a | ||
|
|
f8de706b0a | ||
|
|
0a1b8ffe43 | ||
|
|
2778c1b109 | ||
|
|
3d83a0b77b | ||
|
|
b0bb00c0ab | ||
|
|
1403fd54e9 | ||
|
|
97870201db | ||
|
|
b97ffb26ab | ||
|
|
c258f8fdc1 | ||
|
|
6eef2b094d | ||
|
|
059017e71a | ||
|
|
1cefbe0299 | ||
|
|
c289e74e4a | ||
|
|
e0c8221a9c | ||
|
|
aadd148cc6 | ||
|
|
4e8401ab7e | ||
|
|
238b2fb519 | ||
|
|
7e7df758a1 | ||
|
|
056949aab0 | ||
|
|
dc5deaab42 | ||
|
|
32d5455f45 | ||
|
|
43bc86becf | ||
|
|
c8346c1d09 | ||
|
|
97305026a7 | ||
|
|
36b57a6bef | ||
|
|
ff6538e920 | ||
|
|
45ce9feaae | ||
|
|
ced6190b55 | ||
|
|
4cd2f7cf32 | ||
|
|
929ea98fce | ||
|
|
adf11de4ec | ||
|
|
43ff7b48f7 | ||
|
|
021547f1e5 | ||
|
|
5afb11d617 | ||
|
|
04c88aee06 | ||
|
|
7bc4686553 | ||
|
|
4bdbba2eb1 | ||
|
|
03a08b5847 | ||
|
|
5ffcd3db92 | ||
|
|
1ad41b1829 | ||
|
|
d29001ef32 | ||
|
|
28177f20f4 | ||
|
|
9e49ea1de7 | ||
|
|
8eb28d15b4 | ||
|
|
7c96059b7f | ||
|
|
65ddfd8fb2 | ||
|
|
ef6eac24cc | ||
|
|
83395fd97e | ||
|
|
85ff325838 | ||
|
|
11142d263c | ||
|
|
8146281616 | ||
|
|
bffec25f44 | ||
|
|
0417a98646 | ||
|
|
19cc93a271 | ||
|
|
886a3eef9f | ||
|
|
c25fbe4cb8 | ||
|
|
4b204b8a29 | ||
|
|
3d58952654 | ||
|
|
777f7939b9 | ||
|
|
d7b71d6e49 | ||
|
|
c7ec840bd8 | ||
|
|
5c272f4d1a | ||
|
|
315f7fd37f | ||
|
|
8a1ac8454d | ||
|
|
3a813da5ac | ||
|
|
38bdb3523d | ||
|
|
39da334c5c | ||
|
|
606324331d | ||
|
|
1093c5dabf | ||
|
|
8d52ac629d | ||
|
|
3bb981ac7f | ||
|
|
5a4b8c1fc9 | ||
|
|
a28fb9df09 | ||
|
|
e12b948bbd | ||
|
|
61b33da43e | ||
|
|
7d2464207b | ||
|
|
5a684b94cd | ||
|
|
09382a055a | ||
|
|
584db2fdab | ||
|
|
346ac5912c | ||
|
|
c212193d87 | ||
|
|
4ad9c89fde | ||
|
|
4fe9122a12 | ||
|
|
9ac289a969 | ||
|
|
9fd4503ba8 | ||
|
|
ff06c93a42 | ||
|
|
5a1c1036dd | ||
|
|
23970fa2cd | ||
|
|
8650c68801 | ||
|
|
75c901a111 | ||
|
|
50ccdcf0d0 | ||
|
|
e6d75b411a | ||
|
|
7d50e3407b | ||
|
|
9f5143ff69 | ||
|
|
634cd14b83 | ||
|
|
050af17888 | ||
|
|
d37147b3c7 | ||
|
|
369abe38ba | ||
|
|
35fc9f2b0e | ||
|
|
1986b85580 | ||
|
|
0ca3628367 | ||
|
|
72afb77ef7 | ||
|
|
899b296bfe | ||
|
|
04044bfec5 | ||
|
|
8e173eab88 | ||
|
|
ce7182a0e7 | ||
|
|
42363879e1 | ||
|
|
c99f1a6e0d | ||
|
|
405a662138 | ||
|
|
71e7ee6f2d | ||
|
|
ec4f5ade70 | ||
|
|
a5552bb088 | ||
|
|
47aa96189f | ||
|
|
cb91ef1f08 | ||
|
|
00c61d8046 | ||
|
|
31881a4342 | ||
|
|
1519f55e68 | ||
|
|
0d25f4021b | ||
|
|
ea621d4db3 | ||
|
|
8ecea4c067 | ||
|
|
dffca5e619 | ||
|
|
86ffe8ba36 | ||
|
|
62c90aadf8 | ||
|
|
e1f0926159 | ||
|
|
79b6e6ff22 | ||
|
|
a283a2508c | ||
|
|
6c297e3df0 | ||
|
|
60ff20f5a0 | ||
|
|
7ec10bf9c6 | ||
|
|
495db47399 | ||
|
|
69ca83914c | ||
|
|
60f9670c4a | ||
|
|
8441d4c21b | ||
|
|
711507fa1d | ||
|
|
e174d1113d | ||
|
|
bf97227594 | ||
|
|
b777b3e77c | ||
|
|
f626dc48ea | ||
|
|
42129f558b | ||
|
|
5f569c9e99 | ||
|
|
8a13172eb3 | ||
|
|
734c488ca0 | ||
|
|
3335fb4f63 | ||
|
|
9c485bd973 | ||
|
|
c9bc27531a | ||
|
|
9a96529ae0 | ||
|
|
362c54e00a | ||
|
|
ad8554ab72 | ||
|
|
8c9b1a5e3c | ||
|
|
cf60947ce7 | ||
|
|
588834ede8 | ||
|
|
fb0ceaf7a3 | ||
|
|
c7eb1df7d5 | ||
|
|
c582f017d7 | ||
|
|
679b150c43 | ||
|
|
393ef181bb | ||
|
|
f0965c2080 | ||
|
|
b1c0112734 | ||
|
|
a7316c0a4b | ||
|
|
9614e70484 | ||
|
|
d0f43e0d28 | ||
|
|
f6490f5325 | ||
|
|
a9bdeba8b1 | ||
|
|
21bbca62c1 | ||
|
|
19a4538262 | ||
|
|
e0ffb28477 | ||
|
|
a1200fb8b8 | ||
|
|
48595c4b84 | ||
|
|
970166cb1f | ||
|
|
ace63ade46 | ||
|
|
a7709ce6e1 | ||
|
|
8b49a5a53f | ||
|
|
28d163cf0b | ||
|
|
43a8a3a2e6 | ||
|
|
ef6ef43501 | ||
|
|
6c4e354f5f | ||
|
|
5e98961faa | ||
|
|
d6100dfda3 | ||
|
|
f6b6fe36da | ||
|
|
eaf84be825 | ||
|
|
e3564ac067 | ||
|
|
d10353b247 | ||
|
|
2c00d103d9 | ||
|
|
4af089ece1 | ||
|
|
51d3dfd5d9 | ||
|
|
e32e3952d0 | ||
|
|
1533c1b3ab | ||
|
|
5b783ebff9 | ||
|
|
58db58e178 | ||
|
|
a55d02de5e | ||
|
|
6586a56e10 | ||
|
|
ebb754088b | ||
|
|
34bc3bd60d | ||
|
|
24c74ebf86 | ||
|
|
f37da64d43 | ||
|
|
623e68480c | ||
|
|
9bfea11442 | ||
|
|
120b24620b | ||
|
|
a1349f8313 | ||
|
|
0ca2ffc576 | ||
|
|
8fcf19b2f5 | ||
|
|
544f807971 | ||
|
|
a25b653753 | ||
|
|
25438db5e3 | ||
|
|
b7a39bc53a | ||
|
|
2675401a40 | ||
|
|
35ea345922 | ||
|
|
e7614de332 | ||
|
|
fe2049c5fe | ||
|
|
4d59388c83 | ||
|
|
415ca8a1ff | ||
|
|
d5582b318d | ||
|
|
95f12b0a72 | ||
|
|
0a43e20091 | ||
|
|
d1d79691dd | ||
|
|
e250894e42 | ||
|
|
337dec8ec3 | ||
|
|
a5a3507667 | ||
|
|
d002b2d009 | ||
|
|
46184fa5f6 | ||
|
|
cf83abb16b | ||
|
|
b20af097b7 | ||
|
|
7057e05925 | ||
|
|
927cf6581c | ||
|
|
3df87f6f36 | ||
|
|
de44db56aa | ||
|
|
4220169206 | ||
|
|
3e1f770226 | ||
|
|
5d36c05278 | ||
|
|
2eb46dad90 | ||
|
|
73efe5ce2e | ||
|
|
975f86b678 | ||
|
|
0d17b389e7 | ||
|
|
1ef2f5c1be | ||
|
|
bac18c09bb | ||
|
|
3770f20a5e | ||
|
|
2a9d76bd9d | ||
|
|
9b4bdfa7a1 | ||
|
|
332721639c | ||
|
|
9cba70ce18 | ||
|
|
ebb82db529 | ||
|
|
ef8b3b966f | ||
|
|
ae89b33abf | ||
|
|
94851bc05d | ||
|
|
3f304a02ff | ||
|
|
6bfa7d5816 | ||
|
|
8898f9477b | ||
|
|
bd95847ae2 | ||
|
|
353c82570b | ||
|
|
25a4658a26 | ||
|
|
6bdd2076a6 | ||
|
|
6f734c789f | ||
|
|
ad3192c881 | ||
|
|
2f85cf7c29 | ||
|
|
2e9f9f5b59 | ||
|
|
aca6363a74 | ||
|
|
5082b8fdd2 | ||
|
|
653ac34265 | ||
|
|
4e11415097 | ||
|
|
32b7feef24 | ||
|
|
413bbc66e5 | ||
|
|
1997742231 | ||
|
|
0b3ba21776 | ||
|
|
f372529cdb | ||
|
|
fec58bf028 | ||
|
|
b855fca9be | ||
|
|
5d5c75dba7 | ||
|
|
93a1cc671f | ||
|
|
fea3d575b7 | ||
|
|
3631c271a6 | ||
|
|
b9b0698668 | ||
|
|
7beec7f584 | ||
|
|
a0b7aa2969 | ||
|
|
15846216bb | ||
|
|
70b6ccc523 | ||
|
|
19da0da0a4 | ||
|
|
7e6c53f7b8 | ||
|
|
e084b48959 | ||
|
|
6398df70d4 | ||
|
|
66ed66308a | ||
|
|
6b4c0db79a | ||
|
|
1065bcda00 | ||
|
|
0713c37a65 | ||
|
|
1831c1c0db | ||
|
|
73b12dd199 | ||
|
|
f825d19eb4 | ||
|
|
e7ad0680bb | ||
|
|
6a5b42949f | ||
|
|
aeebbd08f2 | ||
|
|
1928d1b581 | ||
|
|
338d163fd4 | ||
|
|
c0366fab96 | ||
|
|
bd12bd1809 | ||
|
|
9de339550b | ||
|
|
00b9462708 | ||
|
|
9ca3ae0caa | ||
|
|
4479d21b91 | ||
|
|
a69908a7c3 | ||
|
|
8f3e8aaa5d | ||
|
|
6e05338fbb | ||
|
|
65b788bc54 | ||
|
|
35ac3a9b23 | ||
|
|
7131aa3a03 | ||
|
|
b69912fe31 | ||
|
|
51027f6b30 | ||
|
|
43c4d153f4 | ||
|
|
dac75f0126 | ||
|
|
c3404e48f2 | ||
|
|
e7aa1cdb35 | ||
|
|
24495bc675 | ||
|
|
b17fd3b7a9 | ||
|
|
55fd4d6f76 | ||
|
|
7aa25a7bb4 | ||
|
|
6a92261735 | ||
|
|
9c0d543ccc | ||
|
|
567472a51b | ||
|
|
cb942c800d | ||
|
|
bf1af936fb | ||
|
|
397a6eb573 | ||
|
|
a34aeccb8c | ||
|
|
46eea7dec8 | ||
|
|
1ee2a1bfd3 | ||
|
|
01a267ff05 | ||
|
|
7bae0f5042 | ||
|
|
1d08a14647 | ||
|
|
d26caa5b3c | ||
|
|
d14e32a882 | ||
|
|
a06e623e5e | ||
|
|
cacff26f3d | ||
|
|
7e5b95c503 | ||
|
|
8395f411be | ||
|
|
849f9b8e44 | ||
|
|
c0779bb668 | ||
|
|
18727a0c9c | ||
|
|
3b35740b6d | ||
|
|
4f0a9aff04 | ||
|
|
a9edcd1a26 | ||
|
|
c057c3cf1b | ||
|
|
b3bfe79ec9 | ||
|
|
2e970d0289 | ||
|
|
d4b25ff89b | ||
|
|
dee25ff2e9 | ||
|
|
328b6a73c5 | ||
|
|
95cf2eff4a | ||
|
|
07c468f3ed | ||
|
|
c12fccb2f7 | ||
|
|
b5d6a4ff72 | ||
|
|
49748aa564 | ||
|
|
e366a294da | ||
|
|
f251e031d6 | ||
|
|
b2d2e3e9b6 | ||
|
|
7ffc0892f7 | ||
|
|
a5a060b7c0 | ||
|
|
ceda5da4c5 | ||
|
|
1047116ee3 | ||
|
|
408959ee00 | ||
|
|
c1f68ae297 | ||
|
|
c8817c1e59 | ||
|
|
ebdc6dd7ae | ||
|
|
cb8e9e618d | ||
|
|
67d7203082 | ||
|
|
bb77d76df1 | ||
|
|
e117b16f29 | ||
|
|
959af4027f | ||
|
|
d01e1a15db | ||
|
|
1cbb5eb68a | ||
|
|
3dff85c0e8 | ||
|
|
0c41896376 | ||
|
|
e0c941021d | ||
|
|
08b6773987 | ||
|
|
50a69a54f4 | ||
|
|
cd601e7106 | ||
|
|
901c601dce | ||
|
|
ede9552518 | ||
|
|
29226de8d2 | ||
|
|
22d909a378 | ||
|
|
0e82550588 | ||
|
|
169d69251c | ||
|
|
3bb3ab9bc0 | ||
|
|
334eea8592 | ||
|
|
67e4bc39c5 | ||
|
|
f5329ad495 | ||
|
|
046cde9ada | ||
|
|
320f175466 | ||
|
|
116a86327b | ||
|
|
0fa87b11e6 | ||
|
|
df11f271a3 | ||
|
|
351c277c60 | ||
|
|
c9078db9f5 | ||
|
|
eec3c46b74 | ||
|
|
f17edbda4e | ||
|
|
703ffd6717 | ||
|
|
35f1155250 | ||
|
|
76ed2d8fd1 | ||
|
|
cbf55ca58b | ||
|
|
39afc075ca | ||
|
|
5ea6764f40 | ||
|
|
e7168ca832 | ||
|
|
3c85f8b406 | ||
|
|
86a78b7e3a | ||
|
|
9e745fdd2d | ||
|
|
d5e44ffb89 | ||
|
|
50422cceb4 | ||
|
|
cf92ee43f8 | ||
|
|
9097421ad6 | ||
|
|
288e61784e | ||
|
|
1dcdea964a | ||
|
|
2d1ccf0e19 | ||
|
|
21e036dfae | ||
|
|
4bf5dfb8b1 | ||
|
|
51f975ffe9 | ||
|
|
97cfb84bdc | ||
|
|
bd4da40310 | ||
|
|
94a05d2c28 | ||
|
|
531c9ee420 | ||
|
|
bdc95e78dd | ||
|
|
f61664909f | ||
|
|
fac3e72dd9 | ||
|
|
d1a06ab709 | ||
|
|
b282e8ce98 | ||
|
|
ff86d51220 | ||
|
|
37d65916b9 | ||
|
|
1844d1f524 | ||
|
|
8288336287 | ||
|
|
e987f912f1 | ||
|
|
12cda7d93f | ||
|
|
8ffae9ac12 | ||
|
|
9b0fe9411e | ||
|
|
33e5f888ea | ||
|
|
f2ec507157 | ||
|
|
a1bf353353 | ||
|
|
66466d60af | ||
|
|
e273df8bc3 | ||
|
|
d91631a9dc | ||
|
|
083862691c | ||
|
|
2e31171fe5 | ||
|
|
702911eb66 | ||
|
|
b85b971e20 | ||
|
|
64276396ce | ||
|
|
aa7755af5b | ||
|
|
5d5f7d3252 | ||
|
|
587c18c66a | ||
|
|
ae24dd37b8 | ||
|
|
b74fb3f099 | ||
|
|
b7fc9159ef | ||
|
|
70aeb00aaf | ||
|
|
8b4fb167d7 | ||
|
|
9fcefcffc2 | ||
|
|
3fca59850c | ||
|
|
6313e0b064 | ||
|
|
dbd643f6ab | ||
|
|
aacbabb439 | ||
|
|
23134ae5fd | ||
|
|
1d60fb7de9 | ||
|
|
07ba16593f | ||
|
|
cf71698619 | ||
|
|
10ebdeef09 | ||
|
|
a7286d4ca4 | ||
|
|
350f296725 | ||
|
|
9ea986f0e6 | ||
|
|
d26ff3900c | ||
|
|
e0a5e94f5c | ||
|
|
ef0c06f485 | ||
|
|
da99fb7987 | ||
|
|
07de6cd17a | ||
|
|
e0fe706032 | ||
|
|
4e65bd946d | ||
|
|
c055395157 | ||
|
|
feb3eab3cd | ||
|
|
5c22432b85 | ||
|
|
3f2ad4c37a | ||
|
|
90167a73eb | ||
|
|
17f6203d99 | ||
|
|
0c3ceede24 | ||
|
|
d666255254 | ||
|
|
3a79ff636b | ||
|
|
cbf1281b25 | ||
|
|
7e25878eeb | ||
|
|
5c2fd1f2b5 | ||
|
|
3d904cbd31 | ||
|
|
abb45289ee | ||
|
|
3a39d9d6e2 | ||
|
|
5f5cc13d1a | ||
|
|
fb8102bd01 | ||
|
|
f3498ebbe1 | ||
|
|
7fe4f52956 | ||
|
|
0d1d5a6ad7 | ||
|
|
2da132393f | ||
|
|
8649805ab3 | ||
|
|
7413bf57ab | ||
|
|
1107f0e9e2 | ||
|
|
1eb137e936 | ||
|
|
75fb196660 | ||
|
|
b1293a4b49 | ||
|
|
e1982b177e | ||
|
|
ea758b4f5b | ||
|
|
7dabd1d028 | ||
|
|
2c9bc54010 | ||
|
|
55fc68eb1b | ||
|
|
b6f22b7736 | ||
|
|
f8b2ddde8b | ||
|
|
64c6589448 | ||
|
|
abec656058 | ||
|
|
7598b94ea7 | ||
|
|
5987cae5b6 | ||
|
|
9b85291a9d | ||
|
|
d1445a7972 | ||
|
|
35959261af | ||
|
|
2eed390451 | ||
|
|
40c08a09fd | ||
|
|
08dc0c6c43 | ||
|
|
90bdb0dbf1 | ||
|
|
f9ddc875d5 | ||
|
|
02bae8a12d | ||
|
|
41f1de86b7 | ||
|
|
4b391dd642 | ||
|
|
1c4685fa8f | ||
|
|
f28ca6726e | ||
|
|
ce1e017d91 | ||
|
|
06fafd1eea | ||
|
|
569963f849 | ||
|
|
a175c97dcd | ||
|
|
17e7e5c890 | ||
|
|
ed5481f173 | ||
|
|
ff1fc44b1a | ||
|
|
c6ffe7411b | ||
|
|
d7939c72c6 | ||
|
|
6546b983c4 | ||
|
|
a7bd6daf25 | ||
|
|
07dfea17e6 | ||
|
|
2213cd9241 | ||
|
|
e146595a1a | ||
|
|
7dd7279097 | ||
|
|
6ee53e8d6d | ||
|
|
c81ea2ed50 | ||
|
|
6f1fc641e4 | ||
|
|
c9210003c9 | ||
|
|
2e2976bd78 | ||
|
|
fc0dfc83be | ||
|
|
ccf703e4bc | ||
|
|
bbe3a3bb15 | ||
|
|
6377424320 | ||
|
|
8c787292a6 | ||
|
|
770a99c4a2 | ||
|
|
903478524c | ||
|
|
b008017174 | ||
|
|
3c03bf92c4 | ||
|
|
e1c410be21 | ||
|
|
0120d3f226 | ||
|
|
25dae82cba | ||
|
|
496e8ad2b7 | ||
|
|
2488151757 | ||
|
|
2418e6ae64 | ||
|
|
168a14d2b5 | ||
|
|
9232f31778 | ||
|
|
c08226e1d3 | ||
|
|
9c324b1817 | ||
|
|
36880dadf0 | ||
|
|
25b5db0e23 | ||
|
|
9415d2e8d3 | ||
|
|
2af9d1dd38 | ||
|
|
5033ca0373 | ||
|
|
040216ce3c | ||
|
|
5a67648b7d | ||
|
|
99c29fe86b | ||
|
|
77b4858d5f | ||
|
|
27afadfcdc | ||
|
|
59596a22e5 | ||
|
|
4342f0f212 | ||
|
|
94d205bd59 | ||
|
|
405331d177 | ||
|
|
4015305bd7 | ||
|
|
ffe2851e4f | ||
|
|
bcd2fc8e91 | ||
|
|
6ade5a4f63 | ||
|
|
718722c76f | ||
|
|
e39845afc0 | ||
|
|
0896465891 | ||
|
|
ffa1059b26 | ||
|
|
be85f01756 | ||
|
|
53eafb8c7b | ||
|
|
247d82184a | ||
|
|
63b5346308 | ||
|
|
7a41ab25e4 | ||
|
|
9b87b4dfe4 | ||
|
|
6e1160968d | ||
|
|
5e250c3950 | ||
|
|
0283b88023 | ||
|
|
ee8979aa09 | ||
|
|
78286f22a9 | ||
|
|
9dc9cd3f2b | ||
|
|
3fbd2abb37 | ||
|
|
2f2063c515 | ||
|
|
cd1a67d1ee | ||
|
|
2568703376 | ||
|
|
1fbe93d686 | ||
|
|
4072bbf406 | ||
|
|
e7831f82a7 | ||
|
|
10757f0717 | ||
|
|
e1619b66c0 | ||
|
|
b77f727ed5 | ||
|
|
6eb35caea8 | ||
|
|
fa21d28c90 | ||
|
|
e6fb1ca2b2 | ||
|
|
7cc9abf477 | ||
|
|
a1452eff65 | ||
|
|
62f76f8bae | ||
|
|
9a6f33ffc2 | ||
|
|
e4a1fe741b | ||
|
|
77bcdd92c7 | ||
|
|
0394461e2e | ||
|
|
37b4f2d864 | ||
|
|
b72405806e | ||
|
|
a880c3dbe7 | ||
|
|
044949dc88 | ||
|
|
d71d538de8 | ||
|
|
14665230ff | ||
|
|
02c625ba0d | ||
|
|
0fb4150c96 | ||
|
|
bdbe49efaf | ||
|
|
018c43cdc4 | ||
|
|
8b94a98466 | ||
|
|
3b34a42f10 | ||
|
|
bdbd536cdd | ||
|
|
faf12f4d18 | ||
|
|
074c102ffe | ||
|
|
85e07c639d | ||
|
|
4d342548fa | ||
|
|
097e5e738e | ||
|
|
ca5594a985 | ||
|
|
af93a12b8f | ||
|
|
6ba66543ff | ||
|
|
228078c07b | ||
|
|
21a369dd58 | ||
|
|
f8014f1bf4 | ||
|
|
176f0d94cb | ||
|
|
b6abdcb357 | ||
|
|
47f231a763 | ||
|
|
8d1696bc19 | ||
|
|
6f19b984d0 | ||
|
|
abe12a318a | ||
|
|
9ce840347a | ||
|
|
f50f0b582a | ||
|
|
f428d8bf35 | ||
|
|
7b86984312 | ||
|
|
7041098e9f | ||
|
|
d5a236f793 | ||
|
|
da454c0762 | ||
|
|
0e36246192 | ||
|
|
426355de20 | ||
|
|
0f42bbb062 | ||
|
|
81aae5b7cf | ||
|
|
d6d02b268e | ||
|
|
3cc7123a9a | ||
|
|
c6465b2a94 | ||
|
|
f05307da73 | ||
|
|
b2c14544ab | ||
|
|
bbae163a6e | ||
|
|
124c22a5ee | ||
|
|
f5dc247fb3 | ||
|
|
c4e7811307 | ||
|
|
900cfac1aa | ||
|
|
82b720b44e | ||
|
|
3320d5e10c | ||
|
|
66ddfd7a9a | ||
|
|
d345fbd4b2 | ||
|
|
a125547110 | ||
|
|
470ecffbaa | ||
|
|
470e9264e2 | ||
|
|
4ff387cc28 | ||
|
|
19263c985b | ||
|
|
4a6b99b15d | ||
|
|
07eef3d26c | ||
|
|
35fb76d13f | ||
|
|
3584d8a445 | ||
|
|
69e4ba1f95 | ||
|
|
32428557b3 | ||
|
|
a850eb4269 | ||
|
|
9eee7f156e | ||
|
|
9aa05e1cc1 | ||
|
|
d92e8442ab | ||
|
|
66f3a2218c | ||
|
|
2c9269391b | ||
|
|
9671e29a72 | ||
|
|
80c5737ffd | ||
|
|
40a61167e0 | ||
|
|
2c71d36662 | ||
|
|
fd8ad05ca4 | ||
|
|
adcbb6c482 | ||
|
|
7b9c4b35a6 | ||
|
|
2049c2bebc | ||
|
|
7583174edd | ||
|
|
f82a629877 | ||
|
|
760354188b | ||
|
|
53dca9e338 | ||
|
|
5c71a4f82f | ||
|
|
f8998aaed7 | ||
|
|
f6a07f4c40 | ||
|
|
9df2258a70 | ||
|
|
bf2b022ec7 | ||
|
|
c3f1050dce | ||
|
|
50631ee265 | ||
|
|
2c43032810 | ||
|
|
f9b1ea70de | ||
|
|
12897231a5 | ||
|
|
256b7517ed | ||
|
|
b961a8555b | ||
|
|
f695857d48 | ||
|
|
8f07acb60a | ||
|
|
121a378259 | ||
|
|
2cd0e7a796 | ||
|
|
3474c48c47 | ||
|
|
5b69879c20 | ||
|
|
a6195462f2 | ||
|
|
cd165a37d6 | ||
|
|
06770c756a | ||
|
|
8e7788f06c | ||
|
|
f05eb3c7e2 | ||
|
|
47d5e09e2f | ||
|
|
6dcc5c813c | ||
|
|
779df186e0 | ||
|
|
f112a83588 | ||
|
|
e94f8f8965 | ||
|
|
5711d11c4b | ||
|
|
98fa05dd4f | ||
|
|
11e64ec3cc | ||
|
|
a946cdfb45 | ||
|
|
f0135edcd3 | ||
|
|
900e5eda01 | ||
|
|
f02e489c8e | ||
|
|
204c87b7cf | ||
|
|
ce4395b8e6 | ||
|
|
ec10c9f962 | ||
|
|
709a591d26 | ||
|
|
58f9ca8516 | ||
|
|
f283468add | ||
|
|
2b1b46914e | ||
|
|
2fd1e6f406 | ||
|
|
3cc1286953 | ||
|
|
7621e58d88 | ||
|
|
4baed861eb | ||
|
|
0a3a067b12 | ||
|
|
2af9d020c0 | ||
|
|
3a60239815 | ||
|
|
571cb503ef | ||
|
|
f2f53cb1ef | ||
|
|
aa815390e2 | ||
|
|
aceb75e0c6 | ||
|
|
7b7b989c1b | ||
|
|
8aea8ea50e | ||
|
|
a3417b7410 | ||
|
|
66de656c5c | ||
|
|
9b8d1dbf30 | ||
|
|
dab379e16e | ||
|
|
aad5196cac | ||
|
|
a002c152e8 | ||
|
|
96a582a590 | ||
|
|
29b28c2a09 | ||
|
|
1b8f2ce23c | ||
|
|
6100a734cc | ||
|
|
008fbf861a | ||
|
|
596783bab4 | ||
|
|
66125c27cb | ||
|
|
44abde194b | ||
|
|
c71c9536fe | ||
|
|
11f6ae0310 | ||
|
|
10b5a9ec29 | ||
|
|
9c77ecf886 | ||
|
|
7071b68c79 | ||
|
|
73cb5c9bb7 | ||
|
|
4c9344e402 | ||
|
|
033553a2a8 | ||
|
|
bd8250f100 | ||
|
|
76d466b89f | ||
|
|
0979110095 | ||
|
|
591776ab6c | ||
|
|
b18ddf18ac | ||
|
|
6cad48361b | ||
|
|
baa59820f1 | ||
|
|
c03207f3eb | ||
|
|
e039531ddd | ||
|
|
e94a19a522 | ||
|
|
1aedc4e035 | ||
|
|
6fa6ac2899 | ||
|
|
6dee37ee72 | ||
|
|
64a958a799 | ||
|
|
d36abd2c8e | ||
|
|
b1dfc8a7ea | ||
|
|
c78fc4f85a | ||
|
|
9de0f3d847 | ||
|
|
42cc6d2186 | ||
|
|
b0a2bb437a | ||
|
|
51e72e696d | ||
|
|
9183f13aeb | ||
|
|
28a936be79 |
13
.dockerignore
Executable file
@@ -0,0 +1,13 @@
|
||||
.dockerignore
|
||||
.env
|
||||
.git
|
||||
.github
|
||||
.gitignore
|
||||
docker-compose.yml
|
||||
Dockerfile
|
||||
dockerfiles/LICENSE
|
||||
dockerfiles/README.md
|
||||
docs
|
||||
LICENSE.txt
|
||||
README.md
|
||||
CONTRIBUTING
|
||||
16
.env
Executable file
@@ -0,0 +1,16 @@
|
||||
#GLOBAL PATH VARIABLES
|
||||
|
||||
APP_DATA_LOCATION=/path/to/docker_appdata
|
||||
APP_CONFIG_LOCATION=/path/to/docker_config
|
||||
LOGS_LOCATION=/path/to/docker_logs
|
||||
|
||||
#ENVIRONMENT VARIABLES
|
||||
|
||||
TZ=Europe/Paris
|
||||
HOST_USER_ID=1000
|
||||
HOST_USER_GID=1000
|
||||
PORT=20211
|
||||
|
||||
#DEVELOPMENT VARIABLES
|
||||
|
||||
DEV_LOCATION=/path/to/local/source/code
|
||||
20
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Executable file
@@ -0,0 +1,20 @@
|
||||
---
|
||||
name: Feature request
|
||||
about: Suggest an idea for this project
|
||||
title: ''
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Is your feature request related to a problem? Please describe.**
|
||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
||||
|
||||
**Describe the solution you'd like**
|
||||
A clear and concise description of what you want to happen.
|
||||
|
||||
**Describe alternatives you've considered**
|
||||
A clear and concise description of any alternative solutions or features you've considered.
|
||||
|
||||
**Additional context**
|
||||
Add any other context or screenshots about the feature request here.
|
||||
46
.github/ISSUE_TEMPLATE/i-have-an-issue.md
vendored
Executable file
@@ -0,0 +1,46 @@
|
||||
---
|
||||
name: I have an issue
|
||||
about: Describe this issue template's purpose here.
|
||||
title: ''
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Describe the issue**
|
||||
|
||||
|
||||
**Paste last few lines from `pialert.log`**
|
||||
|
||||
```
|
||||
|
||||
paste here
|
||||
|
||||
```
|
||||
|
||||
**Paste your `pialert.conf` (remove personal info)**
|
||||
|
||||
```
|
||||
|
||||
paste here
|
||||
|
||||
```
|
||||
|
||||
**Paste your `docker-compose.yml` and `.env` (remove personal info)**
|
||||
|
||||
`docker-compose.yml`
|
||||
```
|
||||
|
||||
paste here
|
||||
|
||||
```
|
||||
|
||||
|
||||
`.env`
|
||||
```
|
||||
|
||||
paste here
|
||||
|
||||
```
|
||||
**Screenshots**
|
||||
If applicable, add screenshots to help explain your problem.
|
||||
64
.github/workflows/docker_dev.yml
vendored
Executable file
@@ -0,0 +1,64 @@
|
||||
---
|
||||
name: docker
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- '**'
|
||||
tags:
|
||||
- '*.*.*'
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
|
||||
jobs:
|
||||
docker_dev:
|
||||
runs-on: ubuntu-latest
|
||||
if: contains(github.event.head_commit.message, 'PUSHPROD') != 'True'
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v2
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v2
|
||||
|
||||
- name: Set up dynamic build ARGs
|
||||
id: getargs
|
||||
run: echo "version=$(cat ./stable/VERSION)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Docker meta
|
||||
id: meta
|
||||
uses: docker/metadata-action@v4
|
||||
with:
|
||||
# list of Docker images to use as base name for tags
|
||||
images: |
|
||||
jokobsk/pi.alert_dev
|
||||
# generate Docker tags based on the following events/attributes
|
||||
tags: |
|
||||
type=raw,value=latest
|
||||
type=schedule
|
||||
type=ref,event=branch
|
||||
type=ref,event=pr
|
||||
type=semver,pattern={{version}}
|
||||
type=semver,pattern={{major}}.{{minor}}
|
||||
type=semver,pattern={{major}}
|
||||
type=sha
|
||||
|
||||
- name: Login to DockerHub
|
||||
if: github.event_name != 'pull_request'
|
||||
uses: docker/login-action@v2
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
|
||||
- name: Build and push
|
||||
uses: docker/build-push-action@v3
|
||||
with:
|
||||
context: .
|
||||
platforms: linux/amd64,linux/arm64,linux/arm/v7
|
||||
push: ${{ github.event_name != 'pull_request' }}
|
||||
tags: ${{ steps.meta.outputs.tags }}
|
||||
labels: ${{ steps.meta.outputs.labels }}
|
||||
63
.github/workflows/docker_prod.yml
vendored
Executable file
@@ -0,0 +1,63 @@
|
||||
# This workflow uses actions that are not certified by GitHub.
|
||||
# They are provided by a third-party and are governed by
|
||||
# separate terms of service, privacy policy, and support
|
||||
# documentation.
|
||||
|
||||
# GitHub recommends pinning actions to a commit SHA.
|
||||
# To get a newer version, you will need to update the SHA.
|
||||
# You can also reference a tag or branch, but the action may change without warning.
|
||||
|
||||
name: Publish Docker image
|
||||
|
||||
on:
|
||||
release:
|
||||
types: [published]
|
||||
tags:
|
||||
- '*.*.*'
|
||||
jobs:
|
||||
docker:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v2
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v2
|
||||
|
||||
- name: Set up dynamic build ARGs
|
||||
id: getargs
|
||||
run: echo "version=$(cat ./stable/VERSION)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Docker meta
|
||||
id: meta
|
||||
uses: docker/metadata-action@v4
|
||||
with:
|
||||
# list of Docker images to use as base name for tags
|
||||
images: |
|
||||
jokobsk/pi.alert
|
||||
# generate Docker tags based on the following events/attributes
|
||||
tags: |
|
||||
type=semver,pattern={{version}},value=${{ inputs.version }}
|
||||
type=semver,pattern={{major}}.{{minor}},value=${{ inputs.version }}
|
||||
type=semver,pattern={{major}},value=${{ inputs.version }}
|
||||
type=ref,event=branch,suffix=-{{ sha }}
|
||||
type=ref,event=pr
|
||||
type=raw,value=latest,enable=${{ github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/') }}
|
||||
- name: Login to DockerHub
|
||||
if: github.event_name != 'pull_request'
|
||||
uses: docker/login-action@v2
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
|
||||
- name: Build and push
|
||||
uses: docker/build-push-action@v3
|
||||
with:
|
||||
context: .
|
||||
platforms: linux/amd64,linux/arm64,linux/arm/v7
|
||||
push: ${{ github.event_name != 'pull_request' }}
|
||||
tags: ${{ steps.meta.outputs.tags }}
|
||||
labels: ${{ steps.meta.outputs.labels }}
|
||||
8
.gitignore
vendored
Executable file
@@ -0,0 +1,8 @@
|
||||
.vscode
|
||||
.DS_Store
|
||||
config/pialert.conf
|
||||
db/*
|
||||
front/log/*
|
||||
front/plugins/**/*.log
|
||||
**/%40eaDir/
|
||||
**/@eaDir/
|
||||
14
CONTRIBUTING
Executable file
@@ -0,0 +1,14 @@
|
||||
# Contributing to this project
|
||||
|
||||
## Issues, bugs, feature requests
|
||||
|
||||
The issue tracker is the preferred channel for bug reports, features requests and submitting pull requests.
|
||||
|
||||
Before submitting a new issue please spend a couple of minutes on research:
|
||||
|
||||
* Check [🛑 Common issues](https://github.com/jokob-sk/Pi.Alert/tree/main/dockerfiles#-common-issues)
|
||||
* Check [💡 Closed issues](https://github.com/jokob-sk/Pi.Alert/issues?q=is%3Aissue+is%3Aclosed) if a similar issue was solved in the past.
|
||||
|
||||
## Pull-requests (PRs)
|
||||
|
||||
If you submit a PR please do check that your changes are backward compatible with existing installations. Existing features should be always preserved.
|
||||
48
Dockerfile
Executable file
@@ -0,0 +1,48 @@
|
||||
FROM debian:bullseye-slim
|
||||
|
||||
# default UID and GID
|
||||
ENV USER=pi USER_ID=1000 USER_GID=1000 TZ=Europe/London PORT=20211
|
||||
|
||||
# Todo, figure out why using a workdir instead of full paths don't work
|
||||
# Todo, do we still need all these packages? I can already see sudo which isn't needed
|
||||
|
||||
RUN apt-get update \
|
||||
&& apt-get install --no-install-recommends tini ca-certificates curl libwww-perl arp-scan perl apt-utils cron sudo nginx-light php php-cgi php-fpm php-sqlite3 php-curl sqlite3 dnsutils net-tools python3 iproute2 nmap python3-pip zip -y \
|
||||
&& pip3 install requests paho-mqtt scapy cron-converter pytz json2table dhcp-leases pyunifi \
|
||||
&& update-alternatives --install /usr/bin/python python /usr/bin/python3 10 \
|
||||
&& apt-get clean autoclean \
|
||||
&& apt-get autoremove \
|
||||
&& rm -rf /var/lib/apt/lists/* \
|
||||
&& rm -rf /var/www/html \
|
||||
&& ln -s /home/pi/pialert/front /var/www/html
|
||||
|
||||
# create pi user and group
|
||||
# add root and www-data to pi group so they can r/w files and db
|
||||
RUN groupadd --gid "${USER_GID}" "${USER}" && \
|
||||
useradd \
|
||||
--uid ${USER_ID} \
|
||||
--gid ${USER_GID} \
|
||||
--create-home \
|
||||
--shell /bin/bash \
|
||||
${USER} && \
|
||||
usermod -a -G ${USER_GID} root && \
|
||||
usermod -a -G ${USER_GID} www-data
|
||||
|
||||
COPY --chmod=775 --chown=${USER_ID}:${USER_GID} . /home/pi/pialert/
|
||||
|
||||
# Pi.Alert
|
||||
RUN rm /etc/nginx/sites-available/default \
|
||||
&& ln -s /home/pi/pialert/install/default /etc/nginx/sites-available/default \
|
||||
&& sed -ie 's/listen 80/listen '${PORT}'/g' /etc/nginx/sites-available/default \
|
||||
# run the hardware vendors update
|
||||
&& /home/pi/pialert/back/update_vendors.sh \
|
||||
# Create a backup of the pialert.conf to be used if the user didn't supply a configuration file
|
||||
&& cp /home/pi/pialert/config/pialert.conf /home/pi/pialert/back/pialert.conf_bak \
|
||||
# Create a backup of the pialert.db to be used if the user didn't supply a database
|
||||
&& cp /home/pi/pialert/db/pialert.db /home/pi/pialert/back/pialert.db_bak \
|
||||
# Create a buildtimestamp.txt to later check if a new version was released
|
||||
&& date +%s > /home/pi/pialert/front/buildtimestamp.txt
|
||||
|
||||
ENTRYPOINT ["tini", "--"]
|
||||
|
||||
CMD ["/home/pi/pialert/dockerfiles/start.sh"]
|
||||
2
FUNDING.yml
Executable file
@@ -0,0 +1,2 @@
|
||||
github: jokob-sk
|
||||
patreon: 84385063
|
||||
0
LICENSE.txt
Normal file → Executable file
170
README.md
Normal file → Executable file
@@ -1,27 +1,23 @@
|
||||
# Pi.Alert
|
||||
<!--- --------------------------------------------------------------------- --->
|
||||
|
||||
WIFI / LAN intruder detector.
|
||||
💻🔍 WIFI / LAN intruder detector.
|
||||
|
||||
Scan the devices connected to your WIFI / LAN and alert you the connection of
|
||||
unknown devices. It also warns the disconnection of "always connected" devices.
|
||||
Scans for devices connected to your WIFI / LAN and alerts you if new and unknown devices are found.
|
||||
|
||||
![Main screen][main]
|
||||
|
||||
*(Apologies for my English and my limited knowledge of Python, php and
|
||||
JavaScript)*
|
||||
# 🐳 Docker image
|
||||
[](https://github.com/jokob-sk/Pi.Alert/actions/workflows/docker_prod.yml)
|
||||
[](https://github.com/jokob-sk/Pi.Alert)
|
||||
[](https://hub.docker.com/r/jokobsk/pi.alert)
|
||||
[](https://hub.docker.com/r/jokobsk/pi.alert)
|
||||
[](https://hub.docker.com/r/jokobsk/pi.alert)
|
||||
|
||||
## How it works
|
||||
The system continuously scans the network for:
|
||||
- New devices
|
||||
- New connections (re-connections)
|
||||
- Disconnections
|
||||
- "Always Connected" devices down
|
||||
- Devices IP changes
|
||||
- Internet IP address changes
|
||||
🐳 [Docker hub](https://registry.hub.docker.com/r/jokobsk/pi.alert) | 📄 [Dockerfile](https://github.com/jokob-sk/Pi.Alert/blob/main/Dockerfile) | 📚 [Docker instructions](https://github.com/jokob-sk/Pi.Alert/blob/main/dockerfiles/README.md) | 🆕 [Release notes](https://github.com/jokob-sk/Pi.Alert/releases)
|
||||
|
||||
## Scan Methods
|
||||
Up to three scanning methods are used:
|
||||
## 🔍 Scan Methods
|
||||
The system continuously scans the network for, **New devices**, **New connections** (re-connections), **Disconnections**, **"Always Connected" devices down**, Devices **IP changes** and **Internet IP address changes**. Scanning methods are:
|
||||
- **Method 1: arp-scan**. The arp-scan system utility is used to search
|
||||
for devices on the network using arp frames.
|
||||
- **Method 2: Pi-hole**. This method is optional and complementary to
|
||||
@@ -33,98 +29,86 @@ Up to three scanning methods are used:
|
||||
examines the DHCP leases (addresses assigned) to find active devices
|
||||
that were not discovered by the other methods.
|
||||
|
||||
## Components
|
||||
The system consists of two parts:
|
||||
## 🧩 Integrations
|
||||
- [Apprise](https://hub.docker.com/r/caronc/apprise), [Pushsafer](https://www.pushsafer.com/), [NTFY](https://ntfy.sh/)
|
||||
- [Webhooks](https://github.com/jokob-sk/Pi.Alert/blob/main/docs/WEBHOOK_N8N.md) ([sample JSON](docs/webhook_json_sample.json))
|
||||
- Home Assistant via [MQTT](https://www.home-assistant.io/integrations/mqtt/) - discovery ~10s per device, use [MQTT Explorer](https://mqtt-explorer.com/) to delete devices
|
||||
- [API endpoint](https://github.com/jokob-sk/Pi.Alert/blob/main/docs/API.md)
|
||||
- [Plugin system](https://github.com/jokob-sk/Pi.Alert/tree/main/front/plugins) for custom script monitoring
|
||||
|
||||
### Back
|
||||
In charge of:
|
||||
- Scan the network searching connected devices using the scanning methods
|
||||
described
|
||||
- Store the information in the DB
|
||||
- Report the changes detected by e-mail
|
||||
|
||||
| ![Report 1][report1] | ![Report 2][report2] |
|
||||
| -------------------- | -------------------- |
|
||||
|
||||
### Front
|
||||
A web frontal that allows:
|
||||
- Manage the devices inventory and the characteristics
|
||||
- Display in a visual way all the information collected by the back
|
||||
- Sessions
|
||||
- Connected devices
|
||||
- Favorites
|
||||
- Events
|
||||
- Presence
|
||||
- Concurrent devices
|
||||
- Down alerts
|
||||
- IP's
|
||||
- ...
|
||||
|
||||
| ![Screen 1][screen1] | ![Screen 2][screen2] |
|
||||
| -------------------- | -------------------- |
|
||||
| ![Screen 3][screen3] | ![Screen 4][screen4] |
|
||||
|
||||
|
||||
# Installation
|
||||
<!--- --------------------------------------------------------------------- --->
|
||||
Initially designed to run on a Raspberry Pi, probably it can run on many other
|
||||
Linux distributions.
|
||||
|
||||
- One-step Automated Install:
|
||||
#### `curl -sSL https://github.com/pucherot/Pi.Alert/raw/main/install/pialert_install.sh | bash`
|
||||
|
||||
- [Installation Guide (step by step)](docs/INSTALL.md)
|
||||
|
||||
|
||||
# Update
|
||||
<!--- --------------------------------------------------------------------- --->
|
||||
- One-step Automated Update:
|
||||
#### `curl -sSL https://github.com/pucherot/Pi.Alert/raw/main/install/pialert_update.sh | bash`
|
||||
|
||||
|
||||
## Device Management
|
||||
# 📥 Installation
|
||||
<!--- --------------------------------------------------------------------- --->
|
||||
|
||||
- [Device Management instructions](docs/DEVICE_MANAGEMENT.md)
|
||||
⚠ Only tested as a [docker container - follow these instructions here](dockerfiles/README.md).
|
||||
> Check out [leiweibau's fork](https://github.com/leiweibau/Pi.Alert/) if you want to install Pi.Alert on the server directly or original instructions for [pucherot's original code](https://github.com/pucherot/Pi.Alert/)
|
||||
|
||||
# 📑 Features
|
||||
- Display:
|
||||
- Sessions, Connected devices, Favorites, Events, Presence, Concurrent devices, Down alerts, IP's
|
||||
- Manual Nmap scans, Optional speedtest for Device "Internet"
|
||||
- Simple Network relationship display
|
||||
- Maintenance tasks and Settings like:
|
||||
- Theme Selection (blue, red, green, yellow, black, purple) and Light/Dark-Mode Switch
|
||||
- DB maintenance, Backup, Restore tools and CSV Export / Import
|
||||
- Simple login Support
|
||||
- 🌟(Experimental) [Plugin system](https://github.com/jokob-sk/Pi.Alert/tree/main/front/plugins)
|
||||
- Create custom plugins with automatically generated settings and UI.
|
||||
- Monitor anything for changes
|
||||
- Check the instructions carefully if you are up for a challenge! Current plugins include:
|
||||
- Detecting Rogue DHCP servers
|
||||
- Monitoring HTTP status changes of domains/URLs
|
||||
- Import devices from DHCP.leases files or a UniFi controller
|
||||
|
||||
| ![Screen 1][screen1] | ![Screen 2][screen2] | ![Screen 5][screen5] |
|
||||
|----------------------|----------------------| ----------------------|
|
||||
| ![Screen 3][screen3] | ![Screen 4][screen4] | ![Screen 6][screen6] |
|
||||
| ![Screen 8][screen8] | ![Report 2][report2] | ![Screen 9][screen9] |
|
||||
|
||||
|
||||
## Other useful info
|
||||
<!--- --------------------------------------------------------------------- --->
|
||||
### 🔗 Other Alternatives
|
||||
|
||||
### [Versions History](docs/VERSIONS_HISTORY.md)
|
||||
- [WatchYourLAN](https://github.com/aceberg/WatchYourLAN) - Lightweight network IP scanner with web GUI (Open source)
|
||||
- [Fing](https://www.fing.com/) - Network scanner app for your Internet security (Commercial, Phone App, Proprietary hardware)
|
||||
|
||||
### Powered by:
|
||||
| Product | Objetive |
|
||||
| ------------ | -------------------------------------- |
|
||||
| Python | Programming language for the Back |
|
||||
| PHP | Programming language for the Front-end |
|
||||
| JavaScript | Programming language for the Front-end |
|
||||
| Bootstrap | Front-end framework |
|
||||
| Admin.LTE | Bootstrap template |
|
||||
| FullCalendar | Calendar component |
|
||||
| Sqlite | DB engine |
|
||||
| Lighttpd | Webserver |
|
||||
| arp-scan | Scan network using arp commands |
|
||||
| Pi.hole | DNS Server with Ad-block |
|
||||
| dnsmasq | DHCP Server |
|
||||
### Old docs
|
||||
|
||||
Device Management [instructions](docs/DEVICE_MANAGEMENT.md) | Old Versions [History](docs/VERSIONS_HISTORY.md)
|
||||
|
||||
### License
|
||||
GPL 3.0
|
||||
[Read more here](LICENSE.txt)
|
||||
|
||||
### Contact
|
||||
pi.alert.application@gmail.com
|
||||
GPL 3.0 | [Read more here](LICENSE.txt) | Source of the [animated GIF (Loading Animation)](https://commons.wikimedia.org/wiki/File:Loading_Animation.gif) | Source of the [selfhosted Fonts](https://github.com/adobe-fonts/source-sans)
|
||||
|
||||
***Suggestions and comments are welcome***
|
||||
### 🥇 Special thanks
|
||||
|
||||
This code is a collaborative body of work, with special thanks to:
|
||||
|
||||
- 🏆 [pucherot/Pi.Alert](https://github.com/pucherot/Pi.Alert) is the original creator od PiAlert
|
||||
- [leiweibau](https://github.com/leiweibau/Pi.Alert): Dark mode (and much more)
|
||||
- [Macleykun](https://github.com/Macleykun): Help with Dockerfile clean-up
|
||||
- [Final-Hawk](https://github.com/Final-Hawk): Help with NTFY, styling and other fixes
|
||||
- [TeroRERO](https://github.com/terorero): Spanish translation
|
||||
- Please see the [Git contributors](https://github.com/jokob-sk/Pi.Alert/graphs/contributors) for a full list of people and their contributions to the project
|
||||
|
||||
## ☕ Support me
|
||||
|
||||
<a href="https://github.com/sponsors/jokob-sk" target="_blank"><img src="https://i.imgur.com/X6p5ACK.png" alt="Sponsor Me on GitHub" style="height: 30px !important;width: 117px !important;" width="150px" ></a>
|
||||
<a href="https://www.buymeacoffee.com/jokobsk" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Buy Me A Coffee" style="height: 30px !important;width: 117px !important;" width="117px" height="30px" ></a>
|
||||
<a href="https://www.patreon.com/user?u=84385063" target="_blank"><img src="https://upload.wikimedia.org/wikipedia/commons/thumb/8/82/Patreon_logo_with_wordmark.svg/512px-Patreon_logo_with_wordmark.svg.png" alt="Support me on patreon" style="height: 30px !important;width: 117px !important;" width="117px" ></a>
|
||||
|
||||
BTC: 1N8tupjeCK12qRVU2XrV17WvKK7LCawyZM
|
||||
|
||||
<!--- --------------------------------------------------------------------- --->
|
||||
[main]: ./docs/img/1_devices.jpg "Main screen"
|
||||
[screen1]: ./docs/img/2_1_device_details.jpg "Screen 1"
|
||||
[screen2]: ./docs/img/2_2_device_sessions.jpg "Screen 2"
|
||||
[screen3]: ./docs/img/2_3_device_presence.jpg "Screen 3"
|
||||
[screen4]: ./docs/img/3_presence.jpg "Screen 4"
|
||||
[main]: ./docs/img/devices_split.png "Main screen"
|
||||
[screen1]: ./docs/img/device_details.png "Screen 1"
|
||||
[screen2]: ./docs/img/events.png "Screen 2"
|
||||
[screen3]: ./docs/img/presence.png "Screen 3"
|
||||
[screen4]: ./docs/img/maintenance.png "Screen 4"
|
||||
[screen5]: ./docs/img/network.png "Screen 5"
|
||||
[screen6]: ./docs/img/settings.png "Screen 6"
|
||||
[screen7]: ./docs/img/help_faq.png "Screen 7"
|
||||
[screen8]: ./docs/img/plugins_webmon.png "Screen 8"
|
||||
[screen9]: ./docs/img/device_nmap.png "Screen 9"
|
||||
[report1]: ./docs/img/4_report_1.jpg "Report sample 1"
|
||||
[report2]: ./docs/img/4_report_2.jpg "Report sample 2"
|
||||
[main_dark]: /docs/img/1_devices_dark.jpg "Main screen dark"
|
||||
[maintain_dark]: /docs/img/5_maintain.jpg "Maintain screen dark"
|
||||
|
||||
|
||||
141
back/pialert-cli
Executable file
@@ -0,0 +1,141 @@
|
||||
#!/bin/bash
|
||||
SCRIPT=$(readlink -f $0)
|
||||
SCRIPTPATH=`dirname $SCRIPT`
|
||||
PIA_CONF_FILE=${SCRIPTPATH}'/../config/pialert.conf'
|
||||
|
||||
case $1 in
|
||||
|
||||
help)
|
||||
echo "pialert-cli v0.1 (https://github.com/leiweibau/Pi.Alert)"
|
||||
echo "Usage: pialert-cli <command>"
|
||||
echo ""
|
||||
echo "The is a list of supported commands:"
|
||||
echo ""
|
||||
echo " set_login - Sets the parameter PIALERT_WEB_PROTECTION in the config file to TRUE"
|
||||
echo " - If the parameter is not present, it will be created. Additionally the"
|
||||
echo " default password '123456' is set."
|
||||
echo ""
|
||||
echo " unset_login - Sets the parameter PIALERT_WEB_PROTECTION in the config file to FALSE"
|
||||
echo " - If the parameter is not present, it will be created. Additionally the"
|
||||
echo " default password '123456' is set."
|
||||
echo ""
|
||||
echo " set_password <password> - Sets the new password as a hashed value."
|
||||
echo " - If the PIALERT_WEB_PROTECTION parameter does not exist yet, it will be"
|
||||
echo " created and set to 'True' (login enabled)"
|
||||
echo ""
|
||||
echo " set_autopassword - Sets a new random password as a hashed value and show it plaintext in"
|
||||
echo " the console."
|
||||
echo " - If the PIALERT_WEB_PROTECTION parameter does not exist yet, it will be"
|
||||
echo " created and set to 'True' (login enabled)"
|
||||
echo ""
|
||||
echo " disable_scan - Stops all active scans"
|
||||
echo " - Prevents new scans from starting"
|
||||
echo ""
|
||||
echo " enable_scan - Stops all active scans"
|
||||
echo " - Prevents new scans from starting"
|
||||
echo ""
|
||||
echo ""
|
||||
;;
|
||||
|
||||
set_login)
|
||||
## Check if PIALERT_WEB_PROTECTION exists
|
||||
CHECK_PROT=$(grep "PIALERT_WEB_PROTECTION" $PIA_CONF_FILE | wc -l)
|
||||
if [ $CHECK_PROT -eq 0 ]
|
||||
then
|
||||
## Create PIALERT_WEB_PROTECTION and enable it
|
||||
sed -i "/^VENDORS_DB.*/a PIALERT_WEB_PROTECTION = True" $PIA_CONF_FILE
|
||||
sed -i "/^PIALERT_WEB_PROTECTION.*/a PIALERT_WEB_PASSWORD = '8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92'" $PIA_CONF_FILE
|
||||
else
|
||||
## Switch PIALERT_WEB_PROTECTION to enable
|
||||
sed -i "/PIALERT_WEB_PROTECTION/c\PIALERT_WEB_PROTECTION = True" $PIA_CONF_FILE
|
||||
fi
|
||||
echo "Login is now enabled"
|
||||
;;
|
||||
|
||||
unset_login)
|
||||
## Check if PIALERT_WEB_PROTECTION exists
|
||||
CHECK_PROT=$(grep "PIALERT_WEB_PROTECTION" $PIA_CONF_FILE | wc -l)
|
||||
if [ $CHECK_PROT -eq 0 ]
|
||||
then
|
||||
## Create PIALERT_WEB_PROTECTION and disable it
|
||||
sed -i "/^VENDORS_DB.*/a PIALERT_WEB_PROTECTION = False" $PIA_CONF_FILE
|
||||
sed -i "/^PIALERT_WEB_PROTECTION.*/a PIALERT_WEB_PASSWORD = '8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92'" $PIA_CONF_FILE
|
||||
else
|
||||
## Switch PIALERT_WEB_PROTECTION to disable
|
||||
sed -i "/PIALERT_WEB_PROTECTION/c\PIALERT_WEB_PROTECTION = False" $PIA_CONF_FILE
|
||||
fi
|
||||
echo "Login is now disabled"
|
||||
;;
|
||||
|
||||
set_password)
|
||||
PIA_PASS=$2
|
||||
## Check if PIALERT_WEB_PROTECTION exists
|
||||
CHECK_PROT=$(grep "PIALERT_WEB_PROTECTION" $PIA_CONF_FILE | wc -l)
|
||||
if [ $CHECK_PROT -eq 0 ]
|
||||
then
|
||||
## Create PIALERT_WEB_PROTECTION and enable it
|
||||
sed -i "/^VENDORS_DB.*/a PIALERT_WEB_PROTECTION = True" $PIA_CONF_FILE
|
||||
fi
|
||||
## Prepare Hash
|
||||
PIA_PASS_HASH=$(echo -n $PIA_PASS | sha256sum | awk '{print $1}')
|
||||
echo " The hashed password is:"
|
||||
echo " $PIA_PASS_HASH"
|
||||
## Check if the password parameter is set
|
||||
CHECK_PWD=$(grep "PIALERT_WEB_PASSWORD" $PIA_CONF_FILE | wc -l)
|
||||
if [ $CHECK_PWD -eq 0 ]
|
||||
then
|
||||
sed -i "/^PIALERT_WEB_PROTECTION.*/a PIALERT_WEB_PASSWORD = '$PIA_PASS_HASH'" $PIA_CONF_FILE
|
||||
else
|
||||
sed -i "/PIALERT_WEB_PASSWORD/c\PIALERT_WEB_PASSWORD = '$PIA_PASS_HASH'" $PIA_CONF_FILE
|
||||
fi
|
||||
echo ""
|
||||
echo "The new password is set"
|
||||
;;
|
||||
|
||||
set_autopassword)
|
||||
## Check if PIALERT_WEB_PROTECTION exists
|
||||
CHECK_PROT=$(grep "PIALERT_WEB_PROTECTION" $PIA_CONF_FILE | wc -l)
|
||||
if [ $CHECK_PROT -eq 0 ]
|
||||
then
|
||||
## Create PIALERT_WEB_PROTECTION and enable it
|
||||
sed -i "/^VENDORS_DB.*/a PIALERT_WEB_PROTECTION = True" $PIA_CONF_FILE
|
||||
fi
|
||||
## Create autopassword
|
||||
PIA_AUTOPASS=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 8 | head -n 1)
|
||||
echo " The password is: $PIA_AUTOPASS"
|
||||
## Prepare Hash
|
||||
PIA_AUTOPASS_HASH=$(echo -n $PIA_AUTOPASS | sha256sum | awk '{print $1}')
|
||||
echo " The hashed password is:"
|
||||
echo " $PIA_AUTOPASS_HASH"
|
||||
## Check if the password parameter is set
|
||||
CHECK_PWD=$(grep "PIALERT_WEB_PASSWORD" $PIA_CONF_FILE | wc -l)
|
||||
if [ $CHECK_PWD -eq 0 ]
|
||||
then
|
||||
## Create password parameter
|
||||
sed -i "/^PIALERT_WEB_PROTECTION.*/a PIALERT_WEB_PASSWORD = '$PIA_AUTOPASS_HASH'" $PIA_CONF_FILE
|
||||
else
|
||||
## Overwrite password parameter
|
||||
sed -i "/PIALERT_WEB_PASSWORD/c\PIALERT_WEB_PASSWORD = '$PIA_AUTOPASS_HASH'" $PIA_CONF_FILE
|
||||
fi
|
||||
echo ""
|
||||
echo "The new password is set"
|
||||
;;
|
||||
|
||||
disable_scan)
|
||||
## stop active scans
|
||||
sudo killall arp-scan
|
||||
touch ${SCRIPTPATH}/../db/setting_stoparpscan
|
||||
echo "The arp-scan is disabled"
|
||||
;;
|
||||
|
||||
enable_scan)
|
||||
## stop active scans
|
||||
rm ${SCRIPTPATH}/../db/setting_stoparpscan
|
||||
echo "The arp-scan is enabled"
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "pialert-cli v0.1 (https://github.com/leiweibau/Pi.Alert)"
|
||||
echo "Use \"pialert-cli help\" for a list of supported commands."
|
||||
esac
|
||||
|
||||
3917
back/pialert.py
Normal file → Executable file
173
back/report_sample.html
Executable file
@@ -0,0 +1,173 @@
|
||||
<!-- ---------------------------------------------------------------------------
|
||||
# Pi.Alert
|
||||
# Open Source Network Guard / WIFI & LAN intrusion detector
|
||||
#
|
||||
# repot_template.html - Back module. Template to email reporting in HTML format
|
||||
#-------------------------------------------------------------------------------
|
||||
# Puche 2021 pi.alert.application@gmail.com GNU GPLv3
|
||||
#--------------------------------------------------------------------------- -->
|
||||
<html>
|
||||
<head></head>
|
||||
<body>
|
||||
<font face=sans-serif>
|
||||
<table align=center width=100% cellpadding=0 cellspacing=0 style="border-radius: 5px;">
|
||||
<tr>
|
||||
<td bgcolor=#EFB956 align=center style="padding: 20px 10px 10px 10px; font-size: 30px; font-weight: bold; color:#000000; border-top-right-radius: 5px; border-top-left-radius: 5px; box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2)">
|
||||
Pi.Alert Report
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td bgcolor=#2656f1 width=100% align=center style="padding: 20px 10px 10px 10px; font-size: 20px; font-weight: bold; color:#ffffff; box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2)">
|
||||
<a style="color:#ffffff;cursor:pointer;" href="https://github.com/jokob-sk/Pi.Alert/releases">🆕 New version available 🆕</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table width=100% border=0 bgcolor=#FFD966 cellpadding=5px cellspacing=0 style="border-collapse: collapse; font-size: 15px; text-align:center; color:#404040">
|
||||
<tr>
|
||||
<td width=100%> Report Date: <b>2023-01-30 22:17</b> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td bgcolor=#F5F5F5 height=200 valign=top style="padding: 10px">
|
||||
<table style="border-collapse: collapse; font-size: 12px; color:#70707" width="100%" cellspacing="0" cellpadding="3px" bordercolor="#C0C0C0" border="1">
|
||||
<tr>
|
||||
<th width='120px' style='color:blue; font-size: 12px;' bgcolor='#909090' >New devices</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table style="border-collapse: collapse; font-size: 12px; color:#70707" width="100%" cellspacing="0" cellpadding="3px" bordercolor="#C0C0C0" border="1">
|
||||
<tr>
|
||||
<th width='120px' style='color:#F0F0F0' bgcolor='#909090' >MAC</th>
|
||||
<th width='120px' style='color:#F0F0F0' bgcolor='#909090' >Datetime</th>
|
||||
<th width='120px' style='color:#F0F0F0' bgcolor='#909090' >IP</th>
|
||||
<th width='120px' style='color:#F0F0F0' bgcolor='#909090' >Event Type</th>
|
||||
<th width='120px' style='color:#F0F0F0' bgcolor='#909090' >Device name</th>
|
||||
<th width='120px' style='color:#F0F0F0' bgcolor='#909090' >Comments</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="http://192.168.1.1:20211/deviceDetails.php?mac=00:00:00:ef:a5:6c">00:00:00:ef:a5:6c</a></td>
|
||||
<td>2023-01-30 22:15:09</td>
|
||||
<td>192.168.1.1</td>
|
||||
<td>New Device</td>
|
||||
<td>(name not found)</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="http://192.168.1.1:20211/deviceDetails.php?mac=00:00:00:ef:a5:6c">00:00:00:ef:a5:6c</a></td>
|
||||
<td>2023-01-30 22:17:59</td>
|
||||
<td>192.168.1.82</td>
|
||||
<td>New Device</td>
|
||||
<td>(name not found)</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table style="border-collapse: collapse; font-size: 12px; color:#70707" width="100%" cellspacing="0" cellpadding="3px" bordercolor="#C0C0C0" border="1">
|
||||
<tr>
|
||||
<th width='120px' style='color:blue; font-size: 12px;' bgcolor='#909090' >Events</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<ul>
|
||||
<li>
|
||||
<table style="border-collapse: collapse; font-size: 12px; color:#70707" width="100%" cellspacing="0" cellpadding="3px" bordercolor="#C0C0C0" border="1">
|
||||
<tr>
|
||||
<th width='120px' style='color:#F0F0F0' bgcolor='#909090' >MAC</th>
|
||||
<th width='120px' style='color:#F0F0F0' bgcolor='#909090' >Datetime</th>
|
||||
<th width='120px' style='color:#F0F0F0' bgcolor='#909090' >IP</th>
|
||||
<th width='120px' style='color:#F0F0F0' bgcolor='#909090' >Event Type</th>
|
||||
<th width='120px' style='color:#F0F0F0' bgcolor='#909090' >Device name</th>
|
||||
<th width='120px' style='color:#F0F0F0' bgcolor='#909090' >Comments</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="http://192.168.1.1:20211/deviceDetails.php?mac=00:00:00:ef:a5:6c">00:00:00:ef:a5:6c</a></td>
|
||||
<td>2023-01-30 22:15:09</td>
|
||||
<td>192.168.1.92</td>
|
||||
<td>Disconnected</td>
|
||||
<td>(name not found)</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
</table>
|
||||
</li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table style="border-collapse: collapse; font-size: 12px; color:#70707" width="100%" cellspacing="0" cellpadding="3px" bordercolor="#C0C0C0" border="1">
|
||||
<tr>
|
||||
<th width='120px' style='color:blue; font-size: 12px;' bgcolor='#909090' >Changed or new ports</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table style="border-collapse: collapse; font-size: 12px; color:#70707" width="100%" cellspacing="0" cellpadding="3px" bordercolor="#C0C0C0" border="1">
|
||||
<tr>
|
||||
<th>new</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table style="border-collapse: collapse; font-size: 12px; color:#70707" width="100%" cellspacing="0" cellpadding="3px" bordercolor="#C0C0C0" border="1">
|
||||
<tr>
|
||||
<th width='120px' style='color:#F0F0F0' bgcolor='#909090' >Name</th>
|
||||
<th width='120px' style='color:#F0F0F0' bgcolor='#909090' >MAC</th>
|
||||
<th width='120px' style='color:#F0F0F0' bgcolor='#909090' >Port</th>
|
||||
<th width='120px' style='color:#F0F0F0' bgcolor='#909090' >State</th>
|
||||
<th width='120px' style='color:#F0F0F0' bgcolor='#909090' >Service</th>
|
||||
<th width='120px' style='color:#F0F0F0' bgcolor='#909090' >Extra</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>New device</td>
|
||||
<td><a href="http://192.168.1.1:20211/deviceDetails.php?mac=00:00:00:ef:a5:6c">00:00:00:ef:a5:6c</a></td>
|
||||
<td>3263/tcp</td>
|
||||
<td>open</td>
|
||||
<td>ecolor-imager</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table style="border-collapse: collapse; font-size: 12px; color:#70707" width="100%" cellspacing="0" cellpadding="3px" bordercolor="#C0C0C0" border="1">
|
||||
<tr>
|
||||
<th width='120px' style='color:#F0F0F0' bgcolor='#909090' >Name</th>
|
||||
<th width='120px' style='color:#F0F0F0' bgcolor='#909090' >MAC</th>
|
||||
<th width='120px' style='color:#F0F0F0' bgcolor='#909090' >Port</th>
|
||||
<th width='120px' style='color:#F0F0F0' bgcolor='#909090' >State</th>
|
||||
<th width='120px' style='color:#F0F0F0' bgcolor='#909090' >Service</th>
|
||||
<th width='120px' style='color:#F0F0F0' bgcolor='#909090' >Extra</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>New device</td>
|
||||
<td><a href="http://192.168.1.1:20211/deviceDetails.php?mac=00:00:00:ef:a5:6c">00:00:00:ef:a5:6c</a></td>
|
||||
<td>3264/tcp</td>
|
||||
<td>open</td>
|
||||
<td>ccmail</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<tr>
|
||||
<td>
|
||||
<table width=100% bgcolor=#46802e cellpadding=5px cellspacing=0 style="font-size: 13px; font-weight: bold; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px;">
|
||||
<tr>
|
||||
<td width=50% style="text-align:center"> Pi.Alert - Synology-NAS</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</font>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
50
back/report_sample.txt
Executable file
@@ -0,0 +1,50 @@
|
||||
Report Date: 2021-12-08 12:30
|
||||
Server: Synology-NAS
|
||||
|
||||
New Devices
|
||||
----------------------
|
||||
Name: (name not found)
|
||||
MAC: 2c:2c:2c:2c:2c:2c
|
||||
IP: 192.168.1.121
|
||||
Time: 2021-12-08 12:30
|
||||
More Info: Micro-Star INTL CO., LTD.
|
||||
|
||||
Name: (name not found)
|
||||
MAC: 2c:2c:2c:2c:2c:2c
|
||||
IP: 192.168.1.151
|
||||
Time: 2021-12-08 12:30
|
||||
More Info: Espressif Inc.
|
||||
|
||||
|
||||
|
||||
Events
|
||||
----------------------
|
||||
Name: Samsung
|
||||
MAC: 2c:2c:2c:2c:2c:2c
|
||||
IP: 192.168.1.27
|
||||
Time: 2021-12-08 12:30
|
||||
Event: Connected
|
||||
More Info:
|
||||
|
||||
Name: (name not found)
|
||||
MAC: 2c:2c:2c:2c:2c:2c
|
||||
IP: 192.168.1.6
|
||||
Time: 2021-12-08 12:30
|
||||
Event: Disconnected
|
||||
More Info:
|
||||
|
||||
Name: Google-Home-Mini
|
||||
MAC: 2c:2c:2c:2c:2c:2c
|
||||
IP: 192.168.1.16
|
||||
Time: 2021-12-08 12:30
|
||||
Event: Disconnected
|
||||
More Info:
|
||||
|
||||
Name: (name not found)
|
||||
MAC: 2c:2c:2c:2c:2c:2c
|
||||
IP: 192.168.1.119
|
||||
Time: 2021-12-08 12:30
|
||||
Event: Disconnected
|
||||
More Info:
|
||||
|
||||
|
||||
96
back/report_template.html
Normal file → Executable file
@@ -14,20 +14,17 @@
|
||||
|
||||
<body>
|
||||
<font face=sans-serif>
|
||||
<table align=center width=80% border=1 bordercolor=#909090 cellpadding=0 cellspacing=0 style="border-collapse: collapse; box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.5)">
|
||||
<table align=center width=100% cellpadding=0 cellspacing=0 style="border-radius: 5px;">
|
||||
<tr>
|
||||
<td bgcolor=#EFB956 align=center style="padding: 20px 10px 10px 10px; font-size: 36px; font-weight: bold; color:#7F6000; text-shadow: 4px 4px 6px #909090">
|
||||
<td bgcolor=#EFB956 align=center style="padding: 20px 10px 10px 10px; font-size: 30px; font-weight: bold; color:#000000; border-top-right-radius: 5px; border-top-left-radius: 5px; box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2)">
|
||||
Pi.Alert Report
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
<table width=100% border=0 bgcolor=#FFD966 cellpadding=5px cellspacing=0 style="border-collapse: collapse; font-size: 16px; text-align:center; color:#5F5000">
|
||||
<tr>
|
||||
<td width=33%> Report Date: <b><REPORT_DATE></b> </td>
|
||||
<td width=34%> Scan Cycle: <b><SCAN_CYCLE></b> </td>
|
||||
<td width=33%> Server: <b><SERVER_NAME></b> </td>
|
||||
<table width=100% border=0 bgcolor=#FFD966 cellpadding=5px cellspacing=0 style="border-collapse: collapse; font-size: 15px; text-align:center; color:#404040"> <tr>
|
||||
<td width=100%> Report Date: <b><REPORT_DATE></b> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
@@ -35,84 +32,21 @@
|
||||
|
||||
<tr>
|
||||
<td bgcolor=#F5F5F5 height=200 valign=top style="padding: 10px">
|
||||
<SECTION_INTERNET>
|
||||
<p style="font-size: 24px; font-weight: bold; color:#C04040; text-shadow: 2px 2px 4px #A0A0A0"> Internet: </p>
|
||||
|
||||
<table width=100% border=1 bordercolor=#C0C0C0 cellpadding=3px cellspacing=0 style="border-collapse: collapse; font-size: 12px; color:#707070; box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2)">
|
||||
<tr bgcolor=#909090 style="color:#F0F0F0">
|
||||
<th width=140> Event Type </th>
|
||||
<th width=130> Datetime </th>
|
||||
<th width=100> IP </th>
|
||||
<th> Additional Info </th>
|
||||
</tr>
|
||||
|
||||
<TABLE_INTERNET>
|
||||
</table>
|
||||
|
||||
<br>
|
||||
</SECTION_INTERNET>
|
||||
|
||||
<SECTION_NEW_DEVICES>
|
||||
<p style="font-size: 14px; font-weight: bold; color:#C04040; text-shadow: 2px 2px 4px #A0A0A0"> New Devices: </p>
|
||||
|
||||
<table width=100% border=1 bordercolor=#C0C0C0 cellpadding=3px cellspacing=0 style="border-collapse: collapse; font-size: 12px; color:#707070; box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2)">
|
||||
<tr bgcolor=#909090 style="color:#F0F0F0">
|
||||
<th width=140> MAC </th>
|
||||
<th width=130> Datetime </th>
|
||||
<th width=100> IP </th>
|
||||
<th width=140> Device Name </th>
|
||||
<th> Vendor </th>
|
||||
</tr>
|
||||
|
||||
<TABLE_NEW_DEVICES>
|
||||
</table>
|
||||
|
||||
<br>
|
||||
</SECTION_NEW_DEVICES>
|
||||
|
||||
<SECTION_DEVICES_DOWN>
|
||||
<p style="font-size: 14px; font-weight: bold; color:#C04040; text-shadow: 2px 2px 4px #A0A0A0"> Devices Down: </p>
|
||||
|
||||
<table width=100% border=1 bordercolor=#C0C0C0 cellpadding=3px cellspacing=0 style="border-collapse: collapse; font-size: 12px; color:#707070; box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2)">
|
||||
<tr bgcolor=#909090 style="color:#F0F0F0">
|
||||
<th width=140> MAC </th>
|
||||
<th width=130> Datetime </th>
|
||||
<th width=100> IP </th>
|
||||
<th> Device Name </th>
|
||||
</tr>
|
||||
|
||||
<TABLE_DEVICES_DOWN>
|
||||
</table>
|
||||
|
||||
<br>
|
||||
</SECTION_DEVICES_DOWN>
|
||||
|
||||
<SECTION_EVENTS>
|
||||
<p style="font-size: 14px; font-weight: bold; color:#409040; text-shadow: 2px 2px 4px #A0A0A0"> Events: </p>
|
||||
|
||||
<table width=100% border=1 bordercolor=#C0C0C0 cellpadding=3px cellspacing=0 style="border-collapse: collapse; font-size: 12px; color:#707070; box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2)">
|
||||
<tr bgcolor=#909090 style="color:#F0F0F0">
|
||||
<th width=140> MAC </th>
|
||||
<th width=130> Datetime </th>
|
||||
<th width=100> IP </th>
|
||||
<th width=100> Event Type </th>
|
||||
<th width=140> Device Name </th>
|
||||
<th> Additional Info </th>
|
||||
</tr>
|
||||
|
||||
<TABLE_EVENTS>
|
||||
</table>
|
||||
</SECTION_EVENTS>
|
||||
|
||||
<INTERNET_TABLE>
|
||||
<NEW_DEVICES_TABLE>
|
||||
<DOWN_DEVICES_TABLE>
|
||||
<EVENTS_TABLE>
|
||||
<PORTS_TABLE>
|
||||
<PLUGINS_TABLE>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
<table width=100% border=0 bgcolor=#70AD47 cellpadding=5px cellspacing=0 style="border-collapse: collapse; font-size: 12px; font-weight: bold; color:#385723">
|
||||
<table width=100% bgcolor=#46802e cellpadding=5px cellspacing=0 style="font-size: 13px; font-weight: bold; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px;">
|
||||
<tr>
|
||||
<td width=25% style="text-align:Left"> <span style="display:inline-block; transform: rotate(180deg)">©</span> <PIALERT_YEAR> Puche</td>
|
||||
<td width=50% style="text-align:center"> Pi.Alert <PIALERT_VERSION> (<PIALERT_VERSION_DATE>) </td>
|
||||
<td width=25% style="text-align:right"> GNU GPLv3</td>
|
||||
<td width=50% style="text-align:center"> Pi.Alert - <SERVER_NAME></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
@@ -120,4 +54,4 @@
|
||||
</table>
|
||||
</font>
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
32
back/report_template.txt
Normal file → Executable file
@@ -1,27 +1,9 @@
|
||||
========================================
|
||||
Pi.Alert Report
|
||||
========================================
|
||||
|
||||
Report Date: <REPORT_DATE>
|
||||
Scan Cycle: <SCAN_CYCLE>
|
||||
Server: <SERVER_NAME>
|
||||
Report Date: <REPORT_DATE>
|
||||
Server: <SERVER_NAME>
|
||||
|
||||
<SECTION_NEW_DEVICES>
|
||||
<SECTION_DEVICES_DOWN>
|
||||
<SECTION_EVENTS>
|
||||
<SECTION_INTERNET>
|
||||
Internet
|
||||
----------------------------------------------------------------------
|
||||
<TABLE_INTERNET>
|
||||
</SECTION_INTERNET><SECTION_NEW_DEVICES>
|
||||
New Devices
|
||||
----------------------------------------------------------------------
|
||||
<TABLE_NEW_DEVICES>
|
||||
</SECTION_NEW_DEVICES><SECTION_DEVICES_DOWN>
|
||||
Devices Down
|
||||
----------------------------------------------------------------------
|
||||
<TABLE_DEVICES_DOWN>
|
||||
</SECTION_DEVICES_DOWN><SECTION_EVENTS>
|
||||
Events
|
||||
----------------------------------------------------------------------
|
||||
<TABLE_EVENTS>
|
||||
</SECTION_EVENTS>
|
||||
----------------------------------------------------------------------
|
||||
(?) <PIALERT_YEAR> Puche Pi.Alert <PIALERT_VERSION> (<PIALERT_VERSION_DATE>) GNU GPLv3
|
||||
<PORTS_TABLE>
|
||||
<PLUGINS_TABLE>
|
||||
|
||||
61
back/report_template_new_version.html
Executable file
@@ -0,0 +1,61 @@
|
||||
<!-- ---------------------------------------------------------------------------
|
||||
# Pi.Alert
|
||||
# Open Source Network Guard / WIFI & LAN intrusion detector
|
||||
#
|
||||
# repot_template.html - Back module. Template to email reporting in HTML format
|
||||
#-------------------------------------------------------------------------------
|
||||
# Puche 2021 pi.alert.application@gmail.com GNU GPLv3
|
||||
#--------------------------------------------------------------------------- -->
|
||||
|
||||
<html>
|
||||
|
||||
<head>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<font face=sans-serif>
|
||||
<table align=center width=100% cellpadding=0 cellspacing=0 style="border-radius: 5px;">
|
||||
<tr>
|
||||
<td bgcolor=#EFB956 align=center style="padding: 20px 10px 10px 10px; font-size: 30px; font-weight: bold; color:#000000; border-top-right-radius: 5px; border-top-left-radius: 5px; box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2)">
|
||||
Pi.Alert Report
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td bgcolor=#2656f1 width=100% align=center style="padding: 20px 10px 10px 10px; font-size: 20px; font-weight: bold; color:#ffffff; box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2)">
|
||||
<a style="color:#ffffff;cursor:pointer;" href="https://github.com/jokob-sk/Pi.Alert/releases">🆕 New version available 🆕</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table width=100% border=0 bgcolor=#FFD966 cellpadding=5px cellspacing=0 style="border-collapse: collapse; font-size: 15px; text-align:center; color:#404040"> <tr>
|
||||
<td width=100%> Report Date: <b><REPORT_DATE></b> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td bgcolor=#F5F5F5 height=200 valign=top style="padding: 10px">
|
||||
|
||||
<INTERNET_TABLE>
|
||||
<NEW_DEVICES_TABLE>
|
||||
<DOWN_DEVICES_TABLE>
|
||||
<EVENTS_TABLE>
|
||||
<PORTS_TABLE>
|
||||
<PLUGINS_TABLE>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
<table width=100% bgcolor=#46802e cellpadding=5px cellspacing=0 style="font-size: 13px; font-weight: bold; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px;">
|
||||
<tr>
|
||||
<td width=50% style="text-align:center"> Pi.Alert - <SERVER_NAME></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</font>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
2013
back/speedtest-cli
Executable file
30
back/update_vendors.sh
Normal file → Executable file
@@ -5,7 +5,7 @@
|
||||
#
|
||||
# update_vendors.sh - Back module. IEEE Vendors db update
|
||||
# ------------------------------------------------------------------------------
|
||||
# Puche 2021 pi.alert.application@gmail.com GNU GPLv3
|
||||
# Puche 2021 / 2022+ jokob jokob@duck.com GNU GPLv3
|
||||
# ------------------------------------------------------------------------------
|
||||
|
||||
# ----------------------------------------------------------------------
|
||||
@@ -23,19 +23,21 @@ cd /usr/share/ieee-data/
|
||||
sudo mkdir -p 2_backup
|
||||
sudo cp *.txt 2_backup
|
||||
sudo cp *.csv 2_backup
|
||||
|
||||
sudo curl $1 -# -O http://standards-oui.ieee.org/iab/iab.csv
|
||||
sudo curl $1 -# -O http://standards-oui.ieee.org/iab/iab.txt
|
||||
|
||||
sudo curl $1 -# -O http://standards-oui.ieee.org/oui28/mam.csv
|
||||
sudo curl $1 -# -O http://standards-oui.ieee.org/oui28/mam.txt
|
||||
|
||||
sudo curl $1 -# -O http://standards-oui.ieee.org/oui36/oui36.csv
|
||||
sudo curl $1 -# -O http://standards-oui.ieee.org/oui36/oui36.txt
|
||||
|
||||
sudo curl $1 -# -O http://standards-oui.ieee.org/oui/oui.csv
|
||||
sudo curl $1 -# -O http://standards-oui.ieee.org/oui/oui.txt
|
||||
|
||||
echo ""
|
||||
echo Download Start
|
||||
echo ""
|
||||
sudo curl $1 -LO https://standards-oui.ieee.org/iab/iab.csv \
|
||||
-LO https://standards-oui.ieee.org/iab/iab.txt \
|
||||
-LO https://standards-oui.ieee.org/oui28/mam.csv \
|
||||
-LO https://standards-oui.ieee.org/iab/iab.txt \
|
||||
-LO https://standards-oui.ieee.org/oui28/mam.csv \
|
||||
-LO https://standards-oui.ieee.org/oui28/mam.txt \
|
||||
-LO https://standards-oui.ieee.org/oui36/oui36.csv \
|
||||
-LO https://standards-oui.ieee.org/oui36/oui36.txt \
|
||||
-LO https://standards-oui.ieee.org/oui/oui.csv \
|
||||
-LO https://standards-oui.ieee.org/oui/oui.txt
|
||||
echo ""
|
||||
echo Download Finished
|
||||
|
||||
# ----------------------------------------------------------------------
|
||||
echo ""
|
||||
|
||||
87
back/webhook_json_sample.json
Executable file
@@ -0,0 +1,87 @@
|
||||
[
|
||||
{
|
||||
"headers": {
|
||||
"host": "192.168.1.82:5678",
|
||||
"user-agent": "curl/7.74.0",
|
||||
"accept": "*/*",
|
||||
"content-type": "application/json",
|
||||
"content-length": "872"
|
||||
},
|
||||
"params": {},
|
||||
"query": {},
|
||||
"body": {
|
||||
"username": "Pi.Alert",
|
||||
"text": "There are new notifications",
|
||||
"attachments": [
|
||||
{
|
||||
"title": "Pi.Alert Notifications",
|
||||
"title_link": "",
|
||||
"text": {
|
||||
"internet": [],
|
||||
"new_devices": [{
|
||||
"MAC": "74:ac:74:ac:74:ac",
|
||||
"Datetime": "2023-01-30 22:15:09",
|
||||
"IP": "192.168.1.1",
|
||||
"Event Type": "New Device",
|
||||
"Device name": "(name not found)",
|
||||
"Comments": null
|
||||
}],
|
||||
"down_devices": [],
|
||||
"events": [{
|
||||
"MAC": "74:ac:74:ac:74:ac",
|
||||
"Datetime": "2023-01-30 22:15:09",
|
||||
"IP": "192.168.1.92",
|
||||
"Event Type": "Disconnected",
|
||||
"Device name": "(name not found)",
|
||||
"Comments": null
|
||||
}, {
|
||||
"MAC": "74:ac:74:ac:74:ac",
|
||||
"Datetime": "2023-01-30 22:15:09",
|
||||
"IP": "192.168.1.150",
|
||||
"Event Type": "Disconnected",
|
||||
"Device name": "(name not found)",
|
||||
"Comments": null
|
||||
}],
|
||||
"ports": [{
|
||||
"new": {
|
||||
"Name": "New device",
|
||||
"MAC": "74:ac:74:ac:74:ac",
|
||||
"Port": "22/tcp",
|
||||
"State": "open",
|
||||
"Service": "ssh",
|
||||
"Extra": ""
|
||||
}
|
||||
}, {
|
||||
"new": {
|
||||
"Name": "New device",
|
||||
"MAC": "74:ac:74:ac:74:ac",
|
||||
"Port": "53/tcp",
|
||||
"State": "open",
|
||||
"Service": "domain",
|
||||
"Extra": ""
|
||||
}
|
||||
}, {
|
||||
"new": {
|
||||
"Name": "New device",
|
||||
"MAC": "74:ac:74:ac:74:ac",
|
||||
"Port": "80/tcp",
|
||||
"State": "open",
|
||||
"Service": "http",
|
||||
"Extra": ""
|
||||
}
|
||||
}, {
|
||||
"new": {
|
||||
"Name": "New device",
|
||||
"MAC": "74:ac:74:ac:74:ac",
|
||||
"Port": "443/tcp",
|
||||
"State": "open",
|
||||
"Service": "https",
|
||||
"Extra": ""
|
||||
}
|
||||
}]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
143
config/pialert.conf
Normal file → Executable file
@@ -1,37 +1,118 @@
|
||||
#-------------------------------------------------------------------------------
|
||||
# Pi.Alert
|
||||
# Open Source Network Guard / WIFI & LAN intrusion detector
|
||||
#-----------------AUTOGENERATED FILE-----------------#
|
||||
# #
|
||||
# Generated: 2022-12-30_22-19-40 #
|
||||
# #
|
||||
# Config file for the LAN intruder detection app: #
|
||||
# https://github.com/jokob-sk/Pi.Alert #
|
||||
# #
|
||||
#-----------------AUTOGENERATED FILE-----------------#
|
||||
|
||||
|
||||
# General
|
||||
#---------------------------
|
||||
# Scan using interface eth0
|
||||
# SCAN_SUBNETS = ['192.168.1.0/24 --interface=eth0']
|
||||
#
|
||||
# pialert.conf - Back module. Configuration file
|
||||
#-------------------------------------------------------------------------------
|
||||
# Puche 2021 pi.alert.application@gmail.com GNU GPLv3
|
||||
#-------------------------------------------------------------------------------
|
||||
# Scan multiple interfaces (eth1 and eth0):
|
||||
# SCAN_SUBNETS = [ '192.168.1.0/24 --interface=eth1', '192.168.1.0/24 --interface=eth0' ]
|
||||
SCAN_SUBNETS=['192.168.1.0/24 --interface=eth1']
|
||||
PRINT_LOG=False
|
||||
TIMEZONE='Europe/Berlin'
|
||||
PIALERT_WEB_PROTECTION=False
|
||||
PIALERT_WEB_PASSWORD='8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92'
|
||||
INCLUDED_SECTIONS=['internet','new_devices','down_devices','events']
|
||||
SCAN_CYCLE_MINUTES=5
|
||||
DAYS_TO_KEEP_EVENTS=90
|
||||
# Used for generating links in emails. Make sure not to add a trailing slash!
|
||||
REPORT_DASHBOARD_URL='http://pi.alert'
|
||||
|
||||
PIALERT_PATH = '/home/pi/pialert'
|
||||
DB_PATH = PIALERT_PATH + '/db/pialert.db'
|
||||
LOG_PATH = PIALERT_PATH + '/log'
|
||||
VENDORS_DB = '/usr/share/arp-scan/ieee-oui.txt'
|
||||
PRINT_LOG = False
|
||||
|
||||
SMTP_SERVER = 'smtp.gmail.com'
|
||||
SMTP_PORT = 587
|
||||
SMTP_USER = 'user@gmail.com'
|
||||
SMTP_PASS = 'password'
|
||||
# Email
|
||||
#---------------------------
|
||||
REPORT_MAIL=False
|
||||
SMTP_SERVER='smtp.gmail.com'
|
||||
SMTP_PORT=587
|
||||
REPORT_TO='user@gmail.com'
|
||||
REPORT_FROM='Pi.Alert <user@gmail.com>'
|
||||
SMTP_SKIP_LOGIN=False
|
||||
SMTP_USER='user@gmail.com'
|
||||
SMTP_PASS='password'
|
||||
SMTP_SKIP_TLS=False
|
||||
|
||||
REPORT_MAIL = False
|
||||
REPORT_FROM = 'Pi.Alert <' + SMTP_USER +'>'
|
||||
REPORT_TO = 'user@gmail.com'
|
||||
REPORT_DEVICE_URL = 'http://pi.alert/deviceDetails.php?mac='
|
||||
|
||||
# QUERY_MYIP_SERVER = 'https://diagnostic.opendns.com/myip'
|
||||
QUERY_MYIP_SERVER = 'http://ipv4.icanhazip.com'
|
||||
DDNS_ACTIVE = False
|
||||
DDNS_DOMAIN = 'your_domain.freeddns.org'
|
||||
DDNS_USER = 'dynu_user'
|
||||
DDNS_PASSWORD = 'A0000000B0000000C0000000D0000000'
|
||||
DDNS_UPDATE_URL = 'https://api.dynu.com/nic/update?'
|
||||
# Webhooks
|
||||
#---------------------------
|
||||
REPORT_WEBHOOK=False
|
||||
WEBHOOK_URL='http://n8n.local:5555/webhook-test/aaaaaaaa-aaaa-aaaa-aaaaa-aaaaaaaaaaaa'
|
||||
WEBHOOK_PAYLOAD='json' # webhook payload data format for the "body > attachements > text" attribute
|
||||
# in https://github.com/jokob-sk/Pi.Alert/blob/main/docs/webhook_json_sample.json
|
||||
# supported values: 'json', 'html' or 'text'
|
||||
# e.g.: for discord use 'html'
|
||||
WEBHOOK_REQUEST_METHOD='GET'
|
||||
|
||||
PIHOLE_ACTIVE = False
|
||||
PIHOLE_DB = '/etc/pihole/pihole-FTL.db'
|
||||
DHCP_ACTIVE = False
|
||||
DHCP_LEASES = '/etc/pihole/dhcp.leases'
|
||||
|
||||
# Apprise
|
||||
#---------------------------
|
||||
REPORT_APPRISE=False
|
||||
APPRISE_HOST='http://localhost:8000/notify'
|
||||
APPRISE_URL='mailto://smtp-relay.sendinblue.com:587?from=user@gmail.com&name=apprise&user=user@gmail.com&pass=password&to=user@gmail.com'
|
||||
|
||||
|
||||
# NTFY
|
||||
#---------------------------
|
||||
REPORT_NTFY=False
|
||||
NTFY_HOST='https://ntfy.sh'
|
||||
NTFY_TOPIC='replace_my_secure_topicname_91h889f28'
|
||||
NTFY_USER='user'
|
||||
NTFY_PASSWORD='passw0rd'
|
||||
|
||||
|
||||
# PUSHSAFER
|
||||
#---------------------------
|
||||
REPORT_PUSHSAFER=False
|
||||
PUSHSAFER_TOKEN='ApiKey'
|
||||
|
||||
|
||||
# MQTT
|
||||
#---------------------------
|
||||
REPORT_MQTT=False
|
||||
MQTT_BROKER='192.168.1.2'
|
||||
MQTT_PORT=1883
|
||||
MQTT_USER='mqtt'
|
||||
MQTT_PASSWORD='passw0rd'
|
||||
MQTT_QOS=0
|
||||
MQTT_DELAY_SEC=2
|
||||
|
||||
|
||||
# DynDNS
|
||||
#---------------------------
|
||||
DDNS_ACTIVE=False
|
||||
DDNS_DOMAIN='your_domain.freeddns.org'
|
||||
DDNS_USER='dynu_user'
|
||||
DDNS_PASSWORD='A0000000B0000000C0000000D0000000'
|
||||
DDNS_UPDATE_URL='https://api.dynu.com/nic/update?'
|
||||
|
||||
|
||||
# PiHole
|
||||
#---------------------------
|
||||
# if enabled you need to map '/etc/pihole/pihole-FTL.db' in docker-compose.yml
|
||||
PIHOLE_ACTIVE=False
|
||||
# if enabled you need to map '/etc/pihole/dhcp.leases' in docker-compose.yml
|
||||
DHCP_ACTIVE=False
|
||||
|
||||
|
||||
# Pholus
|
||||
#---------------------------
|
||||
PHOLUS_ACTIVE=False
|
||||
PHOLUS_TIMEOUT=120
|
||||
PHOLUS_FORCE=False
|
||||
PHOLUS_DAYS_DATA=7
|
||||
PHOLUS_RUN='once'
|
||||
PHOLUS_RUN_TIMEOUT=600
|
||||
PHOLUS_RUN_SCHD='0 4 * * *'
|
||||
|
||||
|
||||
#-------------------IMPORTANT INFO-------------------#
|
||||
# This file is ingested by a python script, so if #
|
||||
# modified it needs to use python syntax #
|
||||
#-------------------IMPORTANT INFO-------------------#
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
VERSION = '2.70'
|
||||
VERSION_YEAR = '2021'
|
||||
VERSION_DATE = '2021-02-01'
|
||||
BIN
db/pialert.db
Normal file → Executable file
46
docker-compose.yml
Executable file
@@ -0,0 +1,46 @@
|
||||
version: "3"
|
||||
services:
|
||||
pialert:
|
||||
privileged: true
|
||||
build: .
|
||||
container_name: pialert
|
||||
network_mode: "host"
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- ${APP_DATA_LOCATION}/pialert2/config:/home/pi/pialert/config
|
||||
# - ${APP_DATA_LOCATION}/pialert/db/pialert.db:/home/pi/pialert/db/pialert.db
|
||||
- ${APP_DATA_LOCATION}/pialert2/db:/home/pi/pialert/db
|
||||
# (optional) useful for debugging if you have issues setting up the container
|
||||
- ${LOGS_LOCATION}:/home/pi/pialert/front/log
|
||||
# DELETE START anyone trying to use this file: comment out / delete BELOW lines, they are only for development purposes
|
||||
- ${APP_DATA_LOCATION}/pialert/dhcp_samples/dhcp1.leases:/mnt/dhcp1.leases
|
||||
- ${APP_DATA_LOCATION}/pialert/dhcp_samples/dhcp2.leases:/mnt/dhcp2.leases
|
||||
- ${DEV_LOCATION}/back/pialert.py:/home/pi/pialert/back/pialert.py
|
||||
- ${DEV_LOCATION}/back/report_template.html:/home/pi/pialert/back/report_template.html
|
||||
- ${DEV_LOCATION}/back/report_template_new_version.html:/home/pi/pialert/back/report_template_new_version.html
|
||||
- ${DEV_LOCATION}/back/report_template.txt:/home/pi/pialert/back/report_template.txt
|
||||
- ${DEV_LOCATION}/pholus:/home/pi/pialert/pholus
|
||||
- ${DEV_LOCATION}/dockerfiles:/home/pi/pialert/dockerfiles
|
||||
- ${APP_DATA_LOCATION}/pialert/php.ini:/etc/php/7.4/fpm/php.ini
|
||||
# - ${DEV_LOCATION}/front/api:/home/pi/pialert/front/api
|
||||
- ${DEV_LOCATION}/front/css:/home/pi/pialert/front/css
|
||||
- ${DEV_LOCATION}/front/lib/AdminLTE:/home/pi/pialert/front/lib/AdminLTE
|
||||
- ${DEV_LOCATION}/front/js:/home/pi/pialert/front/js
|
||||
- ${DEV_LOCATION}/front/php:/home/pi/pialert/front/php
|
||||
- ${DEV_LOCATION}/front/deviceDetails.php:/home/pi/pialert/front/deviceDetails.php
|
||||
- ${DEV_LOCATION}/front/devices.php:/home/pi/pialert/front/devices.php
|
||||
- ${DEV_LOCATION}/front/events.php:/home/pi/pialert/front/events.php
|
||||
- ${DEV_LOCATION}/front/plugins.php:/home/pi/pialert/front/plugins.php
|
||||
- ${DEV_LOCATION}/front/help_faq.php:/home/pi/pialert/front/help_faq.php
|
||||
- ${DEV_LOCATION}/front/index.php:/home/pi/pialert/front/index.php
|
||||
- ${DEV_LOCATION}/front/maintenance.php:/home/pi/pialert/front/maintenance.php
|
||||
- ${DEV_LOCATION}/front/network.php:/home/pi/pialert/front/network.php
|
||||
- ${DEV_LOCATION}/front/presence.php:/home/pi/pialert/front/presence.php
|
||||
- ${DEV_LOCATION}/front/settings.php:/home/pi/pialert/front/settings.php
|
||||
- ${DEV_LOCATION}/front/plugins:/home/pi/pialert/front/plugins
|
||||
# DELETE END anyone trying to use this file: comment out / delete ABOVE lines, they are only for development purposes
|
||||
environment:
|
||||
- TZ=${TZ}
|
||||
- PORT=${PORT}
|
||||
- HOST_USER_ID=${HOST_USER_ID}
|
||||
- HOST_USER_GID=${HOST_USER_GID}
|
||||
1335
front/lib/AdminLTE/bower_components/jvectormap/LICENSE-AGPL → dockerfiles/LICENSE
Normal file → Executable file
218
dockerfiles/README.md
Executable file
@@ -0,0 +1,218 @@
|
||||
[](https://github.com/jokob-sk/Pi.Alert/actions/workflows/docker_prod.yml)
|
||||
[](https://github.com/jokob-sk/Pi.Alert)
|
||||
[](https://hub.docker.com/r/jokobsk/pi.alert)
|
||||
[](https://hub.docker.com/r/jokobsk/pi.alert)
|
||||
[](https://hub.docker.com/r/jokobsk/pi.alert)
|
||||
|
||||
# 🐳 A docker image for Pi.Alert
|
||||
|
||||
🐳 [Docker hub](https://registry.hub.docker.com/r/jokobsk/pi.alert) | 📄 [Dockerfile](https://github.com/jokob-sk/Pi.Alert/blob/main/Dockerfile) | 📚 [Docker instructions](https://github.com/jokob-sk/Pi.Alert/blob/main/dockerfiles/README.md) | 🆕 [Release notes](https://github.com/jokob-sk/Pi.Alert/releases)
|
||||
|
||||
<a href="https://raw.githubusercontent.com/jokob-sk/Pi.Alert/main/docs/img/devices_split.png" target="_blank">
|
||||
<img src="https://raw.githubusercontent.com/jokob-sk/Pi.Alert/main/docs/img/devices_split.png" width="300px" />
|
||||
</a>
|
||||
<a href="https://raw.githubusercontent.com/jokob-sk/Pi.Alert/main/docs/img/network.png" target="_blank">
|
||||
<img src="https://raw.githubusercontent.com/jokob-sk/Pi.Alert/main/docs/img/network.png" width="300px" />
|
||||
</a>
|
||||
|
||||
|
||||
## 📕 Basic Usage
|
||||
|
||||
- You will have to run the container on the host network, e.g:
|
||||
|
||||
```yaml
|
||||
docker run -d --rm --network=host \
|
||||
-v local/path/pialert/config:/home/pi/pialert/config \
|
||||
-v local/path/pialert/db:/home/pi/pialert/db \
|
||||
-e TZ=Europe/Berlin \
|
||||
-e PORT=20211 \
|
||||
jokobsk/pi.alert:latest
|
||||
```
|
||||
- The initial scan can take up-to 15min (with 50 devices and MQTT). Subsequent ones 3 and 5 minutes so wait that long for all of the scans to run.
|
||||
|
||||
### Docker environment variables
|
||||
|
||||
| Variable | Description | Default |
|
||||
| :------------- |:-------------| -----:|
|
||||
| `PORT` |Port of the web interface | `20211` |
|
||||
|`TZ` |Time zone to display stats correctly. Find your time zone [here](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) | `Europe/Berlin` |
|
||||
|`HOST_USER_GID` |User ID (UID) to map the user in the container to a server user with sufficient read&write permissions on the mapped files | `1000` |
|
||||
|`HOST_USER_ID` |User Group ID (GID) to map the user group in the container to a server user group with sufficient read&write permissions on the mapped files | `1000` |
|
||||
|
||||
### Docker paths
|
||||
|
||||
| | Path | Description |
|
||||
| :------------- | :------------- |:-------------|
|
||||
| **Required** | `:/home/pi/pialert/config` | Folder which will contain the `pialert.conf` file (see below for details) |
|
||||
| **Required** | `:/home/pi/pialert/db` | Folder which will contain the `pialert.db` file |
|
||||
|Optional| `:/home/pi/pialert/front/log` | Logs folder useful for debugging if you have issues setting up the container |
|
||||
|Optional| `:/etc/pihole/pihole-FTL.db` | PiHole's `pihole-FTL.db` database file. Required if you want to use PiHole |
|
||||
|Optional| `:/etc/pihole/dhcp.leases` | PiHole's `dhcp.leases` file. Required if you want to use PiHole |
|
||||
|Optional| `:/home/pi/pialert/front/api` | A simple [API endpoint](https://github.com/jokob-sk/Pi.Alert/blob/main/docs/API.md) containing static (but regularly updated) json and other files. |
|
||||
|
||||
|
||||
### Config (`pialert.conf`)
|
||||
|
||||
- The preferred wy is to manage the configuration via Settings
|
||||
- YOu can modify [pialert.conf](https://github.com/jokob-sk/Pi.Alert/tree/main/config) directly if needed
|
||||
- ❗ To use the arp-scan method, you need to set the `SCAN_SUBNETS` variable. ()
|
||||
* The adapter will probably be `eth0` or `eth1`. (Run `iwconfig` to find your interface name(s))
|
||||
* Specify the network filter (which **significantly** speeds up the scan process). For example, the filter `192.168.1.0/24` covers IP ranges 192.168.1.0 to 192.168.1.255.
|
||||
* Examples for one and two subnets (❗ Note the `['...', '...']` format):
|
||||
* One subnet: `SCAN_SUBNETS = ['192.168.1.0/24 --interface=eth0']`
|
||||
* Two subnets: `SCAN_SUBNETS = ['192.168.1.0/24 --interface=eth0', '192.168.1.0/24 --interface=eth1']`
|
||||
* More documentation on how to [setup vlans](https://github.com/jokob-sk/Pi.Alert/blob/main/docs/SUBNETS.md)
|
||||
|
||||
|
||||
### 🛑 **Common issues**
|
||||
|
||||
💡 Before creating a new issue, please check if a similar issue was [already resolved](https://github.com/jokob-sk/Pi.Alert/issues?q=is%3Aissue+is%3Aclosed).
|
||||
|
||||
**Permissions**
|
||||
|
||||
* If facing issues (AJAX errors, can't write to DB, empty screen, etc,) make sure permissions are set correctly, and check the logs under `/home/pi/pialert/front/log`.
|
||||
* To solve permission issues you can also try to create a DB backup and then run a DB Restore via the **Maintenance > Backup/Restore** section.
|
||||
* You can try also setting the owner and group of the `pialert.db` by executing the following on the host system: `docker exec pialert chown -R www-data:www-data /home/pi/pialert/db/pialert.db`.
|
||||
* Map to local User and Group IDs. Specify the enviroment variables `HOST_USER_ID` and `HOST_USER_GID` if needed.
|
||||
* Map the pialert.db file (⚠ not folder) to `:/home/pi/pialert/db/pialert.db` (see Examples below for details)
|
||||
|
||||
**Container restarts / crashes**
|
||||
|
||||
* Check the logs for details. Often a required setting for a notification method is missing.
|
||||
|
||||
**unable to resolve host**
|
||||
|
||||
* Check that your `SCAN_SUBNETS` variable is using the correct mask and `--interface` as outlined in the instructions above.
|
||||
|
||||
|
||||
Docker-compose examples can be found below.
|
||||
|
||||
## 📄 Examples
|
||||
|
||||
### Example 1
|
||||
|
||||
```yaml
|
||||
version: "3"
|
||||
services:
|
||||
pialert:
|
||||
container_name: pialert
|
||||
image: "jokobsk/pi.alert:latest"
|
||||
network_mode: "host"
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- local/path/pialert/config:/home/pi/pialert/config
|
||||
- local/path/pialert/db:/home/pi/pialert/db
|
||||
# (optional) useful for debugging if you have issues setting up the container
|
||||
- local/path/logs:/home/pi/pialert/front/log
|
||||
environment:
|
||||
- TZ=Europe/Berlin
|
||||
- HOST_USER_ID=1000
|
||||
- HOST_USER_GID=1000
|
||||
- PORT=20211
|
||||
```
|
||||
|
||||
To run the container execute: `sudo docker-compose up -d`
|
||||
|
||||
### Example 2
|
||||
|
||||
Example by [SeimuS](https://github.com/SeimusS).
|
||||
|
||||
```yaml
|
||||
pialert:
|
||||
container_name: PiAlert
|
||||
hostname: PiAlert
|
||||
privileged: true
|
||||
image: jokobsk/pi.alert:latest
|
||||
environment:
|
||||
- TZ=Europe/Bratislava
|
||||
restart: always
|
||||
volumes:
|
||||
- ./pialert/pialert_db:/home/pi/pialert/db
|
||||
- ./pialert/pialert_config:/home/pi/pialert/config
|
||||
network_mode: host
|
||||
```
|
||||
|
||||
To run the container execute: `sudo docker-compose up -d`
|
||||
|
||||
### Example 3
|
||||
|
||||
`docker-compose.yml`
|
||||
|
||||
```yaml
|
||||
version: "3"
|
||||
services:
|
||||
pialert:
|
||||
container_name: pialert
|
||||
image: "jokobsk/pi.alert:latest"
|
||||
network_mode: "host"
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- ${APP_DATA_LOCATION}/pialert/config:/home/pi/pialert/config
|
||||
- ${APP_DATA_LOCATION}/pialert/db/pialert.db:/home/pi/pialert/db/pialert.db
|
||||
# (optional) useful for debugging if you have issues setting up the container
|
||||
- ${LOGS_LOCATION}:/home/pi/pialert/front/log
|
||||
environment:
|
||||
- TZ=${TZ}
|
||||
- HOST_USER_ID=${HOST_USER_ID}
|
||||
- HOST_USER_GID=${HOST_USER_GID}
|
||||
- PORT=${PORT}
|
||||
```
|
||||
|
||||
`.env` file
|
||||
|
||||
```yaml
|
||||
#GLOBAL PATH VARIABLES
|
||||
|
||||
APP_DATA_LOCATION=/path/to/docker_appdata
|
||||
APP_CONFIG_LOCATION=/path/to/docker_config
|
||||
LOGS_LOCATION=/path/to/docker_logs
|
||||
|
||||
#ENVIRONMENT VARIABLES
|
||||
|
||||
TZ=Europe/Paris
|
||||
HOST_USER_ID=1000
|
||||
HOST_USER_GID=1000
|
||||
PORT=20211
|
||||
|
||||
#DEVELOPMENT VARIABLES
|
||||
|
||||
DEV_LOCATION=/path/to/local/source/code
|
||||
```
|
||||
|
||||
To run the container execute: `sudo docker-compose --env-file /path/to/.env up`
|
||||
|
||||
### Example 4
|
||||
|
||||
Courtesy of [pbek](https://github.com/pbek). The volume `pialert_db` is used by the db directory. The two config files are mounted directly from a local folder to their places in the config folder. You can backup the `docker-compose.yaml` folder and the docker volumes folder.
|
||||
|
||||
```yaml
|
||||
pialert:
|
||||
image: jokobsk/pi.alert
|
||||
ports:
|
||||
- "80:20211/tcp"
|
||||
environment:
|
||||
- TZ=Europe/Vienna
|
||||
networks:
|
||||
local:
|
||||
ipv4_address: 192.168.1.2
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- pialert_db:/home/pi/pialert/db
|
||||
- ./pialert/pialert.conf:/home/pi/pialert/config/pialert.conf
|
||||
```
|
||||
|
||||
## 🏅 Recognitions
|
||||
|
||||
Big thanks to <a href="https://github.com/Macleykun">@Macleykun</a> for help and tips&tricks for Dockerfile(s):
|
||||
|
||||
<a href="https://github.com/Macleykun">
|
||||
<img src="https://avatars.githubusercontent.com/u/26381427?size=50">
|
||||
</a>
|
||||
|
||||
## ☕ Support me
|
||||
|
||||
<a href="https://github.com/sponsors/jokob-sk" target="_blank"><img src="https://i.imgur.com/X6p5ACK.png" alt="Sponsor Me on GitHub" style="height: 30px !important;width: 117px !important;" width="150px" ></a>
|
||||
<a href="https://www.buymeacoffee.com/jokobsk" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Buy Me A Coffee" style="height: 30px !important;width: 117px !important;" width="117px" height="30px" ></a>
|
||||
<a href="https://www.patreon.com/user?u=84385063" target="_blank"><img src="https://upload.wikimedia.org/wikipedia/commons/thumb/8/82/Patreon_logo_with_wordmark.svg/512px-Patreon_logo_with_wordmark.svg.png" alt="Support me on patreon" style="height: 30px !important;width: 117px !important;" width="117px" ></a>
|
||||
|
||||
BTC: 1N8tupjeCK12qRVU2XrV17WvKK7LCawyZM
|
||||
31
dockerfiles/start.sh
Executable file
@@ -0,0 +1,31 @@
|
||||
#!/bin/sh
|
||||
/home/pi/pialert/dockerfiles/user-mapping.sh
|
||||
|
||||
# if custom variables not set we do not need to do anything
|
||||
if [ -n "${TZ}" ]; then
|
||||
FILECONF=/home/pi/pialert/config/pialert.conf
|
||||
if [ -f "$FILECONF" ]; then
|
||||
sed -ie "s|Europe/Berlin|${TZ}|g" /home/pi/pialert/config/pialert.conf
|
||||
else
|
||||
sed -ie "s|Europe/Berlin|${TZ}|g" /home/pi/pialert/back/pialert.conf_bak
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -n "${PORT}" ]; then
|
||||
sed -ie 's/listen 20211/listen '${PORT}'/g' /etc/nginx/sites-available/default
|
||||
fi
|
||||
|
||||
# I hope this will fix DB permission issues going forward
|
||||
FILEDB=/home/pi/pialert/db/pialert.db
|
||||
if [ -f "$FILEDB" ]; then
|
||||
chown -R www-data:www-data /home/pi/pialert/db/pialert.db
|
||||
fi
|
||||
|
||||
chmod -R a+rw /home/pi/pialert/front/log
|
||||
chmod -R a+rw /home/pi/pialert/config
|
||||
|
||||
/etc/init.d/php7.4-fpm start
|
||||
/etc/init.d/nginx start
|
||||
|
||||
# cron -f
|
||||
python /home/pi/pialert/back/pialert.py
|
||||
29
dockerfiles/user-mapping.sh
Executable file
@@ -0,0 +1,29 @@
|
||||
#!/bin/bash
|
||||
|
||||
if [ -z "${USER}" ]; then
|
||||
echo "We need USER to be set!"; exit 100
|
||||
fi
|
||||
|
||||
# if both not set we do not need to do anything
|
||||
if [ -z "${HOST_USER_ID}" -a -z "${HOST_USER_GID}" ]; then
|
||||
echo "Nothing to do here." ; exit 0
|
||||
fi
|
||||
|
||||
# reset user_?id to either new id or if empty old (still one of above
|
||||
# might not be set)
|
||||
USER_ID=${HOST_USER_ID:=$USER_ID}
|
||||
USER_GID=${HOST_USER_GID:=$USER_GID}
|
||||
|
||||
LINE=$(grep -F "${USER}" /etc/passwd)
|
||||
# replace all ':' with a space and create array
|
||||
array=( ${LINE//:/ } )
|
||||
|
||||
# home is 5th element
|
||||
USER_HOME=${array[4]}
|
||||
|
||||
sed -i -e "s/^${USER}:\([^:]*\):[0-9]*:[0-9]*/${USER}:\1:${USER_ID}:${USER_GID}/" /etc/passwd
|
||||
sed -i -e "s/^${USER}:\([^:]*\):[0-9]*/${USER}:\1:${USER_GID}/" /etc/group
|
||||
|
||||
chown -R ${USER_ID}:${USER_GID} ${USER_HOME}
|
||||
|
||||
exec su - "${USER}"
|
||||
103
docs/API.md
Executable file
@@ -0,0 +1,103 @@
|
||||
## API endpoints
|
||||
|
||||
PiAlert comes with a simple API. These API endpoints are static files, that are periodically updated based on your settings.
|
||||
|
||||
|
||||
### When are the endpoints updated
|
||||
|
||||
Once you enable the API (`ENABLE_API` setting), the endpoints are updated during these events:
|
||||
|
||||
1) Always during a notification event.
|
||||
2) (optional) If `API_RUN` is set to `schedule` on a specified cron-like schedule specified by the `API_RUN_SCHD` setting.
|
||||
3) (optional) If `API_RUN` is set to `interval` every N seconds specified by the `API_RUN_INTERVAL` setting (minimum 5).
|
||||
|
||||
|
||||
### Location of the endpoints
|
||||
|
||||
In the container, these files are located under the `/home/pi/pialert/front/api/` folder and thus on the `<pialert_url>/api/<File name>` url.
|
||||
|
||||
### Available endpoints
|
||||
|
||||
You can access the following files:
|
||||
|
||||
| File name | Description |
|
||||
|----------------------|----------------------|
|
||||
| `notification_text.txt` | The plain text version of the last notification. |
|
||||
| `notification_text.html` | The full HTML of the last email notification. |
|
||||
| `notification_json_final.json` | The json version of the last notification (e.g. used for webhooks - [sample JSON](https://github.com/jokob-sk/Pi.Alert/blob/main/back/webhook_json_sample.json)). |
|
||||
| `table_devices.json` | The current (at the time of the last update as mentioned above on this page) state of all of the available Devices detected by the app. |
|
||||
| `table_nmap_scan.json` | The current state of the discovered ports by the regular NMAP scans. |
|
||||
| `table_pholus_scan.json` | The latest state of the [pholus](https://github.com/jokob-sk/Pi.Alert/tree/main/pholus) (A multicast DNS and DNS Service Discovery Security Assessment Tool) scan results. |
|
||||
| `table_plugins_events.json` | The list of the unprocessed (pending) notification events (plugins_events DB table). |
|
||||
| `table_plugins_history.json` | The list of notification events history. |
|
||||
| `table_plugins_objects.json` | The content of the plugins_objects table. Find more info on the [Plugin system here](https://github.com/jokob-sk/Pi.Alert/tree/main/front/plugins)|
|
||||
| `language_strings.json` | The content of the language_strings table, which in turn is loaded from the plugins `config.json` definitions. |
|
||||
| `table_custom_endpoint.json` | A custom endpoint generated by the SQL query specified by the `API_CUSTOM_SQL` setting. |
|
||||
| `table_settings.json` | The content of the settings table. |
|
||||
|
||||
Current/latest state of the aforementioned files depends on your settings.
|
||||
|
||||
### JSON Data format
|
||||
|
||||
The endpoints starting with the `table_` prefix contain most, if not all, data contained in the corresponding database table. The common format for those is:
|
||||
|
||||
```JSON
|
||||
{
|
||||
"data": [
|
||||
{
|
||||
"db_column_name": "data",
|
||||
"db_column_name2": "data2"
|
||||
},
|
||||
{
|
||||
"db_column_name": "data3",
|
||||
"db_column_name2": "data4"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
Example JSON of the `table_devices.json` endpoint with two Devices (database rows):
|
||||
|
||||
```JSON
|
||||
{
|
||||
"data": [
|
||||
{
|
||||
"dev_MAC": "Internet",
|
||||
"dev_Name": "Net - Huawei",
|
||||
"dev_DeviceType": "Router",
|
||||
"dev_Vendor": null,
|
||||
"dev_Group": "Always on",
|
||||
"dev_FirstConnection": "2021-01-01 00:00:00",
|
||||
"dev_LastConnection": "2021-01-28 22:22:11",
|
||||
"dev_LastIP": "192.168.1.24",
|
||||
"dev_StaticIP": 0,
|
||||
"dev_PresentLastScan": 1,
|
||||
"dev_LastNotification": "2023-01-28 22:22:28.998715",
|
||||
"dev_NewDevice": 0,
|
||||
"dev_Network_Node_MAC_ADDR": "",
|
||||
"dev_Network_Node_port": "",
|
||||
"dev_Icon": "globe"
|
||||
},
|
||||
{
|
||||
"dev_MAC": "a4:8f:ff:aa:ba:1f",
|
||||
"dev_Name": "Net - USG",
|
||||
"dev_DeviceType": "Firewall",
|
||||
"dev_Vendor": "Ubiquiti Inc",
|
||||
"dev_Group": "",
|
||||
"dev_FirstConnection": "2021-02-12 22:05:00",
|
||||
"dev_LastConnection": "2021-07-17 15:40:00",
|
||||
"dev_LastIP": "192.168.1.1",
|
||||
"dev_StaticIP": 1,
|
||||
"dev_PresentLastScan": 1,
|
||||
"dev_LastNotification": "2021-07-17 15:40:10.667717",
|
||||
"dev_NewDevice": 0,
|
||||
"dev_Network_Node_MAC_ADDR": "Internet",
|
||||
"dev_Network_Node_port": 1,
|
||||
"dev_Icon": "shield-halved"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
31
docs/DEBUG_INVALID_JSON.md
Executable file
@@ -0,0 +1,31 @@
|
||||
# How to debug the Invalid JSON response error
|
||||
|
||||
Check the the HTTP response of the failing backend call by following these steps:
|
||||
|
||||
- Open developer console in your browser (usually, e. g. for Chrome, key F12 on the keyboard).
|
||||
- Follow the steps in this screenshot:
|
||||
|
||||
![F12DeveloperConsole][F12DeveloperConsole]
|
||||
|
||||
- Copy the URL causing the error and enter it in the address bar of your browser directly and hit enter. The copied URLs could look something like this (notice the query strings at the end):
|
||||
- `http://<pialert URL>:20211/php/server/devices.php?action=getDevicesTotals`
|
||||
- `http://<pialert URL>:20211/php/server/devices.php?action=getDevicesList&status=all`
|
||||
|
||||
- Post the error response in the existing issue thread on GitHub or create a new issue and include the redacted response of the failing query.
|
||||
|
||||
For reference, the above queries should return results in the following format:
|
||||
|
||||
First URL:
|
||||
|
||||
![array][array]
|
||||
|
||||
Second URL:
|
||||
|
||||
![json][json]
|
||||
|
||||
You can copy and paste any JSON result (result of the second query) into an online JSON checker, such as [this one](https://jsonchecker.com/) to check if it's valid.
|
||||
|
||||
|
||||
[F12DeveloperConsole]: ./img/DEBUG/Invalid_JSON_repsonse_debug.png "F12DeveloperConsole"
|
||||
[array]: ./img/DEBUG/array_result_example.png "array"
|
||||
[json]: ./img/DEBUG/JSON_result_example.png "json"
|
||||
0
docs/DEVICE_MANAGEMENT.md
Normal file → Executable file
326
docs/INSTALL.md
@@ -1,326 +0,0 @@
|
||||
# Pi.Alert Installation Guide
|
||||
<!--- --------------------------------------------------------------------- --->
|
||||
Initially designed to run on a Raspberry PI, probably it can run on many other
|
||||
Linux distributions.
|
||||
|
||||
Estimated time: 20'
|
||||
|
||||
### Dependencies
|
||||
| Dependency | Comments |
|
||||
| ---------- | -------------------------------------------------------- |
|
||||
| Lighttpd | Probably works on other webservers / not tested |
|
||||
| arp-scan | Required for Scan Method 1 |
|
||||
| Pi.hole | Optional. Scan Method 2. Check devices doing DNS queries |
|
||||
| dnsmasq | Optional. Scan Method 3. Check devices using DHCP server |
|
||||
| IEEE HW DB | Necessary to identified Device vendor |
|
||||
|
||||
## One-step Automated Install:
|
||||
<!--- --------------------------------------------------------------------- --->
|
||||
`curl -sSL https://github.com/pucherot/Pi.Alert/raw/main/install/pialert_install.sh | bash`
|
||||
|
||||
## One-step Automated Update:
|
||||
<!--- --------------------------------------------------------------------- --->
|
||||
`curl -sSL https://github.com/pucherot/Pi.Alert/raw/main/install/pialert_update.sh | bash`
|
||||
|
||||
|
||||
## Installation process (step by step)
|
||||
<!--- --------------------------------------------------------------------- --->
|
||||
|
||||
### Raspberry Setup
|
||||
<!--- --------------------------------------------------------------------- --->
|
||||
1.1 - Install 'Raspberry Pi OS'
|
||||
- Instructions https://www.raspberrypi.org/documentation/installation/installing-images/
|
||||
- *Lite version (without Desktop) is enough for Pi.Alert*
|
||||
|
||||
1.2 - Activate ssh
|
||||
- Create a empty file with name 'ssh' in the boot partition of the SD
|
||||
|
||||
1.3 - Start the raspberry
|
||||
|
||||
1.4 - Login to the system with pi user
|
||||
```
|
||||
user: pi
|
||||
password: raspberry
|
||||
```
|
||||
|
||||
1.5 - Change the default password of pi user
|
||||
```
|
||||
passwd
|
||||
```
|
||||
|
||||
1.6 - Setup the basic configuration
|
||||
```
|
||||
sudo raspi-config
|
||||
```
|
||||
|
||||
1.7 - Optionally, configure a static IP in raspi-config
|
||||
|
||||
1.8 - Update the OS
|
||||
```
|
||||
sudo apt-get update
|
||||
sudo apt-get upgrade
|
||||
sudo shutdown -r now
|
||||
```
|
||||
|
||||
|
||||
### Pi-hole Setup (optional)
|
||||
<!--- --------------------------------------------------------------------- --->
|
||||
2.1 - Links & Doc
|
||||
- https://pi-hole.net/
|
||||
- https://github.com/pi-hole/pi-hole
|
||||
- https://github.com/pi-hole/pi-hole/#one-step-automated-install
|
||||
|
||||
2.2 - Login to the system with pi user
|
||||
|
||||
2.3 - Install Pi-hole
|
||||
```
|
||||
curl -sSL https://install.pi-hole.net | bash
|
||||
```
|
||||
- Select "Install web admin interface"
|
||||
- Select "Install web server lighttpd"
|
||||
|
||||
2.4 - Configure Pi-hole admin password
|
||||
```
|
||||
pihole -a -p PASSWORD
|
||||
```
|
||||
|
||||
2.5 - Connect to web admin panel
|
||||
```
|
||||
hostname -I
|
||||
```
|
||||
or this one if have severals interfaces
|
||||
```
|
||||
ip -o route get 1 | sed -n 's/.*src \([0-9.]\+\).*/\1/p'
|
||||
```
|
||||
|
||||
- http://192.168.1.x/admin/
|
||||
- (*replace 192.168.1.x with your Raspberry IP*)
|
||||
|
||||
2.6 - Activate DHCP server
|
||||
- Pi-hole admin portal -> Settings -> DHCP -> Mark "DHCP server enabled"
|
||||
|
||||
2.7 - Add pi.alert DNS Record
|
||||
```
|
||||
hostname -I
|
||||
```
|
||||
or this one if have severals interfaces
|
||||
```
|
||||
ip -o route get 1 | sed -n 's/.*src \([0-9.]\+\).*/\1/p'
|
||||
```
|
||||
|
||||
- Pi-hole admin portal -> Local DNS -> DNS Records -> Add new domain /IP
|
||||
- pi.alert 192.168.1.x
|
||||
- (*replace 192.168.1.x with your Raspberry IP*)
|
||||
|
||||
2.8 - Deactivate your current DHCP Server (*usually at your router or AP*)
|
||||
|
||||
2.9 - Renew your computer IP to unsure you are using the new DHCP and DNS server
|
||||
- Windows: cmd -> ipconfig /renew
|
||||
- Linux: shell -> sudo dhclient -r; sudo dhclient
|
||||
- Mac: Apple menu -> System Preferences -> Network -> Select the network
|
||||
-> Advanced -> TCP/IP -> Renew DHCP Lease
|
||||
|
||||
|
||||
### Lighttpd & PHP
|
||||
<!--- --------------------------------------------------------------------- --->
|
||||
If you have installed Pi.hole, lighttpd and PHP are already installed and this
|
||||
block is not necessary
|
||||
|
||||
3.1 - Install lighttpd
|
||||
```
|
||||
sudo apt-get install lighttpd -y
|
||||
```
|
||||
|
||||
3.2 - If Pi.Alert will be the only site available in this webserver, you can
|
||||
redirect the default server page to pialert subfolder
|
||||
```
|
||||
sudo mv /var/www/html/index.lighttpd.html /var/www/html/index.lighttpd.html.old
|
||||
sudo ln -s ~/pialert/install/index.html /var/www/html/index.html
|
||||
```
|
||||
|
||||
3.3 - Install PHP
|
||||
```
|
||||
sudo apt-get install php php-cgi php-fpm php-sqlite3 -y
|
||||
```
|
||||
|
||||
3.4 - Activate PHP
|
||||
```
|
||||
sudo lighttpd-enable-mod fastcgi-php
|
||||
sudo /etc/init.d/lighttpd restart
|
||||
```
|
||||
|
||||
|
||||
### arp-scan & Python
|
||||
<!--- --------------------------------------------------------------------- --->
|
||||
4.1 - Install arp-scan utility and test
|
||||
```
|
||||
sudo apt-get install arp-scan -y
|
||||
sudo arp-scan -l
|
||||
```
|
||||
|
||||
4.2 - Install dnsutils utility
|
||||
```
|
||||
sudo apt-get install dnsutils -y
|
||||
```
|
||||
|
||||
4.3 - Test Python
|
||||
|
||||
New versions of 'Raspberry Pi OS' includes Python. You can check that
|
||||
Python is installed with the command:
|
||||
```
|
||||
python -V
|
||||
```
|
||||
|
||||
New versions of Ubuntu includes Python 3. You can choose between use `python3`
|
||||
command or to install Python 2 (that includes `python` command).
|
||||
|
||||
|
||||
If you prefer to use Python 3, in the next installation block, you must update
|
||||
`pialert.cron` file with the correct command: `python3` instead of `python`.
|
||||
```
|
||||
python3 -V
|
||||
```
|
||||
|
||||
4.4 - If Python is not installed in your system, you can install it with this
|
||||
command:
|
||||
```
|
||||
sudo apt-get install python
|
||||
```
|
||||
Or this one if you prefer Python 3:
|
||||
```
|
||||
sudo apt-get install python3
|
||||
```
|
||||
|
||||
### Pi.Alert
|
||||
<!--- --------------------------------------------------------------------- --->
|
||||
5.1 - Download Pi.Alert and uncompress
|
||||
```
|
||||
cd
|
||||
curl -LO https://github.com/pucherot/Pi.Alert/raw/main/tar/pialert_latest.tar
|
||||
tar xvf pialert_latest.tar
|
||||
rm pialert_latest.tar
|
||||
```
|
||||
|
||||
5.2 - Public the front portal
|
||||
```
|
||||
sudo ln -s ~/pialert/front /var/www/html/pialert
|
||||
```
|
||||
|
||||
5.3 - Configure web server redirection
|
||||
|
||||
If you have configured your DNS server (Pi.hole or other) to resolve pi.alert
|
||||
with the IP of your raspberry, youy must configure lighttpd to redirect these
|
||||
requests to the correct pialert web folder
|
||||
```
|
||||
sudo cp ~/pialert/install/pialert_front.conf /etc/lighttpd/conf-available
|
||||
sudo ln -s ../conf-available/pialert_front.conf /etc/lighttpd/conf-enabled/pialert_front.conf
|
||||
sudo /etc/init.d/lighttpd restart
|
||||
```
|
||||
|
||||
5.4 - If you want to use email reporting with gmail
|
||||
- Go to your Google Account https://myaccount.google.com/
|
||||
- On the left navigation panel, click Security
|
||||
- On the bottom of the page, in the Less secure app access panel,
|
||||
click Turn on access
|
||||
- Click Save button
|
||||
|
||||
5.5 - Config Pialert parameters
|
||||
```
|
||||
sed -i "s,'/home/pi/pialert','$HOME/pialert'," ~/pialert/config/pialert.conf
|
||||
nano ~/pialert/config/pialert.conf
|
||||
```
|
||||
- If you want to use email reporting, configure this parameters
|
||||
```ini
|
||||
REPORT_MAIL = True
|
||||
SMTP_USER = 'user@gmail.com'
|
||||
SMTP_PASS = 'password'
|
||||
REPORT_TO = 'user@gmail.com'
|
||||
```
|
||||
|
||||
- If you want to update your Dynamic DNS, configure this parameters
|
||||
```ini
|
||||
DDNS_ACTIVE = True
|
||||
DDNS_DOMAIN = 'your_domain.freeddns.org'
|
||||
DDNS_USER = 'dynu_user'
|
||||
DDNS_PASSWORD = 'A0000000B0000000C0000000D0000000'
|
||||
DDNS_UPDATE_URL = 'https://api.dynu.com/nic/update?'
|
||||
```
|
||||
|
||||
- If you have installed Pi.hole and DHCP, activate this parameters
|
||||
```ini
|
||||
PIHOLE_ACTIVE = True
|
||||
DHCP_ACTIVE = True
|
||||
```
|
||||
|
||||
5.6 - Update vendors DB
|
||||
```
|
||||
python ~/pialert/back/pialert.py update_vendors
|
||||
```
|
||||
or
|
||||
```
|
||||
python3 ~/pialert/back/pialert.py update_vendors
|
||||
```
|
||||
|
||||
5.7 - Test Pi.Alert Scan
|
||||
```
|
||||
python ~/pialert/back/pialert.py internet_IP
|
||||
python ~/pialert/back/pialert.py 1
|
||||
```
|
||||
or
|
||||
```
|
||||
python3 ~/pialert/back/pialert.py internet_IP
|
||||
python3 ~/pialert/back/pialert.py 1
|
||||
```
|
||||
|
||||
5.8 - Update crontab template with python3
|
||||
|
||||
If you prefer to use Python 3 (installed in the previous block), you must
|
||||
update `pialert.cron` file with the correct command: `python3` instead of
|
||||
`python`
|
||||
```
|
||||
sed -i 's/python/python3/g' ~/pialert/install/pialert.cron
|
||||
```
|
||||
|
||||
5.9 - Add crontab jobs
|
||||
```
|
||||
(crontab -l 2>/dev/null; cat ~/pialert/install/pialert.cron) | crontab -
|
||||
```
|
||||
|
||||
5.10 - Add permissions to the web-server user
|
||||
```
|
||||
sudo chgrp -R www-data ~/pialert/db
|
||||
chmod -R 770 ~/pialert/db
|
||||
```
|
||||
|
||||
5.11 - Check DNS record for pi.alert (explained in point 2.7 of Pi.hole
|
||||
installation)
|
||||
- Add pi.alert DNS Record
|
||||
```
|
||||
hostname -I
|
||||
```
|
||||
or this one if have severals interfaces
|
||||
```
|
||||
ip -o route get 1 | sed -n 's/.*src \([0-9.]\+\).*/\1/p'
|
||||
```
|
||||
- Pi-hole admin portal -> Local DNS -> DNS Records -> Add new domain /IP
|
||||
- pi.alert 192.168.1.x
|
||||
- (*replace 192.168.1.x with your Raspberry IP*)
|
||||
|
||||
5.12 - Use admin panel to configure the devices
|
||||
- http://pi.alert/
|
||||
- http://192.168.1.x/pialert/
|
||||
- (*replace 192.168.1.x with your Raspberry IP*)
|
||||
|
||||
|
||||
### Device Management
|
||||
<!--- --------------------------------------------------------------------- --->
|
||||
|
||||
- [Device Management instructions](./DEVICE_MANAGEMENT.md)
|
||||
|
||||
|
||||
### License
|
||||
GPL 3.0
|
||||
[Read more here](../LICENSE.txt)
|
||||
|
||||
### Contact
|
||||
pi.alert.application@gmail.com
|
||||
43
docs/NETWORK_TREE.md
Executable file
@@ -0,0 +1,43 @@
|
||||
## How to setup your Network page
|
||||
|
||||
Make sure you have a root device with the MAC `Internet` (No other MAC addresses are currently support as root)
|
||||
|
||||
To setup a device named `rapberrypi` as a `Switch` in our network.
|
||||
|
||||
### 1) Device details page
|
||||
|
||||
- Go to the `Devices` (1) page:
|
||||
|
||||

|
||||
|
||||
- In the (2) `Details` tab navigate to the the `Type` (3) dropdown and select the type `Switch` (4).
|
||||
|
||||
> Note: Only the following device types will show up as selectable Network nodes ( = devices you can connect other devices to):
|
||||
> AP, Firewall, Gateway, PLC, Powerline, Router, Switch, USB LAN Adapter, USB WIFI Adapter and WLAN.
|
||||
|
||||
- Assign a device to your root device from the `Node` (5) dropdown which has the MAC `Internet` (6) (Your name may differ, but the MAC needs to be set to `Internet` - this is done by default).
|
||||
|
||||
- Save your changes (7)
|
||||
|
||||
### 1) Network page
|
||||
|
||||
- Navigate to your `Network` (1) page:
|
||||
|
||||

|
||||
|
||||
- Notice the newly added `raspberrypi` (2) tab which now represents a network node, also showing up in the tree (3).
|
||||
- As we asssigned the `raspberrypi` in the previous 1) Device details page section to the `Internet` parent network node in step (6), the link is also showing up in the tree diagram (4)
|
||||
- We can now assign the device `(AppleTV)` (5) to this `raspberrypi` node, representing a network Switch in this example
|
||||
|
||||
### 1) Network page with 2 levels
|
||||
|
||||
- After clicking the `Assign` button in the previous section, the `(AppleTV)` (1) device is now connected to our `raspberrypi` (2).
|
||||
|
||||

|
||||
|
||||
- You can see the `raspberrypi` represents the Network node type `Switch` (3)
|
||||
- The `(AppleTV)` to `raspberrypi` connection is also displayed in the table of `Connected devices` (4).
|
||||
- You can also see that our `raspberrypi` node is connected to it's Parent network device node with the MAC `Internet` (5). This connection again shows up in the tree (6) as well.
|
||||
|
||||
|
||||
|
||||
2
docs/RAMDOM_MAC.md → docs/RANDOM_MAC.md
Normal file → Executable file
@@ -4,7 +4,7 @@
|
||||
The latest versions of some operating systems (IOS and Android) incorporate a
|
||||
new & interesting functionality to improve privacy: **Random MACs**.
|
||||
|
||||
This functionality allows you to **hide the true MAC** of the device and
|
||||
This functionality allows you to **hide the real MAC** of the device and
|
||||
**assign a random MAC** when we connect to WIFI networks.
|
||||
|
||||
This behavior is especially useful when connecting to WIFI's that we do not
|
||||
15
docs/SMTP_GMAIL.md
Executable file
@@ -0,0 +1,15 @@
|
||||
## Use the Gmail SMTP server
|
||||
|
||||
1) Create an app password by following the instructions from Google, you need to Enable 2FA for this to work.
|
||||
[https://support.google.com/accounts/answer/185833](https://support.google.com/accounts/answer/185833)
|
||||
|
||||
2) Specify the following settings:
|
||||
|
||||
```python
|
||||
SMTP_SKIP_TLS=True
|
||||
SMTP_FORCE_SSL=True
|
||||
SMTP_PORT=465
|
||||
SMTP_SERVER='smtp.gmail.com'
|
||||
SMTP_PASS='16-digit passcode from google'
|
||||
```
|
||||
|
||||
21
docs/SUBNETS.md
Executable file
@@ -0,0 +1,21 @@
|
||||
## Subnets configuration
|
||||
|
||||
The arp-scan time itself depends on the number of IP addresses to check.
|
||||
The number of IPs to check depends on the [network mask](https://www.calculator.net/ip-subnet-calculator.html) you set on the `SCAN_SUBNETS` setting.
|
||||
|
||||
For example, a `/24` mask results in 256 IPs to check, where as a `/16` mask checks around 65,536. Every IP takes a couple seconds. This means that with an incorrect configuration the arp-scan will take hours to complete instead of seconds.
|
||||
|
||||
- Specify the network mask. For example, the filter `192.168.1.0/24` covers IP ranges 192.168.1.0 to 192.168.1.255
|
||||
- Run `iwconfig` in your container to find your interface name(s) (e.g.: `eth0`, `eth1`).
|
||||
- Append e.g.: ` -vlan=107` to the interface field (e.g.: `eth0 -vlan=107`) for multiple vlans. More details in this [comment in this issue](https://github.com/jokob-sk/Pi.Alert/issues/170#issuecomment-1419902988)
|
||||
|
||||
### Example:
|
||||
|
||||

|
||||
|
||||
### Support for VLANS
|
||||
|
||||
Please note about the accessibility of the macvlans when they are configured on the same computer. My understanding this is a general networking behavior, but feel free to clarify via a PR/issue.
|
||||
|
||||
- Pi.Alert does not detect the macvlan container when it is running on the same computer.
|
||||
- Pi.Alert recognizes the macvlan container when it is running on a different computer.
|
||||
35
docs/VERSIONS_HISTORY.md
Normal file → Executable file
@@ -3,6 +3,7 @@
|
||||
|
||||
| Version | Description |
|
||||
| ------- | --------------------------------------------------------------- |
|
||||
| v3.00 | Major set of New features & Enhancements |
|
||||
| v2.70 | New features & Usability improvements in the web prontal |
|
||||
| v2.61 | Bug fixing |
|
||||
| v2.60 | Improved the compability of installation process (Ubuntu) |
|
||||
@@ -13,6 +14,39 @@
|
||||
| v2.50 | First public release |
|
||||
|
||||
|
||||
# 🆕 2022+ [Newest Release notes](https://github.com/jokob-sk/Pi.Alert/issues/138)
|
||||
|
||||
## Pi.Alert v3.02
|
||||
<!--- --------------------------------------------------------------------- --->
|
||||
**PENDING UPDATE DOC**
|
||||
- Fixed: UNIQUE constraint failed with Local MAC #114
|
||||
|
||||
|
||||
## Pi.Alert v3.01
|
||||
<!--- --------------------------------------------------------------------- --->
|
||||
**PENDING UPDATE DOC**
|
||||
- Fixed: Problem with local MAC & IP (raspberry) #106
|
||||
|
||||
|
||||
## Pi.Alert v3.00
|
||||
<!--- --------------------------------------------------------------------- --->
|
||||
**PENDING UPDATE DOC**
|
||||
- `arp-scan` config options: interface, several subnets. #101 #15
|
||||
- Next/previos button while editing devices #66 #37
|
||||
- Internet presence/sessions monitoring #63
|
||||
- Logical delete / archive / hide Device #93
|
||||
- Flag to mark device with random MAC's #87
|
||||
- New Device Types predefined in combobox #92
|
||||
- Ask before leave the page with unsaved changes #104
|
||||
- Option to don't mark devices as new during installation #94
|
||||
- Uninstall script #62
|
||||
- Fixed: Error updating name of devices w/o IP #97
|
||||
- Fixed: Deleted devices reappear #84
|
||||
- Fixed: Device running Pi.Alert must be marked as "on-line" #76
|
||||
- Fixed: Incorrect calculation of presence hours #102
|
||||
- Fixed: Problem redirect to homepage clicking in logo #103
|
||||
|
||||
|
||||
## Pi.Alert v2.70
|
||||
<!--- --------------------------------------------------------------------- --->
|
||||
- Added Client names resolution #43
|
||||
@@ -35,6 +69,7 @@
|
||||
- Added compatibility with Python 3 (default version installed with Ubuntu)
|
||||
- Added compatibility in the Installation guide with Ubuntu server
|
||||
- Eliminated some unnecessary packages from the installation
|
||||
|
||||
|
||||
|
||||
### License
|
||||
|
||||
18
docs/WEBHOOK_N8N.md
Executable file
@@ -0,0 +1,18 @@
|
||||
### Create a simple n8n workflow
|
||||
|
||||

|
||||
|
||||
### Specify your email template
|
||||
See [sample JSON](https://github.com/jokob-sk/Pi.Alert/blob/main/back/webhook_json_sample.json) if you want to see the JSON paths used in the email template below
|
||||

|
||||
|
||||
```
|
||||
Events count: {{ $json["body"]["attachments"][0]["text"]["events"].length }}
|
||||
New devices count: {{ $json["body"]["attachments"][0]["text"]["new_devices"].length }}
|
||||
```
|
||||
|
||||
### Get your webhook in n8n
|
||||

|
||||
|
||||
### Configure PiAlert to point to the above URL
|
||||

|
||||
|
Before Width: | Height: | Size: 168 KiB |
|
Before Width: | Height: | Size: 129 KiB |
|
Before Width: | Height: | Size: 106 KiB |
|
Before Width: | Height: | Size: 135 KiB |
BIN
docs/img/2_4_device_nmap.jpg
Executable file
|
After Width: | Height: | Size: 172 KiB |
BIN
docs/img/2_5_device_nmap_ready.jpg
Executable file
|
After Width: | Height: | Size: 198 KiB |
|
Before Width: | Height: | Size: 136 KiB |
0
docs/img/4_report_1.jpg
Normal file → Executable file
|
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 43 KiB |
BIN
docs/img/4_report_2.jpg
Normal file → Executable file
|
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 32 KiB |
BIN
docs/img/@eaDir/device_details.png@SynoEAStream
Executable file
BIN
docs/img/@eaDir/devices_dark.png@SynoEAStream
Executable file
BIN
docs/img/@eaDir/devices_light.png@SynoEAStream
Executable file
BIN
docs/img/@eaDir/devices_split.png@SynoEAStream
Executable file
BIN
docs/img/@eaDir/events.png@SynoEAStream
Executable file
BIN
docs/img/@eaDir/help_faq.png@SynoEAStream
Executable file
BIN
docs/img/@eaDir/maintenance.png@SynoEAStream
Executable file
BIN
docs/img/@eaDir/network.png@SynoEAStream
Executable file
BIN
docs/img/@eaDir/presence.png@SynoEAStream
Executable file
BIN
docs/img/@eaDir/settings.png@SynoEAStream
Executable file
BIN
docs/img/DEBUG/Invalid_JSON_repsonse_debug.png
Executable file
|
After Width: | Height: | Size: 197 KiB |
BIN
docs/img/DEBUG/JSON_result_example.png
Executable file
|
After Width: | Height: | Size: 54 KiB |
BIN
docs/img/DEBUG/array_result_example.png
Executable file
|
After Width: | Height: | Size: 7.0 KiB |
BIN
docs/img/NETWORK_TREE/Device_Details_Network_Type.png
Executable file
|
After Width: | Height: | Size: 100 KiB |
BIN
docs/img/NETWORK_TREE/Network_Page.png
Executable file
|
After Width: | Height: | Size: 185 KiB |
BIN
docs/img/NETWORK_TREE/Network_Page_2_Levels.png
Executable file
|
After Width: | Height: | Size: 89 KiB |
BIN
docs/img/SUBNETS/subnets_vlan.png
Executable file
|
After Width: | Height: | Size: 20 KiB |
BIN
docs/img/WEBHOOK_N8N/Webhook_settings.png
Executable file
|
After Width: | Height: | Size: 61 KiB |
BIN
docs/img/WEBHOOK_N8N/n8n_send_email_settings.png
Executable file
|
After Width: | Height: | Size: 38 KiB |
BIN
docs/img/WEBHOOK_N8N/n8n_webhook_settings.png
Executable file
|
After Width: | Height: | Size: 31 KiB |
BIN
docs/img/WEBHOOK_N8N/n8n_workflow.png
Executable file
|
After Width: | Height: | Size: 6.3 KiB |
0
docs/img/android_random_mac.jpg
Normal file → Executable file
|
Before Width: | Height: | Size: 551 KiB After Width: | Height: | Size: 551 KiB |
BIN
docs/img/device_details.png
Executable file
|
After Width: | Height: | Size: 132 KiB |
BIN
docs/img/device_nmap.png
Executable file
|
After Width: | Height: | Size: 157 KiB |
BIN
docs/img/devices_dark.png
Executable file
|
After Width: | Height: | Size: 187 KiB |
BIN
docs/img/devices_light.png
Executable file
|
After Width: | Height: | Size: 186 KiB |
BIN
docs/img/devices_split.png
Executable file
|
After Width: | Height: | Size: 211 KiB |
BIN
docs/img/events.png
Executable file
|
After Width: | Height: | Size: 174 KiB |
BIN
docs/img/help_faq.png
Executable file
|
After Width: | Height: | Size: 109 KiB |
BIN
docs/img/maintenance.png
Executable file
|
After Width: | Height: | Size: 123 KiB |
BIN
docs/img/network.png
Executable file
|
After Width: | Height: | Size: 141 KiB |
BIN
docs/img/plugins.png
Executable file
|
After Width: | Height: | Size: 218 KiB |
BIN
docs/img/plugins_json_settings.png
Executable file
|
After Width: | Height: | Size: 185 KiB |
BIN
docs/img/plugins_json_ui.png
Executable file
|
After Width: | Height: | Size: 173 KiB |
BIN
docs/img/plugins_settings.png
Executable file
|
After Width: | Height: | Size: 158 KiB |
BIN
docs/img/plugins_webmon.png
Executable file
|
After Width: | Height: | Size: 92 KiB |
BIN
docs/img/presence.png
Executable file
|
After Width: | Height: | Size: 146 KiB |
BIN
docs/img/settings.png
Executable file
|
After Width: | Height: | Size: 174 KiB |
1
docs/img/size_h_1250_w_1000.txt
Executable file
@@ -0,0 +1 @@
|
||||
Screenshot size: height: 1250px width: 1000px
|
||||
@@ -1,80 +0,0 @@
|
||||
<!-- ---------------------------------------------------------------------------
|
||||
# Pi.Alert
|
||||
# Open Source Network Guard / WIFI & LAN intrusion detector
|
||||
#
|
||||
# repot_sample.html - Back module. Sample email reporting in HTML format
|
||||
#-------------------------------------------------------------------------------
|
||||
# Puche 2021 pi.alert.application@gmail.com GNU GPLv3
|
||||
#--------------------------------------------------------------------------- -->
|
||||
|
||||
<html>
|
||||
|
||||
<head>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<font face=sans-serif>
|
||||
<table align=center width=80% border=1 bordercolor=#909090 cellpadding=0 cellspacing=0 style="border-collapse: collapse; box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.5)">
|
||||
<tr>
|
||||
<td bgcolor=#EFB956 align=center style="padding: 20px 10px 10px 10px; font-size: 36px; font-weight: bold; color:#7F6000; text-shadow: 4px 4px 6px #909090">
|
||||
Pi.Alert Report
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
<table width=100% border=0 bgcolor=#FFD966 cellpadding=5px cellspacing=0 style="border-collapse: collapse; font-size: 16px; text-align:center; color:#5F5000">
|
||||
<tr>
|
||||
<td width=33%> Report Date: <b>2021-01-01 08:00</b> </td>
|
||||
<td width=34%> Scan Cycle: <b>Internet</b> </td>
|
||||
<td width=33%> Server: <b>pi4</b> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td bgcolor=#F5F5F5 valign=top height=400 style="padding: 20px">
|
||||
|
||||
<p style="font-size: 24px; font-weight: bold; color:#C04040; text-shadow: 2px 2px 4px #A0A0A0"> Internet: </p>
|
||||
|
||||
<table width=100% border=1 bordercolor=#C0C0C0 cellpadding=3px cellspacing=0 style="border-collapse: collapse; font-size: 12px; color:#707070; box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2)">
|
||||
<tr bgcolor=#909090 style="color:#F0F0F0">
|
||||
<th width=140> Event Type </th>
|
||||
<th width=130> Datetime </th>
|
||||
<th width=100> IP </th>
|
||||
<th> Additional Info </th>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td> Internet IP Changed </td>
|
||||
<td> 2021-01-01 08:00:00 </td>
|
||||
<td style="font-size: 24px; color:#D02020"> 1.1.1.0 </td>
|
||||
<td> Previous Internet IP: 1.1.0.0 </td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
|
||||
<br>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
|
||||
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
<table width=100% border=0 bgcolor=#70AD47 cellpadding=5px cellspacing=0 style="border-collapse: collapse; font-size: 12px; font-weight: bold; color:#385723">
|
||||
<tr>
|
||||
<td width=25% style="text-align:Left"> Puche 2021</td>
|
||||
<td width=50% style="text-align:center"> Pi.Alert 2.50 / 2021-01-01 </td>
|
||||
<td width=25% style="text-align:right"> GNU GPLv3</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</font>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,143 +0,0 @@
|
||||
<!-- ---------------------------------------------------------------------------
|
||||
# Pi.Alert
|
||||
# Open Source Network Guard / WIFI & LAN intrusion detector
|
||||
#
|
||||
# repot_sample.html - Back module. Sample email reporting in HTML format
|
||||
#-------------------------------------------------------------------------------
|
||||
# Puche 2021 pi.alert.application@gmail.com GNU GPLv3
|
||||
#--------------------------------------------------------------------------- -->
|
||||
|
||||
<html>
|
||||
|
||||
<head>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<font face=sans-serif>
|
||||
<table align=center width=80% border=1 bordercolor=#909090 cellpadding=0 cellspacing=0 style="border-collapse: collapse; box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.5)">
|
||||
<tr>
|
||||
<td bgcolor=#EFB956 align=center style="padding: 20px 10px 10px 10px; font-size: 36px; font-weight: bold; color:#7F6000; text-shadow: 4px 4px 6px #909090">
|
||||
Pi.Alert Report
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
<table width=100% border=0 bgcolor=#FFD966 cellpadding=5px cellspacing=0 style="border-collapse: collapse; font-size: 16px; text-align:center; color:#5F5000">
|
||||
<tr>
|
||||
<td width=33%> Report Date: <b>2021-01-01 08:00</b> </td>
|
||||
<td width=34%> Scan Cycle: <b>1</b> </td>
|
||||
<td width=33%> Server: <b>pi4</b> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
|
||||
|
||||
<tr>
|
||||
<td bgcolor=#F5F5F5 height=400 valign=top style="padding: 20px">
|
||||
|
||||
|
||||
|
||||
<p style="font-size: 14px; font-weight: bold; color:#C04040; text-shadow: 2px 2px 4px #A0A0A0"> New Devices: </p>
|
||||
|
||||
<table width=100% border=1 bordercolor=#C0C0C0 cellpadding=3px cellspacing=0 style="border-collapse: collapse; font-size: 12px; color:#707070; box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2)">
|
||||
<tr bgcolor=#909090 style="color:#F0F0F0">
|
||||
<th width=140> MAC </th>
|
||||
<th width=130> Datetime </th>
|
||||
<th width=100> IP </th>
|
||||
<th> Vendor </th>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td> f8:d0:27:00:00:00 </td>
|
||||
<td> 2021-01-01 08:00:00 </td>
|
||||
<td> 192.168.1.20 </td>
|
||||
<td> Seiko Epson Corporation </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> c8:6c:3d:00:00:00 </td>
|
||||
<td> 2021-01-01 08:00:00 </td>
|
||||
<td> 192.168.1.181 </td>
|
||||
<td> Amazon Technologies Inc. </td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
|
||||
<br>
|
||||
|
||||
|
||||
|
||||
<p style="font-size: 14px; font-weight: bold; color:#C04040; text-shadow: 2px 2px 4px #A0A0A0"> Devices Down: </p>
|
||||
|
||||
<table width=100% border=1 bordercolor=#C0C0C0 cellpadding=3px cellspacing=0 style="border-collapse: collapse; font-size: 12px; color:#707070; box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2)">
|
||||
<tr bgcolor=#909090 style="color:#F0F0F0">
|
||||
<th width=140> MAC </th>
|
||||
<th width=130> Datetime </th>
|
||||
<th width=100> IP </th>
|
||||
<th> Device Name </th>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td> 0c:ee:99:00:00:00 </td>
|
||||
<td> 2021-01-01 08:00:00 </td>
|
||||
<td> 192.168.1.171 </td>
|
||||
<td> Alexa - Echo </td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
|
||||
<br>
|
||||
|
||||
|
||||
|
||||
<p style="font-size: 14px; font-weight: bold; color:#409040; text-shadow: 2px 2px 4px #A0A0A0"> Events: </p>
|
||||
|
||||
<table width=100% border=1 bordercolor=#C0C0C0 cellpadding=3px cellspacing=0 style="border-collapse: collapse; font-size: 12px; color:#707070; box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2)">
|
||||
<tr bgcolor=#909090 style="color:#F0F0F0">
|
||||
<th width=140> MAC </th>
|
||||
<th width=130> Datetime </th>
|
||||
<th width=100> IP </th>
|
||||
<th width=100> Event Type </th>
|
||||
<th width=140> Device Name </th>
|
||||
<th> Additional Info </th>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td> 94:0c:98:00:00:00 </td>
|
||||
<td> 2021-01-01 08:00:00 </td>
|
||||
<td> 192.168.1.132 </td>
|
||||
<td> Connected </td>
|
||||
<td> Person 1 - iPhone 11 </td>
|
||||
<td> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> 5c:41:5a:00:00:00 </td>
|
||||
<td> 2021-01-01 08:00:00 </td>
|
||||
<td> 192.168.1.170 </td>
|
||||
<td> IP Changed </td>
|
||||
<td> Alexa Dot </td>
|
||||
<td> Previous IP: 192.168.1.243 </td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
<table width=100% border=0 bgcolor=#70AD47 cellpadding=5px cellspacing=0 style="border-collapse: collapse; font-size: 12px; font-weight: bold; color:#385723">
|
||||
<tr>
|
||||
<td width=25% style="text-align:Left"> Puche 2021</td>
|
||||
<td width=50% style="text-align:center"> Pi.Alert 2.50 / 2021-01-01 </td>
|
||||
<td width=25% style="text-align:right"> GNU GPLv3</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</font>
|
||||
</body>
|
||||
</html>
|
||||
2
front/api/.gitignore
vendored
Executable file
@@ -0,0 +1,2 @@
|
||||
*
|
||||
!.gitignore
|
||||
17
front/css/dark-patch-cal.css
Executable file
@@ -0,0 +1,17 @@
|
||||
.fc-sat {
|
||||
background-color: #444D56; }
|
||||
.fc-sun {
|
||||
background-color: #444D56; }
|
||||
.fc-today {
|
||||
background-color: #8D9AAC !important;
|
||||
border: none !important;
|
||||
}
|
||||
.fc-cell-content {
|
||||
background-color: #272c30;
|
||||
}
|
||||
.fc-widget-header {
|
||||
background-color: #353c42;
|
||||
}
|
||||
.fc-unthemed .fc-content, .fc-unthemed .fc-divider, .fc-unthemed .fc-list-heading td, .fc-unthemed .fc-list-view, .fc-unthemed .fc-popover, .fc-unthemed .fc-row, .fc-unthemed tbody, .fc-unthemed td, .fc-unthemed th, .fc-unthemed thead{
|
||||
border-color: #353c42 !important;
|
||||
}
|
||||
725
front/css/dark-patch.css
Executable file
@@ -0,0 +1,725 @@
|
||||
/* Pi-hole: A black hole for Internet advertisements
|
||||
* (c) 2020 Pi-hole, LLC (https://pi-hole.net)
|
||||
* Network-wide ad blocking via your own hardware.
|
||||
*
|
||||
* This file is copyright under the latest version of the EUPL.
|
||||
* Please see LICENSE file for your rights under this license.
|
||||
*
|
||||
* The colors used in this theme has been inspired by
|
||||
* https://github.com/anvyst/adminlte-skin-midnight
|
||||
*
|
||||
* Additional fixes For Pi.Alert UI by leiweibau */
|
||||
|
||||
:root {
|
||||
--datatable-bgcolor: rgba(64, 76, 88, 0.8);
|
||||
}
|
||||
html {
|
||||
background-color: #353c42;
|
||||
}
|
||||
|
||||
body {
|
||||
background-color: #353c42;
|
||||
color: #bec5cb;
|
||||
}
|
||||
h4 {
|
||||
color: #44def1;
|
||||
}
|
||||
.content-header > .breadcrumb > li > a {
|
||||
color: #bec5cb;
|
||||
}
|
||||
.table > thead > tr > th,
|
||||
.table > tbody > tr > th,
|
||||
.table > tfoot > tr > th,
|
||||
.table > thead > tr > td,
|
||||
.table > tbody > tr > td,
|
||||
.table > tfoot > tr > td {
|
||||
border-top: 0;
|
||||
}
|
||||
.table > thead > tr.odd,
|
||||
.table > tbody > tr.odd,
|
||||
.table > tfoot > tr.odd {
|
||||
background-color: #2a2f34;
|
||||
}
|
||||
.table > thead > tr.odd:hover,
|
||||
.table > tbody > tr.odd:hover,
|
||||
.table > tfoot > tr.odd:hover,
|
||||
.table > thead > tr.even:hover,
|
||||
.table > tbody > tr.even:hover,
|
||||
.table > tfoot > tr.even:hover {
|
||||
background-color: #1e2226;
|
||||
}
|
||||
.table-bordered,
|
||||
.table-bordered > thead > tr > th,
|
||||
.table-bordered > tbody > tr > th,
|
||||
.table-bordered > tfoot > tr > th,
|
||||
.table-bordered > thead > tr > td,
|
||||
.table-bordered > tbody > tr > td,
|
||||
.table-bordered > tfoot > tr > td {
|
||||
border: 1px solid #353c42;
|
||||
}
|
||||
.dataTables_wrapper input[type="search"] {
|
||||
border-radius: 4px;
|
||||
background-color: #353c42;
|
||||
border: 0;
|
||||
color: #bec5cb;
|
||||
}
|
||||
.dataTables_paginate .pagination li > a {
|
||||
background-color: #353c42;
|
||||
border-color: #353c42;
|
||||
}
|
||||
.pagination > .disabled > a,
|
||||
.pagination > .disabled > a:focus,
|
||||
.pagination > .disabled > a:hover,
|
||||
.pagination > .disabled > span,
|
||||
.pagination > .disabled > span:focus,
|
||||
.pagination > .disabled > span:hover {
|
||||
cursor: not-allowed;
|
||||
color: #bec5cb;
|
||||
background-color: #353c42;
|
||||
border-color: #353c42;
|
||||
}
|
||||
.pagination > li > a:focus,
|
||||
.pagination > li > a:hover,
|
||||
.pagination > li > span:focus,
|
||||
.pagination > li > span:hover {
|
||||
z-index: 2;
|
||||
color: #bec5cb;
|
||||
background-color: #54606b;
|
||||
border-color: #54606b;
|
||||
}
|
||||
.wrapper,
|
||||
.main-sidebar,
|
||||
.left-side {
|
||||
background-color: #272c30;
|
||||
}
|
||||
.user-panel > .info,
|
||||
.user-panel > .info > a {
|
||||
color: #fff;
|
||||
}
|
||||
.sidebar-menu > li.header {
|
||||
color: #556068;
|
||||
background-color: #1e2225;
|
||||
}
|
||||
.sidebar-menu > li > a {
|
||||
border-left: 3px solid transparent;
|
||||
}
|
||||
.sidebar-menu > li:hover > a,
|
||||
.sidebar-menu > li > a:focus,
|
||||
.sidebar-menu > li.active > a {
|
||||
color: #fff;
|
||||
background-color: #22272a;
|
||||
border-color: #3c8dbc;
|
||||
}
|
||||
.sidebar-menu > li > .treeview-menu {
|
||||
margin: 0 1px;
|
||||
background-color: #32393e;
|
||||
}
|
||||
.sidebar a {
|
||||
color: #bec5cb;
|
||||
}
|
||||
.sidebar a:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
.treeview-menu > li > a {
|
||||
color: #949fa8;
|
||||
}
|
||||
.treeview-menu > li.active > a,
|
||||
.treeview-menu > li > a:hover,
|
||||
.treeview-menu > li > a:focus {
|
||||
color: #fff;
|
||||
}
|
||||
.sidebar-form {
|
||||
border-radius: 3px;
|
||||
border: 1px solid #3e464c;
|
||||
margin: 10px;
|
||||
}
|
||||
.sidebar-form input[type="text"],
|
||||
.sidebar-form .btn {
|
||||
box-shadow: none;
|
||||
background-color: #3e464c;
|
||||
border: 1px solid transparent;
|
||||
height: 35px;
|
||||
}
|
||||
.sidebar-form input[type="text"] {
|
||||
color: #666;
|
||||
border-top-left-radius: 2px;
|
||||
border-top-right-radius: 0;
|
||||
border-bottom-right-radius: 0;
|
||||
border-bottom-left-radius: 2px;
|
||||
}
|
||||
.sidebar-form input[type="text"]:focus,
|
||||
.sidebar-form input[type="text"]:focus + .input-group-btn .btn {
|
||||
background-color: #fff;
|
||||
color: #666;
|
||||
}
|
||||
.sidebar-form input[type="text"]:focus + .input-group-btn .btn {
|
||||
border-left-color: #fff;
|
||||
}
|
||||
.sidebar-form .btn {
|
||||
color: #999;
|
||||
border-top-left-radius: 0;
|
||||
border-top-right-radius: 2px;
|
||||
border-bottom-right-radius: 2px;
|
||||
border-bottom-left-radius: 0;
|
||||
}
|
||||
.box,
|
||||
.box-footer,
|
||||
.info-box,
|
||||
.box-comment,
|
||||
.comment-text,
|
||||
.comment-text .username {
|
||||
color: #bec5cb;
|
||||
background-color: #272c30;
|
||||
}
|
||||
.box-comments .box-comment {
|
||||
border-bottom-color: #353c42;
|
||||
}
|
||||
.box-footer {
|
||||
border-top: 1px solid #353c42;
|
||||
}
|
||||
.box-header.with-border {
|
||||
border-bottom: 1px solid #353c42;
|
||||
}
|
||||
.box-solid,
|
||||
.box {
|
||||
border: 1px solid #272c30;
|
||||
}
|
||||
.box-solid > .box-header,
|
||||
.box > .box-header {
|
||||
color: #bec5cb;
|
||||
}
|
||||
.box-solid > .box-header .btn,
|
||||
.box > .box-header .btn {
|
||||
color: #bec5cb;
|
||||
}
|
||||
.box.box-info,
|
||||
.box.box-primary,
|
||||
.box.box-success,
|
||||
.box.box-warning,
|
||||
.box.box-danger {
|
||||
border-top-width: 3px;
|
||||
}
|
||||
.main-header .navbar {
|
||||
background-color: #272c30;
|
||||
}
|
||||
.main-header .navbar .nav > li > a,
|
||||
.main-header .navbar .nav > li > .navbar-text {
|
||||
color: #bec5cb;
|
||||
max-height: 50px;
|
||||
}
|
||||
.main-header .navbar .nav > li > a:hover,
|
||||
.main-header .navbar .nav > li > a:active,
|
||||
.main-header .navbar .nav > li > a:focus,
|
||||
.main-header .navbar .nav .open > a,
|
||||
.main-header .navbar .nav .open > a:hover,
|
||||
.main-header .navbar .nav .open > a:focus,
|
||||
.main-header .navbar .nav > .active > a {
|
||||
background-color: rgba(0, 0, 0, 0.1);
|
||||
color: #f6f6f6;
|
||||
}
|
||||
.main-header .navbar .sidebar-toggle {
|
||||
color: #bec5cb;
|
||||
}
|
||||
.main-header .navbar .sidebar-toggle:hover {
|
||||
color: #f6f6f6;
|
||||
background-color: rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
.timeline li .timeline-item {
|
||||
color: #bec5cb;
|
||||
background-color: #272c30;
|
||||
border-color: #353c42;
|
||||
}
|
||||
.timeline li .timeline-header {
|
||||
border-bottom-color: #353c42;
|
||||
}
|
||||
.nav-stacked > li > a {
|
||||
color: #bec5cb;
|
||||
}
|
||||
.nav-stacked > li > a:hover {
|
||||
color: white;
|
||||
background-color: #1e2226;
|
||||
}
|
||||
.content-wrapper,
|
||||
.right-side {
|
||||
background-color: #353c42;
|
||||
}
|
||||
.main-footer,
|
||||
.nav-tabs-custom {
|
||||
background-color: #272c30;
|
||||
border-top-color: #353c42;
|
||||
color: #bec5cb;
|
||||
}
|
||||
.main-footer .nav-tabs,
|
||||
.nav-tabs-custom .nav-tabs {
|
||||
background-color: #30383f;
|
||||
border-bottom-color: #2f363b;
|
||||
}
|
||||
.main-footer .tab-content,
|
||||
.nav-tabs-custom .tab-content {
|
||||
background-color: #30383f;
|
||||
}
|
||||
.nav-tabs-custom > .nav-tabs {
|
||||
background: rgba(64, 72, 80, 0.666);
|
||||
}
|
||||
.nav-tabs-custom > .nav-tabs > li {
|
||||
margin-right: 1px;
|
||||
color: #bec5cb;
|
||||
}
|
||||
.nav-tabs-custom > .nav-tabs > li.active > a,
|
||||
.nav-tabs-custom > .nav-tabs > li.active:hover > a {
|
||||
border-left-color: #30383f;
|
||||
border-right-color: #30383f;
|
||||
background-color: #30383f;
|
||||
color: #bec5cb;
|
||||
}
|
||||
.nav-tabs-custom > .nav-tabs > li:not(.active):hover {
|
||||
border-top-color: #d2d6de;
|
||||
background-color: transparent;
|
||||
}
|
||||
.nav-tabs-custom > .nav-tabs > li > a {
|
||||
color: #8e959b;
|
||||
}
|
||||
.nav-tabs-custom > .nav-tabs > li > a:focus {
|
||||
color: #3c8dbc;
|
||||
}
|
||||
.nav-tabs-custom > .nav-tabs > li:hover > a,
|
||||
.nav-tabs-custom > .nav-tabs > li.active:hover > a {
|
||||
background-color: #353c42;
|
||||
color: #bec5cb;
|
||||
}
|
||||
|
||||
.list-group {
|
||||
color: #bec5cb;
|
||||
background-color: #272c30;
|
||||
}
|
||||
.list-group .list-group-item {
|
||||
border-color: #353c42;
|
||||
background-color: #272c30;
|
||||
}
|
||||
.input-group .input-group-addon {
|
||||
border-right: 1px solid #272c30;
|
||||
}
|
||||
.select2 .select2-selection {
|
||||
background-color: #353c42;
|
||||
color: #bec5cb;
|
||||
border: 1px solid #353c42;
|
||||
}
|
||||
.select2 .select2-selection .select2-container--default,
|
||||
.select2 .select2-selection .select2-selection--single,
|
||||
.select2 .select2-selection .select2-selection--multiple,
|
||||
.select2 .select2-selection .select2-selection__rendered {
|
||||
color: #bec5cb;
|
||||
}
|
||||
.select2-dropdown {
|
||||
background-color: #353c42;
|
||||
color: #bec5cb;
|
||||
border: 1px solid #353c42;
|
||||
}
|
||||
.select2-dropdown .select2-search__field {
|
||||
background-color: #272c30;
|
||||
color: #bec5cb;
|
||||
border: 1px solid #353c42;
|
||||
}
|
||||
.select2-container--default.select2-container--open {
|
||||
background-color: #272c30;
|
||||
}
|
||||
|
||||
.layout-boxed {
|
||||
background: url("../../img/boxed-bg-dark.png") repeat fixed;
|
||||
}
|
||||
.not-used {
|
||||
background-color: #eee;
|
||||
}
|
||||
.not-used:hover {
|
||||
background-color: #c5c5c5;
|
||||
}
|
||||
.used {
|
||||
background-color: #fff;
|
||||
}
|
||||
.used:hover {
|
||||
background-color: #ddd;
|
||||
}
|
||||
|
||||
.graphs-grid {
|
||||
background-color: rgba(255, 255, 255, 0.2);
|
||||
}
|
||||
.graphs-ticks {
|
||||
color: #b8c7ce;
|
||||
}
|
||||
.queries-permitted {
|
||||
background-color: #00a65a;
|
||||
}
|
||||
.queries-blocked {
|
||||
background-color: #999;
|
||||
}
|
||||
.progress {
|
||||
background-color: #333;
|
||||
}
|
||||
|
||||
.bg-green {
|
||||
background-color: #005c32 !important;
|
||||
}
|
||||
.bg-aqua {
|
||||
background-color: #007997 !important;
|
||||
}
|
||||
.bg-yellow {
|
||||
background-color: #b1720c !important;
|
||||
}
|
||||
.bg-red {
|
||||
background-color: #913225 !important;
|
||||
}
|
||||
|
||||
code,
|
||||
pre {
|
||||
padding: 2px 4px;
|
||||
font-size: 90%;
|
||||
color: #bec5cb;
|
||||
background-color: #353c42;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
/* Used in the Query Log table */
|
||||
.text-green-light {
|
||||
color: #5ca314 !important;
|
||||
}
|
||||
.text-green {
|
||||
color: #00aa60 !important;
|
||||
}
|
||||
.text-orange {
|
||||
color: #b1720c !important;
|
||||
}
|
||||
.text-red {
|
||||
color: #bd2c19 !important;
|
||||
}
|
||||
.text-vivid-blue {
|
||||
color: #007997 !important;
|
||||
}
|
||||
td.highlight {
|
||||
background-color: rgba(255, 204, 0, 0.333);
|
||||
}
|
||||
.btn-default {
|
||||
box-shadow: none;
|
||||
background-color: #3e464c;
|
||||
color: #bec5cb;
|
||||
border: 1px solid #353c42;
|
||||
}
|
||||
|
||||
/* Used in debug log page */
|
||||
.log-red {
|
||||
color: #ff4038;
|
||||
}
|
||||
.log-green {
|
||||
color: #4c4;
|
||||
}
|
||||
.log-yellow {
|
||||
color: #fb0;
|
||||
}
|
||||
.log-blue {
|
||||
color: #48f;
|
||||
}
|
||||
.log-purple {
|
||||
color: #b8e;
|
||||
}
|
||||
.log-cyan {
|
||||
color: #0df;
|
||||
}
|
||||
.log-gray {
|
||||
color: #999;
|
||||
}
|
||||
|
||||
#output {
|
||||
border-color: #505458;
|
||||
background: #272c30;
|
||||
}
|
||||
|
||||
/* Used by the long-term pages */
|
||||
.daterangepicker {
|
||||
background-color: #3e464c;
|
||||
border-radius: 4px;
|
||||
border: 1px solid #353c42;
|
||||
}
|
||||
.daterangepicker .ranges li:hover {
|
||||
background-color: #353c42;
|
||||
}
|
||||
.daterangepicker .ranges li.active {
|
||||
background-color: #1e2226; /* Color also used in table pagination */
|
||||
}
|
||||
.daterangepicker .calendar-table {
|
||||
background-color: #3e464c;
|
||||
border-radius: 4px;
|
||||
border: 1px solid #353c42;
|
||||
}
|
||||
.daterangepicker td.off,
|
||||
.daterangepicker td.off.in-range,
|
||||
.daterangepicker td.off.start-date,
|
||||
.daterangepicker td.off.end-date {
|
||||
background-color: #485158;
|
||||
}
|
||||
.daterangepicker td.available:hover,
|
||||
.daterangepicker th.available:hover {
|
||||
background-color: #1e2226;
|
||||
}
|
||||
.daterangepicker td.active,
|
||||
.daterangepicker td.active:hover,
|
||||
.daterangepicker td.in-range:hover {
|
||||
background-color: #225e92;
|
||||
}
|
||||
.daterangepicker td.in-range {
|
||||
background-color: #1e2226;
|
||||
color: #bec5cb;
|
||||
}
|
||||
input,
|
||||
select,
|
||||
select.form-control,
|
||||
.form-group .input-group-addon,
|
||||
.input-group .input-group-addon,
|
||||
.form-group input,
|
||||
.input-group input,
|
||||
.form-group textarea,
|
||||
.input-group textarea,
|
||||
.daterangepicker select.hourselect,
|
||||
.daterangepicker select.minuteselect,
|
||||
.daterangepicker select.secondselect,
|
||||
.daterangepicker select.ampmselect,
|
||||
.form-control,
|
||||
div.dataTables_wrapper div.dataTables_length select {
|
||||
background-color: #353c42;
|
||||
color: #bec5cb;
|
||||
border: 1px solid #3d444b;
|
||||
}
|
||||
.form-control[disabled],
|
||||
.form-control[readonly],
|
||||
fieldset[disabled] .form-control {
|
||||
background-color: #353c42;
|
||||
opacity: 1;
|
||||
}
|
||||
.navbar-custom-menu > .navbar-nav > li > .dropdown-menu {
|
||||
background-color: #4c5761;
|
||||
color: #bec5cb;
|
||||
border: 1px solid #171c20;
|
||||
}
|
||||
.table-striped > tbody > tr:nth-of-type(2n + 1) {
|
||||
background-color: #2d343a;
|
||||
}
|
||||
.panel,
|
||||
.panel-body,
|
||||
.panel-default > .panel-heading {
|
||||
background-color: #3e464c;
|
||||
border-radius: 4px;
|
||||
border: 1px solid #353c42;
|
||||
color: #bec5cb;
|
||||
}
|
||||
.box.box-solid.box-info,
|
||||
.box.box-solid.box-info > .box-header {
|
||||
color: #bec5cb;
|
||||
background-color: #367fa9 !important;
|
||||
border: 1px solid #367fa9;
|
||||
}
|
||||
input[type="password"]::-webkit-credentials-auto-fill-button {
|
||||
background: #bfc5ca;
|
||||
}
|
||||
input[type="password"]::-webkit-caps-lock-indicator {
|
||||
filter: invert(100%);
|
||||
}
|
||||
|
||||
.network-never {
|
||||
background-color: #661b02;
|
||||
}
|
||||
.network-recent {
|
||||
background-color: #114100;
|
||||
}
|
||||
.network-old {
|
||||
background-color: #525200;
|
||||
}
|
||||
.network-older {
|
||||
background-color: #502b00;
|
||||
}
|
||||
.network-gradient {
|
||||
background-image: linear-gradient(to right, #114100 0%, #525200 100%);
|
||||
}
|
||||
|
||||
.icheckbox_polaris,
|
||||
.icheckbox_futurico,
|
||||
.icheckbox_minimal-blue {
|
||||
margin-right: 10px;
|
||||
}
|
||||
.iradio_polaris,
|
||||
.iradio_futurico,
|
||||
.iradio_minimal-blue {
|
||||
margin-right: 8px;
|
||||
}
|
||||
|
||||
/* Overlay box with spinners as shown during data collection for graphs */
|
||||
.box .overlay,
|
||||
.overlay-wrapper .overlay {
|
||||
z-index: 50;
|
||||
background-color: rgba(53, 60, 66, 0.733);
|
||||
border-radius: 3px;
|
||||
}
|
||||
.box .overlay > .fa,
|
||||
.overlay-wrapper .overlay > .fa,
|
||||
.navbar-nav > .user-menu > .dropdown-menu > .user-body a {
|
||||
color: #bec5cb !important;
|
||||
}
|
||||
|
||||
.navbar-nav > .user-menu > .dropdown-menu > .user-footer {
|
||||
background-color: #353c42bb;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.modal-content {
|
||||
background: #272c30;
|
||||
}
|
||||
.modal-header {
|
||||
border-bottom-color: #353c42;
|
||||
}
|
||||
.modal-footer {
|
||||
border-top-color: #353c42;
|
||||
}
|
||||
.close {
|
||||
color: #383838;
|
||||
}
|
||||
|
||||
/*** Fix login input visual misalignment ***/
|
||||
#loginform,
|
||||
#loginform input {
|
||||
color: rgb(120, 127, 133);
|
||||
}
|
||||
|
||||
.login-options input,
|
||||
.login-options [class*="icheck-"] > input:first-child + input[type="hidden"] + label::before,
|
||||
.login-options [class*="icheck-"] > input:first-child + label::before {
|
||||
background: none;
|
||||
border-color: rgb(120, 127, 133);
|
||||
}
|
||||
|
||||
/*** Additional fixes For Pi.Alert UI ***/
|
||||
.small-box {
|
||||
border-radius: 10px;
|
||||
border-top: 0px;
|
||||
}
|
||||
.pa-small-box-aqua .inner {
|
||||
background-color: rgb(45,108,133);
|
||||
border-top-left-radius: 10px;
|
||||
border-top-right-radius: 10px;
|
||||
}
|
||||
.pa-small-box-green .inner {
|
||||
background-color: rgb(31,76,46);
|
||||
border-top-left-radius: 10px;
|
||||
border-top-right-radius: 10px;
|
||||
}
|
||||
.pa-small-box-yellow .inner {
|
||||
background-color: rgb(151,104,37);
|
||||
border-top-left-radius: 10px;
|
||||
border-top-right-radius: 10px;
|
||||
}
|
||||
.pa-small-box-red .inner {
|
||||
background-color: rgb(120,50,38);
|
||||
border-top-left-radius: 10px;
|
||||
border-top-right-radius: 10px;
|
||||
}
|
||||
.pa-small-box-gray .inner {
|
||||
background-color: #777;
|
||||
/* color: rgba(20,20,20,30%); */
|
||||
border-top-left-radius: 10px;
|
||||
border-top-right-radius: 10px;
|
||||
}
|
||||
.pa-small-box-gray .inner h3 {
|
||||
color: #bbb;
|
||||
}
|
||||
.text-gray-20 {
|
||||
color: rgba(220,220,220,30%);
|
||||
}
|
||||
.bg-gray {
|
||||
background-color: #888888 !important;
|
||||
}
|
||||
.badge.bg-green {
|
||||
background-color: #00A000 !important;
|
||||
}
|
||||
.badge.bg-gray {
|
||||
background-color: #888 !important;
|
||||
}
|
||||
#txtRecord {
|
||||
background-color: #353c42;
|
||||
border-color: #888888;
|
||||
}
|
||||
.table-hover tbody tr:hover td, .table-hover tbody tr:hover th {
|
||||
background-color: rgb(189,192,198);
|
||||
color: #444;
|
||||
}
|
||||
|
||||
.db_info_table_cell:nth-child(1) {background: #272c30}
|
||||
.db_info_table_cell:nth-child(2) {background: #272c30}
|
||||
.db_tools_table_cell_a:nth-child(1) {background: #272c30}
|
||||
.db_tools_table_cell_a:nth-child(2) {background: #272c30}
|
||||
.db_tools_table_cell_b:nth-child(1) {background: #272c30}
|
||||
.db_tools_table_cell_b:nth-child(2) {background: #272c30}
|
||||
|
||||
.db_info_table {
|
||||
display: table;
|
||||
border-spacing: 0em;
|
||||
font-weight: 400;
|
||||
font-size: 15px;
|
||||
width: 100%;
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
.nav-tabs-custom > .nav-tabs > li:hover > a, .nav-tabs-custom > .nav-tabs > li.active:hover > a {
|
||||
background-color: #272c30;
|
||||
color: #bec5cb;
|
||||
}
|
||||
|
||||
.nav-tabs-custom > .nav-tabs > li.active > a, .nav-tabs-custom > .nav-tabs > li.active:hover > a {
|
||||
border-left-color: #30383f;
|
||||
border-right-color: #30383f;
|
||||
background-color: #272c30;
|
||||
color: #bec5cb;
|
||||
}
|
||||
.nav-tabs-custom > .nav-tabs {
|
||||
background-color: #353c42;
|
||||
}
|
||||
.nav-tabs-custom .tab-content {
|
||||
background-color: #272c30;
|
||||
}
|
||||
.top_small_box_gray_text {
|
||||
color: white !important;
|
||||
}
|
||||
|
||||
/* remove white border that appears on mobile screen sizes */
|
||||
.box-body {
|
||||
border: 0px;
|
||||
}
|
||||
/* remove white border that appears on mobile screen sizes */
|
||||
.table-responsive {
|
||||
border: 0px;
|
||||
}
|
||||
|
||||
.login-page {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.login-logo a {
|
||||
color: white;
|
||||
}
|
||||
|
||||
.login-box-body {
|
||||
color: #bec5cb;
|
||||
background-color: #272c30;
|
||||
}
|
||||
/* Add border radius to bottom of the status boxes*/
|
||||
.pa-small-box-footer {
|
||||
border-bottom-left-radius: 10px;
|
||||
border-bottom-right-radius: 10px;
|
||||
}
|
||||
|
||||
.small-box > .inner h3, .small-box > .inner p {
|
||||
margin-bottom: 0px;
|
||||
margin-left: 0px;
|
||||
}
|
||||
.small-box:hover .icon {
|
||||
font-size: 3.74em;
|
||||
}
|
||||
.small-box .icon {
|
||||
top: 0.01em;
|
||||
font-size: 3.25em;
|
||||
}
|
||||