From f55581d374dd607785b74a807f155200e0c6614d Mon Sep 17 00:00:00 2001 From: Dan-I-El Date: Thu, 8 Feb 2024 01:02:57 +0200 Subject: [PATCH 01/13] Db encryption class started --- passman/intro.py | 32 ++++++++++++++++++++++++++++++++ passman/password.py | 14 ++++++++++++++ passman/tempCodeRunnerFile.py | 2 -- 3 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 passman/intro.py delete mode 100644 passman/tempCodeRunnerFile.py diff --git a/passman/intro.py b/passman/intro.py new file mode 100644 index 0000000..395b402 --- /dev/null +++ b/passman/intro.py @@ -0,0 +1,32 @@ +import tkinter as tk +import sqlite3 +import style +from widget_generators import * +from database import DatabaseConnection +from pysqlitecypher import sqlitewrapper +import helper_functions + + +class WindowWelcome(tk.Toplevel): + + def __init__(self): + + self.db = sqlitewrapper.SqliteCipher( + dataBasePath="passman.db", + checkSameThread=False, + password=None + ) + + self.db.createTable("passman", + [ + ["password_address", "TEXT"], + ["password_name", "TEXT"], + ["password", "TEXT"], + ["password_description", "TEXT"], + ["password_update", "TEXT"] + ], + makeSecure=True, + commit=True + ) + + self.db.insertIntoTable(tableName , insertList , commit = True) \ No newline at end of file diff --git a/passman/password.py b/passman/password.py index cce820a..875ec12 100644 --- a/passman/password.py +++ b/passman/password.py @@ -3,9 +3,23 @@ import style from widget_generators import * from database import DatabaseConnection +from pysqlitecypher import sqlitewrapper import helper_functions +# class WindowWelcome(tk.Toplevel): + +# def __init__(self): + +# self.db = sqlitewrapper.SqliteCipher( +# dataBasePath="passman.db", +# checkSameThread=False, +# password=None +# ) + + + + class WindowNewPassword(tk.Toplevel): def __init__(self, parent): diff --git a/passman/tempCodeRunnerFile.py b/passman/tempCodeRunnerFile.py deleted file mode 100644 index 833c3de..0000000 --- a/passman/tempCodeRunnerFile.py +++ /dev/null @@ -1,2 +0,0 @@ - - def __initialize_main_window(self): \ No newline at end of file From 84c0e02c96ec99b2d67a2dd56e66a9edd7cda6a8 Mon Sep 17 00:00:00 2001 From: Dan-I-El Date: Thu, 8 Feb 2024 15:28:03 +0200 Subject: [PATCH 02/13] some methods added --- passman/intro.py | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/passman/intro.py b/passman/intro.py index 395b402..d8c1b5e 100644 --- a/passman/intro.py +++ b/passman/intro.py @@ -7,17 +7,21 @@ import helper_functions +TABLE_NAME = "passman" + + class WindowWelcome(tk.Toplevel): def __init__(self): + self.db = sqlitewrapper.SqliteCipher( dataBasePath="passman.db", checkSameThread=False, password=None ) - self.db.createTable("passman", + self.db.createTable(TABLE_NAME, [ ["password_address", "TEXT"], ["password_name", "TEXT"], @@ -27,6 +31,23 @@ def __init__(self): ], makeSecure=True, commit=True - ) + ) - self.db.insertIntoTable(tableName , insertList , commit = True) \ No newline at end of file + self.db.insertIntoTable(TABLE_NAME , + [ + ["hh.ee", "haha", "12345678", "this password's description"], + ["asdfg.com", "asdfg", "123412", "other description"] + ] , + commit=True + ) + + self.db.getDataFromTable(TABLE_NAME, raiseConversionError=False, omitID=False) + + # change raiseError to the True in the future + self.db.deleteDataInTable(TABLE_NAME , 5 , commit = True, raiseError = False, updateId=True) + + + self.db.updateIDs(tableName , commit = True) + + + self.db.updateInTable(tableName , iDValue , colName , colValue , commit = True , raiseError = True) \ No newline at end of file From 126da0eb08c20e8976d6c07355102b6c81c326b2 Mon Sep 17 00:00:00 2001 From: Dan-I-El Date: Fri, 9 Feb 2024 14:12:29 +0200 Subject: [PATCH 03/13] pysqlitecipher changed to peewee --- passman/database.py | 2 +- passman/intro.py | 38 +------------------------------------- passman/models.py | 36 ++++++++++++++++++++++++++++++++++++ 3 files changed, 38 insertions(+), 38 deletions(-) create mode 100644 passman/models.py diff --git a/passman/database.py b/passman/database.py index fa5ecc0..55ade93 100644 --- a/passman/database.py +++ b/passman/database.py @@ -5,7 +5,7 @@ class DatabaseConnection: def __init__(self) -> None: - + # durectory should be C:\Users\\AppData\Roaming\ self.connection = sqlite3.connect("passman.db") self.cursor = self.connection.cursor() diff --git a/passman/intro.py b/passman/intro.py index d8c1b5e..d8d5dfc 100644 --- a/passman/intro.py +++ b/passman/intro.py @@ -14,40 +14,4 @@ class WindowWelcome(tk.Toplevel): def __init__(self): - - self.db = sqlitewrapper.SqliteCipher( - dataBasePath="passman.db", - checkSameThread=False, - password=None - ) - - self.db.createTable(TABLE_NAME, - [ - ["password_address", "TEXT"], - ["password_name", "TEXT"], - ["password", "TEXT"], - ["password_description", "TEXT"], - ["password_update", "TEXT"] - ], - makeSecure=True, - commit=True - ) - - self.db.insertIntoTable(TABLE_NAME , - [ - ["hh.ee", "haha", "12345678", "this password's description"], - ["asdfg.com", "asdfg", "123412", "other description"] - ] , - commit=True - ) - - self.db.getDataFromTable(TABLE_NAME, raiseConversionError=False, omitID=False) - - # change raiseError to the True in the future - self.db.deleteDataInTable(TABLE_NAME , 5 , commit = True, raiseError = False, updateId=True) - - - self.db.updateIDs(tableName , commit = True) - - - self.db.updateInTable(tableName , iDValue , colName , colValue , commit = True , raiseError = True) \ No newline at end of file + pass \ No newline at end of file diff --git a/passman/models.py b/passman/models.py new file mode 100644 index 0000000..c910b5c --- /dev/null +++ b/passman/models.py @@ -0,0 +1,36 @@ +from peewee import * +from datetime import datetime + + +db = SqliteDatabase("passman.db") + + +class Password(Model): + + password_address = CharField() + + password_name = CharField() + + password = CharField() + + password_description = TextField() + + password_update = DateTimeField(default=datetime.now()) + + + class Meta: + + database = db + + +db.connect() + +db.create_tables([Password]) + +example1 = Password.create(password_address="hh.ee", password_name="gaga", password="01234567", password_description="this password's description") + +example1.save() + +example2 = Password.create(password_address="asdfg.com", password_name="asdfg", password="123412", password_description="other description") + +example2.save() \ No newline at end of file From 90dca8c1623fd8fa7efb3ea6e7de58df53a8d2fc Mon Sep 17 00:00:00 2001 From: Dan-I-El Date: Sat, 10 Feb 2024 02:46:16 +0200 Subject: [PATCH 04/13] new features added --- passman/intro.py | 8 ++++---- passman/models.py | 12 ++++-------- 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/passman/intro.py b/passman/intro.py index d8d5dfc..47b503b 100644 --- a/passman/intro.py +++ b/passman/intro.py @@ -1,17 +1,17 @@ import tkinter as tk import sqlite3 import style +import models as md from widget_generators import * -from database import DatabaseConnection -from pysqlitecypher import sqlitewrapper +import database as dc import helper_functions TABLE_NAME = "passman" -class WindowWelcome(tk.Toplevel): +class WindowIntro(tk.Toplevel): def __init__(self): - pass \ No newline at end of file + dc.create_passwords_table() \ No newline at end of file diff --git a/passman/models.py b/passman/models.py index c910b5c..944c4a5 100644 --- a/passman/models.py +++ b/passman/models.py @@ -23,14 +23,10 @@ class Meta: database = db -db.connect() +# example1 = Password.create(password_address="hh.ee", password_name="gaga", password="01234567", password_description="this password's description") -db.create_tables([Password]) +# example1.save() -example1 = Password.create(password_address="hh.ee", password_name="gaga", password="01234567", password_description="this password's description") +# example2 = Password.create(password_address="asdfg.com", password_name="asdfg", password="123412", password_description="other description") -example1.save() - -example2 = Password.create(password_address="asdfg.com", password_name="asdfg", password="123412", password_description="other description") - -example2.save() \ No newline at end of file +# example2.save() \ No newline at end of file From 00f520c7a214feb0ac2c35df60b0545e19aaa1bb Mon Sep 17 00:00:00 2001 From: Dan-I-El Date: Sat, 10 Feb 2024 21:30:31 +0200 Subject: [PATCH 05/13] ORP partially implemented --- passman/database.py | 47 +++++++++++++++----------- passman/models.py | 9 ----- passman/password.py | 63 +++++++++++++++++------------------ passman/root.py | 16 ++++----- passman/tempCodeRunnerFile.py | 1 + 5 files changed, 66 insertions(+), 70 deletions(-) create mode 100644 passman/tempCodeRunnerFile.py diff --git a/passman/database.py b/passman/database.py index 55ade93..56b0a7f 100644 --- a/passman/database.py +++ b/passman/database.py @@ -1,53 +1,60 @@ import tkinter as tk import sqlite3 +import models as md class DatabaseConnection: def __init__(self) -> None: # durectory should be C:\Users\\AppData\Roaming\ - self.connection = sqlite3.connect("passman.db") + md.db.connect() - self.cursor = self.connection.cursor() + self.create_passwords_table() - def fetch_data(self): - - SQL_query = "SELECT password_name, password_address FROM passman" + + def create_passwords_table(self): try: - self.cursor.execute("CREATE TABLE passman (id INTEGER PRIMARY KEY AUTOINCREMENT, password_address TEXT, password_name TEXT, password TEXT, password_description TEXT DEFAULT NULL, password_update DATETIME DEFAULT CURRENT_TIMESTAMP)") # How to add timestamp? + md.db.create_tables([md.Password]) - self.connection.commit() + except: - for row in self.cursor.execute("SELECT * FROM passman;"): + print("Such table already exists") - print(row) + def add_password(self, new_p_address, new_p_name, new_p, new_p_description): - except: + new_password = md.Password.create( + password_address=new_p_address, + password_name=new_p_name, + password=new_p, + password_description=new_p_description + ) + + new_password.save() - print("Such table already exists") - db_data = self.cursor.execute(SQL_query) + def fetch_data(self): + + db_data = md.Password.select(md.Password.password_name, md.Password.password_address) return db_data - def fetch_password_data(self, sql_query, password_data, description_field): - - data = self.cursor.execute(sql_query) + def fetch_password_data(self, sql_data): - fetched_data = data.fetchall() + password_data = sql_data.split() - password_data.set(fetched_data[0][0]) + result = md.Password.select().where(md.Password.password_name == password_data[0] & md.Password.password_address == password_data[1]) - description_field.delete("1.0", tk.END) + return result - description_field.insert(tk.END, fetched_data[0][1]) + def delete_password(self, sql_data): + pass def __del__(self) -> None: - self.connection.close() \ No newline at end of file + md.db.close() \ No newline at end of file diff --git a/passman/models.py b/passman/models.py index 944c4a5..1e2e523 100644 --- a/passman/models.py +++ b/passman/models.py @@ -21,12 +21,3 @@ class Password(Model): class Meta: database = db - - -# example1 = Password.create(password_address="hh.ee", password_name="gaga", password="01234567", password_description="this password's description") - -# example1.save() - -# example2 = Password.create(password_address="asdfg.com", password_name="asdfg", password="123412", password_description="other description") - -# example2.save() \ No newline at end of file diff --git a/passman/password.py b/passman/password.py index 875ec12..ea59d63 100644 --- a/passman/password.py +++ b/passman/password.py @@ -3,7 +3,6 @@ import style from widget_generators import * from database import DatabaseConnection -from pysqlitecypher import sqlitewrapper import helper_functions @@ -160,38 +159,38 @@ def __init__(self, parent): self.mainloop() - def __save_new_password(self): + # def __save_new_password(self): - password_address_value = self.new_password_address.get() + # password_address_value = self.new_password_address.get() - password_name_value = self.new_password_name.get() + # password_name_value = self.new_password_name.get() - password_field_value = self.new_password_field.get() + # password_field_value = self.new_password_field.get() - password_description_value = self.new_password_field.get() + # password_description_value = self.new_password_field.get() - new_password_data = [(password_address_value, password_name_value, password_field_value, password_description_value)] + # new_password_data = [(password_address_value, password_name_value, password_field_value, password_description_value)] - connection = sqlite3.connect("passman.db") + # connection = sqlite3.connect("passman.db") - cursor = connection.cursor() + # cursor = connection.cursor() - cursor.executemany("INSERT INTO passman (password_address, password_name, password, password_description) VALUES (?,?,?,?)", new_password_data) + # cursor.executemany("INSERT INTO passman (password_address, password_name, password, password_description) VALUES (?,?,?,?)", new_password_data) - connection.commit() + # connection.commit() - connection.close() + # connection.close() - self.parent.password_list.insert(tk.END, password_name_value + " " + password_address_value) + # self.parent.password_list.insert(tk.END, password_name_value + " " + password_address_value) - self.window_message = NotificationGenerator( - title = "Notification", - text="Password successfully added", - ) + # self.window_message = NotificationGenerator( + # title = "Notification", + # text="Password successfully added", + # ) - self.window_message.mainloop() + # self.window_message.mainloop() - self.destroy() + # self.destroy() def __cancel_new_password(self): @@ -241,29 +240,29 @@ def __init__(self, parent): height=25 ) - def confirm_password_deletion(self): + # def confirm_password_deletion(self): - self.parent.password_list.delete(0, tk.END) + # self.parent.password_list.delete(0, tk.END) - password_values_list = self.parent.password_list_value.split() + # password_values_list = self.parent.password_list_value.split() - connection = sqlite3.connect("passman.db") + # connection = sqlite3.connect("passman.db") - cursor = connection.cursor() + # cursor = connection.cursor() - cursor.execute(f"DELETE FROM passman WHERE password_name = '{password_values_list[0]}' AND password_address = '{password_values_list[1]}';") + # cursor.execute(f"DELETE FROM passman WHERE password_name = '{password_values_list[0]}' AND password_address = '{password_values_list[1]}';") - connection.commit() + # connection.commit() - listbox_data = cursor.execute("SELECT password_name, password_address FROM passman;") + # listbox_data = cursor.execute("SELECT password_name, password_address FROM passman;") - for row in listbox_data: + # for row in listbox_data: - self.parent.password_list.insert(tk.END, f"{row[0]} {row[1]}") + # self.parent.password_list.insert(tk.END, f"{row[0]} {row[1]}") - connection.close() + # connection.close() - self.notification_window = NotificationGenerator(text="Password successfully deleted!") + # self.notification_window = NotificationGenerator(text="Password successfully deleted!") - self.window_delete_password.destroy() + # self.window_delete_password.destroy() \ No newline at end of file diff --git a/passman/root.py b/passman/root.py index c00c337..f49e911 100644 --- a/passman/root.py +++ b/passman/root.py @@ -1,6 +1,6 @@ import tkinter as tk import style -from database import * +from database import DatabaseConnection from widget_generators import * from password import WindowNewPassword, WindowDeletePassword from helper_functions import toggle_password @@ -15,9 +15,9 @@ def __init__(self): self.__initialize_main_window() - self.__initialize_password_list_frame() + self.dc = DatabaseConnection() self.__fill_listbox() @@ -77,10 +77,8 @@ def __initialize_password_list_frame(self): def __fill_listbox(self): self.password_list.delete(0, tk.END) - - db = DatabaseConnection() - listbox_data = db.fetch_data() + listbox_data = self.dc.fetch_data() for row in listbox_data: @@ -204,13 +202,13 @@ def __get_password(self, *args): self.password_list_value = self.password_list.get(self.password_list.curselection()) - current_password = self.password_list_value.split() + password_data = self.dc.fetch_password_data(self.password_list.value) - SQL_query_password_data = f"SELECT password, password_description FROM passman WHERE password_name = '{current_password[0]}' AND password_address = '{current_password[1]}';" + self.password_value.set(password_data[0][0]) - db = DatabaseConnection() + self.password_description.delete("1.0", tk.END) - db.fetch_password_data(SQL_query_password_data, self.password_value, self.password_description) + self.password_description.insert(tk.END, password_data[0][1]) self.button_update_password.config(state="normal") diff --git a/passman/tempCodeRunnerFile.py b/passman/tempCodeRunnerFile.py new file mode 100644 index 0000000..289310a --- /dev/null +++ b/passman/tempCodeRunnerFile.py @@ -0,0 +1 @@ +Database \ No newline at end of file From c7288204aa1e5bee7b003fa205c9f549b7a5128f Mon Sep 17 00:00:00 2001 From: Dan-I-El Date: Fri, 16 Feb 2024 02:15:22 +0200 Subject: [PATCH 06/13] New password addition overwritten --- passman/database.py | 2 -- passman/password.py | 37 +++++++++++++------------------------ 2 files changed, 13 insertions(+), 26 deletions(-) diff --git a/passman/database.py b/passman/database.py index 56b0a7f..1846c69 100644 --- a/passman/database.py +++ b/passman/database.py @@ -1,5 +1,3 @@ -import tkinter as tk -import sqlite3 import models as md diff --git a/passman/password.py b/passman/password.py index ea59d63..92271a3 100644 --- a/passman/password.py +++ b/passman/password.py @@ -1,5 +1,4 @@ import tkinter as tk -import sqlite3 import style from widget_generators import * from database import DatabaseConnection @@ -159,38 +158,28 @@ def __init__(self, parent): self.mainloop() - # def __save_new_password(self): + def __save_new_password(self): - # password_address_value = self.new_password_address.get() + password_address_value = self.new_password_address.get() - # password_name_value = self.new_password_name.get() + password_name_value = self.new_password_name.get() - # password_field_value = self.new_password_field.get() + password_field_value = self.new_password_field.get() - # password_description_value = self.new_password_field.get() + password_description_value = self.new_password_field.get() - # new_password_data = [(password_address_value, password_name_value, password_field_value, password_description_value)] + self.parent.dc.add_password(password_address_value, password_name_value, password_field_value, password_description_value) - # connection = sqlite3.connect("passman.db") - - # cursor = connection.cursor() - - # cursor.executemany("INSERT INTO passman (password_address, password_name, password, password_description) VALUES (?,?,?,?)", new_password_data) - - # connection.commit() + self.parent.password_list.insert(tk.END, password_name_value + " " + password_address_value) - # connection.close() - - # self.parent.password_list.insert(tk.END, password_name_value + " " + password_address_value) - - # self.window_message = NotificationGenerator( - # title = "Notification", - # text="Password successfully added", - # ) + self.window_message = NotificationGenerator( + title = "Notification", + text="Password successfully added", + ) - # self.window_message.mainloop() + self.window_message.mainloop() - # self.destroy() + self.destroy() def __cancel_new_password(self): From 23f8dd8dee5da6cd50d9b23795ecf886a8d87abe Mon Sep 17 00:00:00 2001 From: Dan-I-El Date: Mon, 19 Feb 2024 12:07:59 +0200 Subject: [PATCH 07/13] Implemented ORM to password deletion --- passman/database.py | 8 +++++--- passman/password.py | 26 +++++++++----------------- passman/root.py | 8 ++++---- tests/db_tests.py | 2 +- 4 files changed, 19 insertions(+), 25 deletions(-) diff --git a/passman/database.py b/passman/database.py index 1846c69..805783e 100644 --- a/passman/database.py +++ b/passman/database.py @@ -43,14 +43,16 @@ def fetch_password_data(self, sql_data): password_data = sql_data.split() - result = md.Password.select().where(md.Password.password_name == password_data[0] & md.Password.password_address == password_data[1]) + result = md.Password.select().where((md.Password.password_name == password_data[0]) & (md.Password.password_address == password_data[1])) return result - def delete_password(self, sql_data): + def delete_password(self, p_name, p_address): - pass + password_info = md.Password.get(md.Password.password_name == p_name & md.Password.password_address == p_address) + + password_info.delete_instance() def __del__(self) -> None: diff --git a/passman/password.py b/passman/password.py index 92271a3..c9f5d25 100644 --- a/passman/password.py +++ b/passman/password.py @@ -229,29 +229,21 @@ def __init__(self, parent): height=25 ) - # def confirm_password_deletion(self): + def confirm_password_deletion(self): - # self.parent.password_list.delete(0, tk.END) + self.parent.password_list.delete(0, tk.END) - # password_values_list = self.parent.password_list_value.split() + password_values_list = self.parent.password_list_value.split() - # connection = sqlite3.connect("passman.db") - - # cursor = connection.cursor() - - # cursor.execute(f"DELETE FROM passman WHERE password_name = '{password_values_list[0]}' AND password_address = '{password_values_list[1]}';") - - # connection.commit() + self.parent.dc.delete_password(password_values_list[0], password_values_list[1]) - # listbox_data = cursor.execute("SELECT password_name, password_address FROM passman;") + listbox_data = self.parent.dc.fetch_data() - # for row in listbox_data: - - # self.parent.password_list.insert(tk.END, f"{row[0]} {row[1]}") + for row in listbox_data: - # connection.close() + self.parent.password_list.insert(tk.END, f"{row[0]} {row[1]}") - # self.notification_window = NotificationGenerator(text="Password successfully deleted!") + self.notification_window = NotificationGenerator(text="Password successfully deleted!") - # self.window_delete_password.destroy() + self.window_delete_password.destroy() \ No newline at end of file diff --git a/passman/root.py b/passman/root.py index f49e911..d1c8a40 100644 --- a/passman/root.py +++ b/passman/root.py @@ -82,7 +82,7 @@ def __fill_listbox(self): for row in listbox_data: - self.password_list.insert(tk.END, f"{row[0]} {row[1]}") + self.password_list.insert(tk.END, f"{row.password_name} {row.password_address}") def __initialize_password_handling_frame(self): @@ -202,13 +202,13 @@ def __get_password(self, *args): self.password_list_value = self.password_list.get(self.password_list.curselection()) - password_data = self.dc.fetch_password_data(self.password_list.value) + password_data = self.dc.fetch_password_data(self.password_list_value)[0] - self.password_value.set(password_data[0][0]) + self.password_value.set(password_data.password) self.password_description.delete("1.0", tk.END) - self.password_description.insert(tk.END, password_data[0][1]) + self.password_description.insert(tk.END, password_data.password_description) self.button_update_password.config(state="normal") diff --git a/tests/db_tests.py b/tests/db_tests.py index d7ab486..affb006 100644 --- a/tests/db_tests.py +++ b/tests/db_tests.py @@ -27,7 +27,7 @@ def test_data_presence(): cursor = connection.cursor() - for row in cursor.execute("SELECT * FROM passman;"): + for row in cursor.execute("SELECT * FROM password;"): print(row) From cfe744afe12317b45293e701b6bf020dfb1580b3 Mon Sep 17 00:00:00 2001 From: Dan-I-El Date: Mon, 19 Feb 2024 14:20:44 +0200 Subject: [PATCH 08/13] Password update imlemented to ORM --- passman/database.py | 11 +++++++++++ passman/root.py | 12 ++---------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/passman/database.py b/passman/database.py index 805783e..c10fa4a 100644 --- a/passman/database.py +++ b/passman/database.py @@ -46,6 +46,17 @@ def fetch_password_data(self, sql_data): result = md.Password.select().where((md.Password.password_name == password_data[0]) & (md.Password.password_address == password_data[1])) return result + + + def update_password_data(self, password_data, password_value): + + splitted_data = password_data.split() + + row = md.Password.get((md.Password.password_name == splitted_data[0]) & (md.Password.password_address == splitted_data[1])) + + row.password = password_value + + row.save() def delete_password(self, p_name, p_address): diff --git a/passman/root.py b/passman/root.py index d1c8a40..4c8d1fc 100644 --- a/passman/root.py +++ b/passman/root.py @@ -229,17 +229,9 @@ def __update_password(self): else: - password_list_value = self.password_list.get(self.password_list.curselection()).split(" ") - - db_connection = sqlite3.connect("passman.db") - - cursor = db_connection.cursor() + new_password_data = self.password_list.get(self.password_list.curselection()) - cursor.execute(f"UPDATE passman SET password = '{self.password_value.get()}' WHERE password_name = '{password_list_value[0]}' AND password_address = '{password_list_value[1]}';") - - db_connection.commit() - - del db_connection + self.dc.update_password_data(new_password_data, self.password_value.get()) self.password_field.config(state="disabled") From 6cf2a51783260cd4d72a615ae78aabd817af2447 Mon Sep 17 00:00:00 2001 From: Dan-I-El Date: Mon, 19 Feb 2024 15:55:08 +0200 Subject: [PATCH 09/13] resize settings added --- passman/database.py | 1 + passman/root.py | 2 +- passman/tempCodeRunnerFile.py | 1 - 3 files changed, 2 insertions(+), 2 deletions(-) delete mode 100644 passman/tempCodeRunnerFile.py diff --git a/passman/database.py b/passman/database.py index c10fa4a..c42544f 100644 --- a/passman/database.py +++ b/passman/database.py @@ -20,6 +20,7 @@ def create_passwords_table(self): print("Such table already exists") + def add_password(self, new_p_address, new_p_name, new_p, new_p_description): new_password = md.Password.create( diff --git a/passman/root.py b/passman/root.py index 4c8d1fc..3b36060 100644 --- a/passman/root.py +++ b/passman/root.py @@ -37,7 +37,7 @@ def __initialize_main_window(self): self.geometry(f"{style.x}x{style.y}") - self.minsize(style.x, style.y) + self.resizable(False, False) self.eval("tk::PlaceWindow . center") diff --git a/passman/tempCodeRunnerFile.py b/passman/tempCodeRunnerFile.py deleted file mode 100644 index 289310a..0000000 --- a/passman/tempCodeRunnerFile.py +++ /dev/null @@ -1 +0,0 @@ -Database \ No newline at end of file From bda1711d0ba7bb0e52186bff9e8e27b6f827c843 Mon Sep 17 00:00:00 2001 From: Dan-I-El Date: Mon, 19 Feb 2024 16:41:38 +0200 Subject: [PATCH 10/13] Intro window started --- passman/database.py | 3 --- passman/intro.py | 17 ----------------- passman/password.py | 17 ++++++++++------- passman/root.py | 10 +++++++++- 4 files changed, 19 insertions(+), 28 deletions(-) delete mode 100644 passman/intro.py diff --git a/passman/database.py b/passman/database.py index c42544f..4740669 100644 --- a/passman/database.py +++ b/passman/database.py @@ -8,9 +8,6 @@ def __init__(self) -> None: md.db.connect() - self.create_passwords_table() - - def create_passwords_table(self): try: diff --git a/passman/intro.py b/passman/intro.py deleted file mode 100644 index 47b503b..0000000 --- a/passman/intro.py +++ /dev/null @@ -1,17 +0,0 @@ -import tkinter as tk -import sqlite3 -import style -import models as md -from widget_generators import * -import database as dc -import helper_functions - - -TABLE_NAME = "passman" - - -class WindowIntro(tk.Toplevel): - - def __init__(self): - - dc.create_passwords_table() \ No newline at end of file diff --git a/passman/password.py b/passman/password.py index c9f5d25..494b9f8 100644 --- a/passman/password.py +++ b/passman/password.py @@ -5,15 +5,18 @@ import helper_functions -# class WindowWelcome(tk.Toplevel): +class WindowIntro(tk.Toplevel): -# def __init__(self): + def __init__(self): -# self.db = sqlitewrapper.SqliteCipher( -# dataBasePath="passman.db", -# checkSameThread=False, -# password=None -# ) + super().__init__() + + self.welcome_label = LabelGenerator( + master=self, + text="Meet Passman!", + x=style.x_margin, + y=style.y_label_password_field, + ) diff --git a/passman/root.py b/passman/root.py index 3b36060..3ecf4ad 100644 --- a/passman/root.py +++ b/passman/root.py @@ -2,7 +2,7 @@ import style from database import DatabaseConnection from widget_generators import * -from password import WindowNewPassword, WindowDeletePassword +from password import * from helper_functions import toggle_password class App(tk.Tk): @@ -12,6 +12,7 @@ def __init__(self): #running the app super().__init__() + self.__check_db_existence() self.__initialize_main_window() @@ -31,6 +32,13 @@ def __init__(self): self.mainloop() + def __check_db_existence(self): + + pass + # If db exists - nothing, else - show WindowIntro + WindowIntro() + + def __initialize_main_window(self): self.title("Passman") From c914367b1dbb6e56f8506d69ab37335ccc214a82 Mon Sep 17 00:00:00 2001 From: Dan-I-El Date: Sun, 25 Feb 2024 01:25:34 +0200 Subject: [PATCH 11/13] Password module import type changed --- passman/root.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/passman/root.py b/passman/root.py index 3ecf4ad..6bb252b 100644 --- a/passman/root.py +++ b/passman/root.py @@ -1,8 +1,8 @@ import tkinter as tk +import password as ps import style from database import DatabaseConnection from widget_generators import * -from password import * from helper_functions import toggle_password class App(tk.Tk): @@ -34,9 +34,8 @@ def __init__(self): def __check_db_existence(self): - pass # If db exists - nothing, else - show WindowIntro - WindowIntro() + ps.WindowIntro() def __initialize_main_window(self): @@ -198,12 +197,12 @@ def __initialize_password_handling_frame(self): def __delete_password(self): - return WindowDeletePassword(self) + return ps.WindowDeletePassword(self) def __create_new_password_window(self): - return WindowNewPassword(self) + return ps.WindowNewPassword(self) def __get_password(self, *args): From faf94fcd9289675817e093cc09ffea62789d94f1 Mon Sep 17 00:00:00 2001 From: Dan-I-El Date: Mon, 26 Feb 2024 01:33:37 +0200 Subject: [PATCH 12/13] Switching between windows added Now main window is hidden when intro window is shown --- passman/database.py | 5 +++++ passman/models.py | 1 + passman/password.py | 33 +++++++++++++++++++++++++++------ passman/root.py | 4 +++- 4 files changed, 36 insertions(+), 7 deletions(-) diff --git a/passman/database.py b/passman/database.py index 4740669..49855f9 100644 --- a/passman/database.py +++ b/passman/database.py @@ -18,6 +18,11 @@ def create_passwords_table(self): print("Such table already exists") + def check_db_password(self): + + pass + + def add_password(self, new_p_address, new_p_name, new_p, new_p_description): new_password = md.Password.create( diff --git a/passman/models.py b/passman/models.py index 1e2e523..fd4bf37 100644 --- a/passman/models.py +++ b/passman/models.py @@ -1,5 +1,6 @@ from peewee import * from datetime import datetime +from playhouse.sqlite_ext import SqliteExtDatabase db = SqliteDatabase("passman.db") diff --git a/passman/password.py b/passman/password.py index 494b9f8..6263491 100644 --- a/passman/password.py +++ b/passman/password.py @@ -7,16 +7,37 @@ class WindowIntro(tk.Toplevel): - def __init__(self): + def __init__(self, parent): + + super().__init__(parent) - super().__init__() + self.parent = parent self.welcome_label = LabelGenerator( - master=self, - text="Meet Passman!", - x=style.x_margin, - y=style.y_label_password_field, + master=self, + text="Meet Passman!", + x=style.x_margin, + y=style.y_label_password_field, + ) + self.set_password_button = ButtonGenerator( + master=self, + text="Enter", + command=self.__close_window, + x=style.x_margin, + y=style.y_password_description, + width=style.width_button, + height=style.height_button + ) + + + def __close_window(self): + + self.parent.attributes("-alpha", 1) + + self.destroy() + + # It should check if Database password has already been set diff --git a/passman/root.py b/passman/root.py index 6bb252b..a8da82f 100644 --- a/passman/root.py +++ b/passman/root.py @@ -35,7 +35,9 @@ def __init__(self): def __check_db_existence(self): # If db exists - nothing, else - show WindowIntro - ps.WindowIntro() + self.attributes("-alpha", 0) + + ps.WindowIntro(self) def __initialize_main_window(self): From 6f3f8d8abc9a10fe6b9204a5bdf572795f77221b Mon Sep 17 00:00:00 2001 From: Dan-I-El Date: Sat, 2 Mar 2024 17:30:44 +0200 Subject: [PATCH 13/13] Sqlite extended db added --- passman/database.py | 7 ++----- passman/models.py | 20 +++++++++++--------- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/passman/database.py b/passman/database.py index 49855f9..9d7176e 100644 --- a/passman/database.py +++ b/passman/database.py @@ -10,12 +10,9 @@ def __init__(self) -> None: def create_passwords_table(self): - try: - md.db.create_tables([md.Password]) + if not md.db_key: - except: - - print("Such table already exists") + pass def check_db_password(self): diff --git a/passman/models.py b/passman/models.py index fd4bf37..e03b6ff 100644 --- a/passman/models.py +++ b/passman/models.py @@ -2,23 +2,25 @@ from datetime import datetime from playhouse.sqlite_ext import SqliteExtDatabase +db_key = "" -db = SqliteDatabase("passman.db") +def create_passwords_table(): + db = SqliteExtDatabase("passman.db", passphrase=db_key) -class Password(Model): + class Password(Model): - password_address = CharField() + password_address = CharField() - password_name = CharField() + password_name = CharField() - password = CharField() + password = CharField() - password_description = TextField() + password_description = TextField() - password_update = DateTimeField(default=datetime.now()) + password_update = DateTimeField(default=datetime.now()) - class Meta: + class Meta: - database = db + database = db