def verify_user(self, email, password, install_id): res = self.get_user(email=email) if res[0] is not True: return return_json(success=False, error="User not found") c_user = res[1] if not c_user.is_verified: return return_json( success=False, error= "Please confirm your account, an email has been sent to your inbox" ) user_hash = c_user.user_hash res = encryption.Encryption.verify_password(password, user_hash) if res is False: return return_json(success=False, error="Password does not match") c_user.last_login = date.today() c_user.install_id = install_id # Update the unique ID of the app self.update_user(c_user) return return_json(success=True, data={"uuid": c_user.uuid})
def update_current_value(self, user_uuid: str, expense_uuid: str, amount: str): res = self.find_one({'user_uuid': user_uuid}) for c_expense in res["expenses"]: if c_expense['expense_uuid'] == expense_uuid: if amount == "0": c_expense['cur_amount'] = 0 self.update_one({'user_uuid': user_uuid}, {"$set": res}) return return_json( success=True, data={ "message": "Current amount cleared for {0}".format( c_expense['title']) }) amount_to_add = float(amount) current_amount = float(c_expense['cur_amount']) c_expense['cur_amount'] = current_amount + amount_to_add self.update_one({'user_uuid': user_uuid}, {"$set": res}) return return_json( success=True, data={ "message": "Current amount updated for {0}: {1}".format( c_expense['title'], c_expense['cur_amount']) }) return return_json(success=False, error="Expense not found")
def update_hygiene(): user_uuid = str(request.form.get("uuid", None)) hygiene_name_to_update = request.form.get("hygiene_name", None) hygiene_is_done = str(request.form.get("is_done", None)) if hygiene_is_done is not None: if hygiene_is_done.lower() == "true": hygiene_is_done = True elif hygiene_is_done.lower() == "false": hygiene_is_done = False else: return return_json(success=False, error="Invalid delete all: true | false") else: hygiene_is_done = True if not data_validation.validate_uuid(user_uuid): return return_json(success=False, error="Invalid UUID") if not data_validation.verify_user(user_uuid): return return_json(success=False, error="User not found") res = db.get_user_hygiene(user_uuid) c_hygienes = hygiene.Hygiene() c_hygienes.from_mongo(res) res = c_hygienes.update_hygiene(hygiene_name_to_update, hygiene_is_done) db.update_one({'user_uuid': user_uuid}, {"$set": c_hygienes.json()}) return res
def update_reminders(): user_uuid = str(request.form.get("uuid", None)) if not data_validation.validate_uuid(user_uuid): return return_json(success=False, error="Invalid UUID") if not data_validation.verify_user(user_uuid): return return_json(success=False, error="User not found") sheets_days = request.form.get("sheets", None) bathroom_days = request.form.get("bathroom", None) house_days = request.form.get("house", None) kitchen_days = request.form.get("kitchen", None) dishes_days = request.form.get("dishes", None) vacuum_days = request.form.get("vacuum", None) update_dict = { "sheets": sheets_days, "bathroom": bathroom_days, "house": house_days, "kitchen": kitchen_days, "dishes": dishes_days, "vacuum": vacuum_days } return db.update_reminders(user_uuid, update_dict)
def delete_expense(self, user_uuid: str, delete_all: bool, expense_uuid): res = self.find_one({'user_uuid': user_uuid}) if not res: return return_json(success=False, error="No expenses found") c_expenses = expenses.Expenses() c_expenses.from_mongo(res) if delete_all and expense_uuid is None: c_expenses.delete_expense(delete_all=True) self.update_one({'user_uuid': user_uuid}, {"$set": c_expenses.json()}) return return_json(success=True, data={'message': 'all expenses were deleted'}) elif not delete_all and expense_uuid is not None: if not validate_uuid(expense_uuid): return return_json(success=False, error="Invalid expense UUID") c_expenses.delete_expense(_expense_uuid=expense_uuid) self.update_one({'user_uuid': user_uuid}, {"$set": c_expenses.json()}) return return_json(success=True, data={'message': 'one expense was deleted'}) else: return return_json( success=False, error="delete_all & expense uuid can't both be set")
def register_user(): name = str(request.form.get("name", None)) user_hash = Encryption.encrypt_password( str(request.form.get("password", None))) email = str(request.form.get("email", None)) birthdate = str(request.form.get("birthdate", None)).replace( "-", "/") # IOS uses '-' instead of '/' if name is None or email is None or name is None: return return_json(success=False, error="Fields empty") if not data_validation.validate_email(email): return return_json(success=False, error="Invalid email") if not data_validation.validate_birthdate(birthdate)[0]: return return_json(success=False, error="Invalid birthdate:" + data_validation.validate_birthdate(birthdate)[1]) res = user_db.insert_user(name, user_hash, email, birthdate) if not res[0]: return return_json(success=False, error="User already exists") user_uuid = res[1] expenses_db.create_expenses(user_uuid) schedule_db.create_schedule(user_uuid) hygiene_db.create_hygiene(user_uuid) token = token_generator.generate_confirm_token(email) send_confirmation_mail(name, email, token) return return_json(success=True)
def update_user(): user_uuid = request.form.get("uuid", None) name = str(request.form.get("name", None)) user_hash = Encryption.encrypt_password( str(request.form.get("password", None))) email = str(request.form.get("email", None)) birthdate = str(request.form.get("birthdate", None)) if not data_validation.validate_uuid(user_uuid): return return_json(success=False, error="Invalid user UUID") if user_db.get_user(uuid=user_uuid)[0] is False: return return_json(success=False, error="User not found") if not data_validation.validate_email(email): return return_json(success=False, error="Invalid email") if not data_validation.validate_birthdate(birthdate)[0]: return return_json( success=False, error=data_validation.validate_birthdate(birthdate)[1]) c_user = user_db.get_user(uuid=user_uuid)[1] c_user.name = name c_user.user_hash = user_hash if c_user.email != email: c_user.email = email c_user.is_verified = False c_user.birthdate = birthdate user_db.update_user(c_user) return return_json( success=True, data={"message": "User {0} updated".format(c_user.uuid)})
def get_inc(): user_uuid = str(request.form.get("uuid", None)) if not data_validation.validate_uuid(user_uuid): return return_json(success=False, error="Invalid user UUID") if not data_validation.verify_user(user_uuid): return return_json(success=False, error="User not found") return db.get_user_expenses(user_uuid)
def get_schedule(): user_uuid = str(request.form.get("uuid", None)) if not data_validation.validate_uuid(user_uuid): return return_json(success=False, error="Invalid UUID") if not data_validation.verify_user(user_uuid): return return_json(success=False, error="User not found") res = db.get_user_schedule(user_uuid).get_events() return return_json(success=True, data={'schedule': res})
def get_hygiene(): user_uuid = str(request.form.get("uuid", None)) if not data_validation.validate_uuid(user_uuid): return return_json(success=False, error="Invalid UUID") if not data_validation.verify_user(user_uuid): return return_json(success=False, error="User not found") c_hygiene = db.get_user_hygiene(user_uuid) return return_json(success=True, data={"hygiene": c_hygiene})
def update_reminders(self, user_uuid: str, notifications: dict): res = self.get_user_hygiene(user_uuid) c_hygienes = hygiene.Hygiene() c_hygienes.from_mongo(res) if c_hygienes.update_notifiations(notifications): if self.update_one({'user_uuid': user_uuid}, {"$set": c_hygienes.json()}): return return_json(success=True) return return_json(success=False, error="Database could not be updated") return return_json(success=False, error="Something went wrong")
def delete_event(self, _event_uuid=None, delete_all: bool = False): if delete_all: self._schedule = [] return return_json(success=True, data={'message': 'Deleted all events'}) for idx, l_event in enumerate(self._schedule): if 'event_uuid' in l_event: c_event = Event() c_event.from_mongo(l_event) if c_event.event_uuid == _event_uuid: del self._schedule[idx] return return_json(success=True, data={"message": "Deleted one event"}) return return_json(success=False, error="Event not found")
def login(): email = str(request.form.get("email", None)) password = str(request.form.get("password", None)) install_id = str(request.form.get("install_id", None)) # Unique app id if email is None or password is None: return return_json(success=False, error="Fields empty") if not data_validation.validate_email(email): return return_json(success=False, error="Invalid email") if install_id is None: return return_json(success=False, error="Invalid install_id") return user_db.verify_user(email, password, install_id)
def get_schedule_by_date(): user_uuid = str(request.form.get("uuid", None)) date = str(request.form.get("date", None)).replace("-", "/") if not data_validation.validate_uuid(user_uuid): return return_json(success=False, error="Invalid UUID") if not data_validation.verify_user(user_uuid): return return_json(success=False, error="User not found") if not data_validation.validate_birthdate(date): return return_json(success=False, error="Invalid date format: dd/mm/yyyy") res = db.get_user_schedule_by_date(user_uuid, date) return return_json(success=True, data={'schedule': res})
def link_arduino(self, arduino_uuid: str, user_uuid: str): res = self.find_one({'arduino_uuid': arduino_uuid}) if res: c_arduino = Arduino.from_mongo(res) c_arduino.user_uuid = user_uuid self.update_arduino(c_arduino) return return_json(success=True, data={'message': 'Arduino linked successfully'}) else: new_arduino = Arduino(arduino_uuid, user_uuid) res = self.insert_one(new_arduino.json()) return return_json( success=True, data={ 'message': 'New arduino created and linked successfully' })
def add_recipe(self, title: str, prep_time: int, ingredients: list, preperation: list): for item in ingredients: item.capitalize() for item in preperation: item.capitalize() new_recipe = Recipe(title, prep_time, ingredients, preperation) self.insert_one(new_recipe.json()) return return_json(success=True)
def get_preferences(): user_uuid = request.form.get("uuid", None) if not data_validation.validate_uuid(user_uuid): return return_json(success=False, error="Invalid user UUID") if user_db.get_user(uuid=user_uuid)[0] is False: return return_json(success=False, error="User not found") c_user = user_db.get_user(uuid=user_uuid)[1] return return_json(success=True, data={ "preferences": { 'notifications_enabled': c_user.notifications_enabled, 'alarm_enabled': c_user.alarm_enabled } })
def confirm_email(token): try: email = token_generator.confirm_token(token) except Exception as e: return return_json(success=False, error="link has expired or is invalid, " + str(e)) res = user_db.get_user(email=email) if res[0] is False: return return_json(success=False, error="User not found") c_user = res[1] if c_user.is_verified: return render_template('auth/confirmation_succes.html', name=c_user.name) c_user.is_verified = True c_user.verified_on = datetime.now() user_db.update_user(c_user) return render_template('auth/confirmation_succes.html', name=c_user.name)
def get_user_schedule(self, user_uuid): res = self.find_one({'user_uuid': user_uuid}) if not res: return return_json(success=False, error="No schedule found") c_schedule = schedule.Schedule() c_schedule.from_mongo(res) return c_schedule
def user_delete_all(): successes = [] successes.append(user_db.drop_coll()) successes.append(expenses_db.drop_coll()) successes.append(schedule_db.drop_coll()) successes.append(hygiene_db.drop_coll()) successes.append(arduino_db.unlink_all_arduinos()) if all(successes): return return_message("Succes", "All users deleted", 2, url_for('admin_blueprint.databases_main')) return return_json(success=False, error=f"Success missing")
def update_current(): user_uuid = str(request.form.get("uuid", None)) expense_uuid = request.form.get("expense_uuid", None) amount = request.form.get("amount", None) if not data_validation.validate_uuid(user_uuid): return return_json(success=False, error="Invalid user UUID") if not data_validation.verify_user(user_uuid): return return_json(success=False, error="User not found") if amount is None: return return_json(success=False, error="Amount must be set") if not data_validation.validate_amount(amount): return return_json(success=False, error="Est amount must be a number or decimal") return db.update_current_value(user_uuid, expense_uuid, amount)
def get_user(): user_uuid = request.form.get("uuid", None) if not data_validation.validate_uuid(user_uuid): return return_json(success=False, error="Invalid user UUID") if user_db.get_user(uuid=user_uuid)[0] is False: return return_json(success=False, error="User not found") c_user = user_db.get_user(uuid=user_uuid)[1] result = { 'uuid': c_user.uuid, 'name': c_user.name, 'email': c_user.email, 'birthdate': c_user.birthdate, 'last_login': c_user.last_login, 'created_at': c_user.created_at } return return_json(success=True, data=result)
def delete_event(self, user_uuid: str, event_uuid: str, delete_all: bool): res = self.find_one({'user_uuid': user_uuid}) if not res: return return_json(success=False, error="No schedule found") c_schedule = schedule.Schedule() c_schedule.from_mongo(res) res = c_schedule.delete_event(event_uuid, delete_all) self.update_one({'user_uuid': user_uuid}, {"$set": c_schedule.json()}) return res
def login(): if request.method == "GET": return render_template('auth/login.html') email = str(request.form.get("emailInput", None)) password = str(request.form.get("passwordInput", None)) if email is None or password is None: return return_json(success=False, error="Fields empty") if not data_validation.validate_email(email): return return_json(success=False, error="Invalid email") if not db.verify_admin(email, password): return return_json(success=False, error="Invalid credentials") admin_session = sessions.TtSession(session) admin_session.login_admin(email, password) admin_session.update_ses(session) return return_message("Loggin successfull", "Welcome Senpaii uWu <3 <3", 2, url_for('admin_blueprint.admin_home'))
def trigger_alarm(): request_json = request.json if request_json["arduino_uuid"] is None: return return_json(succes=False, error="Arduino UUID is not set") arduino_uuid = request_json["arduino_uuid"] if not data_validation.validate_uuid(arduino_uuid): return return_json(success=False, error="Arduino UUID is not valid") if not data_validation.verify_arduino(arduino_uuid): return return_json(success=False, error="Arduino is not linked") c_user_uuid = arduino_db.get_user_uuid_by_arduino_uuid(arduino_uuid) res = user_db.get_user(uuid=c_user_uuid) if not res[0]: return return_json(success=False, error="User not found") c_user = res[1] if c_user.alarm_enabled: send_notification_to_user(c_user.install_id, "ALARM", "Motion detected near your TruusPod!") return return_json(success=True, data={"message": "Notifications sent"}) return return_json(success=False, error="Alarm is disabled")
def check_key(): c_fcm_key = request.form.get("fcm_key", None) user_uuid = request.form.get("uuid", None) if c_fcm_key is None: return return_json(success=False, error="No fcm_key set") if user_uuid is None: return return_json(success=False, error="No uuid set'") if not data_validation.validate_uuid(user_uuid): return return_json(success=False, error="Invalid uuid format") res = user_db.get_user(uuid=user_uuid) if not res[0]: return return_json(success=False, error="User not found") c_user = res[1] if c_user.install_id == c_fcm_key: return return_json(success=True) c_user.install_id = c_fcm_key user_db.update_user(c_user) return return_json(success=True)
def delete_event(): user_uuid = str(request.form.get("uuid", None)) event_uuid = request.form.get("event_uuid", None) delete_all = request.form.get("delete_all", None) if delete_all is not None: if delete_all.lower() == "true": delete_all = True elif delete_all.lower() == "false": delete_all = False else: return return_json(success=False, error="Invalid delete all: true | false") else: delete_all = False if not data_validation.validate_uuid(user_uuid): return return_json(success=False, error="Invalid user UUID") if not data_validation.verify_user(user_uuid): return return_json(success=False, error="User not found") return db.delete_event(user_uuid, event_uuid, delete_all)
def update_hygiene(self, name: str, done: bool): for item in self._hygiene: if item.name == name: if done: item.change_hygiene_to_done() return return_json(success=True, data={ "message": "Item {0} was set to done".format( item.name) }) # Set back to not done item.change_hygiene_to_false() return return_json(success=True, data={ "message": "Item {0} was set to not done".format( item.name) }) return return_json( success=False, error="No hygiene item found with name {0}".format(name))
def resend_mail(): email = request.form.get("email", None) if not data_validation.validate_email(email): return return_json(success=False, error="Invalid email") res = user_db.get_user(email=email) if not res[0]: return return_json(success=False, error="User not found") c_user = res[1] if c_user.is_verified: return return_json(success=False, error="User is already verified") name = c_user.name token = token_generator.generate_confirm_token(email) send_mail(name, email, token) return return_json(success=True)
def update_expenses(): user_uuid = str(request.form.get("uuid", None)) expense_type = str(request.form.get("expense_type", None)).lower() est_amount = str(request.form.get("est_amount", None)) title = str(request.form.get("title", None)) expense_uuid = request.form.get("expense_uuid", None) if expense_type != "exp" and expense_type != "inc": return return_json(success=False, error="Invalid expense type: inc | exp") if not data_validation.validate_uuid(user_uuid): return return_json(success=False, error="Invalid user UUID") if not data_validation.verify_user(user_uuid): return return_json(success=False, error="User not found") if not data_validation.validate_amount(est_amount): return return_json(success=False, error="Est amount must be a number or decimal") return db.update_expense(user_uuid, expense_type, est_amount, title, expense_uuid)