def register(username, email, password, timezone): if not user_check.check_username(username): password = password.encode() password = bcrypt.hashpw(password, bcrypt.gensalt()) password = password.decode() goal_date = time_manage.iso_utc_in_1_year() users.insert_one({ "username": username, "email": email, "password": password, "timezone": timezone, "verified": False, "verify_token": "", "date_goal": goal_date, "night_goal": 10, "goal": 50, "activeDrive": False, "drives": [] }) email_tool.send_email_confirmation(username) if user_check.check_username(username): return True else: return False else: return False
def stop_drive(username, time_mode): if user_check.check_username(username): users.update_one({"username": username}, {"$set": { "activeDrive": False }}) users.update_one({ "username": username, "drives.active": True }, {"$set": { "drives.$.stopTime": time_manage.iso_utc_now() }}) if time_mode == "night": users.update_one({ "username": username, "drives.active": True }, {"$set": { "drives.$.conditions": ["night"] }}) users.update_one({ "username": username, "drives.active": True }, {"$set": { "drives.$.active": False }}) return not user_get.get(username, "activeDrive") else: return False
def iso_utc_to_time(username, iso_utc): if user_check.check_username(username): date_object = parser.parse(iso_utc) timezone = user_get.get(username, "timezone") localized_time = date_object.astimezone(pytz.timezone(timezone)) return datetime.datetime.strftime(localized_time, "%I:%M %p") else: return "Error"
def do_request_forgo_password(): if user_check.check_username(request.form["username"]): if user_manage.forgot_password_send_email(request.form["username"]): return redirect("/login?error=request_success") else: return redirect("/login?error=request_error") else: return redirect("/forgot_password?error=username")
def get_drive(username, drive_id): if user_check.check_username(username): drive = get(username, "drives")[int(drive_id)] start_date = time_manage.iso_utc_to_date(username, drive["startTime"]) start_time = time_manage.iso_utc_to_time(username, drive["startTime"]) stop_time = time_manage.iso_utc_to_time(username, drive["stopTime"]) duration = time_manage.drive_duration_formatted(drive["startTime"], drive["stopTime"]) return {"startDate": start_date, "startTime": start_time, "stopTime": stop_time, "duration": duration, "id": get_drive_list(username).index(drive), "conditions": drive["conditions"]}
def remove_drive(username, drive_id): if user_check.check_username(username): start_time = users.find_one({"username": username })["drives"][int(drive_id)]["startTime"] users.update_one({"username": username}, {"$pull": { "drives": { "startTime": start_time } }})
def change_password(username, password): if user_check.check_username(username): password = password.encode() password = bcrypt.hashpw(password, bcrypt.gensalt()) password = password.decode() users.update_one({"username": username}, {"$set": { "password": password }}) remove_password_token(username)
def create_drive(username): if user_check.check_username(username): users.update_one({"username": username}, { "$push": { "drives": { "startTime": time_manage.iso_utc_now(), "stopTime": time_manage.iso_utc_now(), "active": False, "conditions": [] } } })
def verify_user(username, token): if user_check.check_username(username): if user_get.get(username, "verify_token") == token: users.update_one({"username": username}, {"$set": { "verified": True }}) return True else: return False else: return False
def get_drive_data(username): if user_check.check_username(username): drive_list = get_drive_list(username) drive_data = [] for drive in drive_list: start_date = time_manage.iso_utc_to_date(username, drive["startTime"]) start_time = time_manage.iso_utc_to_time(username, drive["startTime"]) stop_time = time_manage.iso_utc_to_time(username, drive["stopTime"]) duration = time_manage.drive_duration_formatted(drive["startTime"], drive["stopTime"]) drive_data.append( {"startDate": start_date, "startTime": start_time, "stopTime": stop_time, "duration": duration, "id": drive_list.index(drive), "conditions": drive["conditions"]}) return drive_data
def date_start_stop_to_iso_utc(username, date, start_time, stop_time): if user_check.check_username(username): user_timezone = pytz.timezone(user_get.get(username, "timezone")) start_datetime = datetime.datetime.strptime(f"{date} {start_time}", "%b %d, %Y %I:%M %p") stop_datetime = datetime.datetime.strptime(f"{date} {stop_time}", "%b %d, %Y %I:%M %p") if start_datetime > stop_datetime: stop_datetime += datetime.timedelta(days=1) start_datetime = start_datetime.replace(tzinfo=user_timezone) stop_datetime = stop_datetime.replace(tzinfo=user_timezone) start_datetime = start_datetime.astimezone( pytz.timezone("UTC")).isoformat() stop_datetime = stop_datetime.astimezone( pytz.timezone("UTC")).isoformat() return {"start_date": start_datetime, "stop_date": stop_datetime}
def do_login(): if request.method == "POST": username = request.form["username"] password = request.form["password"] if request.form.get("remember_me"): if request.form["remember_me"] == "on": session.permanent = True if not user_check.check_username(username): return redirect("/login?error=login") if not user_check.check_verified(username): return redirect("/login?error=verified") if user_check.check_password(username, password): session["logged_in"] = True session["username"] = username else: return redirect("/login?error=login") return redirect(url_for("route"))
def update_settings(username, date_goal, goal, night_goal): if int(goal) <= 0: return False if int(night_goal) <= 0: return False if user_check.check_username(username): users.update_one({"username": username}, { "$set": { "date_goal": time_manage.date_local_to_iso_utc( username, date_goal), "goal": goal, "night_goal": night_goal } }) return True else: return False
def do_register(): if request.method == "POST": username = request.form["username"] email = request.form["email"] password = request.form["password"] password_repeat = request.form["password_repeat"] timezone = request.form["timezone"] print(timezone) if user_check.check_username(username): return redirect("/register?error=username") elif user_check.check_email(email): return redirect("/register?error=email") elif not password == password_repeat: return redirect("/register?error=password") else: if user_manage.register(username, email, password, timezone): return redirect("/login?error=register_success") else: return "Error"
def start_drive(username): if user_check.check_username(username): users.update_one({"username": username}, {"$set": { "activeDrive": True }}) id = len(users.find_one({"username": username})["drives"]) users.update_one({"username": username}, { "$push": { "drives": { "startTime": time_manage.iso_utc_now(), "stopTime": 0, "active": True, "conditions": [] } } }) return user_get.get(username, "activeDrive") else: return False
def update_drive(username, drive_id, start_date, start_time, stop_time, conditions): if user_check.check_username(username): updated_drive_info = time_manage.date_start_stop_to_iso_utc( username, start_date, start_time, stop_time) users.update_one({"username": username}, { "$set": { f"drives.{drive_id}.startTime": updated_drive_info["start_date"] } }) users.update_one({"username": username}, { "$set": { f"drives.{drive_id}.stopTime": updated_drive_info["stop_date"] } }) users.update_one( {"username": username}, {"$set": { f"drives.{drive_id}.conditions": conditions }}) return True return False
def get_drive_list(username): if user_check.check_username(username): return users.find_one({"username": username})["drives"] else: return []
def get_active_drive(username): if user_check.check_username(username): for drive in users.find_one({"username": username})["drives"]: if drive["active"]: return drive return
def remove_user(username): users.remove({"username": username}) return not user_check.check_username(username)
def remove_password_token(username): if user_check.check_username(username): users.update_one({"username": username}, {"$set": { "password_token": "" }})
def get_start_time(username): if user_check.check_username(username) and get(username, "activeDrive"): return get_active_drive(username)["startTime"] else: return time_manage.unix_now()
def forgot_password_send_email(username): if user_check.check_username(username): return email_tool.send_forgot_password(username) else: return False
def do_delete_account(): if request.method == "POST": if request.form["username"] == session["username"]: session.clear() user_manage.remove_user(request.form["username"]) return str(user_check.check_username(request.form["username"]))
def associate_password_token(username, token): if user_check.check_username(username): users.update_one({"username": username}, {"$set": { "password_token": token }})
def date_local_to_iso_utc(username, date_local): if user_check.check_username(username): user_timezone = pytz.timezone(user_get.get(username, "timezone")) datetime_local = datetime.datetime.strptime(date_local, "%b %d, %Y") datetime_local = datetime_local.replace(tzinfo=user_timezone) return datetime_local
def iso_utc_to_unix(username, iso_utc): if user_check.check_username(username): date_object = parser.parse(iso_utc) timezone = user_get.get(username, "timezone") localized_time = date_object.astimezone(pytz.timezone(timezone)) return localized_time.timestamp()