Exemplo n.º 1
0
    def add_friend(_user_uuid ,_findlock_uuid, _friendcode) -> m_LogicReturn: #using
        if not v.verify_uuid(_findlock_uuid).success:
            return m_LogicReturn.f_error_msg(f"{_findlock_uuid} is not a valid uuid!")
        if not v.verify_uuid(_user_uuid).success:
            return m_LogicReturn.f_error_msg(f"{_user_uuid} is not a valid uuid!")

        logic_resp = UserLogic.check_if_user_allowed_to_use_findlock(_user_uuid,_findlock_uuid)
        if not logic_resp.success:
            return m_LogicReturn.f_error_msg( logic_resp.content)
        
        if not v.verify_friendcode(_friendcode).success:
            return m_LogicReturn.f_error_msg(f"{_friendcode} is not a valid friendcode")
        
        friendcode_splitter = str(_friendcode).split("#")
        voornaam = friendcode_splitter[0]
        friendcode = friendcode_splitter[1]

        users_of_friendcode = DbUser().get_all_users()
        if not users_of_friendcode.success:
            return m_LogicReturn.f_error_msg( users_of_friendcode.content)
        
        users_of_friendcode = users_of_friendcode.addon_data


        user_of_friendcode = None
        for u in users_of_friendcode:
            _voornaam = u.first_name 
            _friendcode = u.friend_code

            if _voornaam == voornaam and _friendcode == friendcode:
                user_of_friendcode = u
        
        if v.value_empty(user_of_friendcode):
            return m_LogicReturn.f_error_msg( "Could not find user by this friendcode!")
        
        user_of_friendcode: m_User
            


        db_resp = DbFindlock().get_findlock(
            m_FindlockEntries.device_uuid,
            _findlock_uuid
        )
        if not db_resp.success:
            return m_LogicReturn.f_error_msg( "Could not get findlock with this uuid!")
        
        Findlock = db_resp.addon_data
        Findlock: m_Findlock

        if user_of_friendcode.user_uuid in Findlock.FindlockPermission.allowed_uuids:
            return m_LogicReturn.f_error_msg( "This user already have permissions")
        
        Findlock.FindlockPermission.addAllowedUuid(user_of_friendcode.user_uuid)

        db_resp = DbFindlock().update_findlock(Findlock)
        if not db_resp.success:
            return m_LogicReturn.f_error_msg( db_resp.content)
        return m_LogicReturn.f_success_msg(f"{friendcode} is added!")
Exemplo n.º 2
0
    def get_allowed_users_for_findlock(_findlock_uuid) -> m_LogicReturn:
        if not v.verify_uuid(_findlock_uuid).success:
            return m_LogicReturn.f_error_msg(f"{_findlock_uuid} is not a valid uuid!")
        
        db_resp = DbFindlock().get_findlock(
            m_FindlockEntries.device_uuid,
            _findlock_uuid
        )
        if not db_resp.success:
            return m_LogicReturn.f_error_msg(db_resp.content)
        
        findlock = db_resp.addon_data
        findlock: m_Findlock

        allowed_names = list()
        for u in findlock.FindlockPermission.allowed_uuids:
            db_resp = DbUser().get_user(
                m_UserEntries.user_uuid,
                u
            )
            if not db_resp.success:
                return m_LogicReturn.f_error_msg(db_resp.content)
            
            tmp_user = db_resp.addon_data
            tmp_user: m_User

            allowed_names.append(f"{tmp_user.first_name} {tmp_user.surname}")
        
        return m_LogicReturn.f_success("Ok!", allowed_names)
Exemplo n.º 3
0
    def pair_with_findlock(_device_uuid, _device_pincode, _user_uuid) -> m_LogicReturn: #using    
        if not v.verify_uuid(_device_uuid).success:
            return m_LogicReturn.f_error_msg(f"{_device_uuid} is not a valid uuid!")
        
        db_resp = DbFindlock().get_findlock(
            m_FindlockEntries.device_uuid,
            _device_uuid
        )
        if not db_resp.success:
            return m_LogicReturn.f_error_msg( "This uuid does not exist!")
        Findlock = db_resp.addon_data
        Findlock: m_Findlock

        if Findlock.FindlockPermission.master_uuid is not None:
            return m_LogicReturn.f_error_msg( "This findlock is already paired!")

        if Findlock.master_pincode != _device_pincode:
            return m_LogicReturn.f_error_msg( "Pincode mismatch!")

        Findlock.FindlockPermission.master_uuid = _user_uuid

        db_resp = DbFindlock().update_findlock(Findlock)
        if not db_resp.success:
            return m_LogicReturn.f_error_msg( db_resp.content)
        return m_LogicReturn.f_success_msg( "Paired!")
Exemplo n.º 4
0
    def set_findlock_lock_state(  #using
            device_uuid,
            new_lock_state,  #mEventType
            auth_value,  #
            auth_type):  #userentries

        if not v.verify_uuid(device_uuid).success:
            return m_LogicReturn.f_error_msg(
                f"{device_uuid} is not a valid uuid!")

        event_types = t.get_types(m_EventTypes())
        if new_lock_state not in event_types:
            return m_LogicReturn.f_error_msg(
                f"{new_lock_state} is not a valid event type!")

        auth_types = t.get_types(m_UserEntries())
        if auth_type not in auth_types:
            return m_LogicReturn.f_error_msg(
                f"{auth_type} is not a valid userentry!")

        db_resp = db_Findlock().get_findlock(m_FindlockEntries.device_uuid,
                                             device_uuid)
        if not db_resp.success:
            return m_LogicReturn.f_error_msg(db_resp.content)

        _findlock = db_resp.addon_data
        _findlock: m_Findlock

        db_resp = db_User().get_all_users()
        if not db_resp.success:
            return m_LogicReturn.f_error_msg(db_resp.content)

        _users = db_resp.addon_data
        user_have_rights = False

        if auth_type == m_UserEntries.finger_id:
            for user in _users:
                if user.finger_id == auth_value:
                    if user.user_uuid == _findlock.FindlockPermission.master_uuid:
                        user_have_rights = True
                    if user.user_uuid in _findlock.FindlockPermission.allowed_uuids:
                        user_have_rights = True
        elif auth_type == m_UserEntries.nfc_id:
            for user in _users:
                if user.nfc_id == auth_value:
                    if user.user_uuid == _findlock.FindlockPermission.master_uuid:
                        user_have_rights = True
                    if user.user_uuid in _findlock.FindlockPermission.allowed_uuids:
                        user_have_rights = True
        else:
            return m_LogicReturn.f_error_msg("Unsupported auth type!")

        if not user_have_rights:
            return m_LogicReturn.f_error_msg("Permission error!")

        return RestLogic.set_findlock_event(device_uuid, new_lock_state)
Exemplo n.º 5
0
    def get_name_by_uuid(i_uuid) -> m_LogicReturn:  #using
        if not v.verify_uuid(i_uuid).success:
            return m_LogicReturn.f_error_msg("Invalid UUID")

        db_resp = db_User().get_user(m_UserEntries.user_uuid, i_uuid)
        if not db_resp.success:
            return m_LogicReturn.f_error_msg(db_resp.content)

        User = db_resp.addon_data
        User: m_User
        return m_LogicReturn.f_success_msg(f"{User.first_name} {User.surname}")
Exemplo n.º 6
0
    def get_user_info(user_uuid) -> m_LogicReturn:
        if not v.verify_uuid(user_uuid).success:
            return m_LogicReturn.f_error_msg(
                f"{user_uuid} is not a valid uuid")
        db_resp = db_User().get_user(m_UserEntries.user_uuid, user_uuid)
        if not db_resp.success:
            return m_LogicReturn.f_error_msg(db_resp.content)

        _user = db_resp.addon_data
        _user: m_User

        return m_LogicReturn.f_success("User found!", _user)
Exemplo n.º 7
0
    def get_findlock_info(findlock_uuid) -> m_LogicReturn:
        if not v.verify_uuid(findlock_uuid).success:
            return m_LogicReturn.f_error_msg(
                f"{findlock_uuid} is not a valid uuid")
        db_resp = db_Findlock().get_findlock(m_FindlockEntries.device_uuid,
                                             findlock_uuid)
        if not db_resp.success:
            return m_LogicReturn.f_error_msg(db_resp.content)

        _findlock = db_resp.addon_data
        _findlock: m_Findlock

        return m_LogicReturn.f_success("Findlock found!", _findlock)
Exemplo n.º 8
0
    def get_info_about_findlock(device_uuid) -> m_LogicReturn:
        if not v.verify_uuid(device_uuid).success:
            return m_LogicReturn.f_error_msg(f"{device_uuid} is not a valid uuid!")
        db_resp = DbFindlock().get_findlock(
            m_FindlockEntries.device_uuid,
            device_uuid
        )
        if not db_resp.success:
            return m_LogicReturn.f_error_msg(db_resp.addon_data)

        Findlock = db_resp.addon_data
        Findlock: m_Findlock

        return m_LogicReturn.f_success("Found info!", Findlock)
Exemplo n.º 9
0
    def remove_findlock(findlock_uuid) -> m_LogicReturn:
        if not v.verify_uuid(findlock_uuid).success:
            return m_LogicReturn.f_error_msg("UUID is not valid!")
        db_resp = db_Findlock().get_findlock(m_FindlockEntries.device_uuid,
                                             findlock_uuid)
        if not db_resp.success:
            return m_LogicReturn.f_error_msg(db_resp.content)

        _Findlock = db_resp.addon_data
        _Findlock: m_Findlock

        db_resp = db_Findlock().delete_findlock(_Findlock)
        if db_resp.success:
            return m_LogicReturn.f_success_msg(db_resp.content)
        return m_LogicReturn.f_error_msg(db_resp.content)
Exemplo n.º 10
0
    def get_findlock_event(device_uuid) -> m_LogicReturn:  #using
        if not v.verify_uuid(device_uuid).success:
            return m_LogicReturn.f_error_msg(
                f"{device_uuid} is not a valid uuid")

        db_resp = db_Findlock().get_findlock(m_FindlockEntries.device_uuid,
                                             device_uuid)
        if not db_resp.success:
            return m_LogicReturn.f_error_msg(db_resp.content)

        Findlock = db_resp.addon_data
        Findlock: m_Findlock

        # TODO: check if client waits for data in data and not in content
        return m_LogicReturn.f_success("Found event.", Findlock.Event.toDict())
Exemplo n.º 11
0
    def get_findlock_location(device_uuid) -> m_LogicReturn:
        if not v.verify_uuid(device_uuid).success:
            return m_LogicReturn.f_error_msg("Invalid UUID")

        db_resp = db_Findlock().get_findlock(m_FindlockEntries.device_uuid,
                                             device_uuid)
        if not db_resp.success:
            return m_LogicReturn.f_error_msg(db_resp.content)

        findlock = db_resp.addon_data
        findlock: m_Findlock

        n_locations = findlock.GpsLocationHistory.get_location_count() - 1
        if n_locations < 0:
            return m_LogicReturn.f_error_msg("No locations")
        return m_LogicReturn.f_success(
            "Returned.",
            findlock.GpsLocationHistory.get_location(n_locations).toDict())
Exemplo n.º 12
0
    def findlock_update(findlock_uuid, data_keys,
                        data_values) -> m_LogicReturn:
        if not v.verify_uuid(findlock_uuid).success:
            return m_LogicReturn.f_error_msg(
                f"{findlock_uuid} is not a valid uuid")
        if len(data_keys) != len(data_values):
            return m_LogicReturn.f_error_msg("Mismatch in data!")

        for i in range(0, len(data_values)):
            data_val = data_values[i]
            if data_val == "None":
                data_values[i] = None
            elif data_val == "True":
                data_values[i] = True
            elif data_val == "False":
                data_values[i] = False

        valid_data_keys = Tools.get_types(m_FindlockEntries())

        db_resp = db_Findlock().get_findlock(m_FindlockEntries.device_uuid,
                                             findlock_uuid)
        if not db_resp.success:
            return m_LogicReturn.f_error_msg(db_resp.content)

        _findlock = db_resp.addon_data
        _findlock: m_Findlock

        _findlock_dict = _findlock.toDict()

        for i in range(0, len(data_keys)):
            key = data_keys[i]
            if key not in valid_data_keys:
                return m_LogicReturn.f_error_msg(f"{key} is not a valid key!")
            val = data_values[i]

            _findlock_dict[key] = val

        _findlock = m_Findlock.fromDict(_findlock_dict)
        db_resp = db_Findlock().update_findlock(_findlock)
        if not db_resp.success:
            return m_LogicReturn.f_error_msg(db_resp.content)
        return m_LogicReturn.f_success_msg(db_resp.content)
Exemplo n.º 13
0
    def check_if_user_allowed_to_use_findlock(_user_uuid,_findlock_uuid, _master_only=True) -> m_LogicReturn: #using
        if not v.verify_uuid(_user_uuid).success:
            return m_LogicReturn.f_error_msg(f"{_user_uuid} is not a valid uuid")
        db_resp = DbFindlock().get_findlock(
            m_FindlockEntries.device_uuid,
            _findlock_uuid
        )
        if not db_resp.success:
            return m_LogicReturn.f_error_msg( db_resp.content)

        Findlock = db_resp.addon_data
        Findlock: m_Findlock

        if _user_uuid == Findlock.FindlockPermission.master_uuid:
            return m_LogicReturn.f_success_msg( "User is master")

        if not _master_only:
            if _user_uuid in Findlock.FindlockPermission.allowed_uuids:
                return m_LogicReturn.f_success_msg( "User is allowed!")
        return m_LogicReturn.f_error_msg( "User is not allowed!")
Exemplo n.º 14
0
    def user_send_mail(user_uuid, subject, content) -> m_LogicReturn:
        if not v.verify_uuid(user_uuid).success:
            return m_LogicReturn.f_error_msg(
                f"{user_uuid} is not a valid uuid")

        db_resp = db_User().get_user(m_UserEntries.user_uuid, user_uuid)
        if not db_resp.success:
            return m_LogicReturn.f_error_msg(db_resp.content)

        _user = db_resp.addon_data
        _user: m_User

        _user_email = _user.email
        _user_voornaam = _user.first_name

        admin_mail = Email.get_admin_email(_user_email, _user_voornaam,
                                           subject, content)
        logic_resp = Email.send_email(_user_email, admin_mail)
        if not logic_resp.success:
            return m_LogicReturn.f_error_msg(logic_resp.content)
        return m_LogicReturn.f_success_msg("Mail sent!")
Exemplo n.º 15
0
    def user_update(user_uuid, data_keys, data_values) -> m_LogicReturn:
        if not v.verify_uuid(user_uuid).success:
            return m_LogicReturn.f_error_msg(
                f"{user_uuid} is not a valid uuid")
        if len(data_keys) != len(data_values):
            return m_LogicReturn.f_error_msg("Mismatch in data!")

        for i in range(0, len(data_values)):
            data_val = data_values[i]
            if data_val == "None":
                data_values[i] = None
            elif data_val == "True":
                data_values[i] = True
            elif data_val == "False":
                data_values[i] = False

        valid_data_keys = Tools.get_types(m_UserEntries())

        db_resp = db_User().get_user(m_UserEntries.user_uuid, user_uuid)
        if not db_resp.success:
            return m_LogicReturn.f_error_msg(db_resp.content)

        _user = db_resp.addon_data
        _user: m_User

        _user_dict = _user.toDict()

        for i in range(0, len(data_keys)):
            key = data_keys[i]
            if key not in valid_data_keys:
                return m_LogicReturn.f_error_msg(f"{key} is not a valid key!")
            val = data_values[i]

            _user_dict[key] = val

        _user = m_User.fromDict(_user_dict)
        db_resp = db_User().update_user(_user)
        if not db_resp.success:
            return m_LogicReturn.f_error_msg(db_resp.content)
        return m_LogicReturn.f_success_msg(db_resp.content)
Exemplo n.º 16
0
    def set_findlock_event(device_uuid, event_type) -> m_LogicReturn:  #using
        valid_event_types = t.get_types(m_EventTypes())
        print(valid_event_types)
        if event_type not in valid_event_types:
            return m_LogicReturn.f_error_msg(
                f"{event_type} is not a valid event type!")

        if not v.verify_uuid(device_uuid).success:
            return m_LogicReturn.f_error_msg(
                f"{device_uuid} is not a valid uuid")

        db_resp = db_Findlock().get_findlock(m_FindlockEntries.device_uuid,
                                             device_uuid)
        if not db_resp.success:
            return m_LogicReturn.f_error_msg(db_resp.content)
        _findlock = db_resp.addon_data
        _findlock: m_Findlock

        _findlock.Event = m_Event(event_type, t.get_unix_time())

        db_resp = db_Findlock().update_findlock(_findlock)
        return m_LogicReturn.f_success_msg("Event updated!")
Exemplo n.º 17
0
    def get_user_findlocks(_user_uuid: str,master_only=True) -> m_LogicReturn: #using
        if not v.verify_uuid(_user_uuid).success:
            return m_LogicReturn.f_error_msg(f"{_user_uuid} is not a valid uuid")
        
        # todo: make query with find (and not find_one)
        db_resp = DbFindlock().get_all_findlocks()
        if not db_resp.success:
            return m_LogicReturn.f_error_msg( db_resp.content)
        
        Findlocks = db_resp.addon_data
        Findlocks: [m_Findlock]

        findlocks_list = list()
        for i in Findlocks:
            i: m_Findlock
            if i.FindlockPermission.master_uuid == _user_uuid:
                findlocks_list.append(i)
        if not master_only:
            for i in Findlocks:
                i: m_Findlock
                if _user_uuid in i.FindlockPermission.allowed_uuids:
                    findlocks_list.append(i)
        return m_LogicReturn.f_success("Found findlocks", findlocks_list)