CognitoIDP:list_users() - Implement AttributesToGet-parameter (#4539)
This commit is contained in:
parent
6e58dc3f12
commit
b9e38ecc76
@ -646,7 +646,9 @@ class CognitoIdpUser(BaseModel):
|
|||||||
}
|
}
|
||||||
|
|
||||||
# list_users brings back "Attributes" while admin_get_user brings back "UserAttributes".
|
# list_users brings back "Attributes" while admin_get_user brings back "UserAttributes".
|
||||||
def to_json(self, extended=False, attributes_key="Attributes"):
|
def to_json(
|
||||||
|
self, extended=False, attributes_key="Attributes", attributes_to_get=None
|
||||||
|
):
|
||||||
user_mfa_setting_list = []
|
user_mfa_setting_list = []
|
||||||
if self.software_token_mfa_enabled:
|
if self.software_token_mfa_enabled:
|
||||||
user_mfa_setting_list.append("SOFTWARE_TOKEN_MFA")
|
user_mfa_setting_list.append("SOFTWARE_TOKEN_MFA")
|
||||||
@ -654,10 +656,15 @@ class CognitoIdpUser(BaseModel):
|
|||||||
user_mfa_setting_list.append("SMS_MFA")
|
user_mfa_setting_list.append("SMS_MFA")
|
||||||
user_json = self._base_json()
|
user_json = self._base_json()
|
||||||
if extended:
|
if extended:
|
||||||
|
attrs = [
|
||||||
|
attr
|
||||||
|
for attr in self.attributes
|
||||||
|
if not attributes_to_get or attr["Name"] in attributes_to_get
|
||||||
|
]
|
||||||
user_json.update(
|
user_json.update(
|
||||||
{
|
{
|
||||||
"Enabled": self.enabled,
|
"Enabled": self.enabled,
|
||||||
attributes_key: self.attributes,
|
attributes_key: attrs,
|
||||||
"MFAOptions": [],
|
"MFAOptions": [],
|
||||||
"UserMFASettingList": user_mfa_setting_list,
|
"UserMFASettingList": user_mfa_setting_list,
|
||||||
}
|
}
|
||||||
|
@ -341,6 +341,7 @@ class CognitoIdpResponse(BaseResponse):
|
|||||||
limit = self._get_param("Limit")
|
limit = self._get_param("Limit")
|
||||||
token = self._get_param("PaginationToken")
|
token = self._get_param("PaginationToken")
|
||||||
filt = self._get_param("Filter")
|
filt = self._get_param("Filter")
|
||||||
|
attributes_to_get = self._get_param("AttributesToGet")
|
||||||
users, token = cognitoidp_backends[self.region].list_users(
|
users, token = cognitoidp_backends[self.region].list_users(
|
||||||
user_pool_id, limit=limit, pagination_token=token
|
user_pool_id, limit=limit, pagination_token=token
|
||||||
)
|
)
|
||||||
@ -385,7 +386,12 @@ class CognitoIdpResponse(BaseResponse):
|
|||||||
and compare(inherent_attributes[name](user), value)
|
and compare(inherent_attributes[name](user), value)
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
response = {"Users": [user.to_json(extended=True) for user in users]}
|
response = {
|
||||||
|
"Users": [
|
||||||
|
user.to_json(extended=True, attributes_to_get=attributes_to_get)
|
||||||
|
for user in users
|
||||||
|
]
|
||||||
|
}
|
||||||
if token:
|
if token:
|
||||||
response["PaginationToken"] = str(token)
|
response["PaginationToken"] = str(token)
|
||||||
return json.dumps(response)
|
return json.dumps(response)
|
||||||
|
@ -2210,6 +2210,33 @@ def test_list_users_when_limit_more_than_total_items():
|
|||||||
result.shouldnt.have.key("PaginationToken")
|
result.shouldnt.have.key("PaginationToken")
|
||||||
|
|
||||||
|
|
||||||
|
@mock_cognitoidp
|
||||||
|
def test_list_users_with_attributes_to_get():
|
||||||
|
conn = boto3.client("cognito-idp", "us-west-2")
|
||||||
|
user_pool_id = conn.create_user_pool(PoolName=str(uuid.uuid4()))["UserPool"]["Id"]
|
||||||
|
|
||||||
|
for _ in range(5):
|
||||||
|
conn.admin_create_user(
|
||||||
|
UserPoolId=user_pool_id,
|
||||||
|
Username=str(uuid.uuid4()),
|
||||||
|
UserAttributes=[
|
||||||
|
{"Name": "family_name", "Value": "Doe"},
|
||||||
|
{"Name": "given_name", "Value": "Jane"},
|
||||||
|
{"Name": "custom:foo", "Value": "bar"},
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
result = conn.list_users(
|
||||||
|
UserPoolId=user_pool_id, AttributesToGet=["given_name", "custom:foo", "unknown"]
|
||||||
|
)
|
||||||
|
users = result["Users"]
|
||||||
|
users.should.have.length_of(5)
|
||||||
|
for user in users:
|
||||||
|
user["Attributes"].should.have.length_of(2)
|
||||||
|
user["Attributes"].should.contain({"Name": "given_name", "Value": "Jane"})
|
||||||
|
user["Attributes"].should.contain({"Name": "custom:foo", "Value": "bar"})
|
||||||
|
|
||||||
|
|
||||||
@mock_cognitoidp
|
@mock_cognitoidp
|
||||||
def test_admin_disable_user():
|
def test_admin_disable_user():
|
||||||
conn = boto3.client("cognito-idp", "us-west-2")
|
conn = boto3.client("cognito-idp", "us-west-2")
|
||||||
|
Loading…
Reference in New Issue
Block a user