166 lines
5.1 KiB
Python
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)
|