From e3908ab3f0fae4d2185dc02a2bcadee1754499cb Mon Sep 17 00:00:00 2001
From: ComeF2 <123363885+ComeF2@users.noreply.github.com>
Date: Mon, 6 Feb 2023 18:54:31 +0100
Subject: [PATCH] =?UTF-8?q?Impl=C3=A9mentation=20post=5Fmessage?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../database_helper.cpython-311.pyc           | Bin 2740 -> 6037 bytes
 Lab2/database.db                              | Bin 20480 -> 28672 bytes
 Lab2/database_helper.py                       |  25 +++++++++++-------
 Lab2/schema.sql                               |  10 ++++++-
 Lab2/server.py                                |  23 +++++++++++++++-
 5 files changed, 46 insertions(+), 12 deletions(-)

diff --git a/Lab2/__pycache__/database_helper.cpython-311.pyc b/Lab2/__pycache__/database_helper.cpython-311.pyc
index 100e86dddec4b61d24a4b59b06594d316c8cdfae..9983477b93d10c0b2dd52a7824e60133085b0d1b 100644
GIT binary patch
literal 6037
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
V#KNcwaut-|LA40%77zi>L;$nft|b5f

delta 1105
zcmbQLzeSX9IWI340|NuYwwQa#yICgkNif<>RJRdi3}(>ed<l~9(`3BGnEq?xyn7sM
z3=9mKj74mdTNo!W@=O+G3b6nQF*7hQeD+{uV3^KO!U)m=!C7#23ga?H28Pveel0`I
z<U|%#wOYm!c8FRKnZlI9yo`x~VKozo2g0TdwM;cklMT33*lL+;7#FZk{>UxjQp1dD
z8Y4pr7^3QBWXR)IW-w$ZW+`W?V2)%cXJllEWME`qWT;_Sz&80Kw-Ote$qr)HgUkqK
z&}8u|VqsulsNyP4&PdHo)GIE`xy4wd$x+0?z`#(%$-uyHi!Hgds5rmq7E69XYThlD
zqSVBcTfC_ismY}!sl~}fnFS@c*pl;eb2CeBu_ou_7pH2n++s=2&&w+k0BL7Q%gjl=
z#avvNQw*|6K|w*Gh?}9Ff#DW^a#3nxNossbVo73BVsUDbBm)Bj4+8^3@j(U#h6aYa
z+(JF}Gi)z%YhK~jY;d{3E7%|172O%z6Wic+my@?6XNL1dPK7I+3LhAlSd|vI+~5=H
z&+N+V%<jqVV7|e@cb!A#5{Jx;;ENoJS2z?ea43FYWnxtVEB;Uq(((~Rd;t*<L0qgK
zKYn0Uz{bGJ+3wxs-RRrm+u(bHg`?f8$*a+)#is!biv<}N7<Oto>N6kIXK^%UKWN72
zXw04rP5_hdF@F}-WG(`E_ZB-eG>b$S7#Jo$W$_c|28A3qG<-^nQ;Uj}85kHuCwsAW
zi-FP!41+=xoEW1fzh}0byoO0&aukPzr=Uxae}F<sVp2}3LTIpSP_T7~n<f+3vLa~)
z28NXkMZBQ+1zW?BoRgZE7oU<;q{hI&APWkAQ*iiyU}BkE$1FX09jh2OC^<AKsxmBP
z(%O8Pm76hAlLcZND2~Bq-r`70ElJME&r8*0DUt!14l)Xw20&gwj(!G)TRe%SB^jxC
zC7H>IC8<SP3=9k^Agj|RSM#Y&PGAoS)#L;x!dt9qIf=#DMIdh$fif<{UQk*A2MXBL
zVEsj^AY0)c`^90Co1apelWJF_!@$4*%8SKSlUIpZc=50^3VvXK6GCi^q8}LGga9ju
O3n%zEL0n7%9D)D@o&#n8

diff --git a/Lab2/database.db b/Lab2/database.db
index 200ab061884f9664250abd85b76ba217a03f11f5..879c356c93d13a5af64b630499fc883bd6de459a 100644
GIT binary patch
delta 1120
zcmZozz}WDBae}m<IRgU&I|BmnPSi1$G-uF@HsR%e!@$N9#lRQNe~`DDPljg=Pt?Z7
zN8I%RY;5A%+KiDUiAg!B#f3SUC8_bnsfDGfdCBNpcIO~h#}HSA5Jx8;R|Pb+8hMGi
zsXE1}g_?~%tnA{lvW!jHU^9JPgM%I2U4vmX8;U9QFkuZY1%=EM1y8>aS9jMS9WDh0
zS6@d@pZFkGXU_mnSHBR2FvlQg562)4V*^bE1wa1~1;0=qAB4hSS3eimAl#~;7Ab_d
zMuZ^rD}xLO2=erG42o3nc8%1?Oi^$Q4e|H%a}IL#b@dC;<kH++&D+Vu!@_rincthg
zonM6S#%4i*6MXenEF9vZlJer(l3t}bnW^si8F^``xrsTcKACyh`30GI>A|I`DXCc?
zNr&{@#LOJM<ow*ks??&AN>gSIaY<28Nli)T!&`Dw-SUe{GV{QCEA#W*iW2jZQ<L*^
zQ_;0qF>*-qi%JR`s+Ocq4wqlc#mv8*f&U)=Y5wh-1r=8Es|z!0Goo3@EX1tIh-w(q
z<a_#RJS_b48TgO!-{arRKYz2JLO)jBESS2PCm*x7<6`FbV&LD&-^A~=Sx~`-zut_Q
zIaJ%TARyB#EvF(Sq|(DXFgel9C%D4g!!0B!)7LYkBGcP4w>$*Rd8SOvp_;jt*#+*-
zDV5=+&H)u+DTNlM+2O?&CFZ`R#wBH85mnw*A^E6Yuw-NoHFQcY4yh^$&oOt*oP5&X
ze3AnT4-4O02LA2*#r!6GZ#N4H+~uoxWnpE|)(l3o7S%Lo_0-}Lh0;6)!_*>$5)eBz
zuPndv@JfZl3lzYyt7ps1%Al#~imDHl=bWmLn_66)n4YQtG9o8c!T9is`rK5oiB3!)
z{r;#rP<dVul^}Pdq?T4>9$t})FcIV`YetY6j;Oj&dCsZHnPA&X^B|6qPluYSh$t5r
l7<d^N7#R7VG4MazEU0jne_{Z?6b~b_EF(0R1hXJ31^{{LQ>Xv{

delta 136
zcmZp8z}T>Wae}m<9s>gdD+2=XOw=(J)nm{L_u}P$!@$B@&A=DVe~`DDPiC>8053aV
zIKv8Yb@k2Fyq!!OO#I%={NDWSn*|l@`6qkJ?_^`-zsJCTZ?j;+75>Th^wl_+_>VF0
f9|Mc*;-7rX-j0ote<uU~&dq`e>-i_|^mhjUyh<Xs

diff --git a/Lab2/database_helper.py b/Lab2/database_helper.py
index 0cac71e..99a97b0 100644
--- a/Lab2/database_helper.py
+++ b/Lab2/database_helper.py
@@ -10,16 +10,6 @@ def get_db():
     return db
 
 
-def create_database():
-    conn = sqlite3.connect('database.db')
-    cursor = conn.cursor()
-    with open('schema.sql', 'r') as file:
-        sql = file.read()
-        cursor.executescript(sql)
-    conn.commit()
-    conn.close()
-
-
 def clean_db():
     try:
         get_db().execute("DROP table USERS;")
@@ -113,6 +103,7 @@ def get_data_email(email):
         return None
 
 
+
 def change_password(email, newpassword):
     try:
         sql = "UPDATE USERS SET password = 'newpassword1' WHERE email = 'cbdgsdsd11mail.com';"
@@ -121,3 +112,17 @@ def change_password(email, newpassword):
         return True
     except:
         return False
+
+def check_email_exists(email):
+    cursor = get_db().cursor()
+    cursor.execute("SELECT email FROM USERS WHERE email=?", (email,))
+    result = cursor.fetchone()
+    return True if result else False
+
+def postMessage(email_sender, email_recipient, message):
+    try:
+        get_db().execute("INSERT into MESSAGES (EMAIL_RECIPIENT, EMAIL_SENDER, MESSAGE) values(?, ?, ?)", [email_recipient, email_sender, message])
+        get_db().commit()
+        return True
+    except:
+        return False
\ No newline at end of file
diff --git a/Lab2/schema.sql b/Lab2/schema.sql
index 446b1f8..3ad2fec 100644
--- a/Lab2/schema.sql
+++ b/Lab2/schema.sql
@@ -13,4 +13,12 @@ CREATE TABLE LOGGEDINUSERS(
   TOKEN VARCHAR(40)     NOT NULL,
   EMAIL VARCHAR(30)     NOT NULL,
   PRIMARY KEY (EMAIl)
-)
+);
+
+CREATE TABLE MESSAGES(
+  id INTEGER,
+  EMAIL_RECIPIENT VARCHAR(30)  NOT NULL, --Celui qui reçoit le message
+  EMAIL_SENDER VARCHAR(30)  NOT NULL,  --Celui qui envoie le mail
+  MESSAGE TEXT  NOT NULL,
+  PRIMARY KEY(id AUTOINCREMENT)
+);
\ No newline at end of file
diff --git a/Lab2/server.py b/Lab2/server.py
index c718b1c..28abb6e 100644
--- a/Lab2/server.py
+++ b/Lab2/server.py
@@ -6,7 +6,6 @@ import string
 
 app = Flask(__name__)
 
-#database_helper.create_database()
 
 
 @app.route("/", methods = ['GET'])
@@ -121,6 +120,28 @@ def get_user_data_email(token, email):
     else:
         return "", 401
 
+@app.route("/account/post_message", methods = ['POST'])
+def post_message():
+    data = request.get_json()
+    if('token' in data 
+        and 'message' in data
+        and 'email_recipient' in data):
+        email_sender = database_helper.tokenToEmail(data['token'])
+        if email_sender:
+            if database_helper.check_email_exists(data['email_recipient']):
+                posted = database_helper.postMessage(email_sender, data['email_recipient'], data['message'])
+                if posted:
+                    return "", 201
+                else:
+                    return "", 409
+            else:
+                return "", 404
+        else:
+            return "", 404
+    else:
+        return "", 401
+            
+
 def generate_token():
     characters = string.ascii_letters + string.digits
     return ''.join(random.choices(characters, k=36))
-- 
GitLab