From 1b7b3e4470dcc57bdd1a54703c939e185d1b788c Mon Sep 17 00:00:00 2001
From: MaximeOLIVA <maxime.oliva@etu.univ-cotedazur.fr>
Date: Sun, 5 Feb 2023 18:36:10 +0100
Subject: [PATCH] sign_out

---
 .../database_helper.cpython-310.pyc           | Bin 900 -> 2060 bytes
 Lab2/__pycache__/server.cpython-310.pyc       | Bin 1456 -> 2234 bytes
 Lab2/database.db                              | Bin 12288 -> 20480 bytes
 Lab2/database_helper.py                       |  38 +++++++++++++++---
 Lab2/schema.sql                               |   8 +++-
 Lab2/server.py                                |  20 +++++++--
 6 files changed, 57 insertions(+), 9 deletions(-)

diff --git a/Lab2/__pycache__/database_helper.cpython-310.pyc b/Lab2/__pycache__/database_helper.cpython-310.pyc
index d37e5e85171172afe6ad9b5abdbe258c244d477d..3ebbc7beb6dff05b871c1ac6c6b345a31a21ff7e 100644
GIT binary patch
literal 2060
zcmd1j<>g{vU|=YCaX*=hoq^#oh=Yuo7#J8F7#J9eLl_tsQW#Pga~PsPG*b>^E>jc}
zBSQ*v6mtqo3Tq2P6iW(Q3VRDf6l)4c3TF#L6k7^c3U>=b6nhF!3U3QT6h{hQ3V#bj
z6laP+ieL*v6juskFoUMhOOSnjnvAy?(|>WNB$gy5B^IaZr6eVT#9^3`fq{XAfq}sp
z<Q5GE28I%b62=t96ozKzT80{i6oyiUBB2td1<WNZ3mI7$Y8grx<5_DMf*CZK{BAL&
zBx$nUVoy&kNh~QTDgycG7JG4FPG(7}@h$e`{Jgx><dR!FE{-9NPL9E@@u5MUMIg&G
z8Nt*_h9XV|28Lf=`k}?CMaBBLi4~c-sroLd#n~nK1^U6|sVS*>`XMeZE|%u{;i*Xh
zMfvGPiMhF%dFlE-iAhHKFi*v2q~;W)7U>mK-eOBnEs0M_Vgq@HgMop8hmnI(fRTl<
zh?{|d0mbJahk#UoeVzpN`2xli#)XU^e=lHK$WY5z!kogC!raW%FIdY|!?b{9Aww;5
z4dVjV8s>$Jj11unDGV$OEDX)ej0|}kh783@<&2CBAQ;KO$WX(ufNdd!W(UzJpfF?c
zD`I9~V5s6MPR>ZpP1Gwc%(=x_q{&ePa&Hkk0|Ub?w&c>H;{2jpEcpegdAC@KQWI06
zcvCA<lS@ldi<65o3rcRWCFkenW|rJyP0q<LPSs?&#R3ZIB3_VombA>A)F|fS!W?ke
zLI_Y&yv3hfl$uzQ8V?IJkn&;y1_lN$Mh-?$F!3<T{NrHeVJs3s4=PY%0l5$yR5~CJ
z@Ru+&GeClikpaqPf(8n6FgOqx86p`{Sb`ZeS^cU6U4r}r6iO14a#9sSgI$Ayt*a!F
zgnazn-CbQg{UA~yZkkNs=(@!Y^*6*9oD2+*1XBd|4@YuNYGPh|N|HDzu6Y<37?>D&
z7<m}kz_3UR<OxuSf*cRRAT~%N*b`PDPl!Ps&RD}#!(78s!&<{u!%)MR&c2Wd>M15r
z%!M<gFd=z~Iha9{#ji@w(=XUHC`2JMuOuJhCxx=aoYK@{4SO90bfjq=;<l0*?5QGA
zkT*c#uE~CjH8nReGv^jZL1J-nd45sKEzY#eqT-Ug#N5<dTxp59nK_kUHd}gXUP@}w
zEtcfWl1fm{D$Oe?szeGFkjHLuLu0tKIJHOt5hyZ@T;L#KV=R&f1qvvef&v7DL74y^
zv!L>*N)i$%3mL#ko+*V993)JjAgN(mzzog;%thjmKnZ6^L5^)`&=>~0`nWoWC}=6T
z1^N3z11H?WHON)L)z{I}$JSoK(a%L8z%e*D+&{?0*4{eAO_K!@I-pbu4x(EeX{ja2
z8Tomsnk+>UpfHmJ5g_?nEFd4E`<^GUv?L=nuOu@$u_RR!<b5G<n&4s-VB}zAfd&B^
zW04YiAb<h{9tZ}YlpzQS1Z2;HMew8tHRSYwlAw{(g=UCb5h%TCGTmY=$<I#BgLn-s
zX|v_zr^jdJnSwk4N!UV&I8*^SA5?6E;tzyDB?{d6VIb$LfE~*SD#B_Q7l7k1oe>;^
zjNlk#s$nWp0?RPfFhFF$I#{5|ojDj(xUnE5dT2h@LXBBeZ$e@?#NXT1&(_|$O2fs~
z$2G(ik_Pap3~|$BMT>lJ@+|^q66PXhSiBc0f>>x_#SRLq{L&J8P+);FJrg4rBOf@%
z`QU-Z##p4vz`&r%4K8SJv8LrD7H5O&t0GVp0I?lZ>=l7b0A~|$GARNDHdrfCY6Cj}
poZ&cZa`RJ4b5iX<(NPT2&%waM$il?I#KF$N#lgwJ$-%?J1pv%apoIVc

delta 378
zcmeAXXkq8e=jG*MU|?XVVY`!D!8DOihS6lAwuvBPFoP!7OOS-0CgUx}^s0#yy7-wH
z7#K7ei$K&$h9Zv1nvChpOhsIio0%s_XfhXp%(=y$T9KMuT9O*YmYkoPn^`hhg~iE;
zgMope2uyG?FfiQWPA*DKEJ=+oElw@sV_;w?=3!u9U}BVE<YHt4!y@6y`<P_w6&M&8
zsyIs+ni&=_rZ6sKWMl|uNMQ<QU<AWRh7{&t22B>fDnXYZ{{V%O#H5^5h0tKvpkV6|
zH%%t6dy2T>R)g&a6JSShB<G|i=EbKZiGf@Iayt_v57>4##v&1rPb1ljSV7KZP0L9v
z&MsmCnZynvK#GfmK`f9uh{wPNg9(V~Ho5sJr8%i~j3CoN{^MZaVPs+AVB+B5;Q#<l
Cdqigd

diff --git a/Lab2/__pycache__/server.cpython-310.pyc b/Lab2/__pycache__/server.cpython-310.pyc
index 643957fffe8a2fd38c2dbc2da828d3507eca7cf5..d9221492281ddef57ac6629235aaeb7ff1bc2918 100644
GIT binary patch
delta 1138
zcmdnMy-ScUpO=@5fq{V`<;nfz$D9-SWEd|^)RwPLVMt-hVU1!1(`->}sf?-Y&5ThT
zsT^6HDa<J>>5M6?y-X==DeNr_&5Ti8U~!HVPN+Cn3O87s8!XNP7w1jk1B>&3#rfgl
z0x5!EabB>vP>LnY0^t-9umoR<Xo^@1Lll21dy05AQ&D<~L@GzTKq|)q!G#Qr3@J>(
zV5})Qao2T5?#+`J7csK(1~X{#O}1qAm)B&v#qjbZ0|UcKrXoQG28PU;j0pAw#>rcl
za~TCDE3qWk%P=r7RB`ARXQt=HXXYh?LI#GJ7#J8>85kIx85kIf!x$JCN*ER}E@Y@>
zNMWpDC}SwnOksl1B}@yLYZy`(B^hcMQkWze7BUq}q%a3Fl&~~2)H0SZEnux-gvc*s
zDpIduOkqg_IiEF{A*G%zm_d`>uZWj{fuV>G$-xsD85oL$K%&ARLWF^VL6fbB8N?O^
z5t0lH3{gCZr6n1uc_o?2i6yDG_|jAJQi~ExQsYbVvs3e;*mCmI<1_O#nTn(s7#MD`
zf<=osLAt>NC>hk>VuyNN6XZ)V1_lNWCJsh6MyCHFOe~CSOahD?j4VtnOhpQyfZ~J%
zRDNj*N=Pv>Ffg#dLP`rWq=XS6w2-k#5FB~T!3-%Z!L|&VtbRrE2#*(WfZQhwBEWuT
zLH9E|$XEHLC7O&yQj-f=MdZQm&o3>p1bKi5>H$7R7KpQzCbzLT$ti-&0|lfeQxQ1i
zIFfTx6Z7Izk~A5Mq$d}$3fHrxq~@fSq`HDk0l9&Li3My%kun1V1BP$eV7>(fO9?|3
zV+lhRlQ=kSEMP8S$zlbigcRmpriF~b44N!{;8gfh1r&>nw-~cE*>15FmlS2@rQhOB
zEKbhMjIYm0Eh$MYD!#>*l9`@aQhbXgD?c;u7F$tbUP^xME%xM${LJLkVok<dT*(=U
zMTyBE#b}XPB*(zO;0N*mC^C2$MHs;%w>aYCa}zW3;^RX!g>JE?<s=qo7l9HtBxpfu
zizGpbp$HUpMQW3+S>;7R`2rm0MM|Ks0|i2n+~fpSBOMI}1_lvuD&b({VB%xpVgzFe
YE=E3nE=E3XE=CRx4i+{>9!8db0IWXd9smFU

delta 378
zcmdlbxPhB5pO=@5fq{V`kpE7yHQPi!8OE-O+Vb_OjH#^6j8SZ<Y+39n%qcACj47<W
zOet(B>@5t<j8Pn5agG#Ds5n;&H&~n#EY1U0&zr&r7UxQ3P2taGDsoN{NM(!XPGwub
zvyg$2A%!Uzj5P&cg503Ve2djBC$TvD)?`7(6O8PeZ!s=nWaSHH(Bz-o$n3APlIa%1
z%aaTY3@e$6gcukYGG{U}Fla*9FDHQ6w^&M2i%W_`879AH&Sm789Lti-C^va6o0FU%
z0|P^m2m@GyGy?-e6i0GSYGPh|N|GjHk?dq%b}4Ih1_p*=4h9AW4ki{x7Dg7PB6$V|
zhFcu*@wthadGYZfn!LAI(?AX^Vgi}Q3?f)Sg!E($4tX{?5L13~42O}N6axc;2m=Qb
a2NNF?7b71F7bBk(7b6D;8zT=R%Rc}TGEbTS

diff --git a/Lab2/database.db b/Lab2/database.db
index 076379e3f40ce91f451625cb3b7fea57713a1c68..df5370f416fc0b03b3b7453c4ffa0a2129de1920 100644
GIT binary patch
delta 575
zcmZojXjs5FL0V9ifq{XQ0Rea>>KKcvGU$bS@$$c6VBxK1;0xzJ$Xm@Pv#^l2o-dqX
zg}AzUqZ~84xVk!HV|7VlQckLmzq`Aui>F^`uxn5-3WwD>$kj2#RUyRD$;VXzMM{H9
zK_SH7+tp7Y%rVH>!!bz1#6VL41pNF%6#PPcd~~=J6kL5BJ$>LRQjD=E2?+A^bqtDB
z@OF(<&;Y5=(d5#!WMLEcRcB<#%u7kFC@##&EJ=+|EG@|g^W#w*5^spYW!@al$Ir-U
zJlT$4a&iNIHY3aAH~bQ8jQsl;`1frVR9L`2u|dSggpos%UsO`qP_iVoIHkBGwInsA
z1jI}$sVu5YPD)8HPAN_?G|WxR%+X8E&owkMHZe6v1TzBz7l_0Eg@OMb)KGIxF-(0R
zMKBD~!N`9Pp~FN+l-ZCIzb0OgZjd!Qq1FhwSQ}>fg_Q=Dn)w=5W>}V)lv<V<JNxB3
V`9_3h7dxey7CR;zgd5{G767{kk%0gJ

delta 311
zcmZozz}S#5L0V9Zfq{XU0Rh-2>KF@(G3fc%^76l7VB!mB;0xzJxLHu(Iq&9hK7Pi@
zllY}4H}YpOGEaWPFTugY-^9SblfP-Rpg<Xay(trixTL74q^6|v;VrqTZuvzenR&U1
zIjKIC`FU<diFwJX$@#gd4(YjxnK^pN`MHTzsYNA~mW&+YqT=%6+LB(SIhm>M`5Ad>
zskw<cKACyh`30GI>A|I`DXCc?IdrWEhchs6@iH(lF!7&b;6KOzkbmQ5L4n2m{zA-}
ejHq@pOE8-<CMTs<rKVy^G6^wjbE4UVYzF|Z=~Pny

diff --git a/Lab2/database_helper.py b/Lab2/database_helper.py
index a4153f6..c6047fc 100644
--- a/Lab2/database_helper.py
+++ b/Lab2/database_helper.py
@@ -9,6 +9,7 @@ def get_db():
         db = g.db = sqlite3.connect(DATABASE_URI)
     return db
 
+
 def create_database():
     conn = sqlite3.connect('database.db')
     cursor = conn.cursor()
@@ -18,6 +19,16 @@ def create_database():
     conn.commit()
     conn.close()
 
+
+def clean_db():
+    try:
+        get_db().execute("DROP table USERS;")
+        get_db().execute("DROP table LOGGEDINUSERS;")
+        return True
+    except:
+        return False
+
+
 def create_user(email, password, firstname, familyname, gender, city, country):
     try:
         get_db().execute("INSERT into USERS values(?, ?, ?, ?, ?, ?, ?);", [firstname, familyname, gender, city, country, email, password])
@@ -26,21 +37,38 @@ def create_user(email, password, firstname, familyname, gender, city, country):
     except:
         return False
 
-def clean_db():
+
+def authenticate(email, password):
     try:
-        get_db().execute("DROP table USERS;")
+        cursor = get_db().cursor()
+        cursor.execute("SELECT * FROM USERS WHERE EMAIL=? AND PASSWORD=?;", [email, password])
+        user = cursor.fetchone()
+        if user:
+            return True
+        return False
+    except:
+        return False
+
+
+def log_in(token, email):
+    try:
+        get_db().execute("INSERT into LOGGEDINUSERS values(?, ?)", [token, email])
+        get_db().commit()
         return True
     except:
         return False
 
-def authenticate(email, password):
+
+
+def log_out(token):
     try:
         cursor = get_db().cursor()
-        cursor.execute("SELECT * FROM USERS WHERE EMAIL=? AND PASSWORD=?;", [email, password])
+        cursor.execute("SELECT * FROM LOGGEDINUSERS WHERE TOKEN=?;", [token])
         user = cursor.fetchone()
         if user:
+            cursor.execute("DELETE FROM LOGGEDINUSERS WHERE TOKEN=?;", [token])
+            get_db().commit()
             return True
         return False
     except:
         return False
-    
\ No newline at end of file
diff --git a/Lab2/schema.sql b/Lab2/schema.sql
index 9f6c426..446b1f8 100644
--- a/Lab2/schema.sql
+++ b/Lab2/schema.sql
@@ -4,7 +4,13 @@ CREATE TABLE USERS(
    GENDER  VARCHAR(6)          NOT NULL,
    CITY  VARCHAR(20)          NOT NULL,
    COUNTRY  VARCHAR(20)          NOT NULL,
-   EMAIL  VARCHAR(20)          NOT NULL,
+   EMAIL  VARCHAR(30)          NOT NULL,
    PASSWORD  VARCHAR(20)          NOT NULL,
    PRIMARY KEY (EMAIL)
 );
+
+CREATE TABLE LOGGEDINUSERS(
+  TOKEN VARCHAR(40)     NOT NULL,
+  EMAIL VARCHAR(30)     NOT NULL,
+  PRIMARY KEY (EMAIl)
+)
diff --git a/Lab2/server.py b/Lab2/server.py
index 9e0bc2d..edf405a 100644
--- a/Lab2/server.py
+++ b/Lab2/server.py
@@ -36,7 +36,7 @@ def sign_up():
         else:
             return "", 400
     else:
-        return "test", 400
+        return "", 400
 
 @app.route("/sign_in", methods = ['POST'])
 def sign_in():
@@ -47,11 +47,25 @@ def sign_in():
             return "", 401
         else :
             token = generate_token()
-            print(token)
-            return token, 200
+            if database_helper.log_in(token, data['email']):
+                return token, 201
+            else:
+                return "", 409
+    else:
+        return "", 400
+
+@app.route("/sign_out", methods = ['POST'])
+def sign_out():
+    data = request.get_json()
+    if('token' in data):
+        if database_helper.log_out(data['token']):
+            return "", 200
+        else:
+            return "", 401
     else:
         return "", 400
 
+
 @app.route("/delete", methods = ['GET'])
 def delete():
     resp = database_helper.clean_db()
-- 
GitLab