35788-vm/core/views.py
Flatlogic Bot bef5d9f151 appku
2025-11-17 08:09:08 +00:00

136 lines
4.4 KiB
Python

import routeros_api
from django.shortcuts import render, redirect
from django.contrib.auth import login, logout
from django.contrib.auth.decorators import login_required
from django.contrib.auth.models import User
# A dummy user is used to authenticate against Django's session management.
# This is not a real user in the database, but a temporary, in-memory user.
# This is required to use the @login_required decorator.
# We create the user if it does not exist.
try:
User.objects.get(username='dummy')
except User.DoesNotExist:
User.objects.create_user('dummy', password='dummy')
def login_view(request):
if request.method == 'POST':
router_ip = request.POST.get('router_ip')
username = request.POST.get('username')
password = request.POST.get('password')
try:
connection = routeros_api.RouterOsApiPool(
router_ip,
username=username,
password=password,
plaintext_login=True
)
api = connection.get_api()
# If connection is successful, store credentials in session
request.session['router_ip'] = router_ip
request.session['username'] = username
request.session['password'] = password
user = User.objects.get(username='dummy')
login(request, user)
return redirect('dashboard')
except Exception as e:
# Handle connection error
return render(request, 'core/login.html', {'error': str(e)})
return render(request, 'core/login.html')
@login_required(login_url='/')
def dashboard_view(request):
router_ip = request.session.get('router_ip')
username = request.session.get('username')
password = request.session.get('password')
if not all([router_ip, username]):
return redirect('login')
try:
connection = routeros_api.RouterOsApiPool(
router_ip,
username=username,
password=password,
plaintext_login=True
)
api = connection.get_api()
# Fetch PPPoE secrets
ppp_secrets = api.get_resource('/ppp/secret').get()
# Fetch Hotspot users
hotspot_users = api.get_resource('/ip/hotspot/user').get()
# Process data
customers = []
for user in ppp_secrets:
customers.append({
'id': user.get('id'),
'name': user.get('name'),
'mac_address': user.get('caller-id', '-'),
'type': 'PPPoE',
'profile': user.get('profile', '-'),
'expires': user.get('comment', '-')
})
for user in hotspot_users:
customers.append({
'id': user.get('id'),
'name': user.get('name'),
'mac_address': user.get('mac-address', '-'),
'type': 'Hotspot',
'profile': user.get('profile', '-'),
'expires': user.get('comment', '-')
})
total_customers = len(customers)
total_hotspot = len(hotspot_users)
total_pppoe = len(ppp_secrets)
context = {
'customers': customers,
'total_customers': total_customers,
'total_hotspot': total_hotspot,
'total_pppoe': total_pppoe,
}
return render(request, 'core/dashboard.html', context)
except Exception as e:
# On error, redirect to login and show error
return redirect('login')
def logout_view(request):
logout(request)
return redirect('login')
def create_pppoe_profile_view(request):
if not request.session.get('router_ip'):
return redirect('login')
return render(request, 'core/create_pppoe_profile.html')
def input_pppoe_customer_view(request):
if not request.session.get('router_ip'):
return redirect('login')
return render(request, 'core/input_customer.html')
def create_hotspot_voucher_view(request):
if not request.session.get('router_ip'):
return redirect('login')
return render(request, 'core/create_hotspot_voucher.html')
def edit_route_view(request):
if not request.session.get('router_ip'):
return redirect('login')
return render(request, 'core/edit_route.html')
def monthly_report_view(request):
if not request.session.get('router_ip'):
return redirect('login')
return render(request, 'core/monthly_report.html')