Старый postinstall
This commit is contained in:
commit
4337a3f94e
349 changed files with 21945 additions and 0 deletions
132
deb_dist/postinstall-1.5.0/postinstall/option/add_user.py
Normal file
132
deb_dist/postinstall-1.5.0/postinstall/option/add_user.py
Normal file
|
|
@ -0,0 +1,132 @@
|
|||
import subprocess
|
||||
from dialog import Dialog
|
||||
import pwd
|
||||
from postinstall.logger import logger
|
||||
|
||||
logging = logger
|
||||
|
||||
|
||||
def get_password_with_toggle(d, title):
|
||||
"""Функция для ввода пароля с возможностью показать/скрыть пароль"""
|
||||
password_hidden = True
|
||||
password = ""
|
||||
|
||||
# Фиксированная ширина окна
|
||||
window_width = 60
|
||||
|
||||
while True:
|
||||
if password_hidden:
|
||||
# Используем insecure=True для показа скрытого пароля снежинками
|
||||
code, entered_password = d.passwordbox(
|
||||
title, insecure=True, init=password, width=window_width,
|
||||
extra_button=True, extra_label="Показать пароль"
|
||||
)
|
||||
else:
|
||||
# Используем insecure=False для показа пароля открытым текстом
|
||||
code, entered_password = d.inputbox(
|
||||
title, init=password, width=window_width,
|
||||
extra_button=True, extra_label="Скрыть пароль"
|
||||
)
|
||||
|
||||
if code == d.EXTRA:
|
||||
password_hidden = not password_hidden
|
||||
password = entered_password # Сохраняем введённый пароль
|
||||
continue # Перезапускаем окно с новым состоянием
|
||||
|
||||
if code == d.CANCEL:
|
||||
return None
|
||||
|
||||
# Обновляем сохранённый пароль
|
||||
password = entered_password
|
||||
return password
|
||||
|
||||
|
||||
def add_user():
|
||||
d = Dialog(dialog="dialog")
|
||||
|
||||
fields = [
|
||||
("Имя пользователя", 1, 1, "", 1, 20, 30, 0),
|
||||
("Полное имя", 2, 1, "", 2, 20, 30, 0),
|
||||
("Мобильный телефон", 3, 1, "", 3, 20, 30, 0),
|
||||
("Городской телефон", 4, 1, "", 4, 20, 30, 0),
|
||||
("Кабинет", 5, 1, "", 5, 20, 30, 0),
|
||||
]
|
||||
|
||||
code, values = d.form("Введите данные нового пользователя:", fields)
|
||||
|
||||
if code != d.OK:
|
||||
return # Пользователь отменил операцию, выходим из функции
|
||||
|
||||
username, fullname, mobile, city_phone, cabinet = values
|
||||
|
||||
# Проверка существования пользователя
|
||||
try:
|
||||
pwd.getpwnam(username)
|
||||
d.msgbox(f"Пользователь {username} уже существует.")
|
||||
return
|
||||
except KeyError:
|
||||
pass # Пользователь не существует, продолжаем
|
||||
|
||||
# Запрос пароля с возможностью его показать/скрыть
|
||||
password = get_password_with_toggle(d, "Введите пароль для нового пользователя")
|
||||
if not password:
|
||||
return # Пользователь отменил операцию, выходим из функции
|
||||
|
||||
# Запрос подтверждения пароля с возможностью его показать/скрыть
|
||||
confirm_password = get_password_with_toggle(d, "Подтвердите пароль")
|
||||
if not confirm_password:
|
||||
return # Пользователь отменил операцию, выходим из функции
|
||||
|
||||
if password != confirm_password:
|
||||
d.msgbox("Пароли не совпадают. Попробуйте снова.")
|
||||
return
|
||||
|
||||
# Запрос прав администратора
|
||||
code = d.yesno("Сделать пользователя администратором?")
|
||||
is_admin = code == d.OK
|
||||
|
||||
try:
|
||||
# Создание пользователя
|
||||
subprocess.run(
|
||||
[
|
||||
"sudo",
|
||||
"useradd",
|
||||
"-m",
|
||||
"-c",
|
||||
f"{fullname},{cabinet},{city_phone},{mobile}",
|
||||
"-s",
|
||||
"/bin/bash",
|
||||
username,
|
||||
],
|
||||
check=True,
|
||||
)
|
||||
|
||||
# Установка пароля
|
||||
process = subprocess.Popen(
|
||||
["sudo", "passwd", username],
|
||||
stdin=subprocess.PIPE,
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=subprocess.PIPE,
|
||||
)
|
||||
process.communicate(input=f"{password}\n{password}\n".encode())
|
||||
|
||||
# Добавление в группу sudo, если пользователь - администратор
|
||||
if is_admin:
|
||||
subprocess.run(["sudo", "usermod", "-aG", "sudo", username], check=True)
|
||||
|
||||
logging.info(
|
||||
f"Добавлен пользователь {username}. Данные пользователя: {fullname}, {cabinet}, {city_phone}, {mobile}"
|
||||
)
|
||||
|
||||
d.msgbox(f"Пользователь {username} успешно добавлен.")
|
||||
except subprocess.CalledProcessError as e:
|
||||
logging.error(f"Ошибка при добавлении пользователя: {e}")
|
||||
d.msgbox(f"Ошибка при добавлении пользователя: {e}")
|
||||
|
||||
|
||||
def run_add_user():
|
||||
add_user()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
run_add_user()
|
||||
Loading…
Add table
Add a link
Reference in a new issue