Django
- Add function for send mail when user create an account
This commit is contained in:
@ -37,6 +37,8 @@ services:
|
|||||||
DB_HOST: ${DB_HOST}
|
DB_HOST: ${DB_HOST}
|
||||||
UID_42: ${UID_42}
|
UID_42: ${UID_42}
|
||||||
SECRET_42: ${SECRET_42}
|
SECRET_42: ${SECRET_42}
|
||||||
|
ICLOUD_USER: ${ICLOUD_USER}
|
||||||
|
ICLOUD_PASS: ${ICLOUD_PASS}
|
||||||
depends_on:
|
depends_on:
|
||||||
- postgresql
|
- postgresql
|
||||||
restart: always
|
restart: always
|
||||||
|
@ -20,12 +20,15 @@ ARG DB_USERNAME
|
|||||||
ARG DB_PASSWORD
|
ARG DB_PASSWORD
|
||||||
ARG UID_42
|
ARG UID_42
|
||||||
ARG SECRET_42
|
ARG SECRET_42
|
||||||
|
ARG ICLOUD_USER
|
||||||
|
ARG ICLOUD_PASS
|
||||||
|
|
||||||
ENV DB_HOST=${DB_HOST}
|
ENV DB_HOST=${DB_HOST}
|
||||||
ENV PYTHONUNBUFFERED=1
|
ENV PYTHONUNBUFFERED=1
|
||||||
ENV UID_42=${UID_42}
|
ENV UID_42=${UID_42}
|
||||||
ENV SECRET_42=${SECRET_42}
|
ENV SECRET_42=${SECRET_42}
|
||||||
|
|
||||||
|
|
||||||
COPY start.sh /root/start.sh
|
COPY start.sh /root/start.sh
|
||||||
|
|
||||||
RUN mkdir -p /var/www/djangoserver/
|
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
|
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 $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"]
|
ENTRYPOINT ["sh", "/root/start.sh"]
|
||||||
|
@ -6,11 +6,14 @@
|
|||||||
# By: edbernar <edbernar@student.42angouleme. +#+ +:+ +#+ #
|
# By: edbernar <edbernar@student.42angouleme. +#+ +:+ +#+ #
|
||||||
# +#+#+#+#+#+ +#+ #
|
# +#+#+#+#+#+ +#+ #
|
||||||
# Created: 2024/08/09 08:08:00 by edbernar #+# #+# #
|
# 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 ..models import User, MailVerify
|
||||||
|
from email.mime.text import MIMEText
|
||||||
|
import smtplib
|
||||||
import random
|
import random
|
||||||
import re
|
import re
|
||||||
import json
|
import json
|
||||||
@ -18,6 +21,16 @@ import hashlib
|
|||||||
|
|
||||||
mail_pattern = "^((?!\.)[\w\-_.]*[^.])(@\w+)(\.\w+(\.\w+)?[^.\W])$"
|
mail_pattern = "^((?!\.)[\w\-_.]*[^.])(@\w+)(\.\w+(\.\w+)?[^.\W])$"
|
||||||
password_pattern = "^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$"
|
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):
|
def createAccount(socket, content):
|
||||||
if (socket.logged_in):
|
if (socket.logged_in):
|
||||||
@ -58,13 +71,106 @@ def createAccount(socket, content):
|
|||||||
new_user.save()
|
new_user.save()
|
||||||
verif_str = gen_string(200)
|
verif_str = gen_string(200)
|
||||||
MailVerify.objects.create(uid=new_user, token=verif_str).save()
|
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"}))
|
socket.send(text_data=json.dumps({"type": "create_account", "content": "Account created"}))
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
socket.sendError("An error occured while creating the account", 9024, e)
|
socket.sendError("An error occured while creating the account", 9024, e)
|
||||||
|
|
||||||
def sendVerifMail(verif_str):
|
def sendVerifMail(verif_str, mail, username):
|
||||||
print("nope")
|
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):
|
def gen_string(length):
|
||||||
letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
|
letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
# By: edbernar <edbernar@student.42angouleme. +#+ +:+ +#+ #
|
# By: edbernar <edbernar@student.42angouleme. +#+ +:+ +#+ #
|
||||||
# +#+#+#+#+#+ +#+ #
|
# +#+#+#+#+#+ +#+ #
|
||||||
# Created: 2024/08/03 08:10:38 by edbernar #+# #+# #
|
# 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.exists()):
|
||||||
if(user[0].mail != None and not user[0].mail_verified):
|
if(user[0].mail != None and not user[0].mail_verified):
|
||||||
socket.sendError("Account not verified, please verify your account before logging in",9025)
|
socket.sendError("Account not verified, please verify your account before logging in",9025)
|
||||||
return ;
|
return
|
||||||
if(socket.login(user[0].id, user[0].username)):
|
if(socket.login(user[0].id, user[0].username)):
|
||||||
socket.send(text_data=json.dumps({"type":"logged_in", "content":{
|
socket.send(text_data=json.dumps({"type":"logged_in", "content":{
|
||||||
"status":True,
|
"status":True,
|
||||||
|
Reference in New Issue
Block a user