예제 #1
0
def SelectionFichier():
    """ Sélectionner le fichier à restaurer """
    # Demande l'emplacement du fichier
    wildcard = _(u"Sauvegarde Noethys (*.nod; *.noc)|*.nod;*.noc")
    standardPath = wx.StandardPaths.Get()
    rep = standardPath.GetDocumentsDir()
    dlg = wx.FileDialog(
        None,
        message=_(
            u"Veuillez sélectionner le fichier de sauvegarde à restaurer"),
        defaultDir=rep,
        defaultFile="",
        wildcard=wildcard,
        style=wx.FD_OPEN)
    if dlg.ShowModal() == wx.ID_OK:
        fichier = dlg.GetPath()
    else:
        return None
    dlg.Destroy()

    # Décryptage du fichier
    if fichier.endswith(".noc") == True:
        dlg = wx.PasswordEntryDialog(None,
                                     _(u"Veuillez saisir le mot de passe :"),
                                     _(u"Ouverture d'une sauvegarde cryptée"))
        if dlg.ShowModal() == wx.ID_OK:
            motdepasse = dlg.GetValue()
        else:
            dlg.Destroy()
            return None
        dlg.Destroy()
        fichierTemp = UTILS_Fichiers.GetRepTemp(fichier="savedecrypte.zip")
        resultat = UTILS_Cryptage_fichier.DecrypterFichier(
            fichier, fichierTemp, motdepasse)
        fichier = fichierTemp
        messageErreur = _(
            u"Le mot de passe que vous avez saisi semble erroné !")
    else:
        messageErreur = _(u"Le fichier de sauvegarde semble corrompu !")

    # Vérifie que le ZIP est ok
    valide = UTILS_Sauvegarde.VerificationZip(fichier)
    if valide == False:
        dlg = wx.MessageDialog(None, messageErreur, _(u"Erreur"),
                               wx.OK | wx.ICON_ERROR)
        dlg.ShowModal()
        dlg.Destroy()
        return None

    return fichier
예제 #2
0
def AnalyserFichier(nomFichier="", tailleFichier=None, typeTransfert=None):
    cheminFichier = UTILS_Fichiers.GetRepSync(nomFichier)
    listeAnomalies = []

    # Vérification de la taille du fichier
    if tailleFichier != None:
        tailleFinaleFichier = os.path.getsize(cheminFichier)
        if tailleFichier != tailleFinaleFichier:
            listeAnomalies.append((
                nomFichier,
                _(u"Le fichier n'a pas été téléchargé en intégralité (%d/%d)"
                  ) % (tailleFichier, tailleFinaleFichier)))
            os.remove(cheminFichier)
            return False

    # Décryptage du fichier
    if nomFichier.endswith(UTILS_Export_nomade.EXTENSION_CRYPTE):
        nouveauCheminFichier = cheminFichier.replace(
            UTILS_Export_nomade.EXTENSION_CRYPTE,
            UTILS_Export_nomade.EXTENSION_DECRYPTE)
        mdp = base64.b64decode(
            UTILS_Config.GetParametre("synchro_cryptage_mdp", defaut=""))
        resultat = UTILS_Cryptage_fichier.DecrypterFichier(
            cheminFichier, nouveauCheminFichier, mdp)
        os.remove(cheminFichier)
    else:
        nouveauCheminFichier = cheminFichier

    # Décompression du fichier
    if zipfile.is_zipfile(nouveauCheminFichier) == False:
        listeAnomalies.append(
            (nomFichier, _(u"Le fichier compressé ne semble pas valide.")))
        return False

    fichierZip = zipfile.ZipFile(nouveauCheminFichier, "r")
    buffer = fichierZip.read("database.dat")
    f = open(
        nouveauCheminFichier.replace(UTILS_Export_nomade.EXTENSION_DECRYPTE,
                                     ".dat"), "wb")
    #print "Ecriture du fichier ", nouveauCheminFichier.replace(UTILS_Export_nomade.EXTENSION_DECRYPTE, ".dat")
    f.write(buffer)
    f.close()
    fichierZip.close()
    os.remove(nouveauCheminFichier)

    #print "listeAnomalies=", listeAnomalies

    return True