Files
ACORE/acore/urls.py
T
lokses 4e803c53e0 2FA: обязательная двухфакторная аутентификация (TOTP) для staff
- Модель Employee: totp_secret (шифруется), totp_enabled, totp_backup_codes
- Сервис twofa: генерация секрета/QR, проверка TOTP, резервные коды (sha256)
- TwoFactorMiddleware: enforcement для is_staff на портале и /admin/
- Страницы setup/verify/backup-codes; сброс 2fa_verified при каждом входе
- Админка: колонка статуса 2FA, фильтр, действие «Сбросить 2FA»
- Тесты: enforcement, setup, verify, резервные коды, disable

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-28 10:41:11 +03:00

75 lines
3.8 KiB
Python

"""
URL configuration for acore project.
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/6.0/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from core import views
urlpatterns = [
path('admin/', admin.site.urls),
path('i18n/', include('django.conf.urls.i18n')), # set_language для переключателя мов
path('api/attendance/', include('apps.visit_manager.api.urls')),
path('', include('apps.employees.urls')),
path('', include('apps.ad_connector.urls')),
path('', include('apps.feed.urls')),
path('', include('apps.tasks.urls')),
path('', include('apps.it_manager.urls')),
path('', include('apps.mattermost_connector.urls')),
path('', include('apps.utilities.urls')),
path('tinymce/', include('tinymce.urls')),
path('', views.index_view, name='index'),
path('accounts/login/', views.login_view, name='login'),
path('login/', views.login_view, name='login'),
path('logout/', views.logout_view, name='logout'),
path('2fa/setup/', views.twofa_setup_view, name='twofa_setup'),
path('2fa/backup-codes/', views.twofa_backup_codes_view, name='twofa_backup_codes'),
path('2fa/verify/', views.twofa_verify_view, name='twofa_verify'),
path('dashboard/', views.dashboard_view, name='dashboard'),
path('employees/', views.employees_view, name='employees'),
path('employees/<int:pk>/', views.employee_detail_view, name='employee_detail'),
path('pharmacies/', views.pharmacies_view, name='pharmacies'),
path('dislocation/', views.dislocation_view, name='dislocation'),
path('calendar/', views.calendar_view, name='calendar'),
path('timetrack/', views.timetrack_view, name='timetrack'),
path('reports/', views.reports_view, name='reports'),
path('documents/', views.documents_view, name='documents'),
path('recruiting/', views.recruiting_view, name='recruiting'),
path('structure/', views.structure_view, name='structure'),
path('settings/', views.settings_view, name='settings'),
path('profile/', views.profile_view, name='profile'),
path('email/', views.email_view, name='email'),
path('chat/', views.chat_view, name='chat'),
path('chat/sync/', views.chat_sync_now_view, name='chat_sync_now'),
path('databases/', views.databases_view, name='databases'),
path('purchases/', views.purchases_view, name='purchases'),
path('hr-portal/', views.hr_portal_view, name='hr_portal'),
path('hiring/', views.hiring_create_view, name='hiring_create'),
path('hiring/<int:pk>/approve/', views.hiring_approve_view, name='hiring_approve'),
path('hiring/<int:pk>/reject/', views.hiring_reject_view, name='hiring_reject'),
path('help/', views.help_view, name='help'),
path('it-support/', views.it_support_view, name='it_support'),
path('directory/quick-add/', views.directory_quick_add_view, name='directory_quick_add'),
path('pharmacies/<int:pk>/', views.pharmacy_detail_view, name='pharmacy_detail'),
path('modal-add-employee/', views.modal_add_employee_view, name='modal_add_employee'),
]
if settings.DEBUG:
urlpatterns += staticfiles_urlpatterns()
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)