コード例 #1
0
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)})
コード例 #2
0
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
                       })
コード例 #3
0
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")
コード例 #4
0
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)
コード例 #5
0
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
                           }
                       })
コード例 #6
0
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'))
コード例 #7
0
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)
コード例 #8
0
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})
コード例 #9
0
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
                       })
コード例 #10
0
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"))
コード例 #11
0
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"))
コード例 #12
0
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)
コード例 #13
0
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)
コード例 #14
0
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'))
コード例 #15
0
def notifications_main_uuid(uuid):
    c_user = user_db.get_user(uuid=uuid)
    return render_template("notifications/notifications_main.html", user=c_user[1])
コード例 #16
0
def email_main_uuid(uuid):
    c_user = user_db.get_user(uuid=uuid)
    return render_template("email/email_main.html", user=c_user[1])
コード例 #17
0
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}])