def query_es(self, limit, skip, query=None): web_user_filter = [ { "term": { "user.domain_memberships.domain": self.domain } }, ] web_user_filter.extend(ADD_TO_ES_FILTER['web_users']) q = { "filter": { "and": web_user_filter }, "sort": { 'username.exact': 'asc' }, } default_fields = ["username", "last_name", "first_name"] q["query"] = search_string_query(query, default_fields) return es_query( params={}, q=q, es_url=ES_URLS["users"], size=limit, start_at=skip, )
def login_as_user_query(domain, couch_user, search_string, limit, offset, user_data_fields=None): ''' Takes in various parameters to determine which users to populate the login as screen. :param domain: String domain :param couch_user: The CouchUser that is using the Login As feature :param search_string: The query that filters the users returned. Filters based on the `search_fields` as well as any fields defined in `user_data_fields`. :param limit: The max amount of users returned. :param offset: From where to start the query. :param user_data_fields: A list of custom user data fields that should also be searched by the `search_string` :returns: An EsQuery instance. ''' search_fields = [ "base_username", "last_name", "first_name", "phone_numbers" ] should_criteria_query = [ queries.search_string_query(search_string, search_fields), ] if user_data_fields: or_criteria = [] for field in user_data_fields: or_criteria.append( filters.AND( filters.term('user_data_es.key', field), filters.term('user_data_es.value', search_string), ), ) should_criteria_query.append( queries.nested_filter('user_data_es', filters.OR(*or_criteria))) user_es = ( UserES().domain(domain).start(offset).size(limit). sort('username.exact').set_query( queries.BOOL_CLAUSE( queries.SHOULD_CLAUSE( should_criteria_query, # It should either match on the search fields like username or it # should match on the custom user data fields. If this were 2, then # it would require the search string to match both on the search fields and # the custom user data fields. minimum_should_match=1, ), ))) if not couch_user.has_permission(domain, 'access_all_locations'): loc_ids = SQLLocation.objects.accessible_to_user( domain, couch_user).location_ids() user_es = user_es.location(list(loc_ids)) return user_es.mobile_users()
def query_es(self, limit, skip, query=None): web_user_filter = [{"term": {"user.domain_memberships.domain": self.domain}}] web_user_filter.extend(ADD_TO_ES_FILTER["web_users"]) q = {"filter": {"and": web_user_filter}, "sort": {"username.exact": "asc"}} default_fields = ["username", "last_name", "first_name"] q["query"] = search_string_query(query, default_fields) return es_query(params={}, q=q, es_url=ES_URLS["users"], size=limit, start_at=skip)
def query_es(self, limit, skip, query=None): web_user_filter = [ {"term": {"user.domain_memberships.domain": self.domain}}, ] web_user_filter.extend(ADD_TO_ES_FILTER['web_users']) q = { "filter": {"and": web_user_filter}, "sort": {'username.exact': 'asc'}, } default_fields = ["username", "last_name", "first_name"] q["query"] = search_string_query(query, default_fields) return es_query( params={}, q=q, es_index='users', size=limit, start_at=skip, )
def query_es(self): q = { "filter": { "and": ADD_TO_ES_FILTER["users"][:] }, "sort": { 'username.exact': 'asc' }, } default_fields = ["username.exact", "last_name", "first_name"] q["query"] = search_string_query(self.query, default_fields) params = { "domain": self.domain, "is_active": not self.show_inactive, } self.es_results = es_query(params=params, q=q, es_url=ES_URLS["users"], size=self.users_list_limit, start_at=self.users_list_skip)
def _query_es(limit, skip, query=None): web_user_filter = [ { "term": { "user.domain_memberships.domain": domain } }, { "term": { "doc_type": "WebUser" } }, { "term": { "base_doc": "couchuser" } }, { "term": { "is_active": True } }, ] q = { "filter": { "and": web_user_filter }, "sort": { 'username.exact': 'asc' }, } default_fields = ["username", "last_name", "first_name"] q["query"] = search_string_query(query, default_fields) return es_query( params={}, q=q, es_index='users', size=limit, start_at=skip, )
def get_search_users_in_domain_es_query(domain, search_string, limit, offset): """ returns a UserES object :param domain: :param search_string: A query string that searches in the specified search fields :param limit: Number of records to return :param offset: Offset to start query """ default_search_fields = ["base_username", "last_name", "first_name"] user_es = UserES().domain(domain) if RESTRICT_LOGIN_AS.enabled(domain): user_es = user_es.OR( users.metadata('login_as_user', search_string), queries.search_string_query(search_string, default_search_fields)) else: user_es = user_es.search_string_query(search_string, default_search_fields) return user_es.start(offset).size(limit).sort('username.exact')
def login_as_user_query( domain, couch_user, search_string, limit, offset, user_data_fields=None): ''' Takes in various parameters to determine which users to populate the login as screen. :param domain: String domain :param couch_user: The CouchUser that is using the Login As feature :param search_string: The query that filters the users returned. Filters based on the `search_fields` as well as any fields defined in `user_data_fields`. :param limit: The max amount of users returned. :param offset: From where to start the query. :param user_data_fields: A list of custom user data fields that should also be searched by the `search_string` :returns: An EsQuery instance. ''' search_fields = ["base_username", "last_name", "first_name", "phone_numbers"] should_criteria_query = [ queries.search_string_query(search_string, search_fields), ] if user_data_fields: or_criteria = [] for field in user_data_fields: or_criteria.append( filters.AND( filters.term('user_data_es.key', field), filters.term('user_data_es.value', search_string), ), ) should_criteria_query.append( queries.nested_filter( 'user_data_es', filters.OR(*or_criteria) ) ) user_es = ( UserES() .domain(domain) .start(offset) .size(limit) .sort('username.exact') .set_query( queries.BOOL_CLAUSE( queries.SHOULD_CLAUSE( should_criteria_query, # It should either match on the search fields like username or it # should match on the custom user data fields. If this were 2, then # it would require the search string to match both on the search fields and # the custom user data fields. minimum_should_match=1, ), ) ) ) if not couch_user.has_permission(domain, 'access_all_locations'): loc_ids = SQLLocation.objects.accessible_to_user( domain, couch_user ).location_ids() user_es = user_es.location(list(loc_ids)) return user_es.mobile_users()