Mattermost. Добавление пользователей
Для полноценного запуска Mattermost в работу, туда требуется добавить определённое количество пользователей, конечно логичным было-бы подключиться к нашему AD, но модуль интеграции с LDAP продаётся за деньги, а руками вколачивать несколько десятков юзеров утомительно да и не правильно. Потому будем городить костыли.
Первое, что нам потребуется - это определиться с функциями скрипта:
- Прочитать и распарсить список
- Сгенерить пароль
- Добавить пользователя в mattermost
- Отправить данные (приглашение, логин, пароль, ...) пользователю (не будем-же мы руками это все писать)
- На выходе должен быть файл со списком юзеров, логинов и паролей, на случай "Ой а я тут нажала какую-то кнопочку и теперь какой-то пароль спрашивает"
Список пользователей
Набивать список руками не совсем продуктивно (да и что греха таить - лениво) потому самым логичным решением стало выгрузить список пользователей из домена AD. Данных нам потребуется немного - это ФИО, почта и должность (без нее можно обойтись так как в дальнейшем нигде не фигурирует но в будущем может где и пригодиться). В качестве имени пользователя возьмём кусок почтового адреса (без домена). Пароль будет сгенерирован автоматически.
Для выгрузки данных из AD был использован скрипт на PowerShell, который выдернул нам требуемое и сохранил в csv-файле. Формат его совсем простой:
Имя,Mail,Должность
Иванов Иван Иванович,i.i.ivanov@domain.local,Главный начальник
Первая строка (заголовок) обязательна, так как на его основе будем выдёргивать нужные поля.
Теперь код
Реализовать данный скрипт я решил на питоне, дабы потомкам не пришлось напрягаться и пугаться при виде перла или тикля =) да и он уже был на хосте в отличие от остальных. Методом RnD (Research and Develop) т.е. обычной копипасты было набыдлокожено следующее:
#!/usr/bin/python3
import csv
import random
import string
import os
import sys
from email.mime.text import MIMEText
from email.header import Header
import smtplib
# генератор паролей взято тут:
# http://программисту.рф/python/generator-parolej-na-python/
def gen(length=8, method=["lowercase", "uppercase", "digits", "punctuation"]):
"""String.lowercase, uppercase, digits, punctuation."""
pwd = []
for i in range(length):
choice = random.choice(method)
if choice == "lowercase":
pwd.append(random.choice(string.ascii_lowercase))
if choice == "uppercase":
pwd.append(random.choice(string.ascii_uppercase))
if choice == "digits":
pwd.append(random.choice(string.digits))
if choice == "punctuation":
pwd.append(random.choice(string.punctuation))
if choice == "string":
pwd.append(random.choice(string.punctuation))
random.shuffle(pwd)
return ''.join(pwd)
# отправка почты
# https://python-scripts.com/send-email-smtp-python
def send_email(subject, to_addr, body_text):
"""
Send an email
"""
# это логичнее вынести в конфиг либо в начало скрипта
# параметры для отправки почты
host = 'mail.domain.local'
from_addr = 'noreply@domain.local'
username = 'noreply@domain.local'
password = 'PaSsWoRd'
message = MIMEText(body_text, 'plain', 'utf-8')
message['From'] = Header(from_addr, 'utf-8')
message['To'] = Header(to_addr, 'utf-8')
message['Subject'] = Header(subject, 'utf-8')
server = smtplib.SMTP(host)
server.starttls()
server.login(username, password)
server.sendmail(from_addr, [to_addr], message.as_string())
server.quit()
# читаем список пользователей, генерим команды для добавления юзера в mattermost
# и создаём список пользователей с паролями
def csv_dict_reader(file_obj):
"""
Read a CSV file using csv.DictReader
"""
reader = csv.DictReader(file_obj, delimiter=',')
out_file = open("mattermost_users.csv", "w")
for line in reader:
[login, domain] = line["Mail"].split('@')
# сгенерим пароль
password = gen(length=15, method=["uppercase", "lowercase", "digits"])
# соберём и выполним команду для добавления юзера
cmd = '/opt/bin/mattermost user create --email ' + line["Mail"] + ' --username ' + login + ' --password ' + password + ' --nickname "' + line["Имя"] + '"'
# создадим файлик с паролями
out_file.write(login + ',' + password + ',' + line["Имя"] + ',' + line["Mail"] + '\n')
print(cmd)
# собсвенно, выполняем команду
os.system(cmd)
# подготовим Текст сообщения и отправим его почтой
subject = "Вы подключены к системе Mattermost"
body_text = "\r\n".join((
"Здравствуйте, %s!\r\n" % line["Имя"],
"Вы подключены к новой системе обмена сообщениями\r\n",
"Данные для подключения:",
"Сервер: http://mattermost:8065",
"Пользователь: %s" % login,
"Пароль: %s" % password,
"\r\n\r\n--",
"Служба технической поддержки"
))
# Отправляем мыло
send_email(subject, line["Mail"], body_text)
out_file.close()
if __name__ == "__main__":
if len (sys.argv) > 1:
with open(sys.argv[1]) as f_obj:
csv_dict_reader(f_obj)
else:
print ("Usage: mm_adduser.py users_list.csv")
Вот и весь скрипт. Из коментариев понятно что к чему. Код проверен - работает.