From e50e834acc05ca69133553212795db8a8fd545ad Mon Sep 17 00:00:00 2001
From: ComeF2 <123363885+ComeF2@users.noreply.github.com>
Date: Sat, 4 Feb 2023 14:28:03 +0100
Subject: [PATCH] =?UTF-8?q?Impl=C3=A9mentation=20sign=5Fin?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../database_helper.cpython-311.pyc           | Bin 1491 -> 2740 bytes
 Lab2/database.db                              | Bin 12288 -> 12288 bytes
 Lab2/database.db-journal                      | Bin 0 -> 4616 bytes
 Lab2/database_helper.py                       |  23 ++++++++++++++++--
 Lab2/server.py                                |  22 ++++++++++++++++-
 5 files changed, 42 insertions(+), 3 deletions(-)
 create mode 100644 Lab2/database.db-journal

diff --git a/Lab2/__pycache__/database_helper.cpython-311.pyc b/Lab2/__pycache__/database_helper.cpython-311.pyc
index b55baac245e748f252af404f47fbf0d0dba6711e..100e86dddec4b61d24a4b59b06594d316c8cdfae 100644
GIT binary patch
delta 1310
zcmcc2y+xF7IWI340|NuYwwQa#yICgkNif<>R5y@iZ()dHPvK}`h~h|L3}(>ed<jzI
zr^$GWG5y!XjC&kx3=9mKj74md{TL@O@=U(ZXlrtVo43L9Ge})Bh=5^`N@fNIhR+_1
z3=Gp5N*G}h3=CO}lXF-km}?noCa-5w)u?4GVMj=&Fr_drV`5-f%>)xOWvFGUVOqd4
zIgv?t@=+#!wp!*I#s#b(t}8<g^D;&ThShM>85vT*5Y-4qhCFU%21ABomU5;F=17Ke
zMn;B621W)(h8l(iY#@^+A7v6`sbN^a4&?~dGXyheviKFTFfcGwaTO<Lq~<2-6&L2*
zVl2|+DB@sXU?}2bU|_h#mRwp?oL_W{CBGmw?-ol@YGTSQ-qecJ<kFJV;^d;tf|6To
z$@#gtnI*SalXLQmQ#Dy`u_Wi`<rN8lw6mmT=A_<YE-uU|2HB*bprBC14U(wmPcBML
zEJ=+|Ni0cBN-Rz-l4M|D;9+23C_c!*z|g>Oms_aEeunKuZp|y)nhh>Dcm?~TyP`W|
zdtw{h?sD>W<jios$f<CJQ{e*x6RXk!mm7RS{h3{vo!LFv9n3d4_^xxvT;h<K5qyzD
z@d}6H1rEgztW2y*V8tM!Ug;x9-xm-8;v;0xSwDXKz^Z_aft9n}yUDxJx5c-?_XZ0`
zyH}G}qfd)Z0~i(yGB7ag)N<5kKB&*)Xv}`ljM34UJsFl1ChIeO76N(q7CSUFi$oY0
z7$%!D`-y`Ch#ML{rNya5Mam2e45FLoFiSG3g7g$gGcYi$WGLbVMH5&xM{-VTVqSbo
zQjr=11B2}3TP$AU$?zn`z`(%Dz`y`buRA8&GMP_4#>B@0N_LYsFp0^eFxD{CFs3u1
zC#o8z1<cU&!e3v@T*F+%l)@Cukis0ypv(YDVIUSHy=k)eRT&1m`nWoWC}=6T1^N3b
zga*3?1uKMmxCXf@xcWMJ`q<hlIQqFL1ULo<hx-S)*xFl%xM{K!fjtCDEMQ;V;z&y^
zNzTa6OVwm4k^%Wo7DNctgAxr3C@|0x5>H}jNk(d3NoI0lNotW60|SE!C=sQB6VV4I
z4pz~-g5nb;rbtYepCo@#Q0a=GQU}`&4!(ZAF1`!mUME5?gv4C%iM_}XcZDPF0!Q2p
ze$oE=uKJ7o3Rn0QI#_OS^M7Dq<dmqtAuK+@<OaV;N9m6bOpL6eU}i_@j~_pZK|W}5
z<Z~2ZI4Hv8D9NnJ3C=*bSkrP6i?fSB!CnL^jv!tIrE_qEf};xT;v!X$AK|h2i^C>2
zKczG$)vic~fq?;(`HLB=Cg-zi$+0l<ePDnSJnW2u9~j_-(Bu`Yva)=fjG`YHFbQyK
F0RSMCK1cun

delta 294
zcmdlYdYPMVIWI340|NttoAuq~$xIXZBp3}Qsv8J01~X`~zXVD6X)@koOs|?)a*u<R
zfq_Ajv50kY6ypR&?#ZtiZMhzB^EP;X2C19O%KAr?n}LDh7JF(%YI12w>Mge9{M_8k
zlF7nse&QfYZgD3Ur6!i7#+MeS78QvzFfj0Ku3(d7R0U}(;$vW7SjkYt!@$5$1Xj(F
zoRgZE7oU<;B*nnMAU1g$yO*~ndl5Ux4%W1s#NzBCW{_e|5CJv<WF%N|kt9eAZqzRh
yo80`A(wtPgA{hn-21W)3hT@pXMqFC_tc-jg7~q7!<SH&%J_c4sQIMc0*ew9S>On>T

diff --git a/Lab2/database.db b/Lab2/database.db
index 5d50e4d8eb86358998d1080012be4916b4a8829f..90122c90f888e039f3d560758c37b102b1d369e3 100644
GIT binary patch
delta 236
zcmZojXh@hKEhx&sz`)Fa0PGWWj0Hs*^rB68`QI=w@r5(+h4UZWEGY1tm!&D4k$rPC
zUm7EeCKH?Z<fHud98CO84E#I!n>Gt7l<_l}GEMf8Hx0F9<PaAXmlxNT^eWBCOm)xC
z$V*GjP0aDh%*)O%$jnO*E=^5I%>v0eq~|7P=IABo=O$LA7L`;Y9KyiB#lXP8#D9)~
o{~Z5A{*9Xj6&CPMUZ<~MB*d)An4F)RiqOj>#H`JUW*)Lh0AJWSd;kCd

delta 291
zcmZojXh@hKEhxyqz`zW}ObiSRY!h{i1qB)OqD^=i7#JA%zcBD0<UhDsP~bT)3;!F&
ztj*DUX^bok3=GDTkMi4dG4p#d@bBbr<oDVvC}6|SWXe3bMc%aDjEO^%UsO`qRI((s
zIHkBGwInsA1jI}$sVu5YPD-sxO-)HJPBAphP0Y;EOU}<VG%_|ZHMeBskQ5h{6gGzH
zD@jR9E5_7|O)JQ?Fg($hot=?^fq{vC<7PpH1^koO=_?qaYGM*&Hs%C71XUbn1c(Lz
DBS1=g

diff --git a/Lab2/database.db-journal b/Lab2/database.db-journal
new file mode 100644
index 0000000000000000000000000000000000000000..ba0f47b6b76fa79c14766425157136767b110c6d
GIT binary patch
literal 4616
zcmZQT0!upu&M+`AFf%YPF)%O)Ajym}hj9on@iH(lF!47r@bBbr8pi${_1b6%jE2By
z2#kinXb6mkz-S1JhQMeDjE2By2#kinXb22&2$(W)h)ar!N@_|vAKsFi>Xu(rl9`vA
zn3L*LnV;uYl$e*Cnw+1T>X4qBn3<!OoS&Omm0DC%Y01bTE-EfBt}W?Rnv<F8o}ZDI
hmYSQG<CB?}onMfdmmXZ2nv$9Yl0(;u>|xNj4*=sgE;;}J

literal 0
HcmV?d00001

diff --git a/Lab2/database_helper.py b/Lab2/database_helper.py
index 66853cf..a4153f6 100644
--- a/Lab2/database_helper.py
+++ b/Lab2/database_helper.py
@@ -7,13 +7,20 @@ def get_db():
     db = getattr(g, 'db', None)
     if db is None:
         db = g.db = sqlite3.connect(DATABASE_URI)
-
     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 create_user(email, password, firstname, familyname, gender, city, country):
     try:
-        get_db().execute("INSERT into USERS values(?, ?, ?, ?, ?, ?, ?);", [firstname, familyname, gender, city, country, email, password]);
+        get_db().execute("INSERT into USERS values(?, ?, ?, ?, ?, ?, ?);", [firstname, familyname, gender, city, country, email, password])
         get_db().commit()
         return True
     except:
@@ -25,3 +32,15 @@ def clean_db():
         return True
     except:
         return False
+
+def authenticate(email, password):
+    try:
+        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
+    
\ No newline at end of file
diff --git a/Lab2/server.py b/Lab2/server.py
index 0f2b670..9e0bc2d 100644
--- a/Lab2/server.py
+++ b/Lab2/server.py
@@ -1,9 +1,13 @@
 from flask import Flask, request, jsonify
 
 import database_helper
+import random
+import string
 
 app = Flask(__name__)
 
+#database_helper.create_database()
+
 @app.route("/", methods = ['GET'])
 def hello_world():
     return "<p>Hello, Lab_2!</p>", 200
@@ -34,7 +38,19 @@ def sign_up():
     else:
         return "test", 400
 
-
+@app.route("/sign_in", methods = ['POST'])
+def sign_in():
+    data = request.get_json()
+    if('email' in data
+        and 'password' in data):
+        if not database_helper.authenticate(data['email'], data['password']):
+            return "", 401
+        else :
+            token = generate_token()
+            print(token)
+            return token, 200
+    else:
+        return "", 400
 
 @app.route("/delete", methods = ['GET'])
 def delete():
@@ -45,6 +61,10 @@ def delete():
         return "", 409
 
 
+def generate_token():
+    characters = string.ascii_letters + string.digits
+    return ''.join(random.choices(characters, k=36))
+
 if __name__ == '__main__':
     app.debug = True
     app.run()
-- 
GitLab