diff --git a/djing/global_base_views.py b/djing/global_base_views.py index 09d57c1..1383f3f 100644 --- a/djing/global_base_views.py +++ b/djing/global_base_views.py @@ -79,10 +79,17 @@ class AllowedSubnetMixin(object): Return 403 denied otherwise. """ ip = IPAddress(request.META.get('REMOTE_ADDR')) - if ip in IPNetwork(API_AUTH_SUBNET): - return super(AllowedSubnetMixin, self).dispatch(request, *args, **kwargs) - else: - return HttpResponseForbidden('Access Denied') + if type(API_AUTH_SUBNET) is str: + if ip in IPNetwork(API_AUTH_SUBNET): + return super(AllowedSubnetMixin, self).dispatch(request, *args, **kwargs) + try: + for subnet in API_AUTH_SUBNET: + if ip in IPNetwork(subnet): + return super(AllowedSubnetMixin, self).dispatch(request, *args, **kwargs) + except TypeError: + if ip in IPNetwork(str(API_AUTH_SUBNET)): + return super(AllowedSubnetMixin, self).dispatch(request, *args, **kwargs) + return HttpResponseForbidden('Access Denied') class OrderingMixin(object): diff --git a/djing/local_settings.py.template b/djing/local_settings.py.template index 9f7fade..6686794 100644 --- a/djing/local_settings.py.template +++ b/djing/local_settings.py.template @@ -52,6 +52,7 @@ ASTERISK_MANAGER_AUTH = { API_AUTH_SECRET = 'your api secret' # Allowed subnet for api +# Fox example: API_AUTH_SUBNET = ('127.0.0.0/8', '10.0.0.0/8', '192.168.0.0/16') API_AUTH_SUBNET = '127.0.0.0/8' # Company name diff --git a/docs/install.md b/docs/install.md index 2d9a5ed..d86a598 100644 --- a/docs/install.md +++ b/docs/install.md @@ -211,6 +211,23 @@ plugin=python3 **ASTERISK_MANAGER_AUTH** — Данные для управления АТС [Asterisk](https://www.asterisk.org/), пример заполнения есть в *djing/settings_example.py*. +**API_AUTH_SECRET** — Секретное слово для безопасной передачи комманд от скриптов. +Содержимое данных можно увидеть, но нельзя изменить. Это нельзя применять лоя передачи паролей, +секретных номеров, но вполне подходит для защищённого управления. Безопасность гарантируется хеш суммой +__sha256__. то секретное слово должен знать биллинг в конфиге, и доверенный скрипт на примере *agent/monitoring_agent.py.py* +Позаботьтесь о том чтоб скрипт нельзя было просто так прочитать, или вынесите секретное слово куда-то. Если кто-то лишний узнает +его то ваша система будет под угрозой. + +**API_AUTH_SUBNET** — Так же применяется для авторизации скриптов, но проверяет подсеть с которой была отправлена +комманда. Даже если скрипт будет знать секретное слово, но не будет находится в одной из доверенных +подсетей то в доступе будет отказано. Может быть строковым представлением подсети, например '127.0.0.1/8', или списком +подсетей в строковом представлении. Можно даже передать объект который на выходе при преобразовании в строку +даст подсеть. + +**COMPANY_NAME** — Название вашей компании, будет отображаться в шапке сайта в административной части +и в личном кабинете абонента. + +**TELEGRAM_BOT_TOKEN** — Когда вы включите оповещение через телеграм то вам сюда. #### Создание БД