Пакет для проверки авторизации пользователя перед доступом к /media/
====================================================================

Установка и настройка:
----------------------

Для подключения пакета к проекту на платформе M3 необходимо:

1. Установить его в окружение:
::

    pip install educommon==0.5.13 -i http://pypi.bars-open.ru


2. Добавить в settings.py параметры ``SENDFILE_BACKEND``, ``SENDFILE_ROOT``,
   ``SENDFILE_URL``:

   ``SENDFILE_BACKEND`` - бэкэнд.
   Два значения ``sendfile.backends.nginx``, ``sendfile.backends.development``
   Для тестовых и production серверов ``sendfile.backends.nginx``
   Для машины разработчика ``sendfile.backends.development``

   ``SENDFILE_ROOT`` всегда равен ``MEDIA_ROOT``, директория с файлами, для
   отдачи которых требуется авторизация

   ``SENDFILE_URL`` адрес на который будет перенаправлен запрос в случае
   если авторизация прошла успешна. Пример ``/protected``. Адрес не должен
   заканчиваться слешем.
3. Для тестовых и production серверов сконфигурировать **NGINX**.

Настройка в продуктах ЭДС, ЭШ, ЭК:
----------------------------------
1. Установить его в окружение:
::

    pip install educommon==0.5.13 -i http://pypi.bars-open.ru


2. Для тестовых и production серверов в конфигурационном файле проекта задать
параметры
::

    [secure_media]
    backend = sendfile.backends.nginx
    # URL на который будет перенаправляться запрос
    url = /protected

Для url из параметров необходимо задать секцию ``location``
в конфигурационном файле **NGINX**.

3. Для тестовых и production серверов сконфигурировать **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;
            # Не кэшируем запрос на клиенте
            expires -1;
            }
        }

Запрос обрабатывается в **Django view**. Если запращиваются файлы в
/media/public, то они отдаются без каких-либо проверок.
Если пользователь не авторизован, то на клиент возвращается ``json`` с
сообщением. Если пользователь авторизован, то запрос перенаправляется
на **URL** заданный параметром ``SENDFILE_URL``. **location** для него
должен быть задан в конфигурационном файле **NGINX**
::

    location /protected/ {
        # Обрабатываются внутренние запросы
        internal;
        alias /home/ivahotin/dev/kinder_conf/media/;
        # Отключаем кеширование в браузере
        expires -1;
    }
