Add initial script and email template
This commit is contained in:
137
main.py
Normal file
137
main.py
Normal file
@@ -0,0 +1,137 @@
|
||||
import argparse
|
||||
import secrets
|
||||
import smtplib
|
||||
import string
|
||||
import subprocess
|
||||
from email.mime.multipart import MIMEMultipart
|
||||
from email.mime.text import MIMEText
|
||||
|
||||
|
||||
def generate_password(length: int) -> str:
|
||||
alphabet = string.ascii_letters + string.digits
|
||||
password = "".join(secrets.choice(alphabet) for i in range(length))
|
||||
return password
|
||||
|
||||
|
||||
def send_email(
|
||||
sender_email,
|
||||
receiver_email,
|
||||
subject,
|
||||
message,
|
||||
smtp_username,
|
||||
smtp_password,
|
||||
):
|
||||
# Create a multipart message
|
||||
msg = MIMEMultipart()
|
||||
msg["From"] = sender_email
|
||||
msg["To"] = receiver_email
|
||||
msg["Subject"] = subject
|
||||
|
||||
# Add body to the email
|
||||
msg.attach(MIMEText(message, "plain"))
|
||||
|
||||
try:
|
||||
# Create a secure SSL/TLS connection to the SMTP server
|
||||
server = smtplib.SMTP("localhost", 25)
|
||||
server.ehlo()
|
||||
server.starttls()
|
||||
server.ehlo()
|
||||
|
||||
# Login to the SMTP server
|
||||
server.login(smtp_username, smtp_password)
|
||||
|
||||
# Send the email
|
||||
server.sendmail(sender_email, receiver_email, msg.as_string())
|
||||
|
||||
# Close the SMTP connection
|
||||
server.quit()
|
||||
|
||||
print("Email sent successfully!")
|
||||
except Exception as e:
|
||||
print("Failed to send email. Error:", str(e))
|
||||
|
||||
|
||||
def create_user(
|
||||
name: str,
|
||||
email: str,
|
||||
mail_text: str,
|
||||
mail_user: str,
|
||||
mail_password: str,
|
||||
dry_run: bool = False,
|
||||
):
|
||||
username = name.split()[0].lower() + "." + name.split()[1].lower()[0]
|
||||
password = generate_password(20)
|
||||
|
||||
cmd = [
|
||||
"yunohost",
|
||||
"user",
|
||||
"create",
|
||||
username,
|
||||
"--password",
|
||||
password,
|
||||
]
|
||||
if dry_run:
|
||||
print(" ".join(cmd))
|
||||
else:
|
||||
result = subprocess.run(cmd)
|
||||
result.check_returncode()
|
||||
|
||||
cmd = [
|
||||
"yunohost",
|
||||
"user",
|
||||
"update",
|
||||
username,
|
||||
"--add-mailforward",
|
||||
email,
|
||||
]
|
||||
if dry_run:
|
||||
print(" ".join(cmd))
|
||||
else:
|
||||
result = subprocess.run(cmd)
|
||||
result.check_returncode()
|
||||
|
||||
mail_text = mail_text.replace("{name}", name)
|
||||
mail_text = mail_text.replace("{username}", username)
|
||||
mail_text = mail_text.replace("{password}", password)
|
||||
|
||||
if dry_run:
|
||||
print(mail_text)
|
||||
else:
|
||||
send_email(
|
||||
f"{mail_user}@cloud.allmende-gufi.de",
|
||||
email,
|
||||
"Dein Zugang zur neuen Allmende Cloud",
|
||||
mail_text,
|
||||
mail_user,
|
||||
mail_password,
|
||||
)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser(
|
||||
description="Creates Yunohost user from a csv file and sends them an email with the password",
|
||||
)
|
||||
parser.add_argument("filename", help="Input file name")
|
||||
parser.add_argument(
|
||||
"mail_user", help="This user will be used to send the confirmation mail"
|
||||
)
|
||||
parser.add_argument(
|
||||
"mail_password", help="This password will be used to send the confirmation mail"
|
||||
)
|
||||
parser.add_argument("--dry-run", action="store_true")
|
||||
args = parser.parse_args()
|
||||
|
||||
with open(args.filename, "r") as f:
|
||||
data = f.readlines()
|
||||
|
||||
with open("./email.txt", "r") as f:
|
||||
email_text = f.read()
|
||||
|
||||
for line in data:
|
||||
create_user(
|
||||
*line.strip().split(","),
|
||||
mail_text=email_text,
|
||||
mail_user=args.mail_user,
|
||||
mail_password=args.mail_password,
|
||||
dry_run=args.dry_run,
|
||||
)
|
||||
Reference in New Issue
Block a user