From b2ce867b7d1baca487cf5d6122eaf1e88a98a665 Mon Sep 17 00:00:00 2001 From: kosh Date: Sun, 1 Sep 2024 12:59:08 +0530 Subject: [PATCH] Fixed all api calls --- backend/data/sqlite-database.db | Bin 32768 -> 32768 bytes backend/src/rest_api.py | 41 +++++++++++++--------- backend/src/utils/mail.py | 58 ++++++++++++++++++++++++++++++++ backend/src/utils/user.py | 7 ++-- 4 files changed, 87 insertions(+), 19 deletions(-) diff --git a/backend/data/sqlite-database.db b/backend/data/sqlite-database.db index 5c0fb50d97d8447b7399c00c2630941f060e180a..927ee539ae7aedef7ba3d9b81b8ffee653250083 100644 GIT binary patch delta 1057 zcmZ{iPfXKL9LL*rrt8@H+e8>RSw@&9CSk@u z9`vBm#1jWNd(>SBi6;{!9*hSQ;fkUEY288V@0iWB#bP1v zl8p`eEZJk{A_+T}42OI5i@B6ECuHptTp}0>#t&8+-*hHgPqASF3hWjeZkSCM*lJx* znTfi#o9t|D>+0^Jv~3LIaHkzEw_`R~8IJoGrc=@4KxJmgmk-7RT*MO-eO$R%m=cCF z?oyeXEUSu?;eBy`$*W%Ui?TR^np2bw`J#|jlzcW{l=DJ!P|VAy&&mpV334%ymaB46 z(7n8UZsoQ1lC1Fc7ERNp=O~-YF7JdgHtU=WSC-;a*%@_tVlX22XOgi9*H;-WL}Q*p zIIX${qFi5zzh051$8TU8@o1guUp{*}w~!9Gr_)Y0b-agk$o-$=3#7-!gK1~DZ&Bja zp{Zei(CJY_v7|@wN%Q?FK9F>)@#ym4U?dxr)M!o~T?&=Z5rs0JD`ayc1t}$n&R|BC zjyC(B7||57=~1;%ut~sY*o61!DmNg&Qr#pzFa=c4p`obhpuEh#0w~`I-w6$D6YvGL z(U;zVlc6XJsVcbzg<>=anfFH06J7~`bxTd4DWb+!SeIPY7rDf0z zVMIG@>^cEoVF$M0Exdx~(10hf29Mz$+yn)9xC(Iy!Fh1O8L)y0j<% zY!(zSW9MqF7i1R~7iVmb-MoTblTlEIt0XlsH$F2(!P76q)!j8{^A`>Q_RTB_f8=?1 z`M)tR^1o)_f6f1TvtYt~elboaW^qQ4hGI^jwOkOZxi&K<{O6w}z#_)UKc9jBGygOG coBS8}kMr;4-^{;~fBt4cg;xH}^Wzg00QWX9k^lez diff --git a/backend/src/rest_api.py b/backend/src/rest_api.py index fd3b079..af631cb 100644 --- a/backend/src/rest_api.py +++ b/backend/src/rest_api.py @@ -21,7 +21,6 @@ def register_mail() -> flask.Response: return flask.Response("Something went wrong, check mail or try again later", 404) response = flask.Response() response.set_cookie("mail", mail) - response.headers.add('Access-Control-Allow-Origin', '*') return response @@ -40,7 +39,6 @@ def confirm_mail_code() -> flask.Response: flask.session["mail"] = mail response = flask.Response(str(success)) response.delete_cookie("mail") - response.headers.add('Access-Control-Allow-Origin', '*') return response @@ -51,20 +49,28 @@ def register_leader() -> flask.Response: except KeyError: return flask.Response("mail not registered", 428) try: + team_id = utils.TeamHandler.create_team(flask.request.form["team_name"]) + request_data = dict(flask.request.form) + request_data.pop("team_name") utils.UserHandler.create_user(utils.User( -1, mail=mail, - **flask.request.form, + team_id=team_id, + **request_data, )) user_id = utils.UserHandler.get_user_by_mail(mail).user_id flask.session.pop("mail") flask.session["user_id"] = user_id - except TypeError: + except (TypeError, KeyError): return flask.Response("Something is missing", 422) except sqlite3.IntegrityError: return flask.Response("Mail already registered or phone number or pin code is not correct", 428) except ValueError: return flask.Response("There is text where number is supposed to be there", 400) + try: + utils.MailHandler.send_success_mail(mail) + except: + pass return flask.Response() @@ -78,35 +84,31 @@ def login() -> flask.Response: try: assert utils.UserHandler.verify_password_by_mail(mail, password) flask.session["user_id"] = utils.UserHandler.get_user_by_mail(mail).user_id - response = flask.Response() - response.headers.add('Access-Control-Allow-Origin', '*') - return response + return flask.Response() except KeyError: return flask.Response("Mail doesn't exist", 404) except AssertionError: return flask.Response("Wrong password", 422) -@app.post("/get-mail") -def verify_login() -> flask.Response: +@app.post("/get-id") +def get_id() -> flask.Response: try: - assert "user_id" in flask.session - return flask.Response(flask.session["mail"]) - except AssertionError: + return flask.Response(str(flask.session["user_id"])) + except KeyError: return flask.Response("Not logged in", 428) @app.post("/logout") def logout() -> flask.Response: try: + print(flask.session) flask.session.pop("user_id") except KeyError: return flask.Response("Not logged in", 428) return flask.Response() - - @app.post("/register-teammate") def register() -> flask.Response: try: @@ -114,13 +116,20 @@ def register() -> flask.Response: except KeyError: return flask.Response("Not logged in", 428) try: + team_id = utils.UserHandler.get_user_by_id(user_id).team_id utils.UserHandler.create_user(utils.User( -1, secrets.token_urlsafe(20), + team_id=team_id, **flask.request.form, )) except TypeError: return flask.Response("Not all details provided", 422) - except sqlite3.IntegrityError: - return flask.Response("Mail taken or phone/ pin code wrong", 400) + except sqlite3.IntegrityError as error: + error_message = str(error) + if error_message == "UNIQUE constraint failed: users.phone_number": + return flask.Response("Phone number taken", 400) + if error_message == "UNIQUE constraint failed: users.mail": + return flask.Response("Mail taken") + return flask.Response("Phone/ pin code wrong", 400) return flask.Response() diff --git a/backend/src/utils/mail.py b/backend/src/utils/mail.py index c61e598..797b887 100644 --- a/backend/src/utils/mail.py +++ b/backend/src/utils/mail.py @@ -50,3 +50,61 @@ class MailHandler: cls.__login_codes.pop(mail) return True return False + + @classmethod + def send_success_mail(cls, mail: str) -> None: + message = MIMEMultipart("alternative") + message["Subject"] = "multipart test" + message["From"] = "ssth@sahyadri.edu.in" + message["To"] = mail + + html = f""" + + +

Hi,
+ How are you?
+ Real Python + has many great tutorials. +
+ You've joined!!! +

+ + + """ + + # Turn these into plain/html MIMEText objects + part2 = MIMEText(html, "html") + + # Add HTML/plain-text parts to MIMEMultipart message + # The email client will try to render the last part first + message.attach(part2) + cls.__smtp.sendmail("ssth@sahyadri.edu.in", mail, message.as_string()) + + @classmethod + def send_warning_mail(cls, mail: str) -> None: + message = MIMEMultipart("alternative") + message["Subject"] = "multipart test" + message["From"] = "ssth@sahyadri.edu.in" + message["To"] = mail + + html = f""" + + +

Hi,
+ How are you?
+ Real Python + has many great tutorials. +
+ You're joining... +

+ + + """ + + # Turn these into plain/html MIMEText objects + part2 = MIMEText(html, "html") + + # Add HTML/plain-text parts to MIMEMultipart message + # The email client will try to render the last part first + message.attach(part2) + cls.__smtp.sendmail("ssth@sahyadri.edu.in", mail, message.as_string()) diff --git a/backend/src/utils/user.py b/backend/src/utils/user.py index 4e393da..85abe89 100644 --- a/backend/src/utils/user.py +++ b/backend/src/utils/user.py @@ -83,9 +83,10 @@ class UserHandler: pin_code, phone_number, name, - team_id + team_id, + team_leader ) - VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 1) """, ( encrypted_password, @@ -100,7 +101,7 @@ class UserHandler: user.pin_code, user.phone_number, user.name, - user.team_id + user.team_id, ) ) cls.__connection.commit()