Меню
Контакты
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 Routerboard

 30 Сен 2011    MikroTik, Scripts

 

Пишем скрипт new_user.py, который будет принимать данные, введенные администратором, и передавать их на выполнение скрипту add_user_mikrotik.py.

 

Скрипт:

#!/usr/bin/env python

# -*- coding: utf_8 -*-

import MySQLdb

import mysql_db, os, sys, time, tarif_list, device_list, add_user_mikrotik

def f_new_user():

print "\033[33m ------------------------------\033[0m"

print "\033[33m| Добавить нового пользователя |\033[0m"

print "\033[33m ------------------------------\033[0m"

time.sleep(1)

os.system('clear')

while True:

login = raw_input("Введите имя пользователя: ")

if not login:

print "\033[31m| Вы не ввели имя пользователя |\033[0m"

time.sleep(1)

else:

break

while True:

password = raw_input("Введите пароль пользователя: ")

if not password:

print "\033[31m| Вы не ввели пароль пользователя |\033[0m"

time.sleep(1)

else:

break

while True:

ip_user = raw_input("Введите ip адрес пользователя: ")

if not ip_user:

print "\033[31m| Вы не ввели ip адрес пользователя |\033[0m"

time.sleep(1)

else:

break

while True:

mac_user = raw_input("Введите mac адрес пользователя: ")

if not mac_user:

print "\033[31m| Вы не ввели mac адрес пользователя |\033[0m"

time.sleep(1)

else:

break

while True:

balance = raw_input("Внести средства пользователю: ")

if not balance:

print "\033[31m| Вы не внесли средства пользователю |\033[0m"

time.sleep(1)

else:

break

device_list.f_device_list()

while True:

device = raw_input("Введите ID устройства для пользователя: ")

if not device:

print "\033[31m| Вы не ввели ID устройства для пользователя |\033[0m"

time.sleep(1)

else:

break

tarif_list.f_tarif_list()

while True:

tarif_user = raw_input("Введите ID тарифа для пользователя: ")

if not tarif_user:

print "\033[31m| Вы не ввели ID тарифа для пользователя |\033[0m"

time.sleep(1)

else:

break

cur = mysql_db.db.cursor()

sql = "SELECT id FROM users WHERE login = '%s' OR ip_user = '%s' OR mac_user = '%s'" % (login, ip_user, mac_user)

res = cur.execute(sql)

cur.close()

r = int(res)

if r > 0:

print "Похожая запись существует"

else:

cur = mysql_db.db.cursor()

sql = "SELECT login_device, password_device, ip_device FROM devices WHERE id = '%s'" % (device)

cur.execute(sql)

dev_info = cur.fetchone()

cur.close()

login_device = dev_info[0]

password_device = dev_info[1]

ip_device = dev_info[2]

add_user_mikrotik.f_add_user_mikrotik(login, ip_user, ip_device, login_device, password_device)

print "Пользователь добавлен"

cur = mysql_db.db.cursor()

sql = ("INSERT INTO users (login, password, ip_user, mac_user, balance, access, device, tarif_user) VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')" % (login, password, ip_user, mac_user, balance, 'yes', device, tarif_user))

cur.execute(sql)

cur.close()

if raw_input("Добавить нового пользователя? y/n: ")!="y":

return()

else:

f_new_user()

 

Разберем скрипт:

Подключаем модули:

#!/usr/bin/env python

# -*- coding: utf_8 -*-

import MySQLdb

import mysql_db, os, sys, time, tarif_list, device_list, add_user_mikrotik

Создаем функцию f_new_user:

def f_new_user():

Выводим сообщение на экран:

print "\033[33m ------------------------------\033[0m"

print "\033[33m| Добавить нового пользователя |\033[0m"

print "\033[33m ------------------------------\033[0m"

time.sleep(1) — приостанавливаем скрипт на одну секунду.

os.system('clear') — очищаем экран.

Запускаем бесконечный цикл while. В нем администратору будет предложено ввести логин для пользователя. Если администратор не ввел логин, то будет выполнена проверка if not login и выведется такое сообщение: "Вы не ввели имя пользователя". После этого оператор while повторится снова. Если же администратор ввел данные, то они будут занесены в переменную login и выполнится действие break, которое прервет работу цикла. Точно такие же действия будут выполнены для остальных данных.

while True:

login = raw_input("Введите имя пользователя: ")

if not login:

print "\033[31m| Вы не ввели имя пользователя |\033[0m"

time.sleep(1)

else:

break

while True:

password = raw_input("Введите пароль пользователя: ")

if not password:

print "\033[31m| Вы не ввели пароль пользователя |\033[0m"

time.sleep(1)

else:

break

while True:

ip_user = raw_input("Введите ip адрес пользователя: ")

if not ip_user:

print "\033[31m| Вы не ввели ip адрес пользователя |\033[0m"

time.sleep(1)

else:

break

while True:

mac_user = raw_input("Введите mac адрес пользователя: ")

if not mac_user:

print "\033[31m| Вы не ввели mac адрес пользователя |\033[0m"

time.sleep(1)

else:

break

while True:

balance = raw_input("Внести средства пользователю: ")

if not balance:

print "\033[31m| Вы не внесли средства пользователю |\033[0m"

time.sleep(1)

else:

break

device_list.f_device_list() - вызываем функцию f_device_list() из модуля device_list. Она выведет на экран данные о доступных устройствах Mikrotik Routerboard.

while True:

device = raw_input("Введите ID устройства для пользователя: ")

if not device:

print "\033[31m| Вы не ввели ID устройства для пользователя |\033[0m"

time.sleep(1)

else:

break

tarif_list.f_tarif_list() - вызываем функцию f_tarif_list() из модуля tarif_list. Она выведет информацию о доступных тарифах.

while True:

tarif_user = raw_input("Введите ID тарифа для пользователя: ")

if not tarif_user:

print "\033[31m| Вы не ввели ID тарифа для пользователя |\033[0m"

time.sleep(1)

else:

break

Выполняем проверку: извлекаем из таблицы пользователей того пользователя, у которого совпадает хотя бы один параметр (login = '%s' OR ip_user = '%s' OR mac_user):

cur = mysql_db.db.cursor()

sql = "SELECT id FROM users WHERE login = '%s' OR ip_user = '%s' OR mac_user = '%s'" % (login, ip_user, mac_user)

res = cur.execute(sql)

cur.close()

r = int(res) — данные, извлеченные из базы заносим в переменную r.

if r > 0: - выполняем проверку: если r больше нуля, то это значит, что такая запись уже существует.

print "Похожая запись существует"

else:

Если дублирование данных не произошло, то извлекаем данные об устройстве Mikrotik Routerboard, id которого ввел администратор:

cur = mysql_db.db.cursor()

sql = "SELECT login_device, password_device, ip_device FROM devices WHERE id = '%s'" % (device)

cur.execute(sql)

dev_info = cur.fetchone()

cur.close()

Создаем переменные login_device, password_device, ip_device - они понадобяться для работы с  Mikrotik Routerboard:

login_device = dev_info[0]

password_device = dev_info[1]

ip_device = dev_info[2]

Вызываем функцию добавления данных в Mikrotik Routerboard:

add_user_mikrotik.f_add_user_mikrotik(login, ip_user, ip_device, login_device, password_device)

print "Пользователь добавлен"

Заносим данные, введенные администратором, в базу данных:

cur = mysql_db.db.cursor()

sql = ("INSERT INTO users (login, password, ip_user, mac_user, balance, access, device, tarif_user) VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')" % (login, password, ip_user, mac_user, balance, 'yes', device, tarif_user))

cur.execute(sql)

cur.close()

Задаем администратору вопрос "Добавить нового пользователя? y/n". Если он не ввел y, то завершаем работу функции. А если ввёл, то вызываем функцию еще раз.

if raw_input("Добавить нового пользователя? y/n: ")!="y":

return()

else:

f_new_user()

 

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