mirror of
https://github.com/jokob-sk/NetAlertX.git
synced 2026-03-31 07:12:23 -07:00
ALL:Authoritative plugin fields
This commit is contained in:
@@ -177,6 +177,87 @@ After persistence:
|
||||
|
||||
---
|
||||
|
||||
## Field Update Authorization (SET_ALWAYS / SET_EMPTY)
|
||||
|
||||
For tracked fields (devMac, devName, devLastIP, devVendor, devFQDN, devSSID, devParentMAC, devParentPort, devParentRelType, devVlan), plugins can configure how they interact with the authoritative field update system.
|
||||
|
||||
### SET_ALWAYS
|
||||
|
||||
**Mandatory when field is tracked.**
|
||||
|
||||
Controls whether a plugin field is enabled:
|
||||
|
||||
- `"1"` - Plugin can always overwrite this field when authorized (subject to source-based permissions)
|
||||
- `"0"` - Plugin doesn't use this field
|
||||
|
||||
**Authorization logic:** Even with `SET_ALWAYS: "1"`, the plugin respects source-based permissions:
|
||||
- Cannot overwrite `USER` source (user manually edited)
|
||||
- Cannot overwrite `LOCKED` source (user locked field)
|
||||
- Can overwrite `NEWDEV` or plugin-owned sources (if plugin has SET_ALWAYS enabled)
|
||||
|
||||
**Example in config.json:**
|
||||
```json
|
||||
{
|
||||
"setKey": "NEWDEV_devName",
|
||||
"displayName": "Device Name",
|
||||
"SET_ALWAYS": "1"
|
||||
}
|
||||
```
|
||||
|
||||
### SET_EMPTY
|
||||
|
||||
**Optional field override.**
|
||||
|
||||
Restricts when a plugin can update a field:
|
||||
|
||||
- `"1"` - Overwrite only if current value is empty OR source is NEWDEV (conservative mode)
|
||||
- `"0"` - No extra restriction; respect authorization logic (default)
|
||||
|
||||
**Use case:** Some plugins discover optional enrichment data (like vendor/hostname) that shouldn't override user-set or existing values. Use `SET_EMPTY: "1"` to be less aggressive.
|
||||
|
||||
**Example in config.json:**
|
||||
```json
|
||||
{
|
||||
"setKey": "NEWDEV_devVendor",
|
||||
"displayName": "Device Vendor",
|
||||
"SET_ALWAYS": "1",
|
||||
"SET_EMPTY": "1"
|
||||
}
|
||||
```
|
||||
|
||||
### Authorization Decision Flow
|
||||
|
||||
1. **Source check:** Is field LOCKED or USER? → REJECT (protected)
|
||||
2. **SET_ALWAYS check:** Is SET_ALWAYS enabled for this plugin+field? → YES: ALLOW (can overwrite empty values, NEWDEV, plugin sources, etc.) | NO: Continue to step 3
|
||||
3. **SET_EMPTY check:** Is SET_EMPTY enabled AND field non-empty+non-NEWDEV? → REJECT
|
||||
4. **Default behavior:** Allow overwrite if field empty or NEWDEV source
|
||||
|
||||
### Plugin Field Mappings Reference
|
||||
|
||||
This table shows all device discovery and enrichment plugins and their tracked field configuration:
|
||||
|
||||
| Plugin | Tracked Fields | Behavior |
|
||||
|--------|---|---|
|
||||
| ARPSCAN | devMac, devLastIP | SET_ALWAYS for both |
|
||||
| IPNEIGH | devMac, devLastIP | SET_ALWAYS for both |
|
||||
| DHCPLSS | devMac, devLastIP | SET_ALWAYS for both |
|
||||
| ASUSWRT | devMac, devLastIP | SET_ALWAYS for both |
|
||||
| LUCIRPC | devMac, devLastIP | SET_ALWAYS for both |
|
||||
| PIHOLE | devMac, devLastIP, devName, devVendor | SET_ALWAYS for MAC/IP |
|
||||
| PIHOLEAPI | devMac, devLastIP, devName, devVendor | SET_ALWAYS for MAC/IP, SET_EMPTY for name/vendor |
|
||||
| NBTSCAN | devName | SET_ALWAYS |
|
||||
| DIGSCAN | devName, devFQDN | SET_ALWAYS |
|
||||
| NSLOOKUP | devName, devFQDN | SET_ALWAYS |
|
||||
| AVAHISCAN | devName | SET_ALWAYS |
|
||||
| VNDRPDT | devMac, devVendor | SET_ALWAYS for both |
|
||||
| SNMPDSC | devMac, devLastIP | SET_ALWAYS for both |
|
||||
| UNIFIMP | devMac, devLastIP, devName, devVendor, devSSID, devParentMAC, devParentPort | SET_ALWAYS for MAC/IP |
|
||||
| UNIFIAPI | devMac, devLastIP, devName, devParentMAC | SET_ALWAYS for MAC/IP |
|
||||
|
||||
**Note:** Check each plugin's `config.json` manifest for its specific SET_ALWAYS/SET_EMPTY configuration.
|
||||
|
||||
---
|
||||
|
||||
## Summary
|
||||
|
||||
The lifecycle of a plugin configuration is:
|
||||
|
||||
Reference in New Issue
Block a user