# -*- coding: utf-8 -*- """ Views для аутентификации администраторов платформы. """ from django.shortcuts import render, redirect from django.contrib.auth import login, logout from django.contrib import messages from django.db import connection from .forms import PlatformAdminLoginForm from .models import PlatformAdmin def platform_login_view(request): """ Страница входа для администраторов платформы. Доступна только на public домене. """ # Проверяем что мы на public домене schema_name = getattr(connection, 'schema_name', 'public') if schema_name != 'public': messages.error(request, 'Вход для администраторов платформы доступен только на главном домене.') return redirect('/') # Если пользователь уже залогинен как PlatformAdmin if request.user.is_authenticated and isinstance(request.user, PlatformAdmin): return redirect('platform_admin:dashboard') if request.method == 'POST': form = PlatformAdminLoginForm(request, data=request.POST) if form.is_valid(): user = form.get_user() login(request, user, backend='platform_admin.backends.PlatformAdminBackend') messages.success(request, f'Добро пожаловать, {user.name}!') next_url = request.GET.get('next') if next_url: return redirect(next_url) return redirect('platform_admin:dashboard') else: form = PlatformAdminLoginForm(request) return render(request, 'platform_admin/login.html', {'form': form}) def platform_logout_view(request): """ Выход администратора платформы. """ logout(request) messages.info(request, 'Вы вышли из системы.') return redirect('platform_admin:login') def dashboard_view(request): """ Главная страница панели администратора платформы. Показывает статистику по тенантам, заявкам и подпискам. """ # Проверяем что пользователь - PlatformAdmin if not request.user.is_authenticated or not isinstance(request.user, PlatformAdmin): return redirect('platform_admin:login') from tenants.models import Client, TenantRegistration, Subscription context = { 'total_tenants': Client.objects.exclude(schema_name='public').count(), 'active_tenants': Client.objects.filter(is_active=True).exclude(schema_name='public').count(), 'pending_registrations': TenantRegistration.objects.filter(status='pending').count(), 'active_subscriptions': Subscription.objects.filter(is_active=True).count(), } return render(request, 'platform_admin/dashboard.html', context)