Compare commits

...

155 Commits

Author SHA1 Message Date
jokob-sk
bdf6e62ea6 MKDocs
Some checks failed
docker / docker_dev (push) Has been cancelled
Deploy MkDocs / deploy (push) Has been cancelled
2025-02-10 17:26:03 +11:00
jokob-sk
eb693bfdb2 MKDocs 2025-02-10 17:22:28 +11:00
jokob-sk
cc5c4a6f06 MKDocs 2025-02-10 16:53:06 +11:00
Jokob @NetAlertX
ba27769fbd Update README.md
Some checks are pending
docker / docker_dev (push) Waiting to run
Deploy MkDocs / deploy (push) Waiting to run
2025-02-09 12:35:26 +11:00
jokob-sk
b6c6579cb5 MKDocs 2025-02-09 12:26:57 +11:00
jokob-sk
c6adaf99f4 MKDocs 2025-02-09 12:01:02 +11:00
jokob-sk
f793dec6c5 MKDocs 2025-02-09 11:05:52 +11:00
Jokob @NetAlertX
e840320e19 Update setup-help.yml 2025-02-09 11:02:16 +11:00
jokob-sk
0fe903e076 MKDocs 2025-02-09 10:57:02 +11:00
jokob-sk
cd8124a912 MKDocs
Some checks are pending
docker / docker_dev (push) Waiting to run
Deploy MkDocs / deploy (push) Waiting to run
2025-02-09 08:31:54 +11:00
jokob-sk
7867700856 MKDocs 2025-02-09 07:59:26 +11:00
jokob-sk
3be39f6508 MKDocs 2025-02-09 07:50:34 +11:00
jokob-sk
b69b76aa9f Merge branch 'main' of https://github.com/jokob-sk/NetAlertX 2025-02-09 07:46:16 +11:00
jokob-sk
8b7431eae9 MKDocs 2025-02-09 07:46:11 +11:00
Максим Горпиніч
079a1b3954 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (754 of 754 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/uk/
2025-02-08 19:23:07 +01:00
Massimo Pissarello
ef8bfbb59e Translated using Weblate (Italian)
Currently translated at 100.0% (754 of 754 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/it/
2025-02-08 19:23:07 +01:00
Sylvain Pichon
c30d98dd77 Translated using Weblate (French)
Currently translated at 100.0% (754 of 754 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/fr/
2025-02-08 19:23:07 +01:00
jokob-sk
57ccdf0b0c Fix social workflow 2025-02-08 11:58:02 +11:00
Hosted Weblate
703ba5c75b Merge branch 'origin/main' into Weblate.
Some checks are pending
docker / docker_dev (push) Waiting to run
2025-02-08 00:54:10 +01:00
Anonymous
aad74451ef Translated using Weblate (Polish)
Currently translated at 88.0% (663 of 753 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/pl/
2025-02-08 00:54:08 +01:00
Anonymous
a787510963 Translated using Weblate (Portuguese (Brazil))
Currently translated at 32.9% (248 of 753 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/pt_BR/
2025-02-08 00:54:07 +01:00
jokob-sk
dd2b872712 Cron Schedule validation 2025-02-08 10:53:43 +11:00
jokob-sk
2a5e419034 Better dummy newdev MAC check 2025-02-08 08:17:37 +11:00
jokob-sk
b921144dbb treeviz flatdata experiment + better invalid TZ handling
Some checks are pending
docker / docker_dev (push) Waiting to run
2025-02-08 08:01:05 +11:00
jokob-sk
4f2ddccdde Merge branch 'main' of https://github.com/jokob-sk/NetAlertX 2025-02-08 08:00:05 +11:00
jokob-sk
780b818815 treeviz flatdata experiment + better invalid TZ handling 2025-02-08 07:59:55 +11:00
jokob-sk
5779fd34c5 treeviz flatdata experiment + better invalid TZ handling 2025-02-08 07:52:13 +11:00
Safeguard
b7a6fe9112 Translated using Weblate (Russian)
Some checks are pending
docker / docker_dev (push) Waiting to run
Currently translated at 100.0% (753 of 753 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/ru/
2025-02-07 00:52:35 +01:00
Максим Горпиніч
906bfd24a4 Translated using Weblate (Ukrainian)
Some checks failed
docker / docker_dev (push) Has been cancelled
Currently translated at 100.0% (753 of 753 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/uk/
2025-02-02 07:03:04 +01:00
Massimo Pissarello
8f48172940 Translated using Weblate (Italian)
Currently translated at 100.0% (753 of 753 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/it/
2025-02-02 07:03:03 +01:00
Sylvain Pichon
736304eb8a Translated using Weblate (French)
Currently translated at 100.0% (753 of 753 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/fr/
2025-02-02 07:03:02 +01:00
Anonymous
5fce3c79b0 Translated using Weblate (Ukrainian)
Some checks are pending
docker / docker_dev (push) Waiting to run
Currently translated at 99.8% (752 of 753 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/uk/
2025-02-01 06:14:17 +01:00
Anonymous
81c1f65816 Translated using Weblate (Catalan)
Currently translated at 99.8% (752 of 753 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/ca/
2025-02-01 06:14:17 +01:00
Anonymous
edfaadf682 Translated using Weblate (Turkish)
Currently translated at 22.0% (166 of 753 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/tr/
2025-02-01 06:14:17 +01:00
Anonymous
0a51d5fe79 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 87.9% (662 of 753 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/zh_Hans/
2025-02-01 06:14:17 +01:00
Anonymous
893063c695 Translated using Weblate (Polish)
Currently translated at 88.4% (666 of 753 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/pl/
2025-02-01 06:14:17 +01:00
Anonymous
da5cf4a8f1 Translated using Weblate (Portuguese (Brazil))
Currently translated at 32.5% (245 of 753 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/pt_BR/
2025-02-01 06:14:17 +01:00
Anonymous
1e5a4e96e4 Translated using Weblate (Italian)
Currently translated at 99.8% (752 of 753 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/it/
2025-02-01 06:14:16 +01:00
Anonymous
74d7a7853a Translated using Weblate (Russian)
Currently translated at 99.7% (751 of 753 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/ru/
2025-02-01 06:14:16 +01:00
Anonymous
63469007ef Translated using Weblate (Norwegian Bokmål)
Currently translated at 87.6% (660 of 753 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/nb_NO/
2025-02-01 06:14:16 +01:00
Anonymous
f5b875e2df Translated using Weblate (French)
Currently translated at 99.8% (752 of 753 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/fr/
2025-02-01 06:14:16 +01:00
Anonymous
d18efb2103 Translated using Weblate (Spanish)
Currently translated at 96.5% (727 of 753 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/es/
2025-02-01 06:14:15 +01:00
Anonymous
e2cdce2f39 Translated using Weblate (German)
Currently translated at 89.3% (673 of 753 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/de/
2025-02-01 06:14:15 +01:00
jokob-sk
c855d50999 docs + sorting #983
Some checks are pending
docker / docker_dev (push) Waiting to run
2025-02-01 13:07:46 +11:00
jokob-sk
9d8b147e40 Merge branch 'main' of https://github.com/jokob-sk/NetAlertX
Some checks are pending
docker / docker_dev (push) Waiting to run
2025-01-31 07:04:19 +11:00
jokob-sk
3aa9be7019 docs #982 2025-01-31 07:04:15 +11:00
Hosted Weblate
72b3d5eb6d Merge branch 'origin/main' into Weblate.
Some checks failed
docker / docker_dev (push) Has been cancelled
2025-01-26 23:36:17 +00:00
anton garcias
83bc406ed6 Translated using Weblate (Catalan)
Currently translated at 100.0% (753 of 753 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/ca/
2025-01-26 23:36:16 +00:00
jokob-sk
e6e1c79d6a docs 2025-01-27 10:35:57 +11:00
Jokob @NetAlertX
e0616f72fe Merge pull request #981 from vladaurosh/main
Update default PUID and PGID, and update documentation
2025-01-27 09:20:28 +11:00
vladaurosh
696403ac20 Update FILE_PERMISSIONS.md 2025-01-26 21:57:54 +00:00
vladaurosh
c946a5335a Update README.md 2025-01-26 18:18:04 +00:00
vladaurosh
9610810891 Set uid/gid to previous default 102/82 2025-01-26 17:33:30 +00:00
Jokob @NetAlertX
2ad7f02255 Merge pull request #980 from vladaurosh/main
Some checks are pending
docker / docker_dev (push) Waiting to run
Adding option to set user ID and GID
2025-01-26 13:40:13 +11:00
root
431543ba80 adding option to set user ID and GID 2025-01-26 01:46:38 +00:00
jokob-sk
09d2e68479 Undiscoverables - UNDIS removal #979
Some checks are pending
docker / docker_dev (push) Waiting to run
2025-01-26 10:23:21 +11:00
jokob-sk
896b8b7641 Merge branch 'main' of https://github.com/jokob-sk/NetAlertX 2025-01-26 10:21:01 +11:00
jokob-sk
8d607aac96 css fixes, docs 2025-01-26 10:20:46 +11:00
Максим Горпиніч
c95a371ad9 Translated using Weblate (Ukrainian)
Some checks are pending
docker / docker_dev (push) Waiting to run
Currently translated at 100.0% (753 of 753 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/uk/
2025-01-25 13:02:18 +01:00
Sylvain Pichon
4b3ff048dc Translated using Weblate (French)
Currently translated at 100.0% (753 of 753 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/fr/
2025-01-25 13:02:17 +01:00
Massimo Pissarello
3267762280 Translated using Weblate (Italian)
Some checks are pending
docker / docker_dev (push) Waiting to run
Currently translated at 100.0% (753 of 753 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/it/
2025-01-25 06:31:12 +01:00
Hosted Weblate
885a470585 Merge branch 'origin/main' into Weblate. 2025-01-25 00:37:31 +00:00
Safeguard
d0f4faca51 Translated using Weblate (Russian)
Currently translated at 100.0% (752 of 752 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/ru/
2025-01-25 00:37:30 +00:00
jokob-sk
4443c69d31 Filters UI_columns_filters #953 2025-01-25 11:37:05 +11:00
Jokob @NetAlertX
890e533969 Merge pull request #976 from cvc90/NetAlertX-Changing-absolute-path-url-to-relative-path-url-in-common.js-file
Some checks are pending
docker / docker_dev (push) Waiting to run
Changed the "absolute URL" target to "relative URL" in common.js
2025-01-25 07:51:51 +11:00
Carlos V.
d7b9bb447f Update common.js
Change absolute path url /php/server/query_json.php to relative path url php/server/query_json.php
2025-01-24 17:17:52 +01:00
jokob-sk
c63f424c7d LOADED_PLUGINS docker variable #975
Some checks are pending
docker / docker_dev (push) Waiting to run
2025-01-24 20:05:42 +11:00
jokob-sk
dd1580e536 asus and logging #972 2025-01-24 18:58:10 +11:00
jokob-sk
630e4f6327 asus DHCPLSS guide #963
Some checks failed
docker / docker_dev (push) Has been cancelled
2025-01-22 08:37:55 +11:00
Jokob @NetAlertX
cb8af32553 Merge pull request #970 from labmonkey/asuswrt-import
Some checks are pending
docker / docker_dev (push) Waiting to run
[ASUSWRT] Added router port to configurtation
2025-01-21 06:43:42 +11:00
jokob-sk
d469a9ded4 Merge branch 'main' of https://github.com/jokob-sk/NetAlertX
Some checks are pending
docker / docker_dev (push) Waiting to run
2025-01-20 23:42:48 +11:00
jokob-sk
c8a40920b4 cleanup, faster devices screen update #967 #923 2025-01-20 23:42:24 +11:00
Максим Горпиніч
b0cd9acb79 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (752 of 752 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/uk/
2025-01-20 08:35:13 +01:00
Anonymous
6129f31a24 Translated using Weblate (Polish)
Some checks are pending
docker / docker_dev (push) Waiting to run
Currently translated at 88.6% (667 of 752 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/pl/
2025-01-20 06:17:17 +01:00
Massimo Pissarello
3eb8f39b5c Translated using Weblate (Italian)
Currently translated at 100.0% (752 of 752 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/it/
2025-01-20 06:17:17 +01:00
jokob-sk
5b1002620b cleanup, css, rebase to alpine 3.21 #968 2025-01-20 14:55:26 +11:00
Pawel Derehajlo
e50d757f57 [ASUSWRT] Added router port to configurtation 2025-01-20 02:07:47 +01:00
Jokob @NetAlertX
5110a3c2f3 Merge pull request #966 from vladaurosh/main
Using busybox crond instead of dcron, starting it with s6
2025-01-20 11:47:14 +11:00
root
abf7be5958 adding new line for pem file 2025-01-19 22:23:52 +00:00
root
82708bd5df Fixing path to cert file 2025-01-19 22:19:00 +00:00
root
b5dce3f6aa Fixing crond issues #945 and #965 2025-01-19 22:11:32 +00:00
jokob-sk
5562ae7add docs + wf
Some checks are pending
docker / docker_dev (push) Waiting to run
2025-01-19 23:19:26 +11:00
jokob-sk
4363e083d5 prevent 401 in ingress #961 2025-01-19 16:05:58 +11:00
jokob-sk
e766b19d8c css, pluginsCore, less verbose debug fixes
Some checks are pending
docker / docker_dev (push) Waiting to run
2025-01-19 15:05:26 +11:00
jokob-sk
b18ee70b8a Merge branch 'main' of https://github.com/jokob-sk/NetAlertX 2025-01-19 13:41:52 +11:00
jokob-sk
f70bb40ef4 INTERNET ip check curl #937 2025-01-19 13:41:48 +11:00
Hosted Weblate
844a408ff4 Merge branch 'origin/main' into Weblate. 2025-01-19 01:56:31 +00:00
Максим Горпиніч
a21cc0db85 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (751 of 751 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/uk/
2025-01-19 01:56:30 +00:00
Sylvain Pichon
a5427f795b Translated using Weblate (French)
Currently translated at 99.3% (746 of 751 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/fr/
2025-01-19 01:56:29 +00:00
jokob-sk
6b390b66de report cleanup + #960 2025-01-19 12:56:00 +11:00
jokob-sk
af1e9b921b Merge branch 'main' of https://github.com/jokob-sk/NetAlertX
Some checks are pending
docker / docker_dev (push) Waiting to run
2025-01-18 10:07:13 +11:00
jokob-sk
9503cc6397 HA addon ingress #960 2025-01-18 10:07:03 +11:00
Jokob @NetAlertX
a16c2dfed6 Update README.md
Some checks failed
docker / docker_dev (push) Has been cancelled
2025-01-16 22:53:25 +11:00
Jokob @NetAlertX
b4fc05d1e8 Merge pull request #958 from labmonkey/asuswrt-import
Added AsusWRT device import plugin
2025-01-16 22:47:09 +11:00
labmonkey
adb99e5f1a Revert leftover code 2025-01-16 03:41:26 +01:00
Pawel Derehajlo
fbce3e18c2 Added AsusWRT device import plugin 2025-01-16 03:37:37 +01:00
anton garcias
0fcda5ff0a Translated using Weblate (Catalan)
Some checks are pending
docker / docker_dev (push) Waiting to run
Currently translated at 100.0% (751 of 751 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/ca/
2025-01-15 15:13:13 +01:00
jokob-sk
a5c6510654 less verbose AVAHISCAN logs
Some checks are pending
docker / docker_dev (push) Waiting to run
2025-01-15 12:39:03 +11:00
jokob-sk
6d44ed1bba Merge branch 'main' of https://github.com/jokob-sk/NetAlertX
Some checks are pending
docker / docker_dev (push) Waiting to run
2025-01-14 13:28:38 +11:00
jokob-sk
314372a0f2 server time format #954 2025-01-14 13:28:34 +11:00
Sylvain Pichon
5a84cb5cc2 Translated using Weblate (French)
Some checks are pending
docker / docker_dev (push) Waiting to run
Currently translated at 98.0% (736 of 751 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/fr/
2025-01-13 16:58:25 +01:00
jokob-sk
12cc71552c #951, small fixes
Some checks are pending
docker / docker_dev (push) Waiting to run
2025-01-13 08:16:20 +11:00
jokob-sk
6752b7fc40 gpc.json #952 2025-01-13 07:54:44 +11:00
jokob-sk
f371515258 issue template
Some checks are pending
docker / docker_dev (push) Waiting to run
2025-01-12 21:21:08 +11:00
jokob-sk
f1d73f6ad4 Merge branch 'main' of https://github.com/jokob-sk/NetAlertX 2025-01-12 21:18:50 +11:00
jokob-sk
9fee846436 HA addon docs 2025-01-12 21:18:44 +11:00
Massimo Pissarello
b4ebd640e5 Translated using Weblate (Italian)
Some checks are pending
docker / docker_dev (push) Waiting to run
Currently translated at 100.0% (751 of 751 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/it/
2025-01-12 08:22:16 +01:00
jokob-sk
e94953b9af Merge branch 'main' of https://github.com/jokob-sk/NetAlertX
Some checks are pending
docker / docker_dev (push) Waiting to run
2025-01-12 11:46:35 +11:00
jokob-sk
6718d054dc #951, small fixes 2025-01-12 11:46:32 +11:00
anton garcias
88e4dbf12e Translated using Weblate (Catalan)
Some checks are pending
docker / docker_dev (push) Waiting to run
Currently translated at 100.0% (751 of 751 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/ca/
2025-01-11 13:09:29 +01:00
Anonymous
9f1db5ca1a Translated using Weblate (Portuguese (Brazil))
Currently translated at 32.7% (246 of 751 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/pt_BR/
2025-01-11 10:47:32 +01:00
jokob-sk
5e7bb207c8 Merge branch 'main' of https://github.com/jokob-sk/NetAlertX 2025-01-11 20:20:30 +11:00
jokob-sk
6ad90610ea Docs, small fixes 2025-01-11 20:20:09 +11:00
Anonymous
c8ff0d79d1 Translated using Weblate (Ukrainian)
Some checks are pending
docker / docker_dev (push) Waiting to run
Currently translated at 97.7% (734 of 751 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/uk/
2025-01-11 04:36:15 +01:00
Anonymous
61cf87f0d6 Translated using Weblate (Catalan)
Currently translated at 98.1% (737 of 751 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/ca/
2025-01-11 04:36:14 +01:00
Anonymous
75bbc8bcf3 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 88.2% (663 of 751 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/zh_Hans/
2025-01-11 04:36:14 +01:00
Anonymous
5582c0bf5e Translated using Weblate (Polish)
Currently translated at 88.9% (668 of 751 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/pl/
2025-01-11 04:36:14 +01:00
Anonymous
8278a92b11 Translated using Weblate (Italian)
Currently translated at 98.2% (738 of 751 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/it/
2025-01-11 04:36:14 +01:00
Anonymous
d5ac00a307 Translated using Weblate (Russian)
Currently translated at 98.2% (738 of 751 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/ru/
2025-01-11 04:36:13 +01:00
Anonymous
2b02596b17 Translated using Weblate (Norwegian Bokmål)
Currently translated at 88.0% (661 of 751 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/nb_NO/
2025-01-11 04:36:13 +01:00
Anonymous
2a736f3c19 Translated using Weblate (French)
Currently translated at 97.7% (734 of 751 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/fr/
2025-01-11 04:36:13 +01:00
Anonymous
0b5c0b198a Translated using Weblate (Spanish)
Currently translated at 96.9% (728 of 751 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/es/
2025-01-11 04:36:12 +01:00
Anonymous
2d0a461724 Translated using Weblate (German)
Currently translated at 89.7% (674 of 751 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/de/
2025-01-11 04:36:12 +01:00
jokob-sk
74c6faccc7 Merge branch 'main' of https://github.com/jokob-sk/NetAlertX
Some checks are pending
docker / docker_dev (push) Waiting to run
2025-01-11 11:29:17 +11:00
jokob-sk
89a154e224 Docs 2025-01-11 11:29:02 +11:00
Hosted Weblate
8b84e4b325 Merge branch 'origin/main' into Weblate. 2025-01-11 01:24:14 +01:00
Massimo Pissarello
e55002a9b0 Translated using Weblate (Italian)
Currently translated at 100.0% (745 of 745 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/it/
2025-01-11 01:24:12 +01:00
jokob-sk
b4e741568b Extending Maintenance w/ app.conf (im/ex)port 2025-01-11 11:23:32 +11:00
jokob-sk
711e0012cb sort by port #949 2025-01-11 07:54:51 +11:00
jokob-sk
ea2e8459b5 sort by port #949 2025-01-11 07:51:43 +11:00
jokob-sk
16d06e8a74 Merge branch 'main' of https://github.com/jokob-sk/NetAlertX
Some checks failed
docker / docker_dev (push) Has been cancelled
2025-01-10 07:49:04 +11:00
jokob-sk
9625c36d12 devStaticIp to multi edit #947 2025-01-10 07:48:35 +11:00
Safeguard
f47858d773 Translated using Weblate (Russian)
Some checks are pending
docker / docker_dev (push) Waiting to run
Currently translated at 100.0% (745 of 745 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/ru/
2025-01-09 15:53:40 +01:00
jokob-sk
ac2ce85f33 Merge branch 'main' of https://github.com/jokob-sk/NetAlertX 2025-01-09 22:16:08 +11:00
jokob-sk
e887a11755 docs, cleanup 2025-01-09 22:15:58 +11:00
Anonymous
73f432c786 Translated using Weblate (Ukrainian)
Some checks are pending
docker / docker_dev (push) Waiting to run
Currently translated at 99.3% (740 of 745 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/uk/
2025-01-09 08:26:03 +01:00
Anonymous
9c95a79e07 Translated using Weblate (Catalan)
Currently translated at 99.8% (744 of 745 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/ca/
2025-01-09 08:26:03 +01:00
Anonymous
f0bbd37812 Translated using Weblate (Portuguese (Brazil))
Currently translated at 33.0% (246 of 745 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/pt_BR/
2025-01-09 08:26:03 +01:00
Anonymous
7b0777b805 Translated using Weblate (Italian)
Currently translated at 99.8% (744 of 745 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/it/
2025-01-09 08:26:03 +01:00
Safeguard
b8dce59138 Translated using Weblate (Russian)
Currently translated at 99.5% (742 of 745 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/ru/
2025-01-09 08:26:03 +01:00
Anonymous
f1d79074ec Translated using Weblate (Russian)
Currently translated at 99.5% (742 of 745 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/ru/
2025-01-09 08:26:03 +01:00
Anonymous
4156bc1669 Translated using Weblate (French)
Currently translated at 99.3% (740 of 745 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/fr/
2025-01-09 08:26:02 +01:00
Anonymous
00c4dd86c6 Translated using Weblate (Spanish)
Currently translated at 98.5% (734 of 745 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/es/
2025-01-09 08:26:02 +01:00
Anonymous
979ce8fd75 Translated using Weblate (German)
Currently translated at 91.2% (680 of 745 strings)

Translation: NetAlertX/core
Translate-URL: https://hosted.weblate.org/projects/pialert/core/de/
2025-01-09 08:26:02 +01:00
jokob-sk
ede926beee docs, cleanup 2025-01-09 14:41:56 +11:00
jokob-sk
e1f91ddf17 docs, social posts, s6 setup improvements #945 2025-01-09 14:22:39 +11:00
jokob-sk
e9539962c9 cron s6 rollback #945
Some checks are pending
docker / docker_dev (push) Waiting to run
2025-01-09 09:23:29 +11:00
jokob-sk
87d18a9067 Merge branch 'main' of https://github.com/jokob-sk/NetAlertX 2025-01-09 08:35:14 +11:00
jokob-sk
2302cd9a31 s6 setup improvements #945 2025-01-09 08:35:09 +11:00
jokob-sk
babe0eab53 Merge pull request #944 from kpolszewski/mtscan-readme-update
better readme for the MikroTik plugin
2025-01-09 08:16:22 +11:00
kpolszewski
7c878690ef better readme for the MikroTik plugin 2025-01-08 19:15:32 +01:00
jokob-sk
b29dcbfa98 CHECKMK script
Some checks failed
docker / docker_dev (push) Waiting to run
🤖Automation - Update Sponsors Table / update-table (push) Has been cancelled
2025-01-08 23:32:14 +11:00
jokob-sk
8d9c48166b Merge branch 'main' of https://github.com/jokob-sk/NetAlertX 2025-01-08 23:00:07 +11:00
jokob-sk
540f8e850b DUMMY as new device source plugin 2025-01-08 23:00:03 +11:00
github-actions[bot]
8316d8e741 [🤖Automation] Update README with sponsors information 2025-01-08 11:53:43 +00:00
193 changed files with 9090 additions and 3592 deletions

View File

@@ -46,7 +46,7 @@ body:
- type: checkboxes - type: checkboxes
attributes: attributes:
label: Can I help implement this? 👩‍💻👨‍💻 label: Can I help implement this? 👩‍💻👨‍💻
description: The maintainer will provide guidance and help. The implementer will read the PR guidelines https://github.com/jokob-sk/NetAlertX/tree/main/docs#-pull-requests-prs description: The maintainer will provide guidance and help. The implementer will read the PR guidelines https://jokob-sk.github.io/NetAlertX/DEV_ENV_SETUP/
options: options:
- label: "Yes" - label: "Yes"
- label: "No" - label: "No"

View File

@@ -7,7 +7,7 @@ body:
label: Is there an existing issue for this? label: Is there an existing issue for this?
description: Please search to see if an open or closed issue already exists for the bug you encountered. description: Please search to see if an open or closed issue already exists for the bug you encountered.
options: options:
- label: I have searched the existing open and closed issues and I checked the docs https://github.com/jokob-sk/NetAlertX/tree/main/docs - label: I have searched the existing open and closed issues and I checked the docs https://jokob-sk.github.io/NetAlertX/
required: true required: true
- type: checkboxes - type: checkboxes
attributes: attributes:
@@ -60,10 +60,11 @@ body:
required: false required: false
- type: dropdown - type: dropdown
attributes: attributes:
label: What branch are you running? label: What installation are you running?
options: options:
- Production - Production (netalertx)
- Dev - Dev (netalertx-dev)
- Home Assistant (addon)
validations: validations:
required: true required: true
- type: textarea - type: textarea

72
.github/ISSUE_TEMPLATE/setup-help.yml vendored Executable file
View File

@@ -0,0 +1,72 @@
name: Setup help
description: 'When submitting an issue enable LOG_LEVEL="trace" and re-search first.'
labels: ['Setup 📥']
body:
- type: checkboxes
attributes:
label: Did I research?
description: Please confirm you checked the usual places before opening a setup support request.
options:
- label: I have searched the docs https://jokob-sk.github.io/NetAlertX/
required: true
- label: I have searched the existing open and closed issues
required: true
- label: I confirm my SCAN_SUBNETS is configured and tested as per https://github.com/jokob-sk/NetAlertX/blob/main/docs/SUBNETS.md
required: true
- type: checkboxes
attributes:
label: The issue occurs in the following browsers. Select at least 2.
description: This step helps me understand if this is a cache or browser-specific issue.
options:
- label: "Firefox"
- label: "Chrome"
- label: "Other (unsupported) - PRs welcome"
- label: "N/A - This is an issue with the backend"
- type: textarea
attributes:
label: What I want to do
description: Describe what you want to achieve.
validations:
required: false
- type: textarea
attributes:
label: Relevant settings you changed
description: |
Paste a screenshot or setting values of the settings you changed.
validations:
required: false
- type: textarea
attributes:
label: docker-compose.yml
description: |
Paste your `docker-compose.yml`
render: python
validations:
required: false
- type: dropdown
attributes:
label: What installation are you running?
options:
- Production (netalertx)
- Dev (netalertx-dev)
- Home Assistant (addon)
validations:
required: true
- type: textarea
attributes:
label: app.log
description: |
Logs with debug enabled (https://github.com/jokob-sk/NetAlertX/blob/main/docs/DEBUG_TIPS.md) ⚠
***Generally speaking, all bug reports should have logs provided.***
Tip: You can attach images or log files by clicking this area to highlight it and then dragging files in.
Additionally, any additional info? Screenshots? References? Anything that will give us more context about the issue you are encountering!
You can use `tail -100 /app/log/app.log` in the container if you have trouble getting to the log files.
validations:
required: false
- type: checkboxes
attributes:
label: Debug enabled
description: I confirm I enabled `debug`
options:
- label: I have read and followed the steps in the wiki link above and provided the required debug logs and the log section covers the time when the issue occurs.
required: true

25
.github/workflows/mkdocs.yml vendored Executable file
View File

@@ -0,0 +1,25 @@
name: Deploy MkDocs
on:
push:
branches:
- main # Change if your default branch is different
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.9'
- name: Install MkDocs
run: |
pip install mkdocs mkdocs-material && pip install mkdocs-github-admonitions-plugin
- name: Deploy MkDocs
run: mkdocs gh-deploy --force

43
.github/workflows/social_post_on_release.yml vendored Executable file
View File

@@ -0,0 +1,43 @@
name: 📧 Twitter and Discord Posts
on:
release:
types: [published]
jobs:
post-discord:
runs-on: ubuntu-latest
steps:
- name: Wait for 15 minutes
run: sleep 900 # 15 minutes delay
- name: Post to Discord
run: |
curl -X POST -H "Content-Type: application/json" \
-d '{"content": "🎉 New release: **${{ github.event.release.name }}** is live! 🚀\nCheck it out here: ${{ github.event.release.html_url }}"}' \
${{ secrets.DISCORD_WEBHOOK_URL }}
post-twitter:
runs-on: ubuntu-latest
steps:
- name: Wait for 15 minutes
run: sleep 900 # 15 minutes delay
- name: Checkout repository
uses: actions/checkout@v3
- name: Create tweet file
run: |
echo "🎉 New release: **${{ github.event.release.name }}** is live! 🚀" > .github/tweet.md
echo "Check it out here: ${{ github.event.release.html_url }}" >> .github/tweet.md
git add .github/tweet.md
git commit -m "Add release tweet for ${{ github.event.release.name }}"
git push
- name: Tweet
uses: twitter-together/action@v3
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
TWITTER_ACCESS_TOKEN: ${{ secrets.TWITTER_ACCESS_TOKEN }}
TWITTER_ACCESS_TOKEN_SECRET: ${{ secrets.TWITTER_ACCESS_TOKEN_SECRET }}
TWITTER_API_KEY: ${{ secrets.TWITTER_API_KEY }}
TWITTER_API_SECRET_KEY: ${{ secrets.TWITTER_API_SECRET_KEY }}

View File

@@ -1,29 +0,0 @@
name: 🤖Automation - Update Sponsors Table
on:
schedule:
- cron: '50 11 * * *' # Set your preferred schedule (UTC)
jobs:
update-table:
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: 3.8
- name: Install Dependencies
run: |
python -m pip install --upgrade pip
pip install -r update_sponsors_requirements.txt # If you have any Python dependencies
- name: Update Sponsors Table
run: |
python update_sponsors.py
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@@ -1,11 +1,11 @@
FROM alpine:3.20 AS builder FROM alpine:3.21 AS builder
ARG INSTALL_DIR=/app ARG INSTALL_DIR=/app
ENV PYTHONUNBUFFERED=1 ENV PYTHONUNBUFFERED=1
# Install build dependencies # Install build dependencies
RUN apk add --no-cache bash python3 python3-dev gcc musl-dev libffi-dev openssl-dev git\ RUN apk add --no-cache bash shadow python3 python3-dev gcc musl-dev libffi-dev openssl-dev git \
&& python -m venv /opt/venv && python -m venv /opt/venv
# Enable venv # Enable venv
@@ -13,34 +13,21 @@ ENV PATH="/opt/venv/bin:$PATH"
COPY . ${INSTALL_DIR}/ COPY . ${INSTALL_DIR}/
RUN pip install openwrt-luci-rpc asusrouter asyncio aiohttp graphene flask tplink-omada-client wakeonlan pycryptodome requests paho-mqtt scapy cron-converter pytz json2table dhcp-leases pyunifi speedtest-cli chardet python-nmap dnspython librouteros git+https://github.com/foreign-sub/aiofreepybox.git \
RUN pip install openwrt-luci-rpc graphene flask netifaces tplink-omada-client wakeonlan pycryptodome requests paho-mqtt scapy cron-converter pytz json2table dhcp-leases pyunifi speedtest-cli chardet python-nmap dnspython librouteros git+https://github.com/foreign-sub/aiofreepybox.git \
&& bash -c "find ${INSTALL_DIR} -type d -exec chmod 750 {} \;" \ && bash -c "find ${INSTALL_DIR} -type d -exec chmod 750 {} \;" \
&& bash -c "find ${INSTALL_DIR} -type f -exec chmod 640 {} \;" \ && bash -c "find ${INSTALL_DIR} -type f -exec chmod 640 {} \;" \
&& bash -c "find ${INSTALL_DIR} -type f \( -name '*.sh' -o -name '*.py' -o -name 'speedtest-cli' \) -exec chmod 750 {} \;" && bash -c "find ${INSTALL_DIR} -type f \( -name '*.sh' -o -name '*.py' -o -name 'speedtest-cli' \) -exec chmod 750 {} \;"
# Append Iliadbox certificate to aiofreepybox # Append Iliadbox certificate to aiofreepybox
RUN printf "\n-----BEGIN CERTIFICATE-----\n\ RUN cat ${INSTALL_DIR}/install/freebox_certificate.pem >> /opt/venv/lib/python3.12/site-packages/aiofreepybox/freebox_certificates.pem
MIICOjCCAcCgAwIBAgIUI0Tu7zsrBJACQIZgLMJobtbdNn4wCgYIKoZIzj0EAwIw\n\
TDELMAkGA1UEBhMCSVQxDjAMBgNVBAgMBUl0YWx5MQ4wDAYDVQQKDAVJbGlhZDEd\n\
MBsGA1UEAwwUSWxpYWRib3ggRUNDIFJvb3QgQ0EwHhcNMjAxMTI3MDkzODEzWhcN\n\
NDAxMTIyMDkzODEzWjBMMQswCQYDVQQGEwJJVDEOMAwGA1UECAwFSXRhbHkxDjAM\n\
BgNVBAoMBUlsaWFkMR0wGwYDVQQDDBRJbGlhZGJveCBFQ0MgUm9vdCBDQTB2MBAG\n\
ByqGSM49AgEGBSuBBAAiA2IABMryJyb2loHNAioY8IztN5MI3UgbVHVP/vZwcnre\n\
ZvJOyDvE4HJgIti5qmfswlnMzpNbwf/MkT+7HAU8jJoTorRm1wtAnQ9cWD3Ebv79\n\
RPwtjjy3Bza3SgdVxmd6fWPUKaNjMGEwHQYDVR0OBBYEFDUij/4lpoJ+kOXRyrcM\n\
jf2RPzOqMB8GA1UdIwQYMBaAFDUij/4lpoJ+kOXRyrcMjf2RPzOqMA8GA1UdEwEB\n\
/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2gAMGUCMQC6eUV1\n\
pFh4UpJOTc1JToztN4ttnQR6rIzxMZ6mNCe+nhjkohWp24pr7BpUYSbEizYCMAQ6\n\
LCiBKV2j7QQGy7N1aBmdur17ZepYzR1YV0eI+Kd978aZggsmhjXENQYVTmm/XA==\n\
-----END CERTIFICATE-----\n" >> /opt/venv/lib/python3.12/site-packages/aiofreepybox/freebox_certificates.pem
# second stage # second stage
FROM alpine:3.20 AS runner FROM alpine:3.21 AS runner
ARG INSTALL_DIR=/app ARG INSTALL_DIR=/app
COPY --from=builder /opt/venv /opt/venv COPY --from=builder /opt/venv /opt/venv
COPY --from=builder /usr/sbin/usermod /usr/sbin/groupmod /usr/sbin/
# Enable venv # Enable venv
ENV PATH="/opt/venv/bin:$PATH" ENV PATH="/opt/venv/bin:$PATH"
@@ -54,11 +41,10 @@ ENV S6_CMD_WAIT_FOR_SERVICES_MAXTIME=0
# ❗ IMPORTANT - if you modify this file modify the /install/install_dependecies.sh file as well ❗ # ❗ IMPORTANT - if you modify this file modify the /install/install_dependecies.sh file as well ❗
RUN apk update --no-cache \ RUN apk update --no-cache \
&& apk add --no-cache bash zip lsblk gettext-envsubst sudo mtr tzdata s6-overlay \ && apk add --no-cache bash libbsd zip lsblk gettext-envsubst sudo mtr tzdata s6-overlay \
&& apk add --no-cache curl arp-scan iproute2 iproute2-ss nmap nmap-scripts traceroute nbtscan avahi avahi-tools openrc dbus net-tools net-snmp-tools bind-tools awake ca-certificates \ && apk add --no-cache curl arp-scan iproute2 iproute2-ss nmap nmap-scripts traceroute nbtscan avahi avahi-tools openrc dbus net-tools net-snmp-tools bind-tools awake ca-certificates \
&& apk add --no-cache sqlite php83 php83-fpm php83-cgi php83-curl php83-sqlite3 php83-session \ && apk add --no-cache sqlite php83 php83-fpm php83-cgi php83-curl php83-sqlite3 php83-session \
&& apk add --no-cache python3 nginx \ && apk add --no-cache python3 nginx \
&& apk add --no-cache dcron \
&& ln -s /usr/bin/awake /usr/bin/wakeonlan \ && ln -s /usr/bin/awake /usr/bin/wakeonlan \
&& bash -c "install -d -m 750 -o nginx -g www-data ${INSTALL_DIR} ${INSTALL_DIR}" \ && bash -c "install -d -m 750 -o nginx -g www-data ${INSTALL_DIR} ${INSTALL_DIR}" \
&& rm -f /etc/nginx/http.d/default.conf && rm -f /etc/nginx/http.d/default.conf
@@ -66,7 +52,7 @@ RUN apk update --no-cache \
COPY --from=builder --chown=nginx:www-data ${INSTALL_DIR}/ ${INSTALL_DIR}/ COPY --from=builder --chown=nginx:www-data ${INSTALL_DIR}/ ${INSTALL_DIR}/
# Add crontab file # Add crontab file
COPY install/crontab /etc/crontabs/root COPY --chmod=600 --chown=root:root install/crontab /etc/crontabs/root
# Start all required services # Start all required services
RUN ${INSTALL_DIR}/dockerfiles/start.sh RUN ${INSTALL_DIR}/dockerfiles/start.sh

View File

@@ -43,7 +43,7 @@ RUN phpenmod -v 8.2 sqlite3
RUN apt-get install -y python3-venv RUN apt-get install -y python3-venv
RUN python3 -m venv myenv RUN python3 -m venv myenv
RUN /bin/bash -c "source myenv/bin/activate && update-alternatives --install /usr/bin/python python /usr/bin/python3 10 && pip3 install openwrt-luci-rpc graphene flask netifaces tplink-omada-client wakeonlan pycryptodome requests paho-mqtt scapy cron-converter pytz json2table dhcp-leases pyunifi speedtest-cli chardet python-nmap dnspython librouteros " RUN /bin/bash -c "source myenv/bin/activate && update-alternatives --install /usr/bin/python python /usr/bin/python3 10 && pip3 install openwrt-luci-rpc asusrouter asyncio aiohttp graphene flask tplink-omada-client wakeonlan pycryptodome requests paho-mqtt scapy cron-converter pytz json2table dhcp-leases pyunifi speedtest-cli chardet python-nmap dnspython librouteros "
# Create a buildtimestamp.txt to later check if a new version was released # Create a buildtimestamp.txt to later check if a new version was released
RUN date +%s > ${INSTALL_DIR}/front/buildtimestamp.txt RUN date +%s > ${INSTALL_DIR}/front/buildtimestamp.txt

View File

@@ -2,19 +2,18 @@
[![Docker Pulls](https://img.shields.io/docker/pulls/jokobsk/netalertx?label=Pulls&logo=docker&color=0aa8d2&logoColor=fff&style=for-the-badge)](https://hub.docker.com/r/jokobsk/netalertx) [![Docker Pulls](https://img.shields.io/docker/pulls/jokobsk/netalertx?label=Pulls&logo=docker&color=0aa8d2&logoColor=fff&style=for-the-badge)](https://hub.docker.com/r/jokobsk/netalertx)
[![GitHub Release](https://img.shields.io/github/v/release/jokob-sk/NetAlertX?color=0aa8d2&logoColor=fff&logo=GitHub&style=for-the-badge)](https://github.com/jokob-sk/NetAlertX/releases) [![GitHub Release](https://img.shields.io/github/v/release/jokob-sk/NetAlertX?color=0aa8d2&logoColor=fff&logo=GitHub&style=for-the-badge)](https://github.com/jokob-sk/NetAlertX/releases)
[![Discord](https://img.shields.io/discord/1274490466481602755?color=0aa8d2&logoColor=fff&logo=Discord&style=for-the-badge)](https://discord.gg/NczTUTWyRr) [![Discord](https://img.shields.io/discord/1274490466481602755?color=0aa8d2&logoColor=fff&logo=Discord&style=for-the-badge)](https://discord.gg/NczTUTWyRr)
[![Home Assistant](https://img.shields.io/badge/Repo-blue?logo=home-assistant&style=for-the-badge&color=0aa8d2&logoColor=fff&label=Add)](https://my.home-assistant.io/redirect/supervisor_add_addon_repository/?repository_url=https%3A%2F%2Fgithub.com%2Falexbelgium%2Fhassio-addons)
# 🖧🔍 Network scanner & notification framework # NetAlertX - Network, presence scanner and alert framework
Get visibility of what's going on on your WIFI/LAN network. Schedule scans for devices, port changes and get alerts if unknown devices or changes are found. Write your own [Plugins](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins#readme) with auto-generated UI and in-build notification system. Build out and easily maintain your network source of truth (NSoT). Get visibility of what's going on on your WIFI/LAN network and enable presence detection of important devices. Schedule scans for devices, port changes and get alerts if unknown devices or changes are found. Write your own [Plugin](https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md#readme) with auto-generated UI and in-build notification system. Build out and easily maintain your network source of truth (NSoT).
| [📑 Docker guide](https://github.com/jokob-sk/NetAlertX/blob/main/dockerfiles/README.md) | [🚀 Releases](https://github.com/jokob-sk/NetAlertX/releases) | [📚 Docs](https://github.com/jokob-sk/NetAlertX/tree/main/docs) | [🔌 Plugins](https://github.com/jokob-sk/NetAlertX/blob/main/front/plugins/README.md) | [🤖 Ask AI](https://gurubase.io/g/netalertx) | [📑 Docker guide](https://github.com/jokob-sk/NetAlertX/blob/main/dockerfiles/README.md) | [🚀 Releases](https://github.com/jokob-sk/NetAlertX/releases) | [📚 Docs](https://jokob-sk.github.io/NetAlertX/) | [🔌 Plugins](https://github.com/jokob-sk/NetAlertX/blob/main/docs/PLUGINS.md) | [🤖 Ask AI](https://gurubase.io/g/netalertx)
|----------------------| ----------------------| ----------------------| ----------------------| ----------------------| |----------------------| ----------------------| ----------------------| ----------------------| ----------------------|
![showcase][showcase] ![showcase][showcase]
Head to [https://netalertx.com/](https://netalertx.com/) for more gifs and screenshots 📷.
<details> <details>
<summary>📷 Click for more screenshots</summary> <summary>📷 Click for more screenshots</summary>
@@ -23,73 +22,59 @@ Head to [https://netalertx.com/](https://netalertx.com/) for more gifs and scree
| ![presence][presence] | ![maintenance][maintenance] | ![settings][settings] | | ![presence][presence] | ![maintenance][maintenance] | ![settings][settings] |
| ![sync_hub][sync_hub] | ![report1][report1] | ![device_nmap][device_nmap] | | ![sync_hub][sync_hub] | ![report1][report1] | ![device_nmap][device_nmap] |
</details> Head to [https://netalertx.com/](https://netalertx.com/) for even more gifs and screenshots 📷.
<details>
<summary>❓ Why use Net<b>Alert</b><sup>x</sup>?</summary>
<hr>
Most of us don't know what's going on on our home network, but we want our family and data to be safe. _Command-line tools_ are great, but the output can be _hard to understand_ and action if you are not a network specialist.
Net<b>Alert</b><sup>x</sup> gives you peace of mind. _Visualize and immediately report 📬_ what is going on in your network - this is the first step to enhance your _network security 🔐_.
Net<b>Alert</b><sup>x</sup> combines several network and other scanning tools 🔍 with notifications 📧 into one user-friendly package 📦.
Set up a _kill switch ☠_ for your network via a smart plug with the available [Home Assistant](https://github.com/jokob-sk/NetAlertX/blob/main/docs/HOME_ASSISTANT.md) integration. Implement custom automations with the [CSV device Exports 📤](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/csv_backup), [Webhooks](https://github.com/jokob-sk/NetAlertX/blob/main/docs/WEBHOOK_N8N.md), or [API endpoints](https://github.com/jokob-sk/NetAlertX/blob/main/docs/API.md) features.
Extend the app if you want to create your own scanner [Plugin](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins#readme) and handle the results and notifications in Net<b>Alert</b><sup>x</sup>.
Looking forward to your contributions if you decide to share your work with the community ❤.
</details> </details>
## Scan Methods, Notifications, Integration, Extension system ## 📦 Features
| Features | Details | ### Scanners
|-------------|-------------|
| 🔍 | The app scans your network for, **New devices**, **New connections** (re-connections), **Disconnections**, **"Always Connected" devices down**, Devices **IP changes** and **Internet IP address changes**. Discovery & scan methods include: **arp-scan**, **Pi-hole - DB import**, **Pi-hole - DHCP leases import**, **Generic DHCP leases import**. **UNIFI controller import**, **SNMP-enabled router import**. Check the [Plugins](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins#readme) docs for more info on individual scans. | The app scans your network for **New devices**, **New connections** (re-connections), **Disconnections**, **"Always Connected" devices down**, Devices **IP changes** and **Internet IP address changes**. Discovery & scan methods include: **arp-scan**, **Pi-hole - DB import**, **Pi-hole - DHCP leases import**, **Generic DHCP leases import**, **UNIFI controller import**, **SNMP-enabled router import**. Check the [Plugins](https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md#readme) docs for a full lits of avaliable plugins.
|📧 | Send notifications to more than 80+ services, including Telegram via [Apprise](https://hub.docker.com/r/caronc/apprise), or use [Pushsafer](https://www.pushsafer.com/), [Pushover](https://www.pushover.net/), or [NTFY](https://ntfy.sh/). |
|🧩 | Feed your data and device changes into [Home Assistant](https://github.com/jokob-sk/NetAlertX/blob/main/docs/HOME_ASSISTANT.md), read [API endpoints](https://github.com/jokob-sk/NetAlertX/blob/main/docs/API.md), or use [Webhooks](https://github.com/jokob-sk/NetAlertX/blob/main/docs/WEBHOOK_N8N.md) to setup custom automation flows. | ### Notification gateways
| | Build your own scanners with the [Plugin system](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins#readme) |
Send notifications to more than 80+ services, including Telegram via [Apprise](https://hub.docker.com/r/caronc/apprise), or use native [Pushsafer](https://www.pushsafer.com/), [Pushover](https://www.pushover.net/), or [NTFY](https://ntfy.sh/) publishers.
### Integrations and Plugins
Feed your data and device changes into [Home Assistant](https://github.com/jokob-sk/NetAlertX/blob/main/docs/HOME_ASSISTANT.md), read [API endpoints](https://github.com/jokob-sk/NetAlertX/blob/main/docs/API.md), or use [Webhooks](https://github.com/jokob-sk/NetAlertX/blob/main/docs/WEBHOOK_N8N.md) to setup custom automation flows. You can also
build your own scanners with the [Plugin system](https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md#readme) in as little as [15 minutes](https://www.youtube.com/watch?v=cdbxlwiWhv8).
## Installation & Documentation ## 📚 Documentation
<!--- --------------------------------------------------------------------- ---> <!--- --------------------------------------------------------------------- --->
Supported browsers: Chrome, Firefox Supported browsers: Chrome, Firefox
| Docs | Link | - [[Installation] Docker](https://github.com/jokob-sk/NetAlertX/blob/main/dockerfiles/README.md)
|-------------|-------------| - [[Installation] Home Assistant](https://github.com/alexbelgium/hassio-addons/tree/master/netalertx)
| 📥🐳 | [Docker instructions](https://github.com/jokob-sk/NetAlertX/blob/main/dockerfiles/README.md) - [[Installation] Bare metal](https://github.com/jokob-sk/NetAlertX/blob/main/docs/HW_INSTALL.md)
| 📥🗄️ | [HW install (experimental 🧪)](https://github.com/jokob-sk/NetAlertX/blob/main/docs/HW_INSTALL.md) | - [[Installation] Unraid App](https://unraid.net/community/apps)
| 📥🟧 | [Unraid App](https://unraid.net/community/apps) | - [[Setup] Usage and Configuration](https://github.com/jokob-sk/NetAlertX/blob/main/docs/README.md)
| 📚 | [All Documentation](https://github.com/jokob-sk/NetAlertX/blob/main/docs/README.md) (App Usage and Configuration) | - [[Development] API docs](https://github.com/jokob-sk/NetAlertX/blob/main/docs/API.md)
- [[Development] Custom Plugins](https://github.com/jokob-sk/NetAlertX/blob/main/docs/PLUGINS_DEV.md)
> Other Alternatives
>
> - Check out [leiweibau's on HW installed fork](https://github.com/leiweibau/Pi.Alert/) (maintained)
> - [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)
> - [NetBox](https://netboxlabs.com/) - Network management software (Commercial)
## 🔔 Get notified what's new ## 📃 Everything else
<!--- --------------------------------------------------------------------- --->
### 📧 Get notified what's new
Get notified about a new release, what new functionality you can use and about breaking changes. Get notified about a new release, what new functionality you can use and about breaking changes.
![Follow and star][follow_star] ![Follow and star][follow_star]
### ⭐ Sponsors ### 🔀 Other Alternative Apps
[![GitHub Sponsors](https://img.shields.io/github/sponsors/jokob-sk?style=social)](https://github.com/sponsors/jokob-sk) - [PiAlert by leiweibau](https://github.com/leiweibau/Pi.Alert/) (maintained, bare-metal install)
- [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)
- [NetBox](https://netboxlabs.com/) - Network management software (Commercial)
Thank you to all the wonderful people who are sponsoring this project (private sponsors are hidden). ### 💙 Donations
<!-- SPONSORS-LIST DO NOT MODIFY BELOW --> Thank you to everyone who appreciates this tool and donates.
| All Sponsors |
|---|
<!-- SPONSORS-LIST DO NOT MODIFY ABOVE -->
<details> <details>
<summary>Click for more ways to donate</summary> <summary>Click for more ways to donate</summary>
@@ -106,26 +91,20 @@ Thank you to all the wonderful people who are sponsoring this project (private s
</details> </details>
### 🙏Contributors ### 🏗 Contributors
This project would be nothing without the amazing work of the community, with special thanks to: This project would be nothing without the amazing work of the community, with special thanks to:
> [pucherot/Pi.Alert](https://github.com/pucherot/Pi.Alert) (the original creator of PiAlert), [leiweibau](https://github.com/leiweibau/Pi.Alert): Dark mode (and much more), [Macleykun](https://github.com/Macleykun) (Help with Dockerfile clean-up), [vladaurosh](https://github.com/vladaurosh) for Alpine re-base help, [Final-Hawk](https://github.com/Final-Hawk) (Help with NTFY, styling and other fixes), [TeroRERO](https://github.com/terorero) (Spanish translations), [Data-Monkey](https://github.com/Data-Monkey), (Split-up of the python.py file and more), [cvc90](https://github.com/cvc90) (Spanish translation and various UI work) to name a few. Check out all the [amazing contributors](https://github.com/jokob-sk/NetAlertX/graphs/contributors). > [pucherot/Pi.Alert](https://github.com/pucherot/Pi.Alert) (the original creator of PiAlert), [leiweibau](https://github.com/leiweibau/Pi.Alert): Dark mode (and much more), [Macleykun](https://github.com/Macleykun) (Help with Dockerfile clean-up), [vladaurosh](https://github.com/vladaurosh) for Alpine re-base help, [Final-Hawk](https://github.com/Final-Hawk) (Help with NTFY, styling and other fixes), [TeroRERO](https://github.com/terorero) (Spanish translations), [Data-Monkey](https://github.com/Data-Monkey), (Split-up of the python.py file and more), [cvc90](https://github.com/cvc90) (Spanish translation and various UI work) to name a few. Check out all the [amazing contributors](https://github.com/jokob-sk/NetAlertX/graphs/contributors).
## Everything else
<!--- --------------------------------------------------------------------- --->
### 🌍 Translations ### 🌍 Translations
Proudly using [Weblate](https://hosted.weblate.org/projects/pialert/). Proudly using [Weblate](https://hosted.weblate.org/projects/pialert/). Help out and suggest languages in the [online portal of Weblate](https://hosted.weblate.org/projects/pialert/core/).
<a href="https://hosted.weblate.org/engage/pialert/"> <a href="https://hosted.weblate.org/engage/pialert/">
<img src="https://hosted.weblate.org/widget/pialert/core/multi-auto.svg" alt="Translation status" /> <img src="https://hosted.weblate.org/widget/pialert/core/multi-auto.svg" alt="Translation status" />
</a> </a>
Help out and suggest languages in the [online portal of Weblate](https://hosted.weblate.org/projects/pialert/core/).
### License ### License
> 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) > 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)

View File

@@ -5,8 +5,9 @@ LOG_FILE="${INSTALL_DIR}/log/execution_queue.log"
# Check if there are any entries with cron_restart_backend # Check if there are any entries with cron_restart_backend
if grep -q "cron_restart_backend" "$LOG_FILE"; then if grep -q "cron_restart_backend" "$LOG_FILE"; then
# Kill all python processes and restart the server # Restart python application using s6
pkill -f "python " && (python ${INSTALL_DIR}/server > /dev/null 2>&1 &) && echo 'done' s6-svc -r /var/run/s6-rc/servicedirs/netalertx
echo 'done'
# Remove all lines containing cron_restart_backend from the log file # Remove all lines containing cron_restart_backend from the log file
sed -i '/cron_restart_backend/d' "$LOG_FILE" sed -i '/cron_restart_backend/d' "$LOG_FILE"

View File

@@ -28,6 +28,8 @@ services:
- ${APP_DATA_LOCATION}/netalertx/dhcp_samples/pihole_dhcp_full.leases:/etc/pihole/dhcp.leases - ${APP_DATA_LOCATION}/netalertx/dhcp_samples/pihole_dhcp_full.leases:/etc/pihole/dhcp.leases
- ${APP_DATA_LOCATION}/netalertx/dhcp_samples/pihole_dhcp_2.leases:/etc/pihole/dhcp2.leases - ${APP_DATA_LOCATION}/netalertx/dhcp_samples/pihole_dhcp_2.leases:/etc/pihole/dhcp2.leases
- ${APP_DATA_LOCATION}/pihole/etc-pihole/pihole-FTL.db:/etc/pihole/pihole-FTL.db - ${APP_DATA_LOCATION}/pihole/etc-pihole/pihole-FTL.db:/etc/pihole/pihole-FTL.db
- ${DEV_LOCATION}/mkdocs.yml:/app/mkdocs.yml
- ${DEV_LOCATION}/docs:/app/docs
- ${DEV_LOCATION}/server:/app/server - ${DEV_LOCATION}/server:/app/server
- ${DEV_LOCATION}/test:/app/test - ${DEV_LOCATION}/test:/app/test
- ${DEV_LOCATION}/dockerfiles:/app/dockerfiles - ${DEV_LOCATION}/dockerfiles:/app/dockerfiles
@@ -38,7 +40,6 @@ services:
- ${DEV_LOCATION}/back/update_vendors.sh:/app/back/update_vendors.sh - ${DEV_LOCATION}/back/update_vendors.sh:/app/back/update_vendors.sh
- ${DEV_LOCATION}/front/lib:/app/front/lib - ${DEV_LOCATION}/front/lib:/app/front/lib
- ${DEV_LOCATION}/front/js:/app/front/js - ${DEV_LOCATION}/front/js:/app/front/js
- ${DEV_LOCATION}/front/report_templates:/front/report_templates
- ${DEV_LOCATION}/front/php:/app/front/php - ${DEV_LOCATION}/front/php:/app/front/php
- ${DEV_LOCATION}/front/deviceDetails.php:/app/front/deviceDetails.php - ${DEV_LOCATION}/front/deviceDetails.php:/app/front/deviceDetails.php
- ${DEV_LOCATION}/front/deviceDetailsEdit.php:/app/front/deviceDetailsEdit.php - ${DEV_LOCATION}/front/deviceDetailsEdit.php:/app/front/deviceDetailsEdit.php
@@ -63,7 +64,6 @@ services:
- ${DEV_LOCATION}/front/workflows.php:/app/front/workflows.php - ${DEV_LOCATION}/front/workflows.php:/app/front/workflows.php
- ${DEV_LOCATION}/front/appEventsCore.php:/app/front/appEventsCore.php - ${DEV_LOCATION}/front/appEventsCore.php:/app/front/appEventsCore.php
- ${DEV_LOCATION}/front/multiEditCore.php:/app/front/multiEditCore.php - ${DEV_LOCATION}/front/multiEditCore.php:/app/front/multiEditCore.php
- ${DEV_LOCATION}/front/donations.php:/app/front/donations.php
- ${DEV_LOCATION}/front/plugins:/app/front/plugins - ${DEV_LOCATION}/front/plugins:/app/front/plugins
# DELETE END anyone trying to use this file: comment out / delete ABOVE lines, they are only for development purposes # DELETE END anyone trying to use this file: comment out / delete ABOVE lines, they are only for development purposes
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
@@ -73,4 +73,5 @@ services:
- PORT=${PORT} - PORT=${PORT}
# ❗ DANGER ZONE BELOW - Setting ALWAYS_FRESH_INSTALL=true will delete the content of the /db & /config folders # ❗ DANGER ZONE BELOW - Setting ALWAYS_FRESH_INSTALL=true will delete the content of the /db & /config folders
- ALWAYS_FRESH_INSTALL=${ALWAYS_FRESH_INSTALL} - ALWAYS_FRESH_INSTALL=${ALWAYS_FRESH_INSTALL}
# - LOADED_PLUGINS=["DHCPLSS","PIHOLE","ASUSWRT","FREEBOX"]

View File

@@ -2,11 +2,11 @@
[![Docker Pulls](https://img.shields.io/docker/pulls/jokobsk/netalertx?label=Pulls&logo=docker&color=0aa8d2&logoColor=fff&style=for-the-badge)](https://hub.docker.com/r/jokobsk/netalertx) [![Docker Pulls](https://img.shields.io/docker/pulls/jokobsk/netalertx?label=Pulls&logo=docker&color=0aa8d2&logoColor=fff&style=for-the-badge)](https://hub.docker.com/r/jokobsk/netalertx)
[![GitHub Release](https://img.shields.io/github/v/release/jokob-sk/NetAlertX?color=0aa8d2&logoColor=fff&logo=GitHub&style=for-the-badge)](https://github.com/jokob-sk/NetAlertX/releases) [![GitHub Release](https://img.shields.io/github/v/release/jokob-sk/NetAlertX?color=0aa8d2&logoColor=fff&logo=GitHub&style=for-the-badge)](https://github.com/jokob-sk/NetAlertX/releases)
[![Discord](https://img.shields.io/discord/1274490466481602755?color=0aa8d2&logoColor=fff&logo=Discord&style=for-the-badge)](https://discord.gg/NczTUTWyRr) [![Discord](https://img.shields.io/discord/1274490466481602755?color=0aa8d2&logoColor=fff&logo=Discord&style=for-the-badge)](https://discord.gg/NczTUTWyRr)
[![Home Assistant](https://img.shields.io/badge/Repo-blue?logo=home-assistant&style=for-the-badge&color=0aa8d2&logoColor=fff&label=Add)](https://my.home-assistant.io/redirect/supervisor_add_addon_repository/?repository_url=https%3A%2F%2Fgithub.com%2Falexbelgium%2Fhassio-addons)
# NetAlertX - Network scanner & notification framework
# NetAlertX 🖧🔍 Network scanner & notification framework | [📑 Docker guide](https://github.com/jokob-sk/NetAlertX/blob/main/dockerfiles/README.md) | [🚀 Releases](https://github.com/jokob-sk/NetAlertX/releases) | [📚 Docs](https://jokob-sk.github.io/NetAlertX/) | [🔌 Plugins](https://github.com/jokob-sk/NetAlertX/blob/main/docs/PLUGINS.md) | [🤖 Ask AI](https://gurubase.io/g/netalertx)
| [📑 Docker guide](https://github.com/jokob-sk/NetAlertX/blob/main/dockerfiles/README.md) | [🚀 Releases](https://github.com/jokob-sk/NetAlertX/releases) | [📚 Docs](https://github.com/jokob-sk/NetAlertX/tree/main/docs) | [🔌 Plugins](https://github.com/jokob-sk/NetAlertX/blob/main/front/plugins/README.md) | [🤖 Ask AI](https://gurubase.io/g/netalertx)
|----------------------| ----------------------| ----------------------| ----------------------| ----------------------| |----------------------| ----------------------| ----------------------| ----------------------| ----------------------|
<a href="https://raw.githubusercontent.com/jokob-sk/NetAlertX/main/docs/img/GENERAL/github_social_image.jpg" target="_blank"> <a href="https://raw.githubusercontent.com/jokob-sk/NetAlertX/main/docs/img/GENERAL/github_social_image.jpg" target="_blank">
@@ -21,13 +21,14 @@ Head to [https://netalertx.com/](https://netalertx.com/) for more gifs and scree
## 📕 Basic Usage ## 📕 Basic Usage
> [!WARNING] > [!WARNING]
> You will have to run the container on the `host` network and specify `SCAN_SUBNETS` unless you use other [plugin scanners](https://github.com/jokob-sk/NetAlertX/blob/main/front/plugins/README.md). The initial scan can take a few minutes, so please wait 5-10 minutes for the initial discovery to finish. > You will have to run the container on the `host` network and specify `SCAN_SUBNETS` unless you use other [plugin scanners](https://github.com/jokob-sk/NetAlertX/blob/main/docs/PLUGINS.md). The initial scan can take a few minutes, so please wait 5-10 minutes for the initial discovery to finish.
```yaml ```yaml
docker run -d --rm --network=host \ docker run -d --rm --network=host \
-v local_path/config:/app/config \ -v local_path/config:/app/config \
-v local_path/db:/app/db \ -v local_path/db:/app/db \
--mount type=tmpfs,target=/app/api \ --mount type=tmpfs,target=/app/api \
-e PUID=200 -e PGID=300 \
-e TZ=Europe/Berlin \ -e TZ=Europe/Berlin \
-e PORT=20211 \ -e PORT=20211 \
jokobsk/netalertx:latest jokobsk/netalertx:latest
@@ -37,15 +38,18 @@ See alternative [docked-compose examples](https://github.com/jokob-sk/NetAlertX/
### Docker environment variables ### Docker environment variables
| Variable | Description | Default | | Variable | Description | Example Value |
| :------------- |:-------------| -----:| | :------------- |:------------------------| -----:|
| `PORT` |Port of the web interface | `20211` | | `PORT` |Port of the web interface | `20211` |
| `PUID` |Application User UID | `102` |
| `PGID` |Application User GID | `82` |
| `LISTEN_ADDR` |Set the specific IP Address for the listener address for the nginx webserver (web interface). This could be useful when using multiple subnets to hide the web interface from all untrusted networks. | `0.0.0.0` | | `LISTEN_ADDR` |Set the specific IP Address for the listener address for the nginx webserver (web interface). This could be useful when using multiple subnets to hide the web interface from all untrusted networks. | `0.0.0.0` |
|`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` | |`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` |
|`APP_CONF_OVERRIDE` | JSON override for settings, e.g. `{"SCAN_SUBNETS":"['192.168.1.0/24 --interface=eth1']","GRAPHQL_PORT":"20212"}` | `N/A` | |`LOADED_PLUGINS` | Default [plugins](https://github.com/jokob-sk/NetAlertX/blob/main/docs/PLUGINS.md) to load. Plugins cannot be loaded with `APP_CONF_OVERRIDE`, you need to use this variable instead and then specify the plugins settings with `APP_CONF_OVERRIDE`. | `["PIHOLE","ASUSWRT"]` |
|`ALWAYS_FRESH_INSTALL` | If `true` will delete the content of the `/db` & `/config` folders. For testing purposes. Can be coupled with [watchtower](https://github.com/containrrr/watchtower) to have an always freshly installed `netalertx`/`netalertx-dev` image. | `N/A` | |`APP_CONF_OVERRIDE` | JSON override for settings (except `LOADED_PLUGINS`). | `{"SCAN_SUBNETS":"['192.168.1.0/24 --interface=eth1']","GRAPHQL_PORT":"20212"}` |
|`ALWAYS_FRESH_INSTALL` | ⚠ If `true` will delete the content of the `/db` & `/config` folders. For testing purposes. Can be coupled with [watchtower](https://github.com/containrrr/watchtower) to have an always freshly installed `netalertx`/`netalertx-dev` image. | `true` |
> You can override the default GraphQL port setting `GRAPHQL_PORT` (set to `20212`) by using the `APP_CONF_OVERRIDE` env variable. > You can override the default GraphQL port setting `GRAPHQL_PORT` (set to `20212`) by using the `APP_CONF_OVERRIDE` env variable. `LOADED_PLUGINS` and settings in `APP_CONF_OVERRIDE` can be specified via the UI as well.
### Docker paths ### Docker paths
@@ -58,7 +62,7 @@ See alternative [docked-compose examples](https://github.com/jokob-sk/NetAlertX/
| ✅ | `:/app/db` | Folder which will contain the `app.db` database file | | ✅ | `:/app/db` | Folder which will contain the `app.db` database file |
| | `:/app/log` | Logs folder useful for debugging if you have issues setting up the container | | | `:/app/log` | Logs folder useful for debugging if you have issues setting up the container |
| | `:/app/api` | A simple [API endpoint](https://github.com/jokob-sk/NetAlertX/blob/main/docs/API.md) containing static (but regularly updated) json and other files. | | | `:/app/api` | A simple [API endpoint](https://github.com/jokob-sk/NetAlertX/blob/main/docs/API.md) containing static (but regularly updated) json and other files. |
| | `:/app/front/plugins/<plugin>/ignore_plugin` | Map a file `ignore_plugin` to ignore a plugin. Plugins can be soft-disabled via settings. More in the [Plugin docs](https://github.com/jokob-sk/NetAlertX/blob/main/front/plugins/README.md). | | | `:/app/front/plugins/<plugin>/ignore_plugin` | Map a file `ignore_plugin` to ignore a plugin. Plugins can be soft-disabled via settings. More in the [Plugin docs](https://github.com/jokob-sk/NetAlertX/blob/main/docs/PLUGINS.md). |
| | `:/etc/resolv.conf` | Use a custom `resolv.conf` file for [better name resolution](https://github.com/jokob-sk/NetAlertX/blob/main/docs/REVERSE_DNS.md). | | | `:/etc/resolv.conf` | Use a custom `resolv.conf` file for [better name resolution](https://github.com/jokob-sk/NetAlertX/blob/main/docs/REVERSE_DNS.md). |
> Use separate `db` and `config` directories, do not nest them. > Use separate `db` and `config` directories, do not nest them.
@@ -68,7 +72,7 @@ See alternative [docked-compose examples](https://github.com/jokob-sk/NetAlertX/
- If unavailable, the app generates a default `app.conf` and `app.db` file on the first run. - If unavailable, the app generates a default `app.conf` and `app.db` file on the first run.
- The preferred way is to manage the configuration via the Settings section in the UI, if UI is inaccessible you can modify [app.conf](https://github.com/jokob-sk/NetAlertX/tree/main/back) in the `/app/config/` folder directly - The preferred way is to manage the configuration via the Settings section in the UI, if UI is inaccessible you can modify [app.conf](https://github.com/jokob-sk/NetAlertX/tree/main/back) in the `/app/config/` folder directly
### Setting up scanners #### Setting up scanners
You have to specify which network(s) should be scanned. This is done by entering subnets that are accessible from the host. If you use the default `ARPSCAN` plugin, you have to specify at least one valid subnet and interface in the `SCAN_SUBNETS` setting. See the documentation on [How to set up multiple SUBNETS, VLANs and what are limitations](https://github.com/jokob-sk/NetAlertX/blob/main/docs/SUBNETS.md) for troubleshooting and more advanced scenarios. You have to specify which network(s) should be scanned. This is done by entering subnets that are accessible from the host. If you use the default `ARPSCAN` plugin, you have to specify at least one valid subnet and interface in the `SCAN_SUBNETS` setting. See the documentation on [How to set up multiple SUBNETS, VLANs and what are limitations](https://github.com/jokob-sk/NetAlertX/blob/main/docs/SUBNETS.md) for troubleshooting and more advanced scenarios.
@@ -77,19 +81,18 @@ If you are running PiHole you can synchronize devices directly. Check the [PiHol
> [!NOTE] > [!NOTE]
> You can bulk-import devices via the [CSV import method](https://github.com/jokob-sk/NetAlertX/blob/main/docs/DEVICES_BULK_EDITING.md). > You can bulk-import devices via the [CSV import method](https://github.com/jokob-sk/NetAlertX/blob/main/docs/DEVICES_BULK_EDITING.md).
#### 🧭 Community guides #### Community guides
You can read or watch several [community configuration guides](https://github.com/jokob-sk/NetAlertX/blob/main/docs/COMMUNITY_GUIDES.md) in Chinese, Korean, German, or French. You can read or watch several [community configuration guides](https://github.com/jokob-sk/NetAlertX/blob/main/docs/COMMUNITY_GUIDES.md) in Chinese, Korean, German, or French.
> Please note these might be outdated. Rely on official documentation first. > Please note these might be outdated. Rely on official documentation first.
### **Common issues** #### Common issues
💡 Before creating a new issue, please check if a similar issue was [already resolved](https://github.com/jokob-sk/NetAlertX/issues?q=is%3Aissue+is%3Aclosed). - Before creating a new issue, please check if a similar issue was [already resolved](https://github.com/jokob-sk/NetAlertX/issues?q=is%3Aissue+is%3Aclosed).
- Check also common issues and [debugging tips](https://github.com/jokob-sk/NetAlertX/blob/main/docs/DEBUG_TIPS.md).
⚠ Check also common issues and [debugging tips](https://github.com/jokob-sk/NetAlertX/blob/main/docs/DEBUG_TIPS.md). ## 💙 Support me
## ❤ Support me
| [![GitHub](https://i.imgur.com/emsRCPh.png)](https://github.com/sponsors/jokob-sk) | [![Buy Me A Coffee](https://i.imgur.com/pIM6YXL.png)](https://www.buymeacoffee.com/jokobsk) | [![Patreon](https://i.imgur.com/MuYsrq1.png)](https://www.patreon.com/user?u=84385063) | | [![GitHub](https://i.imgur.com/emsRCPh.png)](https://github.com/sponsors/jokob-sk) | [![Buy Me A Coffee](https://i.imgur.com/pIM6YXL.png)](https://www.buymeacoffee.com/jokobsk) | [![Patreon](https://i.imgur.com/MuYsrq1.png)](https://www.patreon.com/user?u=84385063) |
| --- | --- | --- | | --- | --- | --- |
@@ -97,4 +100,4 @@ You can read or watch several [community configuration guides](https://github.co
- Bitcoin: `1N8tupjeCK12qRVU2XrV17WvKK7LCawyZM` - Bitcoin: `1N8tupjeCK12qRVU2XrV17WvKK7LCawyZM`
- Ethereum: `0x6e2749Cb42F4411bc98501406BdcD82244e3f9C7` - Ethereum: `0x6e2749Cb42F4411bc98501406BdcD82244e3f9C7`
> 📧 Email me at [jokob@duck.com](mailto:jokob@duck.com?subject=NetAlertX) if you want to get in touch or if I should add other sponsorship platforms. > 📧 Email me at [netalertx@gmail.com](mailto:netalertx@gmail.com?subject=NetAlertX Donations) if you want to get in touch or if I should add other sponsorship platforms.

View File

@@ -1,8 +1,36 @@
#!/usr/bin/with-contenv bash #!/usr/bin/with-contenv bash
echo "---------------------------------------------------------" echo "---------------------------------------------------------
echo "[INSTALL] Run init.sh" [INSTALL] Run init.sh
echo "---------------------------------------------------------" ---------------------------------------------------------"
DEFAULT_PUID=102
DEFAULT_GID=82
PUID=${PUID:-${DEFAULT_PUID}}
PGID=${PGID:-${DEFAULT_GID}}
echo "[INSTALL] Setting up user UID and GID"
if ! groupmod -o -g "$PGID" www-data && [ "$PGID" != "$DEFAULT_GID" ] ; then
echo "Failed to set user GID to ${PGID}, trying with default GID ${DEFAULT_GID}"
groupmod -o -g "$DEFAULT_GID" www-data
fi
if ! usermod -o -u "$PUID" nginx && [ "$PUID" != "$DEFAULT_PUID" ] ; then
echo "Failed to set user UID to ${PUID}, trying with default PUID ${DEFAULT_PUID}"
usermod -o -u "$DEFAULT_PUID" nginx
fi
echo "
---------------------------------------------------------
GID/UID
---------------------------------------------------------
User UID: $(id -u nginx)
User GID: $(getent group www-data | cut -d: -f3)
---------------------------------------------------------"
chown nginx:nginx /run/nginx/ /var/log/nginx/ /var/lib/nginx/ /var/lib/nginx/tmp/
chgrp www-data /var/www/localhost/htdocs/
export INSTALL_DIR=/app # Specify the installation directory here export INSTALL_DIR=/app # Specify the installation directory here
@@ -55,7 +83,7 @@ else
echo "Config file saved to ${INSTALL_DIR}/config/app_conf_override.json" echo "Config file saved to ${INSTALL_DIR}/config/app_conf_override.json"
fi fi
# 🔻 FOR BACKWARD COMPATIBILITY - REMOVE AFTER 12/12/2024 # 🔻 FOR BACKWARD COMPATIBILITY - REMOVE AFTER 12/12/2025
# Check if pialert.db exists, then create a symbolic link to app.db # Check if pialert.db exists, then create a symbolic link to app.db
if [ -f "${INSTALL_DIR_OLD}/db/${OLD_APP_NAME}.db" ]; then if [ -f "${INSTALL_DIR_OLD}/db/${OLD_APP_NAME}.db" ]; then
@@ -66,7 +94,7 @@ fi
if [ -f "${INSTALL_DIR_OLD}/config/${OLD_APP_NAME}.conf" ]; then if [ -f "${INSTALL_DIR_OLD}/config/${OLD_APP_NAME}.conf" ]; then
ln -s "${INSTALL_DIR_OLD}/config/${OLD_APP_NAME}.conf" "${INSTALL_DIR}/config/${CONF_FILE}" ln -s "${INSTALL_DIR_OLD}/config/${OLD_APP_NAME}.conf" "${INSTALL_DIR}/config/${CONF_FILE}"
fi fi
# 🔺 FOR BACKWARD COMPATIBILITY - REMOVE AFTER 12/12/2024 # 🔺 FOR BACKWARD COMPATIBILITY - REMOVE AFTER 12/12/2025
# Copy starter .db and .conf if they don't exist # Copy starter .db and .conf if they don't exist
cp -na "${INSTALL_DIR}/back/${CONF_FILE}" "${INSTALL_DIR}/config/${CONF_FILE}" cp -na "${INSTALL_DIR}/back/${CONF_FILE}" "${INSTALL_DIR}/config/${CONF_FILE}"
@@ -83,6 +111,13 @@ if [ -n "${TZ}" ]; then
echo $TZ > /etc/timezone echo $TZ > /etc/timezone
fi fi
# if custom variables not set we do not need to do anything
if [ -n "${LOADED_PLUGINS}" ]; then
FILECONF="${INSTALL_DIR}/config/${CONF_FILE}"
echo "[INSTALL] Setup custom LOADED_PLUGINS variable"
sed -i "\#^LOADED_PLUGINS=#c\LOADED_PLUGINS=${LOADED_PLUGINS}" "${FILECONF}"
fi
echo "[INSTALL] Setup NGINX" echo "[INSTALL] Setup NGINX"
echo "Setting webserver to address ($LISTEN_ADDR) and port ($PORT)" echo "Setting webserver to address ($LISTEN_ADDR) and port ($PORT)"
envsubst '$INSTALL_DIR $LISTEN_ADDR $PORT' < "${INSTALL_DIR}/install/netalertx.template.conf" > "${NGINX_CONFIG_FILE}" envsubst '$INSTALL_DIR $LISTEN_ADDR $PORT' < "${INSTALL_DIR}/install/netalertx.template.conf" > "${NGINX_CONFIG_FILE}"
@@ -112,8 +147,7 @@ touch "${INSTALL_DIR}"/api/user_notifications.json
mkdir -p "${INSTALL_DIR}"/log/plugins mkdir -p "${INSTALL_DIR}"/log/plugins
echo "[INSTALL] Fixing permissions after copied starter config & DB" echo "[INSTALL] Fixing permissions after copied starter config & DB"
chown -R nginx:www-data "${INSTALL_DIR}"/{config,log,db,api} chown -R nginx:www-data "${INSTALL_DIR}"
chown -R nginx:www-data "${INSTALL_DIR}"/api/user_notifications.json
chmod 750 "${INSTALL_DIR}"/{config,log,db} chmod 750 "${INSTALL_DIR}"/{config,log,db}
find "${INSTALL_DIR}"/{config,log,db} -type f -exec chmod 640 {} \; find "${INSTALL_DIR}"/{config,log,db} -type f -exec chmod 640 {} \;
@@ -125,10 +159,6 @@ if [ ! -f "${INSTALL_DIR}/front/buildtimestamp.txt" ]; then
chown nginx:www-data "${INSTALL_DIR}/front/buildtimestamp.txt" chown nginx:www-data "${INSTALL_DIR}/front/buildtimestamp.txt"
fi fi
# Start crond service in the background
echo "[INSTALL] Starting crond service..."
crond -f -d 8 > /dev/null 2>&1 &
echo -e " echo -e "
[ENV] PATH is ${PATH} [ENV] PATH is ${PATH}
[ENV] PORT is ${PORT} [ENV] PORT is ${PORT}

View File

@@ -13,13 +13,21 @@ sed -i "/^user/c\user = nginx" /etc/php83/php-fpm.d/www.conf
sed -i "/^group/c\group = www-data" /etc/php83/php-fpm.d/www.conf sed -i "/^group/c\group = www-data" /etc/php83/php-fpm.d/www.conf
# s6 overlay setup # s6 overlay setup
mkdir -p /etc/s6-overlay/s6-rc.d/{SetupOneshot,php-fpm/dependencies.d,nginx/dependencies.d} mkdir -p /etc/s6-overlay/s6-rc.d/{SetupOneshot,crond/dependencies.d,php-fpm/dependencies.d,nginx/dependencies.d,$APP_NAME/dependencies.d}
mkdir -p /etc/s6-overlay/s6-rc.d/{SetupOneshot,php-fpm/dependencies.d,nginx/dependencies.d,$APP_NAME/dependencies.d}
echo "oneshot" > /etc/s6-overlay/s6-rc.d/SetupOneshot/type echo "oneshot" > /etc/s6-overlay/s6-rc.d/SetupOneshot/type
echo "longrun" > /etc/s6-overlay/s6-rc.d/crond/type
echo "longrun" > /etc/s6-overlay/s6-rc.d/php-fpm/type echo "longrun" > /etc/s6-overlay/s6-rc.d/php-fpm/type
echo "longrun" > /etc/s6-overlay/s6-rc.d/nginx/type echo "longrun" > /etc/s6-overlay/s6-rc.d/nginx/type
echo "longrun" > /etc/s6-overlay/s6-rc.d/$APP_NAME/type echo "longrun" > /etc/s6-overlay/s6-rc.d/$APP_NAME/type
echo -e "${INSTALL_DIR}/dockerfiles/init.sh" > /etc/s6-overlay/s6-rc.d/SetupOneshot/up echo -e "${INSTALL_DIR}/dockerfiles/init.sh" > /etc/s6-overlay/s6-rc.d/SetupOneshot/up
echo -e '#!/bin/execlineb -P
if { echo
"
[INSTALL] Starting crond service...
" }' > /etc/s6-overlay/s6-rc.d/crond/run
echo -e "/usr/sbin/crond -f" >> /etc/s6-overlay/s6-rc.d/crond/run
echo -e "#!/bin/execlineb -P\n/usr/sbin/php-fpm83 -F" > /etc/s6-overlay/s6-rc.d/php-fpm/run echo -e "#!/bin/execlineb -P\n/usr/sbin/php-fpm83 -F" > /etc/s6-overlay/s6-rc.d/php-fpm/run
echo -e '#!/bin/execlineb -P\nnginx -g "daemon off;"' > /etc/s6-overlay/s6-rc.d/nginx/run echo -e '#!/bin/execlineb -P\nnginx -g "daemon off;"' > /etc/s6-overlay/s6-rc.d/nginx/run
echo -e '#!/bin/execlineb -P echo -e '#!/bin/execlineb -P
@@ -33,10 +41,9 @@ echo -e '#!/bin/execlineb -P
" }' > /etc/s6-overlay/s6-rc.d/$APP_NAME/run " }' > /etc/s6-overlay/s6-rc.d/$APP_NAME/run
echo -e "python ${INSTALL_DIR}/server" >> /etc/s6-overlay/s6-rc.d/$APP_NAME/run echo -e "python ${INSTALL_DIR}/server" >> /etc/s6-overlay/s6-rc.d/$APP_NAME/run
touch /etc/s6-overlay/s6-rc.d/user/contents.d/{SetupOneshot,php-fpm,nginx} /etc/s6-overlay/s6-rc.d/{php-fpm,nginx}/dependencies.d/SetupOneshot touch /etc/s6-overlay/s6-rc.d/user/contents.d/{SetupOneshot,crond,php-fpm,nginx,$APP_NAME} /etc/s6-overlay/s6-rc.d/{crond,php-fpm,nginx,$APP_NAME}/dependencies.d/SetupOneshot
touch /etc/s6-overlay/s6-rc.d/user/contents.d/{SetupOneshot,php-fpm,nginx,$APP_NAME} /etc/s6-overlay/s6-rc.d/{php-fpm,nginx,$APP_NAME}/dependencies.d/SetupOneshot
touch /etc/s6-overlay/s6-rc.d/nginx/dependencies.d/php-fpm touch /etc/s6-overlay/s6-rc.d/nginx/dependencies.d/php-fpm
touch /etc/s6-overlay/s6-rc.d/$APP_NAME/dependencies.d/nginx touch /etc/s6-overlay/s6-rc.d/$APP_NAME/dependencies.d/nginx
# this removes the current file # this removes the current file
# rm -f $0 rm -f $0

View File

@@ -23,9 +23,9 @@ curl 'http://host:GRAPHQL_PORT/graphql' \
## API Endpoint: GraphQL ## API Endpoint: GraphQL
Endpoint URL: `php/server/query_graphql.php` - Endpoint URL: `php/server/query_graphql.php`
Host: `same as front end (web ui)` - Host: `same as front end (web ui)`
Port: `20212` or as defined by the `GRAPHQL_PORT` setting - Port: `20212` or as defined by the `GRAPHQL_PORT` setting
### Example Query to Fetch Devices ### Example Query to Fetch Devices
@@ -124,11 +124,11 @@ The response will be in JSON format, similar to the following:
## API Endpoint: JSON files ## API Endpoint: JSON files
These API endpoint are static files, that are periodically updated. This API endpoint retrieves static files, that are periodically updated.
Endpoint URL: `php/server/query_json.php?file=<file name>` - Endpoint URL: `php/server/query_json.php?file=<file name>`
Host: `same as front end (web ui)` - Host: `same as front end (web ui)`
Port: `20211` or as defined by the $PORT docker environment variable (same as the port for the web ui) - Port: `20211` or as defined by the $PORT docker environment variable (same as the port for the web ui)
### When are the endpoints updated ### When are the endpoints updated
@@ -144,19 +144,16 @@ You can access the following files:
| File name | Description | | 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/NetAlertX/blob/main/front/report_templates/webhook_json_sample.json)). | | `notification_json_final.json` | The json version of the last notification (e.g. used for webhooks - [sample JSON](https://github.com/jokob-sk/NetAlertX/blob/main/front/report_templates/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_devices.json` | All of the available Devices detected by the app. |
| `table_plugins_events.json` | The list of the unprocessed (pending) notification events (plugins_events DB table). | | `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_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/NetAlertX/tree/main/front/plugins)| | `table_plugins_objects.json` | The content of the plugins_objects table. Find more info on the [Plugin system here](https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md)|
| `language_strings.json` | The content of the language_strings table, which in turn is loaded from the plugins `config.json` definitions. | | `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_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. | | `table_settings.json` | The content of the settings table. |
| `app_state.json` | Contains the current application state. | | `app_state.json` | Contains the current application state. |
Current/latest state of the aforementioned files depends on your settings.
### JSON Data format ### JSON Data format
@@ -224,36 +221,36 @@ Example JSON of the `table_devices.json` endpoint with two Devices (database row
## API Endpoint: /log files ## API Endpoint: /log files
To retrieve files from the `/app/log` folder. This API endpoint retrieves files from the `/app/log` folder.
Endpoint URL: `php/server/query_logs.php?file=<file name>` - Endpoint URL: `php/server/query_logs.php?file=<file name>`
Host: `same as front end (web ui)` - Host: `same as front end (web ui)`
Port: `20211` or as defined by the $PORT docker environment variable (same as the port for the web ui) - Port: `20211` or as defined by the $PORT docker environment variable (same as the port for the web ui)
| File | Description | | File | Description |
|--------------------------|--------------------------------------------------| |--------------------------|---------------------------------------------------------------|
| `IP_changes.log` | Logs of IP address changes | | `IP_changes.log` | Logs of IP address changes |
| `app.log` | Main application log | | `app.log` | Main application log |
| `app.php_errors`.log | PHP error log | | `app.php_errors.log` | PHP error log |
| `app_front.log` | Frontend application log | | `app_front.log` | Frontend application log |
| `app_nmap.log` | Logs of Nmap scan results | | `app_nmap.log` | Logs of Nmap scan results |
| `db_is_locked.log` | Logs when the database is locked | | `db_is_locked.log` | Logs when the database is locked |
| `execution_queue.log` | Logs of execution queue activities | | `execution_queue.log` | Logs of execution queue activities |
| `plugins/` | Directory for plugin-related files (not accessible) | | `plugins/` | Directory for temporary plugin-related files (not accessible) |
| `report_output.html` | HTML report output | | `report_output.html` | HTML report output |
| `report_output.json` | JSON format report output | | `report_output.json` | JSON format report output |
| `report_output.txt` | Text format report output | | `report_output.txt` | Text format report output |
| `stderr.log` | Logs of standard error output | | `stderr.log` | Logs of standard error output |
| `stdout.log` | Logs of standard output | | `stdout.log` | Logs of standard output |
## API Endpoint: /config files ## API Endpoint: /config files
To retrieve files from the `/app/config` folder. To retrieve files from the `/app/config` folder.
Endpoint URL: `php/server/query_config.php?file=<file name>` - Endpoint URL: `php/server/query_config.php?file=<file name>`
Host: `same as front end (web ui)` - Host: `same as front end (web ui)`
Port: `20211` or as defined by the $PORT docker environment variable (same as the port for the web ui) - Port: `20211` or as defined by the $PORT docker environment variable (same as the port for the web ui)
| File | Description | | File | Description |
|--------------------------|--------------------------------------------------| |--------------------------|--------------------------------------------------|

View File

@@ -1,6 +1,8 @@
(DRAFT) Authelia support ## Authelia support
> [!WARNING]
>
> This is community contributed content and work in progress. Contributions are welcome.
```yaml ```yaml
theme: dark theme: dark

View File

@@ -18,7 +18,7 @@ To decide on a backup strategy, check where the data is stored:
### Core Configuration ### Core Configuration
The core application configuration is in the `app.conf` file (See [Settings System](https://github.com/jokob-sk/NetAlertX/blob/main/docs/SETTINGS_SYSTEM.md) for details), such as: The core application configuration is in the `app.conf` file (See [Settings System](./SETTINGS_SYSTEM.md) for details), such as:
- Notification settings - Notification settings
- Scanner settings - Scanner settings
@@ -37,7 +37,7 @@ The core device data is backed up to the `devices_<timestamp>.csv` or `devices.c
### Historical data ### Historical data
Historical data is stored in the `app.db` database (See [Database overview](https://github.com/jokob-sk/NetAlertX/blob/main/docs/DATABASE.md) for details). This data includes: Historical data is stored in the `app.db` database (See [Database overview](./DATABASE.md) for details). This data includes:
- Plugin objects - Plugin objects
- Plugin historical entries - Plugin historical entries
@@ -48,7 +48,9 @@ Historical data is stored in the `app.db` database (See [Database overview](http
The safest approach to backups is to backup all of the above, by taking regular file system backups (I use [Kopia](https://github.com/kopia/kopia)). The safest approach to backups is to backup all of the above, by taking regular file system backups (I use [Kopia](https://github.com/kopia/kopia)).
Arguably, the most time is spent setting up the device list, so if only one file is kept I'd recommend to have a latest backup of the `devices_<timestamp>.csv` or `devices.csv` file, followed by the `app.conf` file. Arguably, the most time is spent setting up the device list, so if only one file is kept I'd recommend to have a latest backup of the `devices_<timestamp>.csv` or `devices.csv` file, followed by the `app.conf` file. You can also download `app.conf` and `devices.csv` file in the Maintenance section:
![Backup and Restore Section in Maintenance](./img/BACKUPS/Maintenance_Backup_Restore.png)
### Scenario 1: Full backup ### Scenario 1: Full backup
@@ -79,6 +81,6 @@ Even with a corrupted database you can recover what I would argue is 99% of the
- upload the `app.conf` file into the mounted `/app/config/` folder as described in the [Setup documentation](https://github.com/jokob-sk/NetAlertX/blob/main/dockerfiles/README.md#docker-paths). - upload the `app.conf` file into the mounted `/app/config/` folder as described in the [Setup documentation](https://github.com/jokob-sk/NetAlertX/blob/main/dockerfiles/README.md#docker-paths).
- rename the `devices_<timestamp>.csv` to `devices.csv` and place it in the `/app/config` folder - rename the `devices_<timestamp>.csv` to `devices.csv` and place it in the `/app/config` folder
- Restore the `devices.csv` backup via the [Maintenance section](https://github.com/jokob-sk/NetAlertX/blob/main/docs/DEVICES_BULK_EDITING.md) - Restore the `devices.csv` backup via the [Maintenance section](./DEVICES_BULK_EDITING.md)

48
docs/COMMON_ISSUES.md Executable file
View File

@@ -0,0 +1,48 @@
### Loading...
Often if the application is misconfigured the `Loading...` dialog is continuously displayed. This is most likely caused by the backed failing to start. The **Maintenance -> Logs** section should give you more details on what's happenning. If there is no exception, check the Portainer log, or start the container in the foreground (without the `-d` parameter) to observe any exceptions. It's advisable to enable `trace` or `debug`. Check the [Debug tips](./DEBUG_TIPS.md) on detailed instructions.
### Incorrect SCAN_SUBNETS
One of the most common issues is not configuring `SCAN_SUBNETS` correctly. If this setting is misconfigured you will only see one or two devices in your devices list after a scan. Please read the [subnets docs](./SUBNETS.md) carefully to resolve this.
### Duplicate devices and notifications
The app uses the MAC address as an unique identifier for devices. If a new MAC is detected a new device is added to the application and corresponding notifications are triggered. This means that if the MAC of an existing device changes, the device will be logged as a new device. You can usually prevent this from happenning by changing the device configuration (in Android, iOS, or Windows) for your network. See the [Random Macs](./RANDOM_MAC.md) guide for details.
### Permissions
Make sure you [File permissions](./FILE_PERMISSIONS.md) are set correctly.
* If facing issues (AJAX errors, can't write to DB, empty screen, etc,) make sure permissions are set correctly, and check the logs under `/app/log`.
* To solve permission issues you can try setting the owner and group of the `app.db` by executing the following on the host system: `docker exec netalertx chown -R www-data:www-data /app/db/app.db`.
* If still facing issues, try to map the app.db file (⚠ not folder) to `:/app/db/app.db` (see [docker-compose Examples](https://github.com/jokob-sk/NetAlertX/blob/main/dockerfiles/README.md#-docker-composeyml-examples) 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`. See the [subnets docs for details](./SUBNETS.md).
### Invalid JSON
Check the [Invalid JSON errors debug help](./DEBUG_INVALID_JSON.md) docs on how to proceed.
### sudo execution failing (e.g.: on arpscan) on a Raspberry Pi 4
> sudo: unexpected child termination condition: 0
Resolution based on [this issue](https://github.com/linuxserver/docker-papermerge/issues/4#issuecomment-1003657581)
```
wget ftp.us.debian.org/debian/pool/main/libs/libseccomp/libseccomp2_2.5.3-2_armhf.deb
sudo dpkg -i libseccomp2_2.5.3-2_armhf.deb
```
The link above will probably break in time too. Go to https://packages.debian.org/sid/armhf/libseccomp2/download to find the new version number and put that in the url.
### Only Router and own device show up
Make sure that the subnet and interface in `SCAN_SUBNETS` are correct. If your device/NAS has multiple ethernet ports, you probably need to change `eth0` to something else.

View File

@@ -1,6 +1,6 @@
# Custom Properties for Devices # Custom Properties for Devices
![Custom Properties](/docs/img/CUSTOM_PROPERTIES/Device_Custom_Properties.png) ![Custom Properties](./img/CUSTOM_PROPERTIES/Device_Custom_Properties.png)
## Overview ## Overview
@@ -41,7 +41,7 @@ Custom properties are structured as a list of objects, where each property inclu
## Usage on the Device Listing Page ## Usage on the Device Listing Page
![Custom Properties](/docs/img/CUSTOM_PROPERTIES/Device_Custom_Properties_vid.gif) ![Custom Properties](./img/CUSTOM_PROPERTIES/Device_Custom_Properties_vid.gif)
Visible properties (`CUSTPROP_show: true`) are displayed as interactive icons in the device listing. Each icon can perform one of the following actions based on the `CUSTPROP_type`: Visible properties (`CUSTPROP_show: true`) are displayed as interactive icons in the device listing. Each icon can perform one of the following actions based on the `CUSTPROP_type`:

View File

@@ -1,11 +1,11 @@
# A high-level description of the database structure # A high-level description of the database structure
⚠ Disclaimer: As I'm not the original author, some of the information might be inaccurate. Feel free to submit a PR to correct anything within this page or documentation in general. ⚠ Disclaimer: As I'm not the original author, some of the information might be inaccurate. Feel free to submit a PR to correct anything within this page or documentation in general.
The MAC address is used as a foreign key in most cases. The MAC address is used as a foreign key in most cases.
## 🔍Tables overview ## 🔍Tables overview
| Table name | Description | Sample data | | Table name | Description | Sample data |
|----------------------|----------------------| ----------------------| |----------------------|----------------------| ----------------------|
@@ -23,15 +23,15 @@
[screen1]: /docs/img/DATABASE/CurrentScan.png [screen1]: ./img/DATABASE/CurrentScan.png
[screen2]: /docs/img/DATABASE/Devices.png [screen2]: ./img/DATABASE/Devices.png
[screen4]: /docs/img/DATABASE/Events.png [screen4]: ./img/DATABASE/Events.png
[screen6]: /docs/img/DATABASE/Online_History.png [screen6]: ./img/DATABASE/Online_History.png
[screen7]: /docs/img/DATABASE/Parameters.png [screen7]: ./img/DATABASE/Parameters.png
[screen10]: /docs/img/DATABASE/Plugins_Events.png [screen10]: ./img/DATABASE/Plugins_Events.png
[screen11]: /docs/img/DATABASE/Plugins_History.png [screen11]: ./img/DATABASE/Plugins_History.png
[screen12]: /docs/img/DATABASE/Plugins_Language_Strings.png [screen12]: ./img/DATABASE/Plugins_Language_Strings.png
[screen13]: /docs/img/DATABASE/Plugins_Objects.png [screen13]: ./img/DATABASE/Plugins_Objects.png
[screen15]: /docs/img/DATABASE/Sessions.png [screen15]: ./img/DATABASE/Sessions.png
[screen16]: /docs/img/DATABASE/Settings.png [screen16]: ./img/DATABASE/Settings.png

View File

@@ -4,12 +4,12 @@
If a Plugin supplies data to the main app it's doine either vie a SQL query or via a script that updates the `last_result.log` file in the plugin folder (`front/plugins/<plugin>`). If a Plugin supplies data to the main app it's doine either vie a SQL query or via a script that updates the `last_result.log` file in the plugin folder (`front/plugins/<plugin>`).
For a more in-depth overview on how plugins work check the [Plugins development docs](https://github.com/jokob-sk/NetAlertX/blob/main/front/plugins/README.md). For a more in-depth overview on how plugins work check the [Plugins development docs](https://github.com/jokob-sk/NetAlertX/blob/main/docs/PLUGINS.md).
### Prerequisites ### Prerequisites
- Make sure you read and followed the specific plugin setup instructions. - Make sure you read and followed the specific plugin setup instructions.
- Ensure you have [debug enabled (see More Logging)](https://github.com/jokob-sk/NetAlertX/blob/main/docs/DEBUG_TIPS.md#1-more-logging-) - Ensure you have [debug enabled (see More Logging)](./DEBUG_TIPS.md)
### Potential issues ### Potential issues
@@ -75,7 +75,7 @@ In the above output notice the section logging how many events are produced by t
These values, if formatted correctly, will also show up in the UI: These values, if formatted correctly, will also show up in the UI:
![Plugins table](/docs/img/DEBUG_PLUGINS/plugin_objects_pihole.png) ![Plugins table](./img/DEBUG_PLUGINS/plugin_objects_pihole.png)
### Sharing application state ### Sharing application state

View File

@@ -2,14 +2,13 @@
Please follow tips 1 - 4 to get a more detailed error. Please follow tips 1 - 4 to get a more detailed error.
## 1. More Logging 📃 ## 1. More Logging
When debugging an issue always set the highest log level: When debugging an issue always set the highest log level:
`LOG_LEVEL='trace'` `LOG_LEVEL='trace'`
## 2. Surfacing errors when container restarts
## 2. Surfacing errors when container restarts 🔁
Start the container via the **terminal** with a command similar to this one: Start the container via the **terminal** with a command similar to this one:
@@ -25,7 +24,7 @@ docker run --rm --network=host \
> ⚠ Please note, don't use the `-d` parameter so you see the error when the container crashes. Use this error in your issue description. > ⚠ Please note, don't use the `-d` parameter so you see the error when the container crashes. Use this error in your issue description.
## 3. Check the _dev image and open issues ## 3. Check the _dev image and open issues
If possible, check if your issue got fixed in the `_dev` image before opening a new issue. The container is: If possible, check if your issue got fixed in the `_dev` image before opening a new issue. The container is:
@@ -35,7 +34,7 @@ If possible, check if your issue got fixed in the `_dev` image before opening a
Please also search [open issues](https://github.com/jokob-sk/NetAlertX/issues). Please also search [open issues](https://github.com/jokob-sk/NetAlertX/issues).
## 4. Disable restart behavior 🛑 ## 4. Disable restart behavior
To prevent a Docker container from automatically restarting in a Docker Compose file, specify the restart policy as `no`: To prevent a Docker container from automatically restarting in a Docker Compose file, specify the restart policy as `no`:
@@ -60,39 +59,6 @@ Sometimes specific log sections are needed to debug issues. The Devices and Curr
5. Open a new issue and post (redacted) output into the issue description (or send to the netalertx@gmail.com email if sensitive data present). 5. Open a new issue and post (redacted) output into the issue description (or send to the netalertx@gmail.com email if sensitive data present).
6. Please set `LOG_LEVEL` to `debug` or lower. 6. Please set `LOG_LEVEL` to `debug` or lower.
## 📃Common issues ## Common issues
### Permissions See [Common issues](./COMMON_ISSUES.md) for details.
* If facing issues (AJAX errors, can't write to DB, empty screen, etc,) make sure permissions are set correctly, and check the logs under `/app/log`.
* To solve permission issues you can try setting the owner and group of the `app.db` by executing the following on the host system: `docker exec netalertx chown -R www-data:www-data /app/db/app.db`.
* If still facing issues, try to map the app.db file (⚠ not folder) to `:/app/db/app.db` (see [docker-compose Examples](https://github.com/jokob-sk/NetAlertX/blob/main/dockerfiles/README.md#-docker-composeyml-examples) 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.
### Invalid JSON
Check the [Invalid JSON errors debug help](/docs/DEBUG_INVALID_JSON.md) docs on how to proceed.
### sudo execution failing (e.g.: on arpscan) on a Raspberry Pi 4
> sudo: unexpected child termination condition: 0
Resolution based on [this issue](https://github.com/linuxserver/docker-papermerge/issues/4#issuecomment-1003657581)
```
wget ftp.us.debian.org/debian/pool/main/libs/libseccomp/libseccomp2_2.5.3-2_armhf.deb
sudo dpkg -i libseccomp2_2.5.3-2_armhf.deb
```
The link above will probably break in time too. Go to https://packages.debian.org/sid/armhf/libseccomp2/download to find the new version number and put that in the url.
### Only Router and own device show up
Make sure that the subnet and interface in SCAN_SUBNETS are the correct ones. If your device/NAS has multiple ethernet ports, you probably need to change eth0 to something else!

View File

@@ -1,14 +1,18 @@
# 🖊 Multi-editing via the UI # Editing multiple devices at once
NetAlertX allows you to mass-edit devices via a CSV export and import feature, or directly in the UI.
## UI multi edit
> [!NOTE] > [!NOTE]
> Make sure you have your backups saved and restorable before doing any mass edits. Check [Backup strategies](/docs/BACKUPS.md). > Make sure you have your backups saved and restorable before doing any mass edits. Check [Backup strategies](./BACKUPS.md).
You can select devices in the _Devices_ view by selecting devices to edit and then clicking the _Multi-edit_ button or via the _Maintenance_ > _Multi-Edit_ section. You can select devices in the _Devices_ view by selecting devices to edit and then clicking the _Multi-edit_ button or via the _Maintenance_ > _Multi-Edit_ section.
![Maintenance > Multi-edit](/docs/img/DEVICES_BULK_EDITING/MULTI-EDIT.gif) ![Maintenance > Multi-edit](./img/DEVICES_BULK_EDITING/MULTI-EDIT.gif)
# 📝Bulk-edit devices via CSV Export/Import ## CSV bulk edit
> [!NOTE] > [!NOTE]
> As always, backup everything, just in case. > As always, backup everything, just in case.
@@ -17,17 +21,19 @@ You can select devices in the _Devices_ view by selecting devices to edit and th
2. A `devices.csv` is generated in the `/config` folder 2. A `devices.csv` is generated in the `/config` folder
3. Edit the `devices.csv` file however you like. 3. Edit the `devices.csv` file however you like.
![Maintenance > CSV Export](/docs/img/DEVICES_BULK_EDITING/MAINTENANCE_CSV_EXPORT.png) ![Maintenance > CSV Export](./img/DEVICES_BULK_EDITING/MAINTENANCE_CSV_EXPORT.png)
> [!NOTE] > [!NOTE]
> The file containing a list of Devices including the Network relationships between Network Nodes and connected devices. You can also trigger this by acessing this URL: `<your netalertx url>/php/server/devices.php?action=ExportCSV` or via the `CSV Backup` plugin. (💡 You can schedule this) > The file containing a list of Devices including the Network relationships between Network Nodes and connected devices. You can also trigger this by acessing this URL: `<your netalertx url>/php/server/devices.php?action=ExportCSV` or via the `CSV Backup` plugin. (💡 You can schedule this)
![Settings > CSV Backup](/docs/img/DEVICES_BULK_EDITING/CSV_BACKUP_SETTINGS.png) ![Settings > CSV Backup](./img/DEVICES_BULK_EDITING/CSV_BACKUP_SETTINGS.png)
### File encoding format
> [!NOTE] > [!NOTE]
> Keep Linux line endings (suggested editors: Nano, Notepad++) > Keep Linux line endings (suggested editors: Nano, Notepad++)
![Nodepad++ line endings](/docs/img/DEVICES_BULK_EDITING/NOTEPAD++.png) ![Nodepad++ line endings](./img/DEVICES_BULK_EDITING/NOTEPAD++.png)

View File

@@ -3,4 +3,4 @@
This set of settings allows you to group Devices under different views. The Archived toggle allows you to exclude a Device from most listings and notifications. This set of settings allows you to group Devices under different views. The Archived toggle allows you to exclude a Device from most listings and notifications.
![Display settings](/docs/img/DEVICE_MANAGEMENT/DeviceDetails_DisplaySettings.png) ![Display settings](./img/DEVICE_MANAGEMENT/DeviceDetails_DisplaySettings.png)

View File

@@ -2,24 +2,22 @@
The Main Info section is where most of the device identifiable information is stored and edited. Some of the information is autodetected via various plugins. Initial values for most of the fields can be specified in the `NEWDEV` plugin. The Main Info section is where most of the device identifiable information is stored and edited. Some of the information is autodetected via various plugins. Initial values for most of the fields can be specified in the `NEWDEV` plugin.
> [!NOTE] > [!NOTE]
> >
> You can multi-edit devices by selecting them in the main Devices view, from the Mainetence section, or via the CSV Export functionality under Maintenance. More info can be found in the [Devices Bulk-editing docs](https://github.com/jokob-sk/NetAlertX/blob/main/docs/DEVICES_BULK_EDITING.md). > You can multi-edit devices by selecting them in the main Devices view, from the Mainetence section, or via the CSV Export functionality under Maintenance. More info can be found in the [Devices Bulk-editing docs](./DEVICES_BULK_EDITING.md).
![Main Info](/docs/img/DEVICE_MANAGEMENT/DeviceManagement_MainInfo.png) ![Main Info](./img/DEVICE_MANAGEMENT/DeviceManagement_MainInfo.png)
## Main Info ## Main Info
- **MAC**: MAC addres of the device. Not editable, unless creating a new dummy device. - **MAC**: MAC addres of the device. Not editable, unless creating a new dummy device.
- **Last IP**: IP addres of the device. Not editable, unless creating a new dummy device. - **Last IP**: IP addres of the device. Not editable, unless creating a new dummy device.
- **Name**: Friendly device name. Autodetected via various 🆎 Name discovery [plugins](https://github.com/jokob-sk/NetAlertX/blob/main/front/plugins/README.md). - **Name**: Friendly device name. Autodetected via various 🆎 Name discovery [plugins](https://github.com/jokob-sk/NetAlertX/blob/main/docs/PLUGINS.md). The app attaches `(IP match)` if the name is discovered via an IP match and not MAC match which could mean the name could be incorrect as IPs might change.
- **Icon**: Partially autodetected. Select an existing or [add a custom icon](https://github.com/jokob-sk/NetAlertX/blob/main/docs/ICONS.md). You can also auto-apply the same icon on all devices of the same type. - **Icon**: Partially autodetected. Select an existing or [add a custom icon](./ICONS.md). You can also auto-apply the same icon on all devices of the same type.
- **Owner**: Device owner (The list is self-populated with existing owners and you can add custom values). - **Owner**: Device owner (The list is self-populated with existing owners and you can add custom values).
- **Type**: Select a device type from the dropdown list (`Smartphone`, `Tablet`, - **Type**: Select a device type from the dropdown list (`Smartphone`, `Tablet`,
`Laptop`, `TV`, `router`, etc.) or add a new device type. If you want the device to act as a **Network device** (and be able to be a network node in the Network view), select a type under Network Devices or add a new Network Device type in Settings. More information can be found in the [Network Setup docs](https://github.com/jokob-sk/NetAlertX/blob/main/docs/NETWORK_TREE.md). `Laptop`, `TV`, `router`, etc.) or add a new device type. If you want the device to act as a **Network device** (and be able to be a network node in the Network view), select a type under Network Devices or add a new Network Device type in Settings. More information can be found in the [Network Setup docs](./NETWORK_TREE.md).
- **Vendor**: The manufacturing vendor. Automatically updated by NetAlertX when empty or unknown, can be edited. - **Vendor**: The manufacturing vendor. Automatically updated by NetAlertX when empty or unknown, can be edited.
- **Group**: Select a group (`Always on`, `Personal`, `Friends`, etc.) or type - **Group**: Select a group (`Always on`, `Personal`, `Friends`, etc.) or type
your own Group name. your own Group name.
@@ -34,11 +32,11 @@ The Main Info section is where most of the device identifiable information is st
You can create dummy devices from the Devices listing screen. You can create dummy devices from the Devices listing screen.
![Create Dummy Device](/docs/img/DEVICE_MANAGEMENT/Devices_CreateDummyDevice.png) ![Create Dummy Device](./img/DEVICE_MANAGEMENT/Devices_CreateDummyDevice.png)
The **MAC** field and the **Last IP** field will then become editable. The **MAC** field and the **Last IP** field will then become editable.
![Save Dummy Device](/docs/img/DEVICE_MANAGEMENT/DeviceEdit_SaveDummyDevice.png) ![Save Dummy Device](./img/DEVICE_MANAGEMENT/DeviceEdit_SaveDummyDevice.png)
> [!NOTE] > [!NOTE]

View File

@@ -3,6 +3,27 @@
>[!NOTE] >[!NOTE]
> Replace `/development` with the path where your code files will be stored. The default container name is `netalertx` so there might be a conflict with your running containers. > Replace `/development` with the path where your code files will be stored. The default container name is `netalertx` so there might be a conflict with your running containers.
### Development Guidelines
**Priority Order (Highest to Lowest):**
1. 🔼 Fixing core bugs that lack workarounds.
2. 🔵 Adding core functionality that unlocks other features (e.g., plugins).
3. 🔵 Refactoring to enable faster development.
4. 🔽 UI improvements (PRs welcome).
💡 **Design Philosophy:**
Focus on core functionality and integrate with existing tools rather than reinventing the wheel.
Examples:
- Using **Apprise** for notifications instead of implementing multiple separate gateways.
- Implementing **regex-based validation** instead of one-off validation for each setting.
📌 **Note on UI requests:**
- UI changes have lower priority due to framework limitations and mobile support constraints.
- PRs are welcome, but **keep them small & focused**.
## 1. Download the code: ## 1. Download the code:
- `mkdir /development` - `mkdir /development`
@@ -58,7 +79,7 @@ Most code changes can be tetsed without rebuilding the container. When working o
1. You can usually restart the backend via Maintenance > Logs > Restart server 1. You can usually restart the backend via Maintenance > Logs > Restart server
![image](/docs/img/DEV_ENV_SETUP/Maintenance_Logs_Restart_server.png) ![image](./img/DEV_ENV_SETUP/Maintenance_Logs_Restart_server.png)
2. If above doesn't work, SSH into the container and kill & restart the main script loop 2. If above doesn't work, SSH into the container and kill & restart the main script loop
@@ -67,4 +88,27 @@ Most code changes can be tetsed without rebuilding the container. When working o
3. If none of the above work, restart the docker image. This is usually the last resort as sometimes the Docker engine becomes unresponsive and the whole engine needs to be restarted. 3. If none of the above work, restart the docker image. This is usually the last resort as sometimes the Docker engine becomes unresponsive and the whole engine needs to be restarted.
## Contributing & Pull Requests
**Before submitting a PR, please ensure:**
✔ Changes are **backward-compatible** with existing installs.
✔ No unnecessary changes are made.
✔ New features are **reusable**, not narrowly scoped.
✔ Features are implemented via **plugins** if possible.
### Mandatory Test Cases
- Fresh install (no DB/config).
- Existing DB/config compatibility.
- Notification testing:
- Email
- Apprise (e.g., Telegram)
- Webhook (e.g., Discord)
- MQTT (e.g., Home Assistant)
- Updating Settings and their persistence.
- Updating a Device
- Plugin functionality.
- Error log inspection.

View File

@@ -99,30 +99,3 @@ DEV_LOCATION=/path/to/local/source/code
``` ```
To run the container execute: `sudo docker-compose --env-file /path/to/.env up` 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 `netalertx_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
netalertx:
# use the below line if you want to test the latest dev image
# image: "jokobsk/netalertx-dev:latest"
image: jokobsk/netalertx
ports:
- "80:20211/tcp"
environment:
- TZ=Europe/Vienna
networks:
local:
ipv4_address: 192.168.1.2
restart: unless-stopped
volumes:
- netalertx_db:/app/db
- ./netalertx/:/app/config/
# (API: OPTION 1) use for performance
- type: tmpfs
target: /app/api
# (API: OPTION 2) use when debugging issues
# - local/path/api:/app/api
```

View File

@@ -5,37 +5,19 @@
> ``` > ```
> docker run -d --rm --network=host \ > docker run -d --rm --network=host \
> -e TZ=Europe/Berlin \ > -e TZ=Europe/Berlin \
> -e PUID=200 -e PGID=200 \
> -e PORT=20211 \ > -e PORT=20211 \
> jokobsk/netalertx:latest > jokobsk/netalertx:latest
> ``` > ```
NetAlertX runs on an Nginx web server. On Alpine Linux, Nginx operates as the `nginx` user (user ID 101, group ID 82 - `www-data`). Consequently, files accessed or written by the NetAlertX application are owned by `nginx:www-data`. NetAlertX runs on an Nginx web server. On Alpine Linux, Nginx operates as the `nginx` user (if PUID and GID environment variables are not specified, nginx user UID will be set to 102, and its supplementary group `www-data` ID to 82). Consequently, files accessed or written by the NetAlertX application are owned by `nginx:www-data`.
Upon starting, NetAlertX changes the ownership of files on the host system mapped to `/app/config` and `/app/db` in the container to `nginx:www-data`. This ensures that Nginx can access and write to these files. Since the user in the Docker container is mapped to a user on the host system by ID:GID, the files in `/app/config` and `/app/db` on the host system are owned by a user with the same ID and GID (ID 101 and GID 82). On different systems, this ID:GID may belong to different users (on Debian, the user with ID 82 is `uuidd`), or there may not be a user with ID 82 at all. Upon starting, NetAlertX changes nginx user UID and www-data GID to specified values (or defaults), and the ownership of files on the host system mapped to `/app/config` and `/app/db` in the container to `nginx:www-data`. This ensures that Nginx can access and write to these files. Since the user in the Docker container is mapped to a user on the host system by ID:GID, the files in `/app/config` and `/app/db` on the host system are owned by a user with the same ID and GID (defaults are ID 102 and GID 82). On different systems, this ID:GID may belong to different users, or there may not be a group with ID 82 at all.
While this generally isn't problematic, it can cause issues for host system users needing to access these files (e.g., backup scripts). If users other than root need access to these files, it is recommended to add those users to the group with GID 82. If that group doesn't exist, it should be created. Option to set specific user UID and GID can be useful for host system users needing to access these files (e.g., backup scripts).
### Permissions Table for Individual Folders ### Permissions Table for Individual Folders
| Folder | User | User ID | Group | Group ID | Permissions | Notes | | Folder | User | User ID | Group | Group ID | Permissions | Notes |
|----------------|--------|---------|-----------|----------|-------------|---------------------------------------------------------------------| |----------------|--------|---------|-----------|----------|-------------|---------------------------------------------------------------------|
| `/app/config` | nginx | 101 | www-data | 82 | rwxr-xr-x | Ensure `nginx` can read/write; other users can read if in `www-data` | | `/app/config` | nginx | PUID (default 102) | www-data | PGID (default 82) | rwxr-xr-x | Ensure `nginx` can read/write; other users can read if in `www-data` |
| `/app/db` | nginx | 101 | www-data | 82 | rwxr-xr-x | Same as above | | `/app/db` | nginx | PUID (default 102) | www-data | PGID (default 82) | rwxr-xr-x | Same as above |
### Steps to Add Users to Group
1. **Check if group exists:**
```sh
getent group www-data
```
2. **Create group if it does not exist:**
```sh
sudo groupadd -g 82 www-data
```
3. **Add user to group:**
```sh
sudo usermod -aG www-data <username>
```
Replace `<username>` with the actual username that requires access.

View File

@@ -1,4 +1,4 @@
# 🖼 Frontend development # Frontend development
This page contains tips for frontend development when extending NetAlertX. Guiding principles are: This page contains tips for frontend development when extending NetAlertX. Guiding principles are:

View File

@@ -2,6 +2,9 @@
NetAlertX comes with MQTT support, allowing you to show all detected devices as devices in Home Assistant. It also supplies a collection of stats, such as number of online devices. NetAlertX comes with MQTT support, allowing you to show all detected devices as devices in Home Assistant. It also supplies a collection of stats, such as number of online devices.
> [!TIP]
> You can install NetAlertX also as a Home Assistant addon [![Home Assistant](https://img.shields.io/badge/Repo-blue?logo=home-assistant&style=for-the-badge&color=0aa8d2&logoColor=fff&label=Add)](https://my.home-assistant.io/redirect/supervisor_add_addon_repository/?repository_url=https%3A%2F%2Fgithub.com%2Falexbelgium%2Fhassio-addons) via the [alexbelgium/hassio-addons](https://github.com/alexbelgium/hassio-addons/). This is only possible if you run a supervised instance of Home Assistant. If not, you can still run NetAlertX in a separate Docker container and follow this guide to configure MQTT.
## ⚠ Note ## ⚠ Note
- Please note that discovery takes about ~10s per device. - Please note that discovery takes about ~10s per device.
@@ -18,15 +21,17 @@ NetAlertX comes with MQTT support, allowing you to show all detected devices as
2. Configure a user name and password on your broker. 2. Configure a user name and password on your broker.
3. Note down the following details that you will need to configure NetAlertX: 3. Note down the following details that you will need to configure NetAlertX:
- MQTT host url (usually your Home Assistant IP)
- MQTT broker port - MQTT host url (usually your Home Assistant IP)
- User - MQTT broker port
- Password - User
- Password
4. Open the _NetAlertX_ > _Settings_ > _MQTT_ settings group 4. Open the _NetAlertX_ > _Settings_ > _MQTT_ settings group
- Enable MQTT
- Fill in the details from above - Enable MQTT
- Fill in remaining settings as per description - Fill in the details from above
- Fill in remaining settings as per description
![Configuration Example][configuration] ![Configuration Example][configuration]
@@ -37,9 +42,9 @@ NetAlertX comes with MQTT support, allowing you to show all detected devices as
| ![Screen 3][list] | ![Screen 4][overview] | | ![Screen 3][list] | ![Screen 4][overview] |
[configuration]: /docs/img/HOME_ASISSTANT/HomeAssistant-Configuration.png "configuration" [configuration]: ./img/HOME_ASISSTANT/HomeAssistant-Configuration.png "configuration"
[sensors]: /docs/img/HOME_ASISSTANT/HomeAssistant-Device-as-Sensors.png "sensors" [sensors]: ./img/HOME_ASISSTANT/HomeAssistant-Device-as-Sensors.png "sensors"
[history]: /docs/img/HOME_ASISSTANT/HomeAssistant-Device-Presence-History.png "history" [history]: ./img/HOME_ASISSTANT/HomeAssistant-Device-Presence-History.png "history"
[list]: /docs/img/HOME_ASISSTANT/HomeAssistant-Devices-List.png "list" [list]: ./img/HOME_ASISSTANT/HomeAssistant-Devices-List.png "list"
[overview]: /docs/img/HOME_ASISSTANT/HomeAssistant-Overview-Card.png "overview" [overview]: ./img/HOME_ASISSTANT/HomeAssistant-Overview-Card.png "overview"

View File

@@ -1,8 +1,8 @@
## Icons overview ## Icons overview
Icons are used to visually distinguish devices in the app in most of the device listing tables and the [network tree](/docs/NETWORK_TREE.md). Icons are used to visually distinguish devices in the app in most of the device listing tables and the [network tree](./NETWORK_TREE.md).
![Raspberry Pi with a brand icon](/docs/img/ICONS/devices-icons.png) ![Raspberry Pi with a brand icon](./img/ICONS/devices-icons.png)
### Icons Support ### Icons Support
@@ -19,26 +19,26 @@ You can assign icons individually on each device in the Details tab.
Copying the SVG (for example from [iconify.design](https://icon-sets.iconify.design/)): Copying the SVG (for example from [iconify.design](https://icon-sets.iconify.design/)):
![iconify svg](/docs/img/ICONS/iconify_design_copy_svg.png) ![iconify svg](./img/ICONS/iconify_design_copy_svg.png)
Copying the HTML code from [Font Awesome](https://fontawesome.com/search?o=r&m=free). Copying the HTML code from [Font Awesome](https://fontawesome.com/search?o=r&m=free).
![Font awesome](/docs/img/ICONS/font_awesome_copy_html.png) ![Font awesome](./img/ICONS/font_awesome_copy_html.png)
2. Navigate to the device you want to use the icon on and click the "+" icon: 2. Navigate to the device you want to use the icon on and click the "+" icon:
![preview](/docs/img/ICONS/device_add_icon.png) ![preview](./img/ICONS/device_add_icon.png)
3. Paste in the copied HTML or SVG code and click "OK": 3. Paste in the copied HTML or SVG code and click "OK":
![Paste SVG](/docs/img/ICONS/paste-svg.png) ![Paste SVG](./img/ICONS/paste-svg.png)
6. "Save" the device 6. "Save" the device
> [!NOTE] > [!NOTE]
> If you want to mass-apply an icon to all devices of the same device type (Field: Type), you can click the mass-copy button (next to the "+" button). A confirmation prompt is displayed. If you proceed, icons of all devices set to the same device type as the current device, will be overwritten with the current device's icon. > If you want to mass-apply an icon to all devices of the same device type (Field: Type), you can click the mass-copy button (next to the "+" button). A confirmation prompt is displayed. If you proceed, icons of all devices set to the same device type as the current device, will be overwritten with the current device's icon.
- The blue dropdown contains all icons already used in the app for device icons. You need to navigate away or refresh the page once you add a new icon. - The dropdown contains all icons already used in the app for device icons. You might need to navigate away or refresh the page once you add a new icon.
## 🌟 Pro Font Awesome icons ## 🌟 Pro Font Awesome icons

42
docs/INITIAL_SETUP.md Executable file
View File

@@ -0,0 +1,42 @@
# ⚙ Initial Setup
## 📁 Configuration Files
- On first run, the app generates a default `app.conf` and `app.db` if unavailable.
- Preferred method: Use the **Settings UI**.
- If the UI is inaccessible, manually edit [`app.conf`](https://github.com/jokob-sk/NetAlertX/tree/main/back) in `/app/config/`.
---
## 🖥️ Setting Up Scanners
- Define networks to scan by entering accessible subnets.
- Default plugin: **ARPSCAN** → Requires at least one valid subnet + interface in `SCAN_SUBNETS`.
- 📖 [Subnet & VLAN setup guide](./SUBNETS.md) (for troubleshooting and advanced scenarios).
### 🔄 PiHole Sync
- If using **PiHole**, devices can be synced automatically.
- 📖 [PiHole configuration guide](./PIHOLE_GUIDE.md).
### 📦 Bulk Import
> [!NOTE]
> You can bulk-import devices via the [CSV import method](./DEVICES_BULK_EDITING.md).
---
## 🌍 Community Guides
- Various community-written configuration guides in **Chinese, Korean, German, French**.
- 📖 [Community Guides](./COMMUNITY_GUIDES.md)
> ⚠️ **Note:** These guides may be outdated. Always refer to the official documentation first.
---
## 🛠️ Common Issues
Before creating a new issue:
- Check if a similar issue was [already resolved](https://github.com/jokob-sk/NetAlertX/issues?q=is%3Aissue+is%3Aclosed).
- Review [common debugging tips](./DEBUG_TIPS.md).
- Check [Common Issues](./COMMON_ISSUES.md)

25
docs/INSTALLATION.md Executable file
View File

@@ -0,0 +1,25 @@
# Installation
## Installation options
NetAlertX can be installed several ways. The best supported option is Docker, followed by a supervised the Home Assistant instance, as an Unraid app and lastly on bare metal.
- [[Installation] Docker (recommended)](https://github.com/jokob-sk/NetAlertX/blob/main/dockerfiles/README.md)
- [[Installation] Home Assistant](https://github.com/alexbelgium/hassio-addons/tree/master/netalertx)
- [[Installation] Unraid App](https://unraid.net/community/apps)
- [[Installation] Bare metal (experimental - looking for maintainers)](https://github.com/jokob-sk/NetAlertX/blob/main/docs/HW_INSTALL.md)
## Help
If facing issues, please spend a few minutes seraching.
- Check [common issues](./COMMON_ISSUES.md)
- Have a look at [Community guides](./COMMUNITY_GUIDES.md)
- [Search closed or open issues or discussions](https://github.com/jokob-sk/NetAlertX/issues?q=is%3Aissue)
- Check [Discord](https://discord.gg/NczTUTWyRr)
> [!NOTE]
> If you can't find a solution anywhere, ask in Discord if you think it's a quick question, otherwise open a new [issue](https://github.com/jokob-sk/NetAlertX/issues/new?template=setup-help.yml). Please fill in as much as possible to speed up the help process.
>

View File

@@ -6,7 +6,7 @@
## STEPS: ## STEPS:
> [!TIP] > [!TIP]
> In short: The application will auto-migrate the database, config, and all device information. A ticker message on top will be displayed until you update your docker mount points. It's always good to have a [backup strategy](https://github.com/jokob-sk/NetAlertX/blob/main/docs/BACKUPS.md) in place. > In short: The application will auto-migrate the database, config, and all device information. A ticker message on top will be displayed until you update your docker mount points. It's always good to have a [backup strategy](./BACKUPS.md) in place.
1. Backup your current config and database (optional `devices.csv` to have a backup) (See bellow tip if facing issues) 1. Backup your current config and database (optional `devices.csv` to have a backup) (See bellow tip if facing issues)
2. Stop the container 2. Stop the container
@@ -38,7 +38,7 @@ The application installation folder in the docker container has changed from `/h
> [!NOTE] > [!NOTE]
> The application uses symlinks linking the old db and config locations to the new ones, so data loss should not occur. [Backup strategies](https://github.com/jokob-sk/NetAlertX/blob/main/docs/BACKUPS.md) are still recommended to backup your setup. > The application uses symlinks linking the old db and config locations to the new ones, so data loss should not occur. [Backup strategies](./BACKUPS.md) are still recommended to backup your setup.
# Examples # Examples

View File

@@ -2,7 +2,7 @@
Make sure you have a root device with the MAC `Internet` (No other MAC addresses are currently supported as the root node) set to a network device type (e.g.: **Type**:`Router`). Make sure you have a root device with the MAC `Internet` (No other MAC addresses are currently supported as the root node) set to a network device type (e.g.: **Type**:`Router`).
> 💡 Tip: You can add dummy devices via the [Create dummy device](https://github.com/jokob-sk/NetAlertX/blob/main/docs/DEVICE_MANAGEMENT.md#dummy-devices) button in the Devices listing page. > 💡 Tip: You can add dummy devices via the [Create dummy device](./DEVICE_MANAGEMENT.md#dummy-devices) button in the Devices listing page.
> 💡 Tip: Export your configuration of the Network and Devices once in a while via the Export CSV feature under **Maintenance** -> **Backup/Restore** -> **CSV Export**. > 💡 Tip: Export your configuration of the Network and Devices once in a while via the Export CSV feature under **Maintenance** -> **Backup/Restore** -> **CSV Export**.
@@ -17,7 +17,7 @@ Make sure you have a root device with the MAC `Internet` (No other MAC addresses
> [!NOTE] > [!NOTE]
> >
> [Bulk-edit devices](/docs/DEVICES_BULK_EDITING.md) by using the _CSV Export_ functionality in the _Maintenance_ section. You can use this to fix `Internet` node assignment issues. > [Bulk-edit devices](./DEVICES_BULK_EDITING.md) by using the _CSV Export_ functionality in the _Maintenance_ section. You can use this to fix `Internet` node assignment issues.
## 🔍Detailed example: ## 🔍Detailed example:
@@ -27,7 +27,7 @@ In this example you will setup a device named `rapberrypi` as a `Switch` in our
- Go to the `Devices` (1) page: - Go to the `Devices` (1) page:
![Device details](/docs/img/NETWORK_TREE/Device_Details_Network_Type.png) ![Device details](./img/NETWORK_TREE/Device_Details_Network_Type.png)
- In the (2) `Details` tab navigate to the the `Type` (3) dropdown and select the type `Switch` (4). - In the (2) `Details` tab navigate to the the `Type` (3) dropdown and select the type `Switch` (4).
@@ -42,7 +42,7 @@ In this example you will setup a device named `rapberrypi` as a `Switch` in our
- Navigate to your `Network` (1) page: - Navigate to your `Network` (1) page:
![Network page](/docs/img/NETWORK_TREE/Network_Page.png) ![Network page](./img/NETWORK_TREE/Network_Page.png)
- Notice the newly added `raspberrypi` (2) tab which now represents a network node, also showing up in the tree (3). - 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) - 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)
@@ -52,7 +52,7 @@ In this example you will setup a device named `rapberrypi` as a `Switch` in our
- After clicking the `Assign` button in the previous section, the `(AppleTV)` (1) device is now connected to our `raspberrypi` (2). - After clicking the `Assign` button in the previous section, the `(AppleTV)` (1) device is now connected to our `raspberrypi` (2).
![Network page with 2 levels](/docs/img/NETWORK_TREE/Network_Page_2_Levels.png) ![Network page with 2 levels](./img/NETWORK_TREE/Network_Page_2_Levels.png)
- You can see the `raspberrypi` represents the Network node type `Switch` (3) - 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). - The `(AppleTV)` to `raspberrypi` connection is also displayed in the table of `Connected devices` (4).

View File

@@ -9,11 +9,11 @@ There are 4 ways how to influence notifications:
> [!NOTE] > [!NOTE]
> It's recommended to use the same schedule interval for all plugins responsible for scanning devices, otherwise false positives might be reported if different devices are discovered by different plugins. Check the **Settings** > **Enabled settings** section for a warning: > It's recommended to use the same schedule interval for all plugins responsible for scanning devices, otherwise false positives might be reported if different devices are discovered by different plugins. Check the **Settings** > **Enabled settings** section for a warning:
> ![Schedules out-of-sync](/docs/img/NOTIFICATIONS/Schedules_out-of-sync.png) > ![Schedules out-of-sync](./img/NOTIFICATIONS/Schedules_out-of-sync.png)
## Device settings 💻 ## Device settings 💻
![Device notification settings](/docs/img/NOTIFICATIONS/Device-notification-settings.png) ![Device notification settings](./img/NOTIFICATIONS/Device-notification-settings.png)
There are 4 settings on the device for influencing notifications. You can: There are 4 settings on the device for influencing notifications. You can:
@@ -23,7 +23,7 @@ There are 4 settings on the device for influencing notifications. You can:
## Plugin settings 🔌 ## Plugin settings 🔌
![Plugin notification settings](/docs/img/NOTIFICATIONS/Plugin-notification-settings.png) ![Plugin notification settings](./img/NOTIFICATIONS/Plugin-notification-settings.png)
On almost all plugins there are 2 core settings, `<plugin>_WATCH` and `<plugin>_REPORT_ON`. On almost all plugins there are 2 core settings, `<plugin>_WATCH` and `<plugin>_REPORT_ON`.
@@ -34,7 +34,7 @@ Click the **Read more in the docs.** Link at the top of each plugin to get more
## Global settings ⚙ ## Global settings ⚙
![Global notification settings](/docs/img/NOTIFICATIONS/Global-notification-settings.png) ![Global notification settings](./img/NOTIFICATIONS/Global-notification-settings.png)
In Notification Processing settings, you can specify blanket rules. These allow you to specify exceptions to the Plugin and Device settings and will override those. In Notification Processing settings, you can specify blanket rules. These allow you to specify exceptions to the Plugin and Device settings and will override those.
@@ -45,7 +45,7 @@ In Notification Processing settings, you can specify blanket rules. These allow
## Ignoring devices 🔕 ## Ignoring devices 🔕
![Ignoring new devices](/docs/img/NOTIFICATIONS/NEWDEV_ignores.png) ![Ignoring new devices](./img/NOTIFICATIONS/NEWDEV_ignores.png)
You can completely ignore detected devices globally. This could be because your instance detects docker containers, you want to ignore devices from a specific manufacturer via MAC rules or you want to ignore devices on a specific IP range. You can completely ignore detected devices globally. This could be because your instance detects docker containers, you want to ignore devices from a specific manufacturer via MAC rules or you want to ignore devices on a specific IP range.

View File

@@ -6,7 +6,7 @@ Most performance issues are caused by a big database or large log files. Enablin
You can always check the size of your database and database tables under the Maintenance page. You can always check the size of your database and database tables under the Maintenance page.
![Db size check](/docs/img/PERFORMANCE/db_size_check.png) ![Db size check](./img/PERFORMANCE/db_size_check.png)
> [!NOTE] > [!NOTE]
> For around 100 devices the database should be approximately `50MB` and none of the entries (rows) should exceed the value of `10 000` on a healthy system. These numbers will depend on your network activity and settings. > For around 100 devices the database should be approximately `50MB` and none of the entries (rows) should exceed the value of `10 000` on a healthy system. These numbers will depend on your network activity and settings.

View File

@@ -1,10 +1,10 @@
# Integration with PiHole # Integration with PiHole
NetAlertX comes with 2 plugins suitable for integarting with your existing PiHole instace. One plugin is using a direct SQLite DB connection, the other leverages the DHCP.leases file generated by PiHole. You can combine both approaches and also supplement it with other [plugins](/front/plugins/README.md). NetAlertX comes with 2 plugins suitable for integarting with your existing PiHole instace. One plugin is using a direct SQLite DB connection, the other leverages the DHCP.leases file generated by PiHole. You can combine both approaches and also supplement it with other [plugins](/docs/PLUGINS.md).
## Approach 1: `DHCPLSS` Plugin - Import devices from the PiHole DHCP leases file ## Approach 1: `DHCPLSS` Plugin - Import devices from the PiHole DHCP leases file
![DHCPLSS sample settings](/docs/img/PIHOLE_GUIDE/DHCPLSS_pihole_settings.png) ![DHCPLSS sample settings](./img/PIHOLE_GUIDE/DHCPLSS_pihole_settings.png)
### Settings ### Settings
@@ -25,7 +25,7 @@ Check the [DHCPLSS plugin readme](https://github.com/jokob-sk/NetAlertX/tree/mai
## Approach 2: `PIHOLE` Plugin - Import devices directly from the PiHole database ## Approach 2: `PIHOLE` Plugin - Import devices directly from the PiHole database
![DHCPLSS sample settings](/docs/img/PIHOLE_GUIDE/PIHOLE_settings.png) ![DHCPLSS sample settings](./img/PIHOLE_GUIDE/PIHOLE_settings.png)
| Setting | Description | Recommended value | | Setting | Description | Recommended value |
| :------------- | :------------- | :-------------| | :------------- | :------------- | :-------------|
@@ -42,4 +42,4 @@ Check the [PiHole plugin readme](https://github.com/jokob-sk/NetAlertX/tree/main
| `:/etc/pihole/pihole-FTL.db` | PiHole's `pihole-FTL.db` database file. | | `:/etc/pihole/pihole-FTL.db` | PiHole's `pihole-FTL.db` database file. |
Check out other [plugins](/front/plugins/README.md) that can help you discover more about your network or check how to scan [Remote networks](/docs/REMOTE_NETWORKS.md). Check out other [plugins](/docs/PLUGINS.md) that can help you discover more about your network or check how to scan [Remote networks](./REMOTE_NETWORKS.md).

112
docs/PLUGINS.md Executable file
View File

@@ -0,0 +1,112 @@
# 🔌 Plugins
NetAlertX supports additional plugins to extend its functionality, each with its own settings and options. Plugins can be loaded via the General -> `LOADED_PLUGINS` setting. For custom plugin development, refer to the [Plugin development guide](/docs/PLUGINS_DEV.md).
>[!NOTE]
> Please check this [Plugins debugging guide](https://github.com/jokob-sk/NetAlertX/blob/main/docs/DEBUG_PLUGINS.md) and the corresponding Plugin documentation in the below table if you are facing issues.
## ⚡ Quick start
> [!TIP]
> You can load additional Plugins via the General -> `LOADED_PLUGINS` setting.
1. Pick your `🔍 dev scanner` plugin (e.g. `ARPSCAN` or `NMAPDEV`), or import devices into the application with an `📥 importer` plugin. (See **✅Enabling plugins** below)
2. Pick a `▶️ publisher` plugin, if you want to send notifications. If you don't see a publisher you'd like to use, look at the [📚_publisher_apprise](/front/plugins/_publisher_apprise/) plugin which is a proxy for over 80 notification services.
3. Setup your [Network topology diagram](/docs/NETWORK_TREE.md)
4. Fine-tune [Notifications](/docs/NOTIFICATIONS.md)
5. [Backup your setup](/docs/BACKUPS.md)
6. Contribute and [Create custom plugins](/docs/PLUGINS_DEV.md)
## 📑 Available Plugins
Device-detecting plugins insert values into the `CurrentScan` database table. The plugins that are not required are safe to ignore, however, it makes sense to have at least some device-detecting plugins enabled, such as `ARPSCAN` or `NMAPDEV`.
| ID | Type | Description | Features | Required | Data source | Detailed docs |
|---------------|---------|--------------------------------------------|----------|----------|--------------|---------------------------------------------------------------------|
| `APPRISE` | ▶️ | Apprise notification proxy | | | Script | [_publisher_apprise](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/_publisher_apprise/) |
| `ARPSCAN` | 🔍 | ARP-scan on current network | | | Script | [arp_scan](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/arp_scan/) |
| `AVAHISCAN` | 🆎 | Avahi (mDNS-based) name resolution | | | Script | [avahi_scan](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/avahi_scan/) |
| `ASUSWRT` | 🔍 | Import connected devices from AsusWRT | | | Script | [asuswrt_import](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/asuswrt_import/) |
| `CSVBCKP` | ⚙ | CSV devices backup | | | Script | [csv_backup](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/csv_backup/) |
| `CUSTPROP` | ⚙ | Managing custom device properties values | | Yes | Template | [custom_props](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/custom_props/) |
| `DBCLNP` | ⚙ | Database cleanup | | Yes* | Script | [db_cleanup](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/db_cleanup/) |
| `DDNS` | ⚙ | DDNS update | | | Script | [ddns_update](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/ddns_update/) |
| `DHCPLSS` | 🔍/📥/🆎| Import devices from DHCP leases | | | Script | [dhcp_leases](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/dhcp_leases/) |
| `DHCPSRVS` | ♻ | DHCP servers | | | Script | [dhcp_servers](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/dhcp_servers/) |
| `FREEBOX` | 🔍/♻/🆎| Pull data and names from Freebox/Iliadbox | | | Script | [freebox](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/freebox/) |
| `ICMP` | 🔍 | ICMP (ping) status checker | | | Script | [icmp_scan](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/icmp_scan/) |
| `INTRNT` | 🔍 | Internet IP scanner | | | Script | [internet_ip](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/internet_ip/) |
| `INTRSPD` | ♻ | Internet speed test | | | Script | [internet_speedtest](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/internet_speedtest/) |
| `IPNEIGH` | 🔍 | Scan ARP (IPv4) and NDP (IPv6) tables | | | Script | [ipneigh](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/ipneigh/) |
| `LUCIRPC` | 🔍 | Import connected devices from OpenWRT | | | Script | [luci_import](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/luci_import/) |
| `MAINT` | ⚙ | Maintenance of logs, etc. | | | Script | [maintenance](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/maintenance/) |
| `MQTT` | ▶️ | MQTT for synching to Home Assistant | | | Script | [_publisher_mqtt](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/_publisher_mqtt/) |
| `NBTSCAN` | 🆎 | Nbtscan (NetBIOS-based) name resolution | | | Script | [nbtscan_scan](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/nbtscan_scan/) |
| `NEWDEV` | ⚙ | New device template | | Yes | Template | [newdev_template](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/newdev_template/) |
| `NMAP` | ♻ | Nmap port scanning & discovery | | | Script | [nmap_scan](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/nmap_scan/) |
| `NMAPDEV` | 🔍 | Nmap dev scan on current network | | | Script | [nmap_dev_scan](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/nmap_dev_scan/) |
| `NSLOOKUP` | 🆎 | NSLookup (DNS-based) name resolution | | | Script | [nslookup_scan](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/nslookup_scan/) |
| `NTFPRCS` | ⚙ | Notification processing | | Yes | Template | [notification_processing](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/notification_processing/)|
| `NTFY` | ▶️ | NTFY notifications | | | Script | [_publisher_ntfy](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/_publisher_ntfy/) |
| `OMDSDN` | 📥/🆎 | OMADA TP-Link import | 🖧 🔄 | | Script | [omada_sdn_imp](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/omada_sdn_imp/) |
| `PIHOLE` | 🔍/🆎/📥| Pi-hole device import & sync | | | SQLite DB | [pihole_scan](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/pihole_scan/) |
| `PUSHSAFER` | ▶️ | Pushsafer notifications | | | Script | [_publisher_pushsafer](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/_publisher_pushsafer/) |
| `PUSHOVER` | ▶️ | Pushover notifications | | | Script | [_publisher_pushover](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/_publisher_pushover/) |
| `SETPWD` | ⚙ | Set password | | Yes | Template | [set_password](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/set_password/) |
| `SMTP` | ▶️ | Email notifications | | | Script | [_publisher_email](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/_publisher_email/) |
| `SNMPDSC` | 🔍/📥 | SNMP device import & sync | | | Script | [snmp_discovery](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/snmp_discovery/) |
| `SYNC` | 🔍/⚙/📥| Sync & import from NetAlertX instances | 🖧 🔄 | Yes | Script | [sync](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/sync/) |
| `TELEGRAM` | ▶️ | Telegram notifications | | | Script | [_publisher_telegram](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/_publisher_telegram/) |
| `UI` | ♻ | UI specific settings | | Yes | Template | [ui_settings](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/ui_settings/) |
| `UNFIMP` | 🔍/📥/🆎| UniFi device import & sync | 🖧 | | Script | [unifi_import](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/unifi_import/) |
| `VNDRPDT` | ⚙ | Vendor database update | | | Script | [vendor_update](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/vendor_update/) |
| `WEBHOOK` | ▶️ | Webhook notifications | | | Script | [_publisher_webhook](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/_publisher_webhook/) |
| `WEBMON` | ♻ | Website down monitoring | | | Script | [website_monitor](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/website_monitor/) |
| `WOL` | ♻ | Automatic wake-on-lan | | | Script | [wake_on_lan](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/wake_on_lan/) |
> \* The database cleanup plugin (`DBCLNP`) is not _required_ but the app will become unusable after a while if not executed.
> ❌ marked for removal
> ⌚It's recommended to use the same schedule interval for all plugins responsible for discovering new devices.
## Plugin types
| Plugin type | Icon | Description | When to run | Required | Data source [?](/docs/PLUGINS_DEV.md) |
| -------------- | ---- | ---------------------------------------------------------------- | ----------------------------------- | -------- | ------------------------------------- |
| publisher | ▶️ | Sending notifications to services. | `on_notification` | ✖ | Script |
| dev scanner | 🔍 | Create devices in the app, manages online/offline device status. | `schedule` | ✖ | Script / SQLite DB |
| name discovery | 🆎 | Discovers names of devices via various protocols. | `before_name_updates`, `schedule` | ✖ | Script |
| importer | 📥 | Importing devices from another service. | `schedule` | ✖ | Script / SQLite DB |
| system | ⚙ | Providing core system functionality. | `schedule` / always on | ✖/✔ | Script / Template |
| other | ♻ | Other plugins | misc | ✖ | Script / Template |
## Features
| Icon | Description |
| ---- | ------------------------------------------------------------ |
| 🖧 | Auto-imports the network topology diagram |
| 🔄 | Has the option to sync some data back into the plugin source |
## ✅Enabling plugins
Plugins can be enabled via Settings, and can be disabled as needed.
1. Research which plugin you'd like to use, enable `DISCOVER_PLUGINS` and load the required plugins in Settings via the `LOADED_PLUGINS` setting.
1. Save the changes and review the Settings of the newly loaded plugins.
1. Change the `<prefix>_RUN` Setting to the recommended or custom value as per the documentation of the given setting
- If using `schedule` on a `🔍 dev scanner` plugin, make sure the schedules are the same across all `🔍 dev scanner` plugins
### Disabling, Unloading and Ignoring plugins
1. Change the `<prefix>_RUN` Setting to `disabled` if you want to disable the plugin, but keep the settings
1. If you want to speed up the application, you can unload the plugin by unselecting it in the `LOADED_PLUGINS` setting.
- Careful, once you save the Settings Unloaded plugin settings will be lost (old `app.conf` files are kept in the `/config` folder)
1. You can completely ignore plugins by placing a `ignore_plugin` file into the plugin directory. Ignored plugins won't show up in the `LOADED_PLUGINS` setting.
## 🆕 Developing new custom plugins
If you want to develop a custom plugin, please read this [Plugin development guide](/docs/PLUGINS_DEV.md).

View File

@@ -13,9 +13,9 @@ NetAlertX comes with a plugin system to feed events from third-party scripts int
### 🎥 Watch the video: ### 🎥 Watch the video:
> [!TIP] > [!TIP]
> Read this guide [Development environment setup guide](/docs/DEV_ENV_SETUP.md) to set up your local environment for development. 👩‍💻 > Read this guide [Development environment setup guide](./DEV_ENV_SETUP.md) to set up your local environment for development. 👩‍💻
[![Watch the video](/docs/img/YouTube_thumbnail.png)](https://youtu.be/cdbxlwiWhv8) [![Watch the video](./img/YouTube_thumbnail.png)](https://youtu.be/cdbxlwiWhv8)
### 📸 Screenshots ### 📸 Screenshots
@@ -126,7 +126,7 @@ You can show or hide the UI on the "Plugins" page and "Plugins" tab for a plugin
If the `data_source` is set to `script` the `CMD` setting (that you specify in the `settings` array section in the `config.json`) contains an executable Linux command, that usually generates a `last_result.<prefix>.log` file (not required if you don't import any data into the app). The `last_result.<prefix>.log` file needs to be saved in `/api/log/plugins`. If the `data_source` is set to `script` the `CMD` setting (that you specify in the `settings` array section in the `config.json`) contains an executable Linux command, that usually generates a `last_result.<prefix>.log` file (not required if you don't import any data into the app). The `last_result.<prefix>.log` file needs to be saved in `/api/log/plugins`.
> [!IMPORTANT] > [!IMPORTANT]
> A lot of the work is taken care of by the [`plugin_helper.py` library](/front/plugins/plugin_helper.py). You don't need to manage the `last_result.<prefix>.log` file if using the helper objects. Check other `script.py` of other plugins for details (The [Undicoverables plugins `script.py` file](/front/plugins/undiscoverables/script.py) is a good example). > A lot of the work is taken care of by the [`plugin_helper.py` library](/front/plugins/plugin_helper.py). You don't need to manage the `last_result.<prefix>.log` file if using the helper objects. Check other `script.py` of other plugins for details.
The content of the `last_result.<prefix>.log` file needs to contain the columns as defined in the "Column order and values" section above. The order of columns can't be changed. After every scan it should contain only the results from the latest scan/execution. The content of the `last_result.<prefix>.log` file needs to contain the columns as defined in the "Column order and values" section above. The order of columns can't be changed. After every scan it should contain only the results from the latest scan/execution.
@@ -503,7 +503,7 @@ Below are some general additional notes, when defining `params`:
#### ⚙ Setting object structure #### ⚙ Setting object structure
> [!NOTE] > [!NOTE]
> The settings flow and when Plugin specific settings are applied is described under the [Settings system](/docs/SETTINGS_SYSTEM.md). > The settings flow and when Plugin specific settings are applied is described under the [Settings system](./SETTINGS_SYSTEM.md).
Required attributes are: Required attributes are:
@@ -578,7 +578,7 @@ Each element may also have associated events (e.g., running a scan or triggering
##### Supported settings `function` values ##### Supported settings `function` values
You can have any `"function": "my_custom_name"` custom name, however, the ones listed below have a specific functionality attached to them. If you use a custom name, then the setting is mostly used as an input parameter for the `params` section. You can have any `"function": "my_custom_name"` custom name, however, the ones listed below have a specific functionality attached to them.
| Setting | Description | | Setting | Description |
| ------- | ----------- | | ------- | ----------- |
@@ -593,7 +593,7 @@ You can have any `"function": "my_custom_name"` custom name, however, the ones l
| | - "before_config_save" - run before the config is marked as saved. Useful if your plugin needs to modify the `app.conf` file. | | | - "before_config_save" - run before the config is marked as saved. Useful if your plugin needs to modify the `app.conf` file. |
| `RUN_SCHD` | (required if you include "schedule" in the above `RUN` function) Cron-like scheduling is used if the `RUN` setting is set to `schedule`. | | `RUN_SCHD` | (required if you include "schedule" in the above `RUN` function) Cron-like scheduling is used if the `RUN` setting is set to `schedule`. |
| `CMD` | (required) Specifies the command that should be executed. | | `CMD` | (required) Specifies the command that should be executed. |
| `API_SQL` | (not implemented) Generates a `table_` + `code_name` + `.json` file as per [API docs](https://github.com/jokob-sk/NetAlertX/blob/main/docs/API.md). | | `API_SQL` | (not implemented) Generates a `table_` + `code_name` + `.json` file as per [API docs](./API.md). |
| `RUN_TIMEOUT` | (optional) Specifies the maximum execution time of the script. If not specified, a default value of 10 seconds is used to prevent hanging. | | `RUN_TIMEOUT` | (optional) Specifies the maximum execution time of the script. If not specified, a default value of 10 seconds is used to prevent hanging. |
| `WATCH` | (optional) Specifies which database columns are watched for changes for this particular plugin. If not specified, no notifications are sent. | | `WATCH` | (optional) Specifies which database columns are watched for changes for this particular plugin. If not specified, no notifications are sent. |
| `REPORT_ON` | (optional) Specifies when to send a notification. Supported options are: | | `REPORT_ON` | (optional) Specifies when to send a notification. Supported options are: |
@@ -660,7 +660,7 @@ The UI will adjust how columns are displayed in the UI based on the resolvers de
| Type Definitions | | | Type Definitions | |
| `device_mac` | The value is considered to be a MAC address, and a link pointing to the device with the given MAC address is generated. | | `device_mac` | The value is considered to be a MAC address, and a link pointing to the device with the given MAC address is generated. |
| `device_ip` | The value is considered to be an IP address. A link pointing to the device with the given IP is generated. The IP is checked against the last detected IP address and translated into a MAC address, which is then used for the link itself. | | `device_ip` | The value is considered to be an IP address. A link pointing to the device with the given IP is generated. The IP is checked against the last detected IP address and translated into a MAC address, which is then used for the link itself. |
| `device_name_mac` | The value is considered to be a MAC address, and a link pointing to the device with the given IP is generated. The link label is resolved as the target device name. | | `device_name_mac` | The value is considered to be a MAC address, and a link pointing to the device with the given MAC is generated. The link label is resolved as the target device name. |
| `url` | The value is considered to be a URL, so a link is generated. | | `url` | The value is considered to be a URL, so a link is generated. |
| `textbox_save` | Generates an editable and saveable text box that saves values in the database. Primarily intended for the `UserData` database column in the `Plugins_Objects` table. | | `textbox_save` | Generates an editable and saveable text box that saves values in the database. Primarily intended for the `UserData` database column in the `Plugins_Objects` table. |
| `url_http_https` | Generates two links with the `https` and `http` prefix as lock icons. | | `url_http_https` | Generates two links with the `https` and `http` prefix as lock icons. |

View File

@@ -1,53 +1,32 @@
# Privacy & Random MAC's # Privacy & Random MAC's
<!--- --------------------------------------------------------------------- ---> <!--- --------------------------------------------------------------------- --->
The latest versions of some operating systems (IOS and Android) incorporate a Some operating systems incorporate randomize MAC addresses to improve privacy.
new & interesting functionality to improve privacy: **Random MACs**.
This functionality allows you to **hide the real 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.
**assign a random MAC** when we connect to WIFI networks.
This behavior is especially useful when connecting to WIFI's that we do not This behavior is especially useful when connecting to WIFI's that we do not know, but it **is totally useless when connecting to our own WIFI's** or known networks.
know, but it **is totally useless when connecting to our own WIFI's** or known
networks.
**I recommend disabling this operation when connecting our devices to our own **I recommend disabling this on-device functionality when connecting our devices to our own WIFI's**, this way, NetAlertX will be able to identify the device, and it will not identify it as a new device every so often (every time iOS or Android randomizes the MAC).
WIFI's**, in this way, NetAlertX will be able to identify the device, and it
will not identify it as a new device every so often (every time IOS or Android
decides to change the MAC).
**Random MACs** are recognized by the characters "2", "6", "A", or "E" as the 2nd character in the Mac address. You can disable specific prefixes to be detected as random MAC addresses by specifying the `UI_NOT_RANDOM_MAC` setting. **Random MACs** are recognized by the characters "2", "6", "A", or "E" as the 2nd character in the Mac address. You can disable specific prefixes to be detected as random MAC addresses by specifying the `UI_NOT_RANDOM_MAC` setting.
## Windows
![windows](./img/RANDOM_MAC/windows_random_mac.png)
- [How to Disable MAC Randomization on Windows](https://www.androidphonesoft.com/blog/how-to-turn-off-random-mac-address-windows-10/)
## IOS ## IOS
![ios][ios]
![ios](./img/RANDOM_MAC/ios_random_mac.png)
- [Use private Wi-Fi addresses in iOS 14](https://support.apple.com/en-us/HT211227) - [Use private Wi-Fi addresses in iOS 14](https://support.apple.com/en-us/HT211227)
## Android ## Android
![Android][Android]
![ios](./img/RANDOM_MAC/android_random_mac.jpg)
- [How to Disable MAC Randomization in Android 10](https://support.boingo.com/s/article/How-to-Disable-MAC-Randomization-in-Android-10-Android-Q) - [How to Disable MAC Randomization in Android 10](https://support.boingo.com/s/article/How-to-Disable-MAC-Randomization-in-Android-10-Android-Q)
- [How do I disable random Wi-Fi MAC address on Android 10](https://support.plume.com/hc/en-gb/articles/360052070714-How-do-I-disable-random-Wi-Fi-MAC-address-on-Android-10-) - [How do I disable random Wi-Fi MAC address on Android 10](https://support.plume.com/hc/en-gb/articles/360052070714-How-do-I-disable-random-Wi-Fi-MAC-address-on-Android-10-)
### License
GPL 3.0
[Read more here](../LICENSE.txt)
### Contact
Always use the Issue tracker for the correct fork, for example:
[jokob-sk/NetAlertX](https://github.com/jokob-sk/NetAlertX/issues). Please also follow the guidelines on:
- [Pull Request guidelines](https://github.com/jokob-sk/NetAlertX/tree/main/docs#-pull-requests-prs)
- 🙏 [Feature request guidelines](https://github.com/jokob-sk/NetAlertX/tree/main/docs#-feature-requests)
- 🐛 [Issue guidelines](https://github.com/jokob-sk/NetAlertX/tree/main/docs#-submitting-an-issue-or-bug)
***Suggestions and comments are welcome***
<!--- --------------------------------------------------------------------- --->
[ios]: https://9to5mac.com/wp-content/uploads/sites/6/2020/08/how-to-use-private-wifi-mac-address-iphone-ipad.png?resize=2048,1009 "ios"
[Android]: ./img/android_random_mac.jpg "Android"

View File

@@ -3,7 +3,7 @@
<details> <details>
<summary>:information_source: In the app hover over settings or fields/labels or click blue in-app ❔ (question-mark) icons to get to relevant documentation pages.</summary> <summary>:information_source: In the app hover over settings or fields/labels or click blue in-app ❔ (question-mark) icons to get to relevant documentation pages.</summary>
![In-app help](/docs/img/GENERAL/in-app-help.png) ![In-app help](./img/GENERAL/in-app-help.png)
</details> </details>
@@ -17,7 +17,7 @@ There is also an in-app Help / FAQ section that should be answering frequently a
#### 💻 Bare-metal / On-server (Experimental/community supported 🧪) #### 💻 Bare-metal / On-server (Experimental/community supported 🧪)
- [(Experimental 🧪) On-hardware instructions](https://github.com/jokob-sk/NetAlertX/blob/main/docs/HW_INSTALL.md) - [(Experimental 🧪) On-hardware instructions](./HW_INSTALL.md)
- Alternative bare-metal install forks: - Alternative bare-metal install forks:
- [leiweibau's fork](https://github.com/leiweibau/Pi.Alert/) (maintained) - [leiweibau's fork](https://github.com/leiweibau/Pi.Alert/) (maintained)
@@ -27,58 +27,58 @@ There is also an in-app Help / FAQ section that should be answering frequently a
#### 📥 Initial Setup #### 📥 Initial Setup
- [Synology Guide](/docs/SYNOLOGY_GUIDE.md) - [Synology Guide](./SYNOLOGY_GUIDE.md)
- [Subnets and VLANs configuration for arp-scan](/docs/SUBNETS.md) - [Subnets and VLANs configuration for arp-scan](./SUBNETS.md)
- [Scanning Remote Networks](/docs/REMOTE_NETWORKS.md) - [Scanning Remote Networks](./REMOTE_NETWORKS.md)
- [SMTP server config](/docs/SMTP.md) - [SMTP server config](./SMTP.md)
- [Custom Icon configuration and support](/docs/ICONS.md) - [Custom Icon configuration and support](./ICONS.md)
- [Notifications](/docs/NOTIFICATIONS.md) - [Notifications](./NOTIFICATIONS.md)
- [Better name resolution with Reverse DNS](/docs/REVERSE_DNS.md) - [Better name resolution with Reverse DNS](./REVERSE_DNS.md)
- [Network treemap configuration](/docs/NETWORK_TREE.md) - [Network treemap configuration](./NETWORK_TREE.md)
- [Backups](/docs/BACKUPS.md) - [Backups](./BACKUPS.md)
- [Plugins overview](/front/plugins/README.md) - [Plugins overview](/docs/PLUGINS.md)
#### 🐛 Debugging help & tips #### 🐛 Debugging help & tips
- [Debugging tips](/docs/DEBUG_TIPS.md) - [Debugging tips](./DEBUG_TIPS.md)
- [Debugging UI not showing](/docs/WEB_UI_PORT_DEBUG.md) - [Debugging UI not showing](./WEB_UI_PORT_DEBUG.md)
- [Invalid JSON errors debug help](/docs/DEBUG_INVALID_JSON.md) - [Invalid JSON errors debug help](./DEBUG_INVALID_JSON.md)
- [Troubleshooting Plugins](/docs/DEBUG_PLUGINS.md) - [Troubleshooting Plugins](./DEBUG_PLUGINS.md)
- [File Permissions](/docs/FILE_PERMISSIONS.md) - [File Permissions](./FILE_PERMISSIONS.md)
- [Performance tips](/docs/PERFORMANCE.md) - [Performance tips](./PERFORMANCE.md)
#### 🔝 Popular/Suggested #### 🔝 Popular/Suggested
- [Home Assistant](/docs/HOME_ASSISTANT.md) - [Home Assistant](./HOME_ASSISTANT.md)
- [Bulk edit devices](/docs/DEVICES_BULK_EDITING.md) - [Bulk edit devices](./DEVICES_BULK_EDITING.md)
#### ⚙ System Management #### ⚙ System Management
- [Manage devices (legacy docs)](/docs/DEVICE_MANAGEMENT.md) - [Manage devices (legacy docs)](./DEVICE_MANAGEMENT.md)
- [Random MAC/MAC icon meaning (legacy docs)](/docs/RANDOM_MAC.md) - [Random MAC/MAC icon meaning (legacy docs)](./RANDOM_MAC.md)
#### 🔎 Examples #### 🔎 Examples
- [N8N webhook example](/docs/WEBHOOK_N8N.md) - [N8N webhook example](./WEBHOOK_N8N.md)
#### ♻ Misc #### ♻ Misc
- [Version history (legacy)](/docs/VERSIONS_HISTORY.md) - [Version history (legacy)](./VERSIONS_HISTORY.md)
- [Reverse proxy (Nginx, Apache, SWAG)](/docs/REVERSE_PROXY.md) - [Reverse proxy (Nginx, Apache, SWAG)](./REVERSE_PROXY.md)
- [Installing Updates](/docs/UPDATES.md) - [Installing Updates](./UPDATES.md)
- [Setting up Authelia](/docs/AUTHELIA.md) (DRAFT) - [Setting up Authelia](./AUTHELIA.md) (DRAFT)
#### 👩💻For Developers👨💻 #### 👩💻For Developers👨💻
- [Setting up your DEV environment](/docs/DEV_ENV_SETUP.md) - [Setting up your DEV environment](./DEV_ENV_SETUP.md)
- [Server APP code structure](/server/README.md) - [Server APP code structure](/server/README.md)
- [Database structure](/docs/DATABASE.md) - [Database structure](./DATABASE.md)
- [API endpoints details](/docs/API.md) - [API endpoints details](./API.md)
- [Plugin development guide](/docs/PLUGINS_DEV.md) - [Plugin development guide](./PLUGINS_DEV.md)
- [Settings system](/docs/SETTINGS_SYSTEM.md) - [Settings system](./SETTINGS_SYSTEM.md)
- [New Version notifications](/docs/VERSIONS.md) - [New Version notifications](./VERSIONS.md)
- [Frontend development tips](/docs/FRONTEND_DEVELOPMENT.md) - [Frontend development tips](./FRONTEND_DEVELOPMENT.md)
- [Webhook secrets](/docs/WEBHOOK_SECRET.md) - [Webhook secrets](./WEBHOOK_SECRET.md)
Feel free to suggest or submit new docs via a PR. Feel free to suggest or submit new docs via a PR.
@@ -137,8 +137,8 @@ Some additional context:
Before submitting a new issue please spend a couple of minutes on research: Before submitting a new issue please spend a couple of minutes on research:
* Check [🛑 Common issues](https://github.com/jokob-sk/NetAlertX/blob/main/docs/DEBUG_TIPS.md#common-issues) * Check [🛑 Common issues](./DEBUG_TIPS.md#common-issues)
* Check [💡 Closed issues](https://github.com/jokob-sk/NetAlertX/issues?q=is%3Aissue+is%3Aclosed) if a similar issue was solved in the past. * Check [💡 Closed issues](https://github.com/jokob-sk/NetAlertX/issues?q=is%3Aissue+is%3Aclosed) if a similar issue was solved in the past.
* When submitting an issue ❗[enable debug](https://github.com/jokob-sk/NetAlertX/blob/main/docs/DEBUG_TIPS.md)❗ * When submitting an issue ❗[enable debug](./DEBUG_TIPS.md)❗
⚠ Please follow the pre-defined issue template to resolve your issue faster. ⚠ Please follow the pre-defined issue template to resolve your issue faster.

View File

@@ -2,7 +2,7 @@
By design, local network scanners such as `arp-scan` use ARP (Address Resolution Protocol) to map IP addresses to MAC addresses on the local network. Since ARP operates at Layer 2 (Data Link Layer), it typically works only within a single broadcast domain, usually limited to a single router or network segment. By design, local network scanners such as `arp-scan` use ARP (Address Resolution Protocol) to map IP addresses to MAC addresses on the local network. Since ARP operates at Layer 2 (Data Link Layer), it typically works only within a single broadcast domain, usually limited to a single router or network segment.
To scan multiple locally accessible network segments, add them as subnets according to the [subnets](https://github.com/jokob-sk/NetAlertX/blob/main/docs/SUBNETS.md) documentation. To scan multiple locally accessible network segments, add them as subnets according to the [subnets](./SUBNETS.md) documentation.
## Complex Use Cases ## Complex Use Cases
@@ -28,7 +28,7 @@ The following workarounds should work for most complex network setups.
## Supplementing Plugins ## Supplementing Plugins
You can use supplementary plugins that employ alternate methods. Protocols used by the `SNMPDSC` or `DHCPLSS` plugins are widely supported on different routers and can be effective as workarounds. Check the [plugins list](https://github.com/jokob-sk/NetAlertX/blob/main/front/plugins/README.md) to find a plugin that works with your router and network setup. You can use supplementary plugins that employ alternate methods. Protocols used by the `SNMPDSC` or `DHCPLSS` plugins are widely supported on different routers and can be effective as workarounds. Check the [plugins list](https://github.com/jokob-sk/NetAlertX/blob/main/docs/PLUGINS.md) to find a plugin that works with your router and network setup.
## Multiple NetAlertX Instances ## Multiple NetAlertX Instances
@@ -38,7 +38,7 @@ If you have servers in different networks, you can set up separate NetAlertX ins
If you don't need to discover new devices and only need to report on their status (`online`, `offline`, `down`), you can manually enter devices and check their status using the [`ICMP` plugin](https://github.com/jokob-sk/NetAlertX/blob/main/front/plugins/icmp_scan/), which uses the `ping` command internally. If you don't need to discover new devices and only need to report on their status (`online`, `offline`, `down`), you can manually enter devices and check their status using the [`ICMP` plugin](https://github.com/jokob-sk/NetAlertX/blob/main/front/plugins/icmp_scan/), which uses the `ping` command internally.
For more information on how to add devices manually (or dummy devices), refer to the [Device Management](https://github.com/jokob-sk/NetAlertX/blob/main/docs/DEVICE_MANAGEMENT.md) documentation. For more information on how to add devices manually (or dummy devices), refer to the [Device Management](./DEVICE_MANAGEMENT.md) documentation.
To create truly dummy devices, you can use a loopback IP address (e.g., `0.0.0.0` or `127.0.0.1`) so they appear online. To create truly dummy devices, you can use a loopback IP address (e.g., `0.0.0.0` or `127.0.0.1`) so they appear online.

View File

@@ -2,7 +2,7 @@
The **Sessions Section** provides details about a device's connection history. This data is automatically detected and cannot be edited by the user. The **Sessions Section** provides details about a device's connection history. This data is automatically detected and cannot be edited by the user.
![Session info](/docs/img/SESSION_INFO/DeviceDetails_SessionInfo.png) ![Session info](./img/SESSION_INFO/DeviceDetails_SessionInfo.png)
--- ---
@@ -57,6 +57,6 @@ When a new connection is detected, the system creates a session record:
The session information is then used to display the device presence under **Monitoring** -> **Presence**. The session information is then used to display the device presence under **Monitoring** -> **Presence**.
![Monitoring Device Presence](/docs/img/SESSION_INFO/Monitoring_Presence.png) ![Monitoring Device Presence](./img/SESSION_INFO/Monitoring_Presence.png)

View File

@@ -10,11 +10,11 @@ The source of truth for user-defined values is the `app.conf` file. Editing the
#### Settings database table #### Settings database table
The `Settings` database table contains settings for App run purposes. The table is recreated every time the App restarts. The settings are loaded from the source-of-truth, that is the `app.conf` file. A high-level overview on the database structure can be found in the [database documentation](/docs/DATABASE.md). The `Settings` database table contains settings for App run purposes. The table is recreated every time the App restarts. The settings are loaded from the source-of-truth, that is the `app.conf` file. A high-level overview on the database structure can be found in the [database documentation](./DATABASE.md).
#### table_settings.json #### table_settings.json
This is the [API endpoint](/docs/API.md) that reflects the state of the `Settings` database table. Settings can be accessed with the: This is the [API endpoint](./API.md) that reflects the state of the `Settings` database table. Settings can be accessed with the:
* `getSetting(key)` JavaScript method * `getSetting(key)` JavaScript method
@@ -32,7 +32,7 @@ The App generates two `app.conf` entries for every setting (Since version 23.8+)
> [!NOTE] > [!NOTE]
> This is the preferred way adding settings going forward. I'll be likely migrating all app settings into plugin-based settings. > This is the preferred way adding settings going forward. I'll be likely migrating all app settings into plugin-based settings.
Plugin settings are loaded dynamically from the `config.json` of individual plugins. If a setting isn't defined in the `app.conf` file, it is initialized via the `default_value` property of a setting from the `config.json` file. Check the [Plugins documentation](https://github.com/jokob-sk/NetAlertX/blob/main/front/plugins/README.md#-setting-object-structure), section `⚙ Setting object structure` for details on the structure of the setting. Plugin settings are loaded dynamically from the `config.json` of individual plugins. If a setting isn't defined in the `app.conf` file, it is initialized via the `default_value` property of a setting from the `config.json` file. Check the [Plugins documentation](https://github.com/jokob-sk/NetAlertX/blob/main/docs/PLUGINS.md#-setting-object-structure), section `⚙ Setting object structure` for details on the structure of the setting.
![Screen 1][screen1] ![Screen 1][screen1]

View File

@@ -8,21 +8,21 @@ You need to specify the network interface and the network mask. You can also con
In this example, `--interface=eth0 192.168.1.0/24` represents a neighboring subnet. If this command returns no results, the network is not accessible due to your network or firewall restrictions. In this example, `--interface=eth0 192.168.1.0/24` represents a neighboring subnet. If this command returns no results, the network is not accessible due to your network or firewall restrictions.
If direct scans are not possible (Wi-Fi Extenders, VPNs and inaccessible networks), check the [remote networks documentation](https://github.com/jokob-sk/NetAlertX/blob/main/docs/REMOTE_NETWORKS.md). If direct scans are not possible (Wi-Fi Extenders, VPNs and inaccessible networks), check the [remote networks documentation](./REMOTE_NETWORKS.md).
> [!TIP] > [!TIP]
> You may need to increase the time between scans `ARPSCAN_RUN_SCHD` and the timeout `ARPSCAN_RUN_TIMEOUT` (and similar settings for related plugins) when adding more subnets. If the timeout setting is exceeded, the scan is canceled to prevent the application from hanging due to rogue plugins. > You may need to increase the time between scans `ARPSCAN_RUN_SCHD` and the timeout `ARPSCAN_RUN_TIMEOUT` (and similar settings for related plugins) when adding more subnets. If the timeout setting is exceeded, the scan is canceled to prevent the application from hanging due to rogue plugins.
> Check [debugging plugins](/docs/DEBUG_PLUGINS.md) for more tips. > Check [debugging plugins](./DEBUG_PLUGINS.md) for more tips.
## Example Values ## Example Values
> [!NOTE] > [!NOTE]
> Please use the UI to configure settings as it ensures the config file is in the correct format. Edit `app.conf` directly only when really necessary. > Please use the UI to configure settings as it ensures the config file is in the correct format. Edit `app.conf` directly only when really necessary.
> ![Settings location](/docs/img/SUBNETS/subnets-setting-location.png) > ![Settings location](./img/SUBNETS/subnets-setting-location.png)
* **Examples for one and two subnets:** * **Examples for one and two subnets:**
* One subnet: `SCAN_SUBNETS = ['192.168.1.0/24 --interface=eth0']` * 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 -vlan=107']` * Two subnets: `SCAN_SUBNETS = ['192.168.1.0/24 --interface=eth0','192.168.1.0/24 --interface=eth1 --vlan=107']`
If you get timeout messages, decrease the network mask (e.g.: from `/16` to `/24`) or increase the `TIMEOUT` setting (e.g.: `ARPSCAN_RUN_TIMEOUT` to `300` (5-minute timeout)) for the plugin and the interval between scans (e.g.: `ARPSCAN_RUN_SCHD` to `*/10 * * * *` (scans every 10 minutes)). If you get timeout messages, decrease the network mask (e.g.: from `/16` to `/24`) or increase the `TIMEOUT` setting (e.g.: `ARPSCAN_RUN_TIMEOUT` to `300` (5-minute timeout)) for the plugin and the interval between scans (e.g.: `ARPSCAN_RUN_SCHD` to `*/10 * * * *` (scans every 10 minutes)).
@@ -47,7 +47,7 @@ Specify the network filter, which **significantly** speeds up the scan process.
The adapter will probably be `eth0` or `eth1`. (Check `System Info` > `Network Hardware`, or run `iwconfig` in the container to find your interface name(s)). The adapter will probably be `eth0` or `eth1`. (Check `System Info` > `Network Hardware`, or run `iwconfig` in the container to find your interface name(s)).
![Network hardware](/docs/img/SUBNETS/system_info-network_hardware.png) ![Network hardware](./img/SUBNETS/system_info-network_hardware.png)
> [!TIP] > [!TIP]
> As an alternative to `iwconfig`, run `ip -o link show | awk -F': ' '!/lo|vir|docker/ {print $2}'` in your container to find your interface name(s) (e.g.: `eth0`, `eth1`): > As an alternative to `iwconfig`, run `ip -o link show | awk -F': ' '!/lo|vir|docker/ {print $2}'` in your container to find your interface name(s) (e.g.: `eth0`, `eth1`):
@@ -89,7 +89,6 @@ By default, Hyper-V only allows untagged packets through to the VM interface, bl
2. Within the VM, set up sub-interfaces for each VLAN to enable scanning. On Ubuntu 22.04, Netplan can be used. In /etc/netplan/00-installer-config.yaml, add VLAN definitions: 2. Within the VM, set up sub-interfaces for each VLAN to enable scanning. On Ubuntu 22.04, Netplan can be used. In /etc/netplan/00-installer-config.yaml, add VLAN definitions:
```yaml ```yaml
network: network:
ethernets: ethernets:
eth0: eth0:

View File

@@ -9,18 +9,18 @@ The folders you are creating below will contain the configuration and the databa
1. Create a parent folder named `netalertx` 1. Create a parent folder named `netalertx`
2. Create a `db` sub-folder 2. Create a `db` sub-folder
![Folder structure](/docs/img/SYNOLOGY/01_Create_folder_structure.png) ![Folder structure](./img/SYNOLOGY/01_Create_folder_structure.png)
![Folder structure](/docs/img/SYNOLOGY/02_Create_folder_structure_db.png) ![Folder structure](./img/SYNOLOGY/02_Create_folder_structure_db.png)
![Folder structure](/docs/img/SYNOLOGY/03_Create_folder_structure_db.png) ![Folder structure](./img/SYNOLOGY/03_Create_folder_structure_db.png)
3. Create a `config` sub-folder 3. Create a `config` sub-folder
![Folder structure](/docs/img/SYNOLOGY/04_Create_folder_structure_config.png) ![Folder structure](./img/SYNOLOGY/04_Create_folder_structure_config.png)
4. Note down the folders Locations: 4. Note down the folders Locations:
![Getting the location](/docs/img/SYNOLOGY/05_Access_folder_properties.png) ![Getting the location](./img/SYNOLOGY/05_Access_folder_properties.png)
![Getting the location](/docs/img/SYNOLOGY/06_Note_location.png) ![Getting the location](./img/SYNOLOGY/06_Note_location.png)
5. Open **Container manager** -> **Project** and click **Create**. 5. Open **Container manager** -> **Project** and click **Create**.
6. Fill in the details: 6. Fill in the details:
@@ -49,7 +49,7 @@ services:
- PORT=20211 - PORT=20211
``` ```
![Project settings](/docs/img/SYNOLOGY/07_Create_project.png) ![Project settings](./img/SYNOLOGY/07_Create_project.png)
7. Replace the paths to your volume and/or comment out unnecessary line(s): 7. Replace the paths to your volume and/or comment out unnecessary line(s):
@@ -63,12 +63,12 @@ services:
# - local/path/logs:/app/log <- commented out with # ⚠ # - local/path/logs:/app/log <- commented out with # ⚠
``` ```
![Adjusting docker-compose](/docs/img/SYNOLOGY/08_Adjust_docker_compose_volumes.png) ![Adjusting docker-compose](./img/SYNOLOGY/08_Adjust_docker_compose_volumes.png)
8. (optional) Change the port number from `20211` to an unused port if this port is already used. 8. (optional) Change the port number from `20211` to an unused port if this port is already used.
9. Build the project: 9. Build the project:
![Build](/docs/img/SYNOLOGY/09_Run_and_build.png) ![Build](./img/SYNOLOGY/09_Run_and_build.png)
10. Navigate to `<Synology URL>:20211` (or your custom port). 10. Navigate to `<Synology URL>:20211` (or your custom port).
11. Read the [Subnets](/docs/SUBNETS.md) and [Plugins](/front/plugins/README.md) docs to complete your setup. 11. Read the [Subnets](./SUBNETS.md) and [Plugins](/docs/PLUGINS.md) docs to complete your setup.

View File

@@ -8,17 +8,17 @@ If you are not on the latest version, the app will notify you, that a new releas
If any notification occurs and an email is sent, the email will contain a note that a new version is available. See the sample email below: If any notification occurs and an email is sent, the email will contain a note that a new version is available. See the sample email below:
![Sample email if a new version is available](/docs/img/VERSIONS/new-version-available-email.png) ![Sample email if a new version is available](./img/VERSIONS/new-version-available-email.png)
### 🆕 In the UI ### 🆕 In the UI
In the UI via a notification Icon and via a custom message in the Maintenance section. In the UI via a notification Icon and via a custom message in the Maintenance section.
![UI screenshot if a new version is available](/docs/img/VERSIONS/new-version-available-maintenance.png) ![UI screenshot if a new version is available](./img/VERSIONS/new-version-available-maintenance.png)
For a comparison, this is how the UI looks like if you are on the latest stable image: For a comparison, this is how the UI looks like if you are on the latest stable image:
![UI screenshot if on latest version](/docs/img/VERSIONS/latest-version-maintenance.png) ![UI screenshot if on latest version](./img/VERSIONS/latest-version-maintenance.png)
## Implementation details ## Implementation details

View File

@@ -1,87 +0,0 @@
# Pi.Alert Version History
<!--- --------------------------------------------------------------------- --->
| 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) |
| v2.56 | Bug fixing |
| v2.55 | Bug fixing |
| v2.52 | Bug fixing |
| v2.51 | Bug fixing |
| v2.50 | First public release |
# 🆕 2022+ [Newest Release notes](https://github.com/jokob-sk/NetAlertX/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
- Added Check to mark devices as "known" #16
- Remember "Show XXX entries" dropdown value #16 #26
- Remember "sorting" in devices #16
- Remember "Device panel " in device detail #16
- Added "All" option to "Show x Entries" option #16
- Added optional Location field (Door, Basement, etc.) to devices #16
- "Device updated successfully" message now is not modal #16
- Now is possible to delete Devices #16
- Added Device Type Singleboard Computer (SBC) #16
- Allowed to use " in device name #42
## Pi.Alert v2.60
<!--- --------------------------------------------------------------------- --->
- `pialert.conf` moved from `back` to `config` folder
- `pialert.conf` splitted in two files: `pialert.conf` and `version.conf`
- 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
GPL 3.0
[Read more here](../LICENSE.txt)
### Contact
Always use the Issue tracker for the correct fork, for example:
[jokob-sk/NetAlertX](https://github.com/jokob-sk/NetAlertX/issues). Please also follow the guidelines on:
- [Pull Request guidelines](https://github.com/jokob-sk/NetAlertX/tree/main/docs#-pull-requests-prs)
- 🙏 [Feature request guidelines](https://github.com/jokob-sk/NetAlertX/tree/main/docs#-feature-requests)
- 🐛 [Issue guidelines](https://github.com/jokob-sk/NetAlertX/tree/main/docs#-submitting-an-issue-or-bug)

View File

@@ -2,11 +2,11 @@
N8N can be used for more advanced conditional notification use cases. For example, you want only to get notified if two out of a specified list of devices is down. Or you can use other plugins to process the notifiations further. The below is a simple example of sending an email on a webhook. N8N can be used for more advanced conditional notification use cases. For example, you want only to get notified if two out of a specified list of devices is down. Or you can use other plugins to process the notifiations further. The below is a simple example of sending an email on a webhook.
![n8n workflow](/docs/img/WEBHOOK_N8N/n8n_workflow.png) ![n8n workflow](./img/WEBHOOK_N8N/n8n_workflow.png)
### Specify your email template ### Specify your email template
See [sample JSON](https://github.com/jokob-sk/NetAlertX/blob/main/front/report_templates/webhook_json_sample.json) if you want to see the JSON paths used in the email template below See [sample JSON](https://github.com/jokob-sk/NetAlertX/blob/main/front/report_templates/webhook_json_sample.json) if you want to see the JSON paths used in the email template below
![Email template](/docs/img/WEBHOOK_N8N/n8n_send_email_settings.png) ![Email template](./img/WEBHOOK_N8N/n8n_send_email_settings.png)
``` ```
Events count: {{ $json["body"]["attachments"][0]["text"]["events"].length }} Events count: {{ $json["body"]["attachments"][0]["text"]["events"].length }}
@@ -14,7 +14,7 @@ New devices count: {{ $json["body"]["attachments"][0]["text"]["new_devices"].len
``` ```
### Get your webhook in n8n ### Get your webhook in n8n
![n8n webhook URL](/docs/img/WEBHOOK_N8N/n8n_webhook_settings.png) ![n8n webhook URL](./img/WEBHOOK_N8N/n8n_webhook_settings.png)
### Configure NetAlertX to point to the above URL ### Configure NetAlertX to point to the above URL
![NetAlertX config](/docs/img/WEBHOOK_N8N/Webhook_settings.png) ![NetAlertX config](./img/WEBHOOK_N8N/Webhook_settings.png)

View File

@@ -5,7 +5,7 @@
When opening an issue please: When opening an issue please:
1. Include a screenshot of what you see when accessing `HTTP://<your rpi IP>/20211` (or your custom port) 1. Include a screenshot of what you see when accessing `HTTP://<your rpi IP>/20211` (or your custom port)
1. [Follow steps 1, 2, 3, 4 on this page](https://github.com/jokob-sk/NetAlertX/blob/main/docs/DEBUG_TIPS.md) 1. [Follow steps 1, 2, 3, 4 on this page](./DEBUG_TIPS.md)
1. Execute the following in the container to see the processes and their ports and submit a screenshot of the result: 1. Execute the following in the container to see the processes and their ports and submit a screenshot of the result:
1. `sudo apk add lsof` 1. `sudo apk add lsof`
1. `sudo lsof -i` 1. `sudo lsof -i`
@@ -13,7 +13,7 @@ When opening an issue please:
1. if you get `nginx: [emerg] bind() to 0.0.0.0:20211 failed (98: Address in use)` try using a different port number 1. if you get `nginx: [emerg] bind() to 0.0.0.0:20211 failed (98: Address in use)` try using a different port number
![lsof ports](/docs/img/WEB_UI_PORT_DEBUG/container_port.png) ![lsof ports](./img/WEB_UI_PORT_DEBUG/container_port.png)
## 2. JavaScript issues ## 2. JavaScript issues
@@ -48,4 +48,4 @@ In the container execute:
> [!TIP] > [!TIP]
> You can try to start the container without mapping the `/app/config` and `/app/db` dirs and if the UI shows up then the issue is most likely related to your file system permissions or file ownership. > You can try to start the container without mapping the `/app/config` and `/app/db` dirs and if the UI shows up then the issue is most likely related to your file system permissions or file ownership.
Please read the [Permissions troubleshooting guide](/docs/FILE_PERMISSIONS.md) and provide a screesnhot of the permissions and ownership in the `/app/db` and `app/config` directories. Please read the [Permissions troubleshooting guide](./FILE_PERMISSIONS.md) and provide a screesnhot of the permissions and ownership in the `/app/db` and `app/config` directories.

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

BIN
docs/img/NetAlertX_logo.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

View File

Before

Width:  |  Height:  |  Size: 551 KiB

After

Width:  |  Height:  |  Size: 551 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 598 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

80
docs/index.md Executable file
View File

@@ -0,0 +1,80 @@
# NetAlertX Documentation
Welcome to the official NetAlertX documentation! NetAlertX is a powerful tool designed to simplify the management and monitoring of your network. Below, you will find guides and resources to help you set up, configure, and troubleshoot your NetAlertX instance.
## In-App Help
NetAlertX provides contextual help within the application:
- **Hover over settings, fields, or labels** to see additional tooltips and guidance.
- **Click the blue ❔ (question-mark) icons** next to various elements to view detailed information.
- Access the in-app **Help / FAQ** section for frequently asked questions and quick answers.
---
## Installation Guides
### Docker (Fully Supported)
NetAlertX is fully supported in Docker environments, allowing for easy setup and configuration. Follow the official guide to get started:
- [Docker Installation Guide](https://github.com/jokob-sk/NetAlertX/blob/main/dockerfiles/README.md)
This guide will take you through the process of setting up NetAlertX using Docker Compose or standalone Docker commands.
### Bare-Metal Installation (Experimental)
If you prefer to run NetAlertX on your own hardware, you can try the experimental bare-metal installation. Please note that this method is still under development, and we're looking for maintainers to help improve it.
- [Bare-Metal Installation Guide](./HW_INSTALL.md)
---
## Help and Support
If you need help or run into issues, here are some resources to guide you:
**Before opening an issue, please:**
- [Check common issues](./DEBUG_TIPS.md#common-issues) to see if your problem has already been reported.
- [Look at closed issues](https://github.com/jokob-sk/NetAlertX/issues?q=is%3Aissue+is%3Aclosed) for possible solutions to past problems.
- **Enable debugging** to gather more information: [Debug Guide](./DEBUG_TIPS.md).
**Need more help?** Join the community discussions or submit a support request:
- Visit the [GitHub Discussions](https://github.com/jokob-sk/NetAlertX/discussions) for community support.
- If you are experiencing issues that require immediate attention, consider opening an issue on our [GitHub Issues page](https://github.com/jokob-sk/NetAlertX/issues).
---
## Contributing
NetAlertX is open-source and welcomes contributions from the community! If you'd like to help improve the software, please follow the guidelines below:
- **Fork the repository** and make your changes.
- **Submit a pull request** with a detailed description of what youve changed and why.
For more information on contributing, check out our [Dev Guide](./DEV_ENV_SETUP.md).
---
## Stay Updated
To keep up with the latest changes and updates to NetAlertX, please refer to the following resources:
- [Releases](https://github.com/jokob-sk/NetAlertX/releases)
Make sure to follow the project on GitHub to get notifications for new releases and important updates.
---
## Additional Resources
- **Configuration Tips**: Learn how to optimize NetAlertX for your network setup.
- **Advanced Features**: Explore advanced functionalities like plugin development and custom configurations.
- **Documentation Index**: Check out the full [documentation index](https://github.com/jokob-sk/NetAlertX/tree/main/docs) for all the guides available.
We hope you find this documentation helpful. If you have any suggestions or improvements, please dont hesitate to contribute!
---
NetAlertX is actively maintained. You can find the source code, report bugs, or request new features on our [GitHub page](https://github.com/jokob-sk/NetAlertX).

10
front/.well-known/gpc.json Executable file
View File

@@ -0,0 +1,10 @@
{
"gpc": true,
"compliance": [
{
"regulation": "GDPR",
"status": "not applicable"
}
]
}

View File

@@ -949,16 +949,6 @@ height: 50px;
top:0px; top:0px;
} }
.overview-section
{
/* border-top: solid;
border-width: medium;
border-width: medium;
border-width: 1px;
border-radius: 15px;
margin-bottom: 3px; */
}
.settings-group i{ .settings-group i{
font-size: 16px; font-size: 16px;
@@ -1255,6 +1245,24 @@ input[readonly] {
/* Devices page */ /* Devices page */
/* ----------------------------------------------------------------- */ /* ----------------------------------------------------------------- */
#columnFilters {
display: flex;
flex-wrap: wrap;
gap: 10px; /* Add spacing between items */
}
.filter-group {
box-sizing: border-box; /* Ensure padding and borders are included in the width */
padding: 1em;
padding-top: 0;
}
.filter-dropdown
{
width:7em
}
.modal-header .close .modal-header .close
{ {
display: flex; display: flex;
@@ -1310,6 +1318,11 @@ input[readonly] {
min-width: 40px; min-width: 40px;
} }
.iconPreview svg{
min-width: 20px;
max-width: 20px;
}
.dummyDevice .dummyDevice
{ {
@@ -1336,8 +1349,8 @@ input[readonly] {
top: -6px; top: -6px;
position: absolute; position: absolute;
z-index: 1; z-index: 1;
left: 0px; left: 4px;
font-size: large; font-size: smaller;
} }
.drag .drag
@@ -1402,6 +1415,7 @@ input[readonly] {
{ {
display: none; display: none;
padding-top: 2em; padding-top: 2em;
cursor: default;
} }
/* ----------------------------------------------------------------- */ /* ----------------------------------------------------------------- */
@@ -1470,6 +1484,12 @@ input[readonly] {
} }
/* #panDetails .dataTables_wrapper .bottom .paging_simple_numbers */ /* #panDetails .dataTables_wrapper .bottom .paging_simple_numbers */
#panDetails #NEWDEV_devIcon
{
display: none;
}
#panDetails #NEWDEV_devCustomProps_label #panDetails #NEWDEV_devCustomProps_label
{ {
@@ -1509,6 +1529,14 @@ input[readonly] {
flex-direction:column; flex-direction:column;
justify-content:center; justify-content:center;
} }
.networkHelpIcon
{
padding: 5px;
margin-left: 5px;
top: 55px;
position: absolute;
z-index:5;
}
#networkTree .netNodeText #networkTree .netNodeText
{ {
position: absolute; position: absolute;
@@ -1569,7 +1597,7 @@ input[readonly] {
.spanNetworkTree { .spanNetworkTree {
display: inline-block; display: inline-block;
width: 120px; width: 135px;
white-space: nowrap; white-space: nowrap;
overflow: hidden !important; overflow: hidden !important;
text-overflow: ellipsis; text-overflow: ellipsis;
@@ -1615,6 +1643,24 @@ input[readonly] {
{ {
display: none; display: none;
} }
.dev-detail-tab-name
{
display: none;
}
}
/* ----------------------------------------------------------------- */
/* EVENTS page */
/* ----------------------------------------------------------------- */
.eventsPeriodSelectWrap{
display: inline;
float: right;
}
.eventsPage #tableEventsTitle
{
float: left ;
} }
/* ----------------------------------------------------------------- */ /* ----------------------------------------------------------------- */
@@ -1622,6 +1668,7 @@ input[readonly] {
/* ----------------------------------------------------------------- */ /* ----------------------------------------------------------------- */
.plugin-filters .plugin-filters
{ {
margin: 7px; margin: 7px;
@@ -1798,10 +1845,7 @@ input[readonly] {
----------------------------------------------------------------------------- */ ----------------------------------------------------------------------------- */
#multiEditPlc #multiEditPlc
{ {
position: fixed; padding-right: 10px;
bottom: 50px;
right: 0px;
z-index: 10;
} }

View File

@@ -737,3 +737,7 @@ input[type="password"]::-webkit-caps-lock-indicator {
color:#000 !important; color:#000 !important;
} }
.thresholdFormControl
{
color:#000;
}

View File

@@ -740,3 +740,8 @@
background-color: #fff !important; background-color: #fff !important;
color:#000 !important; color:#000 !important;
} }
.thresholdFormControl
{
color:#000;
}

View File

@@ -61,12 +61,54 @@
<!-- <div class="box-transparent"> --> <!-- <div class="box-transparent"> -->
<div id="navDevice" class="nav-tabs-custom"> <div id="navDevice" class="nav-tabs-custom">
<ul class="nav nav-tabs" style="font-size:16px;"> <ul class="nav nav-tabs" style="font-size:16px;">
<li> <a id="tabDetails" href="#panDetails" data-toggle="tab"> <?= lang('DevDetail_Tab_Details');?> </a></li> <li>
<li> <a id="tabTools" href="#panTools" data-toggle="tab"> <?= lang('DevDetail_Tab_Tools');?> </a></li> <a id="tabDetails" href="#panDetails" data-toggle="tab">
<li> <a id="tabSessions" href="#panSessions" data-toggle="tab"> <?= lang('DevDetail_Tab_Sessions');?> </a></li> <i class="fa fa-info-circle"></i>
<li> <a id="tabPresence" href="#panPresence" data-toggle="tab"> <?= lang('DevDetail_Tab_Presence');?> </a></li> <span class="dev-detail-tab-name">
<li> <a id="tabEvents" href="#panEvents" data-toggle="tab"> <?= lang('DevDetail_Tab_Events');?> </a></li> <?= lang('DevDetail_Tab_Details');?>
<li> <a id="tabPlugins" href="#panPlugins" data-toggle="tab"> <?= lang('DevDetail_Tab_Plugins');?> </a></li> </span>
</a>
</li>
<li>
<a id="tabTools" href="#panTools" data-toggle="tab">
<i class="fa fa-screwdriver-wrench"></i>
<span class="dev-detail-tab-name">
<?= lang('DevDetail_Tab_Tools');?>
</span>
</a>
</li>
<li>
<a id="tabSessions" href="#panSessions" data-toggle="tab">
<i class="fa fa-list-ol"></i>
<span class="dev-detail-tab-name">
<?= lang('DevDetail_Tab_Sessions');?>
</span>
</a>
</li>
<li>
<a id="tabPresence" href="#panPresence" data-toggle="tab">
<i class="fa fa-calendar"></i>
<span class="dev-detail-tab-name">
<?= lang('DevDetail_Tab_Presence');?>
</span>
</a>
</li>
<li>
<a id="tabEvents" href="#panEvents" data-toggle="tab">
<i class="fa fa-bolt"></i>
<span class="dev-detail-tab-name">
<?= lang('DevDetail_Tab_Events');?>
</span>
</a>
</li>
<li>
<a id="tabPlugins" href="#panPlugins" data-toggle="tab">
<i class="fa fa-plug"></i>
<span class="dev-detail-tab-name">
<?= lang('DevDetail_Tab_Plugins');?>
</span>
</a>
</li>
<div class="btn-group pull-right"> <div class="btn-group pull-right">
<button type="button" class="btn btn-default" style="padding: 10px; min-width: 30px;" <button type="button" class="btn btn-default" style="padding: 10px; min-width: 30px;"

View File

@@ -79,7 +79,7 @@
data: ["devMac", "devLastIP", "devName", "devOwner", "devType", "devVendor", "devGroup", "devIcon", "devLocation", "devComments"], data: ["devMac", "devLastIP", "devName", "devOwner", "devType", "devVendor", "devGroup", "devIcon", "devLocation", "devComments"],
docs: "https://github.com/jokob-sk/NetAlertX/blob/main/docs/DEVICE_MANAGEMENT.md", docs: "https://github.com/jokob-sk/NetAlertX/blob/main/docs/DEVICE_MANAGEMENT.md",
iconClass: "fa fa-pencil", iconClass: "fa fa-pencil",
inputGroupClasses: "field-group col-lg-4 col-sm-6 col-xs-12", inputGroupClasses: "field-group main-group col-lg-4 col-sm-6 col-xs-12",
labelClasses: "col-sm-4 col-xs-12 control-label", labelClasses: "col-sm-4 col-xs-12 control-label",
inputClasses: "col-sm-8 col-xs-12 input-group" inputClasses: "col-sm-8 col-xs-12 input-group"
}, },
@@ -88,7 +88,7 @@
data: ["devStatus", "devLastConnection", "devFirstConnection"], data: ["devStatus", "devLastConnection", "devFirstConnection"],
docs: "https://github.com/jokob-sk/NetAlertX/blob/main/docs/SESSION_INFO.md", docs: "https://github.com/jokob-sk/NetAlertX/blob/main/docs/SESSION_INFO.md",
iconClass: "fa fa-calendar", iconClass: "fa fa-calendar",
inputGroupClasses: "field-group col-lg-4 col-sm-6 col-xs-12", inputGroupClasses: "field-group session-group col-lg-4 col-sm-6 col-xs-12",
labelClasses: "col-sm-4 col-xs-12 control-label", labelClasses: "col-sm-4 col-xs-12 control-label",
inputClasses: "col-sm-8 col-xs-12 input-group" inputClasses: "col-sm-8 col-xs-12 input-group"
}, },
@@ -97,7 +97,7 @@
data: ["devAlertEvents", "devAlertDown", "devSkipRepeated"], data: ["devAlertEvents", "devAlertDown", "devSkipRepeated"],
docs: "https://github.com/jokob-sk/NetAlertX/blob/main/docs/NOTIFICATIONS.md", docs: "https://github.com/jokob-sk/NetAlertX/blob/main/docs/NOTIFICATIONS.md",
iconClass: "fa fa-bell", iconClass: "fa fa-bell",
inputGroupClasses: "field-group col-lg-4 col-sm-6 col-xs-12", inputGroupClasses: "field-group alert-group col-lg-4 col-sm-6 col-xs-12",
labelClasses: "col-sm-4 col-xs-12 control-label", labelClasses: "col-sm-4 col-xs-12 control-label",
inputClasses: "col-sm-8 col-xs-12 input-group" inputClasses: "col-sm-8 col-xs-12 input-group"
}, },
@@ -106,7 +106,7 @@
data: ["devParentMAC", "devParentPort", "devSSID", "devSite", "devSyncHubNode"], data: ["devParentMAC", "devParentPort", "devSSID", "devSite", "devSyncHubNode"],
docs: "https://github.com/jokob-sk/NetAlertX/blob/main/docs/NETWORK_TREE.md", docs: "https://github.com/jokob-sk/NetAlertX/blob/main/docs/NETWORK_TREE.md",
iconClass: "fa fa-network-wired", iconClass: "fa fa-network-wired",
inputGroupClasses: "field-group col-lg-4 col-sm-6 col-xs-12", inputGroupClasses: "field-group network-group col-lg-4 col-sm-6 col-xs-12",
labelClasses: "col-sm-4 col-xs-12 control-label", labelClasses: "col-sm-4 col-xs-12 control-label",
inputClasses: "col-sm-8 col-xs-12 input-group" inputClasses: "col-sm-8 col-xs-12 input-group"
}, },
@@ -115,7 +115,7 @@
data: ["devStaticIP", "devIsNew", "devFavorite", "devIsArchived"], data: ["devStaticIP", "devIsNew", "devFavorite", "devIsArchived"],
docs: "https://github.com/jokob-sk/NetAlertX/blob/main/docs/DEVICE_DISPLAY_SETTINGS.md", docs: "https://github.com/jokob-sk/NetAlertX/blob/main/docs/DEVICE_DISPLAY_SETTINGS.md",
iconClass: "fa fa-list-check", iconClass: "fa fa-list-check",
inputGroupClasses: "field-group col-lg-4 col-sm-6 col-xs-12", inputGroupClasses: "field-group display-group col-lg-4 col-sm-6 col-xs-12",
labelClasses: "col-sm-4 col-xs-12 control-label", labelClasses: "col-sm-4 col-xs-12 control-label",
inputClasses: "col-sm-8 col-xs-12 input-group" inputClasses: "col-sm-8 col-xs-12 input-group"
}, },
@@ -124,7 +124,7 @@
data: ["devCustomProps"], data: ["devCustomProps"],
docs: "https://github.com/jokob-sk/NetAlertX/blob/main/docs/CUSTOM_PROPERTIES.md", docs: "https://github.com/jokob-sk/NetAlertX/blob/main/docs/CUSTOM_PROPERTIES.md",
iconClass: "fa fa-list", iconClass: "fa fa-list",
inputGroupClasses: "field-group col-lg-12 col-sm-12 col-xs-12", inputGroupClasses: "field-group cutprop-group col-lg-12 col-sm-12 col-xs-12",
labelClasses: "col-sm-12 col-xs-12 control-label", labelClasses: "col-sm-12 col-xs-12 control-label",
inputClasses: "col-sm-12 col-xs-12 input-group" inputClasses: "col-sm-12 col-xs-12 input-group"
} }
@@ -348,16 +348,17 @@
const createNew = mac === 'new' ? 1 : 0; const createNew = mac === 'new' ? 1 : 0;
const devLastIP = $('#NEWDEV_devLastIP').val(); const devLastIP = $('#NEWDEV_devLastIP').val();
const newMac = $('#NEWDEV_devMac').val()
// Validate MAC and Last IP // Validate MAC and Last IP
if (mac === '' || !(isValidIPv4(devLastIP) || isValidIPv6(devLastIP))) { if (mac === '' || !isValidMac(newMac) || !( isValidIPv4(devLastIP) || isValidIPv6(devLastIP) )) {
showMessage(getString("DeviceEdit_ValidMacIp"), 5000, "modal_red"); showMessage(getString("DeviceEdit_ValidMacIp"), 5000, "modal_red");
return; return;
} }
showSpinner(); showSpinner();
// Update data to server using POST // Update data to server using POST
$.post('php/server/devices.php?action=setDeviceData', { $.post('php/server/devices.php?action=setDeviceData', {
mac: $('#NEWDEV_devMac').val(), mac: $('#NEWDEV_devMac').val(),
name: encodeURIComponent($('#NEWDEV_devName').val().replace(/'/g, "")), name: encodeURIComponent($('#NEWDEV_devName').val().replace(/'/g, "")),
@@ -403,7 +404,6 @@
// Everything loaded // Everything loaded
hideSpinner(); hideSpinner();
}); });
} }
//----------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------

View File

@@ -28,30 +28,21 @@
<!-- Page ------------------------------------------------------------------ --> <!-- Page ------------------------------------------------------------------ -->
<div class="content-wrapper"> <div class="content-wrapper">
<!-- Content header--------------------------------------------------------- -->
<section class="content-header">
<h1 id="pageTitle">
<i class="fa fa-laptop"></i>
<?= lang('Device_Title');?>
</h1>
</section>
<!-- Main content ---------------------------------------------------------- --> <!-- Main content ---------------------------------------------------------- -->
<section class="content"> <section class="content">
<!-- Tile toggle cards ------------------------------------------------------- --> <!-- Tile toggle cards ------------------------------------------------------- -->
<div class="row" id="TileCards"> <div class="row " id="TileCards">
<!-- Placeholder ------------------------------------------------------- --> <!-- Placeholder ------------------------------------------------------- -->
</div> </div>
<!-- Device presence / Activity Chart ------------------------------------------------------- --> <!-- Device presence / Activity Chart ------------------------------------------------------- -->
<div class="row" id="DevicePresence"> <div class="row" id="DevicePresence">
<div class="col-md-12"> <div class="col-md-12">
<div class="box" id="clients"> <div class="box" id="clients">
<div class="box-header with-border"> <div class="box-header ">
<h3 class="box-title"><?= lang('Device_Shortcut_OnlineChart');?> </h3> <h3 class="box-title col-md-12"><?= lang('Device_Shortcut_OnlineChart');?> </h3>
</div> </div>
<div class="box-body"> <div class="box-body">
<div class="chart"> <div class="chart">
@@ -67,6 +58,15 @@
</div> </div>
</div> </div>
<!-- Device Filters ------------------------------------------------------- -->
<div class="box box-aqua hidden" id="columnFiltersWrap">
<div class="box-header ">
<h3 class="box-title col-md-12"><?= lang('Devices_Filters');?> </h3>
</div>
<!-- Placeholder ------------------------------------------------------- -->
<div id="columnFilters" ></div>
</div>
<!-- datatable ------------------------------------------------------------- --> <!-- datatable ------------------------------------------------------------- -->
<div class="row"> <div class="row">
<div class="col-xs-12"> <div class="col-xs-12">
@@ -78,6 +78,9 @@
<h3 id="tableDevicesTitle" class="box-title text-gray "></h3> <h3 id="tableDevicesTitle" class="box-title text-gray "></h3>
</div> </div>
<div class="dummyDevice col-md-3 "> <div class="dummyDevice col-md-3 ">
<span id="multiEditPlc">
<!-- multi edit button placeholder -->
</span>
<span> <span>
<a href="deviceDetails.php?mac=new"><i title="<?= lang('Gen_create_new_device');?>" class="fa fa-square-plus"></i> <?= lang('Gen_create_new_device');?></a> <a href="deviceDetails.php?mac=new"><i title="<?= lang('Gen_create_new_device');?>" class="fa fa-square-plus"></i> <?= lang('Gen_create_new_device');?></a>
</span> </span>
@@ -106,7 +109,7 @@
<!-- ----------------------------------------------------------------------- --> <!-- ----------------------------------------------------------------------- -->
</section> </section>
<!-- /.content --> <!-- /.content -->
<div id="multiEditPlc" class="col-md-2"></div>
</div> </div>
<!-- /.content-wrapper --> <!-- /.content-wrapper -->
@@ -120,8 +123,8 @@
<!-- page script ----------------------------------------------------------- --> <!-- page script ----------------------------------------------------------- -->
<script> <script>
var deviceStatus = 'all'; var deviceStatus = 'all';
var tableRows = getCookie ("nax_parTableRows") == "" ? 10 : getCookie ("nax_parTableRows") ; var tableRows = getCache ("nax_parTableRows") == "" ? 10 : getCache ("nax_parTableRows") ;
var tableOrder = getCookie ("nax_parTableOrder") == "" ? [[3,'desc'], [0,'asc']] : JSON.parse(getCookie ("nax_parTableOrder")) ; var tableOrder = getCache ("nax_parTableOrder") == "" ? [[3,'desc'], [0,'asc']] : JSON.parse(getCache ("nax_parTableOrder")) ;
var tableColumnHide = []; var tableColumnHide = [];
var tableColumnOrder = []; var tableColumnOrder = [];
@@ -138,6 +141,8 @@ function main () {
showSpinner(); showSpinner();
initFilters();
// render tiles // render tiles
getDevicesTotals(); getDevicesTotals();
@@ -201,35 +206,61 @@ function mapIndx(oldIndex)
// Query total numbers of Devices by status // Query total numbers of Devices by status
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
function getDevicesTotals() { function getDevicesTotals() {
maxDelay = 180; //cap at 180 seconds
// Fetch data via AJAX let maxRetries = Math.ceil(Math.log2(maxDelay)); // Calculate maximum retries to cap at maxDelay seconds
$.ajax({ let attempt = 0;
url: '/php/server/query_json.php', let calledUpdateAPI = false;
type: "GET",
dataType: "json",
data: {
file: 'table_devices_tiles.json', // Pass the file parameter
nocache: Date.now() // Prevent caching with a timestamp
},
success: function(response) {
if (response && response.data) {
resultJSON = response.data[0]; // Assuming the structure {"data": [ ... ]}
// Save the result to cache function fetchDataWithBackoff() {
setCache("getDevicesTotals", JSON.stringify(resultJSON)); // Calculate the delay (2^attempt seconds, capped at maxDelay seconds)
const delay = Math.min(2 ** attempt, maxDelay) * 1000;
// Process the fetched data // Attempt to fetch data
processDeviceTotals(resultJSON); $.ajax({
} else { url: '/php/server/query_json.php',
console.error("Invalid response format from API"); type: "GET",
} dataType: "json",
}, data: {
error: function(xhr, status, error) { file: 'table_devices_tiles.json', // Pass the file parameter
console.error("Failed to fetch devices data:", error); nocache: Date.now() // Prevent caching with a timestamp
} },
}); success: function(response) {
if (response && response.data) {
const resultJSON = response.data[0]; // Assuming the structure {"data": [ ... ]}
// Save the result to cache
setCache("getDevicesTotals", JSON.stringify(resultJSON));
// Process the fetched data
processDeviceTotals(resultJSON);
} else {
console.error("Invalid response format from API");
}
},
error: function(xhr, status, error) {
console.error("Failed to fetch devices data (Attempt " + (attempt + 1) + "):", error);
// try updating the API once
if(calledUpdateAPI == false)
{
calledUpdateAPI = true;
updateApi("devices_tiles");
}
// Retry logic
if (attempt < maxRetries) {
attempt++;
setTimeout(fetchDataWithBackoff, delay);
} else {
console.error("Maximum retries reached. Unable to fetch devices data.");
}
}
});
}
// Start the first fetch attempt
fetchDataWithBackoff();
} }
function processDeviceTotals(devicesData) { function processDeviceTotals(devicesData) {
@@ -281,6 +312,8 @@ function processDeviceTotals(devicesData) {
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// Render the info boxes/tiles on top // Render the info boxes/tiles on top
function renderInfoboxes(customData) { function renderInfoboxes(customData) {
if(customData.length > 0)
{
$.ajax({ $.ajax({
url: 'php/components/tile_cards.php', // PHP script URL url: 'php/components/tile_cards.php', // PHP script URL
type: 'POST', // Use POST method to send data type: 'POST', // Use POST method to send data
@@ -294,6 +327,185 @@ function renderInfoboxes(customData) {
} }
}); });
} }
}
// -----------------------------------------------------------------------------
//Render filters if specified
let columnFilters = [];
function initFilters() {
// Attempt to fetch data
$.ajax({
url: '/php/server/query_json.php',
type: "GET",
dataType: "json",
data: {
file: 'table_devices_filters.json', // Pass the file parameter
nocache: Date.now() // Prevent caching with a timestamp
},
success: function(response) {
if (response && response.data) {
let resultJSON = response.data;
// Save the result to cache
setCache("devicesFilters", JSON.stringify(resultJSON));
// Get the displayed filters from settings
const displayedFilters = createArray(getSetting("UI_columns_filters"));
// Clear any existing filters in the DOM
$('#columnFilters').empty();
console.log(displayedFilters);
// Ensure displayedFilters is an array and not empty
if (Array.isArray(displayedFilters) && displayedFilters.length > 0) {
$('#columnFiltersWrap').removeClass("hidden");
displayedFilters.forEach(columnHeaderStringKey => {
// Get the column name using the mapping function
const columnName = getColumnNameFromLangString(columnHeaderStringKey);
// Ensure columnName is valid before proceeding
if (columnName) {
// Add the filter to the columnFilters array as [columnName, columnHeaderStringKey]
columnFilters.push([columnName, columnHeaderStringKey]);
} else {
console.warn(`Invalid column header string key: ${columnHeaderStringKey}`);
}
});
// Filter resultJSON to include only entries with columnName in columnFilters
resultJSON = resultJSON.filter(entry =>
columnFilters.some(filter => filter[0] === entry.columnName)
);
// Expand resultJSON to include the columnHeaderStringKey
resultJSON.forEach(entry => {
// Find the matching columnHeaderStringKey from columnFilters
const matchingFilter = columnFilters.find(filter => filter[0] === entry.columnName);
// Add the columnHeaderStringKey to the entry
if (matchingFilter) {
entry['columnHeaderStringKey'] = matchingFilter[1];
}
});
console.log(resultJSON);
// Transforming the data
const transformed = {
filters: []
};
// Group data by columnName
resultJSON.forEach(entry => {
const existingFilter = transformed.filters.find(filter => filter.column === entry.columnName);
if (existingFilter) {
// Add the unique columnValue to options if not already present
if (!existingFilter.options.includes(entry.columnValue)) {
existingFilter.options.push(entry.columnValue);
}
} else {
// Create a new filter entry
transformed.filters.push({
column: entry.columnName,
headerKey: entry.columnHeaderStringKey,
options: [entry.columnValue]
});
}
});
// Sort options alphabetically for better readability
transformed.filters.forEach(filter => {
filter.options.sort();
});
// Output the result
transformedJson = transformed
// Process the fetched data
renderFilters(transformedJson);
} else {
console.log("No filters to display.");
}
} else {
console.error("Invalid response format from API");
}
},
error: function(xhr, status, error) {
console.error("Failed to fetch devices data 'table_devices_filters.json':", error);
}
});
}
// -------------------------------------------
// Server side component
function renderFilters(customData) {
// console.log(JSON.stringify(customData));
// Load filter data from the JSON file
$.ajax({
url: 'php/components/devices_filters.php', // PHP script URL
data: { filterObject: JSON.stringify(customData) }, // Send customData as JSON
type: 'POST',
dataType: 'html',
success: function(response) {
// console.log(response);
$('#columnFilters').html(response); // Replace container content with fetched HTML
$('#columnFilters').removeClass('hidden'); // Show the filters container
// Trigger the draw after select change
$('.filter-dropdown').on('change', function() {
// Collect filters
const columnFilters = collectFilters();
// Update DataTable with the new filters or search value (if applicable)
$('#tableDevices').DataTable().draw();
// Optionally, apply column filters (if using filters for individual columns)
const table = $('#tableDevices').DataTable();
table.columnFilters = columnFilters; // Apply your column filters logic
table.draw();
});
},
error: function(xhr, status, error) {
console.error('Error fetching filters:', error);
}
});
}
// -------------------------------------------
// Function to collect filters
function collectFilters() {
const columnFilters = [];
// Loop through each filter group
document.querySelectorAll('.filter-group').forEach(filterGroup => {
const dropdown = filterGroup.querySelector('.filter-dropdown');
if (dropdown) {
const filterColumn = dropdown.getAttribute('data-column');
const filterValue = dropdown.value;
if (filterValue && filterColumn) {
columnFilters.push({
filterColumn: filterColumn,
filterValue: filterValue
});
}
}
});
return columnFilters;
}
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
// Map column index to column name for GraphQL query // Map column index to column name for GraphQL query
@@ -387,8 +599,6 @@ function initializeDatatable (status) {
} }
// todo: dynamically filter based on status // todo: dynamically filter based on status
var table = $('#tableDevices').DataTable({ var table = $('#tableDevices').DataTable({
"serverSide": true, "serverSide": true,
"processing": true, "processing": true,
@@ -446,6 +656,12 @@ function initializeDatatable (status) {
console.log(d); console.log(d);
// Handle empty filters
let columnFilters = collectFilters();
if (columnFilters.length === 0) {
columnFilters = [];
}
// Prepare query variables for pagination, sorting, and search // Prepare query variables for pagination, sorting, and search
let query = { let query = {
@@ -460,7 +676,8 @@ function initializeDatatable (status) {
"order": d.order[0].dir.toUpperCase() // Sort direction (ASC/DESC) "order": d.order[0].dir.toUpperCase() // Sort direction (ASC/DESC)
}] : [], // Default to an empty array if no sorting is defined }] : [], // Default to an empty array if no sorting is defined
"search": d.search.value, // Search query "search": d.search.value, // Search query
"status": deviceStatus "status": deviceStatus,
"filters" : columnFilters
} }
} }
@@ -711,18 +928,18 @@ function initializeDatatable (status) {
// Save cookie Rows displayed, and Parameters rows & order // Save cookie Rows displayed, and Parameters rows & order
$('#tableDevices').on( 'length.dt', function ( e, settings, len ) { $('#tableDevices').on( 'length.dt', function ( e, settings, len ) {
setCookie ("nax_parTableRows", len, 129600); // save for 90 days setCache ("nax_parTableRows", len, 129600); // save for 90 days
} ); } );
$('#tableDevices').on( 'order.dt', function () { $('#tableDevices').on( 'order.dt', function () {
setCookie ("nax_parTableOrder", JSON.stringify (table.order()), 129600); // save for 90 days setCache ("nax_parTableOrder", JSON.stringify (table.order()), 129600); // save for 90 days
} ); } );
// add multi-edit button // add multi-edit button
$('#multiEditPlc').append( $('#multiEditPlc').append(
`<button type="submit" id="multiEdit" class="btn btn-primary" style="display:none" onclick="multiEditDevices();"> `<span type="submit" id="multiEdit" class="pointer " style="display:none" onclick="multiEditDevices();">
<i class="fa fa-pencil pointer" ></i> ${getString("Device_MultiEdit")} <a href="#"><i class="fa fa-pencil " ></i> ${getString("Device_MultiEdit")} </a>
</button>`) </span>`)
// Event listener for row selection in DataTable // Event listener for row selection in DataTable
$('#tableDevices').on('click', 'tr', function (e) { $('#tableDevices').on('click', 'tr', function (e) {
@@ -807,7 +1024,7 @@ function multiEditDevices()
} }
// redirect to the Maintenance section // redirect to the Maintenance section
window.location.href = window.location.origin + '/maintenance.php#tab_multiEdit?macs=' + macs.slice(0, -1); window.location.href = './maintenance.php#tab_multiEdit?macs=' + macs.slice(0, -1);
} }

View File

@@ -1,70 +0,0 @@
<?php
require 'php/templates/header.php';
?>
<div id="donationsPage" class="content-wrapper">
<!-- Content header--------------------------------------------------------- -->
<section class="content-header">
<h1 id="pageTitle">
<i class="fa fa-heart"></i>
</h1>
</section>
<!-- Main content ---------------------------------------------------------- -->
<section class="content donations">
<div id="donationsText" class="box box-solid"></div>
<div class="content-header">
<h3 class="box-title " id="donationsPlatforms"></h3>
</div>
<div class="box box-solid">
<div class="box-body">
<div class="col-sm-2">
<a target="_blank" href="https://github.com/sponsors/jokob-sk">
<img alt="Sponsor Me on GitHub" src="https://i.imgur.com/X6p5ACK.png" width="150px">
</a>
</div>
<div class="col-sm-2">
<a target="_blank" href="https://www.buymeacoffee.com/jokobsk">
<img alt="Buy Me A Coffee" src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" width="117px" height="30px">
</a>
</div>
<div class="col-sm-2">
<a target="_blank" href="https://www.patreon.com/user?u=84385063">
<img alt="Support me on patreon" src="https://upload.wikimedia.org/wikipedia/commons/thumb/8/82/Patreon_logo_with_wordmark.svg/512px-Patreon_logo_with_wordmark.svg.png" width="117px">
</a>
</div>
</div>
</div>
<div class="content-header">
<h3 class="box-title " id="donationsOthers"></h3>
</div>
<div class="box box-solid">
<div class="box-body">
<div class="col-sm-12">
<ul>
<li>Bitcoin: <code>1N8tupjeCK12qRVU2XrV17WvKK7LCawyZM</code></li>
<li>Ethereum: <code>0x6e2749Cb42F4411bc98501406BdcD82244e3f9C7</code></li>
</ul>
</div>
</div>
</div>
<div>
</section>
</div> <!-- End of class="content-wrapper" -->
<script>
function init()
{
$("#donationsText").html(getString("Donations_Text"))
$("#pageTitle").append(getString("Donations_Title"))
$("#donationsPlatforms").append(getString("Donations_Platforms"))
$("#donationsOthers").append(getString("Donations_Others"))
}
init();
</script>
<?php
require 'php/templates/footer.php';
?>

View File

@@ -1,17 +1,3 @@
<!--
#---------------------------------------------------------------------------------#
# NetAlertX #
# Open Source Network Guard / WIFI & LAN intrusion detector #
# #
# events.php - Front module. Events page #
#---------------------------------------------------------------------------------#
# Puche 2021 pi.alert.application@gmail.com GNU GPLv3 #
# jokob-sk 2022 jokob.sk@gmail.com GNU GPLv3 #
# leiweibau 2022 https://github.com/leiweibau GNU GPLv3 #
# cvc90 2023 https://github.com/cvc90 GNU GPLv3 #
#---------------------------------------------------------------------------------#
-->
<?php <?php
require 'php/templates/header.php'; require 'php/templates/header.php';
?> ?>
@@ -19,26 +5,7 @@
<!-- ----------------------------------------------------------------------- --> <!-- ----------------------------------------------------------------------- -->
<!-- Page ------------------------------------------------------------------ --> <!-- Page ------------------------------------------------------------------ -->
<div class="content-wrapper"> <div class="content-wrapper eventsPage">
<!-- Content header--------------------------------------------------------- -->
<section class="content-header">
<h1 id="pageTitle">
<i class="fa fa-bolt"></i>
<?= lang('Events_Title');?>
</h1>
<!-- period selector -->
<span class="breadcrumb" style="top: 0px;">
<select class="form-control" id="period" onchange="javascript: periodChanged();">
<option value="1 day"><?= lang('Events_Periodselect_today');?></option>
<option value="7 days"><?= lang('Events_Periodselect_LastWeek');?></option>
<option value="1 month" selected><?= lang('Events_Periodselect_LastMonth');?></option>
<option value="1 year"><?= lang('Events_Periodselect_LastYear');?></option>
<option value="100 years"><?= lang('Events_Periodselect_All');?></option>
</select>
</span>
</section>
<!-- Main content ---------------------------------------------------------- --> <!-- Main content ---------------------------------------------------------- -->
<section class="content"> <section class="content">
@@ -123,15 +90,31 @@
<!-- datatable ------------------------------------------------------------- --> <!-- datatable ------------------------------------------------------------- -->
<div class="row"> <div class="row">
<div class="col-xs-12"> <div class="col-xs-12">
<div id="tableEventsBox" class="box"> <div id="tableEventsBox" class="box">
<!-- box-header --> <!-- box-header -->
<div class="box-header"> <div class="box-header col-xs-12">
<h3 id="tableEventsTitle" class="box-title text-gray">Events</h3> <h3 id="tableEventsTitle" class="box-title text-gray col-xs-10">Events</h3>
<div class="eventsPeriodSelectWrap col-xs-2">
<select class="form-control" id="period" onchange="javascript: periodChanged();">
<option value="1 day"><?= lang('Events_Periodselect_today');?></option>
<option value="7 days"><?= lang('Events_Periodselect_LastWeek');?></option>
<option value="1 month" selected><?= lang('Events_Periodselect_LastMonth');?></option>
<option value="1 year"><?= lang('Events_Periodselect_LastYear');?></option>
<option value="100 years"><?= lang('Events_Periodselect_All');?></option>
</select>
</div>
</div> </div>
<!-- table --> <!-- table -->
<div class="box-body table-responsive"> <div class="box-body table-responsive">
<table id="tableEvents" class="table table-bordered table-hover table-striped "> <table id="tableEvents" class="table table-bordered table-hover table-striped ">
<thead> <thead>
<tr> <tr>

View File

@@ -1,18 +1,9 @@
<?php <?php
require 'php/templates/header.php'; require 'php/templates/header.php';
require 'php/templates/notification.php';
?> ?>
<!-- Page ------------------------------------------------------------------ --> <!-- Page ------------------------------------------------------------------ -->
<div class="content-wrapper"> <div class="content-wrapper">
<!-- Content header--------------------------------------------------------- -->
<section class="content-header">
<?php require 'php/templates/notification.php'; ?>
<h1 id="pageTitle">
<i class="fa fa-question"></i>
<?= lang('HelpFAQ_Title');?>
</h1>
</section>
<!-- Main content ---------------------------------------------------------- --> <!-- Main content ---------------------------------------------------------- -->
<section class="content"> <section class="content">
<h4> <h4>

View File

@@ -115,9 +115,9 @@ function cacheSettings()
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
if(!getCache('completedCalls').includes('cacheSettings')) if(!getCache('completedCalls').includes('cacheSettings'))
{ {
$.get('/php/server/query_json.php', { file: 'table_settings.json', nocache: Date.now() }, function(resSet) { $.get('php/server/query_json.php', { file: 'table_settings.json', nocache: Date.now() }, function(resSet) {
$.get('/php/server/query_json.php', { file: 'plugins.json', nocache: Date.now() }, function(resPlug) { $.get('php/server/query_json.php', { file: 'plugins.json', nocache: Date.now() }, function(resPlug) {
pluginsData = resPlug["data"]; pluginsData = resPlug["data"];
settingsData = resSet["data"]; settingsData = resSet["data"];
@@ -225,7 +225,7 @@ function cacheStrings() {
}); });
// Fetch strings and translations from plugins // Fetch strings and translations from plugins
$.get('/php/server/query_json.php', { file: 'table_plugins_language_strings.json', nocache: Date.now() }) $.get('php/server/query_json.php', { file: 'table_plugins_language_strings.json', nocache: Date.now() })
.done((pluginRes) => { .done((pluginRes) => {
const data = pluginRes["data"]; const data = pluginRes["data"];
@@ -463,8 +463,6 @@ function utf8ToBase64(str) {
// General utilities // General utilities
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
// check if JSON object // check if JSON object
function isJsonObject(value) { function isJsonObject(value) {
return typeof value === 'object' && value !== null && !Array.isArray(value); return typeof value === 'object' && value !== null && !Array.isArray(value);
@@ -739,7 +737,7 @@ function forceLoadUrl(relativeUrl) {
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
function navigateToDeviceWithIp (ip) { function navigateToDeviceWithIp (ip) {
$.get('/php/server/query_json.php', { file: 'table_devices.json', nocache: Date.now() }, function(res) { $.get('php/server/query_json.php', { file: 'table_devices.json', nocache: Date.now() }, function(res) {
devices = res["data"]; devices = res["data"];
@@ -751,7 +749,7 @@ function navigateToDeviceWithIp (ip) {
{ {
mac = obj.devMac; mac = obj.devMac;
window.open(window.location.origin +'/deviceDetails.php?mac=' + mac , "_blank"); window.open('./deviceDetails.php?mac=' + mac , "_blank");
} }
}); });
@@ -778,6 +776,11 @@ function checkMacOrInternet(inputStr) {
} }
} }
// Alias
function isValidMac(value) {
return checkMacOrInternet(value);
}
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
// Gte MAC from query string // Gte MAC from query string
function getMac(){ function getMac(){
@@ -961,7 +964,7 @@ function cacheDevices()
// if(!getCache('completedCalls').includes('cacheDevices')) // if(!getCache('completedCalls').includes('cacheDevices'))
// { // {
$.get('/php/server/query_json.php', { file: 'table_devices.json', nocache: Date.now() }, function(data) { $.get('php/server/query_json.php', { file: 'table_devices.json', nocache: Date.now() }, function(data) {
// console.log(data) // console.log(data)
@@ -1327,7 +1330,7 @@ function clearCache() {
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
// Function to check if cache needs to be refreshed because of setting changes // Function to check if cache needs to be refreshed because of setting changes
function checkSettingChanges() { function checkSettingChanges() {
$.get('/php/server/query_json.php', { file: 'app_state.json', nocache: Date.now() }, function(appState) { $.get('php/server/query_json.php', { file: 'app_state.json', nocache: Date.now() }, function(appState) {
const importedMilliseconds = parseInt(appState["settingsImported"] * 1000); const importedMilliseconds = parseInt(appState["settingsImported"] * 1000);
const lastReloaded = parseInt(sessionStorage.getItem(sessionStorageKey + '_time')); const lastReloaded = parseInt(sessionStorage.getItem(sessionStorageKey + '_time'));
@@ -1382,7 +1385,7 @@ async function waitForGraphQLServer() {
// Returns 1 if running, 0 otherwise // Returns 1 if running, 0 otherwise
async function isGraphQLServerRunning() { async function isGraphQLServerRunning() {
try { try {
const response = await $.get('/php/server/query_json.php', { file: 'app_state.json', nocache: Date.now()}); const response = await $.get('php/server/query_json.php', { file: 'app_state.json', nocache: Date.now()});
console.log("graphQLServerStarted: " + response["graphQLServerStarted"]); console.log("graphQLServerStarted: " + response["graphQLServerStarted"]);
setCache("graphQLServerStarted", response["graphQLServerStarted"]); setCache("graphQLServerStarted", response["graphQLServerStarted"]);
return response["graphQLServerStarted"]; return response["graphQLServerStarted"];

View File

@@ -32,7 +32,7 @@ function renderList(
// remove first item containing the SQL query // remove first item containing the SQL query
options.shift(); options.shift();
const apiUrl = `php/server/dbHelper.php?action=read&rawSql=${encodeURIComponent(sqlQuery)}`; const apiUrl = `php/server/dbHelper.php?action=read&rawSql=${btoa(encodeURIComponent(sqlQuery))}`;
$.get(apiUrl, function (sqlOptionsData) { $.get(apiUrl, function (sqlOptionsData) {

View File

@@ -717,6 +717,7 @@ const handleElementOptions = (setKey, elementOptions, transformers, val) => {
let customParams = ""; let customParams = "";
let customId = ""; let customId = "";
let columns = []; let columns = [];
let base64Regex = "";
elementOptions.forEach((option) => { elementOptions.forEach((option) => {
@@ -773,6 +774,9 @@ const handleElementOptions = (setKey, elementOptions, transformers, val) => {
if (option.columns) { if (option.columns) {
columns = option.columns; columns = option.columns;
} }
if (option.base64Regex) {
base64Regex = option.base64Regex;
}
}); });
if (transformers.includes("sha256")) { if (transformers.includes("sha256")) {
@@ -796,7 +800,8 @@ const handleElementOptions = (setKey, elementOptions, transformers, val) => {
onChange, onChange,
customParams, customParams,
customId, customId,
columns columns,
base64Regex
}; };
}; };
@@ -973,7 +978,8 @@ function generateFormHtml(settingsData, set, overrideValue, overrideOptions, ori
onChange, onChange,
customParams, customParams,
customId, customId,
columns columns,
base64Regex
} = handleElementOptions(setKey, elementOptions, transformers, inVal); } = handleElementOptions(setKey, elementOptions, transformers, inVal);
// Override value // Override value
@@ -1022,6 +1028,7 @@ function generateFormHtml(settingsData, set, overrideValue, overrideOptions, ori
my-customparams="${customParams}" my-customparams="${customParams}"
my-customid="${customId}" my-customid="${customId}"
my-originalSetKey="${originalSetKey}" my-originalSetKey="${originalSetKey}"
my-base64Regex="${base64Regex}"
id="${setKey}${suffix}" id="${setKey}${suffix}"
type="${inputType}" type="${inputType}"
value="${val}" value="${val}"

View File

@@ -171,7 +171,46 @@ function updateIconPreview(elem) {
tryUpdateIcon(); tryUpdateIcon();
} }
// ----------------------------------------------
// Validate the value based on regex
// ⚠ IMPORTANT: use the below to get a valid REGEX ⚠
// const regexStr = String.raw`^(?:\*|(?:[0-9]|[1-5][0-9]|[0-9]+-[0-9]+|\*/[0-9]+))\s+(?:\*|(?:[0-9]|1[0-9]|2[0-3]|[0-9]+-[0-9]+|\*/[0-9]+))\s+(?:\*|(?:[1-9]|[12][0-9]|3[01]|[0-9]+-[0-9]+|\*/[0-9]+))\s+(?:\*|(?:[1-9]|1[0-2]|[0-9]+-[0-9]+|\*/[0-9]+))\s+(?:\*|(?:[0-6]|[0-6]-[0-6]|\*/[0-9]+))$`;
// console.log(btoa(regexStr));
function validateRegex(elem) {
const iconSpan = $(elem).parent().find(".validityCheck");
const inputElem = $(elem);
const regexTmp = atob($(inputElem).attr("my-base64Regex")); // Decode base64 regex
const regex = new RegExp(regexTmp); // Convert to a valid RegExp object
let attempts = 0;
function tryUpdateValidityResultIcon() {
let value = inputElem.val().trim(); // Ensure trimmed value
if (value === "") {
attempts++;
if (attempts < 10) {
setTimeout(tryUpdateValidityResultIcon, 1000); // Retry after 1 sec if empty
} else {
console.error("Input value is empty after 10 attempts");
}
return;
}
// Validate against regex
if (regex.test(value)) {
iconSpan.html("<i class='fa-regular fa-check'></i>");
} else {
iconSpan.html("<i class='fa-regular fa-xmark'></i>");
}
}
// Attach real-time validation on input change
inputElem.on("input", tryUpdateValidityResultIcon);
tryUpdateValidityResultIcon(); // Initial validation
}
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
// Nice checkboxes with iCheck // Nice checkboxes with iCheck
@@ -231,38 +270,65 @@ function copyToClipboard(buttonElement) {
// Simple Sortable Table columns // Simple Sortable Table columns
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
// Function to handle column sorting when a user clicks on a table header
function sortColumn(element) { function sortColumn(element) {
var th = $(element).closest('th'); var th = $(element).closest('th'); // Get the clicked table header
var table = th.closest('table'); var table = th.closest('table'); // Find the closest table
var columnIndex = th.index(); var columnIndex = th.index(); // Get the index of the column
var ascending = !th.data('asc'); var ascending = !th.data('asc'); // Toggle sorting order
sortTable(table, columnIndex, ascending); sortTable(table, columnIndex, ascending);
th.data('asc', ascending); th.data('asc', ascending); // Store sorting order
} }
// Function to sort the table based on the selected column
function sortTable(table, columnIndex, ascending) { function sortTable(table, columnIndex, ascending) {
var tbody = table.find('tbody'); var tbody = table.find('tbody'); // Get the table body
var rows = tbody.find('tr').toArray().sort(comparer(columnIndex)); var rows = tbody.find('tr').toArray().sort(comparer(columnIndex)); // Convert rows to an array and sort
if (!ascending) { if (!ascending) {
rows = rows.reverse(); rows = rows.reverse(); // Reverse order if descending
} }
for (var i = 0; i < rows.length; i++) { for (var i = 0; i < rows.length; i++) {
tbody.append(rows[i]); tbody.append(rows[i]); // Append sorted rows back to the table
} }
} }
// Function to compare values in the selected column
function comparer(index) { function comparer(index) {
return function(a, b) { return function (a, b) {
var valA = getCellValue(a, index); var valA = getCellValue(a, index);
var valB = getCellValue(b, index); var valB = getCellValue(b, index);
return $.isNumeric(valA) && $.isNumeric(valB) ? valA - valB : valA.localeCompare(valB);
// Check if both values are valid IP addresses, and sort numerically if so
if (isIPAddress(valA) && isIPAddress(valB)) {
return ipToNum(valA) - ipToNum(valB);
}
// If both values are numbers, sort numerically
if ($.isNumeric(valA) && $.isNumeric(valB)) {
return valA - valB;
}
// Otherwise, sort as text
return valA.localeCompare(valB);
}; };
} }
// Function to get the text value from a table cell
function getCellValue(row, index) { function getCellValue(row, index) {
return $(row).children('td').eq(index).text(); return $(row).children('td').eq(index).text().trim(); // Get text from the specified column and trim spaces
} }
// Function to check if a string is a valid IPv4 address
function isIPAddress(value) {
return /^\d{1,3}(\.\d{1,3}){3}$/.test(value); // Regular expression to match IPv4 format
}
// Function to convert an IP address to a numeric value for sorting
function ipToNum(ip) {
return ip.split('.').reduce((acc, octet) => (acc << 8) + parseInt(octet, 10), 0);
}
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
// handling events // handling events
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
@@ -508,8 +574,52 @@ function showIconSelection() {
} }
// "Device_TableHead_Owner",
// "Device_TableHead_Type",
// "Device_TableHead_Group",
// "Device_TableHead_Status",
// "Device_TableHead_Location",
// "Device_TableHead_Vendor",
// "Device_TableHead_SyncHubNodeName",
// "Device_TableHead_NetworkSite",
// "Device_TableHead_SSID",
// "Device_TableHead_SourcePlugin"
// -----------------------------------------------------------------------------
// Get teh correct db column code name based on table header title string
function getColumnNameFromLangString(headStringKey) {
columnNameMap = {
"Device_TableHead_Name": "devName",
"Device_TableHead_Owner": "devOwner",
"Device_TableHead_Type": "devType",
"Device_TableHead_Icon": "devIcon",
"Device_TableHead_Favorite": "devFavorite",
"Device_TableHead_Group": "devGroup",
"Device_TableHead_FirstSession": "devFirstConnection",
"Device_TableHead_LastSession": "devLastConnection",
"Device_TableHead_LastIP": "devLastIP",
"Device_TableHead_MAC": "devMac",
"Device_TableHead_Status": "devStatus",
"Device_TableHead_MAC_full": "devMac",
"Device_TableHead_LastIPOrder": "devIpLong",
"Device_TableHead_Rowid": "rowid",
"Device_TableHead_Parent_MAC": "devParentMAC",
"Device_TableHead_Connected_Devices": "devParentChildrenCount",
"Device_TableHead_Location": "devLocation",
"Device_TableHead_Vendor": "devVendor",
"Device_TableHead_Port": "devParentPort",
"Device_TableHead_GUID": "devGUID",
"Device_TableHead_SyncHubNodeName": "devSyncHubNode",
"Device_TableHead_NetworkSite": "devSite",
"Device_TableHead_SSID": "devSSID",
"Device_TableHead_SourcePlugin": "devSourcePlugin",
"Device_TableHead_PresentLastScan": "devPresentLastScan",
"Device_TableHead_AlertDown": "devAlertDown",
"Device_TableHead_CustomProps": "devCustomProps"
};
return columnNameMap[headStringKey] || "";
}
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------

4178
front/lib/treeviz/bundle.js Executable file

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,47 +1,16 @@
<?php
#---------------------------------------------------------------------------------#
# NetAlertX #
# Open Source Network Guard / WIFI & LAN intrusion detector #
# #
# maintenance.php - Front module. Server side. Maintenance #
#---------------------------------------------------------------------------------#
# Puche 2021 pi.alert.application@gmail.com GNU GPLv3 #
# jokob-sk 2022 jokob.sk@gmail.com GNU GPLv3 #
# leiweibau 2022 https://github.com/leiweibau GNU GPLv3 #
# cvc90 2023 https://github.com/cvc90 GNU GPLv3 #
#---------------------------------------------------------------------------------#
//------------------------------------------------------------------------------
?>
<?php <?php
require 'php/templates/header.php'; require 'php/templates/header.php';
require 'php/templates/notification.php';
?> ?>
<!-- ----------------------------------------------------------------------- -->
<!-- Page ------------------------------------------------------------------ --> <!-- Page ------------------------------------------------------------------ -->
<div class="content-wrapper" id="maintenancePage"> <div class="content-wrapper" id="maintenancePage">
<!-- Content header--------------------------------------------------------- --> <!-- Main content ---------------------------------------------------------- -->
<section class="content-header"> <section class="content">
<?php require 'php/templates/notification.php'; ?>
<h1 id="pageTitle">
<i class="fa fa-wrench"></i>
<?= lang('Maintenance_Title');?>
</h1>
</section>
<!-- Main content ---------------------------------------------------------- -->
<section class="content">
<?php <?php
// Size and last mod of DB ------------------------------------------------------ // Size and last mod of DB ------------------------------------------------------
@@ -91,10 +60,11 @@ $db->close();
<div class="db_info_table_row"> <div class="db_info_table_row">
<div class="db_info_table_cell" style="min-width: 140px"><?= lang('Maintenance_version');?> <div class="db_info_table_cell" style="min-width: 140px"><?= lang('Maintenance_version');?>
<a href="https://github.com/jokob-sk/NetAlertX/blob/main/docs/VERSIONS.md" target="_blank"> <span><i class="fa fa-circle-question"></i></a><span> <a href="https://github.com/jokob-sk/NetAlertX/blob/main/docs/VERSIONS.md" target="_blank"> <span><i class="fa fa-circle-question"></i></a><span>
</div> </div>
<div class="db_info_table_cell"> <div class="db_info_table_cell">
<div class="version" id="version" data-build-time="<?php echo file_get_contents( "buildtimestamp.txt");?>"><?php echo '<span id="new-version-text" class="myhidden">' .lang('Maintenance_new_version').'</span>'.'<span id="current-version-text" class="myhidden">' .lang('Maintenance_current_version').'</span>';?></div> <div class="version" id="version" data-build-time="<?php echo file_get_contents( "buildtimestamp.txt");?>">
<?php echo '<span id="new-version-text" class="myhidden"><i class="fa-solid fa-rocket fa-beat"></i> ' .lang('Maintenance_new_version').'</span>'.'<span id="current-version-text" class="myhidden">' .lang('Maintenance_current_version').'</span>';?>
</div>
</div> </div>
</div> </div>
<div class="db_info_table_row"> <div class="db_info_table_row">
@@ -209,26 +179,38 @@ $db->close();
</div> </div>
</div> </div>
<div class="tab-pane" id="tab_BackupRestore"> <div class="tab-pane" id="tab_BackupRestore">
<div class="db_info_table"> <div class="db_info_table">
<div class="db_info_table_row"> <div class="db_info_table_row">
<div class="db_tools_table_cell_a" > <div class="db_tools_table_cell_a" >
<button type="button" class="btn btn-default pa-btn bg-green dbtools-button" id="btnExportCSV" onclick="ExportCSV()"><?= lang('Maintenance_Tool_ExportCSV');?></button> <button type="button" class="btn btn-default pa-btn bg-green dbtools-button" id="btnExportCSV" onclick="ExportCSV()"><?= lang('Maintenance_Tool_ExportCSV');?></button>
</div> </div>
<div class="db_tools_table_cell_b"><?= lang('Maintenance_Tool_ExportCSV_text');?></div> <div class="db_tools_table_cell_b"><?= lang('Maintenance_Tool_ExportCSV_text');?></div>
</div> </div>
<div class="db_info_table_row"> <div class="db_info_table_row">
<div class="db_tools_table_cell_a" > <div class="db_tools_table_cell_a" >
<button type="button" class="btn btn-default pa-btn pa-btn-delete bg-red dbtools-button" id="btnImportCSV" onclick="askImportCSV()"><?= lang('Maintenance_Tool_ImportCSV');?></button> <button type="button" class="btn btn-default pa-btn pa-btn-delete bg-red dbtools-button" id="btnImportCSV" onclick="askImportCSV()"><?= lang('Maintenance_Tool_ImportCSV');?></button>
</div> </div>
<div class="db_tools_table_cell_b"><?= lang('Maintenance_Tool_ImportCSV_text');?></div> <div class="db_tools_table_cell_b"><?= lang('Maintenance_Tool_ImportCSV_text');?></div>
</div> </div>
<div class="db_info_table_row"> <div class="db_info_table_row">
<div class="db_tools_table_cell_a" > <div class="db_tools_table_cell_a" >
<button type="button" class="btn btn-default pa-btn pa-btn-delete bg-red dbtools-button" id="btnImportPastedCSV" onclick="askImportPastedCSV()"><?= lang('Maintenance_Tool_ImportPastedCSV');?></button> <button type="button" class="btn btn-default pa-btn pa-btn-delete bg-red dbtools-button" id="btnImportPastedCSV" onclick="askImportPastedCSV()"><?= lang('Maintenance_Tool_ImportPastedCSV');?></button>
</div> </div>
<div class="db_tools_table_cell_b"><?= lang('Maintenance_Tool_ImportPastedCSV_text');?></div> <div class="db_tools_table_cell_b"><?= lang('Maintenance_Tool_ImportPastedCSV_text');?></div>
</div> </div>
</div> <div class="db_info_table_row">
<div class="db_tools_table_cell_a" >
<button type="button" class="btn btn-default pa-btn bg-green dbtools-button" id="btnDownloadConfig" onclick="DownloadConfig()"><?= lang('Maintenance_Tool_DownloadConfig');?></button>
</div>
<div class="db_tools_table_cell_b"><?= lang('Maintenance_Tool_DownloadConfig_text');?></div>
</div>
<div class="db_info_table_row">
<div class="db_tools_table_cell_a" >
<button type="button" class="btn btn-default pa-btn pa-btn-delete bg-red dbtools-button" id="btnImportPastedConfig" onclick="askImportPastedConfig()"><?= lang('Maintenance_Tool_ImportPastedConfig');?></button>
</div>
<div class="db_tools_table_cell_b"><?= lang('Maintenance_Tool_ImportPastedConfig_text');?></div>
</div>
</div>
</div> </div>
<!-- ---------------------------Logging-------------------------------------------- --> <!-- ---------------------------Logging-------------------------------------------- -->
<div class="tab-pane" id="tab_Logging"> <div class="tab-pane" id="tab_Logging">
@@ -445,6 +427,44 @@ function restartBackend() {
}) })
} }
// -----------------------------------------------------------
// Import pasted Config ASK
function askImportPastedConfig() {
// Add new icon as base64 string
showModalInput ('<i class="fa fa-square-plus pointer"></i> <?= lang('Maintenance_Tool_ImportConfig_noti');?>', '<?= lang('Maintenance_Tool_ImportPastedConfig_noti_text');?>',
'<?= lang('Gen_Cancel');?>', '<?= lang('Gen_Okay');?>', 'UploadConfig');
}
// -----------------------------------------------------------
// Upload Settings Config
function UploadConfig()
{
// alert("aaa")
appConf = $('#modal-input-textarea').val()
// encode for import
appConfBase64 = btoa(appConf)
// import
$.post('php/server/query_replace_config.php', { config: appConfBase64 }, function(msg) {
console.log(msg);
// showMessage(msg);
write_notification(`[Maintenance] Settings imported from backup: ${msg}`, 'interrupt');
});
}
// -----------------------------------------------------------
// Download Settings Config
function DownloadConfig()
{
// Execute
openInNewTab("php/server/query_config.php?file=app.conf&download=true")
}
// ----------------------------------------------------------- // -----------------------------------------------------------
// Export CSV // Export CSV
function ExportCSV() function ExportCSV()

View File

@@ -81,7 +81,7 @@
settingsData = res["data"]; settingsData = res["data"];
excludedColumns = ["NEWDEV_devMac", "NEWDEV_devFirstConnection", "NEWDEV_devLastConnection", "NEWDEV_devLastNotification", "NEWDEV_devStaticIP", "NEWDEV_devScan", "NEWDEV_devPresentLastScan", "NEWDEV_devCustomProps" ] excludedColumns = ["NEWDEV_devMac", "NEWDEV_devFirstConnection", "NEWDEV_devLastConnection", "NEWDEV_devLastNotification", "NEWDEV_devScan", "NEWDEV_devPresentLastScan", "NEWDEV_devCustomProps" ]
const relevantColumns = settingsData.filter(set => const relevantColumns = settingsData.filter(set =>
set.setGroup === "NEWDEV" && set.setGroup === "NEWDEV" &&
@@ -136,7 +136,8 @@
onChange, onChange,
customParams, customParams,
customId, customId,
columns columns,
base64Regex
} = handleElementOptions('none', elementOptions, transformers, val = ""); } = handleElementOptions('none', elementOptions, transformers, val = "");
// render based on element type // render based on element type

View File

@@ -1,6 +1,7 @@
<?php <?php
require 'php/templates/header.php'; require 'php/templates/header.php';
require 'php/templates/notification.php';
// online / offline badges HTML snippets // online / offline badges HTML snippets
define('badge_online', '<div class="badge bg-green text-white" style="width: 60px;">Online</div>'); define('badge_online', '<div class="badge bg-green text-white" style="width: 60px;">Online</div>');
@@ -11,21 +12,17 @@
?> ?>
<!-- ----------------------------------------------------------------------- --> <script>
// show spinning icon
showSpinner()
</script>
<!-- Page ------------------------------------------------------------------ --> <!-- Page ------------------------------------------------------------------ -->
<div class="content-wrapper"> <div class="content-wrapper">
<!-- Content header--------------------------------------------------------- -->
<section class="content-header">
<?php require 'php/templates/notification.php'; ?>
<h1 id="pageTitle">
<i class="fa fa-network-wired"></i> <?= lang('Network_Title');?>
<span class="helpIconSmallTopRight"> <a target="_blank" href="https://github.com/jokob-sk/NetAlertX/blob/main/docs/NETWORK_TREE.md"><i class="fa fa-circle-question"></i></a><span>
</h1>
</section>
<span class="networkHelpIcon"> <a target="_blank" href="https://github.com/jokob-sk/NetAlertX/blob/main/docs/NETWORK_TREE.md"><i class="fa fa-circle-question"></i></a></span>
<div id="networkTree" class="drag"></div> <div id="networkTree" class="drag"></div>
@@ -467,9 +464,8 @@
require 'php/templates/footer.php'; require 'php/templates/footer.php';
?> ?>
<script src="lib/treeviz/bundle.js"></script>
<script src="lib/treeviz/index.js"></script> <script src="lib/treeviz/bundle.js.map"></script>
<script src="lib/treeviz/require.js"></script>
<script defer> <script defer>
@@ -484,6 +480,8 @@
return; return;
} }
orderTopologyBy = createArray(getSetting("UI_TOPOLOGY_ORDER"))
devicesListnew = rawData["data"].map(item => { devicesListnew = rawData["data"].map(item => {
return { return {
"name": item[0], "name": item[0],
@@ -497,13 +495,30 @@
"port": item[18] "port": item[18]
}; };
}).sort((a, b) => { }).sort((a, b) => {
// First sort by name alphabetically // Helper to safely parse port into an integer; invalid ports become Infinity for sorting
const nameCompare = a.name.localeCompare(b.name); const parsePort = (port) => {
if (nameCompare !== 0) { const parsed = parseInt(port, 10);
return isNaN(parsed) ? Infinity : parsed;
};
switch (orderTopologyBy[0]) {
case "Name":
// First sort by name alphabetically
const nameCompare = a.name.localeCompare(b.name);
if (nameCompare !== 0) {
return nameCompare; return nameCompare;
} }
// If names are the same, sort by port numerically // If names are the same, sort by port numerically
return a.port - b.port; return parsePort(a.port) - parsePort(b.port);
case "Port":
// Sort by port numerically
return parsePort(a.port) - parsePort(b.port);
default:
// Default: Sort by rowid (as a fallback)
return a.rowid - b.rowid;
}
}); });
setCache('devicesListNew', JSON.stringify(devicesListnew)); setCache('devicesListNew', JSON.stringify(devicesListnew));
@@ -511,7 +526,6 @@
// Init global variable // Init global variable
deviceListGlobal = devicesListnew; deviceListGlobal = devicesListnew;
// create tree // create tree
initTree(getHierarchy()); initTree(getHierarchy());
@@ -522,381 +536,414 @@
<script defer> <script defer>
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
// Tree functionality // Tree functionality
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
var leafNodesCount = 0;
var visibleNodesCount = 0;
var parentNodesCount = 0;
var hiddenMacs = []; // hidden children
var hiddenChildren = [];
var deviceListGlobal = null;
// ---------------------------------------------------------------------------
// Recursively get children nodes and build a tree
function getChildren(node, list, path, visited = [])
{
var children = [];
// Check for infinite recursion by seeing if the node has been visited before
if (visited.includes(node.mac.toLowerCase())) {
console.error("Infinite recursion detected at node:", node.mac);
write_notification("[ERROR] ⚠ Infinite recursion detected. You probably have assigned the Internet node to another children node or to itself. Please open a new issue on GitHub and describe how you did it.", 'interrupt')
return { error: "Infinite recursion detected", node: node.mac };
}
// Add current node to visited list
visited.push(node.mac.toLowerCase());
// Loop through all items to find children of the current node
for (var i in list) {
if (list[i].parentMac.toLowerCase() == node.mac.toLowerCase() && !hiddenMacs.includes(list[i].parentMac)) {
visibleNodesCount++;
// Process children recursively, passing a copy of the visited list
children.push(getChildren(list[i], list, path + ((path == "") ? "" : '|') + list[i].parentMac, visited));
}
}
// Track leaf and parent node counts
if (children.length == 0) {
leafNodesCount++;
} else {
parentNodesCount++;
}
return {
name: node.name,
path: path,
mac: node.mac,
port: node.port,
id: node.mac,
parentMac: node.parentMac,
icon: node.icon,
type: node.type,
status: node.status,
hasChildren: children.length > 0 || hiddenMacs.includes(node.mac),
hiddenChildren: hiddenMacs.includes(node.mac),
qty: children.length,
children: children
};
}
// ---------------------------------------------------------------------------
function getHierarchy()
{
for(i in deviceListGlobal)
{
if(deviceListGlobal[i].mac == 'Internet')
{
return (getChildren(deviceListGlobal[i], deviceListGlobal, ''))
break;
}
}
}
// ---------------------------------------------------------------------------
function getFlatData() {
var result = [];
var leafNodesCount = 0; var leafNodesCount = 0;
var visibleNodesCount = 0;
var parentNodesCount = 0; var parentNodesCount = 0;
var hiddenMacs = []; // hidden children var visibleNodesCount = 0;
var hiddenChildren = [];
var deviceListGlobal = null;
for (let node of deviceListGlobal) {
let path = "";
let childrenCount = 0;
// count children of this node
for (let nodeTmp of deviceListGlobal) {
if (nodeTmp.parentMac === node.mac) {
childrenCount++;
}
}
// store parent and leaf node count
if (childrenCount === 0) {
leafNodesCount++;
} else {
parentNodesCount++;
}
// --------------------------------------------------------------------------- if (!hiddenMacs.includes(node.parentMac)) {
// Recursively get children nodes and build a tree if (!((node.parentMac == "") && node.mac != "Internet")) { // skip leaf nodes without father that are not the root
function getChildren(node, list, path, visited = []) visibleNodesCount++;
{
var children = [];
// Check for infinite recursion by seeing if the node has been visited before result.push({
if (visited.includes(node.mac.toLowerCase())) { name: node.name,
console.error("Infinite recursion detected at node:", node.mac); path: path,
write_notification("[ERROR] ⚠ Infinite recursion detected. You probably have assigned the Internet node to another children node or to itself. Please open a new issue on GitHub and describe how you did it.", 'interrupt') mac: node.mac, // Replacing "mac" with "id"
return { error: "Infinite recursion detected", node: node.mac }; parentMac: node.mac == "Internet" ? "" : node.parentMac, // Replacing "parentMac" with "father"
} port: node.port,
icon: node.icon,
// Add current node to visited list type: node.type,
visited.push(node.mac.toLowerCase()); status: node.status,
hasChildren: childrenCount > 0 || hiddenMacs.includes(node.mac),
// Loop through all items to find children of the current node hiddenChildren: hiddenMacs.includes(node.mac),
for (var i in list) { qty: childrenCount,
if (list[i].parentMac.toLowerCase() == node.mac.toLowerCase() && !hiddenMacs.includes(list[i].parentMac)) { });
visibleNodesCount++;
// Process children recursively, passing a copy of the visited list
children.push(getChildren(list[i], list, path + ((path == "") ? "" : '|') + list[i].parentMac, visited));
}
}
// Track leaf and parent node counts
if (children.length == 0) {
leafNodesCount++;
} else {
parentNodesCount++;
}
return {
name: node.name,
path: path,
mac: node.mac,
port: node.port,
id: node.mac,
parentMac: node.parentMac,
icon: node.icon,
type: node.type,
status: node.status,
hasChildren: children.length > 0 || hiddenMacs.includes(node.mac),
hiddenChildren: hiddenMacs.includes(node.mac),
qty: children.length,
children: children
};
}
// ---------------------------------------------------------------------------
function getHierarchy()
{
for(i in deviceListGlobal)
{
if(deviceListGlobal[i].mac == 'Internet')
{
return (getChildren(deviceListGlobal[i], deviceListGlobal, ''))
break;
} }
} }
} }
return result;
}
// --------------------------------------------------------------------------- //---------------------------------------------------------------------------
function toggleSubTree(parentMac, treePath) function toggleSubTree(parentMac, treePath)
{
treePath = treePath.split('|')
if(!hiddenMacs.includes(parentMac))
{ {
treePath = treePath.split('|') hiddenMacs.push(parentMac)
}
if(!hiddenMacs.includes(parentMac)) else
{ {
hiddenMacs.push(parentMac) removeItemFromArray(hiddenMacs, parentMac)
}
else
{
removeItemFromArray(hiddenMacs, parentMac)
}
// updatedTree = myHierarchy;
updatedTree = getHierarchy()
myTree.refresh(updatedTree);
// re-attach any onclick events
attachTreeEvents();
} }
// --------------------------------------------------------------------------- updatedTree = getHierarchy()
function attachTreeEvents() myTree.refresh(updatedTree);
// re-attach any onclick events
attachTreeEvents();
}
// ---------------------------------------------------------------------------
function attachTreeEvents()
{
// toggle subtree functionality
$("div[data-mytreemac]").each(function(){
$(this).attr('onclick', 'toggleSubTree("'+$(this).attr('data-mytreemac')+'","'+ $(this).attr('data-mytreepath')+'")')
});
}
// ---------------------------------------------------------------------------
// Handle network node click - select correct tab in the bottom table
function handleNodeClick(nodeData)
{
const targetTabMAC = nodeData.data.mac;
var targetTab = $(`a[data-mytabmac="${targetTabMAC}"]`);
// Simulate a click event on the target tab
targetTab.click();
}
// ---------------------------------------------------------------------------
var myTree;
var visibleTreeArea = $(window).height()-155;
var nodeWidth = 120;
var emSize;
var nodeHeight;
var sizeCoefficient = 1.4
function initTree(myHierarchy)
{
// calculate the drawing area based on teh tree width and available screen size
var treeAreaHeight = visibleTreeArea > 800 ? 800 : visibleTreeArea;
let screenWidth = $('.content-header').width();
let treeWidth = (nodeWidth + 20) * parentNodesCount;
let treeAreaWidth = screenWidth < treeWidth ? treeWidth : screenWidth;
// init the drawing area size
$("#networkTree").attr('style', `height:${treeAreaHeight}px; width:${treeAreaWidth}px`)
if(myHierarchy.type == "")
{ {
// toggle subtree functionality showModalOk(getString('Network_Configuration_Error'), getString('Network_Root_Not_Configured'))
$("div[data-mytreemac]").each(function(){
$(this).attr('onclick', 'toggleSubTree("'+$(this).attr('data-mytreemac')+'","'+ $(this).attr('data-mytreepath')+'")') return;
});
} }
// --------------------------------------------------------------------------- // calculate the font size of the leaf nodes to fit everything into the tree area
// Handle network node click - select correct tab in the bottom table leafNodesCount == 0 ? 1 : leafNodesCount;
function handleNodeClick(event) emSize = ((treeAreaHeight/(25*leafNodesCount)).toFixed(2));
{ emSize = emSize > 1 ? 1 : emSize;
// console.log(event.target.offsetParent.offsetParent)
const targetTabMAC = $(event.target.offsetParent.offsetParent).attr("data-mytreemacmain"); // nodeHeight = ((emSize*100*0.30).toFixed(0))
nodeHeight = ((emSize*100*0.30).toFixed(0))
var targetTab = $(`a[data-mytabmac="${targetTabMAC}"]`); console.log(Treeviz);
// Simulate a click event on the target tab myTree = Treeviz.create({
targetTab.click(); htmlId: "networkTree",
} renderNode: nodeData => {
// --------------------------------------------------------------------------- var fontSize = "font-size:"+emSize+"em;";
var myTree;
var visibleTreeArea = $(window).height()-155;
var nodeWidth = 160;
var emSize;
var nodeHeight;
var sizeCoefficient = 1
function initTree(myHierarchy) (!emptyArr.includes(nodeData.data.port )) ? port = nodeData.data.port : port = "";
{
console.log(myHierarchy)
// calculate the drawing area based on teh tree width and available screen size (port == "" || port == 0 || port == 'None' ) ? portBckgIcon = `<i class="fa fa-wifi"></i>` : portBckgIcon = `<i class="fa fa-ethernet"></i>`;
var treeAreaHeight = visibleTreeArea > 800 ? 800 : visibleTreeArea;
let screenWidth = $('.content-header').width();
let treeWidth = (nodeWidth + 20) * parentNodesCount;
let treeAreaWidth = screenWidth < treeWidth ? treeWidth : screenWidth;
// init the drawing area size portHtml = (port == "" || port == 0 || port == 'None' ) ? "" : port;
$("#networkTree").attr('style', `height:${treeAreaHeight}px; width:${treeAreaWidth}px`)
if(myHierarchy.type == "") // Build HTML for individual nodes in the network diagram
{ deviceIcon = (!emptyArr.includes(nodeData.data.icon )) ?
showModalOk(getString('Network_Configuration_Error'), getString('Network_Root_Not_Configured')) `<div class="netIcon">
${atob(nodeData.data.icon)}
</div>` : "";
devicePort = `<div class="netPort"
style="width:${emSize*sizeCoefficient}em;height:${emSize*sizeCoefficient}em">
${portHtml}</div>
<div class="portBckgIcon"
style="margin-left:-${emSize*sizeCoefficient}em;">
${portBckgIcon}
</div>`;
collapseExpandIcon = nodeData.data.hiddenChildren ?
"square-plus" : "square-minus";
return; // generate +/- icon if node has children nodes
} collapseExpandHtml = nodeData.data.hasChildren ?
`<div class="netCollapse"
style="font-size:${emSize*sizeCoefficient}em;top:${emSize/6}em"
data-mytreepath="${nodeData.data.path}"
data-mytreemac="${nodeData.data.mac}">
<i class="fa fa-${collapseExpandIcon} pointer"></i>
</div>` : "";
// calculate the font size of the leaf nodes to fit everything into the tree area selectedNodeMac = $(".nav-tabs-custom .active a").attr('data-mytabmac')
leafNodesCount == 0 ? 1 : leafNodesCount;
emSize = ((treeAreaHeight/(25*leafNodesCount)).toFixed(2));
emSize = emSize > 1 ? 1 : emSize;
// nodeHeight = ((emSize*100*0.30).toFixed(0)) highlightedCss = nodeData.data.mac == selectedNodeMac ?
nodeHeight = ((emSize*100*0.30).toFixed(0)) " highlightedNode" : "";
console.log(Treeviz); // css indicating online/offline status
statusCss = ` netStatus-${nodeData.data.status}`;
myTree = Treeviz.create({
htmlId: "networkTree",
renderNode: nodeData => {
var fontSize = "font-size:"+emSize+"em;";
(!emptyArr.includes(nodeData.data.port )) ? port = nodeData.data.port : port = "";
(port == "" || port == 0 || port == 'None' ) ? portBckgIcon = `<i class="fa fa-wifi"></i>` : portBckgIcon = `<i class="fa fa-ethernet"></i>`;
portHtml = (port == "" || port == 0 || port == 'None' ) ? "" : port
// Build HTML for individual nodes in the network diagram
deviceIcon = (!emptyArr.includes(nodeData.data.icon )) ?
`<div class="netIcon">
${atob(nodeData.data.icon)}
</div>` : "";
devicePort = `<div class="netPort"
style="width:${emSize*sizeCoefficient}em;height:${emSize*sizeCoefficient}em">
${portHtml}</div>
<div class="portBckgIcon"
style="margin-left:-${emSize*sizeCoefficient}em;">
${portBckgIcon}
</div>`;
collapseExpandIcon = nodeData.data.hiddenChildren ?
"square-plus" : "square-minus";
// generate +/- icon if node has children nodes
collapseExpandHtml = nodeData.data.hasChildren ?
`<div class="netCollapse"
style="font-size:${emSize*sizeCoefficient}em;top:${1/2*emSize*sizeCoefficient}em"
data-mytreepath="${nodeData.data.path}"
data-mytreemac="${nodeData.data.mac}">
<i class="fa fa-${collapseExpandIcon} pointer"></i>
</div>` : "";
selectedNodeMac = $(".nav-tabs-custom .active a").attr('data-mytabmac')
highlightedCss = nodeData.data.mac == selectedNodeMac ?
" highlightedNode" : "";
// css indicating online/offline status
statusCss = ` netStatus-${nodeData.data.status}`;
return result = `<div class="box ${nodeData.data.hasChildren ? "pointer":""} ${statusCss} ${highlightedCss}"
data-mytreemacmain="${nodeData.data.mac}"
style="height:${nodeData.settings.nodeHeight}px;${fontSize}"
>
<div class="netNodeText">
<strong>${devicePort} ${deviceIcon}
<span class="spanNetworkTree anonymizeDev" >${nodeData.data.name}</span>
</strong>
${collapseExpandHtml}
</div>
</div>`;
},
onNodeClick: nodeData => {
console.log(this)
},
mainAxisNodeSpacing: 'auto',
// mainAxisNodeSpacing: 3,
secondaryAxisNodeSpacing: 0.3,
nodeHeight: nodeHeight.toString(),
marginTop: '5',
hasZoom: true,
hasPan: true,
// marginLeft: '15',
idKey: "id",
hasFlatData: false,
linkWidth: (nodeData) => 3,
linkColor: (nodeData) => "#ffcc80",
onNodeClick: (nodeData) => handleNodeClick(nodeData),
relationnalField: "children",
});
myTree.refresh(myHierarchy);
// hide spinning icon
hideSpinner()
}
// ---------------------------------------------------------------------------
// Tabs functionality
// ---------------------------------------------------------------------------
// Register events on tab change
$('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
initButtons()
return result = `<div class="box ${nodeData.data.hasChildren ? "pointer":""} ${statusCss} ${highlightedCss}"
data-mytreemacmain="${nodeData.data.mac}"
style="height:${nodeData.settings.nodeHeight}px;${fontSize}"
>
<div class="netNodeText">
<strong>${devicePort} ${deviceIcon}
<span class="spanNetworkTree anonymizeDev" >${nodeData.data.name}</span>
</strong>
${collapseExpandHtml}
</div>
</div>`;
},
mainAxisNodeSpacing: 'auto',
secondaryAxisNodeSpacing: 0.3,
nodeHeight: nodeHeight.toString(),
marginTop: '5',
isHorizontal : true,
hasZoom: true,
hasPan: true,
marginLeft: '15',
idKey: "mac",
hasFlatData: false,
relationnalField: "children",
linkWidth: (nodeData) => 3,
linkColor: (nodeData) => "#ffcc80",
onNodeClick: (nodeData) => handleNodeClick(nodeData),
}); });
console.log(deviceListGlobal);
myTree.refresh(myHierarchy);
// --------------------------------------------------------------------------- // hide spinning icon
function initTab() hideSpinner()
{ }
key = "activeNetworkTab"
// default selection
selectedTab = "Internet_id"
// the #target from the url
target = getQueryString('mac')
// update cookie if target specified
if(target != "")
{
setCache(key, target.replaceAll(":","_")+'_id') // _id is added so it doesn't conflict with AdminLTE tab behavior
}
// get the tab id from the cookie (already overridden by the target)
if(!emptyArr.includes(getCache(key)))
{
selectedTab = getCache(key);
}
// Activate panel
$('.nav-tabs a[id='+ selectedTab +']').tab('show');
// When changed save new current tab
$('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
setCache(key, $(e.target).attr('id'))
});
}
// ---------------------------------------------------------------------------
function initDeviceNamesFromMACs()
{
$('.mac-to-name').each(function() {
var dataMacValue = $(this).attr('my-data-mac');
if(dataMacValue =="" )
{
$(this).html(getString("Network_Root"))
}
else{
$(this).html(getNameByMacAddress(dataMacValue));
}
}); // ---------------------------------------------------------------------------
// Tabs functionality
// ---------------------------------------------------------------------------
// Register events on tab change
} $('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
// ---------------------------------------------------------------------------
function initButtons()
{
var currentNodeMac = $(".tab-content .active td[data-mynodemac]").attr('data-mynodemac');
// change highlighted node in the tree
selNode = $("#networkTree .highlightedNode")[0]
// console.log(selNode)
if(selNode)
{
$(selNode).attr('class', $(selNode).attr('class').replace('highlightedNode'))
}
newSelNode = $("#networkTree div[data-mytreemacmain='"+currentNodeMac+"']")[0]
$(newSelNode).attr('class', $(newSelNode).attr('class') + ' highlightedNode')
// init the Assign buttons
$('#unassignedDevices button[data-myleafmac]').each(function(){
$(this).attr('onclick', `updateLeaf("${$(this).attr('data-myleafmac')}","${currentNodeMac}")`)
});
// init Unassign buttons
$('#assignedDevices button[data-myleafmac]').each(function(){
$(this).attr('onclick', `updateLeaf("${$(this).attr('data-myleafmac')}","")`)
});
}
// ---------------------------------------------------------------------------
function updateLeaf(leafMac,nodeMac)
{
console.log(leafMac) // child
console.log(nodeMac) // parent
console.log(nodeMac != "") // parent
// prevent the assignment of the Internet root node avoiding recursion when generating the network tree topology
if(leafMac.toLowerCase().includes('internet') && nodeMac != "")
{
showMessage(getString('Network_Cant_Assign'))
}
else{
saveData('updateNetworkLeaf', leafMac, nodeMac);
setTimeout("location.reload();", 500); // refresh page
}
}
// show spinning icon
showSpinner()
// init device names where macs are used
initDeviceNamesFromMACs();
// init selected (first) tab
initTab();
// init Assign/Unassign buttons
initButtons() initButtons()
});
// ---------------------------------------------------------------------------
function initTab()
{
key = "activeNetworkTab"
// default selection
selectedTab = "Internet_id"
// the #target from the url
target = getQueryString('mac')
// update cookie if target specified
if(target != "")
{
setCache(key, target.replaceAll(":","_")+'_id') // _id is added so it doesn't conflict with AdminLTE tab behavior
}
// get the tab id from the cookie (already overridden by the target)
if(!emptyArr.includes(getCache(key)))
{
selectedTab = getCache(key);
}
// Activate panel
$('.nav-tabs a[id='+ selectedTab +']').tab('show');
// When changed save new current tab
$('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
setCache(key, $(e.target).attr('id'))
});
}
// ---------------------------------------------------------------------------
function initDeviceNamesFromMACs()
{
$('.mac-to-name').each(function() {
var dataMacValue = $(this).attr('my-data-mac');
if(dataMacValue =="" )
{
$(this).html(getString("Network_Root"))
}
else{
$(this).html(getNameByMacAddress(dataMacValue));
}
});
}
// ---------------------------------------------------------------------------
function initButtons()
{
var currentNodeMac = $(".tab-content .active td[data-mynodemac]").attr('data-mynodemac');
// change highlighted node in the tree
selNode = $("#networkTree .highlightedNode")[0]
// console.log(selNode)
if(selNode)
{
$(selNode).attr('class', $(selNode).attr('class').replace('highlightedNode'))
}
newSelNode = $("#networkTree div[data-mytreemacmain='"+currentNodeMac+"']")[0]
$(newSelNode).attr('class', $(newSelNode).attr('class') + ' highlightedNode')
// init the Assign buttons
$('#unassignedDevices button[data-myleafmac]').each(function(){
$(this).attr('onclick', `updateLeaf("${$(this).attr('data-myleafmac')}","${currentNodeMac}")`)
});
// init Unassign buttons
$('#assignedDevices button[data-myleafmac]').each(function(){
$(this).attr('onclick', `updateLeaf("${$(this).attr('data-myleafmac')}","")`)
});
}
// ---------------------------------------------------------------------------
function updateLeaf(leafMac,nodeMac)
{
console.log(leafMac) // child
console.log(nodeMac) // parent
console.log(nodeMac != "") // parent
// prevent the assignment of the Internet root node avoiding recursion when generating the network tree topology
if(leafMac.toLowerCase().includes('internet') && nodeMac != "")
{
showMessage(getString('Network_Cant_Assign'))
}
else{
saveData('updateNetworkLeaf', leafMac, nodeMac);
setTimeout("location.reload();", 500); // refresh page
}
}
// init device names where macs are used
initDeviceNamesFromMACs();
// init selected (first) tab
initTab();
// init Assign/Unassign buttons
initButtons()
</script> </script>

View File

@@ -0,0 +1,52 @@
<?php
//------------------------------------------------------------------------------
// Check if authenticated
require_once $_SERVER['DOCUMENT_ROOT'] . '/php/templates/security.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/php/server/db.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/php/templates/language/lang.php';
// Function to render a filter dropdown
function renderFilterDropdown($headerKey, $columnName, $values) {
// Generate dropdown options
$optionsHtml = '<option value="" selected>All</option>'; // Default "All" option
foreach ($values as $value) {
$escapedValue = htmlspecialchars($value);
$optionsHtml .= '<option value="' . $escapedValue . '">' . $escapedValue . '</option>';
}
// Generate the dropdown HTML
return '
<div class="filter-group input-group">
<label for="filter_' . htmlspecialchars($columnName) . '">' . lang($headerKey) . '</label>
<select id="filter_' . htmlspecialchars($columnName) . '" class="filter-dropdown" data-column="' . htmlspecialchars($columnName) . '">
' . $optionsHtml . '
</select>
</div>';
}
// Get filterObject from POST data
$filterObject = isset($_POST['filterObject']) ? json_decode($_POST['filterObject'], true) : [];
// Validate filterObject structure
if (!isset($filterObject['filters']) || !is_array($filterObject['filters'])) {
echo '<p class="error">Invalid filter data provided.</p>';
exit();
}
// Generate HTML for each filter in the filterObject
$html = '';
foreach ($filterObject['filters'] as $filter) {
if (isset($filter['column'], $filter['headerKey'], $filter['options'])) {
$html .= renderFilterDropdown($filter['headerKey'], $filter['column'], $filter['options']);
} else {
// Skip invalid entries
continue;
}
}
// Output the generated HTML
echo $html;
exit();
?>

View File

@@ -10,8 +10,12 @@
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// DB File Path // DB File Path
$DBFILE = dirname(__FILE__).'/../../../db/app.db'; // $DBFILE = dirname(__FILE__).'/../../../db/app.db';
$DBFILE_LOCKED_FILE = dirname(__FILE__).'/../../../log/db_is_locked.log'; // $DBFILE_LOCKED_FILE = dirname(__FILE__).'/../../../log/db_is_locked.log';
$scriptDir = realpath(dirname(__FILE__)); // Resolves symlinks to the actual physical path
$DBFILE = $scriptDir . '/../../../db/app.db';
$DBFILE_LOCKED_FILE = $scriptDir . '/../../../log/db_is_locked.log';
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// check if authenticated // check if authenticated
@@ -32,6 +36,14 @@ function SQLite3_connect($trytoreconnect = true, $retryCount = 0) {
global $db_locked; global $db_locked;
$db_locked = false; $db_locked = false;
if (!file_exists($DBFILE)) {
die("Database file not found: $DBFILE");
}
if (!file_exists(dirname($DBFILE_LOCKED_FILE))) {
die("Log directory not found: " . dirname($DBFILE_LOCKED_FILE));
}
// Write unlock status to the locked file // Write unlock status to the locked file
file_put_contents($DBFILE_LOCKED_FILE, '0'); file_put_contents($DBFILE_LOCKED_FILE, '0');
@@ -70,7 +82,7 @@ class CustomDatabaseWrapper {
private $maxRetries; private $maxRetries;
private $retryDelay; private $retryDelay;
public function __construct($filename, $flags = SQLITE3_OPEN_READWRITE | SQLITE3_OPEN_CREATE, $maxRetries = 10, $retryDelay = 1000, $encryptionKey = null) { public function __construct($filename, $flags = SQLITE3_OPEN_READWRITE | SQLITE3_OPEN_CREATE, $maxRetries = 3, $retryDelay = 1000, $encryptionKey = null) {
$this->sqlite = new SQLite3($filename, $flags, $encryptionKey); $this->sqlite = new SQLite3($filename, $flags, $encryptionKey);
$this->maxRetries = $maxRetries; $this->maxRetries = $maxRetries;
$this->retryDelay = $retryDelay; $this->retryDelay = $retryDelay;
@@ -116,7 +128,7 @@ class CustomDatabaseWrapper {
file_put_contents($DBFILE_LOCKED_FILE, '0'); file_put_contents($DBFILE_LOCKED_FILE, '0');
$message = 'Error executing query (attempts: ' . $attempts . '), query: ' . $query; $message = 'Error executing query (attempts: ' . $attempts . '), query: ' . $query;
write_notification($message); // write_notification($message);
error_log("Query failed after {$this->maxRetries} attempts: " . $this->sqlite->lastErrorMsg()); error_log("Query failed after {$this->maxRetries} attempts: " . $this->sqlite->lastErrorMsg());
} }

View File

@@ -63,7 +63,7 @@ require_once $_SERVER['DOCUMENT_ROOT'] . '/php/templates/security.php';
} }
if (isset ($_REQUEST['rawSql'])) { if (isset ($_REQUEST['rawSql'])) {
$rawSql = $_REQUEST['rawSql']; $rawSql = urldecode(base64_decode($_REQUEST['rawSql']));
} }
if (isset ($_REQUEST['dbtable'])) { if (isset ($_REQUEST['dbtable'])) {

View File

@@ -273,7 +273,8 @@ function setDeviceData() {
devFirstConnection, devFirstConnection,
devLastIP, devLastIP,
devGUID, devGUID,
devCustomProps devCustomProps,
devSourcePlugin
) VALUES ( ) VALUES (
'$mac', '$mac',
'$name', '$name',
@@ -300,7 +301,8 @@ function setDeviceData() {
'$devFirstConnection', '$devFirstConnection',
'$ip', '$ip',
'$devNewGuid', '$devNewGuid',
'$devCustomProps' '$devCustomProps',
'DUMMY'
)"; )";
} }

View File

@@ -11,8 +11,9 @@ require dirname(__FILE__).'/../server/init.php';
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// Handle incoming requests // Handle incoming requests
if ($_SERVER['REQUEST_METHOD'] === 'GET') { if ($_SERVER['REQUEST_METHOD'] === 'GET') {
// Get query string parameter ?file=settings_table.json // Get query string parameters ?file=settings_table.json&download=true
$file = isset($_GET['file']) ? $_GET['file'] : null; $file = isset($_GET['file']) ? $_GET['file'] : null;
$download = isset($_GET['download']) ? $_GET['download'] === 'true' : false;
// Check if file parameter is provided // Check if file parameter is provided
if ($file) { if ($file) {
@@ -21,9 +22,23 @@ if ($_SERVER['REQUEST_METHOD'] === 'GET') {
// Check if the file exists // Check if the file exists
if (file_exists($filePath)) { if (file_exists($filePath)) {
// Send the response back to the client // Handle download behavior
header('Content-Type: text/plain'); if ($download) {
echo file_get_contents($filePath); // Force file download
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . basename($filePath) . '"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($filePath));
readfile($filePath);
exit;
} else {
// Display file content
header('Content-Type: text/plain');
echo file_get_contents($filePath);
}
} else { } else {
// File not found response // File not found response
http_response_code(404); http_response_code(404);

View File

@@ -28,10 +28,10 @@
<!-- To the right --> <!-- To the right -->
<div class="pull-right no-hidden-xs"> <div class="pull-right no-hidden-xs">
| <a href="https://gurubase.io/g/netalertx" target="_blank" title="Ask AI"><i class="fa-regular fa-comment-dots fa-flip-horizontal"></i></a> | <a href="https://gurubase.io/g/netalertx" class="pointer" target="_blank" title="Ask AI"><i class="fa-regular fa-comment-dots fa-flip-horizontal"></i></a>
| <a href="https://github.com/jokob-sk/NetAlertX/tree/main/docs#documentation-overview" target="_blank" title="Documentation"><i class="fa fa-book"></i></a> | <a href="https://jokob-sk.github.io/NetAlertX/" class="pointer" target="_blank" title="Documentation"><i class="fa fa-book"></i></a>
| <a href="https://github.com/jokob-sk/NetAlertX/issues" target="_blank"><i class="fa-solid fa-bug" title="Report a bug"></i></a> | <a href="https://github.com/jokob-sk/NetAlertX/issues" class="pointer" target="_blank"><i class="fa-solid fa-bug" title="Report a bug"></i></a>
| <a href="https://discord.com/invite/NczTUTWyRr" target="_blank"><i class="fa-brands fa-discord" title="Join Discord"></i></a> | <a href="https://discord.com/invite/NczTUTWyRr" class="pointer" target="_blank"><i class="fa-brands fa-discord" title="Join Discord"></i></a>
| <?= lang('Maintenance_built_on');?>: <?php include 'php/templates/build.php'; ?> | <?= lang('Maintenance_built_on');?>: <?php include 'php/templates/build.php'; ?>
| Version: <?php include 'php/templates/version.php'; ?> | Version: <?php include 'php/templates/version.php'; ?>
| |

View File

@@ -70,9 +70,6 @@
<!-- Theme style --> <!-- Theme style -->
<link rel="stylesheet" href="lib/AdminLTE/dist/css/AdminLTE.min.css"> <link rel="stylesheet" href="lib/AdminLTE/dist/css/AdminLTE.min.css">
<!-- AdminLTE Skins. We have chosen the skin-blue for this starter <!-- AdminLTE Skins. We have chosen the skin-blue for this starter
page. However, you can choose any other skin. Make sure you page. However, you can choose any other skin. Make sure you
apply the skin class to the body tag so the changes take effect. --> apply the skin class to the body tag so the changes take effect. -->
@@ -107,6 +104,8 @@
<!-- Servertime to the right of the hostname --> <!-- Servertime to the right of the hostname -->
<script> <script>
// -------------------------------------------------------------
// Updates the backend application state/status in the header
function updateState(){ function updateState(){
$.get('/php/server/query_json.php', { file: 'app_state.json', nocache: Date.now() }, function(appState) { $.get('/php/server/query_json.php', { file: 'app_state.json', nocache: Date.now() }, function(appState) {
@@ -117,19 +116,46 @@
}) })
} }
function show_pia_servertime() { // -------------------------------------------------------------
// updates the date and time in the header
function update_servertime() {
// Get the current date and time in the specified time zone
let timeZone = "<?php echo $timeZone ?>";
let now = new Date();
// datetime in timeZone in the "en-UK" locale // Convert to the specified time zone
let time = new Date().toLocaleString("en-UK", { timeZone: "<?php echo $timeZone?>" }); let formatter = new Intl.DateTimeFormat("en-UK", {
timeZone: timeZone,
day: "2-digit",
month: "short",
year: "numeric",
hour: "2-digit",
minute: "2-digit",
second: "2-digit",
hour12: false, // Use 24-hour format
});
let parts = formatter.formatToParts(now);
// Extract date components
let day = parts.find(p => p.type === "day").value;
let month = parts.find(p => p.type === "month").value;
let year = parts.find(p => p.type === "year").value;
// Extract time components
let hour = parts.find(p => p.type === "hour").value;
let minute = parts.find(p => p.type === "minute").value;
let second = parts.find(p => p.type === "second").value;
// Construct the date and time in DD-MMM-YYYY HH:MM:SS format
let formattedDateTime = `${day}-${month}-${year} ${hour}:${minute}:${second}`;
if (document.getElementById) { if (document.getElementById) {
document.getElementById("PIA_Servertime_place").innerHTML = '('+time+')'; document.getElementById("PIA_Servertime_place").innerHTML = '(' + formattedDateTime + ')';
} }
setTimeout("show_pia_servertime()", 1000); setTimeout(update_servertime, 1000); // Call recursively every second
} }
</script> </script>
</head> </head>
@@ -137,7 +163,7 @@
<!-- ----------------------------------------------------------------------- --> <!-- ----------------------------------------------------------------------- -->
<!-- Layout Boxed Yellow --> <!-- Layout Boxed Yellow -->
<body class="hold-transition fixed <?php echo $pia_skin_selected;?> sidebar-mini" onLoad="show_pia_servertime();" > <body class="hold-transition fixed <?php echo $pia_skin_selected;?> sidebar-mini" onLoad="update_servertime();" >
<!-- Site wrapper --> <!-- Site wrapper -->
<div class="wrapper"> <div class="wrapper">
@@ -145,8 +171,6 @@
<!-- Main Header --> <!-- Main Header -->
<header class="main-header"> <header class="main-header">
<!-- ----------------------------------------------------------------------- --> <!-- ----------------------------------------------------------------------- -->
<!-- Logo --> <!-- Logo -->
<a href="devices.php" class="logo"> <a href="devices.php" class="logo">
@@ -185,13 +209,13 @@
</li> </li>
<!-- Clear cache & Reload --> <!-- Clear cache & Reload -->
<li> <li>
<a id="reload-button" href='#' role="button" span class='fa fa-repeat' onclick='clearCache()'></a> <a id="reload-button" href='#' role="button" span onclick='clearCache()' class='fa-solid fa-rotate'></a>
</li> </li>
<!-- Full Screen --> <!-- Full Screen -->
<li> <li>
<a id="fullscreen-button" href='#' role="button" span class='fa fa-arrows-alt' onclick='toggleFullscreen()'></a> <a id="fullscreen-button" href='#' role="button" span class='fa fa-arrows-alt' onclick='toggleFullscreen()'></a>
</li> </li>
<!-- Full Screen --> <!-- Notifications -->
<li> <li>
<a id="notifications-button" href='userNotifications.php' role="button" span class='fa-solid fa-bell'></a> <a id="notifications-button" href='userNotifications.php' role="button" span class='fa-solid fa-bell'></a>
<span id="unread-notifications-bell-count" title="" class="badge bg-red unread-notifications-bell" >0</span> <span id="unread-notifications-bell-count" title="" class="badge bg-red unread-notifications-bell" >0</span>
@@ -332,7 +356,10 @@
<!-- Maintenance menu item --> <!-- Maintenance menu item -->
<li class=" treeview <?php if (in_array (basename($_SERVER['SCRIPT_NAME']), array('maintenance.php') ) ){ echo 'active menu-open'; } ?>"> <li class=" treeview <?php if (in_array (basename($_SERVER['SCRIPT_NAME']), array('maintenance.php') ) ){ echo 'active menu-open'; } ?>">
<a href="#" onclick="openUrl(['./maintenance.php'])"> <a href="#" onclick="openUrl(['./maintenance.php'])">
<div class="info-icon-nav myhidden" id="version" data-build-time="<?php echo file_get_contents( "buildtimestamp.txt");?>">🆕</div> <!-- NEW version available -->
<div class="info-icon-nav myhidden" id="version" title="<?= lang('new_version_available');?>" data-build-time="<?php echo file_get_contents( "buildtimestamp.txt");?>">
<i class="fa-solid fa-rocket fa-beat"></i>
</div>
<i class="fa fa-fw fa-wrench"></i> <span><?= lang('Navigation_Maintenance');?></span> <i class="fa fa-fw fa-wrench"></i> <span><?= lang('Navigation_Maintenance');?></span>
<span class="pull-right-container"> <span class="pull-right-container">
<i class="fa fa-angle-left pull-right"></i> <i class="fa fa-angle-left pull-right"></i>
@@ -406,17 +433,14 @@
</li> </li>
<!-- About menu item --> <!-- About menu item -->
<li class=" treeview <?php if (in_array (basename($_SERVER['SCRIPT_NAME']), array('donations.php', 'help_faq.php', 'systeminfo.php' ) ) ){ echo 'active menu-open'; } ?>"> <li class=" treeview <?php if (in_array (basename($_SERVER['SCRIPT_NAME']), array('help_faq.php', 'systeminfo.php' ) ) ){ echo 'active menu-open'; } ?>">
<a href="#"> <a href="#">
<i class="fa fa-fw fa-info"></i> <span><?= lang('Navigation_About');?></span> <i class="fa fa-fw fa-info"></i> <span><?= lang('Navigation_About');?></span>
<span class="pull-right-container"> <span class="pull-right-container">
<i class="fa fa-angle-left pull-right"></i> <i class="fa fa-angle-left pull-right"></i>
</span> </span>
</a> </a>
<ul class="treeview-menu " style="display: <?php if (in_array (basename($_SERVER['SCRIPT_NAME']), array('donations.php', 'help_faq.php', 'systeminfo.php' ) ) ){ echo 'block'; } else {echo 'none';} ?>;"> <ul class="treeview-menu " style="display: <?php if (in_array (basename($_SERVER['SCRIPT_NAME']), array('help_faq.php', 'systeminfo.php' ) ) ){ echo 'block'; } else {echo 'none';} ?>;">
<li>
<a href="donations.php"> <?= lang("Navigation_Donations");?> </a>
</li>
<li> <li>
<a href="help_faq.php"> <?= lang("Navigation_HelpFAQ");?> </a> <a href="help_faq.php"> <?= lang("Navigation_HelpFAQ");?> </a>
</li> </li>
@@ -468,7 +492,7 @@ function workInProgress() {
//-------------------------------------------------------------- //--------------------------------------------------------------
// Update server time in the header // Update server time in the header
show_pia_servertime() update_servertime()
// Update server state in the header // Update server state in the header
updateState() updateState()

View File

@@ -242,6 +242,7 @@
"Device_Tablelenght": "", "Device_Tablelenght": "",
"Device_Tablelenght_all": "", "Device_Tablelenght_all": "",
"Device_Title": "", "Device_Title": "",
"Devices_Filters": "",
"Donations_Others": "", "Donations_Others": "",
"Donations_Platforms": "", "Donations_Platforms": "",
"Donations_Text": "", "Donations_Text": "",
@@ -327,6 +328,7 @@
"Gen_Upd_Fail": "", "Gen_Upd_Fail": "",
"Gen_Update": "", "Gen_Update": "",
"Gen_Update_Value": "", "Gen_Update_Value": "",
"Gen_ValidIcon": "",
"Gen_Warning": "", "Gen_Warning": "",
"Gen_Work_In_Progress": "", "Gen_Work_In_Progress": "",
"Gen_create_new_device": "", "Gen_create_new_device": "",
@@ -398,6 +400,8 @@
"Maintenance_Running_Version": "", "Maintenance_Running_Version": "",
"Maintenance_Status": "", "Maintenance_Status": "",
"Maintenance_Title": "", "Maintenance_Title": "",
"Maintenance_Tool_DownloadConfig": "",
"Maintenance_Tool_DownloadConfig_text": "",
"Maintenance_Tool_ExportCSV": "", "Maintenance_Tool_ExportCSV": "",
"Maintenance_Tool_ExportCSV_noti": "", "Maintenance_Tool_ExportCSV_noti": "",
"Maintenance_Tool_ExportCSV_noti_text": "", "Maintenance_Tool_ExportCSV_noti_text": "",
@@ -406,9 +410,13 @@
"Maintenance_Tool_ImportCSV_noti": "", "Maintenance_Tool_ImportCSV_noti": "",
"Maintenance_Tool_ImportCSV_noti_text": "", "Maintenance_Tool_ImportCSV_noti_text": "",
"Maintenance_Tool_ImportCSV_text": "", "Maintenance_Tool_ImportCSV_text": "",
"Maintenance_Tool_ImportConfig_noti": "",
"Maintenance_Tool_ImportPastedCSV": "", "Maintenance_Tool_ImportPastedCSV": "",
"Maintenance_Tool_ImportPastedCSV_noti_text": "", "Maintenance_Tool_ImportPastedCSV_noti_text": "",
"Maintenance_Tool_ImportPastedCSV_text": "", "Maintenance_Tool_ImportPastedCSV_text": "",
"Maintenance_Tool_ImportPastedConfig": "",
"Maintenance_Tool_ImportPastedConfig_noti_text": "",
"Maintenance_Tool_ImportPastedConfig_text": "",
"Maintenance_Tool_arpscansw": "", "Maintenance_Tool_arpscansw": "",
"Maintenance_Tool_arpscansw_noti": "", "Maintenance_Tool_arpscansw_noti": "",
"Maintenance_Tool_arpscansw_noti_text": "", "Maintenance_Tool_arpscansw_noti_text": "",
@@ -710,6 +718,7 @@
"general_event_title": "", "general_event_title": "",
"go_to_node_event_icon": "", "go_to_node_event_icon": "",
"go_to_node_event_tooltip": "", "go_to_node_event_tooltip": "",
"new_version_available": "",
"report_guid": "", "report_guid": "",
"report_guid_missing": "", "report_guid_missing": "",
"report_select_format": "", "report_select_format": "",

View File

@@ -1,7 +1,7 @@
{ {
"API_CUSTOM_SQL_description": "Pots especificar una consulta SQL personalitzada que generarà un fitxer JSON i el mostrarà mitjançant <a href=\"/api/table_custom_endpoint.json\" target=\"_blank\"><code>table_custom_endpoint.json</code> file endpoint</a>.", "API_CUSTOM_SQL_description": "Pots especificar una consulta SQL personalitzada que generarà un fitxer JSON i el mostrarà mitjançant <a href=\"/api/table_custom_endpoint.json\" target=\"_blank\"><code>table_custom_endpoint.json</code> file endpoint</a>.",
"API_CUSTOM_SQL_name": "Punt final personalitzat", "API_CUSTOM_SQL_name": "Punt final personalitzat",
"API_TOKEN_description": "Token API per assegurar les comunicacions, pots generar-ne una o introduir una clau. S'enviarà a la capçalera de pa petició. Es fa servir al plugin <code>SYNC</code> , del servidor GraphQL.", "API_TOKEN_description": "Token API per assegurar les comunicacions, pots generar-ne un o introduir un valor clau. S'enviarà a la capçalera de la petició <code>SYNC</code> plugin, servidor GraphQL i altres endpoints API. Pots fer servir els endpoints API per crear integracions personalitzades tal com es descriu a <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/API.md\" target=\"_blank\">la documentació API</a>.",
"API_TOKEN_name": "Token API", "API_TOKEN_name": "Token API",
"API_display_name": "API", "API_display_name": "API",
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>", "API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
@@ -60,7 +60,7 @@
"BackDevices_darkmode_enabled": "Mode fosc Activat", "BackDevices_darkmode_enabled": "Mode fosc Activat",
"CLEAR_NEW_FLAG_description": "Si està habilitat (<code>0</code> està desactivat), els dispositius marcats com <b>Nou dispositiu</b> es desmarcaran si el temps límit (especificat en hores) supera <b>Primera sessió</b>.", "CLEAR_NEW_FLAG_description": "Si està habilitat (<code>0</code> està desactivat), els dispositius marcats com <b>Nou dispositiu</b> es desmarcaran si el temps límit (especificat en hores) supera <b>Primera sessió</b>.",
"CLEAR_NEW_FLAG_name": "Netejar indicador de nou", "CLEAR_NEW_FLAG_name": "Netejar indicador de nou",
"CustProps_cant_remove": "No es pot eliminar, almenys es necessita una propietat.", "CustProps_cant_remove": "No es pot eliminar, es necessita una propietat mínim.",
"DAYS_TO_KEEP_EVENTS_description": "Això és una configuració de manteniment. Especifica el nombre de dies que es conservaran els esdeveniments. Els esdeveniments antics s'esborraran periòdicament. També aplica als esdeveniments dels Connectors (Plugins).", "DAYS_TO_KEEP_EVENTS_description": "Això és una configuració de manteniment. Especifica el nombre de dies que es conservaran els esdeveniments. Els esdeveniments antics s'esborraran periòdicament. També aplica als esdeveniments dels Connectors (Plugins).",
"DAYS_TO_KEEP_EVENTS_name": "Esborrar esdeveniments més vells de", "DAYS_TO_KEEP_EVENTS_name": "Esborrar esdeveniments més vells de",
"DISCOVER_PLUGINS_description": "Desactiva aquesta opció per accelerar la inicialització i l'estalvi de configuració. Quan està desactivat, els connectors no es descobreixen, i no podeu afegir nous connectors a la configuració <code>LOADED_PLUGINS</code>.", "DISCOVER_PLUGINS_description": "Desactiva aquesta opció per accelerar la inicialització i l'estalvi de configuració. Quan està desactivat, els connectors no es descobreixen, i no podeu afegir nous connectors a la configuració <code>LOADED_PLUGINS</code>.",
@@ -68,7 +68,7 @@
"DevDetail_Copy_Device_Title": "<i class=\"fa fa-copy\"></i> Copiar detalls des del dispositiu", "DevDetail_Copy_Device_Title": "<i class=\"fa fa-copy\"></i> Copiar detalls des del dispositiu",
"DevDetail_Copy_Device_Tooltip": "Copiar detalls del dispositius des de la llista desplegable. Tot el d'aquesta pàgina es sobre-escriurà", "DevDetail_Copy_Device_Tooltip": "Copiar detalls del dispositius des de la llista desplegable. Tot el d'aquesta pàgina es sobre-escriurà",
"DevDetail_CustomProperties_Title": "Propietats personalitzades", "DevDetail_CustomProperties_Title": "Propietats personalitzades",
"DevDetail_CustomProps_reset_info": "Això eliminarà les seves propietats personalitzades en aquest dispositiu i restablir-les al valor predeterminat.", "DevDetail_CustomProps_reset_info": "Això eliminarà les seves propietats personalitzades en aquest dispositiu i restablirà el valor predeterminat.",
"DevDetail_DisplayFields_Title": "Pantalla", "DevDetail_DisplayFields_Title": "Pantalla",
"DevDetail_EveandAl_AlertAllEvents": "Alertes", "DevDetail_EveandAl_AlertAllEvents": "Alertes",
"DevDetail_EveandAl_AlertDown": "Cancel·lar alerta", "DevDetail_EveandAl_AlertDown": "Cancel·lar alerta",
@@ -77,7 +77,7 @@
"DevDetail_EveandAl_NewDevice_Tooltip": "Es mostrarà el nou estat del dispositiu i s'inclourà a les llistes quan el filtre New Devices estigui actiu. No afecta les notificacions.", "DevDetail_EveandAl_NewDevice_Tooltip": "Es mostrarà el nou estat del dispositiu i s'inclourà a les llistes quan el filtre New Devices estigui actiu. No afecta les notificacions.",
"DevDetail_EveandAl_RandomMAC": "MAC aleatori", "DevDetail_EveandAl_RandomMAC": "MAC aleatori",
"DevDetail_EveandAl_ScanCycle": "Dispositiu d'escaneig", "DevDetail_EveandAl_ScanCycle": "Dispositiu d'escaneig",
"DevDetail_EveandAl_ScanCycle_a": "Dispositiu d'escaneig", "DevDetail_EveandAl_ScanCycle_a": "Escanejar Dispositiu",
"DevDetail_EveandAl_ScanCycle_z": "No Escanejar Dispositiu", "DevDetail_EveandAl_ScanCycle_z": "No Escanejar Dispositiu",
"DevDetail_EveandAl_Skip": "Omet notificacions repetides per", "DevDetail_EveandAl_Skip": "Omet notificacions repetides per",
"DevDetail_EveandAl_Title": "Configuració de Successos i Alertes", "DevDetail_EveandAl_Title": "Configuració de Successos i Alertes",
@@ -138,8 +138,8 @@
"DevDetail_Shortcut_DownAlerts": "Aturar alertes", "DevDetail_Shortcut_DownAlerts": "Aturar alertes",
"DevDetail_Shortcut_Presence": "Presència", "DevDetail_Shortcut_Presence": "Presència",
"DevDetail_Shortcut_Sessions": "Sessions", "DevDetail_Shortcut_Sessions": "Sessions",
"DevDetail_Tab_Details": "<i class=\"fa fa-info-circle\"></i> Detalls", "DevDetail_Tab_Details": "Detalls",
"DevDetail_Tab_Events": "<i class=\"fa fa-bolt\"></i> Esdeveniments", "DevDetail_Tab_Events": "Esdeveniments",
"DevDetail_Tab_EventsTableDate": "Data", "DevDetail_Tab_EventsTableDate": "Data",
"DevDetail_Tab_EventsTableEvent": "Tipus d'esdeveniment", "DevDetail_Tab_EventsTableEvent": "Tipus d'esdeveniment",
"DevDetail_Tab_EventsTableIP": "IP", "DevDetail_Tab_EventsTableIP": "IP",
@@ -154,10 +154,10 @@
"DevDetail_Tab_NmapTableState": "Estat", "DevDetail_Tab_NmapTableState": "Estat",
"DevDetail_Tab_NmapTableText": "Configurar un calendari a <a href=\"/settings.php#NMAP_ACTIVE\">Configuració</a>", "DevDetail_Tab_NmapTableText": "Configurar un calendari a <a href=\"/settings.php#NMAP_ACTIVE\">Configuració</a>",
"DevDetail_Tab_NmapTableTime": "Temps", "DevDetail_Tab_NmapTableTime": "Temps",
"DevDetail_Tab_Plugins": "<i class=\"fa fa-plug\"></i> Connectors (Plugins)", "DevDetail_Tab_Plugins": "Connectors (Plugins)",
"DevDetail_Tab_Presence": "<i class=\"fa fa-calendar\"></i> Presència", "DevDetail_Tab_Presence": "Presència",
"DevDetail_Tab_Sessions": "<i class=\"fa fa-list-ol\"></i> Sessions", "DevDetail_Tab_Sessions": "Sessions",
"DevDetail_Tab_Tools": "<i class=\"fa fa-screwdriver-wrench\"></i> Eines", "DevDetail_Tab_Tools": "Eines",
"DevDetail_Tab_Tools_Internet_Info_Description": "L'eina d'informació d'Internet mostra informació sobre la connexió a Internet, com ara adreça IP, ciutat, país, codi d'àrea i zona horària.", "DevDetail_Tab_Tools_Internet_Info_Description": "L'eina d'informació d'Internet mostra informació sobre la connexió a Internet, com ara adreça IP, ciutat, país, codi d'àrea i zona horària.",
"DevDetail_Tab_Tools_Internet_Info_Error": "S'ha produït un error", "DevDetail_Tab_Tools_Internet_Info_Error": "S'ha produït un error",
"DevDetail_Tab_Tools_Internet_Info_Start": "Inici Informació d'Internet", "DevDetail_Tab_Tools_Internet_Info_Start": "Inici Informació d'Internet",
@@ -183,9 +183,9 @@
"DevDetail_button_AddIcon_Help": "Enganxeu en una etiqueta html SVG o en una icona etiqueta html Font Awesome. Llegir el <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/ICONS.md\" target=\"_blank\">Icons docs</a> per a més detalls.", "DevDetail_button_AddIcon_Help": "Enganxeu en una etiqueta html SVG o en una icona etiqueta html Font Awesome. Llegir el <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/ICONS.md\" target=\"_blank\">Icons docs</a> per a més detalls.",
"DevDetail_button_AddIcon_Tooltip": "Afegir una nova Icona a aquest dispositiu que encara no està disponible al desplegable.", "DevDetail_button_AddIcon_Tooltip": "Afegir una nova Icona a aquest dispositiu que encara no està disponible al desplegable.",
"DevDetail_button_Delete": "Eliminar dispositiu", "DevDetail_button_Delete": "Eliminar dispositiu",
"DevDetail_button_DeleteEvents": "Eliminar Esdeveniments", "DevDetail_button_DeleteEvents": "Esborrar Esdeveniments",
"DevDetail_button_DeleteEvents_Warning": "Estàs segur que vols eliminar tots els esdeveniments d'aquest dispositiu?<br><br>(això esborrarà la <b>Historial d'esdeveniments</b> i la <b>Sessions</b> i pot ajudar amb les notificacions constants (persistents)", "DevDetail_button_DeleteEvents_Warning": "Estàs segur que vols eliminar tots els esdeveniments d'aquest dispositiu?<br><br>(això esborrarà <b>l'Historial d'esdeveniments</b> i les <b>Sessions</b> i pot ajudar amb les notificacions persistents",
"DevDetail_button_Delete_ask": "T'és segur vols eliminar aquest dispositiu? També el pots arxivar en comptes d'això.", "DevDetail_button_Delete_ask": "Segur que vols eliminar aquest dispositiu?. En comptes d'això el pots arxivar.",
"DevDetail_button_OverwriteIcons": "Sobreescriure icones", "DevDetail_button_OverwriteIcons": "Sobreescriure icones",
"DevDetail_button_OverwriteIcons_Tooltip": "Sobreescriure icones de tots els dispositius amb el mateix tipus de dispositiu", "DevDetail_button_OverwriteIcons_Tooltip": "Sobreescriure icones de tots els dispositius amb el mateix tipus de dispositiu",
"DevDetail_button_OverwriteIcons_Warning": "Estàs segur que vols sobreescriure totes les icones de tots els dispositius amb el mateix tipus de dispositiu que el tipus de dispositiu actual?", "DevDetail_button_OverwriteIcons_Warning": "Estàs segur que vols sobreescriure totes les icones de tots els dispositius amb el mateix tipus de dispositiu que el tipus de dispositiu actual?",
@@ -206,7 +206,7 @@
"Device_Shortcut_DownOnly": "Aturat", "Device_Shortcut_DownOnly": "Aturat",
"Device_Shortcut_Favorites": "Favorits", "Device_Shortcut_Favorites": "Favorits",
"Device_Shortcut_NewDevices": "Nous dispositius", "Device_Shortcut_NewDevices": "Nous dispositius",
"Device_Shortcut_OnlineChart": "Presència de dispositius", "Device_Shortcut_OnlineChart": "Dispositius detectats",
"Device_TableHead_AlertDown": "Cancel·lar alerta", "Device_TableHead_AlertDown": "Cancel·lar alerta",
"Device_TableHead_Connected_Devices": "Connexions", "Device_TableHead_Connected_Devices": "Connexions",
"Device_TableHead_CustomProps": "Props / Accions", "Device_TableHead_CustomProps": "Props / Accions",
@@ -242,11 +242,12 @@
"Device_Tablelenght": "Veure_entrades_MENU", "Device_Tablelenght": "Veure_entrades_MENU",
"Device_Tablelenght_all": "Tot", "Device_Tablelenght_all": "Tot",
"Device_Title": "Dispositius", "Device_Title": "Dispositius",
"Devices_Filters": "Filtres",
"Donations_Others": "Altres", "Donations_Others": "Altres",
"Donations_Platforms": "Plataformes patrocinadores", "Donations_Platforms": "Plataformes patrocinadores",
"Donations_Text": "Hola 👋! </br> Gràcies per fer clic en aquest element de menú 😅 </br> </br> Estic intentant recollir algunes donacions per fer un millor programari. També, m'ajudaria per cremar-me, i així recolzar aquesta aplicació més temps. Qualsevol petit (recurrent o no) patrocini em farà posar més esforç a aquesta aplicació. </br> M'agradaria escurçar la meva setmana de feina i en el temps restant enfocar-me en el NetAlertX. Així rebries més funcionalitat, una aplicació més neta i menys bugs. </br> </br> Gràcies per llegir-ho - Agraeixo qualsevol suport ❤🙏 </br> </br> TL;DR: Pel teu suport reps: </br> </br> <ul><li>Actualitzacions regulars per seguir les vostres dades i mantenir la família segura 🔄</li><li>Menys bugs 🐛🔫</li><li>Millor i més funcionalitat</li><li>Que no m'arribi el \"burn out\" 🔥🤯</li><li>Menys actualitzacions d'emergència 💨</li><li>Millors documentacions📚</li><li>Suport més ràpid i millor amb les incidències 🆘</li></ul> </br> 📧Correu electrònic <a href='mailto:jokob@duck.com?subject=NetAlertX'>jokob@duck.com</a> si vols contactar o si hauria d'afegir altres programes de patrocini. </br>", "Donations_Text": "Hola 👋! </br> Gràcies per fer clic en aquest element de menú 😅 </br> </br> Estic intentant recollir algunes donacions per fer un millor programari. També, m'ajudaria per cremar-me, i així recolzar aquesta aplicació més temps. Qualsevol petit (recurrent o no) patrocini em farà posar més esforç a aquesta aplicació. </br> M'agradaria escurçar la meva setmana de feina i en el temps restant enfocar-me en el NetAlertX. Així rebries més funcionalitat, una aplicació més neta i menys bugs. </br> </br> Gràcies per llegir-ho - Agraeixo qualsevol suport ❤🙏 </br> </br> TL;DR: Pel teu suport reps: </br> </br> <ul><li>Actualitzacions regulars per seguir les vostres dades i mantenir la família segura 🔄</li><li>Menys bugs 🐛🔫</li><li>Millor i més funcionalitat</li><li>Que no m'arribi el \"burn out\" 🔥🤯</li><li>Menys actualitzacions d'emergència 💨</li><li>Millors documentacions📚</li><li>Suport més ràpid i millor amb les incidències 🆘</li></ul> </br> 📧Correu electrònic <a href='mailto:jokob@duck.com?subject=NetAlertX'>jokob@duck.com</a> si vols contactar o si hauria d'afegir altres programes de patrocini. </br>",
"Donations_Title": "Donacions", "Donations_Title": "Donacions",
"ENABLE_PLUGINS_description": "Habilita la <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins\">connectors</a> funcionalitat. Carregar els connectors requereix més recursos de maquinari així podries voler desactivar-los en un sistema de baixos recursos.", "ENABLE_PLUGINS_description": "Habilita la <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">connectors</a> funcionalitat. Carregar els connectors requereix més recursos de maquinari així podries voler desactivar-los en un sistema de baixos recursos.",
"ENABLE_PLUGINS_name": "Activa els connectors(Plugins)", "ENABLE_PLUGINS_name": "Activa els connectors(Plugins)",
"ENCRYPTION_KEY_description": "Clau de xifrat de dades.", "ENCRYPTION_KEY_description": "Clau de xifrat de dades.",
"ENCRYPTION_KEY_name": "Clau d'encriptació", "ENCRYPTION_KEY_name": "Clau d'encriptació",
@@ -308,7 +309,7 @@
"Gen_Offline": "Fora de línia", "Gen_Offline": "Fora de línia",
"Gen_Okay": "Ok", "Gen_Okay": "Ok",
"Gen_Online": "En línia", "Gen_Online": "En línia",
"Gen_Purge": "Elimina", "Gen_Purge": "Neteja",
"Gen_ReadDocs": "Llegit més dins el docs.", "Gen_ReadDocs": "Llegit més dins el docs.",
"Gen_Remove_All": "Esborra tot", "Gen_Remove_All": "Esborra tot",
"Gen_Remove_Last": "Esborra el darrer", "Gen_Remove_Last": "Esborra el darrer",
@@ -327,10 +328,11 @@
"Gen_Upd_Fail": "Actualització fallida", "Gen_Upd_Fail": "Actualització fallida",
"Gen_Update": "Actualitza", "Gen_Update": "Actualitza",
"Gen_Update_Value": "Actualitzar Valor", "Gen_Update_Value": "Actualitzar Valor",
"Gen_ValidIcon": "",
"Gen_Warning": "Advertència", "Gen_Warning": "Advertència",
"Gen_Work_In_Progress": "Work in progress, un bon moment per retroalimentació a https://github.com/jokob-sk/NetAlertX/issues", "Gen_Work_In_Progress": "Work in progress, un bon moment per retroalimentació a https://github.com/jokob-sk/NetAlertX/issues",
"Gen_create_new_device": "Nou dispositiu", "Gen_create_new_device": "Nou dispositiu",
"Gen_create_new_device_info": "Els dispositius són típicament descobert utilitzant <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins\">plugins</a>. Tanmateix, en certs casos, pots necessitar afegir dispositius a mà. Per explorar els temes concrets comproveu la <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/REMOTE_NETWORKS.md\">documentació de Xarxes Remotes</a>.", "Gen_create_new_device_info": "Els dispositius són típicament descobert utilitzant <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">plugins</a>. Tanmateix, en certs casos, pots necessitar afegir dispositius a mà. Per explorar els temes concrets comproveu la <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/REMOTE_NETWORKS.md\">documentació de Xarxes Remotes</a>.",
"General_display_name": "General", "General_display_name": "General",
"General_icon": "<i class=\"fa fa-gears\"></i>", "General_icon": "<i class=\"fa fa-gears\"></i>",
"HRS_TO_KEEP_NEWDEV_description": "Això és un paràmetre de manteniment <b>ELIMINANT dispositius</b>. Si s'activa (<code>0</code> està desactivat), els dispositius marcats com <b>Dispositiu Nou</b> seran eliminats si el temps de <b>Primera Sessió</b> es més vell que les hores especificades en aquest paràmetre. Faci servir aquest paràmetre si vol auto-eliminar <b>Nous Dispositius</b> després de <code>X</code> hores.", "HRS_TO_KEEP_NEWDEV_description": "Això és un paràmetre de manteniment <b>ELIMINANT dispositius</b>. Si s'activa (<code>0</code> està desactivat), els dispositius marcats com <b>Dispositiu Nou</b> seran eliminats si el temps de <b>Primera Sessió</b> es més vell que les hores especificades en aquest paràmetre. Faci servir aquest paràmetre si vol auto-eliminar <b>Nous Dispositius</b> després de <code>X</code> hores.",
@@ -373,9 +375,9 @@
"HelpFAQ_Cat_Presence_401_head": "Un dispositiu és mostrat tan present tot i que és Fora de línia \"\".", "HelpFAQ_Cat_Presence_401_head": "Un dispositiu és mostrat tan present tot i que és Fora de línia \"\".",
"HelpFAQ_Cat_Presence_401_text": "Si això passa, tens la possibilitat d'esborrar els esdeveniments del dispositiu en qüestió (veure detalls). Una altra possibilitat seria canviar el dispositiu i esperar fins a NetAlert X reconeix el dispositiu com a \"en línia\" amb la següent exploració i, a continuació, simplement torneu a desactivar el dispositiu. NetAlert X ha de tenir en compte l'estat del dispositiu a la base de dades amb la següent exploració.", "HelpFAQ_Cat_Presence_401_text": "Si això passa, tens la possibilitat d'esborrar els esdeveniments del dispositiu en qüestió (veure detalls). Una altra possibilitat seria canviar el dispositiu i esperar fins a NetAlert X reconeix el dispositiu com a \"en línia\" amb la següent exploració i, a continuació, simplement torneu a desactivar el dispositiu. NetAlert X ha de tenir en compte l'estat del dispositiu a la base de dades amb la següent exploració.",
"HelpFAQ_Title": "Ajuda / FAQ", "HelpFAQ_Title": "Ajuda / FAQ",
"LOADED_PLUGINS_description": "Quins Connectors(Plugins) carregar. Afegir connectors podria alentir l'aplicació. Llegir més sobre quins connectors necessiten estar habilitats, tipus, o opcions d'escanejar dins del <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins#readme\">documents de connectors</a>. Els connectors descarregats perdran els vostres paràmetres. Només <code>desactivats</code> es poden eliminar els connectors.", "LOADED_PLUGINS_description": "Quins Plugins carregar. Afegir plugins podria alentir l'aplicació. Llegir més sobre quins connectors necessiten estar habilitats, els tipus, o les opcions d'escaneig dins del <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">documents de connectors</a>. Els connectors descarregats perdran els vostres paràmetres. Només <code>desactivats</code> es poden eliminar els connectors.",
"LOADED_PLUGINS_name": "Connectors carregats", "LOADED_PLUGINS_name": "Connectors carregats",
"LOG_LEVEL_description": "Aquest paràmetre permetrà un registre més verbal. Útil per a la depuració d'esdeveniments escrivint a la base de dades.", "LOG_LEVEL_description": "Aquest paràmetre permetrà un registre més detallat. Útil per a la depuració d'esdeveniments d'escriptura a la base de dades.",
"LOG_LEVEL_name": "Imprimeix el registre addicional", "LOG_LEVEL_name": "Imprimeix el registre addicional",
"Loading": "Carregant ...", "Loading": "Carregant ...",
"Login_Box": "Introduïu la vostra contrasenya", "Login_Box": "Introduïu la vostra contrasenya",
@@ -384,7 +386,7 @@
"Login_Psw-box": "Contrasenya", "Login_Psw-box": "Contrasenya",
"Login_Psw_alert": "Alerta de contrasenya!", "Login_Psw_alert": "Alerta de contrasenya!",
"Login_Psw_folder": "a la carpeta config.", "Login_Psw_folder": "a la carpeta config.",
"Login_Psw_new": "new_password", "Login_Psw_new": "contrasenya_nova",
"Login_Psw_run": "Per canviar la contrasenya executar:", "Login_Psw_run": "Per canviar la contrasenya executar:",
"Login_Remember": "Recorda", "Login_Remember": "Recorda",
"Login_Remember_small": "(vàlid per 7 dies)", "Login_Remember_small": "(vàlid per 7 dies)",
@@ -398,17 +400,23 @@
"Maintenance_Running_Version": "Versió instal·lada", "Maintenance_Running_Version": "Versió instal·lada",
"Maintenance_Status": "Estat", "Maintenance_Status": "Estat",
"Maintenance_Title": "Eines de manteniment", "Maintenance_Title": "Eines de manteniment",
"Maintenance_Tool_ExportCSV": "CSV Exportació", "Maintenance_Tool_DownloadConfig": "Exportació de paràmetres",
"Maintenance_Tool_DownloadConfig_text": "Descarregueu una còpia de seguretat completa de la vostra configuració de configuració emmagatzemada al fitxer <code>app.conf</code>.",
"Maintenance_Tool_ExportCSV": "CSV Exportació de dispositius",
"Maintenance_Tool_ExportCSV_noti": "CSV Exportació", "Maintenance_Tool_ExportCSV_noti": "CSV Exportació",
"Maintenance_Tool_ExportCSV_noti_text": "Estàs segur que vols generar un fitxer CSV?", "Maintenance_Tool_ExportCSV_noti_text": "Estàs segur que vols generar un fitxer CSV?",
"Maintenance_Tool_ExportCSV_text": "Genera un fitxer CSV (comma separated value) que conté la llista dels dispositius incloent les relacions de Xarxa entre Nodes i dispositius connectats. També pots disparar-ho accedint a la URL <code>el vostre NetAlertX url/php/server/devices.php?acció=ExportCSV</code> o activant el connector <a href=\"settings.php#CSVBCKP_header\">CSV Còpia de seguretat</a>.", "Maintenance_Tool_ExportCSV_text": "Genera un fitxer CSV (comma separated value) que conté la llista dels dispositius incloent les relacions de Xarxa entre Nodes i dispositius connectats. També pots disparar-ho accedint a la URL <code>el_vostre_NetAlertX_ url/php/server/devices.php?acció=ExportCSV</code> o activant el connector <a href=\"settings.php#CSVBCKP_header\">CSV Còpia de seguretat</a>.",
"Maintenance_Tool_ImportCSV": "CSV Importació", "Maintenance_Tool_ImportCSV": "CSV Importació de dispositius",
"Maintenance_Tool_ImportCSV_noti": "CSV Importació", "Maintenance_Tool_ImportCSV_noti": "CSV Importació",
"Maintenance_Tool_ImportCSV_noti_text": "Estàs segur que vols importar el fitxer CSV? Això <b> sobreescriurà</b> completament els dispositius de la seva base de dades.", "Maintenance_Tool_ImportCSV_noti_text": "Estàs segur que vols importar el fitxer CSV? Això <b> sobreescriurà</b> completament els dispositius de la seva base de dades.",
"Maintenance_Tool_ImportCSV_text": "Abans d'utilitzar aquesta funció, fes una còpia de seguretat, si us plau. Importa un CSV (comma separated value) el fitxer que conté la llista dels dispositius que inclouen les relacions de Xarxa entre Nodes i dispositius connectats. Per fer-ho col·loca el CSV el fitxer anomenat <b>devices.csv</b> a la vostra <b>/config</b> carpeta.", "Maintenance_Tool_ImportCSV_text": "Abans d'utilitzar aquesta funció, fes una còpia de seguretat, si us plau. Importa un CSV (comma separated value) el fitxer que conté la llista dels dispositius que inclouen les relacions de Xarxa entre Nodes i dispositius connectats. Per fer-ho col·loca el CSV el fitxer anomenat <b>devices.csv</b> a la vostra <b>/config</b> carpeta.",
"Maintenance_Tool_ImportPastedCSV": "Importació CSV (Paste)", "Maintenance_Tool_ImportConfig_noti": "Importació de la configuració (app.conf)",
"Maintenance_Tool_ImportPastedCSV": "CSV Importació de dispositius (Paste)",
"Maintenance_Tool_ImportPastedCSV_noti_text": "Estàs segur que vols importar el CSV copiat? Això <b> sobreescriurà</b> completament els dispositius de la base de dades.", "Maintenance_Tool_ImportPastedCSV_noti_text": "Estàs segur que vols importar el CSV copiat? Això <b> sobreescriurà</b> completament els dispositius de la base de dades.",
"Maintenance_Tool_ImportPastedCSV_text": "Abans d'utilitzar aquesta funció, feu una còpia de seguretat. Importar un fitxer CSV (comma separated value) que contingui la llista de dispositius, incloent les relacions de xarxa entre els nodes i els dispositius connectats.", "Maintenance_Tool_ImportPastedCSV_text": "Abans d'utilitzar aquesta funció, feu una còpia de seguretat. Importar un fitxer CSV (comma separated value) que contingui la llista de dispositius, incloent les relacions de xarxa entre els nodes i els dispositius connectats.",
"Maintenance_Tool_ImportPastedConfig": "Importació de la configuració (paste)",
"Maintenance_Tool_ImportPastedConfig_noti_text": "Estàs segur que vols importar la configuració config enganxada? Això <b> sobreescriurà</b> completament el fitxer <code>app.conf</code>.",
"Maintenance_Tool_ImportPastedConfig_text": "Importa el fitxer <code>app.conf</code> que conté tota l'aplicació Configuració. És possible que vulgueu descarregar el fitxer actual <code>app.conf</code> primer amb el <b>Settings Export</b>.",
"Maintenance_Tool_arpscansw": "Conmuta arp-Scan (on/off)", "Maintenance_Tool_arpscansw": "Conmuta arp-Scan (on/off)",
"Maintenance_Tool_arpscansw_noti": "Conmuta arp-Scan on or off", "Maintenance_Tool_arpscansw_noti": "Conmuta arp-Scan on or off",
"Maintenance_Tool_arpscansw_noti_text": "Quan l'escàner ha estat canviat a off es queda off fins que és activat de bell nou.", "Maintenance_Tool_arpscansw_noti_text": "Quan l'escàner ha estat canviat a off es queda off fins que és activat de bell nou.",
@@ -428,25 +436,25 @@
"Maintenance_Tool_del_ActHistory_text": "El gràfic dactivitat de la xarxa es reinicialitzarà. No afecta als esdeveniments.", "Maintenance_Tool_del_ActHistory_text": "El gràfic dactivitat de la xarxa es reinicialitzarà. No afecta als esdeveniments.",
"Maintenance_Tool_del_alldev": "Eliminar tots els dispositius", "Maintenance_Tool_del_alldev": "Eliminar tots els dispositius",
"Maintenance_Tool_del_alldev_noti": "Eliminar dispositius", "Maintenance_Tool_del_alldev_noti": "Eliminar dispositius",
"Maintenance_Tool_del_alldev_noti_text": "Estàs segur que vols eliminar tots els dispositius?", "Maintenance_Tool_del_alldev_noti_text": "Segur que vols eliminar tots els dispositius?",
"Maintenance_Tool_del_alldev_text": "Abans d'utilitzar aquesta funció, feu una còpia de seguretat. La supressió no es pot desfer. Tots els dispositius s'eliminaran de la base de dades.", "Maintenance_Tool_del_alldev_text": "Abans d'utilitzar aquesta funció, feu una còpia de seguretat. La supressió no es pot desfer. Tots els dispositius s'eliminaran de la base de dades.",
"Maintenance_Tool_del_allevents": "Suprimeix esdeveniments (Elimina presència)", "Maintenance_Tool_del_allevents": "Elimina deteccions (presència)",
"Maintenance_Tool_del_allevents30": "Suprimeix tots els esdeveniments més vells que 30 dies", "Maintenance_Tool_del_allevents30": "Suprimeix tots els esdeveniments anteriors a 30 dies",
"Maintenance_Tool_del_allevents30_noti": "Eliminar Esdeveniments", "Maintenance_Tool_del_allevents30_noti": "Eliminar Esdeveniments",
"Maintenance_Tool_del_allevents30_noti_text": "T'és segur vols eliminar tot els successos més vells que 30 dies? Això elimina la Presencia de tots els Dispositius.", "Maintenance_Tool_del_allevents30_noti_text": "T'és segur vols eliminar tot els successos més vells que 30 dies? Això elimina tots els dispositius presents.",
"Maintenance_Tool_del_allevents30_text": "Abans d'utilitzar aquesta funció, feu una còpia de seguretat. La supressió no es pot desfer. S'eliminaran tots els esdeveniments mes vells de 30 dies a la base de dades. També es restablirà la presència de tots els dispositius. Això pot portar a sessions no vàlides. Això significa que els dispositius es mostren com a \"present\" encara que estiguin fora de línia. Una anàlisi mentre el dispositiu en qüestió està en línia resol el problema.", "Maintenance_Tool_del_allevents30_text": "Abans d'utilitzar aquesta funció, feu una còpia de seguretat. La supressió no es pot desfer. S'eliminaran tots els esdeveniments mes vells de 30 dies a la base de dades. També es restablirà la detecció de presència de tots els dispositius. Això pot portar a sessions no vàlides. Això significa que els dispositius es mostren com a \"presents/detectats\" encara que estiguin fora de línia. Una anàlisi mentre el dispositiu en qüestió està en línia resol el problema.",
"Maintenance_Tool_del_allevents_noti": "Eliminar Esdeveniments", "Maintenance_Tool_del_allevents_noti": "Eliminar Esdeveniments",
"Maintenance_Tool_del_allevents_noti_text": "Estàs segur que vols eliminar tots els esdeveniments? Això reinicialització Presència de tots els dispositius.", "Maintenance_Tool_del_allevents_noti_text": "Estàs segur que vols eliminar tots els esdeveniments? Això reinicialitza la detecció de presència de tots els dispositius.",
"Maintenance_Tool_del_allevents_text": "Abans d'utilitzar aquesta funció, feu una còpia de seguretat. La supressió no es pot desfer. Tots els esdeveniments de la base de dades seran esborrats. Es restablirà dada de presència de tots els dispositius. Les sessions seran invalidades. Això significa que els dispositius es poden mostrar com a \"present\" encara que estiguin fora de línia. Una anàlisi mentre el dispositiu en qüestió està en línia resol el problema.", "Maintenance_Tool_del_allevents_text": "Abans d'utilitzar aquesta funció, feu una còpia de seguretat. La supressió no es pot desfer. Tots els esdeveniments de la base de dades s'esborraran. Es restablirà dada de detecció de tots els dispositius. S'invalidaran les sessions. Això significa que els dispositius es poden mostrar com a \"present\" encara que estiguin fora de línia. Una anàlisi mentre el dispositiu en qüestió està en línia resol el problema.",
"Maintenance_Tool_del_empty_macs": "Eliminar dispositius amb MAC buits", "Maintenance_Tool_del_empty_macs": "Eliminar dispositius amb MAC buits",
"Maintenance_Tool_del_empty_macs_noti": "Elimina Dispositius", "Maintenance_Tool_del_empty_macs_noti": "Elimina Dispositius",
"Maintenance_Tool_del_empty_macs_noti_text": "Estàs segur que vols eliminar tots els dispositius amb adreces MAC buides?<br>(potser prefereix arxivar-lo)", "Maintenance_Tool_del_empty_macs_noti_text": "Estàs segur que vols eliminar tots els dispositius amb adreces MAC buides?<br>(potser prefereix arxivar-lo)",
"Maintenance_Tool_del_empty_macs_text": "Abans d'utilitzar aquesta funció, feu una còpia de seguretat. La supressió no es pot desfer. Tots els dispositius sense MAC s'eliminaran de la base de dades.", "Maintenance_Tool_del_empty_macs_text": "Abans d'utilitzar aquesta funció, feu una còpia de seguretat. La supressió no es pot desfer. Tots els dispositius sense MAC s'eliminaran de la base de dades.",
"Maintenance_Tool_del_selecteddev": "Suprimeix els dispositius seleccionats", "Maintenance_Tool_del_selecteddev": "Suprimeix els dispositius seleccionats",
"Maintenance_Tool_del_selecteddev_text": "Abans d'utilitzar aquesta funció, feu una còpia de seguretat. La supressió no es pot desfer. Els dispositius seleccionats s'eliminaran de la base de dades.", "Maintenance_Tool_del_selecteddev_text": "Abans d'utilitzar aquesta funció, feu una còpia de seguretat. La supressió no es pot desfer. Els dispositius seleccionats s'eliminaran de la base de dades.",
"Maintenance_Tool_del_unknowndev": "Suprimeix dispositius (desconeguts)", "Maintenance_Tool_del_unknowndev": "Elimina dispositius desconeguts",
"Maintenance_Tool_del_unknowndev_noti": "Suprimeix dispositius (desconeguts)", "Maintenance_Tool_del_unknowndev_noti": "Elimina dispositius desconeguts",
"Maintenance_Tool_del_unknowndev_noti_text": "Estàs segur que vols eliminar tots els dispositius (no coneguts) i amb nom (no trobat)?", "Maintenance_Tool_del_unknowndev_noti_text": "Estàs segur que vols eliminar tots els dispositius (no coneguts) o amb nom (no trobat)?",
"Maintenance_Tool_del_unknowndev_text": "Abans d'utilitzar aquesta funció, feu una còpia de seguretat. La supressió no es pot desfer. Tots els dispositius anomenats (no coneguts) s'eliminaran de la base de dades.", "Maintenance_Tool_del_unknowndev_text": "Abans d'utilitzar aquesta funció, feu una còpia de seguretat. La supressió no es pot desfer. Tots els dispositius anomenats (no coneguts) s'eliminaran de la base de dades.",
"Maintenance_Tool_displayed_columns_text": "Canvieu la visibilitat i l'ordre de les columnes a la pàgina <a href=\"devices.php\"><b> <i class=\"fa fa-laptop\"></i> Dispositius</b></a>.", "Maintenance_Tool_displayed_columns_text": "Canvieu la visibilitat i l'ordre de les columnes a la pàgina <a href=\"devices.php\"><b> <i class=\"fa fa-laptop\"></i> Dispositius</b></a>.",
"Maintenance_Tool_drag_me": "Arrossega'm a reorder columnes.", "Maintenance_Tool_drag_me": "Arrossega'm a reorder columnes.",
@@ -483,7 +491,7 @@
"Maintenance_lang_selector_empty": "Tria idioma", "Maintenance_lang_selector_empty": "Tria idioma",
"Maintenance_lang_selector_lable": "Selecció d'idioma", "Maintenance_lang_selector_lable": "Selecció d'idioma",
"Maintenance_lang_selector_text": "El canvi té lloc en el cantó del client, així que afecta només el navegador actual.", "Maintenance_lang_selector_text": "El canvi té lloc en el cantó del client, així que afecta només el navegador actual.",
"Maintenance_new_version": "🆕 Hi ha una nova versió. Comprova <a href=\"https://github.com/jokob-sk/NetAlertX/releases\" target=\"_blank\">release notes</a>.", "Maintenance_new_version": "Hi ha una nova versió. Comprova <a href=\"https://github.com/jokob-sk/NetAlertX/releases\" target=\"_blank\">release notes</a>.",
"Maintenance_themeselector_apply": "Aplica", "Maintenance_themeselector_apply": "Aplica",
"Maintenance_themeselector_empty": "Tria una Skin", "Maintenance_themeselector_empty": "Tria una Skin",
"Maintenance_themeselector_lable": "Selecciona una Skin", "Maintenance_themeselector_lable": "Selecciona una Skin",
@@ -558,7 +566,7 @@
"PIALERT_WEB_PROTECTION_name": "Activa l'accés", "PIALERT_WEB_PROTECTION_name": "Activa l'accés",
"PLUGINS_KEEP_HIST_description": "Quantes entrades de Plugins s'han de mantenir a la història (per Plugin, no per dispositiu).", "PLUGINS_KEEP_HIST_description": "Quantes entrades de Plugins s'han de mantenir a la història (per Plugin, no per dispositiu).",
"PLUGINS_KEEP_HIST_name": "Història dels Plugins", "PLUGINS_KEEP_HIST_name": "Història dels Plugins",
"Plugins_DeleteAll": "Elimina tot (els filtres són ignorats)", "Plugins_DeleteAll": "Elimina tot (s'ignoraran els filtres)",
"Plugins_Filters_Mac": "Filtre de MAC", "Plugins_Filters_Mac": "Filtre de MAC",
"Plugins_History": "Historial d'Esdeveniments", "Plugins_History": "Historial d'Esdeveniments",
"Plugins_Obj_DeleteListed": "Suprimeix els objectes mostrats", "Plugins_Obj_DeleteListed": "Suprimeix els objectes mostrats",
@@ -587,7 +595,7 @@
"Presence_Shortcut_DownAlerts": "Aturar alertes", "Presence_Shortcut_DownAlerts": "Aturar alertes",
"Presence_Shortcut_Favorites": "Favorits", "Presence_Shortcut_Favorites": "Favorits",
"Presence_Shortcut_NewDevices": "Nous dispositius", "Presence_Shortcut_NewDevices": "Nous dispositius",
"Presence_Title": "Presència per dispositiu", "Presence_Title": "Detecció de dispositius",
"REPORT_DASHBOARD_URL_description": "Aquesta URL s'utilitza com a base per generar enllaços en informes HTML (per exemple: correus electrònics). Introduïu la URL completa començant per <code>http://</code> incloent el número de port (sense barra inicial <code>/</code>).", "REPORT_DASHBOARD_URL_description": "Aquesta URL s'utilitza com a base per generar enllaços en informes HTML (per exemple: correus electrònics). Introduïu la URL completa començant per <code>http://</code> incloent el número de port (sense barra inicial <code>/</code>).",
"REPORT_DASHBOARD_URL_name": "URL NetAlertX", "REPORT_DASHBOARD_URL_name": "URL NetAlertX",
"REPORT_ERROR": "Si us plau, introdueix dins de la caixa de text els caràcters que veu a la imatge de sota. Això és requerit per evitar enviaments automàtics", "REPORT_ERROR": "Si us plau, introdueix dins de la caixa de text els caràcters que veu a la imatge de sota. Això és requerit per evitar enviaments automàtics",
@@ -694,7 +702,7 @@
"UI_NOT_RANDOM_MAC_description": "Prefixos MAC que no s'han de marcar com a dispositius aleatoris. Introduïu per exemple <code> 52</code> per excloure els dispositius començant per <code> 52:xx:xx:xx:xx:xx</code> de ser marcats com a dispositius amb una adreça MAC aleatòria.", "UI_NOT_RANDOM_MAC_description": "Prefixos MAC que no s'han de marcar com a dispositius aleatoris. Introduïu per exemple <code> 52</code> per excloure els dispositius començant per <code> 52:xx:xx:xx:xx:xx</code> de ser marcats com a dispositius amb una adreça MAC aleatòria.",
"UI_NOT_RANDOM_MAC_name": "No marqueu com a aleatori", "UI_NOT_RANDOM_MAC_name": "No marqueu com a aleatori",
"UI_PRESENCE_description": "Seleccioneu quins estats s'han de mostrar al gràfic <b> Presència de dispositius</b> a la pàgina <a href=\"/devices.php\" target=\"_blank\">Dispositius</a>.", "UI_PRESENCE_description": "Seleccioneu quins estats s'han de mostrar al gràfic <b> Presència de dispositius</b> a la pàgina <a href=\"/devices.php\" target=\"_blank\">Dispositius</a>.",
"UI_PRESENCE_name": "Mostra al mapa de presència", "UI_PRESENCE_name": "Mostra al mapa de detecció",
"UI_REFRESH_description": "Introduïu el nombre de segons després del qual es recarrega la interfície d'usuari. Configura a <code>0</code> per desactivar.", "UI_REFRESH_description": "Introduïu el nombre de segons després del qual es recarrega la interfície d'usuari. Configura a <code>0</code> per desactivar.",
"UI_REFRESH_name": "Auto-refresc UI", "UI_REFRESH_name": "Auto-refresc UI",
"VERSION_description": "Versió o valor timestamp per comprovar si l'aplicació va ser actualitzada.", "VERSION_description": "Versió o valor timestamp per comprovar si l'aplicació va ser actualitzada.",
@@ -710,6 +718,7 @@
"general_event_title": "Execució d'un esdeveniment ad-hoc", "general_event_title": "Execució d'un esdeveniment ad-hoc",
"go_to_node_event_icon": "fa-square-up-right", "go_to_node_event_icon": "fa-square-up-right",
"go_to_node_event_tooltip": "Navegació a la pàgina de la Xarxa del node donat", "go_to_node_event_tooltip": "Navegació a la pàgina de la Xarxa del node donat",
"new_version_available": "Ja està disponible una nova versió.",
"report_guid": "Notificació guid:", "report_guid": "Notificació guid:",
"report_guid_missing": "No s'ha trobat la notificació enllaçada. Hi ha un petit retard entre les notificacions enviades recentment i que estiguin disponibles. Refresqui la pàgina i la memòria cau d'aquí uns segons. També és possible que la notificació seleccionada s'hagi esborrat durant el manteniment tal com s'especifica a la configuració <code>DBCLNP_NOTIFI_HIST</code>. <br/> <br/>L'última notificació es mostra en el seu lloc. La notificació perduda té el següent GUID:", "report_guid_missing": "No s'ha trobat la notificació enllaçada. Hi ha un petit retard entre les notificacions enviades recentment i que estiguin disponibles. Refresqui la pàgina i la memòria cau d'aquí uns segons. També és possible que la notificació seleccionada s'hagi esborrat durant el manteniment tal com s'especifica a la configuració <code>DBCLNP_NOTIFI_HIST</code>. <br/> <br/>L'última notificació es mostra en el seu lloc. La notificació perduda té el següent GUID:",
"report_select_format": "Seleccioneu Format:", "report_select_format": "Seleccioneu Format:",

View File

@@ -242,6 +242,7 @@
"Device_Tablelenght": "", "Device_Tablelenght": "",
"Device_Tablelenght_all": "", "Device_Tablelenght_all": "",
"Device_Title": "", "Device_Title": "",
"Devices_Filters": "",
"Donations_Others": "", "Donations_Others": "",
"Donations_Platforms": "", "Donations_Platforms": "",
"Donations_Text": "", "Donations_Text": "",
@@ -327,6 +328,7 @@
"Gen_Upd_Fail": "", "Gen_Upd_Fail": "",
"Gen_Update": "", "Gen_Update": "",
"Gen_Update_Value": "", "Gen_Update_Value": "",
"Gen_ValidIcon": "",
"Gen_Warning": "", "Gen_Warning": "",
"Gen_Work_In_Progress": "", "Gen_Work_In_Progress": "",
"Gen_create_new_device": "", "Gen_create_new_device": "",
@@ -398,6 +400,8 @@
"Maintenance_Running_Version": "", "Maintenance_Running_Version": "",
"Maintenance_Status": "", "Maintenance_Status": "",
"Maintenance_Title": "", "Maintenance_Title": "",
"Maintenance_Tool_DownloadConfig": "",
"Maintenance_Tool_DownloadConfig_text": "",
"Maintenance_Tool_ExportCSV": "", "Maintenance_Tool_ExportCSV": "",
"Maintenance_Tool_ExportCSV_noti": "", "Maintenance_Tool_ExportCSV_noti": "",
"Maintenance_Tool_ExportCSV_noti_text": "", "Maintenance_Tool_ExportCSV_noti_text": "",
@@ -406,9 +410,13 @@
"Maintenance_Tool_ImportCSV_noti": "", "Maintenance_Tool_ImportCSV_noti": "",
"Maintenance_Tool_ImportCSV_noti_text": "", "Maintenance_Tool_ImportCSV_noti_text": "",
"Maintenance_Tool_ImportCSV_text": "", "Maintenance_Tool_ImportCSV_text": "",
"Maintenance_Tool_ImportConfig_noti": "",
"Maintenance_Tool_ImportPastedCSV": "", "Maintenance_Tool_ImportPastedCSV": "",
"Maintenance_Tool_ImportPastedCSV_noti_text": "", "Maintenance_Tool_ImportPastedCSV_noti_text": "",
"Maintenance_Tool_ImportPastedCSV_text": "", "Maintenance_Tool_ImportPastedCSV_text": "",
"Maintenance_Tool_ImportPastedConfig": "",
"Maintenance_Tool_ImportPastedConfig_noti_text": "",
"Maintenance_Tool_ImportPastedConfig_text": "",
"Maintenance_Tool_arpscansw": "", "Maintenance_Tool_arpscansw": "",
"Maintenance_Tool_arpscansw_noti": "", "Maintenance_Tool_arpscansw_noti": "",
"Maintenance_Tool_arpscansw_noti_text": "", "Maintenance_Tool_arpscansw_noti_text": "",
@@ -710,6 +718,7 @@
"general_event_title": "", "general_event_title": "",
"go_to_node_event_icon": "", "go_to_node_event_icon": "",
"go_to_node_event_tooltip": "", "go_to_node_event_tooltip": "",
"new_version_available": "",
"report_guid": "", "report_guid": "",
"report_guid_missing": "", "report_guid_missing": "",
"report_select_format": "", "report_select_format": "",

View File

@@ -150,8 +150,8 @@
"DevDetail_Shortcut_DownAlerts": "Down Meldungen", "DevDetail_Shortcut_DownAlerts": "Down Meldungen",
"DevDetail_Shortcut_Presence": "Anwesenheit", "DevDetail_Shortcut_Presence": "Anwesenheit",
"DevDetail_Shortcut_Sessions": "Sitzungen", "DevDetail_Shortcut_Sessions": "Sitzungen",
"DevDetail_Tab_Details": "<i class=\"fa fa-info-circle\"></i> Details", "DevDetail_Tab_Details": "Details",
"DevDetail_Tab_Events": "<i class=\"fa fa-bolt\"></i> Ereignisse", "DevDetail_Tab_Events": "Ereignisse",
"DevDetail_Tab_EventsTableDate": "Datum", "DevDetail_Tab_EventsTableDate": "Datum",
"DevDetail_Tab_EventsTableEvent": "Ereignistype", "DevDetail_Tab_EventsTableEvent": "Ereignistype",
"DevDetail_Tab_EventsTableIP": "IP", "DevDetail_Tab_EventsTableIP": "IP",
@@ -166,10 +166,10 @@
"DevDetail_Tab_NmapTableState": "Status", "DevDetail_Tab_NmapTableState": "Status",
"DevDetail_Tab_NmapTableText": "Erstelle einen Plan über die<a href=\"/settings.php#NMAP_ACTIVE\">Einstellungen</a>", "DevDetail_Tab_NmapTableText": "Erstelle einen Plan über die<a href=\"/settings.php#NMAP_ACTIVE\">Einstellungen</a>",
"DevDetail_Tab_NmapTableTime": "Zeit", "DevDetail_Tab_NmapTableTime": "Zeit",
"DevDetail_Tab_Plugins": "<i class=\"fa fa-plug\"></i> Plugins", "DevDetail_Tab_Plugins": "Plugins",
"DevDetail_Tab_Presence": "<i class=\"fa fa-calendar\"></i> Anwesenheit", "DevDetail_Tab_Presence": "Anwesenheit",
"DevDetail_Tab_Sessions": "<i class=\"fa fa-list-ol\"></i> Sitzungen", "DevDetail_Tab_Sessions": "Sitzungen",
"DevDetail_Tab_Tools": "<i class=\"fa fa-screwdriver-wrench\"></i> Werkzeuge", "DevDetail_Tab_Tools": "Werkzeuge",
"DevDetail_Tab_Tools_Internet_Info_Description": "Das Internet-Info-Tool zeigt Informationen über die Internetverbindung an, wie z. B. IP-Adresse, Stadt, Land, Ortsvorwahl und Zeitzone.", "DevDetail_Tab_Tools_Internet_Info_Description": "Das Internet-Info-Tool zeigt Informationen über die Internetverbindung an, wie z. B. IP-Adresse, Stadt, Land, Ortsvorwahl und Zeitzone.",
"DevDetail_Tab_Tools_Internet_Info_Error": "Es ist ein Fehler aufgetreten", "DevDetail_Tab_Tools_Internet_Info_Error": "Es ist ein Fehler aufgetreten",
"DevDetail_Tab_Tools_Internet_Info_Start": "Internet-Info starten", "DevDetail_Tab_Tools_Internet_Info_Start": "Internet-Info starten",
@@ -254,11 +254,12 @@
"Device_Tablelenght": "Zeige _MENU_ Einträge", "Device_Tablelenght": "Zeige _MENU_ Einträge",
"Device_Tablelenght_all": "Alle", "Device_Tablelenght_all": "Alle",
"Device_Title": "Geräte", "Device_Title": "Geräte",
"Devices_Filters": "",
"Donations_Others": "Andere", "Donations_Others": "Andere",
"Donations_Platforms": "Sponsor-Platformen", "Donations_Platforms": "Sponsor-Platformen",
"Donations_Text": "Hey 👋! </br> Thanks for clicking on this menu item 😅 </br> </br> I'm trying to collect some donations to make you better software. Also, it would help me not to get burned out. Me burning out might mean end of support for this app. Any small (recurring or not) sponsorship makes me want ot put more effort into this app. I don't want to lock features (new plugins) behind paywalls 🔐. </br> Currently, I'm waking up 2h before work so I contribute to the app a bit. If I had some recurring income I could shorten my workweek and in the remaining time fully focus on NetAlertX. You'd get more functionality, a more polished app and less bugs. </br> </br> Thanks for reading - I'm super grateful for any support ❤🙏 </br> </br> TL;DR: By supporting me you get: </br> </br> <ul><li>Regular updates to keep your data and family safe 🔄</li><li>Less bugs 🐛🔫</li><li>Better and more functionality</li><li>I don't get burned out 🔥🤯</li><li>Less rushed releases 💨</li><li>Better docs📚</li><li>Quicker and better support with issues 🆘</li><li>Less grumpy me 😄</li></ul> </br> 📧Email me to <a href='mailto:jokob@duck.com?subject=NetAlertX'>jokob@duck.com</a> if you want to get in touch or if I should add other sponsorship platforms. </br>", "Donations_Text": "Hey 👋! </br> Thanks for clicking on this menu item 😅 </br> </br> I'm trying to collect some donations to make you better software. Also, it would help me not to get burned out. Me burning out might mean end of support for this app. Any small (recurring or not) sponsorship makes me want ot put more effort into this app. I don't want to lock features (new plugins) behind paywalls 🔐. </br> Currently, I'm waking up 2h before work so I contribute to the app a bit. If I had some recurring income I could shorten my workweek and in the remaining time fully focus on NetAlertX. You'd get more functionality, a more polished app and less bugs. </br> </br> Thanks for reading - I'm super grateful for any support ❤🙏 </br> </br> TL;DR: By supporting me you get: </br> </br> <ul><li>Regular updates to keep your data and family safe 🔄</li><li>Less bugs 🐛🔫</li><li>Better and more functionality</li><li>I don't get burned out 🔥🤯</li><li>Less rushed releases 💨</li><li>Better docs📚</li><li>Quicker and better support with issues 🆘</li><li>Less grumpy me 😄</li></ul> </br> 📧Email me to <a href='mailto:jokob@duck.com?subject=NetAlertX'>jokob@duck.com</a> if you want to get in touch or if I should add other sponsorship platforms. </br>",
"Donations_Title": "Spenden", "Donations_Title": "Spenden",
"ENABLE_PLUGINS_description": "NOTUSED Enables the <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins\">plugins</a> functionality. Loading plugins requires more hardware resources so you might want to disable them on low-powered system.", "ENABLE_PLUGINS_description": "NOTUSED Enables the <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">plugins</a> functionality. Loading plugins requires more hardware resources so you might want to disable them on low-powered system.",
"ENABLE_PLUGINS_name": "NOTUSED Enable Plugins", "ENABLE_PLUGINS_name": "NOTUSED Enable Plugins",
"ENCRYPTION_KEY_description": "Schlüssel zur Datenverschlüsselung.", "ENCRYPTION_KEY_description": "Schlüssel zur Datenverschlüsselung.",
"ENCRYPTION_KEY_name": "Verschlüsselungsschlüssel", "ENCRYPTION_KEY_name": "Verschlüsselungsschlüssel",
@@ -339,6 +340,7 @@
"Gen_Upd_Fail": "Aktualisierung fehlgeschlagen", "Gen_Upd_Fail": "Aktualisierung fehlgeschlagen",
"Gen_Update": "Aktualisieren", "Gen_Update": "Aktualisieren",
"Gen_Update_Value": "Wert aktualisieren", "Gen_Update_Value": "Wert aktualisieren",
"Gen_ValidIcon": "",
"Gen_Warning": "Warnung", "Gen_Warning": "Warnung",
"Gen_Work_In_Progress": "Keine Finalversion, feedback bitte unter: https://github.com/jokob-sk/NetAlertX/issues", "Gen_Work_In_Progress": "Keine Finalversion, feedback bitte unter: https://github.com/jokob-sk/NetAlertX/issues",
"Gen_create_new_device": "Neues Gerät", "Gen_create_new_device": "Neues Gerät",
@@ -424,6 +426,8 @@
"Maintenance_Running_Version": "Installierte Version", "Maintenance_Running_Version": "Installierte Version",
"Maintenance_Status": "Status", "Maintenance_Status": "Status",
"Maintenance_Title": "Wartungswerkzeuge", "Maintenance_Title": "Wartungswerkzeuge",
"Maintenance_Tool_DownloadConfig": "",
"Maintenance_Tool_DownloadConfig_text": "",
"Maintenance_Tool_ExportCSV": "CSV Export", "Maintenance_Tool_ExportCSV": "CSV Export",
"Maintenance_Tool_ExportCSV_noti": "CSV Export", "Maintenance_Tool_ExportCSV_noti": "CSV Export",
"Maintenance_Tool_ExportCSV_noti_text": "Sind Sie sich sicher, dass Sie die CSV-Datei erstellen wollen?", "Maintenance_Tool_ExportCSV_noti_text": "Sind Sie sich sicher, dass Sie die CSV-Datei erstellen wollen?",
@@ -432,9 +436,13 @@
"Maintenance_Tool_ImportCSV_noti": "CSV Import", "Maintenance_Tool_ImportCSV_noti": "CSV Import",
"Maintenance_Tool_ImportCSV_noti_text": "Sind Sie sich sicher, dass Sie die CSV-Datei importieren wollen? Dies wird <b>alle Geräte in der Datenbank überschreiben</b>.", "Maintenance_Tool_ImportCSV_noti_text": "Sind Sie sich sicher, dass Sie die CSV-Datei importieren wollen? Dies wird <b>alle Geräte in der Datenbank überschreiben</b>.",
"Maintenance_Tool_ImportCSV_text": "Machen Sie ein Backup, bevor Sie diese Funk­tion nutzen. Importiere eine CSV-Datei (comma separated values) mit einer Liste aller Geräte und deren Beziehungen zwischen Netzwerkknoten und verbundenen Geräten. Um dies zu tun platziere die <b>devices.csv</b> benannte CSV-Datei in deinen <b>/config</b> Ordner.", "Maintenance_Tool_ImportCSV_text": "Machen Sie ein Backup, bevor Sie diese Funk­tion nutzen. Importiere eine CSV-Datei (comma separated values) mit einer Liste aller Geräte und deren Beziehungen zwischen Netzwerkknoten und verbundenen Geräten. Um dies zu tun platziere die <b>devices.csv</b> benannte CSV-Datei in deinen <b>/config</b> Ordner.",
"Maintenance_Tool_ImportConfig_noti": "",
"Maintenance_Tool_ImportPastedCSV": "CSV-Import (Einfügen)", "Maintenance_Tool_ImportPastedCSV": "CSV-Import (Einfügen)",
"Maintenance_Tool_ImportPastedCSV_noti_text": "", "Maintenance_Tool_ImportPastedCSV_noti_text": "",
"Maintenance_Tool_ImportPastedCSV_text": "", "Maintenance_Tool_ImportPastedCSV_text": "",
"Maintenance_Tool_ImportPastedConfig": "",
"Maintenance_Tool_ImportPastedConfig_noti_text": "",
"Maintenance_Tool_ImportPastedConfig_text": "",
"Maintenance_Tool_arpscansw": "ARP-Scan umschalten (ein/aus)", "Maintenance_Tool_arpscansw": "ARP-Scan umschalten (ein/aus)",
"Maintenance_Tool_arpscansw_noti": "ARP-Scan ein- oder ausschalten", "Maintenance_Tool_arpscansw_noti": "ARP-Scan ein- oder ausschalten",
"Maintenance_Tool_arpscansw_noti_text": "Wenn der Scan aus ist, bleibt er so lange aus bis er wieder aktiviert wird.", "Maintenance_Tool_arpscansw_noti_text": "Wenn der Scan aus ist, bleibt er so lange aus bis er wieder aktiviert wird.",
@@ -509,7 +517,7 @@
"Maintenance_lang_selector_empty": "Sprache wählen", "Maintenance_lang_selector_empty": "Sprache wählen",
"Maintenance_lang_selector_lable": "Sprachauswahl", "Maintenance_lang_selector_lable": "Sprachauswahl",
"Maintenance_lang_selector_text": "Die Änderung findet serverseitig statt, betrifft also alle verwendeten Geräte.", "Maintenance_lang_selector_text": "Die Änderung findet serverseitig statt, betrifft also alle verwendeten Geräte.",
"Maintenance_new_version": "🆕 Eine neue Version ist vefügbar. Sieh dir die <a href=\"https://github.com/jokob-sk/NetAlertX/releases\" target=\"_blank\">Versionshinweise</a> an.", "Maintenance_new_version": "Eine neue Version ist vefügbar. Sieh dir die <a href=\"https://github.com/jokob-sk/NetAlertX/releases\" target=\"_blank\">Versionshinweise</a> an.",
"Maintenance_themeselector_apply": "Übernehmen", "Maintenance_themeselector_apply": "Übernehmen",
"Maintenance_themeselector_empty": "Skin wählen", "Maintenance_themeselector_empty": "Skin wählen",
"Maintenance_themeselector_lable": "Skin Auswahl", "Maintenance_themeselector_lable": "Skin Auswahl",
@@ -791,6 +799,7 @@
"general_event_title": "", "general_event_title": "",
"go_to_node_event_icon": "", "go_to_node_event_icon": "",
"go_to_node_event_tooltip": "", "go_to_node_event_tooltip": "",
"new_version_available": "",
"report_guid": "", "report_guid": "",
"report_guid_missing": "", "report_guid_missing": "",
"report_select_format": "Format auswählen:", "report_select_format": "Format auswählen:",

View File

@@ -1,7 +1,7 @@
{ {
"API_CUSTOM_SQL_description": "You can specify a custom SQL query which will generate a JSON file and then expose it via the <a href=\"/api/table_custom_endpoint.json\" target=\"_blank\"><code>table_custom_endpoint.json</code> file endpoint</a>.", "API_CUSTOM_SQL_description": "You can specify a custom SQL query which will generate a JSON file and then expose it via the <a href=\"/api/table_custom_endpoint.json\" target=\"_blank\"><code>table_custom_endpoint.json</code> file endpoint</a>.",
"API_CUSTOM_SQL_name": "Custom endpoint", "API_CUSTOM_SQL_name": "Custom endpoint",
"API_TOKEN_description": "API token to secure communication, you can generate one or enter any value. It's sent in the request header. Used in the <code>SYNC</code> plugin, GraphQL server.", "API_TOKEN_description": "API token for secure communication. Generate one or enter any value. It's sent in the request header and used in the <code>SYNC</code> plugin, GraphQL server and other API endpoints. You can use the API endpoints to create custom integrations as descibed in the <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/API.md\" target=\"_blank\">API documentation</a>.",
"API_TOKEN_name": "API token", "API_TOKEN_name": "API token",
"API_display_name": "API", "API_display_name": "API",
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>", "API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
@@ -48,7 +48,7 @@
"BackDevices_DBTools_ImportCSVError": "The CSV file could not be imported. Make sure the format is correct.", "BackDevices_DBTools_ImportCSVError": "The CSV file could not be imported. Make sure the format is correct.",
"BackDevices_DBTools_ImportCSVMissing": "The CSV file could not be found under <b>/config/devices.csv.</b>", "BackDevices_DBTools_ImportCSVMissing": "The CSV file could not be found under <b>/config/devices.csv.</b>",
"BackDevices_DBTools_Purge": "The oldest backups were deleted", "BackDevices_DBTools_Purge": "The oldest backups were deleted",
"BackDevices_DBTools_UpdDev": "Device updated successfully", "BackDevices_DBTools_UpdDev": "Device updated successfully. Main devices list may need some time to reload if a scan is in progress.",
"BackDevices_DBTools_UpdDevError": "Error updating device", "BackDevices_DBTools_UpdDevError": "Error updating device",
"BackDevices_DBTools_Upgrade": "Database upgraded successfully", "BackDevices_DBTools_Upgrade": "Database upgraded successfully",
"BackDevices_DBTools_UpgradeError": "Database upgrade failed", "BackDevices_DBTools_UpgradeError": "Database upgrade failed",
@@ -138,8 +138,8 @@
"DevDetail_Shortcut_DownAlerts": "Down Alerts", "DevDetail_Shortcut_DownAlerts": "Down Alerts",
"DevDetail_Shortcut_Presence": "Presence", "DevDetail_Shortcut_Presence": "Presence",
"DevDetail_Shortcut_Sessions": "Sessions", "DevDetail_Shortcut_Sessions": "Sessions",
"DevDetail_Tab_Details": "<i class=\"fa fa-info-circle\"></i> Details", "DevDetail_Tab_Details": "Details",
"DevDetail_Tab_Events": "<i class=\"fa fa-bolt\"></i> Events", "DevDetail_Tab_Events": "Events",
"DevDetail_Tab_EventsTableDate": "Date", "DevDetail_Tab_EventsTableDate": "Date",
"DevDetail_Tab_EventsTableEvent": "Event type", "DevDetail_Tab_EventsTableEvent": "Event type",
"DevDetail_Tab_EventsTableIP": "IP", "DevDetail_Tab_EventsTableIP": "IP",
@@ -154,10 +154,10 @@
"DevDetail_Tab_NmapTableState": "State", "DevDetail_Tab_NmapTableState": "State",
"DevDetail_Tab_NmapTableText": "Set up a schedule in <a href=\"/settings.php#NMAP_ACTIVE\">Settings</a>", "DevDetail_Tab_NmapTableText": "Set up a schedule in <a href=\"/settings.php#NMAP_ACTIVE\">Settings</a>",
"DevDetail_Tab_NmapTableTime": "Time", "DevDetail_Tab_NmapTableTime": "Time",
"DevDetail_Tab_Plugins": "<i class=\"fa fa-plug\"></i> Plugins", "DevDetail_Tab_Plugins": "Plugins",
"DevDetail_Tab_Presence": "<i class=\"fa fa-calendar\"></i> Presence", "DevDetail_Tab_Presence": "Presence",
"DevDetail_Tab_Sessions": "<i class=\"fa fa-list-ol\"></i> Sessions", "DevDetail_Tab_Sessions": "Sessions",
"DevDetail_Tab_Tools": "<i class=\"fa fa-screwdriver-wrench\"></i> Tools", "DevDetail_Tab_Tools": "Tools",
"DevDetail_Tab_Tools_Internet_Info_Description": "The Internet info tool displays information about the Internet connection, such as IP address, city, country, area code and time zone.", "DevDetail_Tab_Tools_Internet_Info_Description": "The Internet info tool displays information about the Internet connection, such as IP address, city, country, area code and time zone.",
"DevDetail_Tab_Tools_Internet_Info_Error": "An error has occurred", "DevDetail_Tab_Tools_Internet_Info_Error": "An error has occurred",
"DevDetail_Tab_Tools_Internet_Info_Start": "Start Internet Info", "DevDetail_Tab_Tools_Internet_Info_Start": "Start Internet Info",
@@ -242,11 +242,12 @@
"Device_Tablelenght": "Show _MENU_ entries", "Device_Tablelenght": "Show _MENU_ entries",
"Device_Tablelenght_all": "All", "Device_Tablelenght_all": "All",
"Device_Title": "Devices", "Device_Title": "Devices",
"Devices_Filters": "Filters",
"Donations_Others": "Others", "Donations_Others": "Others",
"Donations_Platforms": "Sponsor platforms", "Donations_Platforms": "Sponsor platforms",
"Donations_Text": "Hey 👋! </br> Thanks for clicking on this menu item 😅 </br> </br> I'm trying to collect some donations to make you better software. Also, it would help me not to get burned out, so I can support this app longer. Any small (recurring or not) sponsorship makes me want to put more effort into this app. </br> I'd love to shorten my work week and in the remaining time fully focus on NetAlertX. You'd get more functionality, a more polished app and less bugs. </br> </br> Thanks for reading - I'm grateful for any support ❤🙏 </br> </br> TL;DR: By supporting me you get: </br> </br> <ul><li>Regular updates to keep your data and family safe 🔄</li><li>Less bugs 🐛🔫</li><li>Better and more functionality</li><li>I don't get burned out 🔥🤯</li><li>Less rushed releases 💨</li><li>Better docs📚</li><li>Quicker and better support with issues 🆘</li></ul> </br> 📧Email me to <a href='mailto:jokob@duck.com?subject=NetAlertX'>jokob@duck.com</a> if you want to get in touch or if I should add other sponsorship platforms. </br>", "Donations_Text": "Hey 👋! </br> Thanks for clicking on this menu item 😅 </br> </br> I'm trying to collect some donations to make you better software. Also, it would help me not to get burned out, so I can support this app longer. Any small (recurring or not) sponsorship makes me want to put more effort into this app. </br> I'd love to shorten my work week and in the remaining time fully focus on NetAlertX. You'd get more functionality, a more polished app and less bugs. </br> </br> Thanks for reading - I'm grateful for any support ❤🙏 </br> </br> TL;DR: By supporting me you get: </br> </br> <ul><li>Regular updates to keep your data and family safe 🔄</li><li>Less bugs 🐛🔫</li><li>Better and more functionality</li><li>I don't get burned out 🔥🤯</li><li>Less rushed releases 💨</li><li>Better docs📚</li><li>Quicker and better support with issues 🆘</li></ul> </br> 📧Email me to <a href='mailto:jokob@duck.com?subject=NetAlertX'>jokob@duck.com</a> if you want to get in touch or if I should add other sponsorship platforms. </br>",
"Donations_Title": "Donations", "Donations_Title": "Donations",
"ENABLE_PLUGINS_description": "Enables the <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins\">plugins</a> functionality. Loading plugins requires more hardware resources so you might want to disable them on low-powered system.", "ENABLE_PLUGINS_description": "Enables the <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">plugins</a> functionality. Loading plugins requires more hardware resources so you might want to disable them on low-powered system.",
"ENABLE_PLUGINS_name": "Enable Plugins", "ENABLE_PLUGINS_name": "Enable Plugins",
"ENCRYPTION_KEY_description": "Data encryption key.", "ENCRYPTION_KEY_description": "Data encryption key.",
"ENCRYPTION_KEY_name": "Encryption key", "ENCRYPTION_KEY_name": "Encryption key",
@@ -327,10 +328,11 @@
"Gen_Upd_Fail": "Update failed", "Gen_Upd_Fail": "Update failed",
"Gen_Update": "Update", "Gen_Update": "Update",
"Gen_Update_Value": "Update Value", "Gen_Update_Value": "Update Value",
"Gen_ValidIcon": "<i class=\"fa-solid fa-chevron-right \"></i>",
"Gen_Warning": "Warning", "Gen_Warning": "Warning",
"Gen_Work_In_Progress": "Work in progress, good time to feedback on https://github.com/jokob-sk/NetAlertX/issues", "Gen_Work_In_Progress": "Work in progress, good time to feedback on https://github.com/jokob-sk/NetAlertX/issues",
"Gen_create_new_device": "New device", "Gen_create_new_device": "New device",
"Gen_create_new_device_info": "Devices are typically discovered using <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins\">plugins</a>. However, in certain cases, you may need to add devices manually. To explore specific scenarios check the <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/REMOTE_NETWORKS.md\">Remote Networks documentation</a>.", "Gen_create_new_device_info": "Devices are typically discovered using <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">plugins</a>. However, in certain cases, you may need to add devices manually. To explore specific scenarios check the <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/REMOTE_NETWORKS.md\">Remote Networks documentation</a>.",
"General_display_name": "General", "General_display_name": "General",
"General_icon": "<i class=\"fa fa-gears\"></i>", "General_icon": "<i class=\"fa fa-gears\"></i>",
"HRS_TO_KEEP_NEWDEV_description": "This is a maintenance setting <b>DELETING devices</b>. If enabled (<code>0</code> is disabled), devices marked as <b>New Device</b> will be deleted if their <b>First Session</b> time was older than the specified hours in this setting. Use this setting if you want to auto-delete <b>New Devices</b> after <code>X</code> hours.", "HRS_TO_KEEP_NEWDEV_description": "This is a maintenance setting <b>DELETING devices</b>. If enabled (<code>0</code> is disabled), devices marked as <b>New Device</b> will be deleted if their <b>First Session</b> time was older than the specified hours in this setting. Use this setting if you want to auto-delete <b>New Devices</b> after <code>X</code> hours.",
@@ -373,7 +375,7 @@
"HelpFAQ_Cat_Presence_401_head": "A device is displayed as present although it is \"Offline\".", "HelpFAQ_Cat_Presence_401_head": "A device is displayed as present although it is \"Offline\".",
"HelpFAQ_Cat_Presence_401_text": "If this happens, you have the possibility to delete the events for the device in question (details view). Another possibility would be to switch on the device and wait until NetAlertX recognizes the device as \"online\" with the next scan and then simply switch the device off again. Now NetAlertX should properly note the state of the device in the database with the next scan.", "HelpFAQ_Cat_Presence_401_text": "If this happens, you have the possibility to delete the events for the device in question (details view). Another possibility would be to switch on the device and wait until NetAlertX recognizes the device as \"online\" with the next scan and then simply switch the device off again. Now NetAlertX should properly note the state of the device in the database with the next scan.",
"HelpFAQ_Title": "Help / FAQ", "HelpFAQ_Title": "Help / FAQ",
"LOADED_PLUGINS_description": "Which Plugins to load. Adding plugins might slow the application. Read more about which plugins need to be enabled, types, or scanning options in the <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins#readme\">plugins docs</a>. Unloaded plugins will lose your settings. Only <code>disabled</code> plugins can be unloaded.", "LOADED_PLUGINS_description": "Which Plugins to load. Adding plugins might slow the application. Read more about which plugins need to be enabled, types, or scanning options in the <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">plugins docs</a>. Unloaded plugins will lose your settings. Only <code>disabled</code> plugins can be unloaded.",
"LOADED_PLUGINS_name": "Loaded plugins", "LOADED_PLUGINS_name": "Loaded plugins",
"LOG_LEVEL_description": "This setting will enable more verbose logging. Useful for debugging events writing into the database.", "LOG_LEVEL_description": "This setting will enable more verbose logging. Useful for debugging events writing into the database.",
"LOG_LEVEL_name": "Print additional logging", "LOG_LEVEL_name": "Print additional logging",
@@ -398,17 +400,23 @@
"Maintenance_Running_Version": "Installed version", "Maintenance_Running_Version": "Installed version",
"Maintenance_Status": "Status", "Maintenance_Status": "Status",
"Maintenance_Title": "Maintenance tools", "Maintenance_Title": "Maintenance tools",
"Maintenance_Tool_ExportCSV": "CSV Export", "Maintenance_Tool_DownloadConfig": "Settings Export",
"Maintenance_Tool_ExportCSV_noti": "CSV Export", "Maintenance_Tool_DownloadConfig_text": "Download a full backup of your Settings configuration stored in the <code>app.conf</code> file.",
"Maintenance_Tool_ExportCSV": "Devices Export (csv)",
"Maintenance_Tool_ExportCSV_noti": "Devices Export (csv)",
"Maintenance_Tool_ExportCSV_noti_text": "Are you sure you want to generate a CSV file?", "Maintenance_Tool_ExportCSV_noti_text": "Are you sure you want to generate a CSV file?",
"Maintenance_Tool_ExportCSV_text": "Generate a CSV (comma separated value) file containing the list of Devices including the Network relationships between Network Nodes and connected devices. You can also trigger this by accessing this URL <code>your NetAlertX url/php/server/devices.php?action=ExportCSV</code> or by enabling the <a href=\"settings.php#CSVBCKP_header\">CSV Backup</a> plugin.", "Maintenance_Tool_ExportCSV_text": "Generate a CSV (comma separated value) file containing the list of Devices including the Network relationships between Network Nodes and connected devices. You can also trigger this by accessing this URL <code>your_NetAlertX_url/php/server/devices.php?action=ExportCSV</code> or by enabling the <a href=\"settings.php#CSVBCKP_header\">CSV Backup</a> plugin.",
"Maintenance_Tool_ImportCSV": "CSV Import", "Maintenance_Tool_ImportCSV": "Devices Import (csv)",
"Maintenance_Tool_ImportCSV_noti": "CSV Import", "Maintenance_Tool_ImportCSV_noti": "Devices Import (csv)",
"Maintenance_Tool_ImportCSV_noti_text": "Are you sure you want to import the CSV file? This will completely <b>overwrite</b> the devices in your database.", "Maintenance_Tool_ImportCSV_noti_text": "Are you sure you want to import the CSV file? This will completely <b>overwrite</b> the devices in your database.",
"Maintenance_Tool_ImportCSV_text": "Before using this function, please make a backup. Import a CSV (comma separated value) file containing the list of Devices including the Network relationships between Network Nodes and connected devices. To do that place the CSV file named <b>devices.csv</b> into your <b>/config</b> folder.", "Maintenance_Tool_ImportCSV_text": "Before using this function, please make a backup. Import a CSV (comma separated value) file containing the list of Devices including the Network relationships between Network Nodes and connected devices. To do that place the CSV file named <b>devices.csv</b> into your <b>/config</b> folder.",
"Maintenance_Tool_ImportPastedCSV": "CSV Import (Paste)", "Maintenance_Tool_ImportConfig_noti": "Settings Import (app.conf)",
"Maintenance_Tool_ImportPastedCSV": "Devices Import (csv) (paste)",
"Maintenance_Tool_ImportPastedCSV_noti_text": "Are you sure you want to import the pasted CSV? This will completely <b>overwrite</b> the devices in your database.", "Maintenance_Tool_ImportPastedCSV_noti_text": "Are you sure you want to import the pasted CSV? This will completely <b>overwrite</b> the devices in your database.",
"Maintenance_Tool_ImportPastedCSV_text": "Before using this function, please make a backup. Import a CSV (comma separated value) file containing the list of Devices including the Network relationships between Network Nodes and connected devices.", "Maintenance_Tool_ImportPastedCSV_text": "Before using this function, please make a backup. Import a CSV (comma separated value) file containing the list of Devices including the Network relationships between Network Nodes and connected devices.",
"Maintenance_Tool_ImportPastedConfig": "Settings Import (paste)",
"Maintenance_Tool_ImportPastedConfig_noti_text": "Are you sure you want to import the pasted config settings? This will completely <b>overwrite</b> the <code>app.conf</code> file.",
"Maintenance_Tool_ImportPastedConfig_text": "Imports the <code>app.conf</code> file containing all the application Settings. You might want to download the current <code>app.conf</code> file first with the <b>Settings Export</b>.",
"Maintenance_Tool_arpscansw": "Toggle arp-Scan (on/off)", "Maintenance_Tool_arpscansw": "Toggle arp-Scan (on/off)",
"Maintenance_Tool_arpscansw_noti": "Toggle arp-Scan on or off", "Maintenance_Tool_arpscansw_noti": "Toggle arp-Scan on or off",
"Maintenance_Tool_arpscansw_noti_text": "When the scan has been switched off it remains off until it is activated again.", "Maintenance_Tool_arpscansw_noti_text": "When the scan has been switched off it remains off until it is activated again.",
@@ -483,13 +491,13 @@
"Maintenance_lang_selector_empty": "Choose Language", "Maintenance_lang_selector_empty": "Choose Language",
"Maintenance_lang_selector_lable": "Select Language", "Maintenance_lang_selector_lable": "Select Language",
"Maintenance_lang_selector_text": "The change takes place on the client side, so it affects only the current browser.", "Maintenance_lang_selector_text": "The change takes place on the client side, so it affects only the current browser.",
"Maintenance_new_version": "🆕 A new version is available. Check out the <a href=\"https://github.com/jokob-sk/NetAlertX/releases\" target=\"_blank\">release notes</a>.", "Maintenance_new_version": "A new version is available. Check out the <a href=\"https://github.com/jokob-sk/NetAlertX/releases\" target=\"_blank\">release notes</a>.",
"Maintenance_themeselector_apply": "Apply", "Maintenance_themeselector_apply": "Apply",
"Maintenance_themeselector_empty": "Choose a Skin", "Maintenance_themeselector_empty": "Choose a Skin",
"Maintenance_themeselector_lable": "Select Skin", "Maintenance_themeselector_lable": "Select Skin",
"Maintenance_themeselector_text": "The change takes place on the server side, so it affects all devices in use.", "Maintenance_themeselector_text": "The change takes place on the server side, so it affects all devices in use.",
"Maintenance_version": "App updates", "Maintenance_version": "App updates",
"NETWORK_DEVICE_TYPES_description": "Which device types are allowed to be used as network devices in the Network view. The device type has to match exactly the <code>Type</code> setting on a specific device in Device details. Add it on teh Device via the <code>+</code> button. Do not remove existing types, only add new ones.", "NETWORK_DEVICE_TYPES_description": "Which device types are allowed to be used as network devices in the Network view. The device type has to match exactly the <code>Type</code> setting on a specific device in Device details. Add it on the Device via the <code>+</code> button. Do not remove existing types, only add new ones.",
"NETWORK_DEVICE_TYPES_name": "Network device types", "NETWORK_DEVICE_TYPES_name": "Network device types",
"Navigation_About": "About", "Navigation_About": "About",
"Navigation_Devices": "Devices", "Navigation_Devices": "Devices",
@@ -710,6 +718,7 @@
"general_event_title": "Executing an ad-hoc event", "general_event_title": "Executing an ad-hoc event",
"go_to_node_event_icon": "fa-square-up-right", "go_to_node_event_icon": "fa-square-up-right",
"go_to_node_event_tooltip": "Navigate to the Network page of the given node", "go_to_node_event_tooltip": "Navigate to the Network page of the given node",
"new_version_available": "A new version is available.",
"report_guid": "Notification guid:", "report_guid": "Notification guid:",
"report_guid_missing": "Linked notification not found. There is a small delay between recently sent notifications and them being available. Referesh your page and cache after a few seconds. It's also possible the selected notification have been deleted during maintenance as specified in the <code>DBCLNP_NOTIFI_HIST</code> setting. <br/> <br/>The latest notification is displayed instead. The missing notification has the following GUID:", "report_guid_missing": "Linked notification not found. There is a small delay between recently sent notifications and them being available. Referesh your page and cache after a few seconds. It's also possible the selected notification have been deleted during maintenance as specified in the <code>DBCLNP_NOTIFI_HIST</code> setting. <br/> <br/>The latest notification is displayed instead. The missing notification has the following GUID:",
"report_select_format": "Select Format:", "report_select_format": "Select Format:",

View File

@@ -148,8 +148,8 @@
"DevDetail_Shortcut_DownAlerts": "Alerta(s) de caída(s)", "DevDetail_Shortcut_DownAlerts": "Alerta(s) de caída(s)",
"DevDetail_Shortcut_Presence": "Historial", "DevDetail_Shortcut_Presence": "Historial",
"DevDetail_Shortcut_Sessions": "Sesiones", "DevDetail_Shortcut_Sessions": "Sesiones",
"DevDetail_Tab_Details": "<i class=\"fa fa-info-circle\"></i> Detalles", "DevDetail_Tab_Details": "Detalles",
"DevDetail_Tab_Events": "<i class=\"fa fa-bolt\"></i> Eventos", "DevDetail_Tab_Events": "Eventos",
"DevDetail_Tab_EventsTableDate": "Fecha", "DevDetail_Tab_EventsTableDate": "Fecha",
"DevDetail_Tab_EventsTableEvent": "Tipo de evento", "DevDetail_Tab_EventsTableEvent": "Tipo de evento",
"DevDetail_Tab_EventsTableIP": "IP", "DevDetail_Tab_EventsTableIP": "IP",
@@ -164,10 +164,10 @@
"DevDetail_Tab_NmapTableState": "Estado", "DevDetail_Tab_NmapTableState": "Estado",
"DevDetail_Tab_NmapTableText": "Establece la programación en los <a href=\"/settings.php#NMAP_ACTIVE\">Ajustes</a>", "DevDetail_Tab_NmapTableText": "Establece la programación en los <a href=\"/settings.php#NMAP_ACTIVE\">Ajustes</a>",
"DevDetail_Tab_NmapTableTime": "Tiempo", "DevDetail_Tab_NmapTableTime": "Tiempo",
"DevDetail_Tab_Plugins": "<i class=\"fa fa-plug\"></i> Plugins", "DevDetail_Tab_Plugins": "Plugins",
"DevDetail_Tab_Presence": "<i class=\"fa fa-calendar\"></i> Historial", "DevDetail_Tab_Presence": "Historial",
"DevDetail_Tab_Sessions": "<i class=\"fa fa-list-ol\"></i> Sesiones", "DevDetail_Tab_Sessions": "Sesiones",
"DevDetail_Tab_Tools": "<i class=\"fa fa-screwdriver-wrench\"></i> Herramientas", "DevDetail_Tab_Tools": "Herramientas",
"DevDetail_Tab_Tools_Internet_Info_Description": "La herramienta de información de internet muestra información sobre la conexión a Internet, como dirección IP, ciudad, país, código de área y zona horaria.", "DevDetail_Tab_Tools_Internet_Info_Description": "La herramienta de información de internet muestra información sobre la conexión a Internet, como dirección IP, ciudad, país, código de área y zona horaria.",
"DevDetail_Tab_Tools_Internet_Info_Error": "Se ha producido un error", "DevDetail_Tab_Tools_Internet_Info_Error": "Se ha producido un error",
"DevDetail_Tab_Tools_Internet_Info_Start": "Iniciar información de Internet", "DevDetail_Tab_Tools_Internet_Info_Start": "Iniciar información de Internet",
@@ -252,11 +252,12 @@
"Device_Tablelenght": "Mostrar _MENU_ entradas", "Device_Tablelenght": "Mostrar _MENU_ entradas",
"Device_Tablelenght_all": "Todos", "Device_Tablelenght_all": "Todos",
"Device_Title": "Dispositivos", "Device_Title": "Dispositivos",
"Devices_Filters": "",
"Donations_Others": "Otros", "Donations_Others": "Otros",
"Donations_Platforms": "Plataforma de patrocinadores", "Donations_Platforms": "Plataforma de patrocinadores",
"Donations_Text": "¡Hola! 👋 </br> Gracias por hacer clic en este elemento 😅 del menú </br> </br>, estoy tratando de recolectar algunas donaciones para mejorar el software. Además, me ayudaría a no quemarse, por lo que puedo apoyar esta aplicación por más tiempo. Cualquier pequeño patrocinio (recurrente o no) me hace querer esforzarme más en esta aplicación. </br> Me encantaría acortar mi semana de trabajo y en el tiempo que me queda centrarme por completo en NetAlertX. Obtendrías más funcionalidad, una aplicación más pulida y menos errores. </br> </br> Gracias por leer, agradezco cualquier apoyo ❤🙏 </br> </br> TL; DR: Al apoyarme, obtienes: </br> </br> <ul><li>Actualizaciones periódicas para mantener tus datos y tu familia seguros 🔄</li><li>Menos errores 🐛🔫</li><li>Mejor y más funcionalidad</li><li>No me quemo 🔥🤯</li><li>Lanzamientos 💨menos apresurados</li> <li>Mejores documentos📚</li><li>Soporte más rápido y mejor con problemas 🆘</li></ul> </br> 📧Envíame un correo electrónico a <a href='mailto:jokob@duck.com?subject=NetAlertX'>jokob@duck.com</a> si quieres ponerte en contacto o si debo añadir otras plataformas de patrocinio. </br>", "Donations_Text": "¡Hola! 👋 </br> Gracias por hacer clic en este elemento 😅 del menú </br> </br>, estoy tratando de recolectar algunas donaciones para mejorar el software. Además, me ayudaría a no quemarse, por lo que puedo apoyar esta aplicación por más tiempo. Cualquier pequeño patrocinio (recurrente o no) me hace querer esforzarme más en esta aplicación. </br> Me encantaría acortar mi semana de trabajo y en el tiempo que me queda centrarme por completo en NetAlertX. Obtendrías más funcionalidad, una aplicación más pulida y menos errores. </br> </br> Gracias por leer, agradezco cualquier apoyo ❤🙏 </br> </br> TL; DR: Al apoyarme, obtienes: </br> </br> <ul><li>Actualizaciones periódicas para mantener tus datos y tu familia seguros 🔄</li><li>Menos errores 🐛🔫</li><li>Mejor y más funcionalidad</li><li>No me quemo 🔥🤯</li><li>Lanzamientos 💨menos apresurados</li> <li>Mejores documentos📚</li><li>Soporte más rápido y mejor con problemas 🆘</li></ul> </br> 📧Envíame un correo electrónico a <a href='mailto:jokob@duck.com?subject=NetAlertX'>jokob@duck.com</a> si quieres ponerte en contacto o si debo añadir otras plataformas de patrocinio. </br>",
"Donations_Title": "Donaciones", "Donations_Title": "Donaciones",
"ENABLE_PLUGINS_description": "Habilita la funcionalidad de los <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins\">complementos</a>. Cargar los complementos requiere más recursos de hardware, así que quizás quieras desactivarlo en hardware poco potente.", "ENABLE_PLUGINS_description": "Habilita la funcionalidad de los <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">complementos</a>. Cargar los complementos requiere más recursos de hardware, así que quizás quieras desactivarlo en hardware poco potente.",
"ENABLE_PLUGINS_name": "Habilitar complementos", "ENABLE_PLUGINS_name": "Habilitar complementos",
"ENCRYPTION_KEY_description": "", "ENCRYPTION_KEY_description": "",
"ENCRYPTION_KEY_name": "", "ENCRYPTION_KEY_name": "",
@@ -337,10 +338,11 @@
"Gen_Upd_Fail": "Fallo al actualizar", "Gen_Upd_Fail": "Fallo al actualizar",
"Gen_Update": "Actualizar", "Gen_Update": "Actualizar",
"Gen_Update_Value": "Actualizar valor", "Gen_Update_Value": "Actualizar valor",
"Gen_ValidIcon": "",
"Gen_Warning": "Advertencia", "Gen_Warning": "Advertencia",
"Gen_Work_In_Progress": "Trabajo en curso, un buen momento para hacer comentarios en https://github.com/jokob-sk/NetAlertX/issues", "Gen_Work_In_Progress": "Trabajo en curso, un buen momento para hacer comentarios en https://github.com/jokob-sk/NetAlertX/issues",
"Gen_create_new_device": "Nuevo dispositivo", "Gen_create_new_device": "Nuevo dispositivo",
"Gen_create_new_device_info": "Los dispositivos se suelen descubrir utilizando <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins\">plugins</a>. Sin embargo, en algunos casos, es posible que necesite agregar dispositivos manualmente. Para explorar escenarios específicos, consulte la documentación <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/REMOTE_NETWORKS.md\">Redes remotas</a>.", "Gen_create_new_device_info": "Los dispositivos se suelen descubrir utilizando <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">plugins</a>. Sin embargo, en algunos casos, es posible que necesite agregar dispositivos manualmente. Para explorar escenarios específicos, consulte la documentación <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/REMOTE_NETWORKS.md\">Redes remotas</a>.",
"General_display_name": "General", "General_display_name": "General",
"General_icon": "<i class=\"fa fa-gears\"></i>", "General_icon": "<i class=\"fa fa-gears\"></i>",
"HRS_TO_KEEP_NEWDEV_description": "Se trata de una configuración de mantenimiento <b>BORRAR dispositivos</b>. Si está activado (<code>0</code> está desactivado), los dispositivos marcados como <b>Nuevo dispositivo</b> se eliminarán si su fecha de <b>primera sesión</b> es anterior a las horas especificadas en este ajuste. Use este ajuste si desea eliminar automáticamente <b>Nuevos dispositivos</b> después de <code>X</code> horas.", "HRS_TO_KEEP_NEWDEV_description": "Se trata de una configuración de mantenimiento <b>BORRAR dispositivos</b>. Si está activado (<code>0</code> está desactivado), los dispositivos marcados como <b>Nuevo dispositivo</b> se eliminarán si su fecha de <b>primera sesión</b> es anterior a las horas especificadas en este ajuste. Use este ajuste si desea eliminar automáticamente <b>Nuevos dispositivos</b> después de <code>X</code> horas.",
@@ -383,7 +385,7 @@
"HelpFAQ_Cat_Presence_401_head": "Un dispositivo se muestra como presente aunque esté \"Offline\".", "HelpFAQ_Cat_Presence_401_head": "Un dispositivo se muestra como presente aunque esté \"Offline\".",
"HelpFAQ_Cat_Presence_401_text": "Si esto ocurre, tiene la posibilidad de borrar los eventos del dispositivo en cuestión (vista de detalles). Otra posibilidad sería encender el dispositivo y esperar hasta que NetAlertX reconozca el dispositivo como \"en línea\" con el siguiente escaneo y, a continuación, simplemente apagar el dispositivo de nuevo. Ahora NetAlertX debería anotar correctamente el estado del dispositivo en la base de datos con el siguiente escaneo.", "HelpFAQ_Cat_Presence_401_text": "Si esto ocurre, tiene la posibilidad de borrar los eventos del dispositivo en cuestión (vista de detalles). Otra posibilidad sería encender el dispositivo y esperar hasta que NetAlertX reconozca el dispositivo como \"en línea\" con el siguiente escaneo y, a continuación, simplemente apagar el dispositivo de nuevo. Ahora NetAlertX debería anotar correctamente el estado del dispositivo en la base de datos con el siguiente escaneo.",
"HelpFAQ_Title": "Ayuda / FAQ", "HelpFAQ_Title": "Ayuda / FAQ",
"LOADED_PLUGINS_description": "¿Qué plugins cargar?. Agregar plugins puede ralentizar la aplicación. Obtén más información sobre los complementos que deben habilitarse, los tipos o las opciones de escaneo en los documentos de <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins#readme\">plugins</a>. Los plugins descargados perderán tu configuración. Solo se pueden descargar los complementos <code>deshabilitados</code>.", "LOADED_PLUGINS_description": "¿Qué plugins cargar?. Agregar plugins puede ralentizar la aplicación. Obtén más información sobre los complementos que deben habilitarse, los tipos o las opciones de escaneo en los documentos de <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">plugins</a>. Los plugins descargados perderán tu configuración. Solo se pueden descargar los complementos <code>deshabilitados</code>.",
"LOADED_PLUGINS_name": "Plugins cargados", "LOADED_PLUGINS_name": "Plugins cargados",
"LOG_LEVEL_description": "Esto hará que el registro tenga más información. Util para depurar que eventos se van guardando en la base de datos.", "LOG_LEVEL_description": "Esto hará que el registro tenga más información. Util para depurar que eventos se van guardando en la base de datos.",
"LOG_LEVEL_name": "Imprimir registros adicionales", "LOG_LEVEL_name": "Imprimir registros adicionales",
@@ -422,6 +424,8 @@
"Maintenance_Running_Version": "Versión instalada", "Maintenance_Running_Version": "Versión instalada",
"Maintenance_Status": "Situación", "Maintenance_Status": "Situación",
"Maintenance_Title": "Herramientas de mantenimiento", "Maintenance_Title": "Herramientas de mantenimiento",
"Maintenance_Tool_DownloadConfig": "",
"Maintenance_Tool_DownloadConfig_text": "",
"Maintenance_Tool_ExportCSV": "Exportación CSV", "Maintenance_Tool_ExportCSV": "Exportación CSV",
"Maintenance_Tool_ExportCSV_noti": "Exportación CSV", "Maintenance_Tool_ExportCSV_noti": "Exportación CSV",
"Maintenance_Tool_ExportCSV_noti_text": "¿Está seguro de que quiere generar un archivo CSV?", "Maintenance_Tool_ExportCSV_noti_text": "¿Está seguro de que quiere generar un archivo CSV?",
@@ -430,9 +434,13 @@
"Maintenance_Tool_ImportCSV_noti": "Importación CSV", "Maintenance_Tool_ImportCSV_noti": "Importación CSV",
"Maintenance_Tool_ImportCSV_noti_text": "¿Estás seguro de que quieres importar el archivo CSV? Esto <b>sobrescribirá</b> completamente los dispositivos en su base de datos.", "Maintenance_Tool_ImportCSV_noti_text": "¿Estás seguro de que quieres importar el archivo CSV? Esto <b>sobrescribirá</b> completamente los dispositivos en su base de datos.",
"Maintenance_Tool_ImportCSV_text": "Antes de usar esta función, haga una copia de seguridad. Importe un archivo CSV (valor separado por comas) que contiene la lista de dispositivos, incluidas las relaciones de red entre nodos de red y dispositivos conectados. Para hacer eso, coloque el archivo CSV llamado <b> devices.csv </b> en su carpeta <b>/config </b>.", "Maintenance_Tool_ImportCSV_text": "Antes de usar esta función, haga una copia de seguridad. Importe un archivo CSV (valor separado por comas) que contiene la lista de dispositivos, incluidas las relaciones de red entre nodos de red y dispositivos conectados. Para hacer eso, coloque el archivo CSV llamado <b> devices.csv </b> en su carpeta <b>/config </b>.",
"Maintenance_Tool_ImportConfig_noti": "",
"Maintenance_Tool_ImportPastedCSV": "Importar CSV (Pegar)", "Maintenance_Tool_ImportPastedCSV": "Importar CSV (Pegar)",
"Maintenance_Tool_ImportPastedCSV_noti_text": "¿Seguro que desea importar el CSV pegado? Esto <b>sobrescribirá</b> completamente los dispositivos en su base de datos.", "Maintenance_Tool_ImportPastedCSV_noti_text": "¿Seguro que desea importar el CSV pegado? Esto <b>sobrescribirá</b> completamente los dispositivos en su base de datos.",
"Maintenance_Tool_ImportPastedCSV_text": "Antes de usar esta función, por favor haga una copia de seguridad. Importar un archivo CSV (valor separado por comas) que contiene la lista de Dispositivos incluyendo las relaciones de red entre los Nodos de red y los dispositivos conectados.", "Maintenance_Tool_ImportPastedCSV_text": "Antes de usar esta función, por favor haga una copia de seguridad. Importar un archivo CSV (valor separado por comas) que contiene la lista de Dispositivos incluyendo las relaciones de red entre los Nodos de red y los dispositivos conectados.",
"Maintenance_Tool_ImportPastedConfig": "",
"Maintenance_Tool_ImportPastedConfig_noti_text": "",
"Maintenance_Tool_ImportPastedConfig_text": "",
"Maintenance_Tool_arpscansw": "Activar arp-scan (on/off)", "Maintenance_Tool_arpscansw": "Activar arp-scan (on/off)",
"Maintenance_Tool_arpscansw_noti": "Activar arp-scan on or off", "Maintenance_Tool_arpscansw_noti": "Activar arp-scan on or off",
"Maintenance_Tool_arpscansw_noti_text": "Cuando el escaneo se ha apagado, permanece apagado hasta que se active nuevamente.", "Maintenance_Tool_arpscansw_noti_text": "Cuando el escaneo se ha apagado, permanece apagado hasta que se active nuevamente.",
@@ -507,7 +515,7 @@
"Maintenance_lang_selector_empty": "Elija un idioma", "Maintenance_lang_selector_empty": "Elija un idioma",
"Maintenance_lang_selector_lable": "Seleccione su idioma", "Maintenance_lang_selector_lable": "Seleccione su idioma",
"Maintenance_lang_selector_text": "El cambio se produce en el lado del cliente, por lo que sólo afecta al navegador actual.", "Maintenance_lang_selector_text": "El cambio se produce en el lado del cliente, por lo que sólo afecta al navegador actual.",
"Maintenance_new_version": "🆕 Una nueva versión está disponible. Comprueba las <a href=\"https://github.com/jokob-sk/NetAlertX/releases\" target=\"_blank\">notas de lanzamiento</a>.", "Maintenance_new_version": "Una nueva versión está disponible. Comprueba las <a href=\"https://github.com/jokob-sk/NetAlertX/releases\" target=\"_blank\">notas de lanzamiento</a>.",
"Maintenance_themeselector_apply": "Aplicar", "Maintenance_themeselector_apply": "Aplicar",
"Maintenance_themeselector_empty": "Elige un tema", "Maintenance_themeselector_empty": "Elige un tema",
"Maintenance_themeselector_lable": "Seleccionar tema", "Maintenance_themeselector_lable": "Seleccionar tema",
@@ -789,6 +797,7 @@
"general_event_title": "Ejecutar un evento ad-hoc", "general_event_title": "Ejecutar un evento ad-hoc",
"go_to_node_event_icon": "fa-square-up-right", "go_to_node_event_icon": "fa-square-up-right",
"go_to_node_event_tooltip": "Vaya a la página de Red del nodo indicado", "go_to_node_event_tooltip": "Vaya a la página de Red del nodo indicado",
"new_version_available": "",
"report_guid": "Guía de las notificaciones:", "report_guid": "Guía de las notificaciones:",
"report_guid_missing": "No se ha encontrado la notificación vinculada. Hay un pequeño retraso entre las notificaciones enviadas recientemente y su disponibilidad. Actualiza tu página y la caché después de unos segundos. También es posible que la notificación seleccionada se haya eliminado durante el mantenimiento, tal y como se especifica en la configuración <code>de DBCLNP_NOTIFI_HIST</code>. <br/> <br/>En su lugar, se muestra la notificación más reciente. La notificación que falta tiene el siguiente GUID:", "report_guid_missing": "No se ha encontrado la notificación vinculada. Hay un pequeño retraso entre las notificaciones enviadas recientemente y su disponibilidad. Actualiza tu página y la caché después de unos segundos. También es posible que la notificación seleccionada se haya eliminado durante el mantenimiento, tal y como se especifica en la configuración <code>de DBCLNP_NOTIFI_HIST</code>. <br/> <br/>En su lugar, se muestra la notificación más reciente. La notificación que falta tiene el siguiente GUID:",
"report_select_format": "Selecciona el formato:", "report_select_format": "Selecciona el formato:",

View File

@@ -1,7 +1,7 @@
{ {
"API_CUSTOM_SQL_description": "Vous pouvez spécifier votre propre requête SQL qui retournera un fichier JSON et l'exposer via <a href=\"/api/table_custom_endpoint.json\" target=\"_blank\"><code>table_custom_endpoint.json</code> le point de terminaison de fichier</a>.", "API_CUSTOM_SQL_description": "Vous pouvez spécifier votre propre requête SQL qui retournera un fichier JSON et l'exposer via <a href=\"/api/table_custom_endpoint.json\" target=\"_blank\"><code>table_custom_endpoint.json</code> le point de terminaison de fichier</a>.",
"API_CUSTOM_SQL_name": "Point de terminaison personnalisé", "API_CUSTOM_SQL_name": "Point de terminaison personnalisé",
"API_TOKEN_description": "Vous pouvez renseigner ou générer un jeton API pour sécuriser les échanges. Il est transmis dans le header de la requête. C'est utilisé dans le plugin <code>SYNC</code> du serveur GraphQL.", "API_TOKEN_description": "Vous pouvez renseigner ou générer un jeton API pour sécuriser les échanges. Il est transmis dans le header de la requête, et utilisé dans le plugin <code>SYNC</code>, le serveur GraphQL et d'autres usages API. Vous pouvez utiliser les points de terminaison API pour créer des intégrations spécifiques, comme décrit dans la <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/API.md\" target=\"_blank\">documentation de l'API</a>.",
"API_TOKEN_name": "Jeton d'API", "API_TOKEN_name": "Jeton d'API",
"API_display_name": "API", "API_display_name": "API",
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>", "API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
@@ -48,7 +48,7 @@
"BackDevices_DBTools_ImportCSVError": "Le fichier CSV n'a pas pu être importé. Assurez-vous que le format est correct.", "BackDevices_DBTools_ImportCSVError": "Le fichier CSV n'a pas pu être importé. Assurez-vous que le format est correct.",
"BackDevices_DBTools_ImportCSVMissing": "Le fichier CSV est introuvable sous <b>/config/devices.csv.</b>", "BackDevices_DBTools_ImportCSVMissing": "Le fichier CSV est introuvable sous <b>/config/devices.csv.</b>",
"BackDevices_DBTools_Purge": "Les sauvegardes les plus anciennes ont été supprimées", "BackDevices_DBTools_Purge": "Les sauvegardes les plus anciennes ont été supprimées",
"BackDevices_DBTools_UpdDev": "Appareil mis à jour avec succès", "BackDevices_DBTools_UpdDev": "Appareil mis à jour avec succès. La liste principale des appareils peut prendre un peu de temps à se mettre à jour si un scan est en cours.",
"BackDevices_DBTools_UpdDevError": "Erreur lors de la mise à jour de l'appareil", "BackDevices_DBTools_UpdDevError": "Erreur lors de la mise à jour de l'appareil",
"BackDevices_DBTools_Upgrade": "Base de données mise à niveau avec succès", "BackDevices_DBTools_Upgrade": "Base de données mise à niveau avec succès",
"BackDevices_DBTools_UpgradeError": "La mise à niveau de la base de données a échoué", "BackDevices_DBTools_UpgradeError": "La mise à niveau de la base de données a échoué",
@@ -138,8 +138,8 @@
"DevDetail_Shortcut_DownAlerts": "Alertes de panne", "DevDetail_Shortcut_DownAlerts": "Alertes de panne",
"DevDetail_Shortcut_Presence": "Présence", "DevDetail_Shortcut_Presence": "Présence",
"DevDetail_Shortcut_Sessions": "Sessions", "DevDetail_Shortcut_Sessions": "Sessions",
"DevDetail_Tab_Details": "<i class=\"fa fa-info-circle\"></i> Détails", "DevDetail_Tab_Details": "Détails",
"DevDetail_Tab_Events": "<i class=\"fa fa-bolt\"></i> Événements", "DevDetail_Tab_Events": "Événements",
"DevDetail_Tab_EventsTableDate": "Date", "DevDetail_Tab_EventsTableDate": "Date",
"DevDetail_Tab_EventsTableEvent": "Type d'événement", "DevDetail_Tab_EventsTableEvent": "Type d'événement",
"DevDetail_Tab_EventsTableIP": "IP", "DevDetail_Tab_EventsTableIP": "IP",
@@ -154,10 +154,10 @@
"DevDetail_Tab_NmapTableState": "État", "DevDetail_Tab_NmapTableState": "État",
"DevDetail_Tab_NmapTableText": "Configurer une programmation dans les <a href=\"/settings.php#NMAP_ACTIVE\">Paramètres</a>", "DevDetail_Tab_NmapTableText": "Configurer une programmation dans les <a href=\"/settings.php#NMAP_ACTIVE\">Paramètres</a>",
"DevDetail_Tab_NmapTableTime": "Heure", "DevDetail_Tab_NmapTableTime": "Heure",
"DevDetail_Tab_Plugins": "<i class=\"fa fa-plug\"></i> Plugins", "DevDetail_Tab_Plugins": "Plugins",
"DevDetail_Tab_Presence": "<i class=\"fa fa-calendar\"></i> Présence", "DevDetail_Tab_Presence": "Présence",
"DevDetail_Tab_Sessions": "<i class=\"fa fa-list-ol\"></i> Sessions", "DevDetail_Tab_Sessions": "Sessions",
"DevDetail_Tab_Tools": "<i class=\"fa fa-screwdriver-wrench\"></i> Outils", "DevDetail_Tab_Tools": "Outils",
"DevDetail_Tab_Tools_Internet_Info_Description": "L'outil Infos Internet affiche les informations sur la connexion Internet, comme l'adresse IP, la ville, la région, le code région et le fuseau horaire.", "DevDetail_Tab_Tools_Internet_Info_Description": "L'outil Infos Internet affiche les informations sur la connexion Internet, comme l'adresse IP, la ville, la région, le code région et le fuseau horaire.",
"DevDetail_Tab_Tools_Internet_Info_Error": "Une erreur est survenue", "DevDetail_Tab_Tools_Internet_Info_Error": "Une erreur est survenue",
"DevDetail_Tab_Tools_Internet_Info_Start": "Lancer les informations Internet", "DevDetail_Tab_Tools_Internet_Info_Start": "Lancer les informations Internet",
@@ -242,14 +242,15 @@
"Device_Tablelenght": "Afficher les entrées _MENU_", "Device_Tablelenght": "Afficher les entrées _MENU_",
"Device_Tablelenght_all": "Tous", "Device_Tablelenght_all": "Tous",
"Device_Title": "Appareils", "Device_Title": "Appareils",
"Devices_Filters": "Filtres",
"Donations_Others": "Autres", "Donations_Others": "Autres",
"Donations_Platforms": "Plateformes de sponsoring", "Donations_Platforms": "Plateformes de sponsoring",
"Donations_Text": "Coucou 👋 ! </br> Merci d'avoir cliqué ici 😅 </br> </br> J'essaie de récolter des donations pour vous faire un meilleur produit. En plus, ça m'aide à éviter le burn-out pour développer cette application plus longtemps. Toute subvention (régulière ou non) me donne envie de poursuivre le développement de cette application.</br> J'aimerais réduire mon activité principale pour me concentrer plus longuement à NetAlertX. Vous auriez plus de fonctionnalités, une application mieux finie et avec moins de bugs.</br> </br> Merci de votre lecture - je vous suis reconnaissant pour votre soutien ❤🙏 </br> </br> Version courte : en me soutenant, vous aurez : </br> </br> <ul><li>Des mises à jour régulières pour protéger vos données personnelles et familiales 🔄</li><li>Moins de bugs 🐛🔫</li><li>Des fonctionnalités plus riches et plus nombreuses </li><li>Je ne me retrouve pas en burn-out 🔥🤯</li><li>Des versions moins à la va-vite 💨</li><li>une meilleure documentation <20></li><li>Un support meilleur et plus réactif en cas de problème 🆘</li></ul> </br> 📧Envoyez-moi un courriel à <a href='mailto :jokob@duck.com?subject=NetAlertX'>jokob@duck.com</a> si vous voulez me contacter ou du je peux ajouter une autre plateforme de soutien. </br>", "Donations_Text": "Coucou 👋 ! </br> Merci d'avoir cliqué ici 😅 </br> </br> J'essaie de récolter des donations pour vous faire un meilleur produit. En plus, ça m'aide à éviter le burn-out pour développer cette application plus longtemps. Toute subvention (régulière ou non) me donne envie de poursuivre le développement de cette application.</br> J'aimerais réduire mon activité principale pour me concentrer plus longuement à NetAlertX. Vous auriez plus de fonctionnalités, une application mieux finie et avec moins de bugs.</br> </br> Merci de votre lecture - je vous suis reconnaissant pour votre soutien ❤🙏 </br> </br> Version courte : en me soutenant, vous aurez : </br> </br> <ul><li>Des mises à jour régulières pour protéger vos données personnelles et familiales 🔄</li><li>Moins de bugs 🐛🔫</li><li>Des fonctionnalités plus riches et plus nombreuses </li><li>Je ne me retrouve pas en burn-out 🔥🤯</li><li>Des versions moins à la va-vite 💨</li><li>une meilleure documentation <20></li><li>Un support meilleur et plus réactif en cas de problème 🆘</li></ul> </br> 📧Envoyez-moi un courriel à <a href='mailto :jokob@duck.com?subject=NetAlertX'>jokob@duck.com</a> si vous voulez me contacter ou du je peux ajouter une autre plateforme de soutien. </br>",
"Donations_Title": "Dons", "Donations_Title": "Dons",
"ENABLE_PLUGINS_description": "Active les fonctionnalités des <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins\">Plugins</a>. Charger des plugins nécessite plus de ressources, il est recommandé de les désactiver sur des systèmes de faible puissance.", "ENABLE_PLUGINS_description": "Active les fonctionnalités des <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">Plugins</a>. Charger des plugins nécessite plus de ressources, il est recommandé de les désactiver sur des systèmes de faible puissance.",
"ENABLE_PLUGINS_name": "Activer les Plugins", "ENABLE_PLUGINS_name": "Activer les Plugins",
"ENCRYPTION_KEY_description": "", "ENCRYPTION_KEY_description": "Clé de chiffrement des données.",
"ENCRYPTION_KEY_name": "", "ENCRYPTION_KEY_name": "Clé de chiffrement",
"Email_display_name": "Messagerie", "Email_display_name": "Messagerie",
"Email_icon": "<i class=\"fa fa-at\"></i>", "Email_icon": "<i class=\"fa fa-at\"></i>",
"Events_Loading": "Chargement …", "Events_Loading": "Chargement …",
@@ -285,7 +286,7 @@
"Events_Tablelenght": "Afficher _MENU_ entrées", "Events_Tablelenght": "Afficher _MENU_ entrées",
"Events_Tablelenght_all": "Tous", "Events_Tablelenght_all": "Tous",
"Events_Title": "Évènements", "Events_Title": "Évènements",
"GRAPHQL_PORT_description": "Le numéro de port du serveur GraphQL.", "GRAPHQL_PORT_description": "Le numéro de port du serveur GraphQL. Assurez vous sue le port est unique a l'échelle de toutes les applications sur cet hôte et vos instances NetAlertX.",
"GRAPHQL_PORT_name": "Port GraphQL", "GRAPHQL_PORT_name": "Port GraphQL",
"Gen_Action": "Action", "Gen_Action": "Action",
"Gen_Add": "Ajouter", "Gen_Add": "Ajouter",
@@ -327,10 +328,11 @@
"Gen_Upd_Fail": "Échec de la mise à jour", "Gen_Upd_Fail": "Échec de la mise à jour",
"Gen_Update": "Mise à jour", "Gen_Update": "Mise à jour",
"Gen_Update_Value": "Valeur à mettre à jour", "Gen_Update_Value": "Valeur à mettre à jour",
"Gen_ValidIcon": "<i class=\"fa-solid fa-chevron-right \"></i>",
"Gen_Warning": "Avertissement", "Gen_Warning": "Avertissement",
"Gen_Work_In_Progress": "Travaux en cours, c'est le bon moment pour faire un retour via la liste d'anomalies sur Github https://github.com/jokob-sk/NetAlertX/issues", "Gen_Work_In_Progress": "Travaux en cours, c'est le bon moment pour faire un retour via la liste d'anomalies sur Github https://github.com/jokob-sk/NetAlertX/issues",
"Gen_create_new_device": "Nouvel appareil", "Gen_create_new_device": "Nouvel appareil",
"Gen_create_new_device_info": "Les appareils sont souvent découverts à l'aide d'un <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins\">plugin</a>. Cependant, dans certains cas, vous pouvez ajouter manuellement les appareils. Pour explorer des scénarios spécifiques, consulter la <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/REMOTE_NETWORKS.md\">documentation des réseaux distants</a>.", "Gen_create_new_device_info": "Les appareils sont souvent découverts à l'aide d'un <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">plugin</a>. Cependant, dans certains cas, vous pouvez ajouter manuellement les appareils. Pour explorer des scénarios spécifiques, consulter la <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/REMOTE_NETWORKS.md\">documentation des réseaux distants</a>.",
"General_display_name": "Général", "General_display_name": "Général",
"General_icon": "<i class=\"fa fa-gears\"></i>", "General_icon": "<i class=\"fa fa-gears\"></i>",
"HRS_TO_KEEP_NEWDEV_description": "Paramètre de maintenance. S'il est activé (<code>0</code> s'il est désactivé), les appareils marqués comme <b>Nouvel appareil</b> seront supprimés si leur durée depuis la <b>première session</b> est plus ancienne que le nombre d'heures paramétré. Utilisez ce paramétrage si vous voulez supprimer automatiquement les <b>Nouveaux appareils</b> après <code>X</code> heures.", "HRS_TO_KEEP_NEWDEV_description": "Paramètre de maintenance. S'il est activé (<code>0</code> s'il est désactivé), les appareils marqués comme <b>Nouvel appareil</b> seront supprimés si leur durée depuis la <b>première session</b> est plus ancienne que le nombre d'heures paramétré. Utilisez ce paramétrage si vous voulez supprimer automatiquement les <b>Nouveaux appareils</b> après <code>X</code> heures.",
@@ -373,7 +375,7 @@
"HelpFAQ_Cat_Presence_401_head": "Un appareil est affiché comme présent bien qu'il soit \"Hors ligne\".", "HelpFAQ_Cat_Presence_401_head": "Un appareil est affiché comme présent bien qu'il soit \"Hors ligne\".",
"HelpFAQ_Cat_Presence_401_text": "Si cela arrive, vous avez la possibilité de supprimer les événements pour les appareils concernés (vue détaillée). Vous pouvez aussi allumer l'appareil, attendre que NetAlertX le détecte comme en ligne, puis simplement éteindre l'appareil à nouveau. NetAlertX devait maintenant correctement détecter l'état de l'appareil lors du prochain scan.", "HelpFAQ_Cat_Presence_401_text": "Si cela arrive, vous avez la possibilité de supprimer les événements pour les appareils concernés (vue détaillée). Vous pouvez aussi allumer l'appareil, attendre que NetAlertX le détecte comme en ligne, puis simplement éteindre l'appareil à nouveau. NetAlertX devait maintenant correctement détecter l'état de l'appareil lors du prochain scan.",
"HelpFAQ_Title": "Aide / FAQ", "HelpFAQ_Title": "Aide / FAQ",
"LOADED_PLUGINS_description": "Affiche les plugins chargés. Ajouter des plugins peut ralentir l'application. Obtenez plus d'informations dur quels plugins dont à activer, ou les options de scan dans la <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins#readme\">documentation des plugins</a>. Décharger des plugins leur fait perdre leurs paramètres. Seuls les plugins <code>désactivés</code> peuvent être déchargés.", "LOADED_PLUGINS_description": "Affiche les plugins chargés. Ajouter des plugins peut ralentir l'application. Obtenez plus d'informations dur quels plugins dont à activer, ou les options de scan dans la <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">documentation des plugins</a>. Décharger des plugins leur fait perdre leurs paramètres. Seuls les plugins <code>désactivés</code> peuvent être déchargés.",
"LOADED_PLUGINS_name": "Plugins chargés", "LOADED_PLUGINS_name": "Plugins chargés",
"LOG_LEVEL_description": "Ce paramètre active une journalisation dans les logs plus verbeuse. Cela est utile pour identifier les événements écrivant dans la base de données.", "LOG_LEVEL_description": "Ce paramètre active une journalisation dans les logs plus verbeuse. Cela est utile pour identifier les événements écrivant dans la base de données.",
"LOG_LEVEL_name": "Afficher des journaux de log additionnels", "LOG_LEVEL_name": "Afficher des journaux de log additionnels",
@@ -398,17 +400,23 @@
"Maintenance_Running_Version": "Version installée", "Maintenance_Running_Version": "Version installée",
"Maintenance_Status": "État", "Maintenance_Status": "État",
"Maintenance_Title": "Outils de maintenance", "Maintenance_Title": "Outils de maintenance",
"Maintenance_Tool_ExportCSV": "Export en CSV", "Maintenance_Tool_DownloadConfig": "Export des paramètres",
"Maintenance_Tool_ExportCSV_noti": "Export en CSV", "Maintenance_Tool_DownloadConfig_text": "Télécharger une sauvegarde complète de vos paramètres stockés dans le fichier <code>app.conf</code>.",
"Maintenance_Tool_ExportCSV": "Export des appareils (csv)",
"Maintenance_Tool_ExportCSV_noti": "Export des appareils (csv)",
"Maintenance_Tool_ExportCSV_noti_text": "Êtes-vous sûr de vouloir générer un fichier CSV?", "Maintenance_Tool_ExportCSV_noti_text": "Êtes-vous sûr de vouloir générer un fichier CSV?",
"Maintenance_Tool_ExportCSV_text": "Génère un fichier CSV (valeurs séparées par des virgules), contenant la liste des appareils, dont les liens entre nœuds Réseaux et les appareils connectés. Vous pouvez aussi lancer cet export depuis l'URL <code>votre URL de NetAlertX/php/server/devices.php?action=ExportCSV</code> ou en activant le plugin <a href=\"settings.php#CSVBCKP_header\">CSV Backup</a>.", "Maintenance_Tool_ExportCSV_text": "Génère un fichier CSV (valeurs séparées par des virgules), contenant la liste des appareils, dont les liens entre nœuds Réseaux et les appareils connectés. Vous pouvez aussi lancer cet export depuis l'URL <code>votre_URL_de_NetAlertX/php/server/devices.php?action=ExportCSV</code> ou en activant le plugin <a href=\"settings.php#CSVBCKP_header\">CSV Backup</a>.",
"Maintenance_Tool_ImportCSV": "Import CSV", "Maintenance_Tool_ImportCSV": "Import des appareils (csv)",
"Maintenance_Tool_ImportCSV_noti": "Import CSV", "Maintenance_Tool_ImportCSV_noti": "Import des appareils (csv)",
"Maintenance_Tool_ImportCSV_noti_text": "Êtes-vous sûr de vouloir importer le fichier CSV? Cela <b>écrasera</b> complètement les appareils de votre base de données.", "Maintenance_Tool_ImportCSV_noti_text": "Êtes-vous sûr de vouloir importer le fichier CSV? Cela <b>écrasera</b> complètement les appareils de votre base de données.",
"Maintenance_Tool_ImportCSV_text": "Avant d'utiliser cette fonctionnalité, il est recommandé de faire une sauvegarde. La fonctionnalité importe un fichier CSV (valeurs séparées par des virgules) contenant la liste des appareils, dont les liens réseau entre les nœuds du réseau et ces appareils. Pour cela, placer un fichier CSV nommé <b>devices.csv</b> dans votre répertoire <b>/config</b>.", "Maintenance_Tool_ImportCSV_text": "Avant d'utiliser cette fonctionnalité, il est recommandé de faire une sauvegarde. La fonctionnalité importe un fichier CSV (valeurs séparées par des virgules) contenant la liste des appareils, dont les liens réseau entre les nœuds du réseau et ces appareils. Pour cela, placer un fichier CSV nommé <b>devices.csv</b> dans votre répertoire <b>/config</b>.",
"Maintenance_Tool_ImportPastedCSV": "Import CSV (coller)", "Maintenance_Tool_ImportConfig_noti": "Import des appareils (app.conf)",
"Maintenance_Tool_ImportPastedCSV": "Import des appareils (csv) (coller)",
"Maintenance_Tool_ImportPastedCSV_noti_text": "Êtes-vous sûr de vouloir importer les CSV copié? Cela va complètement <b>remplacer</b> les appareils de votre base de données.", "Maintenance_Tool_ImportPastedCSV_noti_text": "Êtes-vous sûr de vouloir importer les CSV copié? Cela va complètement <b>remplacer</b> les appareils de votre base de données.",
"Maintenance_Tool_ImportPastedCSV_text": "Avant d'utiliser cette fonctionnalité, il est recommandé de faire une sauvegarde. Importe un fichier CSV (valeurs séparées par des virgules) contenant la liste des appareils, dont les liens réseaux entre les nœuds du réseau et les appareils connectés.", "Maintenance_Tool_ImportPastedCSV_text": "Avant d'utiliser cette fonctionnalité, il est recommandé de faire une sauvegarde. Importe un fichier CSV (valeurs séparées par des virgules) contenant la liste des appareils, dont les liens réseaux entre les nœuds du réseau et les appareils connectés.",
"Maintenance_Tool_ImportPastedConfig": "Import des paramètres (coller)",
"Maintenance_Tool_ImportPastedConfig_noti_text": "Êtes-vous sûr de vouloir importer les paramètres de configuration copiés? Cela va complètement <b>remplacer</b> le fichier <code>app.conf</code>.",
"Maintenance_Tool_ImportPastedConfig_text": "Importe le fichier <code>app.conf</code>, qui contient tous les paramètres de l'application. Vous devriez commencer par télécharger le fichier actuel<code>app.conf</code> avec la fonctionnalité <b>Export des paramètres</b>.",
"Maintenance_Tool_arpscansw": "Basculer l'arp-Scan (activé/désactivé)", "Maintenance_Tool_arpscansw": "Basculer l'arp-Scan (activé/désactivé)",
"Maintenance_Tool_arpscansw_noti": "Activer ou désactiver l'arp-Scan", "Maintenance_Tool_arpscansw_noti": "Activer ou désactiver l'arp-Scan",
"Maintenance_Tool_arpscansw_noti_text": "Une fois le scan désactivé, il reste désactivé jusqu'à ce qu'il soit réactivé.", "Maintenance_Tool_arpscansw_noti_text": "Une fois le scan désactivé, il reste désactivé jusqu'à ce qu'il soit réactivé.",
@@ -483,13 +491,13 @@
"Maintenance_lang_selector_empty": "Choix de la langue", "Maintenance_lang_selector_empty": "Choix de la langue",
"Maintenance_lang_selector_lable": "Sélectionner une langue", "Maintenance_lang_selector_lable": "Sélectionner une langue",
"Maintenance_lang_selector_text": "Le changement est effectué côté client, cela ne concerne donc que le navigateur actuel.", "Maintenance_lang_selector_text": "Le changement est effectué côté client, cela ne concerne donc que le navigateur actuel.",
"Maintenance_new_version": "🆕 Une nouvelle version est disponible. Consulter les <a href=\"https://github.com/jokob-sk/NetAlertX/releases\" target=\"_blank\">notes de version</a>.", "Maintenance_new_version": "Une nouvelle version est disponible. Consulter les <a href=\"https://github.com/jokob-sk/NetAlertX/releases\" target=\"_blank\">notes de version</a>.",
"Maintenance_themeselector_apply": "Appliquer", "Maintenance_themeselector_apply": "Appliquer",
"Maintenance_themeselector_empty": "Choisir un thème", "Maintenance_themeselector_empty": "Choisir un thème",
"Maintenance_themeselector_lable": "Sélectionner un thème", "Maintenance_themeselector_lable": "Sélectionner un thème",
"Maintenance_themeselector_text": "Le changement s'effectue côté serveur, il s'applique donc à tous les appareils connectés à l'interface graphique.", "Maintenance_themeselector_text": "Le changement s'effectue côté serveur, il s'applique donc à tous les appareils connectés à l'interface graphique.",
"Maintenance_version": "Mises à jour de l'application", "Maintenance_version": "Mises à jour de l'application",
"NETWORK_DEVICE_TYPES_description": "Les types d'appareils autorisés à verre utilisés comme appareils réseau dans la vue Réseau. Le type d'appareils doit être identique au paramètre <code>Type</code> d'un appareil dans le détail des appareils. Ne pas supprimer de valeurs, seulement en ajouter de nouvelles.", "NETWORK_DEVICE_TYPES_description": "Les types d'appareils autorisés à être utilisés comme appareils réseau dans la vue Réseau. Le type d'appareils doit être identique au paramètre <code>Type</code> d'un appareil dans le détail des appareils. Ajouter le sur l'appareil grâce au bouton <code>+</code>. Ne pas supprimer de valeurs, seulement en ajouter de nouvelles.",
"NETWORK_DEVICE_TYPES_name": "Type d'appareil réseau", "NETWORK_DEVICE_TYPES_name": "Type d'appareil réseau",
"Navigation_About": "À propos", "Navigation_About": "À propos",
"Navigation_Devices": "Appareils", "Navigation_Devices": "Appareils",
@@ -710,6 +718,7 @@
"general_event_title": "Lancement d'un événement sur mesure", "general_event_title": "Lancement d'un événement sur mesure",
"go_to_node_event_icon": "fa-square-up-right", "go_to_node_event_icon": "fa-square-up-right",
"go_to_node_event_tooltip": "Aller vers la page Réseau du nœud concerné", "go_to_node_event_tooltip": "Aller vers la page Réseau du nœud concerné",
"new_version_available": "Une nouvelle version est disponible.",
"report_guid": "GUID de la notification:", "report_guid": "GUID de la notification:",
"report_guid_missing": "La notification associée n'a pas été trouvée. Un petit délai existe entre l'envoi d'une notification et sa disponibilité réelle pour affichage. Rafraichissez la page et votre cache après quelques secondes. Il est aussi possible que la notification sélectionnée ait été supprimée durant une opération de maintenance, comme renseigné dans le paramètre <code>DBCLNP_NOTIFI_HIST</code>. <br/> <br/> La dernière notification est affichée à sa place. La notification manquante dispose du GUID suivant:", "report_guid_missing": "La notification associée n'a pas été trouvée. Un petit délai existe entre l'envoi d'une notification et sa disponibilité réelle pour affichage. Rafraichissez la page et votre cache après quelques secondes. Il est aussi possible que la notification sélectionnée ait été supprimée durant une opération de maintenance, comme renseigné dans le paramètre <code>DBCLNP_NOTIFI_HIST</code>. <br/> <br/> La dernière notification est affichée à sa place. La notification manquante dispose du GUID suivant:",
"report_select_format": "Sélectionner un format:", "report_select_format": "Sélectionner un format:",

View File

@@ -1,7 +1,7 @@
{ {
"API_CUSTOM_SQL_description": "Puoi specificare una query SQL personalizzata che genererà un file JSON e quindi lo esporrà tramite l'<a href=\"/api/table_custom_endpoint.json\" target=\"_blank\"><code>table_custom_endpoint.json</code>endpoint del file</a>.", "API_CUSTOM_SQL_description": "Puoi specificare una query SQL personalizzata che genererà un file JSON e quindi lo esporrà tramite l'<a href=\"/api/table_custom_endpoint.json\" target=\"_blank\"><code>table_custom_endpoint.json</code>endpoint del file</a>.",
"API_CUSTOM_SQL_name": "Endpoint personalizzato", "API_CUSTOM_SQL_name": "Endpoint personalizzato",
"API_TOKEN_description": "Token API per proteggere la comunicazione, puoi generarne uno o inserire qualsiasi valore. Viene inviato nell'intestazione della richiesta. Usato nel plugin <code>SYNC</code>, server GraphQL.", "API_TOKEN_description": "Token API per comunicazioni sicure. Generane uno o inserisci un valore qualsiasi. Viene inviato nell'intestazione della richiesta e utilizzato nel plugin <code>SYNC</code>, nel server GraphQL e in altri endpoint API. Puoi utilizzare gli endpoint API per creare integrazioni personalizzate come descritto nella <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/API.md\" target=\"_blank\">documentazione API</a>.",
"API_TOKEN_name": "Token API", "API_TOKEN_name": "Token API",
"API_display_name": "API", "API_display_name": "API",
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>", "API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
@@ -48,7 +48,7 @@
"BackDevices_DBTools_ImportCSVError": "Impossibile importare il file CSV. Assicurati che il formato del file sia corretto.", "BackDevices_DBTools_ImportCSVError": "Impossibile importare il file CSV. Assicurati che il formato del file sia corretto.",
"BackDevices_DBTools_ImportCSVMissing": "Impossibile trovare il file CSV in <b>/config/devices.csv.</b>", "BackDevices_DBTools_ImportCSVMissing": "Impossibile trovare il file CSV in <b>/config/devices.csv.</b>",
"BackDevices_DBTools_Purge": "I backup più vecchi sono stati eliminati", "BackDevices_DBTools_Purge": "I backup più vecchi sono stati eliminati",
"BackDevices_DBTools_UpdDev": "Dispositivo aggiornato correttamente", "BackDevices_DBTools_UpdDev": "Dispositivo aggiornato correttamente. L'elenco dei dispositivi principali potrebbe richiedere del tempo per ricaricarsi se è in corso una scansione.",
"BackDevices_DBTools_UpdDevError": "Errore durante l'aggiornamento del dispositivo", "BackDevices_DBTools_UpdDevError": "Errore durante l'aggiornamento del dispositivo",
"BackDevices_DBTools_Upgrade": "Database aggiornato correttamente", "BackDevices_DBTools_Upgrade": "Database aggiornato correttamente",
"BackDevices_DBTools_UpgradeError": "Aggiornamento del database non riuscito", "BackDevices_DBTools_UpgradeError": "Aggiornamento del database non riuscito",
@@ -138,8 +138,8 @@
"DevDetail_Shortcut_DownAlerts": "Avvisi disconnessione", "DevDetail_Shortcut_DownAlerts": "Avvisi disconnessione",
"DevDetail_Shortcut_Presence": "Presenza", "DevDetail_Shortcut_Presence": "Presenza",
"DevDetail_Shortcut_Sessions": "Sessioni", "DevDetail_Shortcut_Sessions": "Sessioni",
"DevDetail_Tab_Details": "<i class=\"fa fa-info-circle\"></i> Dettagli", "DevDetail_Tab_Details": "Dettagli",
"DevDetail_Tab_Events": "<i class=\"fa fa-bolt\"></i> Eventi", "DevDetail_Tab_Events": "Eventi",
"DevDetail_Tab_EventsTableDate": "Data", "DevDetail_Tab_EventsTableDate": "Data",
"DevDetail_Tab_EventsTableEvent": "Tipo evento", "DevDetail_Tab_EventsTableEvent": "Tipo evento",
"DevDetail_Tab_EventsTableIP": "IP", "DevDetail_Tab_EventsTableIP": "IP",
@@ -154,10 +154,10 @@
"DevDetail_Tab_NmapTableState": "Stato", "DevDetail_Tab_NmapTableState": "Stato",
"DevDetail_Tab_NmapTableText": "Imposta una pianificazione nelle <a href=\"/settings.php#NMAP_ACTIVE\">Impostazioni</a>", "DevDetail_Tab_NmapTableText": "Imposta una pianificazione nelle <a href=\"/settings.php#NMAP_ACTIVE\">Impostazioni</a>",
"DevDetail_Tab_NmapTableTime": "Ora", "DevDetail_Tab_NmapTableTime": "Ora",
"DevDetail_Tab_Plugins": "<i class=\"fa fa-plug\"></i> Plugin", "DevDetail_Tab_Plugins": "Plugin",
"DevDetail_Tab_Presence": "<i class=\"fa fa-calendar\"></i> Presenza", "DevDetail_Tab_Presence": "Presenza",
"DevDetail_Tab_Sessions": "<i class=\"fa fa-list-ol\"></i> Sessioni", "DevDetail_Tab_Sessions": "Sessioni",
"DevDetail_Tab_Tools": "<i class=\"fa fa-screwdriver-wrench\"></i> Strumenti", "DevDetail_Tab_Tools": "Strumenti",
"DevDetail_Tab_Tools_Internet_Info_Description": "Lo strumento informazioni Internet visualizza informazioni sulla connessione Internet, come indirizzo IP, città, paese, prefisso e fuso orario.", "DevDetail_Tab_Tools_Internet_Info_Description": "Lo strumento informazioni Internet visualizza informazioni sulla connessione Internet, come indirizzo IP, città, paese, prefisso e fuso orario.",
"DevDetail_Tab_Tools_Internet_Info_Error": "Si è verificato un errore", "DevDetail_Tab_Tools_Internet_Info_Error": "Si è verificato un errore",
"DevDetail_Tab_Tools_Internet_Info_Start": "Avvia info Internet", "DevDetail_Tab_Tools_Internet_Info_Start": "Avvia info Internet",
@@ -242,11 +242,12 @@
"Device_Tablelenght": "Mostra _MENU_ elementi", "Device_Tablelenght": "Mostra _MENU_ elementi",
"Device_Tablelenght_all": "Tutti", "Device_Tablelenght_all": "Tutti",
"Device_Title": "Dispositivi", "Device_Title": "Dispositivi",
"Devices_Filters": "Filtri",
"Donations_Others": "Altri", "Donations_Others": "Altri",
"Donations_Platforms": "Piattaforme sponsor", "Donations_Platforms": "Piattaforme sponsor",
"Donations_Text": "Hey 👋! </br> Grazie per aver cliccato su questa voce di menu 😅 </br> </br> Sto cercando di ricevere donazioni per poter fornire un software migliore. Inoltre potrebbe aiutarmi a non andare in burnout, in modo da poter supportare questa app più a lungo. Ogni piccola (ricorrente o non) sponsorizzazione mi invoglia a mettere più impegno nello sviluppo di questa app. </br> Mi piacerebbe accorciare la mia settimana lavorativa e nel tempo rimanente dedicarmi completamente a NetAlertX. Riceverai più funzionalità, un'applicazione più rifinita e con meno bug.</br> </br> Grazie per aver letto, ti sono grato per ogni tipo di supporto ❤🙏 </br> </br> TL;DR: Supportandomi otterrai: </br> </br> <ul><li>Aggiornamenti più regolari per mantenere i tuoi dati e la tua famiglia sicuri 🔄</li><li>Meno bug 🐛🔫</li><li>Funzionalità migliori e più numerose</li><li>Io non vado in burnout 🔥🤯</li><li>Rilasci meno affrettati 💨</li><li>Migliore documentazione 📚</li><li>Supporto migliore e più veloce in caso di problemi 🆘</li></ul> </br> 📧Invia una mail a <a href='mailto:jokob@duck.com?subject=NetAlertX'>jokob@duck.com</a> se vuoi contattarmi o chiedermi di aggiungere altre piattaforme di sponsorizzazione. </br>", "Donations_Text": "Hey 👋! </br> Grazie per aver cliccato su questa voce di menu 😅 </br> </br> Sto cercando di ricevere donazioni per poter fornire un software migliore. Inoltre potrebbe aiutarmi a non andare in burnout, in modo da poter supportare questa app più a lungo. Ogni piccola (ricorrente o non) sponsorizzazione mi invoglia a mettere più impegno nello sviluppo di questa app. </br> Mi piacerebbe accorciare la mia settimana lavorativa e nel tempo rimanente dedicarmi completamente a NetAlertX. Riceverai più funzionalità, un'applicazione più rifinita e con meno bug.</br> </br> Grazie per aver letto, ti sono grato per ogni tipo di supporto ❤🙏 </br> </br> TL;DR: Supportandomi otterrai: </br> </br> <ul><li>Aggiornamenti più regolari per mantenere i tuoi dati e la tua famiglia sicuri 🔄</li><li>Meno bug 🐛🔫</li><li>Funzionalità migliori e più numerose</li><li>Io non vado in burnout 🔥🤯</li><li>Rilasci meno affrettati 💨</li><li>Migliore documentazione 📚</li><li>Supporto migliore e più veloce in caso di problemi 🆘</li></ul> </br> 📧Invia una mail a <a href='mailto:jokob@duck.com?subject=NetAlertX'>jokob@duck.com</a> se vuoi contattarmi o chiedermi di aggiungere altre piattaforme di sponsorizzazione. </br>",
"Donations_Title": "Donazioni", "Donations_Title": "Donazioni",
"ENABLE_PLUGINS_description": "Abilita la funzionalità <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins\">plugin</a>. Utilizzare i plugin richiede più risorse hardware, potresti voler disabilitare questa opzione sui dispositivi meno performanti.", "ENABLE_PLUGINS_description": "Abilita la funzionalità <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">plugin</a>. Utilizzare i plugin richiede più risorse hardware, potresti voler disabilitare questa opzione sui dispositivi meno performanti.",
"ENABLE_PLUGINS_name": "Abilita plugin", "ENABLE_PLUGINS_name": "Abilita plugin",
"ENCRYPTION_KEY_description": "Chiave di crittografia dei dati.", "ENCRYPTION_KEY_description": "Chiave di crittografia dei dati.",
"ENCRYPTION_KEY_name": "Chiave di crittografia", "ENCRYPTION_KEY_name": "Chiave di crittografia",
@@ -327,10 +328,11 @@
"Gen_Upd_Fail": "Aggiornamento fallito", "Gen_Upd_Fail": "Aggiornamento fallito",
"Gen_Update": "Aggiorna", "Gen_Update": "Aggiorna",
"Gen_Update_Value": "Aggiorna valore", "Gen_Update_Value": "Aggiorna valore",
"Gen_ValidIcon": "<i class=\"fa-solid fa-chevron-right \"></i>",
"Gen_Warning": "Avviso", "Gen_Warning": "Avviso",
"Gen_Work_In_Progress": "Lavori in corso, è quindi un buon momento per un feedback su https://github.com/jokob-sk/NetAlertX/issues", "Gen_Work_In_Progress": "Lavori in corso, è quindi un buon momento per un feedback su https://github.com/jokob-sk/NetAlertX/issues",
"Gen_create_new_device": "Nuovo dispositivo", "Gen_create_new_device": "Nuovo dispositivo",
"Gen_create_new_device_info": "I dispositivi vengono generalmente rilevati utilizzando <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins\">plugin</a>. Tuttavia, in alcuni casi, potrebbe essere necessario aggiungere manualmente i dispositivi. Per esplorare scenari specifici, consulta la <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/REMOTE_NETWORKS.md\">documentazione sulle reti remote</a>.", "Gen_create_new_device_info": "I dispositivi vengono generalmente rilevati utilizzando <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">plugin</a>. Tuttavia, in alcuni casi, potrebbe essere necessario aggiungere manualmente i dispositivi. Per esplorare scenari specifici, consulta la <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/REMOTE_NETWORKS.md\">documentazione sulle reti remote</a>.",
"General_display_name": "Generale", "General_display_name": "Generale",
"General_icon": "<i class=\"fa fa-gears\"></i>", "General_icon": "<i class=\"fa fa-gears\"></i>",
"HRS_TO_KEEP_NEWDEV_description": "Questa è un'impostazione di manutenzione <b>ELIMINAZIONE dispositivi</b>. Se abilitata (<code>0</code> è disabilitata), tutti i dispositivi marcati con <b>Nuovo dispositivo</b> verranno eliminati se l'orario della <b>Prima sessione</b> è precedente all'orario di questa impostazione. Usa questa impostazione se vuoi eliminare automaticamente i <b>Nuovi dispositivi</b> dopo <code>X</code> ore.", "HRS_TO_KEEP_NEWDEV_description": "Questa è un'impostazione di manutenzione <b>ELIMINAZIONE dispositivi</b>. Se abilitata (<code>0</code> è disabilitata), tutti i dispositivi marcati con <b>Nuovo dispositivo</b> verranno eliminati se l'orario della <b>Prima sessione</b> è precedente all'orario di questa impostazione. Usa questa impostazione se vuoi eliminare automaticamente i <b>Nuovi dispositivi</b> dopo <code>X</code> ore.",
@@ -373,7 +375,7 @@
"HelpFAQ_Cat_Presence_401_head": "Un dispositivo viene visualizzato come presente anche se è \"Offline\".", "HelpFAQ_Cat_Presence_401_head": "Un dispositivo viene visualizzato come presente anche se è \"Offline\".",
"HelpFAQ_Cat_Presence_401_text": "Se questo accade, hai la possibilità di eliminare gli eventi per il dispositivo in questione (visualizzazione dettagli). Un'altra possibilità potrebbe essere quella di accendere il dispositivo, attendere fino a quando NetAlertX non riconosce il dispositivo come \"online\" con la scansione successiva e poi spegnere il dispositivo. Ora NetAlertX dovrebbe annotare correttamente lo stato del dispositivo nel database con la scansione successiva.", "HelpFAQ_Cat_Presence_401_text": "Se questo accade, hai la possibilità di eliminare gli eventi per il dispositivo in questione (visualizzazione dettagli). Un'altra possibilità potrebbe essere quella di accendere il dispositivo, attendere fino a quando NetAlertX non riconosce il dispositivo come \"online\" con la scansione successiva e poi spegnere il dispositivo. Ora NetAlertX dovrebbe annotare correttamente lo stato del dispositivo nel database con la scansione successiva.",
"HelpFAQ_Title": "Aiuto / FAQ", "HelpFAQ_Title": "Aiuto / FAQ",
"LOADED_PLUGINS_description": "Quali Plugin caricare. L'aggiunta di plugin potrebbe rallentare l'applicazione. Leggi di più su quali plugin necessitano di essere abilitati, tipi e opzioni di scansione nella <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins#readme\">documentazione plugin</a>. I plugin disinstallati perdono la loro configurazione. Solo i plugin <code>disabilitati</code> possono essere disinstallati.", "LOADED_PLUGINS_description": "Quali Plugin caricare. L'aggiunta di plugin potrebbe rallentare l'applicazione. Leggi di più su quali plugin necessitano di essere abilitati, tipi e opzioni di scansione nella <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">documentazione plugin</a>. I plugin disinstallati perdono la loro configurazione. Solo i plugin <code>disabilitati</code> possono essere disinstallati.",
"LOADED_PLUGINS_name": "Plugin caricati", "LOADED_PLUGINS_name": "Plugin caricati",
"LOG_LEVEL_description": "Questa impostazione abilita un log più dettagliato. Utile per il debug degli eventi salvati nel database.", "LOG_LEVEL_description": "Questa impostazione abilita un log più dettagliato. Utile per il debug degli eventi salvati nel database.",
"LOG_LEVEL_name": "Stampa log aggiuntivo", "LOG_LEVEL_name": "Stampa log aggiuntivo",
@@ -398,17 +400,23 @@
"Maintenance_Running_Version": "Versione installata", "Maintenance_Running_Version": "Versione installata",
"Maintenance_Status": "Stato", "Maintenance_Status": "Stato",
"Maintenance_Title": "Strumenti di manutenzione", "Maintenance_Title": "Strumenti di manutenzione",
"Maintenance_Tool_ExportCSV": "Esporta CSV", "Maintenance_Tool_DownloadConfig": "Impostazioni Esporta",
"Maintenance_Tool_ExportCSV_noti": "Esporta CSV", "Maintenance_Tool_DownloadConfig_text": "Scarica un backup completo della configurazione delle tue Impostazioni memorizzata nel file <code>app.conf</code>.",
"Maintenance_Tool_ExportCSV": "Esporta dispositivi (csv)",
"Maintenance_Tool_ExportCSV_noti": "Esporta dispositivi (csv)",
"Maintenance_Tool_ExportCSV_noti_text": "Sei sicuro di voler generare un file CSV?", "Maintenance_Tool_ExportCSV_noti_text": "Sei sicuro di voler generare un file CSV?",
"Maintenance_Tool_ExportCSV_text": "Genera un file CSV (comma separated value) contenente la lista dei dispositivi incluse le relazioni di rete tra i nodi di rete e i dispositivi connessi. Puoi anche eseguire questa azione accedendo all'URL <code>il_tuo_NetAlertX/php/server/devices.php?action=ExportCSV</code> o abilitando il plugin <a href=\"settings.php#CSVBCKP_header\">Backup CSV</a>.", "Maintenance_Tool_ExportCSV_text": "Genera un file CSV (comma separated value) contenente la lista dei dispositivi incluse le relazioni di rete tra i nodi di rete e i dispositivi connessi. Puoi anche eseguire questa azione accedendo all'URL <code>il_tuo_NetAlertX/php/server/devices.php?action=ExportCSV</code> o abilitando il plugin <a href=\"settings.php#CSVBCKP_header\">Backup CSV</a>.",
"Maintenance_Tool_ImportCSV": "Importa CSV", "Maintenance_Tool_ImportCSV": "Importa dispositivi (csv)",
"Maintenance_Tool_ImportCSV_noti": "Importa CSV", "Maintenance_Tool_ImportCSV_noti": "Importa dispositivi (csv)",
"Maintenance_Tool_ImportCSV_noti_text": "Sei sicuro di voler importare il file CSV? Questa operazione <b>sovrascriverà</b> tutti i dispositivi presenti nel database.", "Maintenance_Tool_ImportCSV_noti_text": "Sei sicuro di voler importare il file CSV? Questa operazione <b>sovrascriverà</b> tutti i dispositivi presenti nel database.",
"Maintenance_Tool_ImportCSV_text": "Prima di utilizzare questa funzione, esegui un backup. Importa un file CSV (comma separated value) contenente la lista dei dispositivi incluse le relazioni di rete tra i nodi di rete e i dispositivi connessi. Per far ciò posiziona il file CSV denominato <b>devices.csv</b> nella cartella <b>/config</b>.", "Maintenance_Tool_ImportCSV_text": "Prima di utilizzare questa funzione, esegui un backup. Importa un file CSV (comma separated value) contenente la lista dei dispositivi incluse le relazioni di rete tra i nodi di rete e i dispositivi connessi. Per far ciò posiziona il file CSV denominato <b>devices.csv</b> nella cartella <b>/config</b>.",
"Maintenance_Tool_ImportPastedCSV": "Importazione CSV (incolla)", "Maintenance_Tool_ImportConfig_noti": "Importa impostazioni (app.conf)",
"Maintenance_Tool_ImportPastedCSV": "Importa dispositivi (csv) (incolla)",
"Maintenance_Tool_ImportPastedCSV_noti_text": "Sei sicuro di voler importare il CSV incollato? Questo <b>sovrascriverà</b> completamente i dispositivi nel tuo database.", "Maintenance_Tool_ImportPastedCSV_noti_text": "Sei sicuro di voler importare il CSV incollato? Questo <b>sovrascriverà</b> completamente i dispositivi nel tuo database.",
"Maintenance_Tool_ImportPastedCSV_text": "Prima di utilizzare questa funzione, esegui un backup. Importa un file CSV (valori separati da virgole) contenente l'elenco dei dispositivi, comprese le relazioni di rete tra i nodi di rete e i dispositivi collegati.", "Maintenance_Tool_ImportPastedCSV_text": "Prima di utilizzare questa funzione, esegui un backup. Importa un file CSV (valori separati da virgole) contenente l'elenco dei dispositivi, comprese le relazioni di rete tra i nodi di rete e i dispositivi collegati.",
"Maintenance_Tool_ImportPastedConfig": "Importa impostazioni (incolla)",
"Maintenance_Tool_ImportPastedConfig_noti_text": "Vuoi davvero importare le impostazioni di configurazione incollate? Questo <b>sovrascriverà</b> completamente il file <code>app.conf</code>.",
"Maintenance_Tool_ImportPastedConfig_text": "Importa il file <code>app.conf</code> contenente tutte le impostazioni dell'applicazione. Potresti voler scaricare prima il file <code>app.conf</code> corrente con <b>Esporta impostazioni</b>.",
"Maintenance_Tool_arpscansw": "Attiva/disattiva arp-Scan", "Maintenance_Tool_arpscansw": "Attiva/disattiva arp-Scan",
"Maintenance_Tool_arpscansw_noti": "Attiva o disattiva arp-Scan", "Maintenance_Tool_arpscansw_noti": "Attiva o disattiva arp-Scan",
"Maintenance_Tool_arpscansw_noti_text": "Una volta disattivata la scansione rimane disattivata finché non viene nuovamente attivata.", "Maintenance_Tool_arpscansw_noti_text": "Una volta disattivata la scansione rimane disattivata finché non viene nuovamente attivata.",
@@ -483,7 +491,7 @@
"Maintenance_lang_selector_empty": "Scegli lingua", "Maintenance_lang_selector_empty": "Scegli lingua",
"Maintenance_lang_selector_lable": "Seleziona lingua", "Maintenance_lang_selector_lable": "Seleziona lingua",
"Maintenance_lang_selector_text": "Questa modifica avviene lato client, quindi influisce solo sul browser attualmente in uso.", "Maintenance_lang_selector_text": "Questa modifica avviene lato client, quindi influisce solo sul browser attualmente in uso.",
"Maintenance_new_version": "🆕 È disponibile una nuova versione. Controlla le <a href=\"https://github.com/jokob-sk/NetAlertX/releases\" target=\"_blank\">note di rilascio</a>.", "Maintenance_new_version": "È disponibile una nuova versione. Controlla le <a href=\"https://github.com/jokob-sk/NetAlertX/releases\" target=\"_blank\">note di rilascio</a>.",
"Maintenance_themeselector_apply": "Applica", "Maintenance_themeselector_apply": "Applica",
"Maintenance_themeselector_empty": "Scegli una skin", "Maintenance_themeselector_empty": "Scegli una skin",
"Maintenance_themeselector_lable": "Seleziona skin", "Maintenance_themeselector_lable": "Seleziona skin",
@@ -710,6 +718,7 @@
"general_event_title": "Esecuzione di un evento ad-hoc", "general_event_title": "Esecuzione di un evento ad-hoc",
"go_to_node_event_icon": "fa-square-up-right", "go_to_node_event_icon": "fa-square-up-right",
"go_to_node_event_tooltip": "Passa alla pagina Rete del nodo specificato", "go_to_node_event_tooltip": "Passa alla pagina Rete del nodo specificato",
"new_version_available": "È disponibile una nuova versione.",
"report_guid": "GUID notifica:", "report_guid": "GUID notifica:",
"report_guid_missing": "Notifica collegata non trovata. C'è un piccolo ritardo tra la disponibilità delle notifiche inviate di recente e la loro disponibilità. Aggiorna la pagina e la cache dopo alcuni secondi. È anche possibile che la notifica selezionata sia stata eliminata durante la manutenzione come specificato nell'impostazione <code>DBCLNP_NOTIFI_HIST</code>. <br/> <br/>Viene invece visualizzata l'ultima notifica. La notifica mancante ha il seguente GUID:", "report_guid_missing": "Notifica collegata non trovata. C'è un piccolo ritardo tra la disponibilità delle notifiche inviate di recente e la loro disponibilità. Aggiorna la pagina e la cache dopo alcuni secondi. È anche possibile che la notifica selezionata sia stata eliminata durante la manutenzione come specificato nell'impostazione <code>DBCLNP_NOTIFI_HIST</code>. <br/> <br/>Viene invece visualizzata l'ultima notifica. La notifica mancante ha il seguente GUID:",
"report_select_format": "Seleziona formato:", "report_select_format": "Seleziona formato:",

View File

@@ -138,8 +138,8 @@
"DevDetail_Shortcut_DownAlerts": "Nede Varslinger", "DevDetail_Shortcut_DownAlerts": "Nede Varslinger",
"DevDetail_Shortcut_Presence": "Tilstedeværelse", "DevDetail_Shortcut_Presence": "Tilstedeværelse",
"DevDetail_Shortcut_Sessions": "Sesjoner", "DevDetail_Shortcut_Sessions": "Sesjoner",
"DevDetail_Tab_Details": "<i class=\"fa fa-info-circle\"></i> Detaljer", "DevDetail_Tab_Details": "Detaljer",
"DevDetail_Tab_Events": "<i class=\"fa fa-bolt\"></i> Hendelser", "DevDetail_Tab_Events": "Hendelser",
"DevDetail_Tab_EventsTableDate": "Dato", "DevDetail_Tab_EventsTableDate": "Dato",
"DevDetail_Tab_EventsTableEvent": "Hendelstype", "DevDetail_Tab_EventsTableEvent": "Hendelstype",
"DevDetail_Tab_EventsTableIP": "IP", "DevDetail_Tab_EventsTableIP": "IP",
@@ -154,10 +154,10 @@
"DevDetail_Tab_NmapTableState": "Tilstand", "DevDetail_Tab_NmapTableState": "Tilstand",
"DevDetail_Tab_NmapTableText": "Konfigurer en tidsplan i <a href=\"/settings.php#NMAP_ACTIVE\">Innstillinger</a>", "DevDetail_Tab_NmapTableText": "Konfigurer en tidsplan i <a href=\"/settings.php#NMAP_ACTIVE\">Innstillinger</a>",
"DevDetail_Tab_NmapTableTime": "Tidspunkt", "DevDetail_Tab_NmapTableTime": "Tidspunkt",
"DevDetail_Tab_Plugins": "<i class=\"fa fa-plug\"></i> Plugins", "DevDetail_Tab_Plugins": "Plugins",
"DevDetail_Tab_Presence": "<i class=\"fa fa-calendar\"></i> Tilstedeværelse", "DevDetail_Tab_Presence": "Tilstedeværelse",
"DevDetail_Tab_Sessions": "<i class=\"fa fa-list-ol\"></i> Økter", "DevDetail_Tab_Sessions": "Økter",
"DevDetail_Tab_Tools": "<i class=\"fa fa-screwdriver-wrench\"></i> Verktøy", "DevDetail_Tab_Tools": "Verktøy",
"DevDetail_Tab_Tools_Internet_Info_Description": "Internett-informasjonsverktøyet viser informasjon om Internett-tilkoblingen, for eksempel IP-adresse, by, land, retningsnummer og tidssone.", "DevDetail_Tab_Tools_Internet_Info_Description": "Internett-informasjonsverktøyet viser informasjon om Internett-tilkoblingen, for eksempel IP-adresse, by, land, retningsnummer og tidssone.",
"DevDetail_Tab_Tools_Internet_Info_Error": "En feil har oppstått", "DevDetail_Tab_Tools_Internet_Info_Error": "En feil har oppstått",
"DevDetail_Tab_Tools_Internet_Info_Start": "Start Internett-informasjonsverktøyet", "DevDetail_Tab_Tools_Internet_Info_Start": "Start Internett-informasjonsverktøyet",
@@ -242,11 +242,12 @@
"Device_Tablelenght": "Show _MENU_ entries", "Device_Tablelenght": "Show _MENU_ entries",
"Device_Tablelenght_all": "Alle", "Device_Tablelenght_all": "Alle",
"Device_Title": "Enheter", "Device_Title": "Enheter",
"Devices_Filters": "",
"Donations_Others": "Andre", "Donations_Others": "Andre",
"Donations_Platforms": "Sponsorplattformer", "Donations_Platforms": "Sponsorplattformer",
"Donations_Text": "Hei 👋! </br> Takk for at du klikket på dette menyelementet 😅 </br> </br> Jeg prøver å samle inn noen donasjoner for å lage bedre programvare. Dessuten ville det hjelpe meg å ikke bli utbrent, så jeg kan støtte denne appen lenger. Enhver liten (tilbakevendende eller ikke) sponsing gjør at jeg ønsker å legge mer innsats i denne appen. </br> Jeg vil gjerne forkorte arbeidsuken min og i den gjenværende tiden fokusere fullt ut på NetAlertX. Du vil få mer funksjonalitet, en mer polert app og mindre feil. </br> </br> Takk for at du leste - jeg er takknemlig for all støtte ❤🙏 </br> </br> TL;DR: Ved å støtte meg får du: </br> </br> <ul> <li>Jevne oppdateringer for å holde dataene dine og familien din trygge 🔄</li><li>Mindre feil 🐛🔫</li><li>Bedre og mer funksjonalitet</li><li>Jeg blir ikke utbrent 🔥🤯</li><li>Mindre forhastede utgivelser 💨</li><li>Bedre dokumenter📚</li><li>Raskere og bedre støtte med problemer 🆘</li></ul> </br> 📧 Send meg en e-post til <a href='mailto:jokob@duck.com?subject=NetAlertX'>jokob@duck.com</a> hvis du ønsker å komme i kontakt eller hvis jeg skal legge til andre sponsorplattformer. </br>", "Donations_Text": "Hei 👋! </br> Takk for at du klikket på dette menyelementet 😅 </br> </br> Jeg prøver å samle inn noen donasjoner for å lage bedre programvare. Dessuten ville det hjelpe meg å ikke bli utbrent, så jeg kan støtte denne appen lenger. Enhver liten (tilbakevendende eller ikke) sponsing gjør at jeg ønsker å legge mer innsats i denne appen. </br> Jeg vil gjerne forkorte arbeidsuken min og i den gjenværende tiden fokusere fullt ut på NetAlertX. Du vil få mer funksjonalitet, en mer polert app og mindre feil. </br> </br> Takk for at du leste - jeg er takknemlig for all støtte ❤🙏 </br> </br> TL;DR: Ved å støtte meg får du: </br> </br> <ul> <li>Jevne oppdateringer for å holde dataene dine og familien din trygge 🔄</li><li>Mindre feil 🐛🔫</li><li>Bedre og mer funksjonalitet</li><li>Jeg blir ikke utbrent 🔥🤯</li><li>Mindre forhastede utgivelser 💨</li><li>Bedre dokumenter📚</li><li>Raskere og bedre støtte med problemer 🆘</li></ul> </br> 📧 Send meg en e-post til <a href='mailto:jokob@duck.com?subject=NetAlertX'>jokob@duck.com</a> hvis du ønsker å komme i kontakt eller hvis jeg skal legge til andre sponsorplattformer. </br>",
"Donations_Title": "Donasjoner", "Donations_Title": "Donasjoner",
"ENABLE_PLUGINS_description": "Aktiverer <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins\">plugins</a> funksjonaliten. Å laste inn plugins krever mer maskinvareressurser, så det kan være lurt å deaktivere dem på et system med lav strøm.", "ENABLE_PLUGINS_description": "Aktiverer <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">plugins</a> funksjonaliten. Å laste inn plugins krever mer maskinvareressurser, så det kan være lurt å deaktivere dem på et system med lav strøm.",
"ENABLE_PLUGINS_name": "Aktiver Plugins", "ENABLE_PLUGINS_name": "Aktiver Plugins",
"ENCRYPTION_KEY_description": "", "ENCRYPTION_KEY_description": "",
"ENCRYPTION_KEY_name": "", "ENCRYPTION_KEY_name": "",
@@ -327,6 +328,7 @@
"Gen_Upd_Fail": "Oppdatering feilet", "Gen_Upd_Fail": "Oppdatering feilet",
"Gen_Update": "Oppdater", "Gen_Update": "Oppdater",
"Gen_Update_Value": "Oppdater verdi", "Gen_Update_Value": "Oppdater verdi",
"Gen_ValidIcon": "",
"Gen_Warning": "Advarsel", "Gen_Warning": "Advarsel",
"Gen_Work_In_Progress": "Work in progress, gjerne kom med tilbakemeldinger på https://github.com/jokob-sk/NetAlertX/issues", "Gen_Work_In_Progress": "Work in progress, gjerne kom med tilbakemeldinger på https://github.com/jokob-sk/NetAlertX/issues",
"Gen_create_new_device": "", "Gen_create_new_device": "",
@@ -373,7 +375,7 @@
"HelpFAQ_Cat_Presence_401_head": "En enhet vises som tilstede selv om den er \"frakoblet\".", "HelpFAQ_Cat_Presence_401_head": "En enhet vises som tilstede selv om den er \"frakoblet\".",
"HelpFAQ_Cat_Presence_401_text": "Hvis dette skjer, har du muligheten til å slette hendelsene for den aktuelle enheten (detaljer visning). En annen mulighet ville være å slå på enheten og vente til NetAlertX gjenkjenner enheten som \"online\" med neste skanning og så ganske enkelt slå av enheten igjen. Nå bør NetAlertX registrere tilstanden til enheten i databasen med neste skanning.", "HelpFAQ_Cat_Presence_401_text": "Hvis dette skjer, har du muligheten til å slette hendelsene for den aktuelle enheten (detaljer visning). En annen mulighet ville være å slå på enheten og vente til NetAlertX gjenkjenner enheten som \"online\" med neste skanning og så ganske enkelt slå av enheten igjen. Nå bør NetAlertX registrere tilstanden til enheten i databasen med neste skanning.",
"HelpFAQ_Title": "Hjelp / Vanlige spørsmål", "HelpFAQ_Title": "Hjelp / Vanlige spørsmål",
"LOADED_PLUGINS_description": "Hvilke plugins som skal lastes. Å legge til plugins kan gjøre programmet tregere. Les mer om hvilke plugins som må aktiveres, typer eller skannealternativer i <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins#readme\">plugin dokumentasjonen</a>. Ulastede plugins vil miste innstillingene sine. Bare <code>deaktiverte</code> plugins kan lastes ut.", "LOADED_PLUGINS_description": "Hvilke plugins som skal lastes. Å legge til plugins kan gjøre programmet tregere. Les mer om hvilke plugins som må aktiveres, typer eller skannealternativer i <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">plugin dokumentasjonen</a>. Ulastede plugins vil miste innstillingene sine. Bare <code>deaktiverte</code> plugins kan lastes ut.",
"LOADED_PLUGINS_name": "Lastede plugins", "LOADED_PLUGINS_name": "Lastede plugins",
"LOG_LEVEL_description": "Denne innstillingen vil aktivere mer detaljert logging. Nyttig for feilsøking av hendelser som skrives inn i databasen.", "LOG_LEVEL_description": "Denne innstillingen vil aktivere mer detaljert logging. Nyttig for feilsøking av hendelser som skrives inn i databasen.",
"LOG_LEVEL_name": "Skriv ut tilleggslogging", "LOG_LEVEL_name": "Skriv ut tilleggslogging",
@@ -398,6 +400,8 @@
"Maintenance_Running_Version": "Installert versjon", "Maintenance_Running_Version": "Installert versjon",
"Maintenance_Status": "Status", "Maintenance_Status": "Status",
"Maintenance_Title": "Vedlikeholdsverktøy", "Maintenance_Title": "Vedlikeholdsverktøy",
"Maintenance_Tool_DownloadConfig": "",
"Maintenance_Tool_DownloadConfig_text": "",
"Maintenance_Tool_ExportCSV": "Eksporter CSV", "Maintenance_Tool_ExportCSV": "Eksporter CSV",
"Maintenance_Tool_ExportCSV_noti": "Eksporter CSV", "Maintenance_Tool_ExportCSV_noti": "Eksporter CSV",
"Maintenance_Tool_ExportCSV_noti_text": "Er du sikker på at du vil generere en CSV-fil?", "Maintenance_Tool_ExportCSV_noti_text": "Er du sikker på at du vil generere en CSV-fil?",
@@ -406,9 +410,13 @@
"Maintenance_Tool_ImportCSV_noti": "Importer CSV", "Maintenance_Tool_ImportCSV_noti": "Importer CSV",
"Maintenance_Tool_ImportCSV_noti_text": "Er du sikker på at du vil importere CSV-filen? Dette vil fullstendig overskrive enhetene i databasen din.", "Maintenance_Tool_ImportCSV_noti_text": "Er du sikker på at du vil importere CSV-filen? Dette vil fullstendig overskrive enhetene i databasen din.",
"Maintenance_Tool_ImportCSV_text": "Før du bruker denne funksjonen, vennligst ta en sikkerhetskopi. Importer en CSV-fil (kommaseparert verdi) som inneholder listen over enheter, inkludert nettverksrelasjoner mellom nettverksnoder og tilkoblede enheter. For å gjøre det, plasser CSV-filen med navnet <b>devices.csv</b> i mappen <b>/config</b>.", "Maintenance_Tool_ImportCSV_text": "Før du bruker denne funksjonen, vennligst ta en sikkerhetskopi. Importer en CSV-fil (kommaseparert verdi) som inneholder listen over enheter, inkludert nettverksrelasjoner mellom nettverksnoder og tilkoblede enheter. For å gjøre det, plasser CSV-filen med navnet <b>devices.csv</b> i mappen <b>/config</b>.",
"Maintenance_Tool_ImportConfig_noti": "",
"Maintenance_Tool_ImportPastedCSV": "", "Maintenance_Tool_ImportPastedCSV": "",
"Maintenance_Tool_ImportPastedCSV_noti_text": "", "Maintenance_Tool_ImportPastedCSV_noti_text": "",
"Maintenance_Tool_ImportPastedCSV_text": "", "Maintenance_Tool_ImportPastedCSV_text": "",
"Maintenance_Tool_ImportPastedConfig": "",
"Maintenance_Tool_ImportPastedConfig_noti_text": "",
"Maintenance_Tool_ImportPastedConfig_text": "",
"Maintenance_Tool_arpscansw": "Slå arp-Scan (på/av)", "Maintenance_Tool_arpscansw": "Slå arp-Scan (på/av)",
"Maintenance_Tool_arpscansw_noti": "Slå arp-Scan på eller av", "Maintenance_Tool_arpscansw_noti": "Slå arp-Scan på eller av",
"Maintenance_Tool_arpscansw_noti_text": "Når skanningen er slått av, forblir den slått av til den aktiveres igjen.", "Maintenance_Tool_arpscansw_noti_text": "Når skanningen er slått av, forblir den slått av til den aktiveres igjen.",
@@ -483,7 +491,7 @@
"Maintenance_lang_selector_empty": "Velg språk", "Maintenance_lang_selector_empty": "Velg språk",
"Maintenance_lang_selector_lable": "Velg språk", "Maintenance_lang_selector_lable": "Velg språk",
"Maintenance_lang_selector_text": "Endringen skjer på klientsiden, så den påvirker bare den nåværende nettleseren.", "Maintenance_lang_selector_text": "Endringen skjer på klientsiden, så den påvirker bare den nåværende nettleseren.",
"Maintenance_new_version": "🆕 En ny versjon er tilgjengelig. Sjekk ut <a href=\"https://github.com/jokob-sk/NetAlertX/releases\" target=\"_blank\">utgivelsesnotater</a>.", "Maintenance_new_version": "En ny versjon er tilgjengelig. Sjekk ut <a href=\"https://github.com/jokob-sk/NetAlertX/releases\" target=\"_blank\">utgivelsesnotater</a>.",
"Maintenance_themeselector_apply": "Bruk", "Maintenance_themeselector_apply": "Bruk",
"Maintenance_themeselector_empty": "Velg ett skinn", "Maintenance_themeselector_empty": "Velg ett skinn",
"Maintenance_themeselector_lable": "Velg skinn", "Maintenance_themeselector_lable": "Velg skinn",
@@ -710,6 +718,7 @@
"general_event_title": "Utfører en ad-hoc hendelse", "general_event_title": "Utfører en ad-hoc hendelse",
"go_to_node_event_icon": "", "go_to_node_event_icon": "",
"go_to_node_event_tooltip": "", "go_to_node_event_tooltip": "",
"new_version_available": "",
"report_guid": "Notifikasjons GUID:", "report_guid": "Notifikasjons GUID:",
"report_guid_missing": "Koblet notifikasjon ikke funnet. Det er en liten forsinkelse mellom nylig sendt notifikasjoner og at de er tilgjengelige. Oppdater siden din og hurtigbufferen etter noen sekunder. Det er også mulig den valgte notifikasjonen er slettet under vedlikehold som spesifisert i <code>DBCLNP_NOTIFI_HIST</code> innstillingen. <br/> <br/> Den siste notifikasjonen vises i stedet. Den manglende notifikasjonen har følgende GUID:", "report_guid_missing": "Koblet notifikasjon ikke funnet. Det er en liten forsinkelse mellom nylig sendt notifikasjoner og at de er tilgjengelige. Oppdater siden din og hurtigbufferen etter noen sekunder. Det er også mulig den valgte notifikasjonen er slettet under vedlikehold som spesifisert i <code>DBCLNP_NOTIFI_HIST</code> innstillingen. <br/> <br/> Den siste notifikasjonen vises i stedet. Den manglende notifikasjonen har følgende GUID:",
"report_select_format": "Velg format:", "report_select_format": "Velg format:",

View File

@@ -155,9 +155,9 @@
"DevDetail_Tab_NmapTableText": "Ustaw harmonogram w <a href=\"/settings.php#NMAP_ACTIVE\">Ustawieniach</a>", "DevDetail_Tab_NmapTableText": "Ustaw harmonogram w <a href=\"/settings.php#NMAP_ACTIVE\">Ustawieniach</a>",
"DevDetail_Tab_NmapTableTime": "Czas", "DevDetail_Tab_NmapTableTime": "Czas",
"DevDetail_Tab_Plugins": "<i class=\"fa fa-plug\"></i>Pluginy", "DevDetail_Tab_Plugins": "<i class=\"fa fa-plug\"></i>Pluginy",
"DevDetail_Tab_Presence": "<i class=\"fa fa-calendar\"></i> Obecność", "DevDetail_Tab_Presence": "Obecność",
"DevDetail_Tab_Sessions": "<i class=\"fa fa-list-ol\"></i> Sesje", "DevDetail_Tab_Sessions": "Sesje",
"DevDetail_Tab_Tools": "<i class=\"fa fa-screwdriver-wrench\"></i> Narzędzia", "DevDetail_Tab_Tools": "Narzędzia",
"DevDetail_Tab_Tools_Internet_Info_Description": "Narzędzie informacji o Internecie wyświetla informację o połączeniu z Internetem, takie jak adres IP, miasto, państwo, kod pocztowy i strefa czasowa.", "DevDetail_Tab_Tools_Internet_Info_Description": "Narzędzie informacji o Internecie wyświetla informację o połączeniu z Internetem, takie jak adres IP, miasto, państwo, kod pocztowy i strefa czasowa.",
"DevDetail_Tab_Tools_Internet_Info_Error": "Wystąpił błąd", "DevDetail_Tab_Tools_Internet_Info_Error": "Wystąpił błąd",
"DevDetail_Tab_Tools_Internet_Info_Start": "Rozpocznij Informacje o Internecie", "DevDetail_Tab_Tools_Internet_Info_Start": "Rozpocznij Informacje o Internecie",
@@ -242,11 +242,12 @@
"Device_Tablelenght": "Pokaż_wpisy_MENU", "Device_Tablelenght": "Pokaż_wpisy_MENU",
"Device_Tablelenght_all": "Wszystkie", "Device_Tablelenght_all": "Wszystkie",
"Device_Title": "Urządzenia", "Device_Title": "Urządzenia",
"Devices_Filters": "",
"Donations_Others": "Inne", "Donations_Others": "Inne",
"Donations_Platforms": "Platforma Sponsora", "Donations_Platforms": "Platforma Sponsora",
"Donations_Text": "Cześć 👋! </br> Dziękuje że kliknąłeś w to menu 😅 </br> </br> Próbuje zebrać trochę dotacji by ulepszyć to oprogramowanie. Także pomaga mi to się nie wypalić bym dalej mógł ulepszać to narzędzie. Każdy mały (powtarzający się lub nie) sponsoring sprawia że chce wkładać więcej pracy w tą aplikację. </br> Chciałbym skrócić mój tydzień pracy i w wolnym czasie skupić się nad NetAlertX. Dostawalibyście wtedy więcej funkcjonalności i były by one ciągle udoskonalane i posiadające mniej błędów. </br> </br> Dziękuję że to przeczytałeś - Jestem wdzięczny za pomoc ❤🙏</br> </br> TL;DR: Wspierając mnie otrzymujesz: </br> </br> <ul><li> Regularne aktualizacje by zapewnić twoim danym i rodzinie bezpieczeństwo 🔄 </li><li>Mniej błędów (bugów) 🐛🔫</li><li>Nowe i lepsze funkcjonalności</li><li>Nie tracę zapału do dalszego tworzenia 🔥🤯</li><li>Mniej pośpieszne, bardziej dopracowane wydania💨</li><li>Lepsza dokumentacja📚</li><li>Szybsza i lepsza pomoc w problemach🆘</li></ul> </br>📧Napisz E-mail do mnie na<a href='mailto:jokob@duck.com?subject=NetAlertX'>jokob@duck.com</a> jeżeli chcesz nawiązać kontakt albo czy powinien dodać kolejną platformę z sponsoringiem.</br>", "Donations_Text": "Cześć 👋! </br> Dziękuje że kliknąłeś w to menu 😅 </br> </br> Próbuje zebrać trochę dotacji by ulepszyć to oprogramowanie. Także pomaga mi to się nie wypalić bym dalej mógł ulepszać to narzędzie. Każdy mały (powtarzający się lub nie) sponsoring sprawia że chce wkładać więcej pracy w tą aplikację. </br> Chciałbym skrócić mój tydzień pracy i w wolnym czasie skupić się nad NetAlertX. Dostawalibyście wtedy więcej funkcjonalności i były by one ciągle udoskonalane i posiadające mniej błędów. </br> </br> Dziękuję że to przeczytałeś - Jestem wdzięczny za pomoc ❤🙏</br> </br> TL;DR: Wspierając mnie otrzymujesz: </br> </br> <ul><li> Regularne aktualizacje by zapewnić twoim danym i rodzinie bezpieczeństwo 🔄 </li><li>Mniej błędów (bugów) 🐛🔫</li><li>Nowe i lepsze funkcjonalności</li><li>Nie tracę zapału do dalszego tworzenia 🔥🤯</li><li>Mniej pośpieszne, bardziej dopracowane wydania💨</li><li>Lepsza dokumentacja📚</li><li>Szybsza i lepsza pomoc w problemach🆘</li></ul> </br>📧Napisz E-mail do mnie na<a href='mailto:jokob@duck.com?subject=NetAlertX'>jokob@duck.com</a> jeżeli chcesz nawiązać kontakt albo czy powinien dodać kolejną platformę z sponsoringiem.</br>",
"Donations_Title": "Dotacje", "Donations_Title": "Dotacje",
"ENABLE_PLUGINS_description": "Włącza funkcjonalność <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins\">pluginów</a>. Uruchomienie pluginów wymaga więcej zasobów sprzętu więcej możesz chcieć to wyłączyć dla słabszych systemów.", "ENABLE_PLUGINS_description": "Włącza funkcjonalność <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">pluginów</a>. Uruchomienie pluginów wymaga więcej zasobów sprzętu więcej możesz chcieć to wyłączyć dla słabszych systemów.",
"ENABLE_PLUGINS_name": "Włącz Pluginy", "ENABLE_PLUGINS_name": "Włącz Pluginy",
"ENCRYPTION_KEY_description": "", "ENCRYPTION_KEY_description": "",
"ENCRYPTION_KEY_name": "", "ENCRYPTION_KEY_name": "",
@@ -327,6 +328,7 @@
"Gen_Upd_Fail": "Aktualizacja nie powiodła się", "Gen_Upd_Fail": "Aktualizacja nie powiodła się",
"Gen_Update": "Aktualizuj", "Gen_Update": "Aktualizuj",
"Gen_Update_Value": "Aktualizuj Wartość", "Gen_Update_Value": "Aktualizuj Wartość",
"Gen_ValidIcon": "",
"Gen_Warning": "Uwaga", "Gen_Warning": "Uwaga",
"Gen_Work_In_Progress": "Praca w toku, dobry czas na feedback https://github.com/jokob-sk/NetAlertX/issues", "Gen_Work_In_Progress": "Praca w toku, dobry czas na feedback https://github.com/jokob-sk/NetAlertX/issues",
"Gen_create_new_device": "", "Gen_create_new_device": "",
@@ -373,7 +375,7 @@
"HelpFAQ_Cat_Presence_401_head": "Urządzenie jest wyświetlane jako dostępne imo iż jest \"Offline\".", "HelpFAQ_Cat_Presence_401_head": "Urządzenie jest wyświetlane jako dostępne imo iż jest \"Offline\".",
"HelpFAQ_Cat_Presence_401_text": "Jeżeli tak się dzieje, to masz możliwość usunięcia wydarzenia na danym urządzenia (widok szczegółowy). Kolejna możliwość to włączenie urządzenia i oczekiwanie aż NetAlertX wykryje urządzenie jako \"online\" przy kolejnym skanowaniu, a następnie wyłączenia ponownie urządzenia. Teraz NetAlertX powinien poprawnie zanotować stan urządzenia w bazie danych przy kolejnym skanowaniu.", "HelpFAQ_Cat_Presence_401_text": "Jeżeli tak się dzieje, to masz możliwość usunięcia wydarzenia na danym urządzenia (widok szczegółowy). Kolejna możliwość to włączenie urządzenia i oczekiwanie aż NetAlertX wykryje urządzenie jako \"online\" przy kolejnym skanowaniu, a następnie wyłączenia ponownie urządzenia. Teraz NetAlertX powinien poprawnie zanotować stan urządzenia w bazie danych przy kolejnym skanowaniu.",
"HelpFAQ_Title": "Pomoc / FAQ", "HelpFAQ_Title": "Pomoc / FAQ",
"LOADED_PLUGINS_description": "Które Wtyczki załadować. Dodanie wtyczek może spowolnić aplikację. Przeczytaj więcej o wtyczkach które muszą być podłączone, typach lub opcjach skanowania w <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins#readme\"> dokumentacji wtyczek</a>. Rozłączone wtyczki stracą twoje ustawienia. Tylko <code>wyłączone</code> wtyczki mogą być rozłączone.", "LOADED_PLUGINS_description": "Które Wtyczki załadować. Dodanie wtyczek może spowolnić aplikację. Przeczytaj więcej o wtyczkach które muszą być podłączone, typach lub opcjach skanowania w <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\"> dokumentacji wtyczek</a>. Rozłączone wtyczki stracą twoje ustawienia. Tylko <code>wyłączone</code> wtyczki mogą być rozłączone.",
"LOADED_PLUGINS_name": "Załadowane wtyczki", "LOADED_PLUGINS_name": "Załadowane wtyczki",
"LOG_LEVEL_description": "To ustawienie uruchomi bardziej dokładnie logi. Użyteczne do debugowania powiadomień czekających w bazie danych.", "LOG_LEVEL_description": "To ustawienie uruchomi bardziej dokładnie logi. Użyteczne do debugowania powiadomień czekających w bazie danych.",
"LOG_LEVEL_name": "Pokarz dodatkowe logi", "LOG_LEVEL_name": "Pokarz dodatkowe logi",
@@ -398,6 +400,8 @@
"Maintenance_Running_Version": "Zainstalowana wersja", "Maintenance_Running_Version": "Zainstalowana wersja",
"Maintenance_Status": "Status", "Maintenance_Status": "Status",
"Maintenance_Title": "Narzędzia konserwacyjne", "Maintenance_Title": "Narzędzia konserwacyjne",
"Maintenance_Tool_DownloadConfig": "",
"Maintenance_Tool_DownloadConfig_text": "",
"Maintenance_Tool_ExportCSV": "Eksport CSV", "Maintenance_Tool_ExportCSV": "Eksport CSV",
"Maintenance_Tool_ExportCSV_noti": "Eksport CSV", "Maintenance_Tool_ExportCSV_noti": "Eksport CSV",
"Maintenance_Tool_ExportCSV_noti_text": "Jesteś pewien, że chcesz wygenerować plik CSV?", "Maintenance_Tool_ExportCSV_noti_text": "Jesteś pewien, że chcesz wygenerować plik CSV?",
@@ -406,9 +410,13 @@
"Maintenance_Tool_ImportCSV_noti": "Import CSV", "Maintenance_Tool_ImportCSV_noti": "Import CSV",
"Maintenance_Tool_ImportCSV_noti_text": "Jesteś pewien że chcesz zaimportować plik CSV? Nadpisze to wszystkie urządzenie w bazie danych.", "Maintenance_Tool_ImportCSV_noti_text": "Jesteś pewien że chcesz zaimportować plik CSV? Nadpisze to wszystkie urządzenie w bazie danych.",
"Maintenance_Tool_ImportCSV_text": "Przed użyciem tej funkcji, wykonaj proszę kopię zapasową. Zaimportuj plik CSV (wartości oddzielone przecinkami) zawierający listę Urządzeń, w tym Relacji Sieci między sieciowymi węzłami i podłączonymi urządzeniami. By to zrobić umieść plik CSV nazwany <b>devices.csv</b> do twojego folderu <b>/config</b>.", "Maintenance_Tool_ImportCSV_text": "Przed użyciem tej funkcji, wykonaj proszę kopię zapasową. Zaimportuj plik CSV (wartości oddzielone przecinkami) zawierający listę Urządzeń, w tym Relacji Sieci między sieciowymi węzłami i podłączonymi urządzeniami. By to zrobić umieść plik CSV nazwany <b>devices.csv</b> do twojego folderu <b>/config</b>.",
"Maintenance_Tool_ImportConfig_noti": "",
"Maintenance_Tool_ImportPastedCSV": "", "Maintenance_Tool_ImportPastedCSV": "",
"Maintenance_Tool_ImportPastedCSV_noti_text": "", "Maintenance_Tool_ImportPastedCSV_noti_text": "",
"Maintenance_Tool_ImportPastedCSV_text": "", "Maintenance_Tool_ImportPastedCSV_text": "",
"Maintenance_Tool_ImportPastedConfig": "",
"Maintenance_Tool_ImportPastedConfig_noti_text": "",
"Maintenance_Tool_ImportPastedConfig_text": "",
"Maintenance_Tool_arpscansw": "Przełącz Skan-arp (wł/wył)", "Maintenance_Tool_arpscansw": "Przełącz Skan-arp (wł/wył)",
"Maintenance_Tool_arpscansw_noti": "Przełącz Skan-arp na włączony lub wyłączony", "Maintenance_Tool_arpscansw_noti": "Przełącz Skan-arp na włączony lub wyłączony",
"Maintenance_Tool_arpscansw_noti_text": "Kiedy skan zostanie przełączony na wył zostaje wyłączony do czasu ponownej aktywacji.", "Maintenance_Tool_arpscansw_noti_text": "Kiedy skan zostanie przełączony na wył zostaje wyłączony do czasu ponownej aktywacji.",
@@ -710,6 +718,7 @@
"general_event_title": "Wykonywanie wydarzeń ad-hoc", "general_event_title": "Wykonywanie wydarzeń ad-hoc",
"go_to_node_event_icon": "", "go_to_node_event_icon": "",
"go_to_node_event_tooltip": "", "go_to_node_event_tooltip": "",
"new_version_available": "",
"report_guid": "Przewodnik powiadomień:", "report_guid": "Przewodnik powiadomień:",
"report_guid_missing": "Linkowane powiadomienie nie znaleziono. Jest małe opóźnienie między wysłaniem powiadomienia a ich dostępnością. Odśwież stronę i cache za kilka sekund. Możliwe też że zaznaczone powiadomienie zostało usunięte podczas konserwacji tak jak określono w ustawieniu <code>DBCLNP_NOTIFI_HIST</code>. <br/><br/>Zamiast tego wyświetlane jest najnowsze powiadomienie. Brakujące powiadomienie ma następujące GUID:", "report_guid_missing": "Linkowane powiadomienie nie znaleziono. Jest małe opóźnienie między wysłaniem powiadomienia a ich dostępnością. Odśwież stronę i cache za kilka sekund. Możliwe też że zaznaczone powiadomienie zostało usunięte podczas konserwacji tak jak określono w ustawieniu <code>DBCLNP_NOTIFI_HIST</code>. <br/><br/>Zamiast tego wyświetlane jest najnowsze powiadomienie. Brakujące powiadomienie ma następujące GUID:",
"report_select_format": "Wybierz Format:", "report_select_format": "Wybierz Format:",

View File

@@ -138,8 +138,8 @@
"DevDetail_Shortcut_DownAlerts": "Alertas para baixo", "DevDetail_Shortcut_DownAlerts": "Alertas para baixo",
"DevDetail_Shortcut_Presence": "Presença", "DevDetail_Shortcut_Presence": "Presença",
"DevDetail_Shortcut_Sessions": "Sessões", "DevDetail_Shortcut_Sessions": "Sessões",
"DevDetail_Tab_Details": "<i class=\"fa fa-info-circle\"></i> Detalhes", "DevDetail_Tab_Details": "Detalhes",
"DevDetail_Tab_Events": "<i class=\"fa fa-bolt\"></i> Eventos", "DevDetail_Tab_Events": "Eventos",
"DevDetail_Tab_EventsTableDate": "Data", "DevDetail_Tab_EventsTableDate": "Data",
"DevDetail_Tab_EventsTableEvent": "Tipo de evento", "DevDetail_Tab_EventsTableEvent": "Tipo de evento",
"DevDetail_Tab_EventsTableIP": "IP", "DevDetail_Tab_EventsTableIP": "IP",
@@ -155,9 +155,9 @@
"DevDetail_Tab_NmapTableText": "Configure uma programação em <a href=\"/settings.php#NMAP_ACTIVE\">Configurações</a>", "DevDetail_Tab_NmapTableText": "Configure uma programação em <a href=\"/settings.php#NMAP_ACTIVE\">Configurações</a>",
"DevDetail_Tab_NmapTableTime": "Tempo", "DevDetail_Tab_NmapTableTime": "Tempo",
"DevDetail_Tab_Plugins": "<i class=\"fa fa-plug\"> </i> Plugins", "DevDetail_Tab_Plugins": "<i class=\"fa fa-plug\"> </i> Plugins",
"DevDetail_Tab_Presence": "<i class=\"fa fa-calendar\"></i> Presença", "DevDetail_Tab_Presence": "Presença",
"DevDetail_Tab_Sessions": "<i class=\"fa fa-list-ol\"></i> Sessões", "DevDetail_Tab_Sessions": "Sessões",
"DevDetail_Tab_Tools": "<i class=\"fa fa-screwdriver-wrench\"></i> Ferramentas", "DevDetail_Tab_Tools": "Ferramentas",
"DevDetail_Tab_Tools_Internet_Info_Description": "A ferramenta info Internet exibe informações sobre a conexão com a Internet, como endereço IP, cidade, país, código de área e fuso horário.", "DevDetail_Tab_Tools_Internet_Info_Description": "A ferramenta info Internet exibe informações sobre a conexão com a Internet, como endereço IP, cidade, país, código de área e fuso horário.",
"DevDetail_Tab_Tools_Internet_Info_Error": "Um erro ocorreu", "DevDetail_Tab_Tools_Internet_Info_Error": "Um erro ocorreu",
"DevDetail_Tab_Tools_Internet_Info_Start": "Iniciar informações da Internet", "DevDetail_Tab_Tools_Internet_Info_Start": "Iniciar informações da Internet",
@@ -242,11 +242,12 @@
"Device_Tablelenght": "Mostrar entradas do _MENU_", "Device_Tablelenght": "Mostrar entradas do _MENU_",
"Device_Tablelenght_all": "Todos", "Device_Tablelenght_all": "Todos",
"Device_Title": "Dispositivos", "Device_Title": "Dispositivos",
"Devices_Filters": "",
"Donations_Others": "Outros", "Donations_Others": "Outros",
"Donations_Platforms": "Plataformas de patrocinadores", "Donations_Platforms": "Plataformas de patrocinadores",
"Donations_Text": "Ei 👋! </br> Obrigado por clicar neste item de menu 😅 </br> </br> Estou tentando coletar algumas doações para melhorar o software. Além disso, isso me ajudaria a não ficar exausto, para que eu pudesse oferecer suporte a este aplicativo por mais tempo. Qualquer pequeno patrocínio (recorrente ou não) me faz querer colocar mais esforço neste aplicativo. </br> Eu adoraria encurtar minha semana de trabalho e no tempo restante focar totalmente no NetAlertX. Você obteria mais funcionalidades, um aplicativo mais sofisticado e menos bugs. </br> </br> Obrigado pela leitura - sou grato por qualquer apoio ❤🙏 </br> </br> TL;DR: Ao me apoiar, você obtém: </br> </br> <ul> <li>Atualizações regulares para manter seus dados e sua família seguros 🔄</li><li>Menos bugs 🐛🔫</li><li>Melhor e mais funcionalidade</li><li>Eu não fico exausto 🔥🤯</li><li>Lançamentos menos apressados 💨</li><li>Documentos melhores📚</li><li>Suporte melhor e mais rápido com problemas 🆘</li></ul> </br> 📧 Envie-me um e-mail para <a href='mailto:jokob@duck.com?subject=NetAlertX'>jokob@duck.com</a> se quiser entrar em contato ou se devo adicionar outras plataformas de patrocínio. </br>", "Donations_Text": "Ei 👋! </br> Obrigado por clicar neste item de menu 😅 </br> </br> Estou tentando coletar algumas doações para melhorar o software. Além disso, isso me ajudaria a não ficar exausto, para que eu pudesse oferecer suporte a este aplicativo por mais tempo. Qualquer pequeno patrocínio (recorrente ou não) me faz querer colocar mais esforço neste aplicativo. </br> Eu adoraria encurtar minha semana de trabalho e no tempo restante focar totalmente no NetAlertX. Você obteria mais funcionalidades, um aplicativo mais sofisticado e menos bugs. </br> </br> Obrigado pela leitura - sou grato por qualquer apoio ❤🙏 </br> </br> TL;DR: Ao me apoiar, você obtém: </br> </br> <ul> <li>Atualizações regulares para manter seus dados e sua família seguros 🔄</li><li>Menos bugs 🐛🔫</li><li>Melhor e mais funcionalidade</li><li>Eu não fico exausto 🔥🤯</li><li>Lançamentos menos apressados 💨</li><li>Documentos melhores📚</li><li>Suporte melhor e mais rápido com problemas 🆘</li></ul> </br> 📧 Envie-me um e-mail para <a href='mailto:jokob@duck.com?subject=NetAlertX'>jokob@duck.com</a> se quiser entrar em contato ou se devo adicionar outras plataformas de patrocínio. </br>",
"Donations_Title": "Doações", "Donations_Title": "Doações",
"ENABLE_PLUGINS_description": "Ativa a funcionalidade de <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins\">plugins</a>. Carregar plug-ins requer mais recursos de hardware, então você pode querer desativá-los em sistemas de baixa potência.", "ENABLE_PLUGINS_description": "Ativa a funcionalidade de <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">plugins</a>. Carregar plug-ins requer mais recursos de hardware, então você pode querer desativá-los em sistemas de baixa potência.",
"ENABLE_PLUGINS_name": "Habilitar plug-ins", "ENABLE_PLUGINS_name": "Habilitar plug-ins",
"ENCRYPTION_KEY_description": "", "ENCRYPTION_KEY_description": "",
"ENCRYPTION_KEY_name": "", "ENCRYPTION_KEY_name": "",
@@ -327,6 +328,7 @@
"Gen_Upd_Fail": "A atualização falhou", "Gen_Upd_Fail": "A atualização falhou",
"Gen_Update": "Atualizar", "Gen_Update": "Atualizar",
"Gen_Update_Value": "Atualizar valor", "Gen_Update_Value": "Atualizar valor",
"Gen_ValidIcon": "",
"Gen_Warning": "Aviso", "Gen_Warning": "Aviso",
"Gen_Work_In_Progress": "Trabalho em andamento, um bom momento para enviar feedback em https://github.com/jokob-sk/NetAlertX/issues", "Gen_Work_In_Progress": "Trabalho em andamento, um bom momento para enviar feedback em https://github.com/jokob-sk/NetAlertX/issues",
"Gen_create_new_device": "", "Gen_create_new_device": "",
@@ -398,6 +400,8 @@
"Maintenance_Running_Version": "", "Maintenance_Running_Version": "",
"Maintenance_Status": "", "Maintenance_Status": "",
"Maintenance_Title": "", "Maintenance_Title": "",
"Maintenance_Tool_DownloadConfig": "",
"Maintenance_Tool_DownloadConfig_text": "",
"Maintenance_Tool_ExportCSV": "", "Maintenance_Tool_ExportCSV": "",
"Maintenance_Tool_ExportCSV_noti": "", "Maintenance_Tool_ExportCSV_noti": "",
"Maintenance_Tool_ExportCSV_noti_text": "", "Maintenance_Tool_ExportCSV_noti_text": "",
@@ -406,9 +410,13 @@
"Maintenance_Tool_ImportCSV_noti": "", "Maintenance_Tool_ImportCSV_noti": "",
"Maintenance_Tool_ImportCSV_noti_text": "", "Maintenance_Tool_ImportCSV_noti_text": "",
"Maintenance_Tool_ImportCSV_text": "", "Maintenance_Tool_ImportCSV_text": "",
"Maintenance_Tool_ImportConfig_noti": "",
"Maintenance_Tool_ImportPastedCSV": "", "Maintenance_Tool_ImportPastedCSV": "",
"Maintenance_Tool_ImportPastedCSV_noti_text": "", "Maintenance_Tool_ImportPastedCSV_noti_text": "",
"Maintenance_Tool_ImportPastedCSV_text": "", "Maintenance_Tool_ImportPastedCSV_text": "",
"Maintenance_Tool_ImportPastedConfig": "",
"Maintenance_Tool_ImportPastedConfig_noti_text": "",
"Maintenance_Tool_ImportPastedConfig_text": "",
"Maintenance_Tool_arpscansw": "", "Maintenance_Tool_arpscansw": "",
"Maintenance_Tool_arpscansw_noti": "", "Maintenance_Tool_arpscansw_noti": "",
"Maintenance_Tool_arpscansw_noti_text": "", "Maintenance_Tool_arpscansw_noti_text": "",
@@ -710,6 +718,7 @@
"general_event_title": "", "general_event_title": "",
"go_to_node_event_icon": "", "go_to_node_event_icon": "",
"go_to_node_event_tooltip": "", "go_to_node_event_tooltip": "",
"new_version_available": "",
"report_guid": "", "report_guid": "",
"report_guid_missing": "", "report_guid_missing": "",
"report_select_format": "", "report_select_format": "",

View File

@@ -1,7 +1,7 @@
{ {
"API_CUSTOM_SQL_description": "Вы можете указать собственный SQL-запрос, который будет генерировать файл JSON, а затем предоставлять его через конечную точку файла <a href=\"/api/table_custom_endpoint.json\" target=\"_blank\"><code>table_custom_endpoint.json</code></a>.", "API_CUSTOM_SQL_description": "Вы можете указать собственный SQL-запрос, который будет генерировать файл JSON, а затем предоставлять его через конечную точку файла <a href=\"/api/table_custom_endpoint.json\" target=\"_blank\"><code>table_custom_endpoint.json</code></a>.",
"API_CUSTOM_SQL_name": "Пользовательская конечная точка", "API_CUSTOM_SQL_name": "Пользовательская конечная точка",
"API_TOKEN_description": "API-токен для защиты соединения. Вы можете сгенерировать его или ввести любое значение. Он отправляется в заголовке запроса. Используется в плагине <code>SYNC</code> и GraphQL сервере.", "API_TOKEN_description": "API-токен для безопасной связи. Сгенерируйте его или введите любое значение. Он передается в заголовке запроса и используется в плагине <code>SYNC</code>, сервере GraphQL и других конечных точках API. Вы можете использовать конечные точки API для создания пользовательских интеграций, как описано в <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/API.md\" target=\"_blank\">документации по API</a>.",
"API_TOKEN_name": "API token", "API_TOKEN_name": "API token",
"API_display_name": "API", "API_display_name": "API",
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>", "API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
@@ -48,7 +48,7 @@
"BackDevices_DBTools_ImportCSVError": "Не удалось импортировать файл CSV. Убедитесь, что формат правильный.", "BackDevices_DBTools_ImportCSVError": "Не удалось импортировать файл CSV. Убедитесь, что формат правильный.",
"BackDevices_DBTools_ImportCSVMissing": "CSV-файл не найден в<b>/config/devices.csv.</b>", "BackDevices_DBTools_ImportCSVMissing": "CSV-файл не найден в<b>/config/devices.csv.</b>",
"BackDevices_DBTools_Purge": "Самые старые резервные копии были удалены", "BackDevices_DBTools_Purge": "Самые старые резервные копии были удалены",
"BackDevices_DBTools_UpdDev": "Устройство успешно обновлено", "BackDevices_DBTools_UpdDev": "Устройство успешно обновлено. При выполнении сканирования может потребоваться некоторое время для перезагрузки основного списка устройств.",
"BackDevices_DBTools_UpdDevError": "Ошибка обновления устройства", "BackDevices_DBTools_UpdDevError": "Ошибка обновления устройства",
"BackDevices_DBTools_Upgrade": "База данных успешно обновлена", "BackDevices_DBTools_Upgrade": "База данных успешно обновлена",
"BackDevices_DBTools_UpgradeError": "Обновление базы данных не удалось", "BackDevices_DBTools_UpgradeError": "Обновление базы данных не удалось",
@@ -138,8 +138,8 @@
"DevDetail_Shortcut_DownAlerts": "Оповещения о сбое", "DevDetail_Shortcut_DownAlerts": "Оповещения о сбое",
"DevDetail_Shortcut_Presence": "Присутствие", "DevDetail_Shortcut_Presence": "Присутствие",
"DevDetail_Shortcut_Sessions": "Сеансы", "DevDetail_Shortcut_Sessions": "Сеансы",
"DevDetail_Tab_Details": "<i class=\"fa fa-info-circle\"></i> Детали", "DevDetail_Tab_Details": "Детали",
"DevDetail_Tab_Events": "<i class=\"fa fa-bolt\"></i> События", "DevDetail_Tab_Events": "События",
"DevDetail_Tab_EventsTableDate": "Дата", "DevDetail_Tab_EventsTableDate": "Дата",
"DevDetail_Tab_EventsTableEvent": "Тип события", "DevDetail_Tab_EventsTableEvent": "Тип события",
"DevDetail_Tab_EventsTableIP": "IP", "DevDetail_Tab_EventsTableIP": "IP",
@@ -154,10 +154,10 @@
"DevDetail_Tab_NmapTableState": "Состояние", "DevDetail_Tab_NmapTableState": "Состояние",
"DevDetail_Tab_NmapTableText": "Настройте расписание в <a href=\"/settings.php#NMAP_ACTIVE\">Настройки</a>", "DevDetail_Tab_NmapTableText": "Настройте расписание в <a href=\"/settings.php#NMAP_ACTIVE\">Настройки</a>",
"DevDetail_Tab_NmapTableTime": "Время", "DevDetail_Tab_NmapTableTime": "Время",
"DevDetail_Tab_Plugins": "<i class=\"fa fa-plug\"></i> Плагины", "DevDetail_Tab_Plugins": "Плагины",
"DevDetail_Tab_Presence": "<i class=\"fa fa-calendar\"></i> Присутствие", "DevDetail_Tab_Presence": "Присутствие",
"DevDetail_Tab_Sessions": "<i class=\"fa fa-list-ol\"></i> Сеансы", "DevDetail_Tab_Sessions": "Сеансы",
"DevDetail_Tab_Tools": "<i class=\"fa fa-screwdriver-wrench\"></i> Инструменты", "DevDetail_Tab_Tools": "Инструменты",
"DevDetail_Tab_Tools_Internet_Info_Description": "Инструмент «Информация об Интернете» отображает информацию о подключении к Интернету, такую как IP-адрес, город, страна, код города и часовой пояс.", "DevDetail_Tab_Tools_Internet_Info_Description": "Инструмент «Информация об Интернете» отображает информацию о подключении к Интернету, такую как IP-адрес, город, страна, код города и часовой пояс.",
"DevDetail_Tab_Tools_Internet_Info_Error": "Произошла ошибка", "DevDetail_Tab_Tools_Internet_Info_Error": "Произошла ошибка",
"DevDetail_Tab_Tools_Internet_Info_Start": "Показать инфо об Интернете", "DevDetail_Tab_Tools_Internet_Info_Start": "Показать инфо об Интернете",
@@ -242,14 +242,15 @@
"Device_Tablelenght": "Показать _MENU_ записей", "Device_Tablelenght": "Показать _MENU_ записей",
"Device_Tablelenght_all": "Все", "Device_Tablelenght_all": "Все",
"Device_Title": "Устройства", "Device_Title": "Устройства",
"Devices_Filters": "Фильтры",
"Donations_Others": "Другие", "Donations_Others": "Другие",
"Donations_Platforms": "Спонсорские платформы", "Donations_Platforms": "Спонсорские платформы",
"Donations_Text": "Привет 👋! </br> Спасибо, что нажали на этот пункт меню 😅 </br> </br> Я пытаюсь собрать пожертвования, чтобы сделать ваше программное обеспечение лучше. Кроме того, это поможет мне не перегореть, и я смогу дольше поддерживать это приложение. Любое небольшое спонсорство (периодическое или нет) вызывает у меня желание приложить больше усилий к этому приложению. </br> Мне бы хотелось сократить свою рабочую неделю и в оставшееся время полностью сосредоточиться на NetAlertX. Вы получите больше функциональности, более усовершенствованное приложение и меньше ошибок. </br> </br> Спасибо за прочтение буду благодарен за любую поддержку❤🙏 </br> </br> TL;DR: Поддержав меня, вы получаете: </br> </br> <ul><li>Регулярные обновления для обеспечения безопасности ваших данных и семьи 🔄</li><li>Меньше ошибок 🐛🔫</li><li>Лучшую функциональность➕</li><li>Я не выгораю 🔥🤯</li><li>Меньше поспешных релизов 💨</li><li>Лучшая документация📚</li><li>Быстрее и лучше поддержка по вопросам 🆘</li></ul> </br> 📧Напишите мне на <a href='mailto:jokob@duck.com?subject=NetAlertX'>jokob@duck.com</a> если вы хотите связаться или если следует добавить другие спонсорские платформы. </br>", "Donations_Text": "Привет 👋! </br> Спасибо, что нажали на этот пункт меню 😅 </br> </br> Я пытаюсь собрать пожертвования, чтобы сделать ваше программное обеспечение лучше. Кроме того, это поможет мне не перегореть, и я смогу дольше поддерживать это приложение. Любое небольшое спонсорство (периодическое или нет) вызывает у меня желание приложить больше усилий к этому приложению. </br> Мне бы хотелось сократить свою рабочую неделю и в оставшееся время полностью сосредоточиться на NetAlertX. Вы получите больше функциональности, более усовершенствованное приложение и меньше ошибок. </br> </br> Спасибо за прочтение буду благодарен за любую поддержку❤🙏 </br> </br> TL;DR: Поддержав меня, вы получаете: </br> </br> <ul><li>Регулярные обновления для обеспечения безопасности ваших данных и семьи 🔄</li><li>Меньше ошибок 🐛🔫</li><li>Лучшую функциональность➕</li><li>Я не выгораю 🔥🤯</li><li>Меньше поспешных релизов 💨</li><li>Лучшая документация📚</li><li>Быстрее и лучше поддержка по вопросам 🆘</li></ul> </br> 📧Напишите мне на <a href='mailto:jokob@duck.com?subject=NetAlertX'>jokob@duck.com</a> если вы хотите связаться или если следует добавить другие спонсорские платформы. </br>",
"Donations_Title": "Пожертвования", "Donations_Title": "Пожертвования",
"ENABLE_PLUGINS_description": "Включает функциональность <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins\">плагинов.</a> Загрузка плагинов требует больше аппаратных ресурсов, поэтому вы можете отключить их в маломощной системе.", "ENABLE_PLUGINS_description": "Включает функциональность <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">плагинов.</a> Загрузка плагинов требует больше аппаратных ресурсов, поэтому вы можете отключить их в маломощной системе.",
"ENABLE_PLUGINS_name": "Разрешить плагины", "ENABLE_PLUGINS_name": "Разрешить плагины",
"ENCRYPTION_KEY_description": "", "ENCRYPTION_KEY_description": "Ключ шифрования данных.",
"ENCRYPTION_KEY_name": "", "ENCRYPTION_KEY_name": "Ключ шифрования",
"Email_display_name": "Эл. почта", "Email_display_name": "Эл. почта",
"Email_icon": "<i class=\"fa fa-at\"></i>", "Email_icon": "<i class=\"fa fa-at\"></i>",
"Events_Loading": "Загрузка...", "Events_Loading": "Загрузка...",
@@ -285,7 +286,7 @@
"Events_Tablelenght": "Показать _MENU_ записей", "Events_Tablelenght": "Показать _MENU_ записей",
"Events_Tablelenght_all": "Все", "Events_Tablelenght_all": "Все",
"Events_Title": "События", "Events_Title": "События",
"GRAPHQL_PORT_description": "Номер порта сервера GraphQL.", "GRAPHQL_PORT_description": "Номер порта сервера GraphQL. Убедитесь, что порт уникален для всех ваших приложений на этом хосте и экземпляров NetAlertX.",
"GRAPHQL_PORT_name": "Порт GraphQL", "GRAPHQL_PORT_name": "Порт GraphQL",
"Gen_Action": "Действия", "Gen_Action": "Действия",
"Gen_Add": "Добавить", "Gen_Add": "Добавить",
@@ -327,10 +328,11 @@
"Gen_Upd_Fail": "Не удалось обновить", "Gen_Upd_Fail": "Не удалось обновить",
"Gen_Update": "Обновление", "Gen_Update": "Обновление",
"Gen_Update_Value": "Обновить значение", "Gen_Update_Value": "Обновить значение",
"Gen_ValidIcon": "",
"Gen_Warning": "Предупреждение", "Gen_Warning": "Предупреждение",
"Gen_Work_In_Progress": "Работа продолжается, самое время оставить отзыв на https://github.com/jokob-sk/NetAlertX/issues", "Gen_Work_In_Progress": "Работа продолжается, самое время оставить отзыв на https://github.com/jokob-sk/NetAlertX/issues",
"Gen_create_new_device": "Новое устройство", "Gen_create_new_device": "Новое устройство",
"Gen_create_new_device_info": "Устройства обычно обнаруживаются с помощью <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins\">плагинов</a>. Однако в некоторых случаях вам может потребоваться добавить устройства вручную. Для изучения конкретных сценариев ознакомьтесь с документацией <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/REMOTE_NETWORKS.md\">Remote Networks</a>.", "Gen_create_new_device_info": "Устройства обычно обнаруживаются с помощью <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">плагинов</a>. Однако в некоторых случаях вам может потребоваться добавить устройства вручную. Для изучения конкретных сценариев ознакомьтесь с документацией <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/REMOTE_NETWORKS.md\">Remote Networks</a>.",
"General_display_name": "Главное", "General_display_name": "Главное",
"General_icon": "<i class=\"fa fa-gears\"></i>", "General_icon": "<i class=\"fa fa-gears\"></i>",
"HRS_TO_KEEP_NEWDEV_description": "Это настройка обслуживания <b>УДАЛЕНИЕ устройств</b>. Если этот параметр включен (<code>0</code> отключен), устройства, помеченные как <b>Новое устройство</b>, будут удалены, если время их <b>Первого сеанса</b> было старше указанных в этой настройке часов. Используйте этот параметр, если вы хотите автоматически удалять <b>Новые устройства</b> через <code>X</code> часов.", "HRS_TO_KEEP_NEWDEV_description": "Это настройка обслуживания <b>УДАЛЕНИЕ устройств</b>. Если этот параметр включен (<code>0</code> отключен), устройства, помеченные как <b>Новое устройство</b>, будут удалены, если время их <b>Первого сеанса</b> было старше указанных в этой настройке часов. Используйте этот параметр, если вы хотите автоматически удалять <b>Новые устройства</b> через <code>X</code> часов.",
@@ -373,7 +375,7 @@
"HelpFAQ_Cat_Presence_401_head": "Устройство отображается как присутствующее, хотя оно находится в режиме «Оффлайн».", "HelpFAQ_Cat_Presence_401_head": "Устройство отображается как присутствующее, хотя оно находится в режиме «Оффлайн».",
"HelpFAQ_Cat_Presence_401_text": "В этом случае у вас есть возможность удалить события для соответствующего устройства (просмотр подробностей). Другой вариант — включить устройство и подождать, пока NetAlertX распознает устройство как «онлайн» при следующем сканировании, а затем просто снова выключить устройство. Теперь NetAlertX должен правильно отмечать состояние устройства в базе данных при следующем сканировании.", "HelpFAQ_Cat_Presence_401_text": "В этом случае у вас есть возможность удалить события для соответствующего устройства (просмотр подробностей). Другой вариант — включить устройство и подождать, пока NetAlertX распознает устройство как «онлайн» при следующем сканировании, а затем просто снова выключить устройство. Теперь NetAlertX должен правильно отмечать состояние устройства в базе данных при следующем сканировании.",
"HelpFAQ_Title": "Помощь / FAQ", "HelpFAQ_Title": "Помощь / FAQ",
"LOADED_PLUGINS_description": "Какие плагины загружать. Добавление плагинов может замедлить работу приложения. Подробнее о том, какие плагины необходимо включить, их типах или параметрах сканирования, читайте в <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins#readme \">Документация по плагинам</a>. Выгруженные плагины потеряют ваши настройки. Можно выгрузить только <code>отключенные</code> плагины.", "LOADED_PLUGINS_description": "Какие плагины загружать. Добавление плагинов может замедлить работу приложения. Подробнее о том, какие плагины необходимо включить, их типах или параметрах сканирования, читайте в <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md \">Документация по плагинам</a>. Выгруженные плагины потеряют ваши настройки. Можно выгрузить только <code>отключенные</code> плагины.",
"LOADED_PLUGINS_name": "Загруженные плагины", "LOADED_PLUGINS_name": "Загруженные плагины",
"LOG_LEVEL_description": "Этот параметр включит более подробное ведение журнала. Полезно для отладки записи событий в базу данных.", "LOG_LEVEL_description": "Этот параметр включит более подробное ведение журнала. Полезно для отладки записи событий в базу данных.",
"LOG_LEVEL_name": "Распечатать дополнительный журнал", "LOG_LEVEL_name": "Распечатать дополнительный журнал",
@@ -398,17 +400,23 @@
"Maintenance_Running_Version": "Установленная версия", "Maintenance_Running_Version": "Установленная версия",
"Maintenance_Status": "Статус", "Maintenance_Status": "Статус",
"Maintenance_Title": "Инструменты обслуживания", "Maintenance_Title": "Инструменты обслуживания",
"Maintenance_Tool_ExportCSV": "Экспорт CSV", "Maintenance_Tool_DownloadConfig": "Экспорт настроек",
"Maintenance_Tool_ExportCSV_noti": "Экспорт CSV", "Maintenance_Tool_DownloadConfig_text": "Загрузите полную резервную копию конфигурации настроек, хранящуюся в файле <code>app.conf</code>.",
"Maintenance_Tool_ExportCSV": "Экспорт устройств (csv)",
"Maintenance_Tool_ExportCSV_noti": "Экспорт устройств (csv)",
"Maintenance_Tool_ExportCSV_noti_text": "Вы уверены, что хотите создать файл CSV?", "Maintenance_Tool_ExportCSV_noti_text": "Вы уверены, что хотите создать файл CSV?",
"Maintenance_Tool_ExportCSV_text": "Создайте файл CSV (значения, разделенные запятыми), содержащий список устройств, включая сетевые отношения между сетевыми узлами и подключенными устройствами. Вы также можете открыть этот URL-адрес <code> URL Вашего NetAlertX/php/server/devices.php?action=ExportCSV</code> или включить плагин <a href=\"settings.php#CSVBCKP_header\">Резервное копирование в CSV</a>.", "Maintenance_Tool_ExportCSV_text": "Создайте файл CSV (значения, разделенные запятыми), содержащий список устройств, включая сетевые отношения между сетевыми узлами и подключенными устройствами. Вы также можете открыть этот URL-адрес <code> URL Вашего NetAlertX/php/server/devices.php?action=ExportCSV</code> или включить плагин <a href=\"settings.php#CSVBCKP_header\">Резервное копирование в CSV</a>.",
"Maintenance_Tool_ImportCSV": "Импорт CSV", "Maintenance_Tool_ImportCSV": "Импорт устройств (csv)",
"Maintenance_Tool_ImportCSV_noti": "Импорт CSV", "Maintenance_Tool_ImportCSV_noti": "Импорт устройств (csv)",
"Maintenance_Tool_ImportCSV_noti_text": "Вы уверены, что хотите импортировать файл CSV? Это полностью <b>перезапишет</b> устройства в вашей базе данных.", "Maintenance_Tool_ImportCSV_noti_text": "Вы уверены, что хотите импортировать файл CSV? Это полностью <b>перезапишет</b> устройства в вашей базе данных.",
"Maintenance_Tool_ImportCSV_text": "Прежде чем использовать эту функцию, сделайте резервную копию. Импортируйте файл CSV (значения, разделенные запятыми), содержащий список устройств, включая сетевые отношения между сетевыми узлами и подключенными устройствами. Для этого поместите файл CSV с именем <b>devices.csv</b> в папку <b>/config</b>.", "Maintenance_Tool_ImportCSV_text": "Прежде чем использовать эту функцию, сделайте резервную копию. Импортируйте файл CSV (значения, разделенные запятыми), содержащий список устройств, включая сетевые отношения между сетевыми узлами и подключенными устройствами. Для этого поместите файл CSV с именем <b>devices.csv</b> в папку <b>/config</b>.",
"Maintenance_Tool_ImportPastedCSV": "Импорт CSV (вставка)", "Maintenance_Tool_ImportConfig_noti": "Импорт настроек (app.conf)",
"Maintenance_Tool_ImportPastedCSV": "Импорт устройств CSV (вставка)",
"Maintenance_Tool_ImportPastedCSV_noti_text": "Вы уверены, что хотите импортировать вставленный CSV? Это полностью <b>перезапишет</b> устройства в вашей базе данных.", "Maintenance_Tool_ImportPastedCSV_noti_text": "Вы уверены, что хотите импортировать вставленный CSV? Это полностью <b>перезапишет</b> устройства в вашей базе данных.",
"Maintenance_Tool_ImportPastedCSV_text": "Перед использованием этой функции, пожалуйста, создайте резервную копию. Импортируйте файл формата CSV (значения, разделенные запятыми), содержащий список устройств, включая сетевые связи между узлами сети и подключенными устройствами.", "Maintenance_Tool_ImportPastedCSV_text": "Перед использованием этой функции, пожалуйста, создайте резервную копию. Импортируйте файл формата CSV (значения, разделенные запятыми), содержащий список устройств, включая сетевые связи между узлами сети и подключенными устройствами.",
"Maintenance_Tool_ImportPastedConfig": "Импорт настроек (вставка)",
"Maintenance_Tool_ImportPastedConfig_noti_text": "Вы уверены, что хотите импортировать вставленные настройки конфигурации? Это полностью <b>перезапишет</b> файл <code>app.conf</code>.",
"Maintenance_Tool_ImportPastedConfig_text": "Импорт файла <code>app.conf</code>, содержащего все настройки приложения. Возможно, вам захочется сначала загрузить текущий файл <code>app.conf</code> с помощью команды <b>Экспорт настроек</b>.",
"Maintenance_Tool_arpscansw": "Переключить arp-скан (ВКЛ./ВЫКЛ.)", "Maintenance_Tool_arpscansw": "Переключить arp-скан (ВКЛ./ВЫКЛ.)",
"Maintenance_Tool_arpscansw_noti": "Включить или выключить arp-скан", "Maintenance_Tool_arpscansw_noti": "Включить или выключить arp-скан",
"Maintenance_Tool_arpscansw_noti_text": "Когда сканирование было выключено, оно остается выключенным до тех пор, пока не будет активировано снова.", "Maintenance_Tool_arpscansw_noti_text": "Когда сканирование было выключено, оно остается выключенным до тех пор, пока не будет активировано снова.",
@@ -483,13 +491,13 @@
"Maintenance_lang_selector_empty": "Выберите язык", "Maintenance_lang_selector_empty": "Выберите язык",
"Maintenance_lang_selector_lable": "Выбрать язык", "Maintenance_lang_selector_lable": "Выбрать язык",
"Maintenance_lang_selector_text": "Изменение происходит на стороне клиента, поэтому оно влияет только на текущий браузер.", "Maintenance_lang_selector_text": "Изменение происходит на стороне клиента, поэтому оно влияет только на текущий браузер.",
"Maintenance_new_version": "🆕 Доступна новая версия. Ознакомьтесь с <a href=\"https://github.com/jokob-sk/NetAlertX/releases\" target=\"_blank\">примечаниями к выпуску</a>.", "Maintenance_new_version": "Доступна новая версия. Ознакомьтесь с <a href=\"https://github.com/jokob-sk/NetAlertX/releases\" target=\"_blank\">примечаниями к выпуску</a>.",
"Maintenance_themeselector_apply": "Применить", "Maintenance_themeselector_apply": "Применить",
"Maintenance_themeselector_empty": "Выбрать скин", "Maintenance_themeselector_empty": "Выбрать скин",
"Maintenance_themeselector_lable": "Выбрать Скин", "Maintenance_themeselector_lable": "Выбрать Скин",
"Maintenance_themeselector_text": "Изменение происходит на стороне сервера, поэтому оно затрагивает все используемые устройства.", "Maintenance_themeselector_text": "Изменение происходит на стороне сервера, поэтому оно затрагивает все используемые устройства.",
"Maintenance_version": "Обновления приложения", "Maintenance_version": "Обновления приложения",
"NETWORK_DEVICE_TYPES_description": "Какие типы устройств разрешено использовать в качестве сетевых устройств в представлении «Сеть». Тип устройства должен точно соответствовать настройке <code>Тип</code> на конкретном устройстве в разделе «Сведения об устройстве». Не удаляйте существующие типы, а только добавляйте новые.", "NETWORK_DEVICE_TYPES_description": "Какие типы устройств разрешено использовать в качестве сетевых устройств в представлении Сеть. Тип устройства должен точно соответствовать настройке <code>Type</code> для конкретного устройства в сведениях об устройстве. Добавьте его на устройство с помощью кнопки <code>+</code>. Не удаляйте существующие типы, а только добавляйте новые.",
"NETWORK_DEVICE_TYPES_name": "Типы сетевых устройств", "NETWORK_DEVICE_TYPES_name": "Типы сетевых устройств",
"Navigation_About": "О NetAlertX", "Navigation_About": "О NetAlertX",
"Navigation_Devices": "Устройства", "Navigation_Devices": "Устройства",
@@ -710,6 +718,7 @@
"general_event_title": "Выполнение специального события", "general_event_title": "Выполнение специального события",
"go_to_node_event_icon": "fa-square-up-right", "go_to_node_event_icon": "fa-square-up-right",
"go_to_node_event_tooltip": "Переход на страницу \"Сеть\" данного узла", "go_to_node_event_tooltip": "Переход на страницу \"Сеть\" данного узла",
"new_version_available": "Доступна новая версия.",
"report_guid": "Идентификатор уведомления:", "report_guid": "Идентификатор уведомления:",
"report_guid_missing": "Связанное уведомление не найдено. Между недавно отправленными уведомлениями и их доступностью существует небольшая задержка. Обновите страницу и кэшируйте ее через несколько секунд. Также возможно, что выбранное уведомление было удалено во время обслуживания, как указано в настройке <code>DBCLNP_NOTIFI_HIST</code>. <br/> <br/>Вместо этого отображается последнее уведомление. Отсутствующее уведомление имеет следующий GUID:", "report_guid_missing": "Связанное уведомление не найдено. Между недавно отправленными уведомлениями и их доступностью существует небольшая задержка. Обновите страницу и кэшируйте ее через несколько секунд. Также возможно, что выбранное уведомление было удалено во время обслуживания, как указано в настройке <code>DBCLNP_NOTIFI_HIST</code>. <br/> <br/>Вместо этого отображается последнее уведомление. Отсутствующее уведомление имеет следующий GUID:",
"report_select_format": "Выбрать формат:", "report_select_format": "Выбрать формат:",

View File

@@ -138,7 +138,7 @@
"DevDetail_Shortcut_DownAlerts": "", "DevDetail_Shortcut_DownAlerts": "",
"DevDetail_Shortcut_Presence": "", "DevDetail_Shortcut_Presence": "",
"DevDetail_Shortcut_Sessions": "Oturumlar", "DevDetail_Shortcut_Sessions": "Oturumlar",
"DevDetail_Tab_Details": "<i class=\"fa fa-info-circle\"></i> Detaylar", "DevDetail_Tab_Details": "Detaylar",
"DevDetail_Tab_Events": "", "DevDetail_Tab_Events": "",
"DevDetail_Tab_EventsTableDate": "Tarih", "DevDetail_Tab_EventsTableDate": "Tarih",
"DevDetail_Tab_EventsTableEvent": "", "DevDetail_Tab_EventsTableEvent": "",
@@ -156,7 +156,7 @@
"DevDetail_Tab_NmapTableTime": "Zaman", "DevDetail_Tab_NmapTableTime": "Zaman",
"DevDetail_Tab_Plugins": "", "DevDetail_Tab_Plugins": "",
"DevDetail_Tab_Presence": "", "DevDetail_Tab_Presence": "",
"DevDetail_Tab_Sessions": "<i class=\"fa fa-list-ol\"></i> Oturumlar", "DevDetail_Tab_Sessions": "Oturumlar",
"DevDetail_Tab_Tools": "", "DevDetail_Tab_Tools": "",
"DevDetail_Tab_Tools_Internet_Info_Description": "", "DevDetail_Tab_Tools_Internet_Info_Description": "",
"DevDetail_Tab_Tools_Internet_Info_Error": "Bir hata oluştu", "DevDetail_Tab_Tools_Internet_Info_Error": "Bir hata oluştu",
@@ -242,6 +242,7 @@
"Device_Tablelenght": "", "Device_Tablelenght": "",
"Device_Tablelenght_all": "", "Device_Tablelenght_all": "",
"Device_Title": "Cihazlar", "Device_Title": "Cihazlar",
"Devices_Filters": "",
"Donations_Others": "Diğerleri", "Donations_Others": "Diğerleri",
"Donations_Platforms": "", "Donations_Platforms": "",
"Donations_Text": "", "Donations_Text": "",
@@ -327,6 +328,7 @@
"Gen_Upd_Fail": "", "Gen_Upd_Fail": "",
"Gen_Update": "", "Gen_Update": "",
"Gen_Update_Value": "", "Gen_Update_Value": "",
"Gen_ValidIcon": "",
"Gen_Warning": "Uyarı", "Gen_Warning": "Uyarı",
"Gen_Work_In_Progress": "", "Gen_Work_In_Progress": "",
"Gen_create_new_device": "", "Gen_create_new_device": "",
@@ -398,6 +400,8 @@
"Maintenance_Running_Version": "Yüklenmiş sürüm", "Maintenance_Running_Version": "Yüklenmiş sürüm",
"Maintenance_Status": "Durum", "Maintenance_Status": "Durum",
"Maintenance_Title": "", "Maintenance_Title": "",
"Maintenance_Tool_DownloadConfig": "",
"Maintenance_Tool_DownloadConfig_text": "",
"Maintenance_Tool_ExportCSV": "", "Maintenance_Tool_ExportCSV": "",
"Maintenance_Tool_ExportCSV_noti": "", "Maintenance_Tool_ExportCSV_noti": "",
"Maintenance_Tool_ExportCSV_noti_text": "Bir CSV dosyası oluşturmak istediğinize emin misiniz?", "Maintenance_Tool_ExportCSV_noti_text": "Bir CSV dosyası oluşturmak istediğinize emin misiniz?",
@@ -406,9 +410,13 @@
"Maintenance_Tool_ImportCSV_noti": "", "Maintenance_Tool_ImportCSV_noti": "",
"Maintenance_Tool_ImportCSV_noti_text": "", "Maintenance_Tool_ImportCSV_noti_text": "",
"Maintenance_Tool_ImportCSV_text": "", "Maintenance_Tool_ImportCSV_text": "",
"Maintenance_Tool_ImportConfig_noti": "",
"Maintenance_Tool_ImportPastedCSV": "", "Maintenance_Tool_ImportPastedCSV": "",
"Maintenance_Tool_ImportPastedCSV_noti_text": "", "Maintenance_Tool_ImportPastedCSV_noti_text": "",
"Maintenance_Tool_ImportPastedCSV_text": "", "Maintenance_Tool_ImportPastedCSV_text": "",
"Maintenance_Tool_ImportPastedConfig": "",
"Maintenance_Tool_ImportPastedConfig_noti_text": "",
"Maintenance_Tool_ImportPastedConfig_text": "",
"Maintenance_Tool_arpscansw": "", "Maintenance_Tool_arpscansw": "",
"Maintenance_Tool_arpscansw_noti": "", "Maintenance_Tool_arpscansw_noti": "",
"Maintenance_Tool_arpscansw_noti_text": "", "Maintenance_Tool_arpscansw_noti_text": "",
@@ -710,6 +718,7 @@
"general_event_title": "", "general_event_title": "",
"go_to_node_event_icon": "", "go_to_node_event_icon": "",
"go_to_node_event_tooltip": "", "go_to_node_event_tooltip": "",
"new_version_available": "",
"report_guid": "", "report_guid": "",
"report_guid_missing": "", "report_guid_missing": "",
"report_select_format": "", "report_select_format": "",

View File

@@ -1,7 +1,7 @@
{ {
"API_CUSTOM_SQL_description": "Ви можете вказати спеціальний SQL-запит, який створить файл JSON, а потім відкриє його через кінцеву точку файлу <a href=\"/api/table_custom_endpoint.json\" target=\"_blank\"><code>table_custom_endpoint.json</code></a>.", "API_CUSTOM_SQL_description": "Ви можете вказати спеціальний SQL-запит, який створить файл JSON, а потім відкриє його через кінцеву точку файлу <a href=\"/api/table_custom_endpoint.json\" target=\"_blank\"><code>table_custom_endpoint.json</code></a>.",
"API_CUSTOM_SQL_name": "Спеціальна кінцева точка", "API_CUSTOM_SQL_name": "Спеціальна кінцева точка",
"API_TOKEN_description": "Маркер API для захисту зв’язку, ви можете створити його або ввести будь-яке значення. Його надсилають у заголовку запиту. Використовується в плагіні <code>SYNC</code>, сервер GraphQL.", "API_TOKEN_description": "Маркер API для безпечного зв’язку. Згенеруйте один або введіть будь-яке значення. Він надсилається в заголовку запиту та використовується в плагіні <code>SYNC</code>, сервері GraphQL та інших кінцевих точках API. Ви можете використовувати кінцеві точки API для створення спеціальних інтеграцій, як описано в <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/API.md\" target=\"_blank\">API документація</a>.",
"API_TOKEN_name": "Маркер API", "API_TOKEN_name": "Маркер API",
"API_display_name": "API", "API_display_name": "API",
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>", "API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
@@ -48,7 +48,7 @@
"BackDevices_DBTools_ImportCSVError": "Не вдалося імпортувати файл CSV. Переконайтеся, що формат правильний.", "BackDevices_DBTools_ImportCSVError": "Не вдалося імпортувати файл CSV. Переконайтеся, що формат правильний.",
"BackDevices_DBTools_ImportCSVMissing": "Не вдалося знайти файл CSV у <b>/config/devices.csv.</b>", "BackDevices_DBTools_ImportCSVMissing": "Не вдалося знайти файл CSV у <b>/config/devices.csv.</b>",
"BackDevices_DBTools_Purge": "Найстаріші резервні копії видалено", "BackDevices_DBTools_Purge": "Найстаріші резервні копії видалено",
"BackDevices_DBTools_UpdDev": "Пристрій успішно оновлено", "BackDevices_DBTools_UpdDev": "Пристрій успішно оновлено. Перезавантаження основного списку пристроїв може знадобитися деякий час, якщо триває сканування.",
"BackDevices_DBTools_UpdDevError": "Помилка оновлення пристрою", "BackDevices_DBTools_UpdDevError": "Помилка оновлення пристрою",
"BackDevices_DBTools_Upgrade": "Базу даних успішно оновлено", "BackDevices_DBTools_Upgrade": "Базу даних успішно оновлено",
"BackDevices_DBTools_UpgradeError": "Не вдалося оновити базу даних", "BackDevices_DBTools_UpgradeError": "Не вдалося оновити базу даних",
@@ -138,8 +138,8 @@
"DevDetail_Shortcut_DownAlerts": "Сповіщення про падіння", "DevDetail_Shortcut_DownAlerts": "Сповіщення про падіння",
"DevDetail_Shortcut_Presence": "Присутність", "DevDetail_Shortcut_Presence": "Присутність",
"DevDetail_Shortcut_Sessions": "Сеанси", "DevDetail_Shortcut_Sessions": "Сеанси",
"DevDetail_Tab_Details": "<i class=\"fa fa-info-circle\"></i> Подробиці", "DevDetail_Tab_Details": "Подробиці",
"DevDetail_Tab_Events": "<i class=\"fa fa-bolt\"></i> Події", "DevDetail_Tab_Events": "Події",
"DevDetail_Tab_EventsTableDate": "Дата", "DevDetail_Tab_EventsTableDate": "Дата",
"DevDetail_Tab_EventsTableEvent": "Тип події", "DevDetail_Tab_EventsTableEvent": "Тип події",
"DevDetail_Tab_EventsTableIP": "IP", "DevDetail_Tab_EventsTableIP": "IP",
@@ -154,10 +154,10 @@
"DevDetail_Tab_NmapTableState": "Держава", "DevDetail_Tab_NmapTableState": "Держава",
"DevDetail_Tab_NmapTableText": "Налаштуйте розклад у <a href=\"/settings.php#NMAP_ACTIVE\">Settings</a>", "DevDetail_Tab_NmapTableText": "Налаштуйте розклад у <a href=\"/settings.php#NMAP_ACTIVE\">Settings</a>",
"DevDetail_Tab_NmapTableTime": "час", "DevDetail_Tab_NmapTableTime": "час",
"DevDetail_Tab_Plugins": "<i class=\"fa fa-plug\"></i> Плагіни", "DevDetail_Tab_Plugins": "Плагіни",
"DevDetail_Tab_Presence": "<i class=\"fa fa-calendar\"></i> Присутність", "DevDetail_Tab_Presence": "Присутність",
"DevDetail_Tab_Sessions": "<i class=\"fa fa-list-ol\"></i> Сеанси", "DevDetail_Tab_Sessions": "Сеанси",
"DevDetail_Tab_Tools": "<i class=\"fa fa-screwdriver-wrench\"></i> Інструменти", "DevDetail_Tab_Tools": "Інструменти",
"DevDetail_Tab_Tools_Internet_Info_Description": "Інструмент Інтернет-інформації відображає інформацію про підключення до Інтернету, таку як IP-адреса, місто, країна, код міста та часовий пояс.", "DevDetail_Tab_Tools_Internet_Info_Description": "Інструмент Інтернет-інформації відображає інформацію про підключення до Інтернету, таку як IP-адреса, місто, країна, код міста та часовий пояс.",
"DevDetail_Tab_Tools_Internet_Info_Error": "Сталася помилка", "DevDetail_Tab_Tools_Internet_Info_Error": "Сталася помилка",
"DevDetail_Tab_Tools_Internet_Info_Start": "Запустіть Internet Info", "DevDetail_Tab_Tools_Internet_Info_Start": "Запустіть Internet Info",
@@ -242,14 +242,15 @@
"Device_Tablelenght": "Показати записи _МЕНЮ_", "Device_Tablelenght": "Показати записи _МЕНЮ_",
"Device_Tablelenght_all": "все", "Device_Tablelenght_all": "все",
"Device_Title": "Пристрої", "Device_Title": "Пристрої",
"Devices_Filters": "Фільтри",
"Donations_Others": "інші", "Donations_Others": "інші",
"Donations_Platforms": "Спонсорські платформи", "Donations_Platforms": "Спонсорські платформи",
"Donations_Text": "Привіт 👋! </br> Дякуємо, що натиснули цей пункт меню 😅 </br> </br> Я намагаюся зібрати пожертви, щоб зробити ваше програмне забезпечення кращим. Крім того, це допоможе мені не згоріти, тому я можу підтримувати цю програму довше. Будь-яке невелике (постійне чи ні) спонсорство спонукає мене докласти більше зусиль до цієї програми. </br> Я хотів би скоротити свій робочий тиждень і в час, що залишився, повністю зосередитися на NetAlertX. Ви отримаєте більше функціональності, досконаліший додаток і менше помилок. </br> </br> Дякую, що прочитали я вдячний за будь-яку підтримку ❤🙏 </br> </br> TL;DR: Підтримуючи мене, ви отримуєте: </br> </br> <ul> <li>Регулярні оновлення для захисту ваших даних і родини 🔄</li><li>Менше помилок 🐛🔫</li><li>Краще та більше функціональність➕</li><li>Я не згорів 🔥🤯</li><li>Менш поспішних випусків 💨</li><li>Кращі документи📚</li><li>Швидша та краща підтримка із проблемами 🆘</li></ul> </br> 📧Напишіть мені електронною поштою на <a href='mailto:jokob@duck.com?subject=NetAlertX'>jokob@duck.com</a>, якщо ви хочете зв’язатися з нами або якщо я маю додати інші платформи спонсорства. </br>", "Donations_Text": "Привіт 👋! </br> Дякуємо, що натиснули цей пункт меню 😅 </br> </br> Я намагаюся зібрати пожертви, щоб зробити ваше програмне забезпечення кращим. Крім того, це допоможе мені не згоріти, тому я можу підтримувати цю програму довше. Будь-яке невелике (постійне чи ні) спонсорство спонукає мене докласти більше зусиль до цієї програми. </br> Я хотів би скоротити свій робочий тиждень і в час, що залишився, повністю зосередитися на NetAlertX. Ви отримаєте більше функціональності, досконаліший додаток і менше помилок. </br> </br> Дякую, що прочитали я вдячний за будь-яку підтримку ❤🙏 </br> </br> TL;DR: Підтримуючи мене, ви отримуєте: </br> </br> <ul> <li>Регулярні оновлення для захисту ваших даних і родини 🔄</li><li>Менше помилок 🐛🔫</li><li>Краще та більше функціональність➕</li><li>Я не згорів 🔥🤯</li><li>Менш поспішних випусків 💨</li><li>Кращі документи📚</li><li>Швидша та краща підтримка із проблемами 🆘</li></ul> </br> 📧Напишіть мені електронною поштою на <a href='mailto:jokob@duck.com?subject=NetAlertX'>jokob@duck.com</a>, якщо ви хочете зв’язатися з нами або якщо я маю додати інші платформи спонсорства. </br>",
"Donations_Title": "Пожертви", "Donations_Title": "Пожертви",
"ENABLE_PLUGINS_description": "Вмикає функції <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins\">плагінів</a>. Завантаження плагінів вимагає більше апаратних ресурсів, тому ви можете вимкнути їх у системі з низьким енергоспоживанням.", "ENABLE_PLUGINS_description": "Вмикає функції <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">плагінів</a>. Завантаження плагінів вимагає більше апаратних ресурсів, тому ви можете вимкнути їх у системі з низьким енергоспоживанням.",
"ENABLE_PLUGINS_name": "Увімкнути плагіни", "ENABLE_PLUGINS_name": "Увімкнути плагіни",
"ENCRYPTION_KEY_description": "", "ENCRYPTION_KEY_description": "Ключ шифрування даних.",
"ENCRYPTION_KEY_name": "", "ENCRYPTION_KEY_name": "Ключ шифрування",
"Email_display_name": "Електронна пошта", "Email_display_name": "Електронна пошта",
"Email_icon": "<i class=\"fa fa-at\"></i>", "Email_icon": "<i class=\"fa fa-at\"></i>",
"Events_Loading": "Завантаження...", "Events_Loading": "Завантаження...",
@@ -285,7 +286,7 @@
"Events_Tablelenght": "Показати записи _МЕНЮ_", "Events_Tablelenght": "Показати записи _МЕНЮ_",
"Events_Tablelenght_all": "все", "Events_Tablelenght_all": "все",
"Events_Title": "Події", "Events_Title": "Події",
"GRAPHQL_PORT_description": "Номер порту сервера GraphQL.", "GRAPHQL_PORT_description": "Номер порту сервера GraphQL. Переконайтеся, що порт є унікальним для всіх ваших програм на цьому хості та екземплярах NetAlertX.",
"GRAPHQL_PORT_name": "Порт GraphQL", "GRAPHQL_PORT_name": "Порт GraphQL",
"Gen_Action": "Дія", "Gen_Action": "Дія",
"Gen_Add": "додати", "Gen_Add": "додати",
@@ -327,10 +328,11 @@
"Gen_Upd_Fail": "Не вдалося оновити", "Gen_Upd_Fail": "Не вдалося оновити",
"Gen_Update": "оновлення", "Gen_Update": "оновлення",
"Gen_Update_Value": "Оновити значення", "Gen_Update_Value": "Оновити значення",
"Gen_ValidIcon": "<i class=\"fa-solid fa-chevron-right \"></i>",
"Gen_Warning": "УВАГА", "Gen_Warning": "УВАГА",
"Gen_Work_In_Progress": "Робота триває, час залишити відгук на https://github.com/jokob-sk/NetAlertX/issues", "Gen_Work_In_Progress": "Робота триває, час залишити відгук на https://github.com/jokob-sk/NetAlertX/issues",
"Gen_create_new_device": "новий пристрій", "Gen_create_new_device": "новий пристрій",
"Gen_create_new_device_info": "Пристрої зазвичай виявляють за допомогою <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins\">плагінів</a>. Однак у деяких випадках може знадобитися додати пристрої вручну. Щоб дослідити конкретні сценарії, перегляньте <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/REMOTE_NETWORKS.md\">документацію щодо віддалених мереж</a>.", "Gen_create_new_device_info": "Пристрої зазвичай виявляють за допомогою <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">плагінів</a>. Однак у деяких випадках може знадобитися додати пристрої вручну. Щоб дослідити конкретні сценарії, перегляньте <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/REMOTE_NETWORKS.md\">документацію щодо віддалених мереж</a>.",
"General_display_name": "Загальний", "General_display_name": "Загальний",
"General_icon": "<i class=\"fa fa-gears\"></i>", "General_icon": "<i class=\"fa fa-gears\"></i>",
"HRS_TO_KEEP_NEWDEV_description": "Це налаштування обслуговування <b>ВИДАЛЕННЯ пристроїв</b>. Якщо ввімкнено (<code>0</code> вимкнено), пристрої, позначені як <b>Новий пристрій</b>, буде видалено, якщо час їхнього <b>першого сеансу</b> був старшим за вказані години в цьому налаштування. Використовуйте це налаштування, якщо ви хочете автоматично видаляти <b>Нові пристрої</b> через <code>X</code> годин.", "HRS_TO_KEEP_NEWDEV_description": "Це налаштування обслуговування <b>ВИДАЛЕННЯ пристроїв</b>. Якщо ввімкнено (<code>0</code> вимкнено), пристрої, позначені як <b>Новий пристрій</b>, буде видалено, якщо час їхнього <b>першого сеансу</b> був старшим за вказані години в цьому налаштування. Використовуйте це налаштування, якщо ви хочете автоматично видаляти <b>Нові пристрої</b> через <code>X</code> годин.",
@@ -373,7 +375,7 @@
"HelpFAQ_Cat_Presence_401_head": "Пристрій відображається як присутній, хоча він «Офлайн».", "HelpFAQ_Cat_Presence_401_head": "Пристрій відображається як присутній, хоча він «Офлайн».",
"HelpFAQ_Cat_Presence_401_text": "Якщо це станеться, у вас є можливість видалити події для відповідного пристрою (перегляд деталей). Іншою можливістю було б увімкнути пристрій і зачекати, поки NetAlertX розпізнає пристрій як «онлайн» під час наступного сканування, а потім просто знову вимкнути пристрій. Тепер NetAlertX повинен належним чином відзначати стан пристрою в базі даних під час наступного сканування.", "HelpFAQ_Cat_Presence_401_text": "Якщо це станеться, у вас є можливість видалити події для відповідного пристрою (перегляд деталей). Іншою можливістю було б увімкнути пристрій і зачекати, поки NetAlertX розпізнає пристрій як «онлайн» під час наступного сканування, а потім просто знову вимкнути пристрій. Тепер NetAlertX повинен належним чином відзначати стан пристрою в базі даних під час наступного сканування.",
"HelpFAQ_Title": "Довідка / FAQ", "HelpFAQ_Title": "Довідка / FAQ",
"LOADED_PLUGINS_description": "Які плагіни завантажити. Додавання плагінів може уповільнити роботу програми. Дізнайтеся більше про те, які плагіни потрібно ввімкнути, типи чи параметри сканування в <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins#readme \">документи плагінів</a>. Вивантажені плагіни втратять налаштування. Лише <code>вимкнені</code> плагіни можна вивантажити.", "LOADED_PLUGINS_description": "Які плагіни завантажити. Додавання плагінів може уповільнити роботу програми. Дізнайтеся більше про те, які плагіни потрібно ввімкнути, типи чи параметри сканування в <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md \">документи плагінів</a>. Вивантажені плагіни втратять налаштування. Лише <code>вимкнені</code> плагіни можна вивантажити.",
"LOADED_PLUGINS_name": "Завантажені плагіни", "LOADED_PLUGINS_name": "Завантажені плагіни",
"LOG_LEVEL_description": "Цей параметр увімкне докладніше журналювання. Корисно для налагодження запису подій у базу даних.", "LOG_LEVEL_description": "Цей параметр увімкне докладніше журналювання. Корисно для налагодження запису подій у базу даних.",
"LOG_LEVEL_name": "Друк додаткового протоколювання", "LOG_LEVEL_name": "Друк додаткового протоколювання",
@@ -398,17 +400,23 @@
"Maintenance_Running_Version": "Встановлена версія", "Maintenance_Running_Version": "Встановлена версія",
"Maintenance_Status": "Статус", "Maintenance_Status": "Статус",
"Maintenance_Title": "Інструменти обслуговування", "Maintenance_Title": "Інструменти обслуговування",
"Maintenance_Tool_ExportCSV": "Експорт CSV", "Maintenance_Tool_DownloadConfig": "Експорт налаштувань",
"Maintenance_Tool_ExportCSV_noti": "Експорт CSV", "Maintenance_Tool_DownloadConfig_text": "Завантажте повну резервну копію конфігурації налаштувань, яка зберігається у файлі <code>app.conf</code>.",
"Maintenance_Tool_ExportCSV": "Експорт пристроїв (csv)",
"Maintenance_Tool_ExportCSV_noti": "Експорт пристроїв (csv)",
"Maintenance_Tool_ExportCSV_noti_text": "Ви впевнені, що хочете створити файл CSV?", "Maintenance_Tool_ExportCSV_noti_text": "Ви впевнені, що хочете створити файл CSV?",
"Maintenance_Tool_ExportCSV_text": "Створіть файл CSV (значення, розділене комами), що містить список пристроїв, включаючи мережеві зв’язки між мережевими вузлами та підключеними пристроями. Ви також можете активувати це, перейшовши за цією URL-адресою <code>ваш NetAlertX url/php/server/devices.php?action=ExportCSV</code> або ввімкнувши <a href=\"settings.php#CSVBCKP_header\">Резервне копіювання CSV</a> плагін.", "Maintenance_Tool_ExportCSV_text": "Створіть файл CSV (значення, розділене комами), що містить список пристроїв, включаючи мережеві зв’язки між мережевими вузлами та підключеними пристроями. Ви також можете активувати це, перейшовши за цією URL-адресою <code>your_NetAlertX_url/php/server/devices.php?action=ExportCSV</code> або ввімкнувши <a href=\"settings.php#CSVBCKP_header\">Резервне копіювання CSV</a > плагін.",
"Maintenance_Tool_ImportCSV": "Імпорт CSV", "Maintenance_Tool_ImportCSV": "Імпорт пристроїв (csv)",
"Maintenance_Tool_ImportCSV_noti": "Імпорт CSV", "Maintenance_Tool_ImportCSV_noti": "Імпорт пристроїв (csv)",
"Maintenance_Tool_ImportCSV_noti_text": "Ви впевнені, що бажаєте імпортувати файл CSV? Це повністю <b>перезапише</b> пристрої у вашій базі даних.", "Maintenance_Tool_ImportCSV_noti_text": "Ви впевнені, що бажаєте імпортувати файл CSV? Це повністю <b>перезапише</b> пристрої у вашій базі даних.",
"Maintenance_Tool_ImportCSV_text": "Перед використанням цієї функції зробіть резервну копію. Імпортуйте файл CSV (значення, розділене комами), який містить список пристроїв, включаючи мережеві зв’язки між мережевими вузлами та підключеними пристроями. Для цього помістіть файл CSV під назвою <b>devices.csv</b> у папку <b>/config</b>.", "Maintenance_Tool_ImportCSV_text": "Перед використанням цієї функції зробіть резервну копію. Імпортуйте файл CSV (значення, розділене комами), який містить список пристроїв, включаючи мережеві зв’язки між мережевими вузлами та підключеними пристроями. Для цього помістіть файл CSV під назвою <b>devices.csv</b> у папку <b>/config</b>.",
"Maintenance_Tool_ImportPastedCSV": "Імпорт CSV (вставити)", "Maintenance_Tool_ImportConfig_noti": "Імпорт налаштувань (app.conf)",
"Maintenance_Tool_ImportPastedCSV": "Імпорт пристроїв (csv) (вставити)",
"Maintenance_Tool_ImportPastedCSV_noti_text": "Ви впевнені, що бажаєте імпортувати вставлений CSV? Це повністю <b>перезапише</b> пристрої у вашій базі даних.", "Maintenance_Tool_ImportPastedCSV_noti_text": "Ви впевнені, що бажаєте імпортувати вставлений CSV? Це повністю <b>перезапише</b> пристрої у вашій базі даних.",
"Maintenance_Tool_ImportPastedCSV_text": "Перед використанням цієї функції зробіть резервну копію. Імпортуйте файл CSV (значення, розділене комами), що містить список пристроїв, включаючи мережеві зв’язки між мережевими вузлами та підключеним пристроєм.", "Maintenance_Tool_ImportPastedCSV_text": "Перед використанням цієї функції зробіть резервну копію. Імпортуйте файл CSV (значення, розділене комами), що містить список пристроїв, включаючи мережеві зв’язки між мережевими вузлами та підключеним пристроєм.",
"Maintenance_Tool_ImportPastedConfig": "Імпорт налаштувань (вставити)",
"Maintenance_Tool_ImportPastedConfig_noti_text": "Ви впевнені, що бажаєте імпортувати вставлені налаштування конфігурації? Це повністю <b>перезапише</b> файл <code>app.conf</code>.",
"Maintenance_Tool_ImportPastedConfig_text": "Імпортує файл <code>app.conf</code>, який містить усі налаштування програми. Ви можете спочатку завантажити поточний файл <code>app.conf</code> за допомогою <b>Експорту налаштувань</b>.",
"Maintenance_Tool_arpscansw": "Перемикач arp-сканування (увімк./вимк.)", "Maintenance_Tool_arpscansw": "Перемикач arp-сканування (увімк./вимк.)",
"Maintenance_Tool_arpscansw_noti": "Увімкніть або вимкніть arp-Scan", "Maintenance_Tool_arpscansw_noti": "Увімкніть або вимкніть arp-Scan",
"Maintenance_Tool_arpscansw_noti_text": "Коли сканування було вимкнено, воно залишається вимкненим, доки не буде активовано знову.", "Maintenance_Tool_arpscansw_noti_text": "Коли сканування було вимкнено, воно залишається вимкненим, доки не буде активовано знову.",
@@ -483,13 +491,13 @@
"Maintenance_lang_selector_empty": "Виберіть мову", "Maintenance_lang_selector_empty": "Виберіть мову",
"Maintenance_lang_selector_lable": "Виберіть мови", "Maintenance_lang_selector_lable": "Виберіть мови",
"Maintenance_lang_selector_text": "Зміна відбувається на стороні клієнта, тому вона впливає лише на поточний браузер.", "Maintenance_lang_selector_text": "Зміна відбувається на стороні клієнта, тому вона впливає лише на поточний браузер.",
"Maintenance_new_version": "🆕 Доступна нова версія. Перегляньте <a href=\"https://github.com/jokob-sk/NetAlertX/releases\" target=\"_blank\">примітки до випуску</a>.", "Maintenance_new_version": "Доступна нова версія. Перегляньте <a href=\"https://github.com/jokob-sk/NetAlertX/releases\" target=\"_blank\">примітки до випуску</a>.",
"Maintenance_themeselector_apply": "Застосувати", "Maintenance_themeselector_apply": "Застосувати",
"Maintenance_themeselector_empty": "Виберіть скін", "Maintenance_themeselector_empty": "Виберіть скін",
"Maintenance_themeselector_lable": "Виберіть Скін", "Maintenance_themeselector_lable": "Виберіть Скін",
"Maintenance_themeselector_text": "Зміна відбувається на стороні сервера, тому вона впливає на всі пристрої, які використовуються.", "Maintenance_themeselector_text": "Зміна відбувається на стороні сервера, тому вона впливає на всі пристрої, які використовуються.",
"Maintenance_version": "Оновлення програми", "Maintenance_version": "Оновлення програми",
"NETWORK_DEVICE_TYPES_description": "Які типи пристроїв можна використовувати як мережеві пристрої в поданні мережі. Тип пристрою має точно відповідати налаштуванню <code>Тип</code> на певному пристрої в Деталях пристрою. Не видаляйте існуючі типи, лише додайте нові.", "NETWORK_DEVICE_TYPES_description": "Які типи пристроїв дозволено використовувати як мережеві пристрої в поданні мережі. Тип пристрою має точно відповідати налаштуванню <code>Тип</code> на певному пристрої в Деталях пристрою. Додайте його на пристрій за допомогою кнопки <code>+</code>. Не видаляйте існуючі типи, лише додайте нові.",
"NETWORK_DEVICE_TYPES_name": "Типи мережевих пристроїв", "NETWORK_DEVICE_TYPES_name": "Типи мережевих пристроїв",
"Navigation_About": "про", "Navigation_About": "про",
"Navigation_Devices": "Пристрої", "Navigation_Devices": "Пристрої",
@@ -710,6 +718,7 @@
"general_event_title": "Виконання спеціальної події", "general_event_title": "Виконання спеціальної події",
"go_to_node_event_icon": "fa-квадрат-вгору-вправо", "go_to_node_event_icon": "fa-квадрат-вгору-вправо",
"go_to_node_event_tooltip": "Перейдіть на сторінку Мережа даного вузла", "go_to_node_event_tooltip": "Перейдіть на сторінку Мережа даного вузла",
"new_version_available": "Доступна нова версія.",
"report_guid": "Довідник сповіщень:", "report_guid": "Довідник сповіщень:",
"report_guid_missing": "Пов’язане сповіщення не знайдено. Існує невелика затримка між нещодавно надісланими сповіщеннями та їх доступністю. Оновіть сторінку та кеш через кілька секунд. Також можливо, вибране сповіщення було видалено під час обслуговування, як зазначено в параметрі <code>DBCLNP_NOTIFI_HIST</code>. <br/> <br/>Натомість відображається останнє сповіщення. Відсутнє сповіщення має такий GUID:", "report_guid_missing": "Пов’язане сповіщення не знайдено. Існує невелика затримка між нещодавно надісланими сповіщеннями та їх доступністю. Оновіть сторінку та кеш через кілька секунд. Також можливо, вибране сповіщення було видалено під час обслуговування, як зазначено в параметрі <code>DBCLNP_NOTIFI_HIST</code>. <br/> <br/>Натомість відображається останнє сповіщення. Відсутнє сповіщення має такий GUID:",
"report_select_format": "Виберіть формат:", "report_select_format": "Виберіть формат:",

View File

@@ -138,8 +138,8 @@
"DevDetail_Shortcut_DownAlerts": "下线警报", "DevDetail_Shortcut_DownAlerts": "下线警报",
"DevDetail_Shortcut_Presence": "存在", "DevDetail_Shortcut_Presence": "存在",
"DevDetail_Shortcut_Sessions": "会话", "DevDetail_Shortcut_Sessions": "会话",
"DevDetail_Tab_Details": "<i class=\"fa fa-info-circle\"></i> 详细信息", "DevDetail_Tab_Details": "详细信息",
"DevDetail_Tab_Events": "<i class=\"fa fa-bolt\"></i> 事件", "DevDetail_Tab_Events": "事件",
"DevDetail_Tab_EventsTableDate": "日期", "DevDetail_Tab_EventsTableDate": "日期",
"DevDetail_Tab_EventsTableEvent": "事件类型", "DevDetail_Tab_EventsTableEvent": "事件类型",
"DevDetail_Tab_EventsTableIP": "IP", "DevDetail_Tab_EventsTableIP": "IP",
@@ -154,10 +154,10 @@
"DevDetail_Tab_NmapTableState": "状态", "DevDetail_Tab_NmapTableState": "状态",
"DevDetail_Tab_NmapTableText": "<a href=\"/settings.php#NMAP_ACTIVE\">设置</a>时间表", "DevDetail_Tab_NmapTableText": "<a href=\"/settings.php#NMAP_ACTIVE\">设置</a>时间表",
"DevDetail_Tab_NmapTableTime": "时间", "DevDetail_Tab_NmapTableTime": "时间",
"DevDetail_Tab_Plugins": "<i class=\"fa fa-plug\"></i> 插件", "DevDetail_Tab_Plugins": "插件",
"DevDetail_Tab_Presence": "<i class=\"fa fa-calendar\"></i> 存在", "DevDetail_Tab_Presence": "存在",
"DevDetail_Tab_Sessions": "<i class=\"fa fa-list-ol\"></i> 会话", "DevDetail_Tab_Sessions": "会话",
"DevDetail_Tab_Tools": "<i class=\"fa fa-screwdriver-wrench\"></i> 工具", "DevDetail_Tab_Tools": "工具",
"DevDetail_Tab_Tools_Internet_Info_Description": "互联网信息工具显示有关互联网连接的信息,例如 IP 地址、城市、国家、区号和时区。", "DevDetail_Tab_Tools_Internet_Info_Description": "互联网信息工具显示有关互联网连接的信息,例如 IP 地址、城市、国家、区号和时区。",
"DevDetail_Tab_Tools_Internet_Info_Error": "发生了错误", "DevDetail_Tab_Tools_Internet_Info_Error": "发生了错误",
"DevDetail_Tab_Tools_Internet_Info_Start": "开始互联网信息", "DevDetail_Tab_Tools_Internet_Info_Start": "开始互联网信息",
@@ -242,11 +242,12 @@
"Device_Tablelenght": "显示 _MENU_ 页", "Device_Tablelenght": "显示 _MENU_ 页",
"Device_Tablelenght_all": "所有", "Device_Tablelenght_all": "所有",
"Device_Title": "设备", "Device_Title": "设备",
"Devices_Filters": "",
"Donations_Others": "其他", "Donations_Others": "其他",
"Donations_Platforms": "赞助平台", "Donations_Platforms": "赞助平台",
"Donations_Text": "嘿👋!</br> 感谢您点击此菜单项😅 </br> </br> 我正在尝试收集一些捐款来为您制作更好的软件。此外,这将有助于我避免精疲力竭,这样我就可以更长时间地支持这个应用程序。任何小额(无论是否经常性)赞助都会让我想在这个应用程序上投入更多精力。</br> 我希望缩短我的工作周,并在剩余的时间里完全专注于 NetAlertX。您将获得更多功能、更精致的应用程序和更少的错误。 </br> </br> 感谢阅读 - 我感谢任何支持 ❤🙏 </br> </br> TL;DR通过支持我您将获得</br> </br> <ul><li>定期更新以确保您的数据和家人安全🔄</li><li>更少的错误🐛🔫</li><li>更好、更多的功能➕</li><li>我不会精疲力竭🔥🤯</li><li>更不仓促的发布💨</li><li>更好的文档📚</li><li>更快、更好地解决问题🆘</li></ul> </br> 📧如果您想联系我或者我应该添加其他赞助平台,请给我发电子邮件至<a href='mailto:jokob@duck.com?subject=NetAlertX'>jokob@duck.com</a>。 </br>", "Donations_Text": "嘿👋!</br> 感谢您点击此菜单项😅 </br> </br> 我正在尝试收集一些捐款来为您制作更好的软件。此外,这将有助于我避免精疲力竭,这样我就可以更长时间地支持这个应用程序。任何小额(无论是否经常性)赞助都会让我想在这个应用程序上投入更多精力。</br> 我希望缩短我的工作周,并在剩余的时间里完全专注于 NetAlertX。您将获得更多功能、更精致的应用程序和更少的错误。 </br> </br> 感谢阅读 - 我感谢任何支持 ❤🙏 </br> </br> TL;DR通过支持我您将获得</br> </br> <ul><li>定期更新以确保您的数据和家人安全🔄</li><li>更少的错误🐛🔫</li><li>更好、更多的功能➕</li><li>我不会精疲力竭🔥🤯</li><li>更不仓促的发布💨</li><li>更好的文档📚</li><li>更快、更好地解决问题🆘</li></ul> </br> 📧如果您想联系我或者我应该添加其他赞助平台,请给我发电子邮件至<a href='mailto:jokob@duck.com?subject=NetAlertX'>jokob@duck.com</a>。 </br>",
"Donations_Title": "捐款", "Donations_Title": "捐款",
"ENABLE_PLUGINS_description": "启用<a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins\">插件</a>功能。加载插件需要更多硬件资源,因此您可能需要在低功耗系统上禁用它们。", "ENABLE_PLUGINS_description": "启用<a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">插件</a>功能。加载插件需要更多硬件资源,因此您可能需要在低功耗系统上禁用它们。",
"ENABLE_PLUGINS_name": "启用插件", "ENABLE_PLUGINS_name": "启用插件",
"ENCRYPTION_KEY_description": "", "ENCRYPTION_KEY_description": "",
"ENCRYPTION_KEY_name": "", "ENCRYPTION_KEY_name": "",
@@ -327,6 +328,7 @@
"Gen_Upd_Fail": "更新失败", "Gen_Upd_Fail": "更新失败",
"Gen_Update": "更新", "Gen_Update": "更新",
"Gen_Update_Value": "更新值", "Gen_Update_Value": "更新值",
"Gen_ValidIcon": "",
"Gen_Warning": "警告", "Gen_Warning": "警告",
"Gen_Work_In_Progress": "工作正在进行中,欢迎在 https://github.com/jokob-sk/NetAlertX/issues 上反馈", "Gen_Work_In_Progress": "工作正在进行中,欢迎在 https://github.com/jokob-sk/NetAlertX/issues 上反馈",
"Gen_create_new_device": "", "Gen_create_new_device": "",
@@ -373,7 +375,7 @@
"HelpFAQ_Cat_Presence_401_head": "尽管设备处于“离线”状态,但仍显示其存在。", "HelpFAQ_Cat_Presence_401_head": "尽管设备处于“离线”状态,但仍显示其存在。",
"HelpFAQ_Cat_Presence_401_text": "如果发生这种情况,您可以删除相关设备的事件(详细信息视图)。另一种可能性是打开设备并等待,直到 NetAlertX 在下一次扫描时将设备识别为“在线”,然后再关闭设备。现在 NetAlertX 应该会在下一次扫描时在数据库中正确记录设备的状态。", "HelpFAQ_Cat_Presence_401_text": "如果发生这种情况,您可以删除相关设备的事件(详细信息视图)。另一种可能性是打开设备并等待,直到 NetAlertX 在下一次扫描时将设备识别为“在线”,然后再关闭设备。现在 NetAlertX 应该会在下一次扫描时在数据库中正确记录设备的状态。",
"HelpFAQ_Title": "帮助/常见问题", "HelpFAQ_Title": "帮助/常见问题",
"LOADED_PLUGINS_description": "加载哪些插件。添加插件可能会降低应用程序的速度。在<a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins#readme\">插件文档</a>中详细了解需要启用哪些插件、插件类型或扫描选项。卸载插件将丢失您的设置。只有<code>已禁用</code>的插件才能卸载。", "LOADED_PLUGINS_description": "加载哪些插件。添加插件可能会降低应用程序的速度。在<a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">插件文档</a>中详细了解需要启用哪些插件、插件类型或扫描选项。卸载插件将丢失您的设置。只有<code>已禁用</code>的插件才能卸载。",
"LOADED_PLUGINS_name": "已加载插件", "LOADED_PLUGINS_name": "已加载插件",
"LOG_LEVEL_description": "此设置将启用更详细的日志记录。对于调试写入数据库的事件很有用。", "LOG_LEVEL_description": "此设置将启用更详细的日志记录。对于调试写入数据库的事件很有用。",
"LOG_LEVEL_name": "打印附加日志", "LOG_LEVEL_name": "打印附加日志",
@@ -398,6 +400,8 @@
"Maintenance_Running_Version": "安装版本", "Maintenance_Running_Version": "安装版本",
"Maintenance_Status": "状态", "Maintenance_Status": "状态",
"Maintenance_Title": "维护工具", "Maintenance_Title": "维护工具",
"Maintenance_Tool_DownloadConfig": "",
"Maintenance_Tool_DownloadConfig_text": "",
"Maintenance_Tool_ExportCSV": "CSV 导出", "Maintenance_Tool_ExportCSV": "CSV 导出",
"Maintenance_Tool_ExportCSV_noti": "CSV 导出", "Maintenance_Tool_ExportCSV_noti": "CSV 导出",
"Maintenance_Tool_ExportCSV_noti_text": "您确定要生成 CSV 文件吗?", "Maintenance_Tool_ExportCSV_noti_text": "您确定要生成 CSV 文件吗?",
@@ -406,9 +410,13 @@
"Maintenance_Tool_ImportCSV_noti": "CSV 导入", "Maintenance_Tool_ImportCSV_noti": "CSV 导入",
"Maintenance_Tool_ImportCSV_noti_text": "您确定要导入 CSV 文件吗?这将完全<b>覆盖</b>数据库中的设备。", "Maintenance_Tool_ImportCSV_noti_text": "您确定要导入 CSV 文件吗?这将完全<b>覆盖</b>数据库中的设备。",
"Maintenance_Tool_ImportCSV_text": "在使用此功能之前,请先备份。导入一个 CSV逗号分隔值文件其中包含设备列表包括网络节点和连接设备之间的网络关系。为此请将名为 <b>devices.csv</b> 的 CSV 文件放入您的 <b>/config</b> 文件夹中。", "Maintenance_Tool_ImportCSV_text": "在使用此功能之前,请先备份。导入一个 CSV逗号分隔值文件其中包含设备列表包括网络节点和连接设备之间的网络关系。为此请将名为 <b>devices.csv</b> 的 CSV 文件放入您的 <b>/config</b> 文件夹中。",
"Maintenance_Tool_ImportConfig_noti": "",
"Maintenance_Tool_ImportPastedCSV": "CSV 导入(粘贴)", "Maintenance_Tool_ImportPastedCSV": "CSV 导入(粘贴)",
"Maintenance_Tool_ImportPastedCSV_noti_text": "您确定要导入粘贴的 CSV 吗?这将完全<b>覆盖</b>数据库中的设备。", "Maintenance_Tool_ImportPastedCSV_noti_text": "您确定要导入粘贴的 CSV 吗?这将完全<b>覆盖</b>数据库中的设备。",
"Maintenance_Tool_ImportPastedCSV_text": "使用此功能前,请先备份。导入一个包含设备列表(包括网络节点和所连接设备之间的网络关系)的 CSV逗号分隔值文件。", "Maintenance_Tool_ImportPastedCSV_text": "使用此功能前,请先备份。导入一个包含设备列表(包括网络节点和所连接设备之间的网络关系)的 CSV逗号分隔值文件。",
"Maintenance_Tool_ImportPastedConfig": "",
"Maintenance_Tool_ImportPastedConfig_noti_text": "",
"Maintenance_Tool_ImportPastedConfig_text": "",
"Maintenance_Tool_arpscansw": "切换 arp 扫描(开/关)", "Maintenance_Tool_arpscansw": "切换 arp 扫描(开/关)",
"Maintenance_Tool_arpscansw_noti": "打开或关闭 arp 扫描", "Maintenance_Tool_arpscansw_noti": "打开或关闭 arp 扫描",
"Maintenance_Tool_arpscansw_noti_text": "当扫描关闭时,它会保持关闭状态,直到再次激活为止。", "Maintenance_Tool_arpscansw_noti_text": "当扫描关闭时,它会保持关闭状态,直到再次激活为止。",
@@ -483,7 +491,7 @@
"Maintenance_lang_selector_empty": "选择语言", "Maintenance_lang_selector_empty": "选择语言",
"Maintenance_lang_selector_lable": "选择语言", "Maintenance_lang_selector_lable": "选择语言",
"Maintenance_lang_selector_text": "该更改发生在客户端,因此只影响当前浏览器。", "Maintenance_lang_selector_text": "该更改发生在客户端,因此只影响当前浏览器。",
"Maintenance_new_version": "🆕 有新版本可用。查看<a href=\"https://github.com/jokob-sk/NetAlertX/releases\" target=\"_blank\">发行说明</a>。", "Maintenance_new_version": "有新版本可用。查看<a href=\"https://github.com/jokob-sk/NetAlertX/releases\" target=\"_blank\">发行说明</a>。",
"Maintenance_themeselector_apply": "应用", "Maintenance_themeselector_apply": "应用",
"Maintenance_themeselector_empty": "选择皮肤", "Maintenance_themeselector_empty": "选择皮肤",
"Maintenance_themeselector_lable": "选择皮肤", "Maintenance_themeselector_lable": "选择皮肤",
@@ -710,6 +718,7 @@
"general_event_title": "执行自组织网络事件", "general_event_title": "执行自组织网络事件",
"go_to_node_event_icon": "", "go_to_node_event_icon": "",
"go_to_node_event_tooltip": "", "go_to_node_event_tooltip": "",
"new_version_available": "",
"report_guid": "通知guid", "report_guid": "通知guid",
"report_guid_missing": "未找到链接的通知。最近发送的通知与可用通知之间存在短暂延迟。几秒钟后刷新页面并缓存。所选通知也可能已在维护期间被删除,如 <code>DBCLNP_NOTIFI_HIST</code> 设置中所述。<br/> <br/>系统将改为显示最新通知。缺失的通知具有以下 GUID", "report_guid_missing": "未找到链接的通知。最近发送的通知与可用通知之间存在短暂延迟。几秒钟后刷新页面并缓存。所选通知也可能已在维护期间被删除,如 <code>DBCLNP_NOTIFI_HIST</code> 设置中所述。<br/> <br/>系统将改为显示最新通知。缺失的通知具有以下 GUID",
"report_select_format": "选择格式:", "report_select_format": "选择格式:",

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