#!/bin/python import hashlib import sqlite3 import secrets import time import flask_socketio from flask import Flask, request from Models.BaseModels.DB import BaseDb # base sock app = Flask(__name__) socketio = flask_socketio.SocketIO(app) db_to_use = "mongodb" db: BaseDb = None @app.route("/user", methods=['POST']) def auth(): """ Authentifie un user, simple, basique "username" "password" """ token = db.authentificate_user(request.values.get("username"), request.values.get("password")) if token is False: return {"status": "This user does not exist or the password is \ incorrect"}, 404 else: return {"status": "ok", "token": token} @app.route("/user", methods=['PUT']) def register(): """ inscrit un user, simple, basique "username" "password" """ username = request.values.get("username") password = request.values.get("password") status = db.register(username, password) if status is False: return {"status": "Error, most likely username already taken"}, 500 return {"status": "ok"}, 200 ############################################################################### @app.route("/notification", methods=['PUT']) def add_notification(): """ Le but de cet app se resume a cette fonction, elle recoit une requete http et renvoie via le websocket le contenu de la requette a tout les client. """ token = request.values.get("token") title = request.values.get('title') content = request.values.get('content') device_name = request.values.get('deviceName') date = time.time() if db.add_notification(token, title, content, device_name) is False: return {"status": "Error, no user"}, 500 else: socketio.emit("NotificationUpdate", data={"device_name": device_name}) return {"status": "ok"}, 200 @app.route("/notification", methods=['GET']) def get_notifications(): """ Le but de cet app se resume a cette fonction, elle recoit une requete http et renvoie via le websocket le contenu de la requette a tout les client. """ token = request.values.get("token") notifications = db.get_notification(token) if notifications is False: return {"status": "Error, no user"}, 500 data = {"status": "ok"} notifications = [notif.__dict__ for notif in notifications] data["notifications"] = notifications return data, 200 @app.route("/notification/", methods=['GET']) def get_notification_by_id(notifid): """ Le but de cet app se resume a cette fonction, elle recoit une requete http et renvoie via le websocket le contenu de la requette a tout les client. """ notifid = int(notifid) token = request.values.get("token") notification = db.get_notification_by_id(token, notifid) if notification is False: return {"status": "Error, no user"}, 500 data = {"status": "ok"} data["notification"] = notification.__dict__ return data, 200 ############################################################################### @app.route("/clipboard", methods=['PUT']) def add_clipboard(): """ Le but de cet app se resume a cette fonction, elle recoit une requete http et renvoie via le websocket le contenu de la requette a tout les clients. """ token = request.values.get("token") content = request.values.get('content') device_name = request.values.get('deviceName') if db.add_clipboard(token, content, device_name) is False: return {"status": "Error, no user"}, 500 else: socketio.emit("ClipboardUpdate", data={"device_name": device_name}) return {"status": "ok"}, 200 @app.route("/clipboard", methods=['GET']) def get_clipboard(): """ Le but de cet app se resume a cette fonction, elle recoit une requete http et renvoie via le websocket le contenu de la requette a tout les client. """ token = request.values.get("token") clipboard = db.get_clipboard(token) if clipboard is False: return {"status": "Error, no user"}, 500 clipboard = [clip.__dict__ for clip in clipboard] return {"status": "ok", "clipboard": clipboard}, 200 @app.route("/clipboard/", methods=['GET']) def get_clipboard_by_id(clipid): """ Le but de cet app se resume a cette fonction, elle recoit une requete http et renvoie via le websocket le contenu de la requette a tout les client. """ clipid = int(clipid) token = request.values.get("token") clipboard = db.get_clipboard_by_id(token, clipid) if clipboard is False: return {"status": "Error, no user"}, 500 clipboard = clipboard.__dict__ return {"status": "ok", "clipboard": clipboard}, 200 if __name__ == '__main__': match db_to_use: case "mongodb": from Models.MongoDb.mongodb import Mongo db:BaseDb = Mongo() case "sqlite": from Models.SQLite.sqlite import SQLite db:BaseDb = SQLite() case _: print("undefined db") exit() socketio.run(app, host="0.0.0.0", port=9564)