- Add function for send mail when user create an account
This commit is contained in:
Kum1ta
2024-09-10 14:17:20 +02:00
parent eaf71af8d1
commit f5857ce771
5 changed files with 118 additions and 6 deletions

View File

@ -37,6 +37,8 @@ services:
DB_HOST: ${DB_HOST}
UID_42: ${UID_42}
SECRET_42: ${SECRET_42}
ICLOUD_USER: ${ICLOUD_USER}
ICLOUD_PASS: ${ICLOUD_PASS}
depends_on:
- postgresql
restart: always

View File

@ -20,12 +20,15 @@ ARG DB_USERNAME
ARG DB_PASSWORD
ARG UID_42
ARG SECRET_42
ARG ICLOUD_USER
ARG ICLOUD_PASS
ENV DB_HOST=${DB_HOST}
ENV PYTHONUNBUFFERED=1
ENV UID_42=${UID_42}
ENV SECRET_42=${SECRET_42}
COPY start.sh /root/start.sh
RUN mkdir -p /var/www/djangoserver/
@ -42,5 +45,6 @@ sed -i "s/VAR_DB_USERNAME/$DB_USERNAME/" /var/www/djangoserver/server/server/set
sed -i "s/VAR_DB_PASSWORD/$DB_PASSWORD/" /var/www/djangoserver/server/server/settings.py
RUN echo -n $UID_42:$SECRET_42 > /var/www/djangoserver/42_credentials
RUN echo -n $ICLOUD_USER:$ICLOUD_PASS > /var/www/djangoserver/icloud_credentials
ENTRYPOINT ["sh", "/root/start.sh"]

View File

@ -6,11 +6,14 @@
# By: edbernar <edbernar@student.42angouleme. +#+ +:+ +#+ #
# +#+#+#+#+#+ +#+ #
# Created: 2024/08/09 08:08:00 by edbernar #+# #+# #
# Updated: 2024/09/09 21:10:56 by tomoron ### ########.fr #
# Updated: 2024/09/10 14:02:32 by edbernar ### ########.fr #
# #
# **************************************************************************** #
from email.mime.multipart import MIMEMultipart
from ..models import User, MailVerify
from email.mime.text import MIMEText
import smtplib
import random
import re
import json
@ -18,6 +21,16 @@ import hashlib
mail_pattern = "^((?!\.)[\w\-_.]*[^.])(@\w+)(\.\w+(\.\w+)?[^.\W])$"
password_pattern = "^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$"
URLMAIL = "https://localhost:8000/verify?token="
ICLOUD_MAIL = None
ICLOUD_PASS = None
with open("/var/www/djangoserver/icloud_credentials", 'r') as f:
creds = f.read().split(':')
ICLOUD_MAIL = creds[0]
ICLOUD_PASS = creds[1]
print(ICLOUD_MAIL)
print(ICLOUD_PASS)
def createAccount(socket, content):
if (socket.logged_in):
@ -58,13 +71,106 @@ def createAccount(socket, content):
new_user.save()
verif_str = gen_string(200)
MailVerify.objects.create(uid=new_user, token=verif_str).save()
sendVerifMail(verif_str)
sendVerifMail(verif_str, content["mail"], content["username"])
socket.send(text_data=json.dumps({"type": "create_account", "content": "Account created"}))
except Exception as e:
socket.sendError("An error occured while creating the account", 9024, e)
def sendVerifMail(verif_str):
print("nope")
def sendVerifMail(verif_str, mail, username):
msg = MIMEMultipart()
msg['From'] = 'PTME <ptme@tmoron.fr>'
msg['To'] = mail
msg['Subject'] = 'Account verification'
msg.attach(MIMEText('''
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
body {
margin: 0;
padding: 0;
font-family: Arial, sans-serif;
background-color: #1e1e1e;
color: #ffffff;
}
.container {
max-width: 600px;
margin: 0 auto;
padding: 20px;
background-color: #2c2c2c;
border-radius: 8px;
}
h1 {
text-align: center;
font-size: 24px;
margin-bottom: 50px;
background-color: #1e1e1e;
padding: 20px;
border-radius: 8px;
color: #ffffff;
}
p {
color: #cccccc;
font-size: 16px;
}
.button {
display: inline-block;
padding: 10px 20px;
font-size: 16px;
color: #ffffff;
background-color: #0f0f0f;
border-radius: 5px;
text-decoration: none;
margin: 20px;
margin-left: 25%;
margin-right: 25%;
width: 50%;
text-align: center;
}
.footer {
font-size: 12px;
background-color: #1e1e1e;
padding: 10px;
text-align: center;
border-radius: 8px;
margin-top: 20px;
}
</style>
</head>
<body>
<table class="container" role="presentation">
<tr>
<td>
<h1>Bienvenue chez PTME !</h1>
<p>Bonjour ''' + username + ''',</p>
<p>Merci d'avoir créé un compte avec PTME ! Nous sommes ravis de vous accueillir parmi nous.</p>
<p>Pour compléter votre inscription, veuillez vérifier votre adresse e-mail en cliquant sur le bouton ci-dessous :</p>
<p><a href="''' + URLMAIL + verif_str +'''" class="button">Confirmer mon adresse e-mail</a></p>
<p>Si vous n'avez pas demandé cette inscription, vous pouvez ignorer cet e-mail.</p>
<p>Merci,</p>
<p>L'équipe PTME</p>
<div class="footer">
<p>42, 49 Bd Besson Bey, 16000 Angoulême, France</p>
</div>
</td>
</tr>
</table>
</body>
</html>
''', 'html'))
try:
serveur = smtplib.SMTP('smtp.mail.me.com', 587)
serveur.ehlo()
serveur.starttls()
serveur.ehlo()
serveur.login(ICLOUD_MAIL, ICLOUD_PASS)
serveur.sendmail(ICLOUD_MAIL, mail, msg.as_string())
serveur.quit()
print("E-mail envoyé avec succès !")
except Exception as e:
print(f"Erreur lors de l'envoi de l'e-mail : {e}")
def gen_string(length):
letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"

View File

@ -6,7 +6,7 @@
# By: edbernar <edbernar@student.42angouleme. +#+ +:+ +#+ #
# +#+#+#+#+#+ +#+ #
# Created: 2024/08/03 08:10:38 by edbernar #+# #+# #
# Updated: 2024/09/09 21:19:50 by tomoron ### ########.fr #
# Updated: 2024/09/10 13:28:38 by edbernar ### ########.fr #
# #
# **************************************************************************** #
@ -22,7 +22,7 @@ def loginByPass(socket, content):
if(user.exists()):
if(user[0].mail != None and not user[0].mail_verified):
socket.sendError("Account not verified, please verify your account before logging in",9025)
return ;
return
if(socket.login(user[0].id, user[0].username)):
socket.send(text_data=json.dumps({"type":"logged_in", "content":{
"status":True,

View File