Пример #1
0
    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,
        )
Пример #2
0
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()
Пример #3
0
    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)
Пример #4
0
    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,
        )
Пример #5
0
 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)
Пример #6
0
    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,
        )
Пример #7
0
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')
Пример #8
0
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()