PureBasic AWS IAM: List Users

Back to Index

Lists the IAM users that have the specified path prefix. If no path prefix is specified, the operation returns all users in the AWS account. If there are none, the operation returns an empty list. .

Documentation: https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListUsers.html

CURL Command

curl -X GET https://iam.amazonaws.com/ \
  -d "Action=ListUsers" \
  -d "PathPrefix=/" \
  -d "Version=2010-05-08"

PureBasic Example

IncludeFile "CkStringBuilder.pb"
IncludeFile "CkRest.pb"
IncludeFile "CkXml.pb"
IncludeFile "CkAuthAws.pb"

Procedure ChilkatExample()

    rest.i = CkRest::ckCreate()
    If rest.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success.i

    authAws.i = CkAuthAws::ckCreate()
    If authAws.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkAuthAws::setCkAccessKey(authAws, "AWS_ACCESS_KEY")
    CkAuthAws::setCkSecretKey(authAws, "AWS_SECRET_KEY")
    CkAuthAws::setCkRegion(authAws, "us-east-1")
    CkAuthAws::setCkServiceName(authAws, "iam")
    CkRest::ckSetAuthAws(rest,authAws)

    ;  URL: https://iam.amazonaws.com/
    bTls.i = 1
    port.i = 443
    bAutoReconnect.i = 1
    success = CkRest::ckConnect(rest,"iam.amazonaws.com",port,bTls,bAutoReconnect)
    If success <> 1
        Debug "ConnectFailReason: " + Str(CkRest::ckConnectFailReason(rest))
        Debug CkRest::ckLastErrorText(rest)
        CkRest::ckDispose(rest)
        CkAuthAws::ckDispose(authAws)
        ProcedureReturn
    EndIf

    CkRest::ckAddQueryParam(rest,"Action","ListUsers")
    CkRest::ckAddQueryParam(rest,"PathPrefix","/")
    CkRest::ckAddQueryParam(rest,"Version","2010-05-08")

    sbResponseBody.i = CkStringBuilder::ckCreate()
    If sbResponseBody.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkRest::ckFullRequestNoBodySb(rest,"GET","/",sbResponseBody)
    If success <> 1
        Debug CkRest::ckLastErrorText(rest)
        CkRest::ckDispose(rest)
        CkAuthAws::ckDispose(authAws)
        CkStringBuilder::ckDispose(sbResponseBody)
        ProcedureReturn
    EndIf

    respStatusCode.i = CkRest::ckResponseStatusCode(rest)
    If respStatusCode >= 400
        Debug "Response Status Code = " + Str(respStatusCode)
        Debug "Response Header:"
        Debug CkRest::ckResponseHeader(rest)
        Debug "Response Body:"
        Debug CkStringBuilder::ckGetAsString(sbResponseBody)
        CkRest::ckDispose(rest)
        CkAuthAws::ckDispose(authAws)
        CkStringBuilder::ckDispose(sbResponseBody)
        ProcedureReturn
    EndIf

    xmlResponse.i = CkXml::ckCreate()
    If xmlResponse.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkXml::ckLoadSb(xmlResponse,sbResponseBody,1)

    ListUsersResponse_xmlns.s
    i.i
    count_i.i
    tagPath.s
    UserId.s
    Path.s
    UserName.s
    Arn.s
    CreateDate.s
    PasswordLastUsed.s
    IsTruncated.s
    RequestId.s

    ListUsersResponse_xmlns = CkXml::ckGetAttrValue(xmlResponse,"xmlns")
    i = 0
    count_i = CkXml::ckNumChildrenHavingTag(xmlResponse,"ListUsersResult|Users|member")
    While i < count_i
        CkXml::setCkI(xmlResponse, i)
        UserId = CkXml::ckGetChildContent(xmlResponse,"ListUsersResult|Users|member[i]|UserId")
        Path = CkXml::ckGetChildContent(xmlResponse,"ListUsersResult|Users|member[i]|Path")
        UserName = CkXml::ckGetChildContent(xmlResponse,"ListUsersResult|Users|member[i]|UserName")
        Arn = CkXml::ckGetChildContent(xmlResponse,"ListUsersResult|Users|member[i]|Arn")
        CreateDate = CkXml::ckGetChildContent(xmlResponse,"ListUsersResult|Users|member[i]|CreateDate")
        PasswordLastUsed = CkXml::ckGetChildContent(xmlResponse,"ListUsersResult|Users|member[i]|PasswordLastUsed")
        i = i + 1
    Wend
    IsTruncated = CkXml::ckGetChildContent(xmlResponse,"ListUsersResult|IsTruncated")
    RequestId = CkXml::ckGetChildContent(xmlResponse,"ResponseMetadata|RequestId")


    CkRest::ckDispose(rest)
    CkAuthAws::ckDispose(authAws)
    CkStringBuilder::ckDispose(sbResponseBody)
    CkXml::ckDispose(xmlResponse)


    ProcedureReturn
EndProcedure

Sample XML Response Body

<?xml version="1.0" encoding="utf-8" ?>
<ListUsersResponse xmlns="https://iam.amazonaws.com/doc/2010-05-08/">
    <ListUsersResult>
        <Users>
            <member>
                <UserId>AID2MAB8DPLSRHEXAMPLE</UserId>
                <Path>/division_abc/subdivision_xyz/engineering/</Path>
                <UserName>Andrew</UserName>
                <Arn>arn:aws:iam::123456789012:user/division_abc/subdivision_xyz/engineering/Andrew</Arn>
                <CreateDate>2012-09-05T19:38:48Z</CreateDate>
                <PasswordLastUsed>2014-09-08T21:47:36Z</PasswordLastUsed>
            </member>
            <member>
                <UserId>AIDIODR4TAW7CSEXAMPLE</UserId>
                <Path>/division_abc/subdivision_xyz/engineering/</Path>
                <UserName>Jackie</UserName>
                <Arn>arn:aws:iam::123456789012:user/division_abc/subdivision_xyz/engineering/Jackie</Arn>
                <CreateDate>2014-04-09T15:43:45Z</CreateDate>
                <PasswordLastUsed>2014-09-24T16:18:07Z</PasswordLastUsed>
            </member>
        </Users>
        <IsTruncated>false</IsTruncated>
    </ListUsersResult>
    <ResponseMetadata>
        <RequestId>7a62c49f-347e-4fc4-9331-6e8eEXAMPLE</RequestId>
    </ResponseMetadata>
</ListUsersResponse>