V2.8 Update
This commit is contained in:
1 parent
5b840786d1
commit
68cf821312
7 files changed
+184
-117
No files matched your search
@@ -0,0 +1,32 @@
|
|||||||
|
Password Saver Updates and Versions
|
||||||
|
******************************
|
||||||
|
v1.0-Alpha release: demo
|
||||||
|
v1.1-Account add: demo
|
||||||
|
v1.2-Account Simple security: demo
|
||||||
|
v1.3-Password Save: demo
|
||||||
|
v1.4-Savable Data: first full demo
|
||||||
|
v1.5-Unknown bug fix x1: demo
|
||||||
|
v1.6-Code Rewrite: demo
|
||||||
|
v1.7-Unkiwn Bug fix x3: demo
|
||||||
|
v1.8-Release Notes [Impliment]: demo
|
||||||
|
v1.9-Release Notes Rewrite: demo
|
||||||
|
v2.0- Beta Release: Full
|
||||||
|
v2.1-Unknown Bug Fix x1: full
|
||||||
|
v2.2-Security Update: Full
|
||||||
|
v2.3-Bug fix[Password Reset]: Full
|
||||||
|
v2.4-No same Username [Impliment]: Full
|
||||||
|
v2.5-Change Save Pass[Impliment]: Full
|
||||||
|
v2.5.2-Debugging[Quit Bug, Cancel Bug] + Minor Code Rewrites
|
||||||
|
v2.6 Data rewrite (allows multiple save passwords)
|
||||||
|
v2.7 You can now add additional save passwords into your account [impliment]
|
||||||
|
v2.8 Minor Code rewrites, Few bug fixes
|
||||||
|
|
||||||
|
In Dev:
|
||||||
|
******
|
||||||
|
nothing
|
||||||
|
|
||||||
|
Proposed Updates
|
||||||
|
***************
|
||||||
|
User Self Delete
|
||||||
|
Admin Delete user
|
||||||
|
v3.0-Rewrite + GUI
|
||||||
@@ -2,6 +2,10 @@ Password Saver notes:
|
|||||||
|
|
||||||
Patch Notes:
|
Patch Notes:
|
||||||
|
|
||||||
|
-V(2.8) Minor Code Changes,
|
||||||
|
Debuggin:
|
||||||
|
-Missing Save Password bug
|
||||||
|
|
||||||
-V(2.6) Data Rewrite
|
-V(2.6) Data Rewrite
|
||||||
|
|
||||||
-V(2.5) Minor Code Rewrites,
|
-V(2.5) Minor Code Rewrites,
|
||||||
@@ -12,6 +16,9 @@ Password Saver notes:
|
|||||||
|
|
||||||
Updates:
|
Updates:
|
||||||
|
|
||||||
|
-V(2.8) Unable to login when no accounts are created.
|
||||||
|
A few options have been disabled.
|
||||||
|
|
||||||
-V(2.7) You can now add more save Password into your
|
-V(2.7) You can now add more save Password into your
|
||||||
account.
|
account.
|
||||||
|
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
|
#Import all libraries
|
||||||
from base64 import urlsafe_b64encode as b64e, urlsafe_b64decode as b64d
|
from base64 import urlsafe_b64encode as b64e, urlsafe_b64decode as b64d
|
||||||
from cryptography.fernet import Fernet
|
from cryptography.fernet import Fernet
|
||||||
from cryptography.hazmat.backends import default_backend
|
from cryptography.hazmat.backends import default_backend
|
||||||
@@ -8,9 +9,8 @@ import secrets
|
|||||||
import sys
|
import sys
|
||||||
import time
|
import time
|
||||||
|
|
||||||
print()
|
print('\nPassword Saver')
|
||||||
print('Password Saver')
|
print('Version - [2.8]')
|
||||||
print('Version - [2.7]')
|
|
||||||
# pylint: disable=unused-variable
|
# pylint: disable=unused-variable
|
||||||
# pylint: enable=too-many-lines
|
# pylint: enable=too-many-lines
|
||||||
|
|
||||||
@@ -125,8 +125,8 @@ def register():
|
|||||||
b = ('Creating Account' + "." * a)
|
b = ('Creating Account' + "." * a)
|
||||||
sys.stdout.write('\r' + b)
|
sys.stdout.write('\r' + b)
|
||||||
time.sleep(0.5)
|
time.sleep(0.5)
|
||||||
append_file1.write('\n')
|
|
||||||
append_file1.write(userName + ":" + str(hashlib.md5(userPass.encode()).hexdigest()))
|
append_file1.write(userName + ":" + str(hashlib.md5(userPass.encode()).hexdigest()))
|
||||||
|
append_file1.write('\n')
|
||||||
append_file1.close()
|
append_file1.close()
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
print()
|
print()
|
||||||
@@ -141,10 +141,10 @@ def register():
|
|||||||
savePassLoop = True
|
savePassLoop = True
|
||||||
elif len(savePass) > 0:
|
elif len(savePass) > 0:
|
||||||
wfor = input(' What is this password for > ')
|
wfor = input(' What is this password for > ')
|
||||||
append_file2.write('\n')
|
|
||||||
append_file2.write(userName + ":" + str(password_encrypt(savePass.encode(), gPassword).decode()))
|
append_file2.write(userName + ":" + str(password_encrypt(savePass.encode(), gPassword).decode()))
|
||||||
|
append_file3.write(f'{str(password_encrypt(savePass.encode(), gPassword).decode())}:{wfor}')
|
||||||
|
append_file2.write('\n')
|
||||||
append_file3.write('\n')
|
append_file3.write('\n')
|
||||||
append_file3.write(f'{wfor}:{str(password_encrypt(savePass.encode(), gPassword).decode())}')
|
|
||||||
savePassD[wfor] = str(password_encrypt(savePass.encode(), gPassword).decode())
|
savePassD[wfor] = str(password_encrypt(savePass.encode(), gPassword).decode())
|
||||||
append_file2.close()
|
append_file2.close()
|
||||||
append_file3.close()
|
append_file3.close()
|
||||||
@@ -167,107 +167,130 @@ def register():
|
|||||||
|
|
||||||
|
|
||||||
def login():
|
def login():
|
||||||
|
#Data Puller
|
||||||
|
userData = {}
|
||||||
|
|
||||||
|
#Users Pull
|
||||||
f = open('Users.txt', 'r')
|
f = open('Users.txt', 'r')
|
||||||
users = {}
|
users = {}
|
||||||
for line in f:
|
for line in f:
|
||||||
k, v = line.strip().split(':')
|
k, v = line.strip().split(':')
|
||||||
users[k.strip()] = v.strip()
|
users[k.strip()] = v.strip()
|
||||||
f.close()
|
f.close()
|
||||||
j = open('UsersSP.txt', 'r')
|
if len(users) == 0:
|
||||||
usersSP = {}
|
print('No Users Found!')
|
||||||
for line in j:
|
print('Register Now')
|
||||||
k, v = line.strip().split(':')
|
register()
|
||||||
usersSP[k.strip()] = v.strip()
|
elif len(users) > 0:
|
||||||
j.close()
|
#Users SP pull
|
||||||
l = open('WSPF.txt', 'r')
|
j = open('UsersSP.txt', 'r')
|
||||||
wspf = {}
|
spList = []
|
||||||
for line in l:
|
usersSP = {}
|
||||||
k, v = line.strip().split(':')
|
for line in j:
|
||||||
wspf[k.strip()] = v.strip()
|
myDict = {}
|
||||||
l.close()
|
k, v = line.strip().split(':')
|
||||||
userData = {}
|
myDict[k.strip()] = v.strip()
|
||||||
for user in users:
|
spList.append(myDict)
|
||||||
savePassL = {}
|
j.close()
|
||||||
for USER in usersSP:
|
for user in users:
|
||||||
if USER == user:
|
passlist = []
|
||||||
SavePass = usersSP[USER]
|
for items in spList:
|
||||||
for r in wspf:
|
for keys,values in items.items():
|
||||||
if password_decrypt(wspf[r].encode(), gPassword).decode() == password_decrypt(SavePass.encode(), gPassword).decode():
|
if keys == user:
|
||||||
pw = usersSP[USER]
|
if keys not in usersSP:
|
||||||
savePassL[r] = pw
|
passlist.append(password_decrypt(values.encode(), gPassword).decode())
|
||||||
data = {'username': user, 'password': users[user], 'savePassDict': savePassL}
|
usersSP[keys]=passlist
|
||||||
userData[user] = data
|
else:
|
||||||
|
passlist.append(password_decrypt(values.encode(), gPassword).decode())
|
||||||
|
usersSP[keys]=passlist
|
||||||
|
|
||||||
username_check = False
|
#What for Pull
|
||||||
password_check = False
|
l = open('WSPF.txt', 'r')
|
||||||
|
wspf = {}
|
||||||
|
for line in l:
|
||||||
|
k, v = line.strip().split(':')
|
||||||
|
wspf[k.strip()] = v.strip()
|
||||||
|
l.close()
|
||||||
|
|
||||||
adminName = '9581b8785e452a9d9672ddfb2277b2af'
|
#Data Formater
|
||||||
adminPass = '9609c233f5c309419fa6393a1b959c13'
|
userData = {}
|
||||||
|
for user in users:
|
||||||
|
passDict = {}
|
||||||
|
for USER in usersSP:
|
||||||
|
if USER == user:
|
||||||
|
for password in wspf:
|
||||||
|
if password_decrypt(password.encode(), gPassword).decode() in usersSP[user]:
|
||||||
|
passDict[wspf[password]] = password
|
||||||
|
data = {'username': user, 'password': users[user], 'savePass': passDict}
|
||||||
|
userData[user] = data
|
||||||
|
|
||||||
print('Type cancel at anytime to cancel.')
|
username_check = False
|
||||||
print()
|
password_check = False
|
||||||
|
|
||||||
while not username_check:
|
adminName = '9581b8785e452a9d9672ddfb2277b2af'
|
||||||
# Takes users input for username
|
adminPass = '9609c233f5c309419fa6393a1b959c13'
|
||||||
inputName = input('What is your Username > ')
|
|
||||||
inputName = str(inputName)
|
|
||||||
|
|
||||||
# Checks if username is correct
|
print('Type cancel at anytime to cancel.')
|
||||||
if inputName in userData:
|
print()
|
||||||
username_check = True
|
|
||||||
while not password_check:
|
|
||||||
|
|
||||||
# Takes users input for pw
|
while not username_check:
|
||||||
inputPass = input(f"Please enter password for {inputName} > ")
|
# Takes users input for username
|
||||||
|
inputName = input('What is your Username > ').lower().strip()
|
||||||
|
|
||||||
if hashlib.md5(inputPass.encode()).hexdigest() == userData[inputName]['password']:
|
# Checks if username is correct
|
||||||
user = User(inputName, inputPass, userData[inputName]['savePassDict'])
|
if inputName in userData:
|
||||||
password_check = True
|
username_check = True
|
||||||
logged_in(user)
|
while not password_check:
|
||||||
|
|
||||||
elif inputPass == "cancel":
|
# Takes users input for pw
|
||||||
print("< Canceling >")
|
inputPass = input(f"Please enter password for {inputName} > ").lower().strip()
|
||||||
password_check = True
|
|
||||||
time.sleep(1)
|
|
||||||
home()
|
|
||||||
|
|
||||||
elif hashlib.md5(inputPass.encode()).hexdigest() != userData[inputName]['password']:
|
if hashlib.md5(inputPass.encode()).hexdigest() == userData[inputName]['password']:
|
||||||
print("That is the incorrect password. Please try again.")
|
user = User(inputName, inputPass, userData[inputName]['savePass'])
|
||||||
|
password_check = True
|
||||||
|
logged_in(user)
|
||||||
|
|
||||||
elif hashlib.md5(inputName.encode()).hexdigest() == adminName:
|
elif inputPass == "cancel":
|
||||||
username_check = True
|
print("< Canceling >")
|
||||||
while not password_check:
|
password_check = True
|
||||||
|
time.sleep(1)
|
||||||
|
home()
|
||||||
|
|
||||||
# Takes users input for pw
|
elif hashlib.md5(inputPass.encode()).hexdigest() != userData[inputName]['password']:
|
||||||
inputAdminPass = input("Please enter password for the Admin > ")
|
print("That is the incorrect password. Please try again.")
|
||||||
inputAdminPass = str(inputAdminPass)
|
|
||||||
|
|
||||||
if hashlib.md5(inputAdminPass.encode()).hexdigest() == adminPass:
|
elif hashlib.md5(inputName.encode()).hexdigest() == adminName:
|
||||||
password_check = True
|
username_check = True
|
||||||
admin()
|
while not password_check:
|
||||||
|
|
||||||
elif inputAdminPass == "cancel":
|
# Takes users input for pw
|
||||||
print("< Canceling >")
|
inputAdminPass = input("Please enter password for the Admin > ")
|
||||||
password_check = True
|
inputAdminPass = str(inputAdminPass)
|
||||||
time.sleep(1)
|
|
||||||
home()
|
|
||||||
|
|
||||||
elif inputName == "cancel":
|
if hashlib.md5(inputAdminPass.encode()).hexdigest() == adminPass:
|
||||||
print("< Canceling >")
|
password_check = True
|
||||||
username_check = True
|
admin()
|
||||||
time.sleep(1)
|
|
||||||
home()
|
|
||||||
|
|
||||||
# Tells user if username is incorrect
|
elif inputAdminPass == "cancel":
|
||||||
else:
|
print("< Canceling >")
|
||||||
print("That is an invalid username, please try again.")
|
password_check = True
|
||||||
|
time.sleep(1)
|
||||||
|
home()
|
||||||
|
|
||||||
|
elif inputName == "cancel":
|
||||||
|
print("< Canceling >")
|
||||||
|
username_check = True
|
||||||
|
time.sleep(1)
|
||||||
|
home()
|
||||||
|
|
||||||
|
# Tells user if username is incorrect
|
||||||
|
else:
|
||||||
|
print("That is an invalid username, please try again.")
|
||||||
|
|
||||||
|
|
||||||
def admin():
|
def admin():
|
||||||
|
|
||||||
print()
|
print("\n < Welcome Braeden >\n")
|
||||||
print(" < Welcome Braeden >")
|
|
||||||
print()
|
|
||||||
|
|
||||||
login_op = False
|
login_op = False
|
||||||
while not login_op:
|
while not login_op:
|
||||||
@@ -302,8 +325,7 @@ def logged_in(user):
|
|||||||
login_op = False
|
login_op = False
|
||||||
|
|
||||||
while not login_op:
|
while not login_op:
|
||||||
print()
|
print("\n Options:")
|
||||||
print(" Options:")
|
|
||||||
print(" < logout | my.info | reset.password | change.savedPassword >")
|
print(" < logout | my.info | reset.password | change.savedPassword >")
|
||||||
print(' < add.pass >')
|
print(' < add.pass >')
|
||||||
|
|
||||||
@@ -318,6 +340,8 @@ def logged_in(user):
|
|||||||
home()
|
home()
|
||||||
|
|
||||||
elif user_select == "my.info":
|
elif user_select == "my.info":
|
||||||
|
print()
|
||||||
|
print('Your passwords:')
|
||||||
# Gives them the saved pw in the account
|
# Gives them the saved pw in the account
|
||||||
for r in user.savePassDict:
|
for r in user.savePassDict:
|
||||||
print(f'{r}: {password_decrypt(user.savePassDict[r].encode(), gPassword).decode()}')
|
print(f'{r}: {password_decrypt(user.savePassDict[r].encode(), gPassword).decode()}')
|
||||||
@@ -371,8 +395,7 @@ def logged_in(user):
|
|||||||
print("Password cant be blank.")
|
print("Password cant be blank.")
|
||||||
|
|
||||||
elif len(newSavedPass) < 8:
|
elif len(newSavedPass) < 8:
|
||||||
print("That password is too short, please try again.")
|
print("That password is too short, please try again.\n")
|
||||||
print()
|
|
||||||
|
|
||||||
elif newSavedPass == "cancel":
|
elif newSavedPass == "cancel":
|
||||||
print("< Canceling >")
|
print("< Canceling >")
|
||||||
@@ -382,6 +405,35 @@ def logged_in(user):
|
|||||||
elif hashlib.md5(password.encode()).hexdigest() != user.password:
|
elif hashlib.md5(password.encode()).hexdigest() != user.password:
|
||||||
print("That is the incorrect password. Please try again.")
|
print("That is the incorrect password. Please try again.")
|
||||||
|
|
||||||
|
elif user_select == 'change.savedPassword':
|
||||||
|
print('This Option is Disabled for development. :(')
|
||||||
|
|
||||||
|
elif user_select == 'add.pass':
|
||||||
|
newPass = input(' What password would you like to save in this account > ')
|
||||||
|
if len(newPass) == 0:
|
||||||
|
print('New Password can\'t be blank')
|
||||||
|
elif len(newPass) > 0:
|
||||||
|
wfor = input(' What is this password for > ')
|
||||||
|
append_file2.write(user.userName + ":" + str(password_encrypt(newPass.encode(), gPassword).decode()))
|
||||||
|
append_file3.write(f'{str(password_encrypt(newPass.encode(), gPassword).decode())}:{wfor}')
|
||||||
|
append_file2.write('\n')
|
||||||
|
append_file3.write('\n')
|
||||||
|
newSavePassDict = user.savePassDict
|
||||||
|
newSavePassDict[wfor] = str(password_encrypt(newPass.encode(), gPassword).decode())
|
||||||
|
append_file2.close()
|
||||||
|
append_file3.close()
|
||||||
|
print()
|
||||||
|
user = User(user.userName, user.password, newSavePassDict)
|
||||||
|
logged_in(user)
|
||||||
|
|
||||||
|
elif user_select == "":
|
||||||
|
print("You cannot leave this blank.")
|
||||||
|
|
||||||
|
else:
|
||||||
|
print("That is an invalid option. Please try again.\n")
|
||||||
|
|
||||||
|
#Disabled for development fix
|
||||||
|
'''
|
||||||
elif user_select == 'change.savedPassword':
|
elif user_select == 'change.savedPassword':
|
||||||
print("Type cancel at anytime to cancel.")
|
print("Type cancel at anytime to cancel.")
|
||||||
|
|
||||||
@@ -427,31 +479,7 @@ def logged_in(user):
|
|||||||
|
|
||||||
elif password != user.password:
|
elif password != user.password:
|
||||||
print("That is the incorrect password. Please try again.")
|
print("That is the incorrect password. Please try again.")
|
||||||
|
'''
|
||||||
elif user_select == 'add.pass':
|
|
||||||
newPass = input(' What password would you like to save in this account > ')
|
|
||||||
if len(newPass) == 0:
|
|
||||||
print('New Password can\'t be blank')
|
|
||||||
elif len(newPass) > 0:
|
|
||||||
wfor = input(' What is this password for > ')
|
|
||||||
append_file2.write('\n')
|
|
||||||
append_file2.write(user.userName + ":" + str(password_encrypt(newPass.encode(), gPassword).decode()))
|
|
||||||
append_file3.write('\n')
|
|
||||||
append_file3.write(f'{wfor}:{str(password_encrypt(newPass.encode(), gPassword).decode())}')
|
|
||||||
newSavePassDict = user.savePassDict
|
|
||||||
newSavePassDict[wfor] = str(password_encrypt(newPass.encode(), gPassword).decode())
|
|
||||||
append_file2.close()
|
|
||||||
append_file3.close()
|
|
||||||
print()
|
|
||||||
user = User(user.userName, user.password, newSavePassDict)
|
|
||||||
logged_in(user)
|
|
||||||
|
|
||||||
elif user_select == "":
|
|
||||||
print("You cannot leave this blank.")
|
|
||||||
|
|
||||||
else:
|
|
||||||
print("That is an invalid option. Please try again.")
|
|
||||||
print()
|
|
||||||
|
|
||||||
#remove.pass in >dev<
|
#remove.pass in >dev<
|
||||||
'''
|
'''
|
||||||
@@ -491,11 +519,10 @@ def print_user_data(user_info):
|
|||||||
def home():
|
def home():
|
||||||
system_home = False
|
system_home = False
|
||||||
while not system_home:
|
while not system_home:
|
||||||
print()
|
print("\n < register | login | quit | notes > ")
|
||||||
print(" < register | login | quit | notes > ")
|
|
||||||
|
|
||||||
user_select = input(" > ")
|
user_select = input(" > ")
|
||||||
user_select = str(user_select)
|
user_select.lower()
|
||||||
|
|
||||||
if user_select == "register":
|
if user_select == "register":
|
||||||
system_home = True
|
system_home = True
|
||||||
@@ -513,7 +540,7 @@ def home():
|
|||||||
user_select = str(user_select)
|
user_select = str(user_select)
|
||||||
|
|
||||||
if user_select == "yes":
|
if user_select == "yes":
|
||||||
system_home = True
|
exit()
|
||||||
print("<Shutting down>")
|
print("<Shutting down>")
|
||||||
|
|
||||||
elif user_select == "no":
|
elif user_select == "no":
|
||||||
@@ -525,8 +552,7 @@ def home():
|
|||||||
print(f_contents)
|
print(f_contents)
|
||||||
|
|
||||||
elif user_select == "":
|
elif user_select == "":
|
||||||
print("This cant be blank.")
|
print("This cant be blank.\n")
|
||||||
print()
|
|
||||||
|
|
||||||
else:
|
else:
|
||||||
print("That is an invalid option. Please try again.")
|
print("That is an invalid option. Please try again.")
|
||||||
@@ -1,5 +1,7 @@
|
|||||||
#Password Saver
|
#Password Saver
|
||||||
|
|
||||||
|
Make Sure you install all the libraries using pip
|
||||||
|
|
||||||
This Is my Password Saver Console Project
|
This Is my Password Saver Console Project
|
||||||
You can create an accout locally on your machine and store passwords in the account.
|
You can create an accout locally on your machine and store passwords in the account.
|
||||||
All sensitive data like your account Password and Saved Password are encrypted.
|
All sensitive data like your account Password and Saved Password are encrypted.
|
||||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
Reference in new issue
Block a user