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 toggle_notifications(): user_uuid = request.form.get("uuid", None) r_notifications_enabled = request.form.get("notifications_enabled", None) r_alarm_enabled = request.form.get("alarm_enabled", None) if r_alarm_enabled is not None: if r_alarm_enabled.lower() == "true": r_alarm_enabled = True elif r_alarm_enabled.lower() == "false": r_alarm_enabled = False else: return return_json( success=False, error="Invalid alarm_enabled bool: true | false") else: return return_json(success=False, error="alarm_enabled must be set") if r_notifications_enabled is not None: if r_notifications_enabled.lower() == "true": r_notifications_enabled = True elif r_notifications_enabled.lower() == "false": r_notifications_enabled = False else: return return_json( success=False, error="Invalid notifications enabled bool: true | false") else: return return_json(success=False, error="notifications_enabled must be set") 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] c_user.notifications_enabled = r_notifications_enabled c_user.alarm_enabled = r_alarm_enabled user_db.update_user(c_user) return return_json(success=True, data={ 'notifications_enabled': c_user.notifications_enabled, 'alarm_enabled': c_user.alarm_enabled })
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 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 user_edit(uuid): c_user = user_db.get_user(uuid=uuid)[1] if request.method == "GET": c_arduino = arduino_db.get_arduino_by_user_uuid(uuid) if c_arduino: c_user.arduino = c_arduino.arduino_uuid else: c_user.arduino = None return render_template('users/user_edit.html', user_list=[c_user]) else: user_uuid = uuid name = str(request.form.get("name", None)) email = str(request.form.get("email", None)) birthdate = str(request.form.get("birthdate", None)) if not data_validation.validate_uuid(user_uuid): return render_template('users/user_edit.html', user_list=[c_user], error="Invalid user UUID") if user_db.get_user(uuid=user_uuid)[0] is False: return render_template('users/user_edit.html', user_list=[c_user], error="User not found") if not data_validation.validate_email(email): return render_template('users/user_edit.html', user_list=[c_user], error="Invalid email") if not data_validation.validate_birthdate(birthdate)[0]: return render_template('users/user_edit.html', user_list=[c_user], error=data_validation.validate_birthdate(birthdate)[1]) c_user = user_db.get_user(uuid=user_uuid)[1] c_user.name = name if c_user.email != email: c_user.email = email c_user.is_verified = False name = c_user.name token = generate_confirm_token(c_user.email) send_mail(c_user.name, c_user.email, token) c_user.birthdate = birthdate user_db.update_user(c_user) return return_message("User updated", f"{c_user.name} has been updated!", 2, url_for('admin_blueprint.get_users'))
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 get_schedule(): 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") # The maximum amount of events that can be returned due to limited memory try: max_events_amount = int(request_json["max_events_amount"]) except TypeError: return return_json(success=False, error="Max_event_amounts must be a number") except KeyError: max_events_amount = 20 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_uuid = res[1].uuid c_schedule = schedule_db.get_user_schedule(c_user_uuid).get_events() # User schedule if len(c_schedule) > max_events_amount: c_schedule = c_schedule[-max_events_amount:] for idx, l_item in enumerate(c_schedule): c_item = Event() c_item.from_mongo(l_item) c_schedule[idx] = { 'start': c_item.start, 'end': c_item.end, 'title': c_item.title, 'content': c_item.content, 'location': c_item.location } return return_json(success=True, data={'schedule': c_schedule})
def check_notifications(): 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") try: max_events_amount = int(request_json["max_events_amount"]) except TypeError: return return_json(success=False, error="Max_events_amount must be a number") except KeyError: max_events_amount = 20 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] c_schedule = schedule_db.get_user_schedule(c_user.uuid) upcoming_events = c_schedule.check_for_upcoming_events() total_event_count = len(upcoming_events) return_events = [] for c_event in upcoming_events: return_events.append(c_event.json()) if len(return_events) > max_events_amount: return_events = return_events[-max_events_amount:] return return_json(success=True, data={ 'event_count': total_event_count, 'upcoming_events': return_events })
def resend_verification_email(uuid): res = user_db.get_user(uuid=uuid) if not res[0]: return return_message("Error", "User not found", 2, url_for("admin_blueprint.get_users")) c_user = res[1] if c_user.is_verified: return return_message("Task failed successfully", "User was already verified", 2, url_for("admin_blueprint.get_users")) name = c_user.name token = generate_confirm_token(c_user.email) mail.send_confirmation_mail(name, c_user.email, token) return return_message("Succes", f"Email has been sent to {c_user.name}", 2, url_for("admin_blueprint.get_users"))
def send_email_admin(): email = request.form.get("email", None) subject = request.form.get("subject", None) content = request.form.get("content", None) if not data_validation.validate_email(email): return render_template('email/email_main.html', error="Invalid email") res = user_db.get_user(email=email) if not res[0]: return return_message("Error", "User not found", 2, url_for('admin_blueprint.email_main')) c_user = res[1] mail.send_message_mail(c_user.name, c_user.email, subject, content) return return_message("Succes", f"Email has been sent to {c_user.name}", 2, url_for("admin_blueprint.users_main"))
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 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 send_notification_admin(): uuid = request.form.get("uuid", None) title = str(request.form.get("title", None)) message = str(request.form.get("message", None)) if not data_validation.validate_uuid(uuid): return render_template('notifications/notifications_main.html', error="Invalid UUID") res = user_db.get_user(uuid=uuid) if not res[0]: return return_message("Error", "User not found", 2, url_for('admin_blueprint.notifications_main')) c_user = res[1] if c_user.install_id: if c_user.notifications_enabled: send_notification_to_user(c_user.install_id, title, message) if res[0]: return return_message("Succes", f"Notifcation has been sent to {c_user.name}", 2, url_for("admin_blueprint.users_main")) return return_message("Error", res[1], 5, url_for('admin_blueprint.notifications_main')) return return_message("Error", "User has notifications disabled", 2, url_for("admin_blueprint.users_main")) return return_message("Error", "User has no FCM key", 2, url_for('admin_blueprint.users_main'))
def notifications_main_uuid(uuid): c_user = user_db.get_user(uuid=uuid) return render_template("notifications/notifications_main.html", user=c_user[1])
def email_main_uuid(uuid): c_user = user_db.get_user(uuid=uuid) return render_template("email/email_main.html", user=c_user[1])
def user_detail(uuid): c_user = user_db.get_user(uuid=uuid) if not c_user[0]: return return_message("Error", "User not found", 2, url_for("admin_blueprint.get_users")) c_arduino = arduino_db.get_arduino_by_user_uuid(uuid) return render_template('/users/user_detail.html', user_list=[{'user': c_user[1], 'arduino': c_arduino}])