ClipSync/Server/app.py
2023-12-18 12:10:16 +01:00

166 lines
5.1 KiB
Python

#!/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/<notifid>", 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/<clipid>", 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)