Commit Graph

6 Commits

Author SHA1 Message Date
lokses 83ebf8f12a deps: чистый requirements.txt + недостающие рантайм-зависимости
- pyotp, qrcode — были не указаны, но нужны для 2FA (twofa.py); на чистом
  проде без них 2FA бы не поднялась.
- defusedxml, fonttools, pyasn1, typing_extensions — транзитивные (fpdf2/ldap3).
- gunicorn сохранён.

Список сверен с венвом проекта; системный мусор Fedora (pip freeze не того
интерпретатора) сюда не попадает.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-10 16:48:08 +03:00
lokses 719d0b737b infra: надёжное обнаружение тестов, Redis-кэш и хардненинг прода
- AcoreDiscoverRunner собирает tests/tests_* всех локальных приложений
  (manage.py test находил 38 тестов из ~466 — теперь все).
- CACHES на Redis (отдельная DB от Celery) + обязательный requirepass
  в production, SECURE_HSTS_PRELOAD.
- Фикс stored-XSS в админке: format_html вместо mark_safe + f-string.
- Утилиты безопасности/тестов, шифрование полей.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-09 18:03:11 +03:00
lokses ae5c1f1848 Add RRO, portal section perms, dislocation presets, and hiring intern flow.
Ship cash-register registry, section-based portal access, configurable dislocation columns, and trial-hire intern accounts with credentials PDF.
2026-08-09 14:58:17 +03:00
lokses ab29cd5db8 Хвосты аудита: тесты tasks/employees + чистка зависимостей
- apps/tasks/tests.py (10): TaskQuerySet.for_user (видимость по ролям),
  is_participant (кто меняет статус: автор/відповідальний/співвиконавець,
  но не спостерігач), is_overdue, set_status
- apps/employees/tests.py (10): clean() (разделение фармацевт/офис, даты,
  самоуправление), has_perm с override (grant/revoke/неактивные/
  просроченные/будущие), is_currently_active
- requirements.txt: убран дубль import-export==0.3.1 (используется
  django-import-export==4.4.0)
- удалён мёртвый пустой db.sqlite3 (в .gitignore, не трекался)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-24 10:45:16 +03:00
lokses 78475b58e9 Инфраструктура: Celery, общие утилиты, виджеты, шелл портала
- acore: Celery-приложение (брокер из env, eager без брокера), настройки
  CELERY_*, регистрация всех новых приложений в INSTALLED_APPS, маршруты
- core/utils: render_page (HTMX-фрагмент/полный layout), is_owner/
  is_owner_or_staff; templatetags common_tags (initials, clean_excerpt,
  is_it_staff); UpdateLastSeenMiddleware
- static: people-picker (дерево отделов с аватарками), searchable-select
  (одиночный выбор с поиском), directory-quick-add, it-manager, pagination;
  тема Tailwind v4 пересобрана, лого
- templates: новый шелл index.html (мобильный сайдбар, темы, фон,
  user-dropdown) и login с брендингом

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 17:31:01 +03:00
lokses 5008ba737f AD integration, Mattermost client rewrite, Equipment brand to Directory
- ad_connector: full Django→AD provisioning via ldap3 — LDAP client,
  sync service (create/update/rename CN/enable-disable), Celery tasks,
  signals (auto-create with panel password, attribute updates, password
  sync, block/unblock), sync_users_to_ad management command
- mattermost_connector: rewrite service on mattermostautodriver/httpx,
  fix bare except in username generation (catch ResourceNotFound),
  format_html args instead of interpolation
- it_manager: Equipment.brand CharField → FK to core.Directory
  (equipment_brand type) with data migration
- add missing employees is_staff migration, add requirements.txt

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 16:01:44 +03:00