From 1f5d6f96a4b85131ec608e866ae5ddcc3ce4c87f Mon Sep 17 00:00:00 2001 From: jokob-sk Date: Thu, 29 Jan 2026 10:48:30 +1100 Subject: [PATCH] feat: authoritative plugin fields - fix devLastIP Signed-off-by: jokob-sk --- server/db/authoritative_handler.py | 11 +++++++++-- server/scan/device_handling.py | 2 ++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/server/db/authoritative_handler.py b/server/db/authoritative_handler.py index b5e0ed6d..1c8b9e27 100644 --- a/server/db/authoritative_handler.py +++ b/server/db/authoritative_handler.py @@ -74,7 +74,7 @@ def get_plugin_authoritative_settings(plugin_prefix): return {"set_always": [], "set_empty": []} -def can_overwrite_field(field_name, current_value, current_source, plugin_prefix, plugin_settings, field_value): +def can_overwrite_field(field_name, current_value, current_source, plugin_prefix, plugin_settings, field_value, allow_override_if_changed=False): """ Determine if a plugin can overwrite a field. @@ -121,7 +121,14 @@ def can_overwrite_field(field_name, current_value, current_source, plugin_prefix return False # Rule 5: Default - overwrite if current value empty - return current_value in empty_values + if current_value in empty_values: + return True + + # Rule 6: Optional override flag to allow overwrite if value changed (devLastIP) + if allow_override_if_changed and field_value != current_value: + return True + + return False def get_overwrite_sql_clause(field_name, source_column, plugin_settings): diff --git a/server/scan/device_handling.py b/server/scan/device_handling.py index e71fa406..a62cece1 100755 --- a/server/scan/device_handling.py +++ b/server/scan/device_handling.py @@ -121,6 +121,7 @@ FIELD_SPECS = { "empty_values": ["", "null", "(unknown)", "(Unknown)"], "priority": ["ARPSCAN", "NEWDEV", "N/A"], "default_value": "0.0.0.0", + "allow_update_if_changed": True, }, # ========================================================== @@ -304,6 +305,7 @@ def update_devices_data_from_scan(db): plugin_prefix=source_prefix, plugin_settings=plugin_settings, field_value=new_value, + allow_override_if_changed=spec.get("allow_override_if_changed", False) ): # Build UPDATE dynamically update_cols = [f"{field} = ?"]