Compare commits

..

5 commits
1.0 ... master

Author SHA1 Message Date
Mylloon
68768e3a99
Update README.md 2020-08-05 18:47:12 +02:00
Mylloon
3200238866
add favicon 2020-08-05 18:45:52 +02:00
Mylloon
331a7b81b9
Add files via upload
Oops
2020-08-05 17:47:53 +02:00
Mylloon
c8a02f58b5
Add files via upload
+ Ajout du nom du compte en titre de fenêtre
+ Compatibilité avec Firefox et Chrome
* Fix de bugs graphiques
2020-08-05 17:39:51 +02:00
Mylloon
739b981b4a
Update README.md 2020-08-05 11:00:46 +02:00
4 changed files with 123 additions and 30 deletions

View file

@ -1,2 +1,7 @@
# Csv-Password-Viewer # Csv-Password-Viewer
Permet de voir tous ses mots de passes stockés dans un fichier csv facilement, et d'accéder aux sites correspondant au compte stockés. Permet de voir tous ses mots de passes stockés dans un fichier csv facilement, et d'accéder aux sites correspondant au compte stockés.
Fonctionne avec les csv fourni par :
- BitWarden
- Firefox
- Chrome

BIN
favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

BIN
favicon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

148
main.py
View file

@ -1,4 +1,4 @@
from tkinter import Tk, filedialog, Button, Label, Entry from tkinter import Tk, filedialog, Button, Label, Entry, PhotoImage
import tkinter.font as tkfont import tkinter.font as tkfont
import csv import csv
import webbrowser import webbrowser
@ -7,13 +7,23 @@ from tkinter.messagebox import showinfo
# Commandes # Commandes
def select_file(): def select_file():
path_file = filedialog.askopenfilename(initialdir = "/", title = "Select file", filetypes = (("Fichier csv", "*.csv"), ("Fichier json (non pris en charge)", "*.json"))) path_file = filedialog.askopenfilename(initialdir = "/", title = "Select file", filetypes = (("Fichier csv", "*.csv"), ("Tous les fichiers (non supporté)", "*.*")))
openfile(path_file) openfile(path_file)
def openfile(path): def openfile(path):
global list_url, list_user, list_pass, curseur, line_count with open(path, "r") as file:
global affichage_url, affichage_user, affichage_pass, affichage_curseur premiere_ligne = file.readline()
global barre_de_recherche if premiere_ligne == "folder,favorite,type,name,notes,fields,login_uri,login_username,login_password,login_totp\n":
openfile_bitwarden(path)
elif premiere_ligne == '"url","username","password","httpRealm","formActionOrigin","guid","timeCreated","timeLastUsed","timePasswordChanged"\n':
openfile_firefox(path)
elif premiere_ligne == "name,url,username,password\n":
openfile_chrome(path)
else:
showinfo("Erreur", "Ce format de fichier csv n'est pas reconnu.\nMerci d'utilisé Firefox ou Bitwarden.")
def openfile_chrome(path):
global list_url, list_user, list_pass, line_count, liste_name
for item in root.grid_slaves(): for item in root.grid_slaves():
item.destroy() item.destroy()
@ -24,56 +34,120 @@ def openfile(path):
list_url = [] list_url = []
list_user = [] list_user = []
list_pass = [] list_pass = []
liste_name = []
for row in csv_reader: for row in csv_reader:
if line_count != 0: if line_count != 0:
liste_name.append(row[0])
list_url.append(row[1])
list_user.append(row[2])
list_pass.append(row[3])
line_count += 1
line_count -= 1
lancement()
def openfile_firefox(path):
global list_url, list_user, list_pass, line_count, liste_name
for item in root.grid_slaves():
item.destroy()
with open(path) as csv_file:
csv_reader = csv.reader(csv_file, delimiter = ',')
line_count = 0
list_url = []
list_user = []
list_pass = []
liste_name = []
for row in csv_reader:
if line_count > 1:
liste_name.append(row[0]) # pas de nom, alors ce sera l'URL
list_url.append(row[0])
list_user.append(row[1])
list_pass.append(row[2])
line_count += 1
line_count -= 2
lancement()
def openfile_bitwarden(path):
global list_url, list_user, list_pass, line_count, liste_name
for item in root.grid_slaves():
item.destroy()
with open(path) as csv_file:
csv_reader = csv.reader(csv_file, delimiter = ',')
line_count = 0
list_url = []
list_user = []
list_pass = []
liste_name = []
for row in csv_reader:
if line_count != 0:
liste_name.append(row[3])
list_url.append(row[6]) list_url.append(row[6])
list_user.append(row[7]) list_user.append(row[7])
list_pass.append(row[8]) list_pass.append(row[8])
line_count += 1 line_count += 1
line_count -= 1 line_count -= 1
Label(root, text = f"Il y a {line_count} comptes.", font = tkfont.Font(size = 20)).place(x = 460, y = 30) lancement()
Button(root, text = "<", font=tkfont.Font(size = 30), command = previous_account).place(x = 100, y = 500)
Button(root, text = ">", font=tkfont.Font(size = 30), command = next_account).place(x = 970, y = 500)
Label(root, text = "URL :", font = tkfont.Font(size = 10)).place(x = 150, y = 180) def lancement():
Label(root, text = "User :", font = tkfont.Font(size = 10)).place(x = 145, y = 250) global lancement_affichage_ligne
Label(root, text = "Password :", font = tkfont.Font(size = 10)).place(x = 120, y = 320) global barre_de_recherche
global affichage_url, affichage_user, affichage_pass, affichage_curseur, curseur
global root
clear_second_lancement()
lancement_affichage_ligne = Label(root, text = f"Il y a {line_count} comptes.", font = tkfont.Font(size = 20))
lancement_affichage_ligne.place(x = 460, y = 30)
Button(root, text = "<", font=tkfont.Font(size = 30), command = previous_account).place(x = 100, y = 500)
Button(root, text = ">", font=tkfont.Font(size = 30), command = next_account).place(x = 970, y = 500)
Label(root, text = "URL :", font = tkfont.Font(size = 10)).place(x = 150, y = 180)
Label(root, text = "User :", font = tkfont.Font(size = 10)).place(x = 145, y = 250)
Label(root, text = "Password :", font = tkfont.Font(size = 10)).place(x = 120, y = 320)
curseur = 0 curseur = 0
affichage_url = Label(root, text = list_url[curseur], font = tkfont.Font(size = 40)) affichage_url = Label(root, text = list_url[curseur], font = tkfont.Font(size = 40, underline = True), fg = "blue", cursor = "hand2")
affichage_user = Entry(root, font = tkfont.Font(size = 40)) affichage_user = Entry(root, font = tkfont.Font(size = 40))
affichage_pass = Entry(root, font = tkfont.Font(size = 40)) affichage_pass = Entry(root, font = tkfont.Font(size = 40))
affichage_user.insert(0, list_user[curseur]) affichage_user.insert(0, list_user[curseur])
affichage_pass.insert(0, list_pass[curseur]) affichage_pass.insert(0, list_pass[curseur])
affichage_url.bind("<Button-1>", callback) affichage_url.bind("<Button-1>", callback)
affichage_url.place(x = 200, y = 160) affichage_url.place(x = 200, y = 160)
affichage_user.place(x = 200, y = 230) affichage_user.place(x = 200, y = 230)
affichage_pass.place(x = 200, y = 300) affichage_pass.place(x = 200, y = 300)
affichage_curseur = Label(root, text = "Compte numéro 1", font = tkfont.Font(size = 15)) affichage_curseur = Label(root, text = "Compte numéro 1", font = tkfont.Font(size = 15))
affichage_curseur.place(x = 500, y = 500) affichage_curseur.place(x = 500, y = 500)
barre_de_recherche = Entry(root, font = tkfont.Font(size = 15), width = len(str(line_count))) barre_de_recherche = Entry(root, font = tkfont.Font(size = 15), width = len(str(line_count)))
boutton_recherche = Button(root, text = "Rechercher", command = lambda:recherche(barre_de_recherche.get())) boutton_recherche = Button(root, text = "Rechercher", command = lambda:recherche(barre_de_recherche.get()))
barre_de_recherche.place(x = 120, y = 10) barre_de_recherche.place(x = 120, y = 10)
boutton_recherche.place(x = 40, y = 10) boutton_recherche.place(x = 40, y = 10)
barre_de_recherche.bind("<Key>", barre_de_recherche_recup)
root.title(f"CSV PASSWORD VIEWER - {liste_name[curseur]}")
barre_de_recherche.bind("<Key>", barre_de_recherche_recup)
def affichage(): def affichage():
global affichage_url, affichage_user, affichage_pass, affichage_curseur global affichage_url, affichage_user, affichage_pass, affichage_curseur, root
affichage_url.destroy() affichage_url.destroy()
affichage_user.destroy() affichage_user.destroy()
affichage_pass.destroy() affichage_pass.destroy()
affichage_curseur.destroy() affichage_curseur.destroy()
affichage_url = Label(root, text = list_url[curseur], font = tkfont.Font(size = 40)) affichage_url = Label(root, text = list_url[curseur], font = tkfont.Font(size = 40, underline = True), fg = "blue", cursor = "hand2")
affichage_user = Entry(root, font = tkfont.Font(size = 40)) affichage_user = Entry(root, font = tkfont.Font(size = 40))
affichage_pass = Entry(root, font = tkfont.Font(size = 40)) affichage_pass = Entry(root, font = tkfont.Font(size = 40))
@ -89,6 +163,19 @@ def affichage():
affichage_curseur = Label(root, text = f"Compte numéro {curseur+1}", font = tkfont.Font(size = 15)) affichage_curseur = Label(root, text = f"Compte numéro {curseur+1}", font = tkfont.Font(size = 15))
affichage_curseur.place(x = 500, y = 500) affichage_curseur.place(x = 500, y = 500)
root.title(f"CSV PASSWORD VIEWER - {liste_name[curseur]}")
def clear_second_lancement():
global lancement_affichage_ligne, affichage_url, affichage_curseur, barre_de_recherche
try:
lancement_affichage_ligne.destroy()
affichage_url.destroy()
affichage_curseur.destroy()
barre_de_recherche.destroy()
except:
pass
def previous_account(): def previous_account():
global curseur global curseur
if curseur > 0: if curseur > 0:
@ -133,6 +220,7 @@ root=Tk()
root.geometry("1100x600") root.geometry("1100x600")
root.title("CSV PASSWORD VIEWER") root.title("CSV PASSWORD VIEWER")
root.resizable(False, False) root.resizable(False, False)
root.iconphoto(False, PhotoImage(file='favicon.png'))
Button(root, text = "Browser file", command = select_file).place(x = 1000, y = 10) Button(root, text = "Browser file", command = select_file).place(x = 1000, y = 10)