Skip to main content
Warning: You are using the test version of PyPI. This is a pre-production deployment of Warehouse. Changes made here affect the production instance of TestPyPI (testpypi.python.org).
Help us improve Python packaging - Donate today!

Sinops (signed operations) - пакет для создания в django приложении представлений, допускающих исполнение, только при наличии специального документа подписанного с использованием ЭЦП.

Project Description
=========================
Sinops
=========================

Sinops (signed operations) - пакет для создания в django приложении
представлений, допускающих исполнение, только при наличии специального
документа подписанного с использованием ЭЦП.

.. note::
Под представлением здесь должно пониматься произвольное view или
любой другой контроллер, позволяющий пользователю прикладного
приложения совершать взаимодействие с бизнес логикой системы.


------------

Подробная документация на странице wiki_.


Схема взаимодействия с клиентом.
================================

Предположим имеется клиент-серверное приложение, которое
предоставляет своим пользователям (клиентам) совершить
определенные действия, только после предоставления специального
документа, защищенного электроно-цифровой подписью.
При использовании приложением пакета sinops_ процесс взаимодействия
клиента с сервером будет следующим:

1. Клиент посылает запрос на выполнение некоторого действия.

2. Сервер определяет, что для успешного выполнения действия
клиенту необходимо выполнить подписание некотрого документа.

1. Сервер генерирует документ, описывающий действие
которое клиент намеревается выполнить, a также определяет доступные
способы его подписания.

2. Сервер возвращает клиенту ответ, содержащий сгенерированный
документ и информацию о допустимых форматах подписи, с помощю
которых он может быть подписан.

3. Клиент подписывает документ и выполняет действие повторно, но на этот
раз добавляет к запросу также и информацию о подписанном
документе (подпись и некоторые дополнительные атрибуты)

4. Сервер снова принимает запрос и:

1. Выполняется проверка, что формат подписи среди допустимых форматов.

2. Выполняется проверка, подписан именно тот документ, который был сгенерирован сервером
в пункте 2.1

3. Выполняется проверка на то, что выполняемое в текущем запросе действие
такое же как и в пункте 2. (т.е результат будет аналогичным.)

4. Выполняется проверка валидности ЭЦП.

5. В случае успешной проверки предыдущих пунктов, производиться
попытка выполнить запрошенное действие.

6. Производиться логирование операции.

7. Клиенту возвращается ответ со статусом операции.

5. Клиент получает ответ. Пользователю дается ссылка на загрузку
подписанного документа либо сообщение об ошибке.


Пример использования.
=====================

Для начала нужно добавить пакет sinops_ в **INSTALLED_APPS**,
выполнить миграции и настроить интерфейс
взаимодействия с клиентской частью:

|
.. sourcecode:: python

# settings.py

INSTALLED_APPS += ('sinops',)

SINOPS_SETTINGS = {
'DEFAULT_CLIENT_INTERFACE_CLASS': 'mypackage.MyInterface'
}


|


.. sourcecode:: python

# mypackage.py

from django.shortcuts import render_to_response
from sinops.interface import ClientInterfaceBase

class MyInterface(ClientInterfaceBase)

def ask_signature_result(self, request, operation):
u"""
Возвращает результат представления, который должен сообщить
клиенту информацию о том, что совершаемая им операция
должна быть подписана с использованием ЭЦП.
"""
return render_to_response(
'ask_sign_template.html', {msg: operation.get_content_to_sign()}
)

def operation_completed_result(self, request, operation, value):
u"""
Возвращает результат представления, информирующий
клиента о том, что совершаемая им операция успешно выполненна.
"""
return render_to_response('my_sucess_template.html', {value: value})

def verify_error_result(self, request, operation, err):
u"""
Возвращает результат представления, информирующий
клиента о том, что во время верификации операции произошла ошибка.
"""
return render_to_response('my_error.html', {'err': unicode(err)})

def operation_error_result(self, request, operation, err):
u"""
Возвращает результат представления, информирующий
клиента о том, что операция была успешно верифицированна, однако
соответствующим представлением было выброшено исключение.
"""
return render_to_response('my_error.html', {'err': unicode(err)})


Теперь пакет готов к использованию.
Самый простой способ добавить в представление функциональность
запроса подписи - это использовать декоратор ``sign_required``:

|

.. sourcecode:: python

from django.http import HttpResponse
from sinops.utils import sign_required
from sinops.operation import SignedOperation

@sign_required(SignedOperation(u'Это сообщение(документ) для подписания'))
def foo_view(request):

# Тут можно быть уверенным что документ подписан и успешно верифицирован.
# Совершаем требуемые действия:
execute_something()

return HttpResponse(u'Операция выполнена успешно!')


В данный декоратор первым аргументом можно также передать
*callable* объект, который вернет экземпляр ``SignedOperation``.
Переданный *callable* будет вызван с тем же набором аргументов что и
декорируемое представление:

|

.. sourcecode:: python

def get_operation(request, arg1, arg2):
message = (
u'Пользоваетель {0} Вы делаете что то серьезное.'
u'Данное сообщение сформированно {1}'
).format(request.user.username, datetime.now())
return SignedOperation(message)


@sign_required(get_operation)
def bar_view(request, arg1, arg2):

# Тут можно быть уверенным что документ подписан и успешно верифицирован.
# Совершаем требуемые действия:
execute_something()

return HttpResponse(u'Операция выполнена успешно!')



.. _sinops: https://bitbucket.org/hfarhad/sinops
.. _wiki: https://bitbucket.org/hfarhad/sinops/wiki
Release History

Release History

This version
History Node

0.1.14

History Node

0.1.13

History Node

0.1.12

History Node

0.1.1

History Node

0.0.2

History Node

0.0.1

Download Files

Download Files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

File Name & Checksum SHA256 Checksum Help Version File Type Upload Date
sinops-0.1.14.tar.gz (20.0 kB) Copy SHA256 Checksum SHA256 Source Sep 28, 2015

Supported By

WebFaction WebFaction Technical Writing Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Heroku Heroku PaaS Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Rackspace Rackspace Cloud Servers DreamHost DreamHost Log Hosting