222 lines
6.8 KiB
C
222 lines
6.8 KiB
C
|
|
/**
|
||
|
|
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||
|
|
* SPDX-License-Identifier: Apache-2.0.
|
||
|
|
*/
|
||
|
|
|
||
|
|
#ifndef AWS_SDKUTILS_AWS_PROFILE_H
|
||
|
|
#define AWS_SDKUTILS_AWS_PROFILE_H
|
||
|
|
#include <aws/sdkutils/sdkutils.h>
|
||
|
|
|
||
|
|
AWS_PUSH_SANE_WARNING_LEVEL
|
||
|
|
|
||
|
|
struct aws_allocator;
|
||
|
|
struct aws_string;
|
||
|
|
struct aws_byte_buf;
|
||
|
|
struct aws_byte_cursor;
|
||
|
|
|
||
|
|
/*
|
||
|
|
* A set of data types that model the aws profile specification
|
||
|
|
*
|
||
|
|
* A profile collection is a collection of zero or more named profiles
|
||
|
|
* Each profile is a set of properties (named key-value pairs)
|
||
|
|
* Empty-valued properties may have sub properties (named key-value pairs)
|
||
|
|
*
|
||
|
|
* Resolution rules exist to determine what profile to use, what files to
|
||
|
|
* read profile collections from, and what types of credentials have priority.
|
||
|
|
*
|
||
|
|
* The profile specification is informally defined as "what the aws cli does" and
|
||
|
|
* formally defined in internal aws documents.
|
||
|
|
*/
|
||
|
|
struct aws_profile_property;
|
||
|
|
struct aws_profile;
|
||
|
|
struct aws_profile_collection;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* The profile specification has rule exceptions based on what file
|
||
|
|
* the profile collection comes from.
|
||
|
|
*/
|
||
|
|
enum aws_profile_source_type { AWS_PST_NONE, AWS_PST_CONFIG, AWS_PST_CREDENTIALS };
|
||
|
|
|
||
|
|
/*
|
||
|
|
* The collection can hold different types of sections.
|
||
|
|
*/
|
||
|
|
enum aws_profile_section_type {
|
||
|
|
AWS_PROFILE_SECTION_TYPE_PROFILE,
|
||
|
|
AWS_PROFILE_SECTION_TYPE_SSO_SESSION,
|
||
|
|
|
||
|
|
AWS_PROFILE_SECTION_TYPE_COUNT,
|
||
|
|
};
|
||
|
|
|
||
|
|
AWS_EXTERN_C_BEGIN
|
||
|
|
|
||
|
|
/*************************
|
||
|
|
* Profile collection APIs
|
||
|
|
*************************/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Increments the reference count on the profile collection, allowing the caller to take a reference to it.
|
||
|
|
*
|
||
|
|
* Returns the same profile collection passed in.
|
||
|
|
*/
|
||
|
|
AWS_SDKUTILS_API
|
||
|
|
struct aws_profile_collection *aws_profile_collection_acquire(struct aws_profile_collection *collection);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Decrements a profile collection's ref count. When the ref count drops to zero, the collection will be destroyed.
|
||
|
|
* Returns NULL.
|
||
|
|
*/
|
||
|
|
AWS_SDKUTILS_API
|
||
|
|
struct aws_profile_collection *aws_profile_collection_release(struct aws_profile_collection *collection);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @Deprecated This is equivalent to aws_profile_collection_release.
|
||
|
|
*/
|
||
|
|
AWS_SDKUTILS_API
|
||
|
|
void aws_profile_collection_destroy(struct aws_profile_collection *profile_collection);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Create a new profile collection by parsing a file with the specified path
|
||
|
|
*/
|
||
|
|
AWS_SDKUTILS_API
|
||
|
|
struct aws_profile_collection *aws_profile_collection_new_from_file(
|
||
|
|
struct aws_allocator *allocator,
|
||
|
|
const struct aws_string *file_path,
|
||
|
|
enum aws_profile_source_type source);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Create a new profile collection by merging a config-file-based profile
|
||
|
|
* collection and a credentials-file-based profile collection
|
||
|
|
*/
|
||
|
|
AWS_SDKUTILS_API
|
||
|
|
struct aws_profile_collection *aws_profile_collection_new_from_merge(
|
||
|
|
struct aws_allocator *allocator,
|
||
|
|
const struct aws_profile_collection *config_profiles,
|
||
|
|
const struct aws_profile_collection *credentials_profiles);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Create a new profile collection by parsing text in a buffer. Primarily
|
||
|
|
* for testing.
|
||
|
|
*/
|
||
|
|
AWS_SDKUTILS_API
|
||
|
|
struct aws_profile_collection *aws_profile_collection_new_from_buffer(
|
||
|
|
struct aws_allocator *allocator,
|
||
|
|
const struct aws_byte_buf *buffer,
|
||
|
|
enum aws_profile_source_type source);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Retrieves a reference to a profile with the specified name, if it exists, from the profile collection
|
||
|
|
*/
|
||
|
|
AWS_SDKUTILS_API
|
||
|
|
const struct aws_profile *aws_profile_collection_get_profile(
|
||
|
|
const struct aws_profile_collection *profile_collection,
|
||
|
|
const struct aws_string *profile_name);
|
||
|
|
|
||
|
|
/*
|
||
|
|
* Retrieves a reference to a section with the specified name and type, if it exists, from the profile collection.
|
||
|
|
* You can get the "default" profile or credentials file sections by passing `AWS_PROFILE_SECTION_TYPE_PROFILE`
|
||
|
|
*/
|
||
|
|
AWS_SDKUTILS_API
|
||
|
|
const struct aws_profile *aws_profile_collection_get_section(
|
||
|
|
const struct aws_profile_collection *profile_collection,
|
||
|
|
const enum aws_profile_section_type section_type,
|
||
|
|
const struct aws_string *section_name);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Returns the number of profiles in a collection
|
||
|
|
*/
|
||
|
|
AWS_SDKUTILS_API
|
||
|
|
size_t aws_profile_collection_get_profile_count(const struct aws_profile_collection *profile_collection);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Returns the number of elements of the specified section in a collection.
|
||
|
|
*/
|
||
|
|
AWS_SDKUTILS_API
|
||
|
|
size_t aws_profile_collection_get_section_count(
|
||
|
|
const struct aws_profile_collection *profile_collection,
|
||
|
|
const enum aws_profile_section_type section_type);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Returns a reference to the name of the provided profile
|
||
|
|
*/
|
||
|
|
AWS_SDKUTILS_API
|
||
|
|
const struct aws_string *aws_profile_get_name(const struct aws_profile *profile);
|
||
|
|
|
||
|
|
/**************
|
||
|
|
* profile APIs
|
||
|
|
**************/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Retrieves a reference to a property with the specified name, if it exists, from a profile
|
||
|
|
*/
|
||
|
|
AWS_SDKUTILS_API
|
||
|
|
const struct aws_profile_property *aws_profile_get_property(
|
||
|
|
const struct aws_profile *profile,
|
||
|
|
const struct aws_string *property_name);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Returns how many properties a profile holds
|
||
|
|
*/
|
||
|
|
AWS_SDKUTILS_API
|
||
|
|
size_t aws_profile_get_property_count(const struct aws_profile *profile);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Returns a reference to the property's string value
|
||
|
|
*/
|
||
|
|
AWS_SDKUTILS_API
|
||
|
|
const struct aws_string *aws_profile_property_get_value(const struct aws_profile_property *property);
|
||
|
|
|
||
|
|
/***********************
|
||
|
|
* profile property APIs
|
||
|
|
***********************/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Returns a reference to the value of a sub property with the given name, if it exists, in the property
|
||
|
|
*/
|
||
|
|
AWS_SDKUTILS_API
|
||
|
|
const struct aws_string *aws_profile_property_get_sub_property(
|
||
|
|
const struct aws_profile_property *property,
|
||
|
|
const struct aws_string *sub_property_name);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Returns how many sub properties the property holds
|
||
|
|
*/
|
||
|
|
AWS_SDKUTILS_API
|
||
|
|
size_t aws_profile_property_get_sub_property_count(const struct aws_profile_property *property);
|
||
|
|
|
||
|
|
/***********
|
||
|
|
* Misc APIs
|
||
|
|
***********/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Computes the final platform-specific path for the profile credentials file. Does limited home directory
|
||
|
|
* expansion/resolution.
|
||
|
|
*
|
||
|
|
* override_path, if not null, will be searched first instead of using the standard home directory config path
|
||
|
|
*/
|
||
|
|
AWS_SDKUTILS_API
|
||
|
|
struct aws_string *aws_get_credentials_file_path(
|
||
|
|
struct aws_allocator *allocator,
|
||
|
|
const struct aws_byte_cursor *override_path);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Computes the final platform-specific path for the profile config file. Does limited home directory
|
||
|
|
* expansion/resolution.
|
||
|
|
*
|
||
|
|
* override_path, if not null, will be searched first instead of using the standard home directory config path
|
||
|
|
*/
|
||
|
|
AWS_SDKUTILS_API
|
||
|
|
struct aws_string *aws_get_config_file_path(
|
||
|
|
struct aws_allocator *allocator,
|
||
|
|
const struct aws_byte_cursor *override_path);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Computes the profile to use for credentials lookups based on profile resolution rules
|
||
|
|
*/
|
||
|
|
AWS_SDKUTILS_API
|
||
|
|
struct aws_string *aws_get_profile_name(struct aws_allocator *allocator, const struct aws_byte_cursor *override_name);
|
||
|
|
|
||
|
|
AWS_EXTERN_C_END
|
||
|
|
AWS_POP_SANE_WARNING_LEVEL
|
||
|
|
|
||
|
|
#endif /* AWS_SDKUTILS_AWS_PROFILE_H */
|