mirror of
https://github.com/eduardogsilva/wireguard_webadmin.git
synced 2025-04-19 08:55:12 +00:00
Implement enhanced filtering for WireGuard peers based on user ACL settings in api/wireguard_status view
This commit is contained in:
parent
10e456b202
commit
b426c05e9f
21
api/views.py
21
api/views.py
@ -9,7 +9,8 @@ from django.conf import settings
|
|||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
|
|
||||||
from user_manager.models import UserAcl, AuthenticationToken
|
from user_manager.models import UserAcl, AuthenticationToken
|
||||||
from wireguard.models import WebadminSettings, Peer, PeerStatus
|
from wireguard.models import WebadminSettings, Peer, PeerStatus, WireGuardInstance
|
||||||
|
from wgwadmlibrary.tools import user_allowed_peers
|
||||||
import requests
|
import requests
|
||||||
import subprocess
|
import subprocess
|
||||||
import datetime
|
import datetime
|
||||||
@ -111,8 +112,13 @@ def routerfleet_get_user_token(request):
|
|||||||
|
|
||||||
@require_http_methods(["GET"])
|
@require_http_methods(["GET"])
|
||||||
def wireguard_status(request):
|
def wireguard_status(request):
|
||||||
|
user_acl = None
|
||||||
|
enhanced_filter = False
|
||||||
|
filter_peer_list = []
|
||||||
|
|
||||||
if request.user.is_authenticated:
|
if request.user.is_authenticated:
|
||||||
pass
|
user_acl = get_object_or_404(UserAcl, user=request.user)
|
||||||
|
enhanced_filter = user_acl.enable_enhanced_filter
|
||||||
elif request.GET.get('key'):
|
elif request.GET.get('key'):
|
||||||
api_key = get_api_key('api')
|
api_key = get_api_key('api')
|
||||||
if api_key and api_key == request.GET.get('key'):
|
if api_key and api_key == request.GET.get('key'):
|
||||||
@ -121,7 +127,13 @@ def wireguard_status(request):
|
|||||||
return HttpResponseForbidden()
|
return HttpResponseForbidden()
|
||||||
else:
|
else:
|
||||||
return HttpResponseForbidden()
|
return HttpResponseForbidden()
|
||||||
|
|
||||||
|
if enhanced_filter:
|
||||||
|
for server_instance in WireGuardInstance.objects.all():
|
||||||
|
for peer in user_allowed_peers(user_acl, server_instance):
|
||||||
|
if peer.public_key not in filter_peer_list:
|
||||||
|
filter_peer_list.append(peer.public_key)
|
||||||
|
|
||||||
commands = {
|
commands = {
|
||||||
'latest-handshakes': "wg show all latest-handshakes | expand | tr -s ' '",
|
'latest-handshakes': "wg show all latest-handshakes | expand | tr -s ' '",
|
||||||
'allowed-ips': "wg show all allowed-ips | expand | tr -s ' '",
|
'allowed-ips': "wg show all allowed-ips | expand | tr -s ' '",
|
||||||
@ -151,7 +163,8 @@ def wireguard_status(request):
|
|||||||
|
|
||||||
if interface not in output:
|
if interface not in output:
|
||||||
output[interface] = {}
|
output[interface] = {}
|
||||||
|
if enhanced_filter and peer not in filter_peer_list:
|
||||||
|
continue
|
||||||
if peer not in output[interface]:
|
if peer not in output[interface]:
|
||||||
output[interface][peer] = {
|
output[interface][peer] = {
|
||||||
'allowed-ips': [],
|
'allowed-ips': [],
|
||||||
|
Loading…
x
Reference in New Issue
Block a user