Added user dashboard

This commit is contained in:
Ultradesu
2025-02-25 12:39:08 +02:00
parent c24c35f443
commit d1908e879b
3 changed files with 22 additions and 3 deletions

View File

@ -17,11 +17,12 @@ Including another URLconf
from django.contrib import admin from django.contrib import admin
from django.urls import path, include from django.urls import path, include
from django.views.generic import RedirectView from django.views.generic import RedirectView
from vpn.views import shadowsocks from vpn.views import shadowsocks, userFrontend
urlpatterns = [ urlpatterns = [
path('admin/', admin.site.urls), path('admin/', admin.site.urls),
path('ss/<path:link>', shadowsocks, name='shadowsocks'), path('ss/<path:link>', shadowsocks, name='shadowsocks'),
path('dynamic/<path:link>', shadowsocks, name='shadowsocks'), path('dynamic/<path:link>', shadowsocks, name='shadowsocks'),
path('stat/<path:user_hash>', userFrontend, name='userFrontend'),
path('', RedirectView.as_view(url='/admin/', permanent=False)), path('', RedirectView.as_view(url='/admin/', permanent=False)),
] ]

View File

@ -13,4 +13,5 @@ setuptools==75.2.0
shortuuid==1.0.13 shortuuid==1.0.13
django-celery-results==2.5.1 django-celery-results==2.5.1
PyYaml==6.0.2 PyYaml==6.0.2
Markdown==3.7
git+https://github.com/celery/django-celery-beat#egg=django-celery-beat git+https://github.com/celery/django-celery-beat#egg=django-celery-beat

View File

@ -2,6 +2,23 @@ import yaml
import json import json
from django.shortcuts import get_object_or_404 from django.shortcuts import get_object_or_404
from django.http import JsonResponse, HttpResponse, Http404 from django.http import JsonResponse, HttpResponse, Http404
from mysite.settings import EXTERNAL_ADDRESS
def userFrontend(request, user_hash):
from .models import User, ACLLink
try:
user = get_object_or_404(User, hash=user_hash)
except Http404:
return JsonResponse({"error": "Not allowed"}, status=403)
acl_links = {}
for link in ACLLink.objects.filter(acl__user=user).select_related('acl__server'):
server_name = link.acl.server.name
if server_name not in acl_links:
acl_links[server_name] = []
acl_links[server_name].append({"link": f"{EXTERNAL_ADDRESS}/ss/{link.link}#{link.acl.server.name}", "comment": link.comment})
return JsonResponse(acl_links)
def shadowsocks(request, link): def shadowsocks(request, link):
from .models import ACLLink, AccessLog from .models import ACLLink, AccessLog
@ -22,7 +39,7 @@ def shadowsocks(request, link):
if request.GET.get('mode') == 'json': if request.GET.get('mode') == 'json':
config = { config = {
"info": "Managed by OutFleet_v2 [github.com/house-of-vanity/OutFleet/]", "info": "Managed by OutFleet_2 [github.com/house-of-vanity/OutFleet/]",
"password": server_user.password, "password": server_user.password,
"method": server_user.method, "method": server_user.method,
"prefix": "\u0005\u00dc_\u00e0\u0001", "prefix": "\u0005\u00dc_\u00e0\u0001",