Mattermost. Добавление пользователей

СВК
Published

Для полноценного запуска Mattermost в работу, туда требуется добавить определённое количество пользователей, конечно логичным было-бы подключиться к нашему AD, но модуль интеграции с LDAP продаётся за деньги, а руками вколачивать несколько десятков юзеров утомительно да и не правильно. Потому будем городить костыли.

Первое, что нам потребуется - это определиться с функциями скрипта:

  1. Прочитать и распарсить список
  2. Сгенерить пароль
  3. Добавить пользователя в mattermost
  4. Отправить данные (приглашение, логин, пароль, ...) пользователю (не будем-же мы руками это все писать)
  5. На выходе должен быть файл со списком юзеров, логинов и паролей, на случай "Ой а я тут нажала какую-то кнопочку и теперь какой-то пароль спрашивает"

Список пользователей

Набивать список руками не совсем продуктивно (да и что греха таить - лениво) потому самым логичным решением стало выгрузить список пользователей из домена 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")

Вот и весь скрипт. Из коментариев понятно что к чему. Код проверен - работает.