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!")
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)
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!")
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)
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}")
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)
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)
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)
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)
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())
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())
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)
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!")
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!")
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)
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!")
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)