Меню
Контакты
107023, Москва, пл. Журавлёва, 10с3, подъезд 31, офис 309
Пн-Пт: с 9-00 до 17-00   Сб-вс: выходной
Интернет-магазин
сетевого оборудования
Москва +7 (495) 103-41-03 +7 (915) 420-28-94
107023, Москва, пл. Журавлёва, 10с3, подъезд 31, офис 309
Пн-Пт: с 9-00 до 17-00   Сб-вс: выходной
Заказать звонок

MikroTik + DJANGO. Часть 5. Авторизация клиентов. Продолжение

 22 Авг 2012    MikroTik, Практика и программирование MikroTik

Рассмотрим функцию, отвечающую за авторизацию клиентов и предоставления доступа в 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. Пароль не введён

Рис.1. Пароль не введён

 

Оставим поле пароля пустым.

 

Авторизация клиентов. Продолжение. Рис.2. Вы не ввели пароль

Рис.2. Вы не ввели пароль

 

Функция сработала и мы увидели сообщение о том, что пароль не введен.

 

 Авторизация клиентов. Продолжение. Рис.3. Неверный пароль

Рис.3. Неверный пароль

 

Авторизация клиентов. Продолжение. Рис.4. Доступ разрешён

Рис.4. Доступ разрешён

 

Если пароль введён верно, выводим сообщение «Доступ разрешён» и добавляем данные в устройство Mikrotik Routerboard.

 

Авторизация клиентов. Продолжение. Рис.5. Mikrotik Routerboard

Рис.5. Mikrotik Routerboard

 

Данные были успешно добавлены в Mikrotik Routerboard.

Евгений Рудченко специально для asp24