{% extends "admin/admin_base.html" %}

{% block title %}Управление безопасностью{% endblock %}

{% block breadcrumb %}
<li class="breadcrumb-item"><a href="{{ url_for('admin.dashboard') }}">Главная</a></li>
<li class="breadcrumb-item active">Безопасность</li>
{% endblock %}

{% block admin_content %}
<div class="container-fluid">
    <div class="row">
        <div class="col-12">
            <h2 class="mb-4"><i class="bi bi-shield-lock-fill"></i> Управление безопасностью</h2>
            
            <!-- Вкладки -->
            <ul class="nav nav-tabs mb-3" id="securityTabs" role="tablist">
                <li class="nav-item" role="presentation">
                    <button class="nav-link active" onclick="switchSecurityTab('ip-lists')" type="button">
                        <i class="bi bi-list-check"></i> IP Списки
                    </button>
                </li>
                <li class="nav-item" role="presentation">
                    <button class="nav-link" onclick="switchSecurityTab('waf-rules')" type="button">
                        <i class="bi bi-shield-exclamation"></i> WAF Правила
                    </button>
                </li>
                <li class="nav-item" role="presentation">
                    <button class="nav-link" onclick="switchSecurityTab('events')" type="button">
                        <i class="bi bi-bell"></i> События безопасности
                    </button>
                </li>
                {% if can_manage_auth_settings %}
                <li class="nav-item" role="presentation" id="publicAuthTabNav">
                    <button class="nav-link" onclick="switchSecurityTab('public-auth')" type="button">
                        <i class="bi bi-person-check"></i> Public Auth
                    </button>
                </li>
                {% endif %}
                <li class="nav-item" role="presentation">
                    <button class="nav-link" onclick="switchSecurityTab('blocked-ips')" type="button">
                        <i class="bi bi-ban"></i> Заблокированные IP
                    </button>
                </li>
            </ul>
            
            <!-- Вкладка IP Списки -->
            <div id="ip-lists-tab" class="tab-content">
                <div class="card mb-4">
                    <div class="card-header d-flex justify-content-between align-items-center">
                        <h5 class="mb-0"><i class="bi bi-list-check"></i> IP Whitelist/Blacklist</h5>
                        <button class="btn btn-sm btn-primary" onclick="showAddIPModal()">
                            <i class="bi bi-plus-circle"></i> Добавить IP
                        </button>
                    </div>
                    <div class="card-body">
                        <div class="row mb-3">
                            <div class="col-md-4">
                                <select class="form-select" id="ipListTypeFilter" onchange="loadIPLists()">
                                    <option value="">Все списки</option>
                                    <option value="whitelist">Whitelist</option>
                                    <option value="blacklist">Blacklist</option>
                                </select>
                            </div>
                        </div>
                        <div class="table-responsive">
                            <table class="table table-striped table-hover">
                                <thead>
                                    <tr>
                                        <th>IP адрес</th>
                                        <th>Диапазон (CIDR)</th>
                                        <th>Тип</th>
                                        <th>Описание</th>
                                        <th>Статус</th>
                                        <th>Создано</th>
                                        <th>Истекает</th>
                                        <th>Действия</th>
                                    </tr>
                                </thead>
                                <tbody id="ipListsTableBody">
                                    <tr>
                                        <td colspan="8" class="text-center">Загрузка...</td>
                                    </tr>
                                </tbody>
                            </table>
                        </div>
                    </div>
                </div>
            </div>
            
            <!-- Вкладка WAF Правила -->
            <div id="waf-rules-tab" class="tab-content" style="display: none;">
                <div class="card mb-4">
                    <div class="card-header d-flex justify-content-between align-items-center">
                        <h5 class="mb-0"><i class="bi bi-shield-exclamation"></i> WAF Правила</h5>
                        <button class="btn btn-sm btn-primary" onclick="showAddWAFRuleModal()">
                            <i class="bi bi-plus-circle"></i> Добавить правило
                        </button>
                    </div>
                    <div class="card-body">
                        <div class="table-responsive">
                            <table class="table table-striped table-hover">
                                <thead>
                                    <tr>
                                        <th>Название</th>
                                        <th>Тип</th>
                                        <th>Паттерн</th>
                                        <th>Действие</th>
                                        <th>Серьезность</th>
                                        <th>Приоритет</th>
                                        <th>Статус</th>
                                        <th>Действия</th>
                                    </tr>
                                </thead>
                                <tbody id="wafRulesTableBody">
                                    <tr>
                                        <td colspan="8" class="text-center">Загрузка...</td>
                                    </tr>
                                </tbody>
                            </table>
                        </div>
                    </div>
                </div>
            </div>
            
            <!-- Вкладка События безопасности -->
            <div id="events-tab" class="tab-content" style="display: none;">
                <div class="card mb-4">
                    <div class="card-header">
                        <h5 class="mb-0"><i class="bi bi-bell"></i> События безопасности</h5>
                    </div>
                    <div class="card-body">
                        <div class="row mb-3">
                            <div class="col-md-3">
                                <label class="form-label">Тип события</label>
                                <select class="form-select form-select-sm" id="eventTypeFilter" onchange="loadSecurityEvents()">
                                    <option value="">Все типы</option>
                                    <option value="ddos_attack">DDoS атака</option>
                                    <option value="rate_limit_exceeded">Превышен rate limit</option>
                                    <option value="suspicious_activity">Подозрительная активность</option>
                                    <option value="blocked_ip">Заблокированный IP</option>
                                    <option value="waf_rule_triggered">Сработало WAF правило</option>
                                    <option value="ip_access_denied">Доступ IP запрещен</option>
                                </select>
                            </div>
                            <div class="col-md-3">
                                <label class="form-label">Серьезность</label>
                                <select class="form-select form-select-sm" id="eventSeverityFilter" onchange="loadSecurityEvents()">
                                    <option value="">Все уровни</option>
                                    <option value="low">Низкая</option>
                                    <option value="medium">Средняя</option>
                                    <option value="high">Высокая</option>
                                    <option value="critical">Критическая</option>
                                </select>
                            </div>
                            <div class="col-md-3">
                                <label class="form-label">IP адрес</label>
                                <input type="text" class="form-control form-control-sm" id="eventIPFilter" placeholder="IP адрес" onchange="loadSecurityEvents()">
                            </div>
                            <div class="col-md-3">
                                <label class="form-label">Статус</label>
                                <select class="form-select form-select-sm" id="eventResolvedFilter" onchange="loadSecurityEvents()">
                                    <option value="">Все</option>
                                    <option value="false">Не решено</option>
                                    <option value="true">Решено</option>
                                </select>
                            </div>
                        </div>
                        <div class="table-responsive">
                            <table class="table table-striped table-hover">
                                <thead>
                                    <tr>
                                        <th>Тип</th>
                                        <th>IP адрес</th>
                                        <th>Серьезность</th>
                                        <th>Описание</th>
                                        <th>Путь запроса</th>
                                        <th>Время</th>
                                        <th>Статус</th>
                                        <th>Действия</th>
                                    </tr>
                                </thead>
                                <tbody id="securityEventsTableBody">
                                    <tr>
                                        <td colspan="8" class="text-center">Загрузка...</td>
                                    </tr>
                                </tbody>
                            </table>
                        </div>
                        <div class="d-flex justify-content-between align-items-center mt-3">
                            <div>
                                <span id="eventsTotal">0</span> событий
                            </div>
                            <nav>
                                <ul class="pagination pagination-sm mb-0" id="eventsPagination">
                                </ul>
                            </nav>
                        </div>
                    </div>
                </div>
            </div>
            
            {% if can_manage_auth_settings %}
            <div id="public-auth-tab" class="tab-content" style="display: none;">
                <div class="card mb-4">
                    <div class="card-header">
                        <h5 class="mb-0"><i class="bi bi-person-check"></i> Public Auth</h5>
                    </div>
                    <div class="card-body" id="publicAuthSettingsContainer"></div>
                </div>
            </div>
            {% endif %}

            <div id="blocked-ips-tab" class="tab-content" style="display: none;">
                <div class="card mb-4">
                    <div class="card-header d-flex justify-content-between align-items-center">
                        <h5 class="mb-0"><i class="bi bi-ban"></i> Временно заблокированные IP</h5>
                        <button class="btn btn-sm btn-primary" onclick="showBlockIPModal()">
                            <i class="bi bi-plus-circle"></i> Заблокировать IP
                        </button>
                    </div>
                    <div class="card-body">
                        <div class="alert alert-info">
                            <i class="bi bi-info-circle"></i> Временно заблокированные IP адреса автоматически разблокируются по истечении времени блокировки.
                        </div>
                        <div class="table-responsive">
                            <table class="table table-striped table-hover">
                                <thead>
                                    <tr>
                                        <th>IP адрес</th>
                                        <th>Время блокировки</th>
                                        <th>Разблокировка</th>
                                        <th>Действия</th>
                                    </tr>
                                </thead>
                                <tbody id="blockedIPsTableBody">
                                    <tr>
                                        <td colspan="4" class="text-center">Загрузка...</td>
                                    </tr>
                                </tbody>
                            </table>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>

<!-- Модальное окно добавления IP -->
<div class="modal fade" id="addIPModal" tabindex="-1">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <h5 class="modal-title">Добавить IP в список</h5>
                <button type="button" class="btn-close" data-bs-dismiss="modal"></button>
            </div>
            <div class="modal-body">
                <form id="addIPForm">
                    <div class="mb-3">
                        <label class="form-label">IP адрес *</label>
                        <input type="text" class="form-control" id="ipAddress" required placeholder="192.168.1.1">
                    </div>
                    <div class="mb-3">
                        <label class="form-label">CIDR диапазон (опционально)</label>
                        <input type="text" class="form-control" id="ipRange" placeholder="192.168.1.0/24">
                    </div>
                    <div class="mb-3">
                        <label class="form-label">Тип списка *</label>
                        <select class="form-select" id="ipListType" required>
                            <option value="whitelist">Whitelist</option>
                            <option value="blacklist">Blacklist</option>
                        </select>
                    </div>
                    <div class="mb-3">
                        <label class="form-label">Описание</label>
                        <textarea class="form-control" id="ipDescription" rows="2"></textarea>
                    </div>
                    <div class="mb-3">
                        <label class="form-label">Истекает (опционально)</label>
                        <input type="datetime-local" class="form-control" id="ipExpiresAt">
                    </div>
                </form>
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Отмена</button>
                <button type="button" class="btn btn-primary" onclick="addIPToList()">Добавить</button>
            </div>
        </div>
    </div>
</div>

<!-- Модальное окно добавления WAF правила -->
<div class="modal fade" id="addWAFRuleModal" tabindex="-1">
    <div class="modal-dialog modal-lg">
        <div class="modal-content">
            <div class="modal-header">
                <h5 class="modal-title">Добавить WAF правило</h5>
                <button type="button" class="btn-close" data-bs-dismiss="modal"></button>
            </div>
            <div class="modal-body">
                <form id="addWAFRuleForm">
                    <div class="mb-3">
                        <label class="form-label">Название *</label>
                        <input type="text" class="form-control" id="wafRuleName" required>
                    </div>
                    <div class="mb-3">
                        <label class="form-label">Описание</label>
                        <textarea class="form-control" id="wafRuleDescription" rows="2"></textarea>
                    </div>
                    <div class="row">
                        <div class="col-md-6 mb-3">
                            <label class="form-label">Тип правила *</label>
                            <select class="form-select" id="wafRuleType" required>
                                <option value="sql_injection">SQL Injection</option>
                                <option value="xss">XSS</option>
                                <option value="path_traversal">Path Traversal</option>
                                <option value="custom">Пользовательское</option>
                            </select>
                        </div>
                        <div class="col-md-6 mb-3">
                            <label class="form-label">Действие *</label>
                            <select class="form-select" id="wafRuleAction" required>
                                <option value="block">Блокировать</option>
                                <option value="log">Только логировать</option>
                                <option value="redirect">Перенаправить</option>
                            </select>
                        </div>
                    </div>
                    <div class="row">
                        <div class="col-md-6 mb-3">
                            <label class="form-label">Серьезность *</label>
                            <select class="form-select" id="wafRuleSeverity" required>
                                <option value="low">Низкая</option>
                                <option value="medium">Средняя</option>
                                <option value="high">Высокая</option>
                                <option value="critical">Критическая</option>
                            </select>
                        </div>
                        <div class="col-md-6 mb-3">
                            <label class="form-label">Приоритет</label>
                            <input type="number" class="form-control" id="wafRulePriority" value="0">
                        </div>
                    </div>
                    <div class="mb-3">
                        <label class="form-label">Regex паттерн *</label>
                        <input type="text" class="form-control" id="wafRulePattern" required placeholder=".*(union|select).*">
                        <small class="form-text text-muted">Регулярное выражение для поиска в запросе</small>
                    </div>
                    <div class="mb-3">
                        <label class="form-label">Место проверки</label>
                        <select class="form-select" id="wafRuleMatchLocation">
                            <option value="all">Все (URL, заголовки, тело)</option>
                            <option value="url">Только URL</option>
                            <option value="headers">Только заголовки</option>
                            <option value="body">Только тело запроса</option>
                        </select>
                    </div>
                </form>
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Отмена</button>
                <button type="button" class="btn btn-primary" onclick="addWAFRule()">Добавить</button>
            </div>
        </div>
    </div>
</div>

<!-- Модальное окно блокировки IP -->
<div class="modal fade" id="blockIPModal" tabindex="-1">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <h5 class="modal-title">Заблокировать IP</h5>
                <button type="button" class="btn-close" data-bs-dismiss="modal"></button>
            </div>
            <div class="modal-body">
                <form id="blockIPForm">
                    <div class="mb-3">
                        <label class="form-label">IP адрес *</label>
                        <input type="text" class="form-control" id="blockIPAddress" required placeholder="192.168.1.1">
                    </div>
                    <div class="mb-3">
                        <label class="form-label">Длительность блокировки (секунды)</label>
                        <input type="number" class="form-control" id="blockDuration" value="3600" min="60">
                        <small class="form-text text-muted">По умолчанию: 1 час (3600 секунд)</small>
                    </div>
                </form>
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Отмена</button>
                <button type="button" class="btn btn-danger" onclick="blockIP()">Заблокировать</button>
            </div>
        </div>
    </div>
</div>

<script>window.__CAN_MANAGE_AUTH_SETTINGS__ = {{ (can_manage_auth_settings | default(false)) | tojson }};</script>
<script src="{{ url_for('static', filename='js/csrf-fetch.js') }}"></script>
<script src="{{ url_for('static', filename='js/public-auth-settings.js') }}"></script>
<script src="{{ url_for('static', filename='js/security.js') }}"></script>
{% endblock %}
