%% WARNING: DO NOT EDIT, AUTO-GENERATED CODE! %% See https://github.com/jkakar/aws-codegen for more details. %% @doc Amazon Cognito %% %% Amazon Cognito is a web service that delivers scoped temporary credentials %% to mobile devices and other untrusted environments. Amazon Cognito %% uniquely identifies a device and supplies the user with a consistent %% identity over the lifetime of an application. %% %% Using Amazon Cognito, you can enable authentication with one or more %% third-party identity providers (Facebook, Google, or Login with Amazon), %% and you can also choose to support unauthenticated access from your app. %% Cognito delivers a unique identifier for each user and acts as an OpenID %% token provider trusted by AWS Security Token Service (STS) to access %% temporary, limited-privilege AWS credentials. %% %% To provide end-user credentials, first make an unsigned call to %% GetId. If the end user is authenticated with one of the supported %% identity providers, set the Logins map with the identity %% provider token. GetId returns a unique identifier for the %% user. %% %% Next, make an unsigned call to GetCredentialsForIdentity. This call %% expects the same Logins map as the GetId call, %% as well as the IdentityID originally returned by %% GetId. Assuming your identity pool has been configured via %% the SetIdentityPoolRoles operation, %% GetCredentialsForIdentity will return AWS credentials for %% your use. If your pool has not been configured with %% SetIdentityPoolRoles, or if you want to follow legacy flow, %% make an unsigned call to GetOpenIdToken, which returns the OpenID %% token necessary to call STS and retrieve AWS credentials. This call %% expects the same Logins map as the GetId call, %% as well as the IdentityID originally returned by %% GetId. The token returned by GetOpenIdToken can %% be passed to the STS operation AssumeRoleWithWebIdentity %% to retrieve AWS credentials. %% %% If you want to use Amazon Cognito in an Android, iOS, or Unity %% application, you will probably want to make API calls via the AWS Mobile %% SDK. To learn more, see the AWS Mobile SDK %% Developer Guide. -module(aws_cognito). -export([create_identity_pool/2, create_identity_pool/3, delete_identities/2, delete_identities/3, delete_identity_pool/2, delete_identity_pool/3, describe_identity/2, describe_identity/3, describe_identity_pool/2, describe_identity_pool/3, get_credentials_for_identity/2, get_credentials_for_identity/3, get_id/2, get_id/3, get_identity_pool_roles/2, get_identity_pool_roles/3, get_open_id_token/2, get_open_id_token/3, get_open_id_token_for_developer_identity/2, get_open_id_token_for_developer_identity/3, list_identities/2, list_identities/3, list_identity_pools/2, list_identity_pools/3, lookup_developer_identity/2, lookup_developer_identity/3, merge_developer_identities/2, merge_developer_identities/3, set_identity_pool_roles/2, set_identity_pool_roles/3, unlink_developer_identity/2, unlink_developer_identity/3, unlink_identity/2, unlink_identity/3, update_identity_pool/2, update_identity_pool/3]). -include_lib("hackney/include/hackney_lib.hrl"). %%==================================================================== %% API %%==================================================================== %% @doc Creates a new identity pool. The identity pool is a store of user %% identity information that is specific to your AWS account. The limit on %% identity pools is 60 per account. You must use AWS Developer credentials %% to call this API. create_identity_pool(Client, Input) when is_map(Client), is_map(Input) -> create_identity_pool(Client, Input, []). create_identity_pool(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"CreateIdentityPool">>, Input, Options). %% @doc Deletes identities from an identity pool. You can specify a list of %% 1-60 identities that you want to delete. %% %% You must use AWS Developer credentials to call this API. delete_identities(Client, Input) when is_map(Client), is_map(Input) -> delete_identities(Client, Input, []). delete_identities(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"DeleteIdentities">>, Input, Options). %% @doc Deletes a user pool. Once a pool is deleted, users will not be able %% to authenticate with the pool. %% %% You must use AWS Developer credentials to call this API. delete_identity_pool(Client, Input) when is_map(Client), is_map(Input) -> delete_identity_pool(Client, Input, []). delete_identity_pool(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"DeleteIdentityPool">>, Input, Options). %% @doc Returns metadata related to the given identity, including when the %% identity was created and any associated linked logins. %% %% You must use AWS Developer credentials to call this API. describe_identity(Client, Input) when is_map(Client), is_map(Input) -> describe_identity(Client, Input, []). describe_identity(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"DescribeIdentity">>, Input, Options). %% @doc Gets details about a particular identity pool, including the pool %% name, ID description, creation date, and current number of users. %% %% You must use AWS Developer credentials to call this API. describe_identity_pool(Client, Input) when is_map(Client), is_map(Input) -> describe_identity_pool(Client, Input, []). describe_identity_pool(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"DescribeIdentityPool">>, Input, Options). %% @doc Returns credentials for the the provided identity ID. Any provided %% logins will be validated against supported login providers. If the token %% is for cognito-identity.amazonaws.com, it will be passed through to AWS %% Security Token Service with the appropriate role for the token. %% %% This is a public API. You do not need any credentials to call this API. get_credentials_for_identity(Client, Input) when is_map(Client), is_map(Input) -> get_credentials_for_identity(Client, Input, []). get_credentials_for_identity(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"GetCredentialsForIdentity">>, Input, Options). %% @doc Generates (or retrieves) a Cognito ID. Supplying multiple logins will %% create an implicit linked account. %% %% token+";"+tokenSecret. %% %% This is a public API. You do not need any credentials to call this API. get_id(Client, Input) when is_map(Client), is_map(Input) -> get_id(Client, Input, []). get_id(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"GetId">>, Input, Options). %% @doc Gets the roles for an identity pool. %% %% You must use AWS Developer credentials to call this API. get_identity_pool_roles(Client, Input) when is_map(Client), is_map(Input) -> get_identity_pool_roles(Client, Input, []). get_identity_pool_roles(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"GetIdentityPoolRoles">>, Input, Options). %% @doc Gets an OpenID token, using a known Cognito ID. This known Cognito ID %% is returned by GetId. You can optionally add additional logins for %% the identity. Supplying multiple logins creates an implicit link. %% %% The OpenId token is valid for 15 minutes. %% %% This is a public API. You do not need any credentials to call this API. get_open_id_token(Client, Input) when is_map(Client), is_map(Input) -> get_open_id_token(Client, Input, []). get_open_id_token(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"GetOpenIdToken">>, Input, Options). %% @doc Registers (or retrieves) a Cognito IdentityId and an %% OpenID Connect token for a user authenticated by your backend %% authentication process. Supplying multiple logins will create an implicit %% linked account. You can only specify one developer provider as part of the %% Logins map, which is linked to the identity pool. The %% developer provider is the "domain" by which Cognito will refer to your %% users. %% %% You can use GetOpenIdTokenForDeveloperIdentity to create a %% new identity and to link new logins (that is, user credentials issued by a %% public provider or developer provider) to an existing identity. When you %% want to create a new identity, the IdentityId should be null. %% When you want to associate a new login with an existing %% authenticated/unauthenticated identity, you can do so by providing the %% existing IdentityId. This API will create the identity in the %% specified IdentityPoolId. %% %% You must use AWS Developer credentials to call this API. get_open_id_token_for_developer_identity(Client, Input) when is_map(Client), is_map(Input) -> get_open_id_token_for_developer_identity(Client, Input, []). get_open_id_token_for_developer_identity(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"GetOpenIdTokenForDeveloperIdentity">>, Input, Options). %% @doc Lists the identities in a pool. %% %% You must use AWS Developer credentials to call this API. list_identities(Client, Input) when is_map(Client), is_map(Input) -> list_identities(Client, Input, []). list_identities(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"ListIdentities">>, Input, Options). %% @doc Lists all of the Cognito identity pools registered for your account. %% %% This is a public API. You do not need any credentials to call this API. list_identity_pools(Client, Input) when is_map(Client), is_map(Input) -> list_identity_pools(Client, Input, []). list_identity_pools(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"ListIdentityPools">>, Input, Options). %% @doc Retrieves the IdentityID associated with a %% DeveloperUserIdentifier or the list of %% DeveloperUserIdentifiers associated with an %% IdentityId for an existing identity. Either %% IdentityID or DeveloperUserIdentifier must not %% be null. If you supply only one of these values, the other value will be %% searched in the database and returned as a part of the response. If you %% supply both, DeveloperUserIdentifier will be matched against %% IdentityID. If the values are verified against the database, %% the response returns both values and is the same as the request. Otherwise %% a ResourceConflictException is thrown. %% %% You must use AWS Developer credentials to call this API. lookup_developer_identity(Client, Input) when is_map(Client), is_map(Input) -> lookup_developer_identity(Client, Input, []). lookup_developer_identity(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"LookupDeveloperIdentity">>, Input, Options). %% @doc Merges two users having different IdentityIds, existing %% in the same identity pool, and identified by the same developer provider. %% You can use this action to request that discrete users be merged and %% identified as a single user in the Cognito environment. Cognito associates %% the given source user (SourceUserIdentifier) with the %% IdentityId of the DestinationUserIdentifier. %% Only developer-authenticated users can be merged. If the users to be %% merged are associated with the same public provider, but as two different %% users, an exception will be thrown. %% %% You must use AWS Developer credentials to call this API. merge_developer_identities(Client, Input) when is_map(Client), is_map(Input) -> merge_developer_identities(Client, Input, []). merge_developer_identities(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"MergeDeveloperIdentities">>, Input, Options). %% @doc Sets the roles for an identity pool. These roles are used when making %% calls to GetCredentialsForIdentity action. %% %% You must use AWS Developer credentials to call this API. set_identity_pool_roles(Client, Input) when is_map(Client), is_map(Input) -> set_identity_pool_roles(Client, Input, []). set_identity_pool_roles(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"SetIdentityPoolRoles">>, Input, Options). %% @doc Unlinks a DeveloperUserIdentifier from an existing %% identity. Unlinked developer users will be considered new identities next %% time they are seen. If, for a given Cognito identity, you remove all %% federated identities as well as the developer user identifier, the Cognito %% identity becomes inaccessible. %% %% This is a public API. You do not need any credentials to call this API. unlink_developer_identity(Client, Input) when is_map(Client), is_map(Input) -> unlink_developer_identity(Client, Input, []). unlink_developer_identity(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"UnlinkDeveloperIdentity">>, Input, Options). %% @doc Unlinks a federated identity from an existing account. Unlinked %% logins will be considered new identities next time they are seen. Removing %% the last linked login will make this identity inaccessible. %% %% This is a public API. You do not need any credentials to call this API. unlink_identity(Client, Input) when is_map(Client), is_map(Input) -> unlink_identity(Client, Input, []). unlink_identity(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"UnlinkIdentity">>, Input, Options). %% @doc Updates a user pool. %% %% You must use AWS Developer credentials to call this API. update_identity_pool(Client, Input) when is_map(Client), is_map(Input) -> update_identity_pool(Client, Input, []). update_identity_pool(Client, Input, Options) when is_map(Client), is_map(Input), is_list(Options) -> request(Client, <<"UpdateIdentityPool">>, Input, Options). %%==================================================================== %% Internal functions %%==================================================================== -spec request(aws_client:aws_client(), binary(), map(), list()) -> {ok, Result, {integer(), list(), hackney:client()}} | {error, Error, {integer(), list(), hackney:client()}} | {error, term()} when Result :: map() | undefined, Error :: {binary(), binary()}. request(Client, Action, Input, Options) -> Client1 = Client#{service => <<"cognito-identity">>}, Host = get_host(<<"cognito-identity">>, Client1), URL = get_url(Host, Client1), Headers = [{<<"Host">>, Host}, {<<"Content-Type">>, <<"application/x-amz-json-1.1">>}, {<<"X-Amz-Target">>, << <<"AWSCognitoIdentityService.">>/binary, Action/binary>>}], Payload = jsx:encode(Input), Headers1 = aws_request:sign_request(Client1, <<"POST">>, URL, Headers, Payload), Response = hackney:request(post, URL, Headers1, Payload, Options), handle_response(Response). handle_response({ok, 200, ResponseHeaders, Client}) -> case hackney:body(Client) of {ok, <<>>} -> {ok, undefined, {200, ResponseHeaders, Client}}; {ok, Body} -> Result = jsx:decode(Body, [return_maps]), {ok, Result, {200, ResponseHeaders, Client}} end; handle_response({ok, StatusCode, ResponseHeaders, Client}) -> {ok, Body} = hackney:body(Client), Error = jsx:decode(Body, [return_maps]), Exception = maps:get(<<"__type">>, Error, undefined), Reason = maps:get(<<"message">>, Error, undefined), {error, {Exception, Reason}, {StatusCode, ResponseHeaders, Client}}; handle_response({error, Reason}) -> {error, Reason}. get_host(_EndpointPrefix, #{region := <<"local">>}) -> <<"localhost">>; get_host(EndpointPrefix, #{region := Region, endpoint := Endpoint}) -> aws_util:binary_join([EndpointPrefix, <<".">>, Region, <<".">>, Endpoint], <<"">>). get_url(Host, Client) -> Proto = maps:get(proto, Client), Port = maps:get(port, Client), aws_util:binary_join([Proto, <<"://">>, Host, <<":">>, Port, <<"/">>], <<"">>).