Compare commits
80 Commits
v25.6.7
...
94edcee382
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
94edcee382 | ||
|
|
737a53a589 | ||
|
|
85bff56bd5 | ||
|
|
0f149098a3 | ||
|
|
13b5b145e4 | ||
|
|
a050beea72 | ||
|
|
3952e8dd91 | ||
|
|
68f3c02eb9 | ||
|
|
b4c2703cbb | ||
|
|
cb4fda1786 | ||
|
|
058b17fcbc | ||
|
|
9bfdc7209b | ||
|
|
1a44e84112 | ||
|
|
b722fcbe6e | ||
|
|
d1d26409fc | ||
|
|
fef1e17935 | ||
|
|
5a3782c9f1 | ||
|
|
27e9472ce1 | ||
|
|
23a0a98b4f | ||
|
|
e724c22941 | ||
|
|
27d69ff5ed | ||
|
|
cb2cce5326 | ||
|
|
e790ca2257 | ||
|
|
70a0f9260a | ||
|
|
23003aa82f | ||
|
|
cc51391d14 | ||
|
|
9242a8f55d | ||
|
|
6b32190acd | ||
|
|
69834c7771 | ||
|
|
3513fc9617 | ||
|
|
1348987f08 | ||
|
|
b31dff2815 | ||
|
|
3483d833a0 | ||
|
|
ddad1468d9 | ||
|
|
f20fc8e123 | ||
|
|
3bffb2d8f5 | ||
|
|
0bd4a7b8dd | ||
|
|
69d79dbd7c | ||
|
|
31806c707f | ||
|
|
2a4198c2c8 | ||
|
|
cecfe60bac | ||
|
|
ef42eb1fef | ||
|
|
1e2be52371 | ||
|
|
0034e49c1a | ||
|
|
350412be33 | ||
|
|
c9312719ea | ||
|
|
3010bbf1df | ||
|
|
59d5f1053f | ||
|
|
ae81b86e78 | ||
|
|
1f80a7d8ca | ||
|
|
047797daf2 | ||
|
|
f62e0513f9 | ||
|
|
b7471fd91c | ||
|
|
0e8f8a09cb | ||
|
|
8cc85a3203 | ||
|
|
8f41d71ac4 | ||
|
|
470d362ab4 | ||
|
|
a342f73f68 | ||
|
|
05842ab4a0 | ||
|
|
b54d95e5af | ||
|
|
202dcf16b9 | ||
|
|
153383343b | ||
|
|
6f138d95ca | ||
|
|
e3bbb0afff | ||
|
|
8e05e5739b | ||
|
|
7a2c4942bf | ||
|
|
95189a9d4b | ||
|
|
ded15aa628 | ||
|
|
b1d74dcfea | ||
|
|
f4db748eae | ||
|
|
b797713b2d | ||
|
|
69cf4057ac | ||
|
|
a1d5341840 | ||
|
|
8b1e705a96 | ||
|
|
dff63b74f5 | ||
|
|
f709c97602 | ||
|
|
0b2a722218 | ||
|
|
168275343c | ||
|
|
05335df9bf | ||
|
|
de2e924aa2 |
1
FUNDING.yml → .github/FUNDING.yml
vendored
@@ -1,2 +1,3 @@
|
|||||||
github: jokob-sk
|
github: jokob-sk
|
||||||
patreon: 84385063
|
patreon: 84385063
|
||||||
|
buy_me_a_coffee: jokobsk
|
||||||
56
.github/ISSUE_TEMPLATE/documentation-feedback.yml
vendored
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
name: Documentation Feedback 📝
|
||||||
|
description: Suggest improvements, clarify inconsistencies, or report issues related to the documentation.
|
||||||
|
labels: ['documentation 📚']
|
||||||
|
body:
|
||||||
|
- type: checkboxes
|
||||||
|
attributes:
|
||||||
|
label: Is there an existing issue for this?
|
||||||
|
description: Please search to see if an open or closed issue already exists for the documentation change you're suggesting.
|
||||||
|
options:
|
||||||
|
- label: I have searched the existing open and closed issues
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: What document or section does this relate to?
|
||||||
|
description: |
|
||||||
|
Please include a link to the file and section, if applicable. Be specific about what part of the documentation you are referencing.
|
||||||
|
placeholder: e.g. https://github.com/jokob-sk/NetAlertX/blob/main/docs/FRONTEND_DEVELOPMENT.md
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Describe the issue
|
||||||
|
description: A clear and concise explanation of the issue or inconsistency you found in the documentation.
|
||||||
|
placeholder: e.g. The linked file is referred to as "Contributor Guidelines" but only covers frontend topics.
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Your suggestion or proposed solution
|
||||||
|
description: Suggest how the documentation could be improved, clarified, or reorganized.
|
||||||
|
placeholder: e.g. Combine frontend and backend development into a single CONTRIBUTING.md file with common sections to reduce fragmentation.
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: checkboxes
|
||||||
|
attributes:
|
||||||
|
label: What type of issue is this?
|
||||||
|
options:
|
||||||
|
- label: Missing information
|
||||||
|
- label: Inaccurate or outdated information
|
||||||
|
- label: Unclear or confusing content
|
||||||
|
- label: Structure or organization improvements
|
||||||
|
- label: Other (explain in issue)
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Anything else?
|
||||||
|
description: |
|
||||||
|
Additional context, references, screenshots, or related issues. You can also mention if you’re willing to help implement the suggestion.
|
||||||
|
validations:
|
||||||
|
required: false
|
||||||
|
- type: checkboxes
|
||||||
|
attributes:
|
||||||
|
label: Can I help implement this? 👩💻👨💻
|
||||||
|
description: The maintainer can provide guidance and review your changes.
|
||||||
|
options:
|
||||||
|
- label: "Yes, I’d like to help implement the improvement"
|
||||||
|
- label: "No, I’m just suggesting the idea"
|
||||||
33
.github/ISSUE_TEMPLATE/enhancement-request.yml
vendored
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
name: Enhancement Request
|
||||||
|
description: Propose an improvement to an existing feature or UX behavior.
|
||||||
|
labels: ['enhancement ♻️']
|
||||||
|
body:
|
||||||
|
- type: checkboxes
|
||||||
|
attributes:
|
||||||
|
label: Is there an existing issue for this?
|
||||||
|
options:
|
||||||
|
- label: I have searched existing open and closed issues
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: What is the enhancement?
|
||||||
|
description: Describe the change or optimization you’d like to see to an existing feature.
|
||||||
|
placeholder: e.g. Make scan intervals configurable from UI instead of just `app.conf`
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: What problem does this solve or improve?
|
||||||
|
description: Describe why this change would improve user experience or project maintainability.
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Additional context or examples
|
||||||
|
description: |
|
||||||
|
Screenshots? Comparisons? Reference repos?
|
||||||
|
required: false
|
||||||
|
- type: checkboxes
|
||||||
|
attributes:
|
||||||
|
label: Are you willing to help implement this?
|
||||||
|
options:
|
||||||
|
- label: "Yes"
|
||||||
|
- label: "No"
|
||||||
37
.github/ISSUE_TEMPLATE/refactor-codequality-request.yml
vendored
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
name: Refactor / Code Quality Request ♻️
|
||||||
|
description: Suggest improvements to code structure, style, or maintainability.
|
||||||
|
labels: ['enhancement ♻️']
|
||||||
|
body:
|
||||||
|
- type: checkboxes
|
||||||
|
attributes:
|
||||||
|
label: Is there an existing issue for this?
|
||||||
|
description: Please check if a similar request already exists.
|
||||||
|
options:
|
||||||
|
- label: I have searched the existing open and closed issues
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: What part of the code needs refactoring or improvement?
|
||||||
|
description: Specify files, modules, or components.
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Describe the proposed changes
|
||||||
|
description: Explain the refactoring or quality improvements you suggest.
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Why is this improvement needed?
|
||||||
|
description: Benefits such as maintainability, readability, performance, or scalability.
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Additional context or examples
|
||||||
|
description: Any relevant links, references, or related issues.
|
||||||
|
required: false
|
||||||
|
- type: checkboxes
|
||||||
|
attributes:
|
||||||
|
label: Can you help implement this change?
|
||||||
|
options:
|
||||||
|
- label: Yes
|
||||||
|
- label: No
|
||||||
28
.github/ISSUE_TEMPLATE/security-report.yml
vendored
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
name: Security Report 🔐
|
||||||
|
description: Report a security vulnerability or concern privately.
|
||||||
|
labels: ['security 🔐']
|
||||||
|
body:
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: |
|
||||||
|
**Important:** For security reasons, please do **not** post sensitive security issues publicly in the issue tracker.
|
||||||
|
Instead, send details to our security contact email: [jokob@duck.com](mailto:jokob@duck.com).
|
||||||
|
|
||||||
|
We appreciate your responsible disclosure.
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Brief summary (non-sensitive)
|
||||||
|
description: Provide a non-sensitive overview of the security issue.
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Additional context or references
|
||||||
|
description: Any other information or related reports.
|
||||||
|
required: false
|
||||||
|
- type: checkboxes
|
||||||
|
attributes:
|
||||||
|
label: Have you sent this report via email to the security contact?
|
||||||
|
options:
|
||||||
|
- label: Yes, I have sent the details to jokob@duck.com
|
||||||
|
required: true
|
||||||
|
- label: Not yet, I will send it after opening this issue
|
||||||
36
.github/ISSUE_TEMPLATE/translation-request.yml
vendored
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
name: Translation / Localization Request 🌐
|
||||||
|
description: Suggest adding or improving translations or localization support.
|
||||||
|
labels: ['enhancement 🌐']
|
||||||
|
body:
|
||||||
|
- type: checkboxes
|
||||||
|
attributes:
|
||||||
|
label: Have you checked for existing translation efforts or related issues?
|
||||||
|
options:
|
||||||
|
- label: I have searched existing open and closed issues
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Language(s) involved
|
||||||
|
description: Specify the language(s) this request pertains to.
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Describe the translation or localization improvement
|
||||||
|
description: Examples include adding new language support, fixing translation errors, or improving formatting.
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Why is this important for the project or users?
|
||||||
|
description: Describe the benefits or target audience.
|
||||||
|
required: false
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Additional context or references
|
||||||
|
description: Link to files, previous translation PRs, or external resources.
|
||||||
|
required: false
|
||||||
|
- type: checkboxes
|
||||||
|
attributes:
|
||||||
|
label: Can you help with translation or review?
|
||||||
|
options:
|
||||||
|
- label: Yes
|
||||||
|
- label: No
|
||||||
53
.github/PULL_REQUEST_TEMPLATE/code-pr-template.md
vendored
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
## 📌 Description
|
||||||
|
|
||||||
|
<!-- Provide a brief description of the changes you're introducing. Be clear and concise. -->
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔍 Related Issues
|
||||||
|
|
||||||
|
<!-- Reference any related issues (e.g., closes #123, fixes #456) -->
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📋 Type of Change
|
||||||
|
|
||||||
|
Please check the relevant option(s):
|
||||||
|
|
||||||
|
- [ ] 🐛 Bug fix
|
||||||
|
- [ ] ✨ New feature
|
||||||
|
- [ ] ♻️ Code refactor
|
||||||
|
- [ ] 📚 Documentation update
|
||||||
|
- [ ] 🧪 Test addition or change
|
||||||
|
- [ ] 🔧 Build/config update
|
||||||
|
- [ ] 🚀 Performance improvement
|
||||||
|
- [ ] 🔨 CI/CD or automation
|
||||||
|
- [ ] 🧹 Cleanup / chore
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📷 Screenshots or Logs (if applicable)
|
||||||
|
|
||||||
|
<!-- Add screenshots, terminal output, logs, or anything that helps understand your change -->
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🧪 Testing Steps
|
||||||
|
|
||||||
|
<!-- Describe how the change was tested. Manual steps, test cases, or automated test runs -->
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ✅ Checklist
|
||||||
|
|
||||||
|
- [ ] I have read the [Contribution Guidelines](../../CONTRIBUTING)
|
||||||
|
- [ ] I have tested my changes locally
|
||||||
|
- [ ] I have updated relevant documentation (if applicable)
|
||||||
|
- [ ] I have verified my changes do not break existing behavior
|
||||||
|
- [ ] I am willing to respond to requested changes and feedback
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🙋 Additional Notes
|
||||||
|
|
||||||
|
<!-- Anything else you want reviewers to know? Future follow-ups? Questions? -->
|
||||||
37
.github/PULL_REQUEST_TEMPLATE/docs-pr-template.md
vendored
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
## 📚 Documentation Update
|
||||||
|
|
||||||
|
<!-- Describe the purpose of this PR in one or two sentences. Example: "This PR updates the contributor guidelines by merging frontend and backend sections." -->
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📝 What’s Changed?
|
||||||
|
|
||||||
|
<!-- Briefly outline what parts of the documentation were added, changed, removed, or reorganized -->
|
||||||
|
|
||||||
|
- Combined frontend and backend development guidelines into a single file
|
||||||
|
- Updated `mkdocs.yml` to reflect new structure
|
||||||
|
- Added clarification on contribution process
|
||||||
|
- Fixed outdated links in sidebar
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔍 Related Issue(s)
|
||||||
|
|
||||||
|
<!-- Link to related issues, discussions, or context (e.g., closes #123) -->
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ✅ Checklist
|
||||||
|
|
||||||
|
- [ ] I followed the formatting/style of existing documentation
|
||||||
|
- [ ] I have read the [Contribution Guidelines](../../CONTRIBUTING)
|
||||||
|
- [ ] I updated `mkdocs.yml` if necessary
|
||||||
|
- [ ] I verified links and references still work
|
||||||
|
- [ ] I checked that my changes improve clarity, structure, or accuracy
|
||||||
|
- [ ] I'm open to feedback and suggestions
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🙋 Additional Notes
|
||||||
|
|
||||||
|
<!-- Optional: Include anything you want reviewers to be aware of -->
|
||||||
4
.github/tweet.md
vendored
@@ -1,2 +1,2 @@
|
|||||||
🎉 New release: **v25.5.24 - MQTT, UI improvements, multiple notification emails** is live! 🚀
|
🎉 New release: **v25.6.7 - Legacy upgrade removal and Fully Qualified Domain Names 🆎** is live! 🚀
|
||||||
Check it out here: https://github.com/jokob-sk/NetAlertX/releases/tag/v25.5.24
|
Check it out here: https://github.com/jokob-sk/NetAlertX/releases/tag/v25.6.7
|
||||||
|
|||||||
137
CODE_OF_CONDUCT.md
Normal file
@@ -0,0 +1,137 @@
|
|||||||
|
|
||||||
|
# Contributor Covenant Code of Conduct
|
||||||
|
|
||||||
|
## Our Pledge
|
||||||
|
|
||||||
|
We as members, contributors, and leaders pledge to make participation in our
|
||||||
|
community a harassment-free experience for everyone, regardless of age, body
|
||||||
|
size, visible or invisible disability, ethnicity, sex characteristics, gender
|
||||||
|
identity and expression, level of experience, education, socio-economic status,
|
||||||
|
nationality, personal appearance, race, caste, color, religion, or sexual
|
||||||
|
identity and orientation.
|
||||||
|
|
||||||
|
We pledge to act and interact in ways that contribute to an open, welcoming,
|
||||||
|
diverse, inclusive, and healthy community.
|
||||||
|
|
||||||
|
## Our Standards
|
||||||
|
|
||||||
|
Examples of behavior that contributes to a positive environment for our
|
||||||
|
community include:
|
||||||
|
|
||||||
|
- Demonstrating empathy and kindness toward other people
|
||||||
|
- Being respectful of differing opinions, viewpoints, and experiences
|
||||||
|
- Giving and gracefully accepting constructive feedback
|
||||||
|
- Accepting responsibility and apologizing to those affected by our mistakes,
|
||||||
|
and learning from the experience
|
||||||
|
- Focusing on what is best not just for us as individuals, but for the overall
|
||||||
|
community
|
||||||
|
|
||||||
|
Examples of unacceptable behavior include:
|
||||||
|
|
||||||
|
- The use of sexualized language or imagery, and sexual attention or advances of
|
||||||
|
any kind
|
||||||
|
- Trolling, insulting or derogatory comments, and personal or political attacks
|
||||||
|
- Public or private harassment
|
||||||
|
- Publishing others' private information, such as a physical or email address,
|
||||||
|
without their explicit permission
|
||||||
|
- Other conduct which could reasonably be considered inappropriate in a
|
||||||
|
professional setting
|
||||||
|
|
||||||
|
## Enforcement Responsibilities
|
||||||
|
|
||||||
|
Community leaders are responsible for clarifying and enforcing our standards of
|
||||||
|
acceptable behavior and will take appropriate and fair corrective action in
|
||||||
|
response to any behavior that they deem inappropriate, threatening, offensive,
|
||||||
|
or harmful.
|
||||||
|
|
||||||
|
Community leaders have the right and responsibility to remove, edit, or reject
|
||||||
|
comments, commits, code, wiki edits, issues, and other contributions that are
|
||||||
|
not aligned to this Code of Conduct, and will communicate reasons for moderation
|
||||||
|
decisions when appropriate.
|
||||||
|
|
||||||
|
## Scope
|
||||||
|
|
||||||
|
This Code of Conduct applies within all community spaces, and also applies when
|
||||||
|
an individual is officially representing the community in public spaces.
|
||||||
|
Examples of representing our community include using an official email address,
|
||||||
|
posting via an official social media account, or acting as an appointed
|
||||||
|
representative at an online or offline event.
|
||||||
|
|
||||||
|
## Enforcement
|
||||||
|
|
||||||
|
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||||
|
reported to the community leaders responsible for enforcement at <jokob@duck.com>.
|
||||||
|
All complaints will be reviewed and investigated promptly and fairly.
|
||||||
|
|
||||||
|
All community leaders are obligated to respect the privacy and security of the
|
||||||
|
reporter of any incident.
|
||||||
|
|
||||||
|
## Ethical Use Clause (Project-Specific)
|
||||||
|
|
||||||
|
While NetAlertX is a tool designed to empower users with greater insight into their own networks, we expect and encourage all users to use this software **ethically and legally**.
|
||||||
|
|
||||||
|
- Do not use this software to scan or monitor networks without **explicit authorization**.
|
||||||
|
- Respect privacy, consent, and data protection laws applicable in your jurisdiction.
|
||||||
|
- Any use of NetAlertX for malicious surveillance, stalking, or unauthorized access is explicitly discouraged and may be grounds for removal from the community and revocation of support.
|
||||||
|
|
||||||
|
We reserve the right to take appropriate action to uphold the ethical integrity of this project.
|
||||||
|
|
||||||
|
## Enforcement Guidelines
|
||||||
|
|
||||||
|
Community leaders will follow these Community Impact Guidelines in determining
|
||||||
|
the consequences for any action they deem in violation of this Code of Conduct:
|
||||||
|
|
||||||
|
### 1. Correction
|
||||||
|
|
||||||
|
**Community Impact**: Use of inappropriate language or other behavior deemed
|
||||||
|
unprofessional or unwelcome in the community.
|
||||||
|
|
||||||
|
**Consequence**: A private, written warning from community leaders, providing
|
||||||
|
clarity around the nature of the violation and an explanation of why the
|
||||||
|
behavior was inappropriate. A public apology may be requested.
|
||||||
|
|
||||||
|
### 2. Warning
|
||||||
|
|
||||||
|
**Community Impact**: A violation through a single incident or series of
|
||||||
|
actions.
|
||||||
|
|
||||||
|
**Consequence**: A warning with consequences for continued behavior. No
|
||||||
|
interaction with the people involved, including unsolicited interaction with
|
||||||
|
those enforcing the Code of Conduct, for a specified period of time. This
|
||||||
|
includes avoiding interactions in community spaces as well as external channels
|
||||||
|
like social media. Violating these terms may lead to a temporary or permanent
|
||||||
|
ban.
|
||||||
|
|
||||||
|
### 3. Temporary Ban
|
||||||
|
|
||||||
|
**Community Impact**: A serious violation of community standards, including
|
||||||
|
sustained inappropriate behavior.
|
||||||
|
|
||||||
|
**Consequence**: A temporary ban from any sort of interaction or public
|
||||||
|
communication with the community for a specified period of time. No public or
|
||||||
|
private interaction with the people involved, including unsolicited interaction
|
||||||
|
with those enforcing the Code of Conduct, is allowed during this period.
|
||||||
|
Violating these terms may lead to a permanent ban.
|
||||||
|
|
||||||
|
### 4. Permanent Ban
|
||||||
|
|
||||||
|
**Community Impact**: Demonstrating a pattern of violation of community
|
||||||
|
standards, including sustained inappropriate behavior, harassment of an
|
||||||
|
individual, or aggression toward or disparagement of classes of individuals.
|
||||||
|
|
||||||
|
**Consequence**: A permanent ban from any sort of public interaction within the
|
||||||
|
community.
|
||||||
|
|
||||||
|
## Attribution
|
||||||
|
|
||||||
|
This Code of Conduct is adapted from the
|
||||||
|
[Contributor Covenant](https://www.contributor-covenant.org/), version 2.1,
|
||||||
|
available at
|
||||||
|
<https://www.contributor-covenant.org/version/2/1/code_of_conduct/>.
|
||||||
|
|
||||||
|
Community Impact Guidelines were inspired by
|
||||||
|
[Mozilla's code of conduct enforcement ladder](https://github.com/mozilla/inclusion).
|
||||||
|
|
||||||
|
For answers to common questions about this code of conduct, see the FAQ at
|
||||||
|
<https://www.contributor-covenant.org/faq/>. Translations are available at
|
||||||
|
<https://www.contributor-covenant.org/translations/>.
|
||||||
55
CONTRIBUTING
@@ -1,14 +1,53 @@
|
|||||||
# Contributing to this project
|
# 🤝 Contributing to NetAlertX
|
||||||
|
|
||||||
## Issues, bugs, feature requests
|
First off, **thank you** for taking the time to contribute! NetAlertX is built and improved with the help of passionate people like you.
|
||||||
|
|
||||||
The issue tracker is the preferred channel for bug reports, features requests and submitting pull requests.
|
---
|
||||||
|
|
||||||
Before submitting a new issue please spend a couple of minutes on research:
|
## 📂 Issues, Bugs, and Feature Requests
|
||||||
|
|
||||||
* Check [🛑 Common issues](https://github.com/jokob-sk/NetAlertX/blob/main/docs/DEBUG_TIPS.md#common-issues)
|
Please use the [GitHub Issue Tracker](https://github.com/jokob-sk/NetAlertX/issues) for:
|
||||||
* Check [💡 Closed issues](https://github.com/jokob-sk/NetAlertX/issues?q=is%3Aissue+is%3Aclosed) if a similar issue was solved in the past.
|
- Bug reports 🐞
|
||||||
|
- Feature requests 💡
|
||||||
|
- Documentation feedback 📖
|
||||||
|
|
||||||
## Pull-requests (PRs)
|
Before opening a new issue:
|
||||||
|
- 🛑 [Check Common Issues & Debug Tips](https://github.com/jokob-sk/NetAlertX/blob/main/docs/DEBUG_TIPS.md#common-issues)
|
||||||
|
- 🔍 [Search Closed Issues](https://github.com/jokob-sk/NetAlertX/issues?q=is%3Aissue+is%3Aclosed)
|
||||||
|
|
||||||
If you submit a PR please do check that your changes are backward compatible with existing installations. Existing features should be always preserved.
|
---
|
||||||
|
|
||||||
|
## 🚀 Submitting Pull Requests (PRs)
|
||||||
|
|
||||||
|
We welcome PRs to improve the code, docs, or UI!
|
||||||
|
|
||||||
|
Please:
|
||||||
|
- Ensure **backward compatibility** with existing installations
|
||||||
|
- Preserve existing features unless a breaking change is intentional and discussed
|
||||||
|
- Follow existing **code style and structure**
|
||||||
|
- Provide a clear title and description for your PR
|
||||||
|
- If relevant, add or update tests and documentation
|
||||||
|
- For plugins, refer to the [Plugin Dev Guide](https://github.com/jokob-sk/NetAlertX/blob/main/docs/PLUGINS_DEV.md)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🌟 First-Time Contributors
|
||||||
|
|
||||||
|
New to open source? Check out these resources:
|
||||||
|
- [How to Fork and Submit a PR](https://opensource.guide/how-to-contribute/)
|
||||||
|
- Ask questions or get support in our [Discord](https://discord.gg/NczTUTWyRr)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔐 Code of Conduct
|
||||||
|
|
||||||
|
By participating, you agree to follow our [Code of Conduct](./CODE_OF_CONDUCT.md), which ensures a respectful and welcoming community.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📬 Contact
|
||||||
|
|
||||||
|
If you have more in-depth questions or want to discuss contributing in other ways, feel free to reach out at:
|
||||||
|
📧 [jokob@duck.com](mailto:jokob@duck.com?subject=NetAlertX%20Contribution)
|
||||||
|
|
||||||
|
We appreciate every contribution, big or small! 💙
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
FROM alpine:3.21 AS builder
|
FROM alpine:3.22 AS builder
|
||||||
|
|
||||||
ARG INSTALL_DIR=/app
|
ARG INSTALL_DIR=/app
|
||||||
|
|
||||||
@@ -22,7 +22,7 @@ RUN pip install openwrt-luci-rpc asusrouter asyncio aiohttp graphene flask tplin
|
|||||||
RUN cat ${INSTALL_DIR}/install/freebox_certificate.pem >> /opt/venv/lib/python3.12/site-packages/aiofreepybox/freebox_certificates.pem
|
RUN cat ${INSTALL_DIR}/install/freebox_certificate.pem >> /opt/venv/lib/python3.12/site-packages/aiofreepybox/freebox_certificates.pem
|
||||||
|
|
||||||
# second stage
|
# second stage
|
||||||
FROM alpine:3.21 AS runner
|
FROM alpine:3.22 AS runner
|
||||||
|
|
||||||
ARG INSTALL_DIR=/app
|
ARG INSTALL_DIR=/app
|
||||||
|
|
||||||
|
|||||||
76
README.md
@@ -8,6 +8,39 @@
|
|||||||
|
|
||||||
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).
|
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).
|
||||||
|
|
||||||
|
## 📋 Table of Contents
|
||||||
|
|
||||||
|
- [Features](#-features)
|
||||||
|
- [Documentation](#-documentation)
|
||||||
|
- [Quick Start](#-quick-start)
|
||||||
|
- [Alternative Apps](#-other-alternative-apps)
|
||||||
|
- [Security & Privacy](#-security--privacy)
|
||||||
|
- [FAQ](#-faq)
|
||||||
|
- [Known Issues](#-known-issues)
|
||||||
|
- [Donations](#-donations)
|
||||||
|
- [Contributors](#-contributors)
|
||||||
|
- [Translations](#-translations)
|
||||||
|
- [License](#license)
|
||||||
|
|
||||||
|
|
||||||
|
## 🚀 Quick Start
|
||||||
|
|
||||||
|
Start NetAlertX in seconds with Docker:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker run -d \
|
||||||
|
--name=netalertx \
|
||||||
|
-p 20211:20211 \
|
||||||
|
-v /your/config/path:/config \
|
||||||
|
jokobsk/netalertx
|
||||||
|
```
|
||||||
|
|
||||||
|
Need help configuring it? Check the [usage guide](https://github.com/jokob-sk/NetAlertX/blob/main/docs/README.md) or [full documentation](https://jokob-sk.github.io/NetAlertX/).
|
||||||
|
|
||||||
|
For Home Assistant users: [Click here to add NetAlertX](https://my.home-assistant.io/redirect/supervisor_add_addon_repository/?repository_url=https%3A%2F%2Fgithub.com%2Falexbelgium%2Fhassio-addons)
|
||||||
|
|
||||||
|
For other install methods, check the [installation docs](#-documentation)
|
||||||
|
|
||||||
|
|
||||||
| [📑 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://jokob-sk.github.io/NetAlertX/) | [🔌 Plugins](https://github.com/jokob-sk/NetAlertX/blob/main/docs/PLUGINS.md) | [🤖 Ask AI](https://gurubase.io/g/netalertx)
|
||||||
|----------------------| ----------------------| ----------------------| ----------------------| ----------------------|
|
|----------------------| ----------------------| ----------------------| ----------------------| ----------------------|
|
||||||
@@ -30,7 +63,7 @@ Get visibility of what's going on on your WIFI/LAN network and enable presence d
|
|||||||
|
|
||||||
### Scanners
|
### 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/docs/PLUGINS.md#readme) docs for a full lits of avaliable plugins.
|
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 list of avaliable plugins.
|
||||||
|
|
||||||
### Notification gateways
|
### Notification gateways
|
||||||
|
|
||||||
@@ -60,6 +93,45 @@ Supported browsers: Chrome, Firefox
|
|||||||
- [[Development] Custom Plugins](https://github.com/jokob-sk/NetAlertX/blob/main/docs/PLUGINS_DEV.md)
|
- [[Development] Custom Plugins](https://github.com/jokob-sk/NetAlertX/blob/main/docs/PLUGINS_DEV.md)
|
||||||
|
|
||||||
|
|
||||||
|
## 🔐 Security & Privacy
|
||||||
|
|
||||||
|
NetAlertX scans your local network and can store metadata about connected devices. By default, all data is stored **locally**. No information is sent to external services unless you explicitly configure notifications or integrations.
|
||||||
|
|
||||||
|
To further secure your installation:
|
||||||
|
- Run it behind a reverse proxy with authentication
|
||||||
|
- Use firewalls to restrict access to the web UI
|
||||||
|
- Regularly update to the latest version for security patches
|
||||||
|
|
||||||
|
See [Security Best Practices](https://github.com/jokob-sk/NetAlertX/security) for more details.
|
||||||
|
|
||||||
|
|
||||||
|
## ❓ FAQ
|
||||||
|
|
||||||
|
**Q: Why don’t I see any devices?**
|
||||||
|
A: Ensure the container has proper network access (e.g., use `--network host` on Linux). Also check that your scan method is properly configured in the UI.
|
||||||
|
|
||||||
|
**Q: Does this work on Wi-Fi-only devices like Raspberry Pi?**
|
||||||
|
A: Yes, but some scanners (e.g. ARP) work best on Ethernet. For Wi-Fi, try SNMP, DHCP, or Pi-hole import.
|
||||||
|
|
||||||
|
**Q: Will this send any data to the internet?**
|
||||||
|
A: No. All scans and data remain local, unless you set up cloud-based notifications.
|
||||||
|
|
||||||
|
**Q: Can I use this without Docker?**
|
||||||
|
A: Yes! You can install it bare-metal. See the [bare metal installation guide](https://github.com/jokob-sk/NetAlertX/blob/main/docs/HW_INSTALL.md).
|
||||||
|
|
||||||
|
**Q: Where is the data stored?**
|
||||||
|
A: In the `/config` volume, mapped in Docker. Back up this folder regularly.
|
||||||
|
|
||||||
|
|
||||||
|
## 🐞 Known Issues
|
||||||
|
|
||||||
|
- Some scanners (e.g. ARP) may not detect devices on different subnets.
|
||||||
|
- Wi-Fi-only networks may require alternate scanners for accurate detection.
|
||||||
|
- Notification throttling may be needed for large networks to prevent spam.
|
||||||
|
- On some systems, elevated permissions (like `CAP_NET_RAW`) may be needed for low-level scanning.
|
||||||
|
|
||||||
|
Check the [GitHub Issues](https://github.com/jokob-sk/NetAlertX/issues) for the latest bug reports and solutions.
|
||||||
|
|
||||||
## 📃 Everything else
|
## 📃 Everything else
|
||||||
<!--- --------------------------------------------------------------------- --->
|
<!--- --------------------------------------------------------------------- --->
|
||||||
|
|
||||||
@@ -113,7 +185,6 @@ Proudly using [Weblate](https://hosted.weblate.org/projects/pialert/). Help out
|
|||||||
> 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)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<!--- --------------------------------------------------------------------- --->
|
<!--- --------------------------------------------------------------------- --->
|
||||||
[main]: ./docs/img/devices_split.png "Main screen"
|
[main]: ./docs/img/devices_split.png "Main screen"
|
||||||
[device_details]: ./docs/img/device_details.png "Screen 1"
|
[device_details]: ./docs/img/device_details.png "Screen 1"
|
||||||
@@ -131,4 +202,3 @@ Proudly using [Weblate](https://hosted.weblate.org/projects/pialert/). Help out
|
|||||||
[main_dark]: /docs/img/1_devices_dark.jpg "Main screen dark"
|
[main_dark]: /docs/img/1_devices_dark.jpg "Main screen dark"
|
||||||
[maintain_dark]: /docs/img/5_maintain.jpg "Maintain screen dark"
|
[maintain_dark]: /docs/img/5_maintain.jpg "Maintain screen dark"
|
||||||
[follow_star]: /docs/img/Follow_Releases_and_Star.gif "Follow and Star"
|
[follow_star]: /docs/img/Follow_Releases_and_Star.gif "Follow and Star"
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
DISCOVER_PLUGINS=True
|
DISCOVER_PLUGINS=True
|
||||||
SCAN_SUBNETS=['--localnet']
|
SCAN_SUBNETS=['--localnet']
|
||||||
TIMEZONE='Europe/Berlin'
|
TIMEZONE='Europe/Berlin'
|
||||||
LOADED_PLUGINS=['ARPSCAN','CSVBCKP','DBCLNP', 'DIGSCAN', 'INTRNT','MAINT','NEWDEV', 'NBTSCAN', 'NSLOOKUP','NTFPRCS', 'AVAHISCAN', 'SETPWD','SMTP', 'SYNC', 'VNDRPDT', 'WORKFLOWS', 'UI']
|
LOADED_PLUGINS=['ARPSCAN', 'AVAHISCAN', 'CSVBCKP','DBCLNP', 'DIGSCAN', 'INTRNT', 'MAINT', 'NEWDEV', 'NBTSCAN', 'NSLOOKUP','NTFPRCS', 'SETPWD', 'SMTP', 'SYNC', 'VNDRPDT', 'WORKFLOWS', 'UI']
|
||||||
|
|
||||||
DAYS_TO_KEEP_EVENTS=90
|
DAYS_TO_KEEP_EVENTS=90
|
||||||
# Used for generating links in emails. Make sure not to add a trailing slash!
|
# Used for generating links in emails. Make sure not to add a trailing slash!
|
||||||
@@ -30,6 +30,8 @@ REPORT_DASHBOARD_URL='http://127.0.0.1'
|
|||||||
INTRNT_RUN='schedule'
|
INTRNT_RUN='schedule'
|
||||||
ARPSCAN_RUN='schedule'
|
ARPSCAN_RUN='schedule'
|
||||||
NSLOOKUP_RUN='before_name_updates'
|
NSLOOKUP_RUN='before_name_updates'
|
||||||
|
AVAHISCAN_RUN='before_name_updates'
|
||||||
|
NBTSCAN_RUN='before_name_updates'
|
||||||
|
|
||||||
# Email
|
# Email
|
||||||
#-------------------------------------
|
#-------------------------------------
|
||||||
|
|||||||
@@ -49,6 +49,8 @@ query GetDevices($options: PageQueryOptionsInput) {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
See also: [Debugging GraphQL issues](./DEBUG_GRAPHQL.md)
|
||||||
|
|
||||||
### `curl` Command
|
### `curl` Command
|
||||||
|
|
||||||
You can use the following `curl` command to execute the query.
|
You can use the following `curl` command to execute the query.
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
Use the official installation guides at first and use community content as supplementary material. Open an issue or PR if you'd like to add your link to the list 🙏 (Ordered by last update time)
|
Use the official installation guides at first and use community content as supplementary material. Open an issue or PR if you'd like to add your link to the list 🙏 (Ordered by last update time)
|
||||||
|
|
||||||
|
- ▶ [Discover & Monitor Your Network with This Self-Hosted Open Source Tool - Lawrence Systems](https://www.youtube.com/watch?v=R3b5cxLZMpo) (June 2025)
|
||||||
- ▶ [Home Lab Network Monitoring - Scotti-BYTE Enterprise Consulting Services](https://www.youtube.com/watch?v=0DryhzrQSJA) (July 2024)
|
- ▶ [Home Lab Network Monitoring - Scotti-BYTE Enterprise Consulting Services](https://www.youtube.com/watch?v=0DryhzrQSJA) (July 2024)
|
||||||
- 📄 [How to Install NetAlertX on Your Synology NAS - Marius hosting](https://mariushosting.com/how-to-install-pi-alert-on-your-synology-nas/) (Updated frequently)
|
- 📄 [How to Install NetAlertX on Your Synology NAS - Marius hosting](https://mariushosting.com/how-to-install-pi-alert-on-your-synology-nas/) (Updated frequently)
|
||||||
- 📄 [Using the PiAlert Network Security Scanner on a Raspberry Pi - PiMyLifeUp](https://pimylifeup.com/raspberry-pi-pialert/)
|
- 📄 [Using the PiAlert Network Security Scanner on a Raspberry Pi - PiMyLifeUp](https://pimylifeup.com/raspberry-pi-pialert/)
|
||||||
|
|||||||
64
docs/DEBUG_GRAPHQL.md
Executable file
@@ -0,0 +1,64 @@
|
|||||||
|
# Debugging GraphQL server issues
|
||||||
|
|
||||||
|
The GraphQL server is an API middle layer, running on it's own port specified by `GRAPHQL_PORT`, to retrieve and show the data in the UI. It can also be used to retrieve data for custom third party integarions. Check the [API documentation](./API.md) for details.
|
||||||
|
|
||||||
|
The most common issue is that the GraphQL server doesn't start properly, usually due to a **port conflict**. If you are running multiple NetAlertX instances, make sure to use **unique ports** by changing the `GRAPHQL_PORT` setting. The default is `20212`.
|
||||||
|
|
||||||
|
## How to update the `GRAPHQL_PORT` in case of issues
|
||||||
|
|
||||||
|
As a first troubleshooting step try changing the default `GRAPHQL_PORT` setting. Please remember NetAlertX is running on the host so any application uising the same port will cause issues.
|
||||||
|
|
||||||
|
### Updating the setting via the Settings UI
|
||||||
|
|
||||||
|
Ideally use the Settings UI to update the setting under General -> Core -> GraphQL port:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
You might need to temporarily stop other applications or NetAlertX instances causing conflicts to update the setting. The `API_TOKEN` is used to authenticate any API calls, including GraphQL requests.
|
||||||
|
|
||||||
|
### Updating the `app.conf` file
|
||||||
|
|
||||||
|
If the UI is not accessible, you can directly edit the `app.conf` file in your `/config` folder:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### Using a docker variable
|
||||||
|
|
||||||
|
All application settings can also be initialized via the `APP_CONF_OVERRIDE` docker env variable.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
...
|
||||||
|
environment:
|
||||||
|
- TZ=Europe/Berlin
|
||||||
|
- PORT=20213
|
||||||
|
- APP_CONF_OVERRIDE={"GRAPHQL_PORT":"20214"}
|
||||||
|
...
|
||||||
|
```
|
||||||
|
|
||||||
|
## How to check the GraphQL server is running?
|
||||||
|
|
||||||
|
There are several ways to check if the GraphQL server is running.
|
||||||
|
|
||||||
|
### Init Check
|
||||||
|
|
||||||
|
You can navigate to Maintenance -> Init Check to see if `isGraphQLServerRunning` is ticked:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### Checking the Logs
|
||||||
|
|
||||||
|
You can navigate to Maintenance -> Logs and search for `graphql` to see if it started correctly and serving requests:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### Inspecting the Browser console
|
||||||
|
|
||||||
|
In your browser open the dev console (usually F12) and navigate to the Network tab where you can filter GraphQL requests (e.g., reload the Devices page).
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
You can then inspect any of the POST requests by opening them in a new tab.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
@@ -8,8 +8,13 @@ This set of settings allows you to group Devices under different views. The Arch
|
|||||||
|
|
||||||
## Status Colors
|
## Status Colors
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
1. Online (Green) = A device that is no longer marked as a "New Device"
|
1. 🔌 Online (Green) = A device that is no longer marked as a "New Device".
|
||||||
2. New (Green) = A newly discovered device that is online and is still "ticked" as a "New Device"
|
2. 🔌 New (Green) = A newly discovered device that is online and is still marked as a "New Device".
|
||||||
3. New (Grey) = Same as No.2 but device is now offline.
|
3. ✖ New (Grey) = Same as No.2 but device is now offline.
|
||||||
|
4. ✖ Offline (Grey) = A device that was not detected online in the last scan.
|
||||||
|
5. ⚠ Down (Red) = A device that has "Alert Down" marked and has been offline for the time set in the Setting `NTFPRCS_alert_down_time`.
|
||||||
|
|
||||||
|
|
||||||
|
See also [Notification guide](./NOTIFICATIONS.md).
|
||||||
@@ -5,7 +5,8 @@ To download and install NetAlertX on the hardware/server directly use the `curl`
|
|||||||
> [!NOTE]
|
> [!NOTE]
|
||||||
> This is an Experimental feature 🧪 and it relies on community support.
|
> This is an Experimental feature 🧪 and it relies on community support.
|
||||||
>
|
>
|
||||||
> 🙏 Looking for maintainers for this installation method 🙂
|
> 🙏 Looking for maintainers for this installation method 🙂 Curent community volunteers:
|
||||||
|
> - [slammingprogramming](https://github.com/slammingprogramming)
|
||||||
>
|
>
|
||||||
> There is no guarantee that the install script or any other script will gracefully handle other installed software.
|
> There is no guarantee that the install script or any other script will gracefully handle other installed software.
|
||||||
> Data loss is a possibility, **it is recommended to install NetAlertX using the supplied Docker image**.
|
> Data loss is a possibility, **it is recommended to install NetAlertX using the supplied Docker image**.
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ Get **NetAlertX** up and running in a few simple steps.
|
|||||||
> [!TIP]
|
> [!TIP]
|
||||||
> Enable additional plugins under **Settings → `LOADED_PLUGINS`**.
|
> Enable additional plugins under **Settings → `LOADED_PLUGINS`**.
|
||||||
> Make sure to **save** your changes and **reload the page** to activate them.
|
> Make sure to **save** your changes and **reload the page** to activate them.
|
||||||
> 
|
> 
|
||||||
|
|
||||||
**Initial configuration**: `ARPSCAN`, `INTRNT`
|
**Initial configuration**: `ARPSCAN`, `INTRNT`
|
||||||
|
|
||||||
|
|||||||
@@ -85,8 +85,8 @@ services:
|
|||||||
# (Optional) Useful for debugging setup issues
|
# (Optional) Useful for debugging setup issues
|
||||||
- local/path/logs:/app/log
|
- local/path/logs:/app/log
|
||||||
# (API: OPTION 1) Store temporary files in memory (recommended for performance)
|
# (API: OPTION 1) Store temporary files in memory (recommended for performance)
|
||||||
- type: tmpfs # ◀
|
- type: tmpfs # ◀ 🔺
|
||||||
target: /app/api # ◀
|
target: /app/api # ◀ 🔺
|
||||||
# (API: OPTION 2) Store API data on disk (useful for debugging)
|
# (API: OPTION 2) Store API data on disk (useful for debugging)
|
||||||
# - local/path/api:/app/api
|
# - local/path/api:/app/api
|
||||||
environment:
|
environment:
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ NetAlertX supports additional plugins to extend its functionality, each with its
|
|||||||
|
|
||||||
> [!TIP]
|
> [!TIP]
|
||||||
> You can load additional Plugins via the General -> `LOADED_PLUGINS` setting. You need to save the settings for the new plugins to load (cache/page reload may be necessary).
|
> You can load additional Plugins via the General -> `LOADED_PLUGINS` setting. You need to save the settings for the new plugins to load (cache/page reload may be necessary).
|
||||||
> 
|
> 
|
||||||
|
|
||||||
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)
|
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.
|
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.
|
||||||
|
|||||||
107
docs/SECURITY.md
@@ -1,29 +1,102 @@
|
|||||||
# Securing your NetAlertX instance
|
## 🧭 Responsibility Disclaimer
|
||||||
|
|
||||||
NetAlertX is an execution framework. In order to run scanners and plugins, the application has to have access to privileged system resources. It is not recommended to expose NetAlertX to the internet without taking basic security precautions. It is highly recommended to use a VPN to access the application and to set up a password for the web interface before exposing the UI online.
|
NetAlertX provides powerful tools for network scanning, presence detection, and automation. However, **it is up to you—the deployer—to ensure that your instance is properly secured**.
|
||||||
|
|
||||||
## VPN
|
This includes (but is not limited to):
|
||||||
|
- Controlling who has access to the UI and API
|
||||||
|
- Following network and container security best practices
|
||||||
|
- Running NetAlertX only on networks where you have legal authorization
|
||||||
|
- Keeping your deployment up to date with the latest patches
|
||||||
|
|
||||||
VPNs allow you to securely access your NetAlertX instance from remote locations without exposing it to the internet. A VPN encrypts your connection and prevents unauthorized access.
|
> NetAlertX is not responsible for misuse, misconfiguration, or unsecure deployments. Always test and secure your setup before exposing it to the outside world.
|
||||||
|
|
||||||
### Tailscale as an Alternative
|
# 🔐 Securing Your NetAlertX Instance
|
||||||
|
|
||||||
If setting up a traditional VPN is not ideal, you can use [Tailscale](https://tailscale.com/) as an easy alternative. Tailscale creates a secure, encrypted connection between your devices without complex configuration. Since NetAlertX is designed to be run on private networks, Tailscale can provide a simple way to securely connect to your instance from anywhere.
|
NetAlertX is a powerful network scanning and automation framework. With that power comes responsibility. **It is your responsibility to secure your deployment**, especially if you're running it outside a trusted local environment.
|
||||||
|
|
||||||
## Setting a Password
|
---
|
||||||
|
|
||||||
By default, NetAlertX does not enforce authentication, but it is highly recommended to set a password before exposing the web interface.
|
## ⚠️ TL;DR – Key Security Recommendations
|
||||||
|
|
||||||
Configure `SETPWD_enable_password` to `true` and enter your password in `SETPWD_password`. When enabled, a login dialog is displayed. If facing issues, you can always disable the login by setting `SETPWD_enable_password=false` in your `app.conf` file.
|
- ✅ **NEVER expose NetAlertX directly to the internet without protection**
|
||||||
|
- ✅ Use a **VPN or Tailscale** to access remotely
|
||||||
|
- ✅ Enable **password protection** for the web UI
|
||||||
|
- ✅ Harden your container environment (e.g., no unnecessary privileges)
|
||||||
|
- ✅ Use **firewalls and IP whitelisting**
|
||||||
|
- ✅ Keep the software **updated**
|
||||||
|
- ✅ Limit the scope of **plugins and API keys**
|
||||||
|
|
||||||
- The default password is `123456`.
|
---
|
||||||
- Passwords are stored as SHA256 hashes for security.
|
|
||||||
|
|
||||||
## Additional Security Measures
|
## 🔗 Access Control with VPN (or Tailscale)
|
||||||
|
|
||||||
- **Firewall Rules**: Ensure that only trusted IPs can access the NetAlertX instance.
|
NetAlertX is designed to be run on **private LANs**, not the open internet.
|
||||||
- **Limit Plugin Permissions**: Only enable the plugins necessary for your setup.
|
|
||||||
- **Keep Software Updated**: Regularly update NetAlertX to receive the latest security patches.
|
|
||||||
- **Use Read-Only API Keys**: If exposing APIs, limit privileges with read-only keys where applicable.
|
|
||||||
|
|
||||||
By following these security recommendations, you can help protect your NetAlertX instance from unauthorized access and potential misuse.
|
**Recommended**: Use a VPN to access NetAlertX from remote locations.
|
||||||
|
|
||||||
|
### ✅ Tailscale (Easy VPN Alternative)
|
||||||
|
|
||||||
|
Tailscale sets up a private mesh network between your devices. It's fast to configure and ideal for NetAlertX.
|
||||||
|
👉 [Get started with Tailscale](https://tailscale.com/)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔑 Web UI Password Protection
|
||||||
|
|
||||||
|
By default, NetAlertX does **not** require login. Before exposing the UI in any way:
|
||||||
|
|
||||||
|
1. Enable password protection:
|
||||||
|
```ini
|
||||||
|
SETPWD_enable_password=true
|
||||||
|
SETPWD_password=your_secure_password
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Passwords are stored as SHA256 hashes
|
||||||
|
|
||||||
|
3. Default password (if not changed): 123456 — change it ASAP!
|
||||||
|
|
||||||
|
|
||||||
|
> To disable authenticated login, set `SETPWD_enable_password=false` in `app.conf`
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔥 Additional Security Measures
|
||||||
|
|
||||||
|
- **Firewall / Network Rules**
|
||||||
|
Restrict UI/API access to trusted IPs only.
|
||||||
|
|
||||||
|
- **Limit Docker Capabilities**
|
||||||
|
Avoid `--privileged`. Use `--cap-add=NET_RAW` and others **only if required** by your scan method.
|
||||||
|
|
||||||
|
- **Keep NetAlertX Updated**
|
||||||
|
Regular updates contain bug fixes and security patches.
|
||||||
|
|
||||||
|
- **Plugin Permissions**
|
||||||
|
Disable unused plugins. Only install from trusted sources.
|
||||||
|
|
||||||
|
- **Use Read-Only API Keys**
|
||||||
|
When integrating NetAlertX with other tools, scope keys tightly.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🧱 Docker Hardening Tips
|
||||||
|
|
||||||
|
- Use `read-only` mount options where possible (`:ro`)
|
||||||
|
- Avoid running as `root` unless absolutely necessary
|
||||||
|
- Consider using `docker scan` or other container image vulnerability scanners
|
||||||
|
- Run with `--network host` **only on trusted networks** and only if needed for ARP-based scans
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📣 Responsible Disclosure
|
||||||
|
|
||||||
|
If you discover a vulnerability or security concern, please report it **privately** to:
|
||||||
|
|
||||||
|
📧 [jokob@duck.com](mailto:jokob@duck.com?subject=NetAlertX%20Security%20Disclosure)
|
||||||
|
|
||||||
|
We take security seriously and will work to patch confirmed issues promptly. Your help in responsible disclosure is appreciated!
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
By following these recommendations, you can ensure your NetAlertX deployment is both powerful **and** secure.
|
||||||
@@ -1,5 +1,8 @@
|
|||||||
### Create a simple n8n workflow
|
### Create a simple n8n workflow
|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
> You need to enable the `WEBHOOK` plugin first in order to follow this guide. See the [Plugins guide](./PLUGINS.md) for details.
|
||||||
|
|
||||||
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.
|
||||||
|
|
||||||

|

|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
# Webhook Secrets
|
# Webhook Secrets
|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
> You need to enable the `WEBHOOK` plugin first in order to follow this guide. See the [Plugins guide](./PLUGINS.md) for details.
|
||||||
|
|
||||||
## How does the signing work?
|
## How does the signing work?
|
||||||
|
|
||||||
NetAlertX will use the configured secret to create a hash signature of the request body. This SHA256-HMAC signature will appear in the `X-Webhook-Signature` header of each request to the webhook target URL. You can use the value of this header to validate the request was sent by NetAlertX.
|
NetAlertX will use the configured secret to create a hash signature of the request body. This SHA256-HMAC signature will appear in the `X-Webhook-Signature` header of each request to the webhook target URL. You can use the value of this header to validate the request was sent by NetAlertX.
|
||||||
|
|||||||
BIN
docs/img/DEBUG_GRAPHQL/Init_check.png
Executable file
|
After Width: | Height: | Size: 135 KiB |
BIN
docs/img/DEBUG_GRAPHQL/app_conf_graphql_port.png
Executable file
|
After Width: | Height: | Size: 11 KiB |
BIN
docs/img/DEBUG_GRAPHQL/dev_console_graphql_json.png
Executable file
|
After Width: | Height: | Size: 32 KiB |
BIN
docs/img/DEBUG_GRAPHQL/graphql_running_logs.png
Executable file
|
After Width: | Height: | Size: 36 KiB |
BIN
docs/img/DEBUG_GRAPHQL/graphql_settings_port_token.png
Executable file
|
After Width: | Height: | Size: 34 KiB |
BIN
docs/img/DEBUG_GRAPHQL/network_graphql.png
Executable file
|
After Width: | Height: | Size: 35 KiB |
|
Before Width: | Height: | Size: 7.7 KiB |
BIN
docs/img/DEVICE_MANAGEMENT/device_management_status_colors.png
Executable file
|
After Width: | Height: | Size: 39 KiB |
BIN
docs/img/PLUGINS/enable_plugin.gif
Executable file
|
After Width: | Height: | Size: 134 KiB |
1502
front/php/templates/language/ar_ar.json
Executable file → Normal file
0
front/php/templates/language/ca_ca.json
Executable file → Normal file
0
front/php/templates/language/cs_cz.json
Executable file → Normal file
26
front/php/templates/language/de_de.json
Executable file → Normal file
@@ -389,25 +389,25 @@
|
|||||||
"Maintenance_InitCheck_Checking": "",
|
"Maintenance_InitCheck_Checking": "",
|
||||||
"Maintenance_InitCheck_QuickSetupGuide": "",
|
"Maintenance_InitCheck_QuickSetupGuide": "",
|
||||||
"Maintenance_InitCheck_Success": "",
|
"Maintenance_InitCheck_Success": "",
|
||||||
"Maintenance_ReCheck": "",
|
"Maintenance_ReCheck": "Wiederhole Check",
|
||||||
"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": "Einstellungen exportieren",
|
"Maintenance_Tool_DownloadConfig": "Einstellungen exportieren",
|
||||||
"Maintenance_Tool_DownloadConfig_text": "",
|
"Maintenance_Tool_DownloadConfig_text": "Download eines Voll-Backup deiner Einstellungen. Konfiguration gespeichert in <code>app.conf</code> Datei.",
|
||||||
"Maintenance_Tool_DownloadWorkflows": "",
|
"Maintenance_Tool_DownloadWorkflows": "Workflows Export",
|
||||||
"Maintenance_Tool_DownloadWorkflows_text": "",
|
"Maintenance_Tool_DownloadWorkflows_text": "Download eines Voll-Backups deiner Worksflows. Gespeichert in <code>workflows.json</code> Datei.",
|
||||||
"Maintenance_Tool_ExportCSV": "CSV Export",
|
"Maintenance_Tool_ExportCSV": "Export Geräte (csv)",
|
||||||
"Maintenance_Tool_ExportCSV_noti": "CSV Export",
|
"Maintenance_Tool_ExportCSV_noti": "Geräte Export (csv)",
|
||||||
"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?",
|
||||||
"Maintenance_Tool_ExportCSV_text": "Generiere eine CSV-Datei (comma separated values) mit einer Liste aller Geräte und deren Beziehungen zwischen Netzwerkknoten und verbundenen Geräten. Dies kann auch durch das Besuchen der URL <code>your NetAlertX url/php/server/devices.php?action=ExportCSV</code> oder durch Aktivieren des <a href=\"settings.php#CSVBCKP_header\">CSV-Backups</a> ausgelöst werden.",
|
"Maintenance_Tool_ExportCSV_text": "Generiere eine CSV-Datei (comma separated values) mit einer Liste aller Geräte und deren Beziehungen zwischen Netzwerkknoten und verbundenen Geräten. Dies kann auch durch das Besuchen der URL <code>your NetAlertX url/php/server/devices.php?action=ExportCSV</code> oder durch Aktivieren des <a href=\"settings.php#CSVBCKP_header\">CSV-Backups</a> ausgelöst werden.",
|
||||||
"Maintenance_Tool_ImportCSV": "CSV Import",
|
"Maintenance_Tool_ImportCSV": "Geräte Import (csv)",
|
||||||
"Maintenance_Tool_ImportCSV_noti": "CSV Import",
|
"Maintenance_Tool_ImportCSV_noti": "Geräte Import (csv)",
|
||||||
"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 alle Geräte in der Datenbank <b>überschreiben</b>.",
|
||||||
"Maintenance_Tool_ImportCSV_text": "Machen Sie ein Backup, bevor Sie diese Funktion 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": "Mache ein Backup, bevor Du diese Funktion nutzt. 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_ImportConfig_noti": "Einstellungen importieren (app.conf)",
|
||||||
"Maintenance_Tool_ImportPastedCSV": "CSV-Import (Einfügen)",
|
"Maintenance_Tool_ImportPastedCSV": "Geräte importieren (csv) (einfügen)",
|
||||||
"Maintenance_Tool_ImportPastedCSV_noti_text": "",
|
"Maintenance_Tool_ImportPastedCSV_noti_text": "Bist Du dir sicher, dass Du die eingefügte CSV importieren willst? Es werden alle Geräte in deiner Datenbank <b>überschrieben</b>.",
|
||||||
"Maintenance_Tool_ImportPastedCSV_text": "",
|
"Maintenance_Tool_ImportPastedCSV_text": "",
|
||||||
"Maintenance_Tool_ImportPastedConfig": "",
|
"Maintenance_Tool_ImportPastedConfig": "",
|
||||||
"Maintenance_Tool_ImportPastedConfig_noti_text": "",
|
"Maintenance_Tool_ImportPastedConfig_noti_text": "",
|
||||||
|
|||||||
24
front/php/templates/language/en_us.json
Executable file → Normal file
@@ -9,7 +9,7 @@
|
|||||||
"About_Exit": "Sign out",
|
"About_Exit": "Sign out",
|
||||||
"About_Title": "Network security scanner & notification framework",
|
"About_Title": "Network security scanner & notification framework",
|
||||||
"AppEvents_AppEventProcessed": "Processed",
|
"AppEvents_AppEventProcessed": "Processed",
|
||||||
"AppEvents_DateTimeCreated": "Logged",
|
"AppEvents_DateTimeCreated": "Discovered On",
|
||||||
"AppEvents_Extra": "Extra",
|
"AppEvents_Extra": "Extra",
|
||||||
"AppEvents_GUID": "Application Event GUID",
|
"AppEvents_GUID": "Application Event GUID",
|
||||||
"AppEvents_Helper1": "Helper 1",
|
"AppEvents_Helper1": "Helper 1",
|
||||||
@@ -86,7 +86,7 @@
|
|||||||
"DevDetail_GoToNetworkNode": "Navigate to the Network page of the given node.",
|
"DevDetail_GoToNetworkNode": "Navigate to the Network page of the given node.",
|
||||||
"DevDetail_Icon": "Icon",
|
"DevDetail_Icon": "Icon",
|
||||||
"DevDetail_Icon_Descr": "Enter a font awesome icon name without the fa- prefix or with complete class, e.g.: fa fa-brands fa-apple.",
|
"DevDetail_Icon_Descr": "Enter a font awesome icon name without the fa- prefix or with complete class, e.g.: fa fa-brands fa-apple.",
|
||||||
"DevDetail_Loading": "Loading...",
|
"DevDetail_Loading": "Loading…",
|
||||||
"DevDetail_MainInfo_Comments": "Comments",
|
"DevDetail_MainInfo_Comments": "Comments",
|
||||||
"DevDetail_MainInfo_Favorite": "Favorite",
|
"DevDetail_MainInfo_Favorite": "Favorite",
|
||||||
"DevDetail_MainInfo_Group": "Group",
|
"DevDetail_MainInfo_Group": "Group",
|
||||||
@@ -177,7 +177,7 @@
|
|||||||
"DevDetail_Tools_WOL": "Send WoL command to ",
|
"DevDetail_Tools_WOL": "Send WoL command to ",
|
||||||
"DevDetail_Tools_WOL_noti": "Wake-on-LAN",
|
"DevDetail_Tools_WOL_noti": "Wake-on-LAN",
|
||||||
"DevDetail_Tools_WOL_noti_text": "The Wake-on-LAN command is sent to the broadcast address. If the target is not in the subnet/VLAN of NetAlertX, the target device will not respond.",
|
"DevDetail_Tools_WOL_noti_text": "The Wake-on-LAN command is sent to the broadcast address. If the target is not in the subnet/VLAN of NetAlertX, the target device will not respond.",
|
||||||
"DevDetail_Type_hover": "The Type of the device. If you select any of the pre-defined network devices (e.g.: AP, Firewall, Router, Switch...) they will show up in the Network tree configuration as possible parent network nodes.",
|
"DevDetail_Type_hover": "The Type of the device. If you select any of the pre-defined network devices (e.g.: AP, Firewall, Router, Switch…) they will show up in the Network tree configuration as possible parent network nodes.",
|
||||||
"DevDetail_Vendor_hover": "Vendor should be auto-detected. You can overwrite or add your custom value.",
|
"DevDetail_Vendor_hover": "Vendor should be auto-detected. You can overwrite or add your custom value.",
|
||||||
"DevDetail_WOL_Title": "<i class=\"fa fa-power-off\"></i> Wake-on-LAN",
|
"DevDetail_WOL_Title": "<i class=\"fa fa-power-off\"></i> Wake-on-LAN",
|
||||||
"DevDetail_button_AddIcon": "Add new Icon",
|
"DevDetail_button_AddIcon": "Add new Icon",
|
||||||
@@ -194,7 +194,7 @@
|
|||||||
"DevDetail_button_Save": "Save",
|
"DevDetail_button_Save": "Save",
|
||||||
"DeviceEdit_ValidMacIp": "Enter a valid <b>Mac</b> and <b>IP</b> address.",
|
"DeviceEdit_ValidMacIp": "Enter a valid <b>Mac</b> and <b>IP</b> address.",
|
||||||
"Device_MultiEdit": "Multi-edit",
|
"Device_MultiEdit": "Multi-edit",
|
||||||
"Device_MultiEdit_Backup": "Careful, entering wrong values below will break your setup. Please backup your database or Devices configuration first (<a href=\"php/server/devices.php?action=ExportCSV\">click to download <i class=\"fa-solid fa-download fa-bounce\"></i></a>). Read how to recover Devices from this file in the <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/BACKUPS.md#scenario-2-corrupted-database\" target=\"_blank\">Backups documentation</a>.",
|
"Device_MultiEdit_Backup": "Careful, entering wrong values below will break your setup. Please backup your database or Devices configuration first (<a href=\"php/server/devices.php?action=ExportCSV\">click to download <i class=\"fa-solid fa-download fa-bounce\"></i></a>). Read how to recover Devices from this file in the <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/BACKUPS.md#scenario-2-corrupted-database\" target=\"_blank\">Backups documentation</a>. In order to apply your changes click the <b>Save<i class=\"fa-solid fa-save\"></i></b> icon on each field you want to update.",
|
||||||
"Device_MultiEdit_Fields": "Edit fields:",
|
"Device_MultiEdit_Fields": "Edit fields:",
|
||||||
"Device_MultiEdit_MassActions": "Mass actions:",
|
"Device_MultiEdit_MassActions": "Mass actions:",
|
||||||
"Device_MultiEdit_Tooltip": "Careful. Clicking this will apply the value on the left to all devices selected above.",
|
"Device_MultiEdit_Tooltip": "Careful. Clicking this will apply the value on the left to all devices selected above.",
|
||||||
@@ -251,7 +251,7 @@
|
|||||||
"ENCRYPTION_KEY_name": "Encryption key",
|
"ENCRYPTION_KEY_name": "Encryption key",
|
||||||
"Email_display_name": "Email",
|
"Email_display_name": "Email",
|
||||||
"Email_icon": "<i class=\"fa fa-at\"></i>",
|
"Email_icon": "<i class=\"fa fa-at\"></i>",
|
||||||
"Events_Loading": "Loading...",
|
"Events_Loading": "Loading…",
|
||||||
"Events_Periodselect_All": "All Info",
|
"Events_Periodselect_All": "All Info",
|
||||||
"Events_Periodselect_LastMonth": "Last Month",
|
"Events_Periodselect_LastMonth": "Last Month",
|
||||||
"Events_Periodselect_LastWeek": "Last Week",
|
"Events_Periodselect_LastWeek": "Last Week",
|
||||||
@@ -341,7 +341,7 @@
|
|||||||
"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",
|
||||||
"Loading": "Loading...",
|
"Loading": "Loading…",
|
||||||
"Login_Box": "Enter your password",
|
"Login_Box": "Enter your password",
|
||||||
"Login_Default_PWD": "Default password \"123456\" is still active.",
|
"Login_Default_PWD": "Default password \"123456\" is still active.",
|
||||||
"Login_Info": "Passwords are set via the Set Password plugin. Check the <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/set_password\">SETPWD docs</a> if you have issues logging in.",
|
"Login_Info": "Passwords are set via the Set Password plugin. Check the <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/set_password\">SETPWD docs</a> if you have issues logging in.",
|
||||||
@@ -360,7 +360,7 @@
|
|||||||
"Maint_RestartServer": "Restart server",
|
"Maint_RestartServer": "Restart server",
|
||||||
"Maint_Restart_Server_noti_text": "Are you sure you want to restart the backend server? This may casue app inconsistency. Backup your setup first. <br/> <br/> Note: This may take a few minutes.",
|
"Maint_Restart_Server_noti_text": "Are you sure you want to restart the backend server? This may casue app inconsistency. Backup your setup first. <br/> <br/> Note: This may take a few minutes.",
|
||||||
"Maintenance_InitCheck": "Init Check",
|
"Maintenance_InitCheck": "Init Check",
|
||||||
"Maintenance_InitCheck_Checking": "Checking...",
|
"Maintenance_InitCheck_Checking": "Checking…",
|
||||||
"Maintenance_InitCheck_QuickSetupGuide": "Make sure you followed the <a href=\"https://jokob-sk.github.io/NetAlertX/INITIAL_SETUP/\" target=\"_blank\">quick setup guide</a>.",
|
"Maintenance_InitCheck_QuickSetupGuide": "Make sure you followed the <a href=\"https://jokob-sk.github.io/NetAlertX/INITIAL_SETUP/\" target=\"_blank\">quick setup guide</a>.",
|
||||||
"Maintenance_InitCheck_Success": "Application initialized succesfully!",
|
"Maintenance_InitCheck_Success": "Application initialized succesfully!",
|
||||||
"Maintenance_ReCheck": "Retry Check",
|
"Maintenance_ReCheck": "Retry Check",
|
||||||
@@ -446,7 +446,7 @@
|
|||||||
"Maintenance_Tools_Tab_UISettings": "UI Settings",
|
"Maintenance_Tools_Tab_UISettings": "UI Settings",
|
||||||
"Maintenance_arp_status": "Scan Status",
|
"Maintenance_arp_status": "Scan Status",
|
||||||
"Maintenance_arp_status_off": "is currently disabled",
|
"Maintenance_arp_status_off": "is currently disabled",
|
||||||
"Maintenance_arp_status_on": "scan(s) currently running",
|
"Maintenance_arp_status_on": "scanning in progress",
|
||||||
"Maintenance_built_on": "Built on",
|
"Maintenance_built_on": "Built on",
|
||||||
"Maintenance_current_version": "You are up-to-date. Check out what <a href=\"https://github.com/jokob-sk/NetAlertX/issues/138\" target=\"_blank\">I am working on</a>.",
|
"Maintenance_current_version": "You are up-to-date. Check out what <a href=\"https://github.com/jokob-sk/NetAlertX/issues/138\" target=\"_blank\">I am working on</a>.",
|
||||||
"Maintenance_database_backup": "DB Backups",
|
"Maintenance_database_backup": "DB Backups",
|
||||||
@@ -556,7 +556,7 @@
|
|||||||
"Presence_Key_OnlinePastMiss": "Past online (miss-match)",
|
"Presence_Key_OnlinePastMiss": "Past online (miss-match)",
|
||||||
"Presence_Key_OnlinePastMiss_desc": "Device online in the past, but currently offline, but the start session might be missing or has conflicting data. (might be a bug - please submit a PR if you know how to fix it - I'm a bit lost in code here)",
|
"Presence_Key_OnlinePastMiss_desc": "Device online in the past, but currently offline, but the start session might be missing or has conflicting data. (might be a bug - please submit a PR if you know how to fix it - I'm a bit lost in code here)",
|
||||||
"Presence_Key_OnlinePast_desc": "Device online in the past, but currently offline.",
|
"Presence_Key_OnlinePast_desc": "Device online in the past, but currently offline.",
|
||||||
"Presence_Loading": "Loading...",
|
"Presence_Loading": "Loading…",
|
||||||
"Presence_Shortcut_AllDevices": "My Devices",
|
"Presence_Shortcut_AllDevices": "My Devices",
|
||||||
"Presence_Shortcut_Archived": "Archived",
|
"Presence_Shortcut_Archived": "Archived",
|
||||||
"Presence_Shortcut_Connected": "Connected",
|
"Presence_Shortcut_Connected": "Connected",
|
||||||
@@ -710,7 +710,7 @@
|
|||||||
"add_option_event_tooltip": "Add new value",
|
"add_option_event_tooltip": "Add new value",
|
||||||
"copy_icons_event_icon": "fa-copy",
|
"copy_icons_event_icon": "fa-copy",
|
||||||
"copy_icons_event_tooltip": "Overwrite icons of all devices with the same device type",
|
"copy_icons_event_tooltip": "Overwrite icons of all devices with the same device type",
|
||||||
"devices_old": "Refreshing...",
|
"devices_old": "Refreshing…",
|
||||||
"general_event_description": "The event you have triggered might take a while until background processes finish. The execution ended once the below execution queue empties (Check the <a href='/maintenance.php#tab_Logging'>error log</a> if you encounter issues). <br/> <br/> Execution queue:",
|
"general_event_description": "The event you have triggered might take a while until background processes finish. The execution ended once the below execution queue empties (Check the <a href='/maintenance.php#tab_Logging'>error log</a> if you encounter issues). <br/> <br/> Execution queue:",
|
||||||
"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",
|
||||||
@@ -735,7 +735,7 @@
|
|||||||
"settings_imported_label": "Settings imported",
|
"settings_imported_label": "Settings imported",
|
||||||
"settings_missing": "Not all settings loaded! High load on the database or app startup sequence. Click the 🔄 reload button in the top.",
|
"settings_missing": "Not all settings loaded! High load on the database or app startup sequence. Click the 🔄 reload button in the top.",
|
||||||
"settings_missing_block": "Error: Settings not loaded correctly. Click the reload button 🔄 at the top, alternatively, check the browser log for details (F12).",
|
"settings_missing_block": "Error: Settings not loaded correctly. Click the reload button 🔄 at the top, alternatively, check the browser log for details (F12).",
|
||||||
"settings_old": "Importing settings and re-initializing...",
|
"settings_old": "Importing settings and re-initializing…",
|
||||||
"settings_other_scanners": "Other, non-device scanner plugins that are currently enabled.",
|
"settings_other_scanners": "Other, non-device scanner plugins that are currently enabled.",
|
||||||
"settings_other_scanners_icon": "fa-solid fa-recycle",
|
"settings_other_scanners_icon": "fa-solid fa-recycle",
|
||||||
"settings_other_scanners_label": "Other scanners",
|
"settings_other_scanners_label": "Other scanners",
|
||||||
@@ -744,7 +744,7 @@
|
|||||||
"settings_publishers_info": "Load more Publishers with the <a href=\"/settings.php#LOADED_PLUGINS\">LOADED_PLUGINS</a> setting",
|
"settings_publishers_info": "Load more Publishers with the <a href=\"/settings.php#LOADED_PLUGINS\">LOADED_PLUGINS</a> setting",
|
||||||
"settings_publishers_label": "Publishers",
|
"settings_publishers_label": "Publishers",
|
||||||
"settings_readonly": "Can't READ or WRITE <code>app.conf</code>. Try restarting the container and read the <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/FILE_PERMISSIONS.md\" target=\"_blank\">file permissions documentation</a>",
|
"settings_readonly": "Can't READ or WRITE <code>app.conf</code>. Try restarting the container and read the <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/FILE_PERMISSIONS.md\" target=\"_blank\">file permissions documentation</a>",
|
||||||
"settings_saved": "<br/>Settings saved. <br/> Reloading... <br/><i class=\"ion ion-ios-loop-strong fa-spin fa-2x fa-fw\"></i> <br/>",
|
"settings_saved": "<br/>Settings saved. <br/> Reloading… <br/><i class=\"ion ion-ios-loop-strong fa-spin fa-2x fa-fw\"></i> <br/>",
|
||||||
"settings_system_icon": "fa-solid fa-gear",
|
"settings_system_icon": "fa-solid fa-gear",
|
||||||
"settings_system_label": "System",
|
"settings_system_label": "System",
|
||||||
"settings_update_item_warning": "Update the value below. Be careful to follow the previous format. <b>Validation is not performed.</b>",
|
"settings_update_item_warning": "Update the value below. Be careful to follow the previous format. <b>Validation is not performed.</b>",
|
||||||
|
|||||||
0
front/php/templates/language/es_es.json
Executable file → Normal file
2
front/php/templates/language/fr_fr.json
Executable file → Normal file
@@ -194,7 +194,7 @@
|
|||||||
"DevDetail_button_Save": "Enregistrer",
|
"DevDetail_button_Save": "Enregistrer",
|
||||||
"DeviceEdit_ValidMacIp": "Renseigner une adresse <b>Mac</b> et une adresse <b>IP</b> valides.",
|
"DeviceEdit_ValidMacIp": "Renseigner une adresse <b>Mac</b> et une adresse <b>IP</b> valides.",
|
||||||
"Device_MultiEdit": "Édition multiple",
|
"Device_MultiEdit": "Édition multiple",
|
||||||
"Device_MultiEdit_Backup": "Attention, renseigner des valeurs non cohérentes ci-dessous peut bloquer votre paramétrage. Veillez à faire une sauvegarde de votre base de données ou de la configuration de vos appareils en premier lieu (<a href=\"php/server/devices.php?action=ExportCSV\">clisuer ici pour la télécharger <i class=\"fa-solid fa-download fa-bounce\"></i></a>). Renseignez-vous sur comment remettre les appareils depuis ce fichier via la <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/BACKUPS.md#scenario-2-corrupted-database\" target=\"_blank\">documentation des sauvegardes</a>.",
|
"Device_MultiEdit_Backup": "Attention, renseigner des valeurs non cohérentes ci-dessous peut bloquer votre paramétrage. Veillez à faire une sauvegarde de votre base de données ou de la configuration de vos appareils en premier lieu (<a href=\"php/server/devices.php?action=ExportCSV\">clisuer ici pour la télécharger <i class=\"fa-solid fa-download fa-bounce\"></i></a>). Renseignez-vous sur comment remettre les appareils depuis ce fichier via la <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/BACKUPS.md#scenario-2-corrupted-database\" target=\"_blank\">documentation des sauvegardes</a>. Afin d'enregistrer les changements, cliquer sur l'icône <b>Sauvegarder<i class=\"fa-solid fa-save\"></i></b> sur chaque champ que vous voulez mettre à jour.",
|
||||||
"Device_MultiEdit_Fields": "Champs modifiables :",
|
"Device_MultiEdit_Fields": "Champs modifiables :",
|
||||||
"Device_MultiEdit_MassActions": "Actions en masse :",
|
"Device_MultiEdit_MassActions": "Actions en masse :",
|
||||||
"Device_MultiEdit_Tooltip": "Attention. Ceci va appliquer la valeur de gauche à tous les appareils sélectionnés au-dessus.",
|
"Device_MultiEdit_Tooltip": "Attention. Ceci va appliquer la valeur de gauche à tous les appareils sélectionnés au-dessus.",
|
||||||
|
|||||||
@@ -194,7 +194,7 @@
|
|||||||
"DevDetail_button_Save": "Salva",
|
"DevDetail_button_Save": "Salva",
|
||||||
"DeviceEdit_ValidMacIp": "Inserisci un indirizzo <b>Mac</b> e un indirizzo <b>IP</b> validi.",
|
"DeviceEdit_ValidMacIp": "Inserisci un indirizzo <b>Mac</b> e un indirizzo <b>IP</b> validi.",
|
||||||
"Device_MultiEdit": "Modifica multipla",
|
"Device_MultiEdit": "Modifica multipla",
|
||||||
"Device_MultiEdit_Backup": "Attento, l'inserimento di valori errati di seguito interromperà la configurazione. Effettua prima il backup del database o della configurazione dei dispositivi (<a href=\"php/server/devices.php?action=ExportCSV\">fai clic per scaricare <i class=\"fa-solid fa-download fa-bounce\"></i> </a>). Leggi come ripristinare i dispositivi da questo file nella <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/BACKUPS.md#scenario-2-corrupted-database\" target=\" _blank\">Documentazione di backup</a>.",
|
"Device_MultiEdit_Backup": "Attento, l'inserimento di valori errati di seguito interromperà la configurazione. Effettua prima il backup del database o della configurazione dei dispositivi (<a href=\"php/server/devices.php?action=ExportCSV\">fai clic per scaricare <i class=\"fa-solid fa-download fa-bounce\"></i> </a>). Leggi come ripristinare i dispositivi da questo file nella <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/BACKUPS.md#scenario-2-corrupted-database\" target=\" _blank\">Documentazione di backup</a>. Per applicare le modifiche, fai clic sull'icona <b>Salva<i class=\"fa-solid fa-save\"></i></b> su ogni campo che desideri aggiornare.",
|
||||||
"Device_MultiEdit_Fields": "Modifica campi:",
|
"Device_MultiEdit_Fields": "Modifica campi:",
|
||||||
"Device_MultiEdit_MassActions": "Azioni di massa:",
|
"Device_MultiEdit_MassActions": "Azioni di massa:",
|
||||||
"Device_MultiEdit_Tooltip": "Attento. Facendo clic verrà applicato il valore sulla sinistra a tutti i dispositivi selezionati sopra.",
|
"Device_MultiEdit_Tooltip": "Attento. Facendo clic verrà applicato il valore sulla sinistra a tutti i dispositivi selezionati sopra.",
|
||||||
|
|||||||
0
front/php/templates/language/nb_no.json
Executable file → Normal file
0
front/php/templates/language/pl_pl.json
Executable file → Normal file
0
front/php/templates/language/pt_br.json
Executable file → Normal file
16
front/php/templates/language/ru_ru.json
Executable file → Normal file
@@ -211,7 +211,7 @@
|
|||||||
"Device_TableHead_AlertDown": "Оповещение о сост. ВЫКЛ",
|
"Device_TableHead_AlertDown": "Оповещение о сост. ВЫКЛ",
|
||||||
"Device_TableHead_Connected_Devices": "Соединения",
|
"Device_TableHead_Connected_Devices": "Соединения",
|
||||||
"Device_TableHead_CustomProps": "Свойства / Действия",
|
"Device_TableHead_CustomProps": "Свойства / Действия",
|
||||||
"Device_TableHead_FQDN": "",
|
"Device_TableHead_FQDN": "FQDN",
|
||||||
"Device_TableHead_Favorite": "Избранное",
|
"Device_TableHead_Favorite": "Избранное",
|
||||||
"Device_TableHead_FirstSession": "Первый сеанс",
|
"Device_TableHead_FirstSession": "Первый сеанс",
|
||||||
"Device_TableHead_GUID": "GUID",
|
"Device_TableHead_GUID": "GUID",
|
||||||
@@ -359,11 +359,11 @@
|
|||||||
"Maint_PurgeLog": "Очистить журнал",
|
"Maint_PurgeLog": "Очистить журнал",
|
||||||
"Maint_RestartServer": "Перезапустить сервер",
|
"Maint_RestartServer": "Перезапустить сервер",
|
||||||
"Maint_Restart_Server_noti_text": "Вы уверены, что хотите перезапустить внутренний сервер? Это может привести к несогласованности работы приложения. Сначала создайте резервную копию настроек. <br/> <br/> Примечание: Это может занять несколько минут.",
|
"Maint_Restart_Server_noti_text": "Вы уверены, что хотите перезапустить внутренний сервер? Это может привести к несогласованности работы приложения. Сначала создайте резервную копию настроек. <br/> <br/> Примечание: Это может занять несколько минут.",
|
||||||
"Maintenance_InitCheck": "",
|
"Maintenance_InitCheck": "Инициализация проверки",
|
||||||
"Maintenance_InitCheck_Checking": "",
|
"Maintenance_InitCheck_Checking": "Проверяется...",
|
||||||
"Maintenance_InitCheck_QuickSetupGuide": "",
|
"Maintenance_InitCheck_QuickSetupGuide": "Убедитесь, что вы следовали быстрому руководству по настройке <a href=\"https://jokob-sk.github.io/NetAlertX/INITIAL_SETUP/\" target=\"_blank\"></a>.",
|
||||||
"Maintenance_InitCheck_Success": "",
|
"Maintenance_InitCheck_Success": "Приложение инициализировано успешно!",
|
||||||
"Maintenance_ReCheck": "",
|
"Maintenance_ReCheck": "Повторить проверку",
|
||||||
"Maintenance_Running_Version": "Установленная версия",
|
"Maintenance_Running_Version": "Установленная версия",
|
||||||
"Maintenance_Status": "Статус",
|
"Maintenance_Status": "Статус",
|
||||||
"Maintenance_Title": "Инструменты обслуживания",
|
"Maintenance_Title": "Инструменты обслуживания",
|
||||||
@@ -565,8 +565,8 @@
|
|||||||
"Presence_Shortcut_Favorites": "Избранные",
|
"Presence_Shortcut_Favorites": "Избранные",
|
||||||
"Presence_Shortcut_NewDevices": "Новые устройства",
|
"Presence_Shortcut_NewDevices": "Новые устройства",
|
||||||
"Presence_Title": "Присутствие по устройству",
|
"Presence_Title": "Присутствие по устройству",
|
||||||
"REFRESH_FQDN_description": "",
|
"REFRESH_FQDN_description": "Повторное сканирование всех устройств и обновление их полного доменного имени (FQDN). Если эта функция отключена, то для повышения производительности сканируются только устройства без известного имени. В этом случае FQDN обновляется только при первоначальном обнаружении устройства.",
|
||||||
"REFRESH_FQDN_name": "",
|
"REFRESH_FQDN_name": "Обновить FQDN",
|
||||||
"REPORT_DASHBOARD_URL_description": "Этот URL-адрес используется в качестве основы для создания ссылок в отчетах HTML (например, в электронных письмах). Введите полный URL-адрес, начинающийся с <code>http://</code>, включая номер порта (без косой черты <code>/</code>).",
|
"REPORT_DASHBOARD_URL_description": "Этот URL-адрес используется в качестве основы для создания ссылок в отчетах HTML (например, в электронных письмах). Введите полный URL-адрес, начинающийся с <code>http://</code>, включая номер порта (без косой черты <code>/</code>).",
|
||||||
"REPORT_DASHBOARD_URL_name": "NetAlertX URL",
|
"REPORT_DASHBOARD_URL_name": "NetAlertX URL",
|
||||||
"REPORT_ERROR": "Страница, которую вы ищете, временно недоступна, повторите попытку через несколько секунд",
|
"REPORT_ERROR": "Страница, которую вы ищете, временно недоступна, повторите попытку через несколько секунд",
|
||||||
|
|||||||
0
front/php/templates/language/tr_tr.json
Executable file → Normal file
2
front/php/templates/language/uk_ua.json
Executable file → Normal file
@@ -194,7 +194,7 @@
|
|||||||
"DevDetail_button_Save": "зберегти",
|
"DevDetail_button_Save": "зберегти",
|
||||||
"DeviceEdit_ValidMacIp": "Введіть дійсну адресу <b>Mac</b> та <b>IP</b>.",
|
"DeviceEdit_ValidMacIp": "Введіть дійсну адресу <b>Mac</b> та <b>IP</b>.",
|
||||||
"Device_MultiEdit": "Мультиредагування",
|
"Device_MultiEdit": "Мультиредагування",
|
||||||
"Device_MultiEdit_Backup": "Обережно, введення неправильних значень нижче порушить налаштування. Спершу створіть резервну копію вашої бази даних або конфігурації пристроїв (<a href=\"php/server/devices.php?action=ExportCSV\">натисніть, щоб завантажити <i class=\"fa-solid fa-download fa-bounce\"></i> </a>). Прочитайте, як відновити пристрої з цього файлу, у <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/BACKUPS.md#scenario-2-corrupted-database\" target=\" _blank\">Документація резервних копій</a>.",
|
"Device_MultiEdit_Backup": "Обережно, введення неправильних значень нижче призведе до порушення роботи налаштувань. Спочатку створіть резервну копію бази даних або конфігурації пристроїв (<a href=\"php/server/devices.php?action=ExportCSV\">натисніть, щоб завантажити <i class=\"fa-solid fa-download fa-bounce\"></i></a>). Прочитайте, як відновити пристрої з цього файлу, у <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/BACKUPS.md#scenario-2-corrupted-database\" target=\"_blank\">документації щодо резервних копій</a>. Щоб застосувати зміни, натисніть значок <b>Зберегти<i class=\"fa-solid fa-save\"></i></b> у кожному полі, яке потрібно оновити.",
|
||||||
"Device_MultiEdit_Fields": "Редагувати поля:",
|
"Device_MultiEdit_Fields": "Редагувати поля:",
|
||||||
"Device_MultiEdit_MassActions": "Масові акції:",
|
"Device_MultiEdit_MassActions": "Масові акції:",
|
||||||
"Device_MultiEdit_Tooltip": "Обережно. Якщо натиснути це, значення зліва буде застосовано до всіх пристроїв, вибраних вище.",
|
"Device_MultiEdit_Tooltip": "Обережно. Якщо натиснути це, значення зліва буде застосовано до всіх пристроїв, вибраних вище.",
|
||||||
|
|||||||
0
front/php/templates/language/zh_cn.json
Executable file → Normal file
@@ -58,9 +58,9 @@ def main():
|
|||||||
|
|
||||||
# Retrieve devices
|
# Retrieve devices
|
||||||
if get_setting_value("REFRESH_FQDN"):
|
if get_setting_value("REFRESH_FQDN"):
|
||||||
devices = device_handler.getUnknown()
|
|
||||||
else:
|
|
||||||
devices = device_handler.getAll()
|
devices = device_handler.getAll()
|
||||||
|
else:
|
||||||
|
devices = device_handler.getUnknown()
|
||||||
|
|
||||||
mylog('verbose', [f'[{pluginName}] Devices count: {len(devices)}'])
|
mylog('verbose', [f'[{pluginName}] Devices count: {len(devices)}'])
|
||||||
|
|
||||||
|
|||||||
@@ -52,7 +52,7 @@
|
|||||||
{ "elementType": "select", "elementOptions": [], "transformers": [] }
|
{ "elementType": "select", "elementOptions": [], "transformers": [] }
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"default_value": "before_name_updates",
|
"default_value": "disabled",
|
||||||
"options": [
|
"options": [
|
||||||
"disabled",
|
"disabled",
|
||||||
"before_name_updates",
|
"before_name_updates",
|
||||||
|
|||||||
@@ -178,15 +178,15 @@
|
|||||||
"description": [
|
"description": [
|
||||||
{
|
{
|
||||||
"language_code": "en_us",
|
"language_code": "en_us",
|
||||||
"string": "Only enabled if you select <code>schedule</code> in the <a href=\"#NBTSCAN_RUN\"><code>NBTSCAN_RUN</code> setting</a>. Make sure you enter the schedule in the correct cron-like format (e.g. validate at <a href=\"https://crontab.guru/\" target=\"_blank\">crontab.guru</a>). For example entering <code>0 4 * * *</code> will run the scan after 4 am in the <a onclick=\"toggleAllSettings()\" href=\"#TIMEZONE\"><code>TIMEZONE</code> you set above</a>. Will be run NEXT time the time passes."
|
"string": "Only enabled if you select <code>schedule</code> in the <a href=\"#DIGSCAN_RUN\"><code>DIGSCAN_RUN</code> setting</a>. Make sure you enter the schedule in the correct cron-like format (e.g. validate at <a href=\"https://crontab.guru/\" target=\"_blank\">crontab.guru</a>). For example entering <code>0 4 * * *</code> will run the scan after 4 am in the <a onclick=\"toggleAllSettings()\" href=\"#TIMEZONE\"><code>TIMEZONE</code> you set above</a>. Will be run NEXT time the time passes."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"language_code": "es_es",
|
"language_code": "es_es",
|
||||||
"string": "Solo está habilitado si selecciona <code>schedule</code> en la configuración <a href=\"#NBTSCAN_RUN\"><code>NBTSCAN_RUN</code></a>. Asegúrese de ingresar la programación en el formato similar a cron correcto (por ejemplo, valide en <a href=\"https://crontab.guru/\" target=\"_blank\">crontab.guru</a>). Por ejemplo, ingresar <code>0 4 * * *</code> ejecutará el escaneo después de las 4 a.m. en el <a onclick=\"toggleAllSettings()\" href=\"#TIMEZONE\"><code>TIMEZONE</ código> que configuró arriba</a>. Se ejecutará la PRÓXIMA vez que pase el tiempo."
|
"string": "Solo está habilitado si selecciona <code>schedule</code> en la configuración <a href=\"#DIGSCAN_RUN\"><code>DIGSCAN_RUN</code></a>. Asegúrese de ingresar la programación en el formato similar a cron correcto (por ejemplo, valide en <a href=\"https://crontab.guru/\" target=\"_blank\">crontab.guru</a>). Por ejemplo, ingresar <code>0 4 * * *</code> ejecutará el escaneo después de las 4 a.m. en el <a onclick=\"toggleAllSettings()\" href=\"#TIMEZONE\"><code>TIMEZONE</ código> que configuró arriba</a>. Se ejecutará la PRÓXIMA vez que pase el tiempo."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"language_code": "de_de",
|
"language_code": "de_de",
|
||||||
"string": "Nur aktiviert, wenn Sie <code>schedule</code> in der <a href=\"#NBTSCAN_RUN\"><code>NBTSCAN_RUN</code>-Einstellung</a> auswählen. Stellen Sie sicher, dass Sie den Zeitplan im richtigen Cron-ähnlichen Format eingeben (z. B. validieren unter <a href=\"https://crontab.guru/\" target=\"_blank\">crontab.guru</a>). Wenn Sie beispielsweise <code>0 4 * * *</code> eingeben, wird der Scan nach 4 Uhr morgens in der <a onclick=\"toggleAllSettings()\" href=\"#TIMEZONE\"><code>TIMEZONE</ ausgeführt. Code> den Sie oben festgelegt haben</a>. Wird das NÄCHSTE Mal ausgeführt, wenn die Zeit vergeht."
|
"string": "Nur aktiviert, wenn Sie <code>schedule</code> in der <a href=\"#DIGSCAN_RUN\"><code>DIGSCAN_RUN</code>-Einstellung</a> auswählen. Stellen Sie sicher, dass Sie den Zeitplan im richtigen Cron-ähnlichen Format eingeben (z. B. validieren unter <a href=\"https://crontab.guru/\" target=\"_blank\">crontab.guru</a>). Wenn Sie beispielsweise <code>0 4 * * *</code> eingeben, wird der Scan nach 4 Uhr morgens in der <a onclick=\"toggleAllSettings()\" href=\"#TIMEZONE\"><code>TIMEZONE</ ausgeführt. Code> den Sie oben festgelegt haben</a>. Wird das NÄCHSTE Mal ausgeführt, wenn die Zeit vergeht."
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -56,9 +56,9 @@ def main():
|
|||||||
|
|
||||||
# Retrieve devices
|
# Retrieve devices
|
||||||
if get_setting_value("REFRESH_FQDN"):
|
if get_setting_value("REFRESH_FQDN"):
|
||||||
devices = device_handler.getUnknown()
|
|
||||||
else:
|
|
||||||
devices = device_handler.getAll()
|
devices = device_handler.getAll()
|
||||||
|
else:
|
||||||
|
devices = device_handler.getUnknown()
|
||||||
|
|
||||||
mylog('verbose', [f'[{pluginName}] Devices count: {len(devices)}'])
|
mylog('verbose', [f'[{pluginName}] Devices count: {len(devices)}'])
|
||||||
|
|
||||||
|
|||||||
@@ -66,13 +66,23 @@ device_type_map = {
|
|||||||
"networking_device": "Router",
|
"networking_device": "Router",
|
||||||
"multimedia_device": "TV Decoder",
|
"multimedia_device": "TV Decoder",
|
||||||
"car": "House Appliance",
|
"car": "House Appliance",
|
||||||
|
"watch": "Clock",
|
||||||
|
"light": "Domotic",
|
||||||
|
"outlet": "Domotic",
|
||||||
|
"appliances": "House Appliance",
|
||||||
|
"thermostat": "Domotic",
|
||||||
|
"shutter": "Domotic",
|
||||||
"other": "(Unknown)",
|
"other": "(Unknown)",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
def map_device_type(type: str):
|
def map_device_type(type: str):
|
||||||
return device_type_map[type]
|
try:
|
||||||
|
return device_type_map[type]
|
||||||
|
except KeyError:
|
||||||
|
# This device type has not been mapped yet
|
||||||
|
mylog("minimal", [f"[{pluginName}] Unknown device type: {type}"])
|
||||||
|
return device_type_map["other"]
|
||||||
|
|
||||||
async def get_device_data(api_version: int, api_address: str, api_port: int):
|
async def get_device_data(api_version: int, api_address: str, api_port: int):
|
||||||
# ensure existence of db path
|
# ensure existence of db path
|
||||||
|
|||||||
@@ -52,7 +52,7 @@
|
|||||||
{ "elementType": "select", "elementOptions": [], "transformers": [] }
|
{ "elementType": "select", "elementOptions": [], "transformers": [] }
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"default_value": "before_name_updates",
|
"default_value": "disabled",
|
||||||
"options": [
|
"options": [
|
||||||
"disabled",
|
"disabled",
|
||||||
"before_name_updates",
|
"before_name_updates",
|
||||||
|
|||||||
@@ -58,9 +58,9 @@ def main():
|
|||||||
|
|
||||||
# Retrieve devices
|
# Retrieve devices
|
||||||
if get_setting_value("REFRESH_FQDN"):
|
if get_setting_value("REFRESH_FQDN"):
|
||||||
devices = device_handler.getUnknown()
|
|
||||||
else:
|
|
||||||
devices = device_handler.getAll()
|
devices = device_handler.getAll()
|
||||||
|
else:
|
||||||
|
devices = device_handler.getUnknown()
|
||||||
|
|
||||||
mylog('verbose', [f'[{pluginName}] Devices count: {len(devices)}'])
|
mylog('verbose', [f'[{pluginName}] Devices count: {len(devices)}'])
|
||||||
|
|
||||||
|
|||||||
@@ -505,7 +505,7 @@
|
|||||||
"column": "Dummy",
|
"column": "Dummy",
|
||||||
"mapped_to_column": "cur_ScanMethod",
|
"mapped_to_column": "cur_ScanMethod",
|
||||||
"mapped_to_column_data": {
|
"mapped_to_column_data": {
|
||||||
"value": "nmap-dev-scan"
|
"value": "NMAPDEV"
|
||||||
},
|
},
|
||||||
"css_classes": "col-sm-2",
|
"css_classes": "col-sm-2",
|
||||||
"show": true,
|
"show": true,
|
||||||
|
|||||||
@@ -60,9 +60,9 @@ def main():
|
|||||||
|
|
||||||
# Retrieve devices
|
# Retrieve devices
|
||||||
if get_setting_value("REFRESH_FQDN"):
|
if get_setting_value("REFRESH_FQDN"):
|
||||||
devices = device_handler.getUnknown()
|
|
||||||
else:
|
|
||||||
devices = device_handler.getAll()
|
devices = device_handler.getAll()
|
||||||
|
else:
|
||||||
|
devices = device_handler.getUnknown()
|
||||||
|
|
||||||
mylog('verbose', [f'[{pluginName}] Devices count: {len(devices)}'])
|
mylog('verbose', [f'[{pluginName}] Devices count: {len(devices)}'])
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import sys
|
|||||||
import requests
|
import requests
|
||||||
from requests import Request, Session, packages
|
from requests import Request, Session, packages
|
||||||
from requests.packages.urllib3.exceptions import InsecureRequestWarning
|
from requests.packages.urllib3.exceptions import InsecureRequestWarning
|
||||||
from pyunifi.controller import Controller
|
from nax_pyunifi.controller import Controller
|
||||||
|
|
||||||
|
|
||||||
# Register NetAlertX directories
|
# Register NetAlertX directories
|
||||||
@@ -96,7 +96,14 @@ def get_entries(plugin_objects: Plugin_Objects) -> Plugin_Objects:
|
|||||||
|
|
||||||
mylog('verbose', [f'[{pluginName}] site: {site}'])
|
mylog('verbose', [f'[{pluginName}] site: {site}'])
|
||||||
|
|
||||||
c = Controller(UNIFI_HOST, UNIFI_USERNAME, UNIFI_PASSWORD, port=PORT, version=VERSION, ssl_verify=VERIFYSSL, site_id=site)
|
c = Controller(
|
||||||
|
UNIFI_HOST,
|
||||||
|
UNIFI_USERNAME,
|
||||||
|
UNIFI_PASSWORD,
|
||||||
|
port=PORT,
|
||||||
|
version=VERSION,
|
||||||
|
ssl_verify=VERIFYSSL,
|
||||||
|
site_id=site)
|
||||||
|
|
||||||
online_macs = set()
|
online_macs = set()
|
||||||
processed_macs = []
|
processed_macs = []
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ from plugin_helper import Plugin_Object, Plugin_Objects, decodeBase64, handleEmp
|
|||||||
from logger import mylog, Logger, append_line_to_file
|
from logger import mylog, Logger, append_line_to_file
|
||||||
from helper import timeNowTZ, get_setting_value
|
from helper import timeNowTZ, get_setting_value
|
||||||
from const import logPath, applicationPath, fullDbPath
|
from const import logPath, applicationPath, fullDbPath
|
||||||
from device import query_MAC_vendor
|
from scan.device_handling import query_MAC_vendor
|
||||||
import conf
|
import conf
|
||||||
from pytz import timezone
|
from pytz import timezone
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
import requests
|
import requests
|
||||||
|
from requests.exceptions import SSLError, Timeout, RequestException
|
||||||
import pathlib
|
import pathlib
|
||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
|
|||||||
@@ -61,6 +61,7 @@ nav:
|
|||||||
- Troubleshooting:
|
- Troubleshooting:
|
||||||
- Inspecting Logs: LOGGING.md
|
- Inspecting Logs: LOGGING.md
|
||||||
- Debugging Tips: DEBUG_TIPS.md
|
- Debugging Tips: DEBUG_TIPS.md
|
||||||
|
- Debugging GraphQL: DEBUG_GRAPHQL.md
|
||||||
- Debugging Invalid JSON: DEBUG_INVALID_JSON.md
|
- Debugging Invalid JSON: DEBUG_INVALID_JSON.md
|
||||||
- Debugging Plugins: DEBUG_PLUGINS.md
|
- Debugging Plugins: DEBUG_PLUGINS.md
|
||||||
- Debugging Web UI Port: WEB_UI_PORT_DEBUG.md
|
- Debugging Web UI Port: WEB_UI_PORT_DEBUG.md
|
||||||
|
|||||||
@@ -199,7 +199,9 @@ class Query(ObjectType):
|
|||||||
for sort_option in options.sort:
|
for sort_option in options.sort:
|
||||||
devices_data = sorted(
|
devices_data = sorted(
|
||||||
devices_data,
|
devices_data,
|
||||||
key=lambda x: mixed_type_sort_key(x.get(sort_option.field)),
|
key=lambda x: mixed_type_sort_key(
|
||||||
|
x.get(sort_option.field).lower() if isinstance(x.get(sort_option.field), str) else x.get(sort_option.field)
|
||||||
|
),
|
||||||
reverse=(sort_option.order.lower() == "desc")
|
reverse=(sort_option.order.lower() == "desc")
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -674,9 +674,9 @@ def guess_icon(vendor, mac, ip, name, default):
|
|||||||
mylog('debug', [f"[guess_icon] Guessing icon for (vendor|mac|ip|name): ('{vendor}'|'{mac}'|{ip}|{name})"])
|
mylog('debug', [f"[guess_icon] Guessing icon for (vendor|mac|ip|name): ('{vendor}'|'{mac}'|{ip}|{name})"])
|
||||||
|
|
||||||
result = default
|
result = default
|
||||||
mac = mac.upper()
|
mac = str(mac).upper() if mac else "00:00:00:00:00:00"
|
||||||
vendor = vendor.lower() if vendor else "unknown"
|
vendor = str(vendor).lower() if vendor else "unknown"
|
||||||
name = name.lower() if name else "(unknown)"
|
name = str(name).lower() if name else "(unknown)"
|
||||||
|
|
||||||
# Guess icon based on vendor
|
# Guess icon based on vendor
|
||||||
if any(brand in vendor for brand in {"samsung", "motorola"}):
|
if any(brand in vendor for brand in {"samsung", "motorola"}):
|
||||||
@@ -732,8 +732,8 @@ def guess_icon(vendor, mac, ip, name, default):
|
|||||||
# Guess device type
|
# Guess device type
|
||||||
def guess_type(vendor, mac, ip, name, default):
|
def guess_type(vendor, mac, ip, name, default):
|
||||||
result = default
|
result = default
|
||||||
mac = mac.upper()
|
mac = str(mac).upper() if mac else "00:00:00:00:00:00"
|
||||||
vendor = vendor.lower() if vendor else "unknown"
|
vendor = str(vendor).lower() if vendor else "unknown"
|
||||||
name = str(name).lower() if name else "(unknown)"
|
name = str(name).lower() if name else "(unknown)"
|
||||||
|
|
||||||
# Guess icon based on vendor
|
# Guess icon based on vendor
|
||||||
|
|||||||