Compare commits
5 commits
Author | SHA1 | Date | |
---|---|---|---|
|
68768e3a99 | ||
|
3200238866 | ||
|
331a7b81b9 | ||
|
c8a02f58b5 | ||
|
739b981b4a |
4 changed files with 123 additions and 30 deletions
|
@ -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
BIN
favicon.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 9.3 KiB |
BIN
favicon.png
Normal file
BIN
favicon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 8.9 KiB |
106
main.py
106
main.py
|
@ -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,15 +34,76 @@ 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()
|
||||||
|
|
||||||
|
def lancement():
|
||||||
|
global lancement_affichage_ligne
|
||||||
|
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 = previous_account).place(x = 100, y = 500)
|
||||||
Button(root, text = ">", font=tkfont.Font(size = 30), command = next_account).place(x = 970, y = 500)
|
Button(root, text = ">", font=tkfont.Font(size = 30), command = next_account).place(x = 970, y = 500)
|
||||||
|
|
||||||
|
@ -43,7 +114,7 @@ def openfile(path):
|
||||||
|
|
||||||
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))
|
||||||
|
|
||||||
|
@ -64,16 +135,19 @@ def openfile(path):
|
||||||
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)
|
||||||
|
|
||||||
|
|
||||||
|
root.title(f"CSV PASSWORD VIEWER - {liste_name[curseur]}")
|
||||||
|
|
||||||
barre_de_recherche.bind("<Key>", barre_de_recherche_recup)
|
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)
|
||||||
|
|
||||||
|
|
Reference in a new issue