VirtualEconomy/accounts.py
TropiiDev cf52cdd61f Implement a quick fix for a bug
There was an issue when the user would view their job in the account manager. If the user didn't have a job the code would continue to look for the user's job and it would fail and cause the program to stop running.
2025-01-15 21:37:31 -05:00

252 lines
8.1 KiB
Python

import random
import pymongo
import time
from werkzeug.security import *
from jobs import *
from bank import *
client = pymongo.MongoClient(os.getenv("MONGO_URL"))
db = client.VE
def create_account(name, email, password):
coll = db.accounts
user = coll.find_one({"email": email})
if user is not None:
print("An account using that email has already been created..")
return
code = random.randint(000000, 999999)
coll.insert_one({"_id": code, "email": email, "password": generate_password_hash(password, "scrypt"), "name": name, "account_status": "default", "job": None, "education": 1})
return code
def find_account(code = None, email = None, password = None):
coll = db.accounts
if email is not None and password is not None:
user = coll.find_one({"email": email})
user_encrypt_pass = user["password"]
if user is None:
print("An account with that email could not be found..")
return None
is_password_correct = check_password_hash(user_encrypt_pass, password)
if is_password_correct is False:
print("The password entered is incorrect..")
return None
return user['_id']
user = coll.find_one({"_id": code})
if user is None:
print("That account could not be found..")
return None
return code
def get_user_name(code):
coll = db.accounts
user = coll.find_one({"_id": code})
if user is None:
print("The user does not have an account")
return None
return user['name']
def get_account_status(code):
coll = db.accounts
user = coll.find_one({"_id": code})
if user is None:
print("The user does not have an account")
return None
return user['account_status']
def edit_email(code, email):
coll = db.accounts
user = coll.find_one({"_id": code})
if user is None:
print("The user does not have an account")
return None
coll.update_one({"_id": code}, {"$set": {"email": email}})
return True
def edit_password(code, password):
coll = db.accounts
user = coll.find_one({"_id": code})
if user is None:
print("The user does not have an account")
return None
coll.update_one({"_id": code}, {"$set": {"password": generate_password_hash(password, "scrypt")}})
return True
def get_user_password(code, secret_phrase):
if secret_phrase != os.getenv("SECRET"):
print("Operation not permitted.")
time.sleep(4)
return
coll = db.accounts
user = coll.find_one({"_id": code})
if user is None:
print("The user could not be found")
return
return user['password']
def account_manager(code):
while True:
print(f"""
Welcome to the account manager!
Options:
job - view your job if you have one. it'll also show the education requirement and the pay per hour.
bank - enter a sub menu for the bank
edit - edit your email or your password
leave - leave the account manager
""")
option = input("")
# begin job
if option == "job":
job = get_user_job(code)
if job is None:
print("You do not have a job at the moment")
time.sleep(3)
else:
job_details = get_job_details(job)
print(f"Job Title: {job_details.title}\n"
f"Education Requirement: {job_details.education}\n"
f"Pay Per Hour: {job_details.pph}")
time.sleep(3)
# end job
# begin bank
elif option == "bank":
bank_status = get_bank_status(code)
if bank_status is False:
activate = input("Your bank account is not activated. Do you want to activate it? (y/n): ")
if activate == "y":
did_activate = activate_bank(code)
if did_activate is True:
print("You have successfully activated your bank account. You can now start getting money in your bank account")
time.sleep(3)
else:
print("Something went wrong with activating. Try again later..")
time.sleep(3)
else:
print("Cancelling..")
time.sleep(3)
option = input(f"Welcome to your bank account. What would you like to do?\n"
f"deactivate - deactivate your bank account\n"
f"bankrupt - declare bankruptcy\n"
f"empty - clear your bank account\n"
f"exit - exit the bank manager\n")
if option == "deactivate":
is_sure = input("Are you sure? (y/n): ")
if is_sure == "y":
did_deactivate = deactivate_bank(code)
if did_deactivate:
print("Action completed successfully")
time.sleep(3)
else:
print("Something went wrong..")
time.sleep(3)
else:
print("Cancelling..")
time.sleep(3)
elif option == "bankrupt":
is_sure = input("Are you sure? (y/n): ")
if is_sure == "y":
did_declare_bankruptcy = declare_bankruptcy(code)
if did_declare_bankruptcy is True:
print("Action completed successfully")
time.sleep(3)
else:
print("Something went wrong..")
time.sleep(3)
else:
print("Cancelling..")
time.sleep(3)
elif option == "empty":
is_sure = input("Are you sure? (y/n): ")
if is_sure == "y":
did_empty = empty_bank(code)
if did_empty is True:
print("Action completed successfully")
time.sleep(3)
else:
print("Something went wrong..")
time.sleep(3)
else:
print("Cancelling..")
time.sleep(3)
# end bank
# begin edit
elif option == "edit":
option = input("What would you like to do?\n"
"email - change your email\n"
"password - change your password\n"
"exit - leave the edit menu\n")
if option == "email":
email = input("Enter your new email: ")
did_change_email = edit_email(code, email)
if did_change_email is True:
print("Action completed successfully")
time.sleep(3)
else:
print("Something went wrong..")
time.sleep(3)
elif option == "password":
password = input("Enter your old password: ")
old_password = get_user_password(code, os.getenv("SECRET"))
same_passwords = check_password_hash(old_password, password)
if same_passwords is True:
new_password = input("Please enter your new password: ")
did_change_password = edit_password(code, new_password)
if did_change_password is True:
print("Action completed successfully")
time.sleep(3)
else:
print("Something went wrong..")
time.sleep(3)
else:
print("The passwords did not match. Cancelling operation..")
time.sleep(4)
# end edit
# begin leave
elif option == "leave":
return
# end leave
# check if the user wants to leave the account manager
leave = input("Do you want to continue editing your account? (y/n): ")
if leave != "y":
break