add API endpoint to retrieve dnsmasq configuration for workers

This commit is contained in:
Eduardo Silva
2025-12-31 19:05:37 -03:00
parent 0a9249562d
commit 847d162493
2 changed files with 25 additions and 3 deletions

View File

@@ -1,7 +1,7 @@
import glob import glob
import os import os
from django.http import JsonResponse from django.http import JsonResponse, FileResponse
from django.utils import timezone from django.utils import timezone
from .models import ClusterSettings, Worker, WorkerStatus from .models import ClusterSettings, Worker, WorkerStatus
@@ -30,7 +30,7 @@ def get_worker(request):
try: try:
worker_config_version = int(request.GET.get('worker_config_version')) worker_config_version = int(request.GET.get('worker_config_version'))
worker_version = int(request.GET.get('worker_version')) worker_version = int(request.GET.get('worker_version'))
worker_dns_version = int(request.GET.get('dns_version')) worker_dns_version = int(request.GET.get('worker_dns_version'))
except: except:
worker.error_status = 'missing_version' worker.error_status = 'missing_version'
worker.save() worker.save()
@@ -97,6 +97,27 @@ def get_worker(request):
return worker, success return worker, success
def api_get_worker_dnsmasq_config(request):
dnsmasq_file = "/etc/dnsmasq/dnsmasq_config.tar.gz"
worker, success = get_worker(request)
if worker:
if worker.error_status or not success:
data = {'status': 'error', 'message': worker.error_status}
return JsonResponse(data, status=400)
else:
data = {'status': 'error', 'message': 'Worker not found'}
return JsonResponse(data, status=403)
if not os.path.exists(dnsmasq_file):
data = {'status': 'error', 'message': 'dnsmasq configuration not found'}
return JsonResponse(data, status=404)
response = FileResponse(open(dnsmasq_file, "rb"), content_type="application/gzip")
response["Content-Disposition"] = 'attachment; filename="dnsmasq_config.tar.gz"'
response["Content-Length"] = str(os.path.getsize(dnsmasq_file))
return response
def api_get_worker_config_files(request): def api_get_worker_config_files(request):
worker, success = get_worker(request) worker, success = get_worker(request)
if worker: if worker:

View File

@@ -21,7 +21,7 @@ from accounts.views import view_create_first_user, view_login, view_logout
from api.views import api_instance_info, api_peer_invite, api_peer_list, cron_check_updates, \ from api.views import api_instance_info, api_peer_invite, api_peer_list, cron_check_updates, \
cron_update_peer_latest_handshake, peer_info, routerfleet_authenticate_session, routerfleet_get_user_token, \ cron_update_peer_latest_handshake, peer_info, routerfleet_authenticate_session, routerfleet_get_user_token, \
wireguard_status wireguard_status
from cluster.cluster_api import api_cluster_status, api_get_worker_config_files from cluster.cluster_api import api_cluster_status, api_get_worker_config_files, api_get_worker_dnsmasq_config
from cluster.views import cluster_main, cluster_settings, worker_manage from cluster.views import cluster_main, cluster_settings, worker_manage
from console.views import view_console from console.views import view_console
from dns.views import view_apply_dns_config, view_manage_dns_settings, view_manage_filter_list, view_manage_static_host, \ from dns.views import view_apply_dns_config, view_manage_dns_settings, view_manage_filter_list, view_manage_static_host, \
@@ -78,6 +78,7 @@ urlpatterns = [
path('api/cron_update_peer_latest_handshake/', cron_update_peer_latest_handshake, name='cron_update_peer_latest_handshake'), path('api/cron_update_peer_latest_handshake/', cron_update_peer_latest_handshake, name='cron_update_peer_latest_handshake'),
path('api/cluster/status/', api_cluster_status, name='api_cluster_status'), path('api/cluster/status/', api_cluster_status, name='api_cluster_status'),
path('api/cluster/worker/get_config_files/', api_get_worker_config_files, name='api_get_worker_config_files'), path('api/cluster/worker/get_config_files/', api_get_worker_config_files, name='api_get_worker_config_files'),
path('api/cluster/worker/get_dnsmasq_config/', api_get_worker_dnsmasq_config, name='api_get_worker_dnsmasq_config'),
path('firewall/port_forward/', view_redirect_rule_list, name='redirect_rule_list'), path('firewall/port_forward/', view_redirect_rule_list, name='redirect_rule_list'),
path('firewall/manage_port_forward_rule/', manage_redirect_rule, name='manage_redirect_rule'), path('firewall/manage_port_forward_rule/', manage_redirect_rule, name='manage_redirect_rule'),
path('firewall/rule_list/', view_firewall_rule_list, name='firewall_rule_list'), path('firewall/rule_list/', view_firewall_rule_list, name='firewall_rule_list'),