Пишем скрипт 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.
