From f58e2028d183e0e889728249a5aa5097d58a5e5c Mon Sep 17 00:00:00 2001 From: Michael Graeb Date: Wed, 6 Jan 2021 10:59:17 -0800 Subject: [PATCH] Clean up delegate credentials provider (#118) - rename .c file. had a typo and was inconsistent with others. - don't have 2 different shutdown callbacks in options, just offer 1. - don't force user to clean up memory allocated by new_delegate() --- include/aws/auth/credentials.h | 13 ++++-- source/crdential_provider_delegate.c | 25 ---------- source/credentials_provider_delegate.c | 64 ++++++++++++++++++++++++++ 3 files changed, 73 insertions(+), 29 deletions(-) delete mode 100644 source/crdential_provider_delegate.c create mode 100644 source/credentials_provider_delegate.c diff --git a/include/aws/auth/credentials.h b/include/aws/auth/credentials.h index 7707fd2a..5c2b1187 100644 --- a/include/aws/auth/credentials.h +++ b/include/aws/auth/credentials.h @@ -406,6 +406,11 @@ struct aws_credentials_provider_chain_default_options { struct aws_client_bootstrap *bootstrap; }; +typedef int(aws_credentials_provider_delegate_get_credentials_fn)( + void *delegate_user_data, + aws_on_get_credentials_callback_fn callback, + void *callback_user_data); + /** * Configuration options for the delegate credentials provider. */ @@ -413,14 +418,14 @@ struct aws_credentials_provider_delegate_options { struct aws_credentials_provider_shutdown_options shutdown_options; /** - * Provide the vtable of functions to get credentials. + * Delegated get_credentials() callback. */ - struct aws_credentials_provider_vtable *provider_vtable; + aws_credentials_provider_delegate_get_credentials_fn *get_credentials; /** - * Optional implementation. + * User data for delegated callbacks. */ - void *impl; + void *delegate_user_data; }; AWS_EXTERN_C_BEGIN diff --git a/source/crdential_provider_delegate.c b/source/crdential_provider_delegate.c deleted file mode 100644 index b9a0627d..00000000 --- a/source/crdential_provider_delegate.c +++ /dev/null @@ -1,25 +0,0 @@ -/** - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0. - */ - -#include - -#include -#include -#include - -struct aws_credentials_provider *aws_credentials_provider_new_delegate( - struct aws_allocator *allocator, - struct aws_credentials_provider_delegate_options *options) { - struct aws_credentials_provider *provider = aws_mem_calloc(allocator, 1, sizeof(struct aws_credentials_provider)); - if (provider == NULL) { - return NULL; - } - - aws_credentials_provider_init_base(provider, allocator, options->provider_vtable, options->impl); - - provider->shutdown_options = options->shutdown_options; - - return provider; -} diff --git a/source/credentials_provider_delegate.c b/source/credentials_provider_delegate.c new file mode 100644 index 00000000..547616c3 --- /dev/null +++ b/source/credentials_provider_delegate.c @@ -0,0 +1,64 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0. + */ + +#include + +struct aws_credentials_provider_delegate_impl { + aws_credentials_provider_delegate_get_credentials_fn *get_credentials; + void *user_data; +}; + +static int s_credentials_provider_delegate_get_credentials( + struct aws_credentials_provider *provider, + aws_on_get_credentials_callback_fn callback, + void *callback_user_data) { + + struct aws_credentials_provider_delegate_impl *impl = provider->impl; + return impl->get_credentials(impl->user_data, callback, callback_user_data); +} + +static void s_credentials_provider_delegate_destroy(struct aws_credentials_provider *provider) { + aws_credentials_provider_invoke_shutdown_callback(provider); + aws_mem_release(provider->allocator, provider); +} + +static struct aws_credentials_provider_vtable s_credentials_provider_delegate_vtable = { + .get_credentials = s_credentials_provider_delegate_get_credentials, + .destroy = s_credentials_provider_delegate_destroy, +}; + +struct aws_credentials_provider *aws_credentials_provider_new_delegate( + struct aws_allocator *allocator, + struct aws_credentials_provider_delegate_options *options) { + + AWS_ASSERT(options); + AWS_ASSERT(options->get_credentials); + + struct aws_credentials_provider *provider = NULL; + struct aws_credentials_provider_delegate_impl *impl = NULL; + + aws_mem_acquire_many( + allocator, + 2, + &provider, + sizeof(struct aws_credentials_provider), + &impl, + sizeof(struct aws_credentials_provider_delegate_impl)); + + if (!provider) { + return NULL; + } + + AWS_ZERO_STRUCT(*provider); + AWS_ZERO_STRUCT(*impl); + + aws_credentials_provider_init_base(provider, allocator, &s_credentials_provider_delegate_vtable, impl); + provider->shutdown_options = options->shutdown_options; + + impl->get_credentials = options->get_credentials; + impl->user_data = options->delegate_user_data; + + return provider; +}