def createFolder():
    # Chargement de la BD
    db = InviteUtils.loadJson()
    # Authentification
    userId = getUserId(db, request)
    if not userId:
        return Error("Utilisateur n'est pas connecté")
    # Obtention des infos
    folders = db["folder"]
    body = request.json
    folderName = body["name"]
    if not folderName:
        return Error("Le nom du dossier est requis")
    # Creation du dossier
    folderId = uuid.uuid4().hex
    newfolder = {
        "id": folderId,
        "name": folderName,
        "files": [],
        "invitedClients": [],
        "clients": [userId],
        "administrator": userId
    }
    folders.append(newfolder)
    # Sauvegarde de la BD
    InviteUtils.unloadJson(db)
    # Reponse a l'utilisateur
    return json.dumps(newfolder, indent=4)
def sendInvite(folderId):
    # 1 - OUVRIR LA BASE DE DONNEE
    jsondata = InviteUtils.loadJson()
    clientId = request.json["clientId"]

    folderId = folderId
    clientId = clientId

    if jsondata == None:
        return Error("Erreur lors de l'ouverture de la BD.")

    folders = jsondata["folder"]

    # 2 - VERIFIER SI LE DOSSIER EXISTE
    found, findex = InviteUtils.isExists(jsondata, folderId, "FOLDER")
    if not found:
        return Error("Erreur lors de la recherche du repertoire.")

    # 3 - VERIFIER SI LE CLIENT EXISTE
    found, cindex = InviteUtils.isExists(jsondata, clientId, "USER")
    if not found:
        return Error("Erreur lors de la recherche du client.")

    if not request.headers["Authorization"] in folders[findex]["administrator"]:
        return Error("Erreur le client n'a pas les droits.")

    #4 - ECRIRE DANS "INVITEDCLIENTS" SI PAS DEJA PRESENT
    if not clientId in folders[findex]["invitedClients"]:
        folders[findex]["invitedClients"].append(clientId)

    InviteUtils.unloadJson(jsondata)

    return Success("Invitation envoyée")
def changeAdmin(folderId):
    # Chargement de la BD
    db = InviteUtils.loadJson()
    # Authentification
    userId = getUserId(db, request)
    if not userId:
        return Error("Utilisateur n'est pas connecté")
    # Obtention des infos
    folders = db["folder"]
    folder = next(filter(lambda f: f["id"] == folderId, folders), None)
    body = request.json
    newAdminUserId = body["userId"]
    if folder["administrator"] is not userId:
        return Error("Seul l'administrateur peut modifier l'administrateur")
    if not newAdminUserId:
        return Error("L'id du nouvel admin est requis")
    users = db["user"]
    user = next(filter(lambda u: u["id"] == newAdminUserId, users), None)
    if not user:
        return Error("L'id du nouvel admin n'existe pas")
    # Remplacement de l'admin
    folder["administrator"] = newAdminUserId
    # Sauvegarde de la BD
    InviteUtils.unloadJson(db)
    # Reponse a l'utilisateur
    return Success("L'administrateur a été modifié")
def replaceFile(folderId, fileId):
    # Validations
    if 'file' not in request.files:
        return Error("Aucun fichier sélectionné")
    file = request.files['file']
    if file.filename == '':
        return Error("Aucun fichier sélectionné")

    # Chargement de la BD
    db = InviteUtils.loadJson()
    # Authentification
    userId = getUserId(db, request)
    if not userId:
        return Error("Utilisateur n'est pas connecté")
    # Obtention des infos
    folders = db['folder']
    folder = next(filter(lambda f: f["id"] == folderId, folders), None)
    fileEntry = next(filter(lambda f: f["id"] == fileId, folder["files"]),
                     None)
    if not fileEntry:
        return Error("Aucun fichier n'a cet id")
    filename = secure_filename(file.filename)
    # Sauvegarde du fichier sur le disque
    file.save(os.path.join(app.config['UPLOAD_FOLDER'], fileId))
    # Modification de l'entree du fichier
    fileEntry["name"] = filename
    # Sauvegarde de la BD
    InviteUtils.unloadJson(db)
    # Reponse a l'utilisateur
    return Success("Le fichier a été téléversé")
Beispiel #5
0
def replyInvite(userId, folderId):
    # 1 - OUVRIR LA BASE DE DONNEE
    jsondata = InviteUtils.loadJson()
    answer = int(flask.request.json["answer"])

    # 0 : FALSE
    # TRUE

    clientId = int(userId)
    folderId = int(folderId)

    # 2 - VERIFIER SI LE CLIENT EXISTE
    found, cindex = InviteUtils.isExists(jsondata, clientId, "USER")
    if not found:
        return Error("Erreur lors de la recherche du client.")

    # 3 - VERIFIER SI LE DOSSIER EXISTE
    found, findex = InviteUtils.isExists(jsondata, folderId, "FOLDER")
    if not found:
        return Error("Erreur lors de la recherche du repertoire.")

    folder = jsondata["folder"][findex]

    isclient = clientId in folder["clients"]
    isinvite = clientId in folder["invitedClients"]

    # 4 - VERIFIER LES DEMANDES DACCESS
    if not isinvite and not isclient:
        return Error("Le client n'a pas eu l'access au dossier.")
    
    # 5 - AJOUTER L'ACCES
    needwrite = False
    if isinvite:
        folder["invitedClients"].remove(clientId)
        needwrite = True
    
    if answer != 0 and not isclient:
        folder["clients"].append(clientId)
        needwrite = True
    
    if needwrite:
        InviteUtils.unloadJson(jsondata)

    if answer == 0:
        return Success("Acces enleve.")
    return Success("Acces ajoute.")
def deleteFile(folderId, fileId):
    # Chargement de la BD
    db = InviteUtils.loadJson()
    # Authentification
    userId = getUserId(db, request)
    if not userId:
        return Error("Utilisateur n'est pas connecté")
    # Obtention des infos
    folders = db['folder']
    folder = next(filter(lambda f: f["id"] == folderId, folders), None)
    fileEntry = next(filter(lambda f: f["id"] == fileId, folder["files"]),
                     None)
    if not fileEntry:
        return Error("Aucun fichier n'a cet id")
    # Suppression de l'entree du fichier dans la BD
    newFilesArray = list(filter(lambda f: f["id"] != fileId, folder["files"]))
    folder["files"] = newFilesArray
    # Suppression du fichier sur le disque
    os.remove(os.path.join(app.config['UPLOAD_FOLDER'], fileId))
    # Sauvegarde de la BD
    InviteUtils.unloadJson(db)
    # Reponse a l'utilisateur
    return Success("Le fichier a été supprimé")