diff --git a/api/views.py b/api/views.py index 4a66797..08a6c90 100644 --- a/api/views.py +++ b/api/views.py @@ -143,10 +143,15 @@ def api_peer_list(request): return HttpResponseForbidden() else: return HttpResponseForbidden() - data = { - 'peers': [] - } - for peer in Peer.objects.all(): + data = {} + + requested_instance = request.GET.get('instance', 'all') + if requested_instance == 'all': + peer_list = Peer.objects.all() + else: + peer_list = Peer.objects.filter(wireguard_instance__instance_id=requested_instance.replace('wg', '')) + + for peer in peer_list: peer_allowed_ips = [] for allowed_ip in peer.peerallowedip_set.all().filter(config_file='server'): peer_allowed_ips.append( @@ -156,7 +161,9 @@ def api_peer_list(request): 'netmask': allowed_ip.netmask } ) - data['peers'].append({ + if f'wg{peer.wireguard_instance.instance_id}' not in data: + data[f'wg{peer.wireguard_instance.instance_id}'] = {'peers': []} + data[f'wg{peer.wireguard_instance.instance_id}']['peers'].append({ 'name': str(peer), 'public_key': str(peer.public_key), 'uuid': str(peer.uuid), @@ -167,6 +174,39 @@ def api_peer_list(request): return JsonResponse(data) +@require_http_methods(["GET"]) +def api_instance_info(request): + if request.GET.get('key'): + api_key = get_api_key('api') + if api_key and api_key == request.GET.get('key'): + pass + else: + return HttpResponseForbidden() + else: + return HttpResponseForbidden() + data = {} + requested_instance = request.GET.get('instance', 'all') + if requested_instance == 'all': + instances = WireGuardInstance.objects.all() + else: + instances = WireGuardInstance.objects.filter(instance_id=requested_instance.replace('wg', '')) + + for instance in instances: + data[f'wg{instance.instance_id}'] = { + 'name': instance.name, + 'instance_id': f'wg{instance.instance_id}', + 'public_key': instance.public_key, + 'listen_port': instance.listen_port, + 'hostname': instance.hostname, + 'address': instance.address, + 'netmask': instance.netmask, + 'peer_list_refresh_interval': instance.peer_list_refresh_interval, + 'dns_primary': instance.dns_primary if instance.dns_primary else '', + 'dns_secondary': instance.dns_secondary if instance.dns_secondary else '', + 'uuid': str(instance.uuid), + } + return JsonResponse(data) + @require_http_methods(["GET"]) def wireguard_status(request): user_acl = None diff --git a/wireguard_webadmin/urls.py b/wireguard_webadmin/urls.py index 16de6c0..d037577 100644 --- a/wireguard_webadmin/urls.py +++ b/wireguard_webadmin/urls.py @@ -14,12 +14,12 @@ Including another URLconf 1. Import the include() function: from django.urls import include, path 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) """ -from django.contrib import admin from django.urls import path from accounts.views import view_create_first_user, view_login, view_logout -from api.views import api_peer_invite, api_peer_list, cron_check_updates, cron_update_peer_latest_handshake, peer_info, \ - routerfleet_authenticate_session, routerfleet_get_user_token, wireguard_status +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, \ + wireguard_status 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, \ view_static_host_list, view_toggle_dns_list, view_update_dns_list @@ -36,7 +36,7 @@ from wireguard_peer.views import view_manage_ip_address, view_wireguard_peer_lis from wireguard_tools.views import download_config_or_qrcode, export_wireguard_configs, restart_wireguard_interfaces urlpatterns = [ - path('admin/', admin.site.urls), + # path('admin/', admin.site.urls), path('', view_apply_db_patches, name='apply_db_patches'), path('status/', view_wireguard_status, name='wireguard_status'), path('dns/', view_static_host_list, name='static_host_list'), @@ -67,6 +67,7 @@ urlpatterns = [ path('api/routerfleet_get_user_token/', routerfleet_get_user_token, name='routerfleet_get_user_token'), path('api/wireguard_status/', wireguard_status, name='api_wireguard_status'), path('api/peer_list/', api_peer_list, name='api_peer_list'), + path('api/instance_info/', api_instance_info, name='api_instance_info'), path('api/peer_info/', peer_info, name='api_peer_info'), path('api/peer_invite/', api_peer_invite, name='api_peer_invite'), path('api/cron_check_updates/', cron_check_updates, name='cron_check_updates'),