Рассмотрим функцию, отвечающую за авторизацию клиентов и предоставления доступа в Mikrotik Routerboard.
#Авторизация пользователей. Файл views.py
def auth_inet(request):
#Данные от клиентов получаем при помощи метода POST. Проверяем, если объект request.POST не был передан, то перенаправляем на главную страницу.
if not request.POST:
return HttpResponseRedirect('/')
else:
#Выполняем проверку: если значение пароля нулевое, отображаем index.html с сообщением, если клиент ввёл пароль, присваиваем его переменной password. Такие же действия проделаем для ip- и mac-адреса.
if request.POST['r_password'] == '':
return direct_to_template(request, 'index.html', {'message': "Вы не ввели пароль",})
else:
password = request.POST['r_password']
if request.POST['r_ip'] == '':
return direct_to_template(request, 'index.html', {'message': "Вы не ввели ip-адрес",})
else:
ip_address = request.POST['r_ip']
if request.POST['r_mac'] == '':
return direct_to_template(request, 'index.html', {'message': "Вы не ввели мас-адрес",})
else:
mac_address = request.POST['r_mac']
#Выполняем проверку, существует ли пароль в базе. Для этого выполним запрос к модели Create_account, чтобы извлечь данные, где поле gen_password равно переменной password. Если запрос был выполнен успешно, это означает, что пароль существует и клиенту можно разрешить доступ в Интернет, если нет, отображаем главную страницу с соответствующим сообщением.
if Create_account.objects.filter(gen_password=password):
#Пароль прошел проверку, извлекаем данные об устройствах, значение присваиваем переменной device_data
device_data = MikroTik.objects.all()
#Создаём функцию для работы с устройствами Mikrotik Routerboard
def f_add_user(login_device, password_device, ip_device, port, ip_address, address_list_name, mac_address):
from paramiko import SSHClient
from paramiko import AutoAddPolicy
import time
ssh_port = int(port)
ssh = SSHClient()
ssh.set_missing_host_key_policy(AutoAddPolicy())
try:
#Выполняем соединение с устройством Mikrotik Routerboard
ssh.connect(ip_device, port=ssh_port, username=login_device, password=password_device)
except :
#Если подключение не выполнено, возвращаем текст сообщения
return u"Нет связи с сервером"
else:
#Если соединение с устройством Mikrotik Routerboard выполнено, добавляем ip-адрес клиента в адрес лист и статическую запись в настройки DHCP сервера, чтобы закрепить данный ip-адрес за клиентом.
cmd = "/ip fi address-list add address=%s list=%s" % (ip_address, address_list_name)
ssh.exec_command(cmd)
time.sleep(1)
cmd = "/ip dhcp-server lease add address=%s mac-address=%s" % (ip_address, mac_address)
ssh.exec_command(cmd)
ssh.close()
#Возвращаем сообщение «Доступ разрешён».
return u"Доступ разрешён"
#Создаем переменные с данными об устройстве Mikrotik Routerboard.
login_device = device_data[0].login_device
password_device = device_data[0].password_device
ip_device = device_data[0].ip_device
port = device_data[0].port_device
address_list_name = "internet"
#Вызываем функцию добавления данных в Mikrotik Routerboard. Результат выполнения присваиваем переменной message, выводим сообщение в index.html.
message = f_add_user(login_device, password_device, ip_device, port, ip_address, address_list_name, mac_address)
return direct_to_template(request, 'index.html', {'message': message,})
else:
message = "Неверный пароль"
return direct_to_template(request, 'index.html', {'message': message,})
Проверим, как это работает. Для того чтобы выводилось сообщение, добавим в файл index.html следующую запись.
{% if message %}
{{ message }}
{% endif %}
Рис.1. Пароль не введён
Оставим поле пароля пустым.
Рис.2. Вы не ввели пароль
Функция сработала и мы увидели сообщение о том, что пароль не введен.
Рис.3. Неверный пароль
Рис.4. Доступ разрешён
Если пароль введён верно, выводим сообщение «Доступ разрешён» и добавляем данные в устройство Mikrotik Routerboard.
Рис.5. Mikrotik Routerboard
Данные были успешно добавлены в Mikrotik Routerboard.
Евгений Рудченко специально для asp24





