No project description provided
Project description
Пакет для проверки авторизации пользователя перед доступом к /media/
Установка и настройка
- Установить пакет в окружение:
pip install edu-secure-media - В основном
urls.pyрасширитьurlpatterns.
# Пример использования в ЭШ:
from edu_secure_media.urls import (
urlpatterns as secure_urls,
)
urlpatterns += secure_urls
- Добавить в settings.py параметры:
- SECURE_MEDIA_SECRET_KEY
- SECURE_MEDIA_TRUSTED_HOST_PATHS
# Пример использования: SECURE_MEDIA_TRUSTED_HOST_PATHS = conf.get('secure_media', 'trusted_host_paths').replace(' ', '') or '' - SECURE_MEDIA_HASHING_ALG (по умолчанию 'sha1')
- SECURE_MEDIA_DESCRIPTOR_PARAM_NAME (по умолчанию 'desc')
- SECURE_MEDIA_PUBLIC_DESCRIPTOR_NAME (по умолчанию 'Public')
- SECURE_MEDIA_HANDLERS
# Пример использования с разъяснением в разделе "Параметры SECURE_MEDIA_HANDLERS" - Для django-sendfile:
- SENDFILE_BACKEND
# Пример использования для машины разработчика: SENDFILE_BACKEND = conf.get('secure_media', 'backend') or 'django_sendfile.backends.development' # Пример использования для тестовых и production серверов: SENDFILE_BACKEND = conf.get('secure_media', 'backend') or 'django_sendfile.backends.nginx'- SENDFILE_URL
# Адрес, на который будет перенаправлен запрос в случае, если авторизация прошла успешна. # Адрес не должен заканчиваться слешем. Пример использования: SENDFILE_URL = conf.get('secure_media', 'url') or '/protected'- SENDFILE_ROOT = MEDIA_ROOT
SENDFILE_ROOT всегда равен MEDIA_ROOT, директория с файлами, для отдачи которых требуется авторизация.
- Для тестовых и production серверов в конфигурационном файле проекта задать параметры
[secure_media]
backend = django_sendfile.backends.nginx
# URL на который будет перенаправляться запрос
url = /protected
- Для тестовых и production серверов сконфигурировать NGINX.
Для url из параметров необходимо задать секциюlocationв конфигурационном файле NGINX.
Алгоритм обработки запроса на тестовых и production серверах:
Поступает запрос от клиента на URL /media/*. NGINX принимает запрос
и передает проксируемому серверу (django, gunicorn). Этот запрос не
кэшируется.
Пример конфигурации:
location / {
proxy_pass http://localhost:8000;
include proxy_params;
charset utf-8;
chunked_transfer_encoding off;
}
location /media/ {
proxy_pass http://localhost:8000/media/;
# Не кэшируем запрос на клиенте
expires -1;
}
Запрос обрабатывается в Django view. Если запрашиваются файлы в
/media/public, то они отдаются без каких-либо проверок.
Если пользователь не авторизован, то на клиент возвращается json с
сообщением. Если пользователь авторизован, то запрос перенаправляется
на URL заданный параметром SENDFILE_URL. location для него
должен быть задан в конфигурационном файле NGINX
location /protected/ {
# Обрабатываются внутренние запросы
internal;
# Если для nginx используется докер, путь к media должен соответствовать пути,
# в который смонтирована директория с медиафайлами.
alias /home/ivahotin/dev/kinder_conf/media/;
# Отключаем кеширование в браузере
expires -1;
}
Параметры SECURE_MEDIA_HANDLERS
# Пример использования в ЭШ:
SECURE_MEDIA_HANDLERS = [
[
None,
'edu_secure_media.handlers.common.check_path_traversal_attack',
],
[
None,
'edu_secure_media.handlers.common.allow_host_handler',
],
[
None,
'edu_secure_media.handlers.common.allow_prefixes_handler',
{
'prefixes': [
'public/',
]
},
],
[
None,
'edu_secure_media.handlers.m3.allow_admin_only_handler',
{
'prefixes': [
'downloads/admin/',
'uploads/edu_rdm_integration/',
f'{RDM_COLLECT_LOG_DIR}/'
f'{RDM_EXPORT_LOG_DIR}/',
],
'join_media_url': True,
}
],
[
None,
'edu_secure_media.handlers.common.allow_authenticated_handler',
],
[
'Public',
'edu_secure_media.handlers.common.always_allow_handler',
],
[
'#/emie_school/*',
'edu_secure_media.handlers.common.delegate_to_model_handler',
],
[
'*',
'edu_secure_media.handlers.common.always_allow_handler',
]
]
Список handler'ов определяющих доступность файла по его ссылке.
Каждый элемент списка это список из 3х элементов:
- pattern для сопоставления или None. Если None, то хендлер функция будет вызываться для всех ссылок, иначе только для тех у которых pattern совпадает с дескриптором ссылки. Паттерны сопоставляются модулем fnmatch.
- Путь к хендлер функции, которая будет вызвана
- Словарь именнованных аргуметов для хендлер функции
Хендлеры вызываются по порядку. Каждый handler должен вернуть одно из 4-х значений:
- True - Если доступ разрешается
- False - Если доступ запрещается
- HttpResponse - Если нужно вернуть ответ "как есть"
- None - Если хендлер не смог однозначно нужно дать доступ или нет
Если один из handler'ов возвращает True, False или HttpResponse, обработка прерывается, если же None, то обрабатываются следующие handler'ы.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file edu_secure_media-0.1.2.tar.gz.
File metadata
- Download URL: edu_secure_media-0.1.2.tar.gz
- Upload date:
- Size: 11.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.9.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
543dd80578e04ce2d29b4414ccff1921180c31e6ec0c91cbf7100aa62b9f158b
|
|
| MD5 |
7a93fedd14683e24c06deec33ab4e463
|
|
| BLAKE2b-256 |
75152d925f8aa7a1f8c02ada2705ad480d401f70ad5f322724aef8843d159832
|
File details
Details for the file edu_secure_media-0.1.2-py3-none-any.whl.
File metadata
- Download URL: edu_secure_media-0.1.2-py3-none-any.whl
- Upload date:
- Size: 11.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.9.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
642f81d3566b48f240b40cc0d71bfe3d468bb9479ce5afb1b967df018ab6588d
|
|
| MD5 |
e81a3cb7b200338a45e6439808aded35
|
|
| BLAKE2b-256 |
474f7ca4f803f51c08bad08e5525004320e14f35559fda0686a11d8a6d4455e8
|