diff --git a/backend/data/project-files/43/steam.desktop b/backend/data/project-files/43/steam.desktop new file mode 100644 index 0000000..a40c563 --- /dev/null +++ b/backend/data/project-files/43/steam.desktop @@ -0,0 +1,282 @@ +[Desktop Entry] +Name=Steam (Runtime) +Comment=Application for managing and playing games on Steam +Comment[pt_BR]=Aplicativo para jogar e gerenciar jogos no Steam +Comment[bg]=Приложение за ръководене и пускане на игри в Steam +Comment[cs]=Aplikace pro spravování a hraní her ve službě Steam +Comment[da]=Applikation til at håndtere og spille spil på Steam +Comment[nl]=Applicatie voor het beheer en het spelen van games op Steam +Comment[fi]=Steamin pelien hallintaan ja pelaamiseen tarkoitettu sovellus +Comment[fr]=Application de gestion et d'utilisation des jeux sur Steam +Comment[de]=Anwendung zum Verwalten und Spielen von Spielen auf Steam +Comment[el]=Εφαρμογή διαχείρισης παιχνιδιών στο Steam +Comment[hu]=Alkalmazás a Steames játékok futtatásához és kezeléséhez +Comment[it]=Applicazione per la gestione e l'esecuzione di giochi su Steam +Comment[ja]=Steam 上でゲームを管理&プレイするためのアプリケーション +Comment[ko]=Steam에 있는 게임을 관리하고 플레이할 수 있는 응용 프로그램 +Comment[no]=Program for å administrere og spille spill på Steam +Comment[pt_PT]=Aplicação para organizar e executar jogos no Steam +Comment[pl]=Aplikacja do zarządzania i uruchamiania gier na platformie Steam +Comment[ro]=Aplicație pentru administrarea și jucatul jocurilor pe Steam +Comment[ru]=Приложение для игр и управления играми в Steam +Comment[es]=Aplicación para administrar y ejecutar juegos en Steam +Comment[sv]=Ett program för att hantera samt spela spel på Steam +Comment[zh_CN]=管理和进行 Steam 游戏的应用程序 +Comment[zh_TW]=管理並執行 Steam 遊戲的應用程式 +Comment[th]=โปรแกรมสำหรับจัดการและเล่นเกมบน Steam +Comment[tr]=Steam üzerinden oyun oynama ve düzenleme uygulaması +Comment[uk]=Програма для керування іграми та запуску ігор у Steam +Comment[vi]=Ứng dụng để quản lý và chơi trò chơi trên Steam +Exec=/usr/bin/steam-runtime %U +Icon=steam +Terminal=false +Type=Application +Categories=Network;FileTransfer;Game; +MimeType=x-scheme-handler/steam;x-scheme-handler/steamlink; +Actions=Store;Community;Library;Servers;Screenshots;News;Settings;BigPicture;Friends; +PrefersNonDefaultGPU=true +X-KDE-RunOnDiscreteGpu=true + +[Desktop Action Store] +Name=Store +Name[pt_BR]=Loja +Name[bg]=Магазин +Name[cs]=Obchod +Name[da]=Butik +Name[nl]=Winkel +Name[fi]=Kauppa +Name[fr]=Magasin +Name[de]=Shop +Name[el]=ΚΑΤΑΣΤΗΜΑ +Name[hu]=Áruház +Name[it]=Negozio +Name[ja]=ストア +Name[ko]=상점 +Name[no]=Butikk +Name[pt_PT]=Loja +Name[pl]=Sklep +Name[ro]=Magazin +Name[ru]=Магазин +Name[es]=Tienda +Name[sv]=Butik +Name[zh_CN]=商店 +Name[zh_TW]=商店 +Name[th]=ร้านค้า +Name[tr]=Mağaza +Name[uk]=Крамниця +Name[vi]=Cửa hàng +Exec=steam steam://store + +[Desktop Action Community] +Name=Community +Name[pt_BR]=Comunidade +Name[bg]=Общност +Name[cs]=Komunita +Name[da]=Fællesskab +Name[nl]=Community +Name[fi]=Yhteisö +Name[fr]=Communauté +Name[de]=Community +Name[el]=Κοινότητα +Name[hu]=Közösség +Name[it]=Comunità +Name[ja]=コミュニティ +Name[ko]=커뮤니티 +Name[no]=Samfunn +Name[pt_PT]=Comunidade +Name[pl]=Społeczność +Name[ro]=Comunitate +Name[ru]=Сообщество +Name[es]=Comunidad +Name[sv]=Gemenskap +Name[zh_CN]=社区 +Name[zh_TW]=社群 +Name[th]=ชุมชน +Name[tr]=Topluluk +Name[uk]=Спільнота +Name[vi]=Cộng đồng +Exec=steam steam://url/SteamIDControlPage + +[Desktop Action Library] +Name=Library +Name[pt_BR]=Biblioteca +Name[bg]=Библиотека +Name[cs]=Knihovna +Name[da]=Bibliotek +Name[nl]=Bibliotheek +Name[fi]=Kokoelma +Name[fr]=Bibliothèque +Name[de]=Bibliothek +Name[el]=Συλλογή +Name[hu]=Könyvtár +Name[it]=Libreria +Name[ja]=ライブラリ +Name[ko]=라이브러리 +Name[no]=Bibliotek +Name[pt_PT]=Biblioteca +Name[pl]=Biblioteka +Name[ro]=Colecţie +Name[ru]=Библиотека +Name[es]=Biblioteca +Name[sv]=Bibliotek +Name[zh_CN]=库 +Name[zh_TW]=收藏庫 +Name[th]=คลัง +Name[tr]=Kütüphane +Name[uk]=Бібліотека +Name[vi]=Thư viện +Exec=steam steam://open/games + +[Desktop Action Servers] +Name=Servers +Name[pt_BR]=Servidores +Name[bg]=Сървъри +Name[cs]=Servery +Name[da]=Servere +Name[nl]=Servers +Name[fi]=Palvelimet +Name[fr]=Serveurs +Name[de]=Server +Name[el]=Διακομιστές +Name[hu]=Szerverek +Name[it]=Server +Name[ja]=サーバー +Name[ko]=서버 +Name[no]=Tjenere +Name[pt_PT]=Servidores +Name[pl]=Serwery +Name[ro]=Servere +Name[ru]=Серверы +Name[es]=Servidores +Name[sv]=Servrar +Name[zh_CN]=服务器 +Name[zh_TW]=伺服器 +Name[th]=เซิร์ฟเวอร์ +Name[tr]=Sunucular +Name[uk]=Сервери +Name[vi]=Máy chủ +Exec=steam steam://open/servers + +[Desktop Action Screenshots] +Name=Screenshots +Name[pt_BR]=Capturas de tela +Name[bg]=Снимки +Name[cs]=Snímky obrazovky +Name[da]=Skærmbilleder +Name[nl]=Screenshots +Name[fi]=Kuvankaappaukset +Name[fr]=Captures d'écran +Name[de]=Screenshots +Name[el]=Φωτογραφίες +Name[hu]=Képernyőmentések +Name[it]=Screenshot +Name[ja]=スクリーンショット +Name[ko]=스크린샷 +Name[no]=Skjermbilder +Name[pt_PT]=Capturas de ecrã +Name[pl]=Zrzuty ekranu +Name[ro]=Capturi de ecran +Name[ru]=Скриншоты +Name[es]=Capturas +Name[sv]=Skärmdumpar +Name[zh_CN]=截图 +Name[zh_TW]=螢幕擷圖 +Name[th]=ภาพหน้าจอ +Name[tr]=Ekran Görüntüleri +Name[uk]=Скріншоти +Name[vi]=Ảnh chụp +Exec=steam steam://open/screenshots + +[Desktop Action News] +Name=News +Name[pt_BR]=Notícias +Name[bg]=Новини +Name[cs]=Zprávy +Name[da]=Nyheder +Name[nl]=Nieuws +Name[fi]=Uutiset +Name[fr]=Actualités +Name[de]=Neuigkeiten +Name[el]=Νέα +Name[hu]=Hírek +Name[it]=Notizie +Name[ja]=ニュース +Name[ko]=뉴스 +Name[no]=Nyheter +Name[pt_PT]=Novidades +Name[pl]=Aktualności +Name[ro]=Știri +Name[ru]=Новости +Name[es]=Noticias +Name[sv]=Nyheter +Name[zh_CN]=新闻 +Name[zh_TW]=新聞 +Name[th]=ข่าวสาร +Name[tr]=Haberler +Name[uk]=Новини +Name[vi]=Tin tức +Exec=steam steam://open/news + +[Desktop Action Settings] +Name=Settings +Name[pt_BR]=Configurações +Name[bg]=Настройки +Name[cs]=Nastavení +Name[da]=Indstillinger +Name[nl]=Instellingen +Name[fi]=Asetukset +Name[fr]=Paramètres +Name[de]=Einstellungen +Name[el]=Ρυθμίσεις +Name[hu]=Beállítások +Name[it]=Impostazioni +Name[ja]=設定 +Name[ko]=설정 +Name[no]=Innstillinger +Name[pt_PT]=Definições +Name[pl]=Ustawienia +Name[ro]=Setări +Name[ru]=Настройки +Name[es]=Parámetros +Name[sv]=Inställningar +Name[zh_CN]=设置 +Name[zh_TW]=設定 +Name[th]=การตั้งค่า +Name[tr]=Ayarlar +Name[uk]=Налаштування +Name[vi]=Thiết lập +Exec=steam steam://open/settings + +[Desktop Action BigPicture] +Name=Big Picture +Exec=steam steam://open/bigpicture + +[Desktop Action Friends] +Name=Friends +Name[pt_BR]=Amigos +Name[bg]=Приятели +Name[cs]=Přátelé +Name[da]=Venner +Name[nl]=Vrienden +Name[fi]=Kaverit +Name[fr]=Amis +Name[de]=Freunde +Name[el]=Φίλοι +Name[hu]=Barátok +Name[it]=Amici +Name[ja]=フレンド +Name[ko]=친구 +Name[no]=Venner +Name[pt_PT]=Amigos +Name[pl]=Znajomi +Name[ro]=Prieteni +Name[ru]=Друзья +Name[es]=Amigos +Name[sv]=Vänner +Name[zh_CN]=好友 +Name[zh_TW]=好友 +Name[th]=เพื่อน +Name[tr]=Arkadaşlar +Name[uk]=Друзі +Name[vi]=Bạn bè +Exec=steam steam://open/friends diff --git a/backend/data/project-files/44/IMG-20240713-WA0017.jpg b/backend/data/project-files/44/IMG-20240713-WA0017.jpg new file mode 100644 index 0000000..346732a Binary files /dev/null and b/backend/data/project-files/44/IMG-20240713-WA0017.jpg differ diff --git a/backend/src/rest_api.py b/backend/src/rest_api.py index ad9dc1b..b777d7f 100644 --- a/backend/src/rest_api.py +++ b/backend/src/rest_api.py @@ -1,8 +1,9 @@ import os import secrets -import sqlite3 +import mariadb import flask import utils +from utils.mail import MailHandler app = flask.Flask(__name__) @@ -46,6 +47,35 @@ def confirm_mail_code() -> flask.Response: return flask.Response("Wrong code", 400) +@app.post("/send-mail-code-for-reset-password") +def send_mail_code_for_reset_password() -> flask.Response: + try: + mail = flask.request.form["mail"] + except KeyError: + return flask.Response("Mail missing", 422) + try: + MailHandler.send_code(mail) + utils.UserHandler.get_user_by_mail(mail) + except: + return flask.Response("Wrong mail/ mail doesn't exist", 404) + respose = flask.Response() + respose.set_cookie("mail", mail) + return respose + + +@app.post("/reset-password") +def reset_password() -> flask.Response: + try: + mail = flask.session["mail"] + except KeyError: + return flask.Response("mail not registered", 428) + try: + utils.UserHandler.reset_password(mail, flask.request.form["password"]) + except KeyError: + return flask.Response("password missing", 422) + return flask.Response() + + @app.post("/register-leader") def register_leader() -> flask.Response: try: @@ -70,10 +100,14 @@ def register_leader() -> flask.Response: flask.session["user_id"] = user_id except (TypeError, KeyError): return flask.Response("Something is missing", 422) - except sqlite3.IntegrityError: - return flask.Response("Mail or phone number already registered or phone number or pin code is not correct", 428) + except mariadb.DataError: + return flask.Response("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) + except mariadb.InterfaceError: + return flask.Response("Mail or phone taken", 428) + except mariadb.ProgrammingError: + pass try: utils.MailHandler.send_success_mail(mail) except: @@ -92,7 +126,8 @@ def login() -> flask.Response: assert utils.UserHandler.verify_password_by_mail(mail, password) flask.session["user_id"] = utils.UserHandler.get_user_by_mail(mail).user_id return flask.Response() - except KeyError: + except KeyError as e: + print(e) return flask.Response("Mail doesn't exist", 404) except AssertionError: return flask.Response("Wrong password", 400) @@ -102,7 +137,7 @@ def login() -> flask.Response: def get_id() -> flask.Response: try: return flask.Response(utils.UserHandler.get_user_by_id(flask.session["user_id"]).mail) - except KeyError: + except (KeyError, AssertionError): return flask.Response("Not logged in", 428) @@ -134,7 +169,7 @@ def register() -> flask.Response: return flask.Response("Not all details provided", 422) except AssertionError: return flask.Response("Max 4 members", 400) - except sqlite3.IntegrityError as error: + except mariadb.DataError as error: error_message = str(error) if error_message == "UNIQUE constraint failed: users.phone_number": return flask.Response("Phone number taken", 400) @@ -171,7 +206,7 @@ def update_ideas() -> flask.Response: team_id=team_id, **flask.request.form, )) - except KeyError: + except (KeyError, AssertionError): return flask.Response("Something is missing", 422) return flask.Response() diff --git a/backend/src/utils/team.py b/backend/src/utils/team.py index c77dbda..12cb363 100644 --- a/backend/src/utils/team.py +++ b/backend/src/utils/team.py @@ -66,14 +66,15 @@ class TeamHandler: @classmethod def create_team(cls, team_name: str) -> int: cls.init() - team = cls.__cursor.execute( + cls.__cursor.execute( """ INSERT INTO teams(team_name) VALUES(?) """, (team_name, ) ) + team_id = cls.__cursor.lastrowid cls.close() - return team.lastrowid if team.lastrowid else -1 + return team_id @classmethod def get_team_members(cls, team_id: int) -> list[int]: @@ -84,7 +85,8 @@ class TeamHandler: FROM users WHERE team_id = ?; """, (team_id, ) - ).fetchall() + ) + users = users.fetchall() if users else [] cls.close() return [user[0] for user in users] @@ -128,11 +130,13 @@ class TeamHandler: @classmethod def get_project(cls, team_id: int) -> Team: cls.init() - teams = cls.__cursor.execute( + cls.__cursor.execute( f""" SELECT * FROM teams WHERE team_id = ? """, (team_id, ) - ).fetchall()[0] + ) + teams = cls.__cursor + teams = teams.fetchall()[0] if teams else [] cls.close() return Team( teams[0], diff --git a/backend/src/utils/user.py b/backend/src/utils/user.py index c1511e6..755242d 100644 --- a/backend/src/utils/user.py +++ b/backend/src/utils/user.py @@ -1,6 +1,6 @@ +import mariadb import bcrypt from dataclasses import dataclass -import mariadb import utils @@ -17,7 +17,7 @@ class User: country: str taluk: str pin_code: int - phone_number: int + phone_number: str name: str team_id: int team_leader: int @@ -35,7 +35,7 @@ class User: country: str, taluk: str, pin_code: int|str, - phone_number: int|str, + phone_number: str, name: str, team_leader: bool|int|str, team_id: int|str, @@ -51,7 +51,7 @@ class User: self.country: str = country self.taluk: str = taluk self.pin_code: int = int(pin_code) - self.phone_number: int = int(phone_number) + self.phone_number = phone_number self.name = name self.team_id = int(team_id) self.team_leader = int(team_leader) @@ -134,7 +134,8 @@ class UserHandler: FROM users WHERE user_id = ?; """, (user_id, ) - ).fetchall() + ) + users = cls.__cursor.fetchall() assert users, f"{user_id} does not exist!" user = users[0] cls.close() @@ -158,13 +159,15 @@ class UserHandler: @classmethod def get_user_by_mail(cls, mail: str) -> User: + cls.init() users = cls.__cursor.execute( f""" SELECT * FROM users WHERE mail = ?; """, (mail, ) - ).fetchall() + ) + users = cls.__cursor.fetchall() if not users: raise KeyError(f"{mail} does not exist!") user = users[0] @@ -190,19 +193,20 @@ class UserHandler: @classmethod def verify_password_by_mail(cls, mail: str, password: str) -> bool: cls.init() - users = cls.__cursor.execute( + cls.__cursor.execute( f""" - SELECT password - FROM users WHERE mail = ?; + SELECT password FROM users WHERE mail='koshinhegde@gmail.com' """, (mail, ) - ).fetchall() + ) + users = cls.__cursor.fetchall() if not users: raise KeyError(f"{mail} does not exist!") + real_password: str = users[0][0] cls.close() return bcrypt.checkpw( password.encode("utf-8"), - users[0][0] + real_password.encode() ) @classmethod @@ -212,6 +216,22 @@ class UserHandler: cls.__cursor.execute( f""" DELETE FROM users WHERE mail=? - """, (mail, ) + """, + (mail, ) + ) + cls.close() + + @classmethod + def reset_password(cls, mail: int, password: str) -> None: + cls.init() + salt = bcrypt.gensalt() + encrypted_password = bcrypt.hashpw(password.encode("utf-8"), salt) + cls.__cursor.execute( + f""" + UPDATE users + SET password=? + WHERE mail=? + """, + (encrypted_password, mail, ) ) cls.close()