I made code for signing in users and storing data about them. Everything is fully encrypted and secure also, it is meant to be imported into other code. I'm looking for ways to improve it and to fix any bugs people might find.
import pickle
import base64
class user():
def __init__(self, username, password, user_data):
self.username = username
self.password = password
self.user_data = user_data
def get_user():
try:
user_saves = open("users", 'rb')
users = dict(pickle.load(user_saves))
user_saves.close
name, password, users = sign_in(users)
except:
name, password, users = new_user(True)
name = base64.b64decode(name.decode('utf-8'))
password = base64.b64decode(password.decode('utf-8'))
return name, password, users
def new_user(is_first = False, users=None):
print('Creating account... ')
if users != None:
loop = True
while loop:
name = input('What is your username: ')
name = base64.b64encode(name.encode('utf-8'))
if name in users:
print('Already taken.')
else:
loop = False
password = input('What is your password: ')
password = base64.b64encode(password.encode('utf-8'))
else:
name = input('What is your username: ')
name = base64.b64encode(name.encode('utf-8'))
password = input('What is your password: ')
password = base64.b64encode(password.encode('utf-8'))
if is_first == True:
user = {name:password}
user_saves = open("users", 'wb')
pickle.dump(user, user_saves)
add_user_data('', password, True)
return name, password, user
else:
add_user_data('', password)
users.update({name:password})
user_saves = open("users", 'wb')
pickle.dump(users, user_saves)
return name, password, users
user_saves.close
def sign_in(users):
nsi = True #not signed in
while nsi == True:
username = input('What is your username: ')
username = base64.b64encode(username.encode('utf-8'))
if username in users:
password = input('What is your password: ')
password = base64.b64encode(password.encode('utf-8'))
if password == users.get(username):
print('working')
nsi = False
return username, password
else:
print('Wrong password.')
else:
yn = y_or_n('y or n, are you a new user: ')
if yn == True:
nsi = False
name, password = new_user(users=users)
return name, password
def y_or_n(promt):
ni = True #no input
while ni:
yn = input(promt).lower()
if yn == 'y':
return True
elif yn == 'n':
return False
else:
print('y or n')
def add_user_data(data, password, is_first=False):
password = base64.b64encode(password.encode('utf-8'))
data = base64.b64encode(data.encode('utf-8'))
if is_first == True:
user_data = {password:data}
users_data = open("users_data", 'wb')
pickle.dump(user_data, users_data)
else:
user_data.update({password:data})
users_data = open("users_data", 'wb')
pickle.dump(user_data, users_data)
users_data.close
def get_user_data(password):
password = base64.b64encode(password.encode('utf-8'))
user_data = pickle.load('user_data')
user_data = base64.b64decode(user_data.decode('utf-8'))
return user_data
def delete_user(name, data, ):
data.pop('name', None)
name, password, users = get_user()
data = get_user_data(password)
print(data)
user_stats = user(name, password, data)