Ejemplo n.º 1
0
    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})
Ejemplo n.º 2
0
    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")
Ejemplo n.º 3
0
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
Ejemplo n.º 4
0
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)
Ejemplo n.º 5
0
    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")
Ejemplo n.º 6
0
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)
Ejemplo n.º 7
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)})
Ejemplo n.º 8
0
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)
Ejemplo n.º 9
0
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})
Ejemplo n.º 10
0
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})
Ejemplo n.º 11
0
    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")
Ejemplo n.º 12
0
 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")
Ejemplo n.º 13
0
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)
Ejemplo n.º 14
0
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})
Ejemplo n.º 15
0
    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'
                })
Ejemplo n.º 16
0
    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)
Ejemplo n.º 17
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
                           }
                       })
Ejemplo n.º 18
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)
Ejemplo n.º 19
0
    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
Ejemplo n.º 20
0
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")
Ejemplo n.º 21
0
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)
Ejemplo n.º 22
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)
Ejemplo n.º 23
0
    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
Ejemplo n.º 24
0
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'))
Ejemplo n.º 25
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")
Ejemplo n.º 26
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)
Ejemplo n.º 27
0
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)
Ejemplo n.º 28
0
    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))
Ejemplo n.º 29
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)
Ejemplo n.º 30
0
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)