diff --git a/generator/integration_tests/golden/internal/golden_kitchen_sink_metadata_decorator.cc b/generator/integration_tests/golden/internal/golden_kitchen_sink_metadata_decorator.cc index a3e5276fba7b2..38ff548a62516 100644 --- a/generator/integration_tests/golden/internal/golden_kitchen_sink_metadata_decorator.cc +++ b/generator/integration_tests/golden/internal/golden_kitchen_sink_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: generator/integration_tests/test.proto #include "generator/integration_tests/golden/internal/golden_kitchen_sink_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -115,6 +116,11 @@ void GoldenKitchenSinkMetadata::SetMetadata(grpc::ClientContext& context, void GoldenKitchenSinkMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata( + "x-goog-user-project", options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/generator/integration_tests/golden/internal/golden_kitchen_sink_option_defaults.cc b/generator/integration_tests/golden/internal/golden_kitchen_sink_option_defaults.cc index 0099343a86c86..a41687fb3b384 100644 --- a/generator/integration_tests/golden/internal/golden_kitchen_sink_option_defaults.cc +++ b/generator/integration_tests/golden/internal/golden_kitchen_sink_option_defaults.cc @@ -39,7 +39,12 @@ auto constexpr kBackoffScaling = 2.0; Options GoldenKitchenSinkDefaultOptions(Options options) { if (!options.has()) { auto env = internal::GetEnv("GOLDEN_KITCHEN_SINK_ENDPOINT"); - options.set(env && !env->empty() ? *env : "goldenkitchensink.googleapis.com"); + options.set( + env && !env->empty() ? *env : "goldenkitchensink.googleapis.com"); + } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); } if (auto emulator = internal::GetEnv("GOLDEN_KITCHEN_SINK_EMULATOR_HOST")) { options.set(*emulator).set( diff --git a/generator/integration_tests/golden/internal/golden_thing_admin_metadata_decorator.cc b/generator/integration_tests/golden/internal/golden_thing_admin_metadata_decorator.cc index 3668989ce9eaf..bb4251847211e 100644 --- a/generator/integration_tests/golden/internal/golden_thing_admin_metadata_decorator.cc +++ b/generator/integration_tests/golden/internal/golden_thing_admin_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: generator/integration_tests/test.proto #include "generator/integration_tests/golden/internal/golden_thing_admin_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -224,6 +225,11 @@ void GoldenThingAdminMetadata::SetMetadata(grpc::ClientContext& context, void GoldenThingAdminMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata( + "x-goog-user-project", options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/generator/integration_tests/golden/internal/golden_thing_admin_option_defaults.cc b/generator/integration_tests/golden/internal/golden_thing_admin_option_defaults.cc index 20d78011d30ee..f3c4794bec880 100644 --- a/generator/integration_tests/golden/internal/golden_thing_admin_option_defaults.cc +++ b/generator/integration_tests/golden/internal/golden_thing_admin_option_defaults.cc @@ -39,7 +39,12 @@ auto constexpr kBackoffScaling = 2.0; Options GoldenThingAdminDefaultOptions(Options options) { if (!options.has()) { auto env = internal::GetEnv("GOLDEN_KITCHEN_SINK_ENDPOINT"); - options.set(env && !env->empty() ? *env : "test.googleapis.com"); + options.set( + env && !env->empty() ? *env : "test.googleapis.com"); + } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); } if (auto emulator = internal::GetEnv("GOLDEN_KITCHEN_SINK_EMULATOR_HOST")) { options.set(*emulator).set( diff --git a/generator/integration_tests/golden/tests/golden_kitchen_sink_metadata_decorator_test.cc b/generator/integration_tests/golden/tests/golden_kitchen_sink_metadata_decorator_test.cc index dd622d067d04b..76ea62fc3a70a 100644 --- a/generator/integration_tests/golden/tests/golden_kitchen_sink_metadata_decorator_test.cc +++ b/generator/integration_tests/golden/tests/golden_kitchen_sink_metadata_decorator_test.cc @@ -13,6 +13,7 @@ // limitations under the License. #include "generator/integration_tests/golden/internal/golden_kitchen_sink_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/testing_util/status_matchers.h" #include "google/cloud/testing_util/validate_metadata.h" @@ -36,7 +37,10 @@ using ::google::test::admin::database::v1::TailLogEntriesRequest; using ::google::test::admin::database::v1::TailLogEntriesResponse; using ::google::test::admin::database::v1::WriteObjectRequest; using ::google::test::admin::database::v1::WriteObjectResponse; +using ::testing::_; +using ::testing::Contains; using ::testing::Not; +using ::testing::Pair; using ::testing::Return; class MetadataDecoratorTest : public ::testing::Test { @@ -55,6 +59,47 @@ class MetadataDecoratorTest : public ::testing::Test { std::string expected_api_client_header_; }; +/// Verify the x-goog-user-project metadata is set. +TEST_F(MetadataDecoratorTest, UserProject) { + // We do this for a single RPC, we are using some knowledge of the + // implementation to assert that this is enough. + EXPECT_CALL(*mock_, GenerateAccessToken) + .WillOnce([](grpc::ClientContext& context, + google::test::admin::database::v1:: + GenerateAccessTokenRequest const&) { + auto metadata = testing_util::GetMetadata(context); + EXPECT_THAT(metadata, Not(Contains(Pair("x-goog-user-project", _)))); + return TransientError(); + }) + .WillOnce([](grpc::ClientContext& context, + google::test::admin::database::v1:: + GenerateAccessTokenRequest const&) { + auto metadata = testing_util::GetMetadata(context); + EXPECT_THAT(metadata, + Contains(Pair("x-goog-user-project", "test-user-project"))); + return TransientError(); + }); + + GoldenKitchenSinkMetadata stub(mock_); + // First try without any UserProjectOption + { + internal::OptionsSpan span(Options{}); + grpc::ClientContext context; + google::test::admin::database::v1::GenerateAccessTokenRequest request; + auto status = stub.GenerateAccessToken(context, request); + EXPECT_EQ(TransientError(), status.status()); + } + // Then try with a UserProjectOption + { + internal::OptionsSpan span( + Options{}.set("test-user-project")); + grpc::ClientContext context; + google::test::admin::database::v1::GenerateAccessTokenRequest request; + auto status = stub.GenerateAccessToken(context, request); + EXPECT_EQ(TransientError(), status.status()); + } +} + TEST_F(MetadataDecoratorTest, GenerateAccessToken) { EXPECT_CALL(*mock_, GenerateAccessToken) .WillOnce([this](grpc::ClientContext& context, diff --git a/generator/integration_tests/golden/tests/golden_kitchen_sink_option_defaults_test.cc b/generator/integration_tests/golden/tests/golden_kitchen_sink_option_defaults_test.cc index bd779b38b3fc3..a7d6ce2883a24 100644 --- a/generator/integration_tests/golden/tests/golden_kitchen_sink_option_defaults_test.cc +++ b/generator/integration_tests/golden/tests/golden_kitchen_sink_option_defaults_test.cc @@ -15,7 +15,7 @@ #include "generator/integration_tests/golden/internal/golden_kitchen_sink_option_defaults.h" #include "google/cloud/common_options.h" #include "google/cloud/grpc_options.h" -#include "google/cloud/internal/setenv.h" +#include "google/cloud/testing_util/scoped_environment.h" #include #include @@ -25,7 +25,10 @@ namespace golden_internal { GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN namespace { +using ::google::cloud::testing_util::ScopedEnvironment; + TEST(GoldenKitchenSinkDefaultOptions, DefaultEndpoint) { + auto env = ScopedEnvironment("GOLDEN_KITCHEN_SINK_ENDPOINT", absl::nullopt); Options options; auto updated_options = GoldenKitchenSinkDefaultOptions(options); EXPECT_EQ("goldenkitchensink.googleapis.com", @@ -33,20 +36,44 @@ TEST(GoldenKitchenSinkDefaultOptions, DefaultEndpoint) { } TEST(GoldenKitchenSinkDefaultOptions, EnvVarEndpoint) { - internal::SetEnv("GOLDEN_KITCHEN_SINK_ENDPOINT", "foo.googleapis.com"); + auto env = + ScopedEnvironment("GOLDEN_KITCHEN_SINK_ENDPOINT", "foo.googleapis.com"); Options options; auto updated_options = GoldenKitchenSinkDefaultOptions(options); EXPECT_EQ("foo.googleapis.com", updated_options.get()); } TEST(GoldenKitchenSinkDefaultOptions, OptionEndpoint) { - internal::SetEnv("GOLDEN_KITCHEN_SINK_ENDPOINT", "foo.googleapis.com"); + auto env = + ScopedEnvironment("GOLDEN_KITCHEN_SINK_ENDPOINT", "foo.googleapis.com"); Options options; options.set("bar.googleapis.com"); auto updated_options = GoldenKitchenSinkDefaultOptions(options); EXPECT_EQ("bar.googleapis.com", updated_options.get()); } +TEST(GoldenKitchenSinkDefaultOptions, DefaultUserProject) { + auto env = ScopedEnvironment("GOOGLE_CLOUD_CPP_USER_PROJECT", absl::nullopt); + Options options; + auto updated_options = GoldenKitchenSinkDefaultOptions(options); + EXPECT_FALSE(updated_options.has()); + EXPECT_EQ("", updated_options.get()); +} + +TEST(GoldenKitchenSinkDefaultOptions, EnvVarUserProject) { + auto env = ScopedEnvironment("GOOGLE_CLOUD_CPP_USER_PROJECT", "test-project"); + Options options; + auto updated_options = GoldenKitchenSinkDefaultOptions(options); + EXPECT_EQ("test-project", updated_options.get()); +} + +TEST(GoldenKitchenSinkDefaultOptions, OptionUserProject) { + auto env = ScopedEnvironment("GOOGLE_CLOUD_CPP_USER_PROJECT", "test-project"); + auto options = Options{}.set("another-project"); + auto updated_options = GoldenKitchenSinkDefaultOptions(options); + EXPECT_EQ("another-project", updated_options.get()); +} + } // namespace GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END } // namespace golden_internal diff --git a/generator/internal/metadata_decorator_generator.cc b/generator/internal/metadata_decorator_generator.cc index ff8ffa5a0705b..c23f1b07933ef 100644 --- a/generator/internal/metadata_decorator_generator.cc +++ b/generator/internal/metadata_decorator_generator.cc @@ -181,6 +181,7 @@ Status MetadataDecoratorGenerator::GenerateCc() { CcPrint("\n"); CcLocalIncludes({vars("metadata_header_path"), "google/cloud/internal/api_client_header.h", + "google/cloud/common_options.h", "google/cloud/status_or.h"}); CcSystemIncludes({vars("proto_grpc_header_path"), "memory"}); @@ -342,6 +343,11 @@ void $metadata_class_name$::SetMetadata(grpc::ClientContext& context, void $metadata_class_name$::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata( + "x-goog-user-project", options.get()); + } } )"""); diff --git a/generator/internal/option_defaults_generator.cc b/generator/internal/option_defaults_generator.cc index f488384fac9fa..011e4fdc2b372 100644 --- a/generator/internal/option_defaults_generator.cc +++ b/generator/internal/option_defaults_generator.cc @@ -92,12 +92,19 @@ Status OptionDefaultsGenerator::GenerateCc() { // clang-format on CcPrint( // clang-format off - {{"\n" - "Options $service_name$DefaultOptions(Options options) {\n" - " if (!options.has()) {\n" - " auto env = internal::GetEnv(\"$service_endpoint_env_var$\");\n" - " options.set(env && !env->empty() ? *env : \"$service_endpoint$\");\n" - " }\n"}, + {{R"""( +Options $service_name$DefaultOptions(Options options) { + if (!options.has()) { + auto env = internal::GetEnv("$service_endpoint_env_var$"); + options.set( + env && !env->empty() ? *env : "$service_endpoint$"); + } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } +)""" + }, {[this]{return vars("emulator_endpoint_env_var").empty();}, "", " if (auto emulator = internal::GetEnv(\"$emulator_endpoint_env_var$\")) {\n" " options.set(*emulator).set(\n" diff --git a/google/cloud/accessapproval/internal/access_approval_metadata_decorator.cc b/google/cloud/accessapproval/internal/access_approval_metadata_decorator.cc index 1ac1c6f485e5e..2d37ad12b5fe7 100644 --- a/google/cloud/accessapproval/internal/access_approval_metadata_decorator.cc +++ b/google/cloud/accessapproval/internal/access_approval_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/accessapproval/v1/accessapproval.proto #include "google/cloud/accessapproval/internal/access_approval_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -103,6 +104,11 @@ void AccessApprovalMetadata::SetMetadata(grpc::ClientContext& context, void AccessApprovalMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/accessapproval/internal/access_approval_option_defaults.cc b/google/cloud/accessapproval/internal/access_approval_option_defaults.cc index cba544f750af9..e0edfb8b08ff9 100644 --- a/google/cloud/accessapproval/internal/access_approval_option_defaults.cc +++ b/google/cloud/accessapproval/internal/access_approval_option_defaults.cc @@ -42,6 +42,10 @@ Options AccessApprovalDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "accessapproval.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/accesscontextmanager/internal/access_context_manager_metadata_decorator.cc b/google/cloud/accesscontextmanager/internal/access_context_manager_metadata_decorator.cc index 258c882996d87..88c22b078310f 100644 --- a/google/cloud/accesscontextmanager/internal/access_context_manager_metadata_decorator.cc +++ b/google/cloud/accesscontextmanager/internal/access_context_manager_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/identity/accesscontextmanager/v1/access_context_manager.proto #include "google/cloud/accesscontextmanager/internal/access_context_manager_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -286,6 +287,11 @@ void AccessContextManagerMetadata::SetMetadata( void AccessContextManagerMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/accesscontextmanager/internal/access_context_manager_option_defaults.cc b/google/cloud/accesscontextmanager/internal/access_context_manager_option_defaults.cc index 9854099459c7c..ea07e74d858f7 100644 --- a/google/cloud/accesscontextmanager/internal/access_context_manager_option_defaults.cc +++ b/google/cloud/accesscontextmanager/internal/access_context_manager_option_defaults.cc @@ -43,6 +43,10 @@ Options AccessContextManagerDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "accesscontextmanager.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/apigateway/internal/api_gateway_metadata_decorator.cc b/google/cloud/apigateway/internal/api_gateway_metadata_decorator.cc index a387789f1138a..f82381bccb8e5 100644 --- a/google/cloud/apigateway/internal/api_gateway_metadata_decorator.cc +++ b/google/cloud/apigateway/internal/api_gateway_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/apigateway/v1/apigateway_service.proto #include "google/cloud/apigateway/internal/api_gateway_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -186,6 +187,11 @@ void ApiGatewayServiceMetadata::SetMetadata(grpc::ClientContext& context, void ApiGatewayServiceMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/apigateway/internal/api_gateway_option_defaults.cc b/google/cloud/apigateway/internal/api_gateway_option_defaults.cc index 9d948631bd0c9..fb793f5e8bdee 100644 --- a/google/cloud/apigateway/internal/api_gateway_option_defaults.cc +++ b/google/cloud/apigateway/internal/api_gateway_option_defaults.cc @@ -43,6 +43,10 @@ Options ApiGatewayServiceDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "apigateway.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/apigeeconnect/internal/connection_metadata_decorator.cc b/google/cloud/apigeeconnect/internal/connection_metadata_decorator.cc index 90901594411ed..d2f1b6a770ef8 100644 --- a/google/cloud/apigeeconnect/internal/connection_metadata_decorator.cc +++ b/google/cloud/apigeeconnect/internal/connection_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/apigeeconnect/v1/connection.proto #include "google/cloud/apigeeconnect/internal/connection_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -49,6 +50,11 @@ void ConnectionServiceMetadata::SetMetadata(grpc::ClientContext& context, void ConnectionServiceMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/apigeeconnect/internal/connection_option_defaults.cc b/google/cloud/apigeeconnect/internal/connection_option_defaults.cc index 45b8e4ae53c82..39cdcec91d8fb 100644 --- a/google/cloud/apigeeconnect/internal/connection_option_defaults.cc +++ b/google/cloud/apigeeconnect/internal/connection_option_defaults.cc @@ -42,6 +42,10 @@ Options ConnectionServiceDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "apigeeconnect.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/appengine/internal/applications_metadata_decorator.cc b/google/cloud/appengine/internal/applications_metadata_decorator.cc index e8deb179f32f2..53f2084bbec72 100644 --- a/google/cloud/appengine/internal/applications_metadata_decorator.cc +++ b/google/cloud/appengine/internal/applications_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/appengine/v1/appengine.proto #include "google/cloud/appengine/internal/applications_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -93,6 +94,11 @@ void ApplicationsMetadata::SetMetadata(grpc::ClientContext& context, void ApplicationsMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/appengine/internal/applications_option_defaults.cc b/google/cloud/appengine/internal/applications_option_defaults.cc index 27c0c9e558ec2..e5f73c78c0ab3 100644 --- a/google/cloud/appengine/internal/applications_option_defaults.cc +++ b/google/cloud/appengine/internal/applications_option_defaults.cc @@ -42,6 +42,10 @@ Options ApplicationsDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "appengine.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/appengine/internal/authorized_certificates_metadata_decorator.cc b/google/cloud/appengine/internal/authorized_certificates_metadata_decorator.cc index 6d5b032198049..c7d27f13d5904 100644 --- a/google/cloud/appengine/internal/authorized_certificates_metadata_decorator.cc +++ b/google/cloud/appengine/internal/authorized_certificates_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/appengine/v1/appengine.proto #include "google/cloud/appengine/internal/authorized_certificates_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -80,6 +81,11 @@ void AuthorizedCertificatesMetadata::SetMetadata( void AuthorizedCertificatesMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/appengine/internal/authorized_certificates_option_defaults.cc b/google/cloud/appengine/internal/authorized_certificates_option_defaults.cc index 7afdcab5b78ba..9b31b1f24ba20 100644 --- a/google/cloud/appengine/internal/authorized_certificates_option_defaults.cc +++ b/google/cloud/appengine/internal/authorized_certificates_option_defaults.cc @@ -43,6 +43,10 @@ Options AuthorizedCertificatesDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "appengine.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/appengine/internal/authorized_domains_metadata_decorator.cc b/google/cloud/appengine/internal/authorized_domains_metadata_decorator.cc index 976738ab01cd4..5b281c18fa323 100644 --- a/google/cloud/appengine/internal/authorized_domains_metadata_decorator.cc +++ b/google/cloud/appengine/internal/authorized_domains_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/appengine/v1/appengine.proto #include "google/cloud/appengine/internal/authorized_domains_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -49,6 +50,11 @@ void AuthorizedDomainsMetadata::SetMetadata(grpc::ClientContext& context, void AuthorizedDomainsMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/appengine/internal/authorized_domains_option_defaults.cc b/google/cloud/appengine/internal/authorized_domains_option_defaults.cc index 9bc1051252f7e..bfdfc13f57d24 100644 --- a/google/cloud/appengine/internal/authorized_domains_option_defaults.cc +++ b/google/cloud/appengine/internal/authorized_domains_option_defaults.cc @@ -42,6 +42,10 @@ Options AuthorizedDomainsDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "appengine.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/appengine/internal/domain_mappings_metadata_decorator.cc b/google/cloud/appengine/internal/domain_mappings_metadata_decorator.cc index 570a70bae3c5a..7b1393eaa04eb 100644 --- a/google/cloud/appengine/internal/domain_mappings_metadata_decorator.cc +++ b/google/cloud/appengine/internal/domain_mappings_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/appengine/v1/appengine.proto #include "google/cloud/appengine/internal/domain_mappings_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -101,6 +102,11 @@ void DomainMappingsMetadata::SetMetadata(grpc::ClientContext& context, void DomainMappingsMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/appengine/internal/domain_mappings_option_defaults.cc b/google/cloud/appengine/internal/domain_mappings_option_defaults.cc index 480c0dead112b..b2efb0f6dd146 100644 --- a/google/cloud/appengine/internal/domain_mappings_option_defaults.cc +++ b/google/cloud/appengine/internal/domain_mappings_option_defaults.cc @@ -42,6 +42,10 @@ Options DomainMappingsDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "appengine.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/appengine/internal/firewall_metadata_decorator.cc b/google/cloud/appengine/internal/firewall_metadata_decorator.cc index 6baf71851282a..c6a579e8417bc 100644 --- a/google/cloud/appengine/internal/firewall_metadata_decorator.cc +++ b/google/cloud/appengine/internal/firewall_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/appengine/v1/appengine.proto #include "google/cloud/appengine/internal/firewall_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -86,6 +87,11 @@ void FirewallMetadata::SetMetadata(grpc::ClientContext& context, void FirewallMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/appengine/internal/firewall_option_defaults.cc b/google/cloud/appengine/internal/firewall_option_defaults.cc index 476e50bc954ef..61d53614b0bd4 100644 --- a/google/cloud/appengine/internal/firewall_option_defaults.cc +++ b/google/cloud/appengine/internal/firewall_option_defaults.cc @@ -42,6 +42,10 @@ Options FirewallDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "appengine.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/appengine/internal/instances_metadata_decorator.cc b/google/cloud/appengine/internal/instances_metadata_decorator.cc index 21c65a158a749..8bfb8c01da01f 100644 --- a/google/cloud/appengine/internal/instances_metadata_decorator.cc +++ b/google/cloud/appengine/internal/instances_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/appengine/v1/appengine.proto #include "google/cloud/appengine/internal/instances_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -90,6 +91,11 @@ void InstancesMetadata::SetMetadata(grpc::ClientContext& context, void InstancesMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/appengine/internal/instances_option_defaults.cc b/google/cloud/appengine/internal/instances_option_defaults.cc index 8ad7c7e7b4b5f..c470d2dc9d221 100644 --- a/google/cloud/appengine/internal/instances_option_defaults.cc +++ b/google/cloud/appengine/internal/instances_option_defaults.cc @@ -42,6 +42,10 @@ Options InstancesDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "appengine.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/appengine/internal/services_metadata_decorator.cc b/google/cloud/appengine/internal/services_metadata_decorator.cc index 1107fbdfcd255..f4279611669bb 100644 --- a/google/cloud/appengine/internal/services_metadata_decorator.cc +++ b/google/cloud/appengine/internal/services_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/appengine/v1/appengine.proto #include "google/cloud/appengine/internal/services_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -90,6 +91,11 @@ void ServicesMetadata::SetMetadata(grpc::ClientContext& context, void ServicesMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/appengine/internal/services_option_defaults.cc b/google/cloud/appengine/internal/services_option_defaults.cc index f3ee5a874c275..d7d367c513b15 100644 --- a/google/cloud/appengine/internal/services_option_defaults.cc +++ b/google/cloud/appengine/internal/services_option_defaults.cc @@ -42,6 +42,10 @@ Options ServicesDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "appengine.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/appengine/internal/versions_metadata_decorator.cc b/google/cloud/appengine/internal/versions_metadata_decorator.cc index 7a67765e299a6..9357011f24ac2 100644 --- a/google/cloud/appengine/internal/versions_metadata_decorator.cc +++ b/google/cloud/appengine/internal/versions_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/appengine/v1/appengine.proto #include "google/cloud/appengine/internal/versions_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -99,6 +100,11 @@ void VersionsMetadata::SetMetadata(grpc::ClientContext& context, void VersionsMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/appengine/internal/versions_option_defaults.cc b/google/cloud/appengine/internal/versions_option_defaults.cc index e6949b3e35781..19bfc210eb874 100644 --- a/google/cloud/appengine/internal/versions_option_defaults.cc +++ b/google/cloud/appengine/internal/versions_option_defaults.cc @@ -42,6 +42,10 @@ Options VersionsDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "appengine.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/artifactregistry/internal/artifact_registry_metadata_decorator.cc b/google/cloud/artifactregistry/internal/artifact_registry_metadata_decorator.cc index 6c4f013db1f37..69c6a7f0107aa 100644 --- a/google/cloud/artifactregistry/internal/artifact_registry_metadata_decorator.cc +++ b/google/cloud/artifactregistry/internal/artifact_registry_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/devtools/artifactregistry/v1/service.proto #include "google/cloud/artifactregistry/internal/artifact_registry_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -68,6 +69,11 @@ void ArtifactRegistryMetadata::SetMetadata(grpc::ClientContext& context, void ArtifactRegistryMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/artifactregistry/internal/artifact_registry_option_defaults.cc b/google/cloud/artifactregistry/internal/artifact_registry_option_defaults.cc index 331c983ea666d..2648aa0e55cd3 100644 --- a/google/cloud/artifactregistry/internal/artifact_registry_option_defaults.cc +++ b/google/cloud/artifactregistry/internal/artifact_registry_option_defaults.cc @@ -42,6 +42,10 @@ Options ArtifactRegistryDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "artifactregistry.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/asset/internal/asset_metadata_decorator.cc b/google/cloud/asset/internal/asset_metadata_decorator.cc index 6bd72d4de4a4b..eec916f822eba 100644 --- a/google/cloud/asset/internal/asset_metadata_decorator.cc +++ b/google/cloud/asset/internal/asset_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/asset/v1/asset_service.proto #include "google/cloud/asset/internal/asset_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -164,6 +165,11 @@ void AssetServiceMetadata::SetMetadata(grpc::ClientContext& context, void AssetServiceMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/asset/internal/asset_option_defaults.cc b/google/cloud/asset/internal/asset_option_defaults.cc index 6e587d857b732..d1ae31e53ad10 100644 --- a/google/cloud/asset/internal/asset_option_defaults.cc +++ b/google/cloud/asset/internal/asset_option_defaults.cc @@ -42,6 +42,10 @@ Options AssetServiceDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "cloudasset.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/assuredworkloads/internal/assured_workloads_metadata_decorator.cc b/google/cloud/assuredworkloads/internal/assured_workloads_metadata_decorator.cc index 27d785bfa3c4d..0aaaff829ae44 100644 --- a/google/cloud/assuredworkloads/internal/assured_workloads_metadata_decorator.cc +++ b/google/cloud/assuredworkloads/internal/assured_workloads_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/assuredworkloads/v1/assuredworkloads.proto #include "google/cloud/assuredworkloads/internal/assured_workloads_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -99,6 +100,11 @@ void AssuredWorkloadsServiceMetadata::SetMetadata( void AssuredWorkloadsServiceMetadata::SetMetadata( grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/assuredworkloads/internal/assured_workloads_option_defaults.cc b/google/cloud/assuredworkloads/internal/assured_workloads_option_defaults.cc index fb972c0ef44eb..a5a307fe9c3b0 100644 --- a/google/cloud/assuredworkloads/internal/assured_workloads_option_defaults.cc +++ b/google/cloud/assuredworkloads/internal/assured_workloads_option_defaults.cc @@ -43,6 +43,10 @@ Options AssuredWorkloadsServiceDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "assuredworkloads.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/automl/internal/auto_ml_metadata_decorator.cc b/google/cloud/automl/internal/auto_ml_metadata_decorator.cc index 2f1e1f710508d..1706e7735c1b4 100644 --- a/google/cloud/automl/internal/auto_ml_metadata_decorator.cc +++ b/google/cloud/automl/internal/auto_ml_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/automl/v1/service.proto #include "google/cloud/automl/internal/auto_ml_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -206,6 +207,11 @@ void AutoMlMetadata::SetMetadata(grpc::ClientContext& context, void AutoMlMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/automl/internal/auto_ml_option_defaults.cc b/google/cloud/automl/internal/auto_ml_option_defaults.cc index 1610a50cc59da..05038e534299e 100644 --- a/google/cloud/automl/internal/auto_ml_option_defaults.cc +++ b/google/cloud/automl/internal/auto_ml_option_defaults.cc @@ -42,6 +42,10 @@ Options AutoMlDefaultOptions(Options options) { options.set(env && !env->empty() ? *env : "automl.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/automl/internal/prediction_metadata_decorator.cc b/google/cloud/automl/internal/prediction_metadata_decorator.cc index caa6cd6309515..47429231b1e8c 100644 --- a/google/cloud/automl/internal/prediction_metadata_decorator.cc +++ b/google/cloud/automl/internal/prediction_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/automl/v1/prediction_service.proto #include "google/cloud/automl/internal/prediction_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -75,6 +76,11 @@ void PredictionServiceMetadata::SetMetadata(grpc::ClientContext& context, void PredictionServiceMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/automl/internal/prediction_option_defaults.cc b/google/cloud/automl/internal/prediction_option_defaults.cc index 6407aa5c72342..1301cb8edb470 100644 --- a/google/cloud/automl/internal/prediction_option_defaults.cc +++ b/google/cloud/automl/internal/prediction_option_defaults.cc @@ -42,6 +42,10 @@ Options PredictionServiceDefaultOptions(Options options) { options.set(env && !env->empty() ? *env : "automl.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/bigquery/internal/bigquery_read_metadata_decorator.cc b/google/cloud/bigquery/internal/bigquery_read_metadata_decorator.cc index 563030c31b344..5e27bdf02b3ef 100644 --- a/google/cloud/bigquery/internal/bigquery_read_metadata_decorator.cc +++ b/google/cloud/bigquery/internal/bigquery_read_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/bigquery/storage/v1/storage.proto #include "google/cloud/bigquery/internal/bigquery_read_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -68,6 +69,11 @@ void BigQueryReadMetadata::SetMetadata(grpc::ClientContext& context, void BigQueryReadMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/bigquery/internal/bigquery_read_option_defaults.cc b/google/cloud/bigquery/internal/bigquery_read_option_defaults.cc index 07f84b449e228..7d6d7f5cb4da3 100644 --- a/google/cloud/bigquery/internal/bigquery_read_option_defaults.cc +++ b/google/cloud/bigquery/internal/bigquery_read_option_defaults.cc @@ -42,6 +42,10 @@ Options BigQueryReadDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "bigquerystorage.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/bigtable/admin/internal/bigtable_instance_admin_metadata_decorator.cc b/google/cloud/bigtable/admin/internal/bigtable_instance_admin_metadata_decorator.cc index acdd131dba81e..a6b8fdd0650cb 100644 --- a/google/cloud/bigtable/admin/internal/bigtable_instance_admin_metadata_decorator.cc +++ b/google/cloud/bigtable/admin/internal/bigtable_instance_admin_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/bigtable/admin/v2/bigtable_instance_admin.proto #include "google/cloud/bigtable/admin/internal/bigtable_instance_admin_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -219,6 +220,11 @@ void BigtableInstanceAdminMetadata::SetMetadata( void BigtableInstanceAdminMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/bigtable/admin/internal/bigtable_instance_admin_option_defaults.cc b/google/cloud/bigtable/admin/internal/bigtable_instance_admin_option_defaults.cc index 2003c72e307df..41e2d25e9e442 100644 --- a/google/cloud/bigtable/admin/internal/bigtable_instance_admin_option_defaults.cc +++ b/google/cloud/bigtable/admin/internal/bigtable_instance_admin_option_defaults.cc @@ -43,6 +43,10 @@ Options BigtableInstanceAdminDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "bigtableadmin.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (auto emulator = internal::GetEnv("BIGTABLE_INSTANCE_ADMIN_EMULATOR_HOST")) { options.set(*emulator).set( diff --git a/google/cloud/bigtable/admin/internal/bigtable_table_admin_metadata_decorator.cc b/google/cloud/bigtable/admin/internal/bigtable_table_admin_metadata_decorator.cc index f89336393f8b0..085e9c7b9d064 100644 --- a/google/cloud/bigtable/admin/internal/bigtable_table_admin_metadata_decorator.cc +++ b/google/cloud/bigtable/admin/internal/bigtable_table_admin_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/bigtable/admin/v2/bigtable_table_admin.proto #include "google/cloud/bigtable/admin/internal/bigtable_table_admin_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -201,6 +202,11 @@ void BigtableTableAdminMetadata::SetMetadata( void BigtableTableAdminMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/bigtable/admin/internal/bigtable_table_admin_option_defaults.cc b/google/cloud/bigtable/admin/internal/bigtable_table_admin_option_defaults.cc index d97ba7d0f0702..7aebcb5168589 100644 --- a/google/cloud/bigtable/admin/internal/bigtable_table_admin_option_defaults.cc +++ b/google/cloud/bigtable/admin/internal/bigtable_table_admin_option_defaults.cc @@ -43,6 +43,10 @@ Options BigtableTableAdminDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "bigtableadmin.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (auto emulator = internal::GetEnv("BIGTABLE_EMULATOR_HOST")) { options.set(*emulator).set( grpc::InsecureChannelCredentials()); diff --git a/google/cloud/billing/internal/budget_metadata_decorator.cc b/google/cloud/billing/internal/budget_metadata_decorator.cc index 532315130b02b..54b2e576a3558 100644 --- a/google/cloud/billing/internal/budget_metadata_decorator.cc +++ b/google/cloud/billing/internal/budget_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/billing/budgets/v1/budget_service.proto #include "google/cloud/billing/internal/budget_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -80,6 +81,11 @@ void BudgetServiceMetadata::SetMetadata(grpc::ClientContext& context, void BudgetServiceMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/billing/internal/budget_option_defaults.cc b/google/cloud/billing/internal/budget_option_defaults.cc index 4bc6b8715d948..e37cfe7d4daef 100644 --- a/google/cloud/billing/internal/budget_option_defaults.cc +++ b/google/cloud/billing/internal/budget_option_defaults.cc @@ -42,6 +42,10 @@ Options BudgetServiceDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "billingbudgets.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/billing/internal/cloud_billing_metadata_decorator.cc b/google/cloud/billing/internal/cloud_billing_metadata_decorator.cc index 2e13d32ac473d..49bdadb945068 100644 --- a/google/cloud/billing/internal/cloud_billing_metadata_decorator.cc +++ b/google/cloud/billing/internal/cloud_billing_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/billing/v1/cloud_billing.proto #include "google/cloud/billing/internal/cloud_billing_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -120,6 +121,11 @@ void CloudBillingMetadata::SetMetadata(grpc::ClientContext& context, void CloudBillingMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/billing/internal/cloud_billing_option_defaults.cc b/google/cloud/billing/internal/cloud_billing_option_defaults.cc index 7dda48828c772..e7fffc3b4fc2d 100644 --- a/google/cloud/billing/internal/cloud_billing_option_defaults.cc +++ b/google/cloud/billing/internal/cloud_billing_option_defaults.cc @@ -42,6 +42,10 @@ Options CloudBillingDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "cloudbilling.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/billing/internal/cloud_catalog_metadata_decorator.cc b/google/cloud/billing/internal/cloud_catalog_metadata_decorator.cc index 970b231123498..50f90a0ef2fa5 100644 --- a/google/cloud/billing/internal/cloud_catalog_metadata_decorator.cc +++ b/google/cloud/billing/internal/cloud_catalog_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/billing/v1/cloud_catalog.proto #include "google/cloud/billing/internal/cloud_catalog_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -57,6 +58,11 @@ void CloudCatalogMetadata::SetMetadata(grpc::ClientContext& context, void CloudCatalogMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/billing/internal/cloud_catalog_option_defaults.cc b/google/cloud/billing/internal/cloud_catalog_option_defaults.cc index 73ba00dd66de9..eccc5bbd26cd1 100644 --- a/google/cloud/billing/internal/cloud_catalog_option_defaults.cc +++ b/google/cloud/billing/internal/cloud_catalog_option_defaults.cc @@ -42,6 +42,10 @@ Options CloudCatalogDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "cloudbilling.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/binaryauthorization/internal/binauthz_management_service_v1_metadata_decorator.cc b/google/cloud/binaryauthorization/internal/binauthz_management_service_v1_metadata_decorator.cc index c02f8baea2f90..7ec2efd6fec29 100644 --- a/google/cloud/binaryauthorization/internal/binauthz_management_service_v1_metadata_decorator.cc +++ b/google/cloud/binaryauthorization/internal/binauthz_management_service_v1_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/binaryauthorization/v1/service.proto #include "google/cloud/binaryauthorization/internal/binauthz_management_service_v1_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -102,6 +103,11 @@ void BinauthzManagementServiceV1Metadata::SetMetadata( void BinauthzManagementServiceV1Metadata::SetMetadata( grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/binaryauthorization/internal/binauthz_management_service_v1_option_defaults.cc b/google/cloud/binaryauthorization/internal/binauthz_management_service_v1_option_defaults.cc index 3d4683099bffe..63ecf33e4b3bb 100644 --- a/google/cloud/binaryauthorization/internal/binauthz_management_service_v1_option_defaults.cc +++ b/google/cloud/binaryauthorization/internal/binauthz_management_service_v1_option_defaults.cc @@ -43,6 +43,10 @@ Options BinauthzManagementServiceV1DefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "binaryauthorization.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/binaryauthorization/internal/system_policy_v1_metadata_decorator.cc b/google/cloud/binaryauthorization/internal/system_policy_v1_metadata_decorator.cc index 2bf03b75fbecc..78a08c9392c96 100644 --- a/google/cloud/binaryauthorization/internal/system_policy_v1_metadata_decorator.cc +++ b/google/cloud/binaryauthorization/internal/system_policy_v1_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/binaryauthorization/v1/service.proto #include "google/cloud/binaryauthorization/internal/system_policy_v1_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -50,6 +51,11 @@ void SystemPolicyV1Metadata::SetMetadata(grpc::ClientContext& context, void SystemPolicyV1Metadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/binaryauthorization/internal/system_policy_v1_option_defaults.cc b/google/cloud/binaryauthorization/internal/system_policy_v1_option_defaults.cc index 36ed42be2f6ee..95d32a308e6fb 100644 --- a/google/cloud/binaryauthorization/internal/system_policy_v1_option_defaults.cc +++ b/google/cloud/binaryauthorization/internal/system_policy_v1_option_defaults.cc @@ -42,6 +42,10 @@ Options SystemPolicyV1DefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "binaryauthorization.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/binaryauthorization/internal/validation_helper_v1_metadata_decorator.cc b/google/cloud/binaryauthorization/internal/validation_helper_v1_metadata_decorator.cc index 089e0d079f530..c4e93472972f5 100644 --- a/google/cloud/binaryauthorization/internal/validation_helper_v1_metadata_decorator.cc +++ b/google/cloud/binaryauthorization/internal/validation_helper_v1_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/binaryauthorization/v1/service.proto #include "google/cloud/binaryauthorization/internal/validation_helper_v1_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -51,6 +52,11 @@ void ValidationHelperV1Metadata::SetMetadata( void ValidationHelperV1Metadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/binaryauthorization/internal/validation_helper_v1_option_defaults.cc b/google/cloud/binaryauthorization/internal/validation_helper_v1_option_defaults.cc index 3d631df82ac6e..eb83bff98dc61 100644 --- a/google/cloud/binaryauthorization/internal/validation_helper_v1_option_defaults.cc +++ b/google/cloud/binaryauthorization/internal/validation_helper_v1_option_defaults.cc @@ -43,6 +43,10 @@ Options ValidationHelperV1DefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "binaryauthorization.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/channel/internal/cloud_channel_metadata_decorator.cc b/google/cloud/channel/internal/cloud_channel_metadata_decorator.cc index 864e40188cafe..994a7f0b4789c 100644 --- a/google/cloud/channel/internal/cloud_channel_metadata_decorator.cc +++ b/google/cloud/channel/internal/cloud_channel_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/channel/v1/service.proto #include "google/cloud/channel/internal/cloud_channel_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -353,6 +354,11 @@ void CloudChannelServiceMetadata::SetMetadata( void CloudChannelServiceMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/channel/internal/cloud_channel_option_defaults.cc b/google/cloud/channel/internal/cloud_channel_option_defaults.cc index 1c2fb8f316178..755b82092cff4 100644 --- a/google/cloud/channel/internal/cloud_channel_option_defaults.cc +++ b/google/cloud/channel/internal/cloud_channel_option_defaults.cc @@ -43,6 +43,10 @@ Options CloudChannelServiceDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "cloudchannel.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/cloudbuild/internal/cloud_build_metadata_decorator.cc b/google/cloud/cloudbuild/internal/cloud_build_metadata_decorator.cc index 406d213eab9fd..133695348fb0c 100644 --- a/google/cloud/cloudbuild/internal/cloud_build_metadata_decorator.cc +++ b/google/cloud/cloudbuild/internal/cloud_build_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/devtools/cloudbuild/v1/cloudbuild.proto #include "google/cloud/cloudbuild/internal/cloud_build_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -210,6 +211,11 @@ void CloudBuildMetadata::SetMetadata(grpc::ClientContext& context, void CloudBuildMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/cloudbuild/internal/cloud_build_option_defaults.cc b/google/cloud/cloudbuild/internal/cloud_build_option_defaults.cc index 32eff5a02f843..093ac27d98104 100644 --- a/google/cloud/cloudbuild/internal/cloud_build_option_defaults.cc +++ b/google/cloud/cloudbuild/internal/cloud_build_option_defaults.cc @@ -42,6 +42,10 @@ Options CloudBuildDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "cloudbuild.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/common_options.h b/google/cloud/common_options.h index cdc8df5ae7737..fa289d1964eb8 100644 --- a/google/cloud/common_options.h +++ b/google/cloud/common_options.h @@ -65,11 +65,25 @@ struct TracingComponentsOption { using Type = std::set; }; +/** + * Specifies a project for quota and billing purposes. + * + * The caller must have `serviceusage.services.use` permission on the project. + * + * @see https://cloud.google.com/iam/docs/permissions-reference for more + * information about the `seviceusage.services.use` permission, including + * default roles that grant it. + * @see https://cloud.google.com/apis/docs/system-parameters + */ +struct UserProjectOption { + using Type = std::string; +}; + /** * A list of all the common options. */ using CommonOptionList = OptionList; + TracingComponentsOption, UserProjectOption>; GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END } // namespace cloud diff --git a/google/cloud/composer/internal/environments_metadata_decorator.cc b/google/cloud/composer/internal/environments_metadata_decorator.cc index 2b79752c98182..7cbce0cd50d39 100644 --- a/google/cloud/composer/internal/environments_metadata_decorator.cc +++ b/google/cloud/composer/internal/environments_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/orchestration/airflow/service/v1/environments.proto #include "google/cloud/composer/internal/environments_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -107,6 +108,11 @@ void EnvironmentsMetadata::SetMetadata(grpc::ClientContext& context, void EnvironmentsMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/composer/internal/environments_option_defaults.cc b/google/cloud/composer/internal/environments_option_defaults.cc index 29d871dfcac15..0d1e67376659f 100644 --- a/google/cloud/composer/internal/environments_option_defaults.cc +++ b/google/cloud/composer/internal/environments_option_defaults.cc @@ -42,6 +42,10 @@ Options EnvironmentsDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "composer.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/composer/internal/image_versions_metadata_decorator.cc b/google/cloud/composer/internal/image_versions_metadata_decorator.cc index 52a34f73fa10d..6c497c31d5a73 100644 --- a/google/cloud/composer/internal/image_versions_metadata_decorator.cc +++ b/google/cloud/composer/internal/image_versions_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/orchestration/airflow/service/v1/image_versions.proto #include "google/cloud/composer/internal/image_versions_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -51,6 +52,11 @@ void ImageVersionsMetadata::SetMetadata(grpc::ClientContext& context, void ImageVersionsMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/composer/internal/image_versions_option_defaults.cc b/google/cloud/composer/internal/image_versions_option_defaults.cc index 6b12398e7c391..23a92de3fa0a7 100644 --- a/google/cloud/composer/internal/image_versions_option_defaults.cc +++ b/google/cloud/composer/internal/image_versions_option_defaults.cc @@ -42,6 +42,10 @@ Options ImageVersionsDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "composer.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/contactcenterinsights/internal/contact_center_insights_metadata_decorator.cc b/google/cloud/contactcenterinsights/internal/contact_center_insights_metadata_decorator.cc index 0ae3323b7da2c..abba672a27483 100644 --- a/google/cloud/contactcenterinsights/internal/contact_center_insights_metadata_decorator.cc +++ b/google/cloud/contactcenterinsights/internal/contact_center_insights_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/contactcenterinsights/v1/contact_center_insights.proto #include "google/cloud/contactcenterinsights/internal/contact_center_insights_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -365,6 +366,11 @@ void ContactCenterInsightsMetadata::SetMetadata( void ContactCenterInsightsMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/contactcenterinsights/internal/contact_center_insights_option_defaults.cc b/google/cloud/contactcenterinsights/internal/contact_center_insights_option_defaults.cc index 64ccd9e91c000..62459a81051f2 100644 --- a/google/cloud/contactcenterinsights/internal/contact_center_insights_option_defaults.cc +++ b/google/cloud/contactcenterinsights/internal/contact_center_insights_option_defaults.cc @@ -43,6 +43,10 @@ Options ContactCenterInsightsDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "contactcenterinsights.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/container/internal/cluster_manager_metadata_decorator.cc b/google/cloud/container/internal/cluster_manager_metadata_decorator.cc index 9b8b00a0e9797..34ad1bff90674 100644 --- a/google/cloud/container/internal/cluster_manager_metadata_decorator.cc +++ b/google/cloud/container/internal/cluster_manager_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/container/v1/cluster_service.proto #include "google/cloud/container/internal/cluster_manager_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -290,6 +291,11 @@ void ClusterManagerMetadata::SetMetadata(grpc::ClientContext& context, void ClusterManagerMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/container/internal/cluster_manager_option_defaults.cc b/google/cloud/container/internal/cluster_manager_option_defaults.cc index d3b2a1a5df2f0..48d3f2ff9d6b4 100644 --- a/google/cloud/container/internal/cluster_manager_option_defaults.cc +++ b/google/cloud/container/internal/cluster_manager_option_defaults.cc @@ -42,6 +42,10 @@ Options ClusterManagerDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "container.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/containeranalysis/internal/container_analysis_metadata_decorator.cc b/google/cloud/containeranalysis/internal/container_analysis_metadata_decorator.cc index 773627421c534..3a75b16ab5f5b 100644 --- a/google/cloud/containeranalysis/internal/container_analysis_metadata_decorator.cc +++ b/google/cloud/containeranalysis/internal/container_analysis_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/devtools/containeranalysis/v1/containeranalysis.proto #include "google/cloud/containeranalysis/internal/container_analysis_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -73,6 +74,11 @@ void ContainerAnalysisMetadata::SetMetadata(grpc::ClientContext& context, void ContainerAnalysisMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/containeranalysis/internal/container_analysis_option_defaults.cc b/google/cloud/containeranalysis/internal/container_analysis_option_defaults.cc index 459b78ef77e84..b9d4d854f6c30 100644 --- a/google/cloud/containeranalysis/internal/container_analysis_option_defaults.cc +++ b/google/cloud/containeranalysis/internal/container_analysis_option_defaults.cc @@ -42,6 +42,10 @@ Options ContainerAnalysisDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "containeranalysis.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/containeranalysis/internal/grafeas_metadata_decorator.cc b/google/cloud/containeranalysis/internal/grafeas_metadata_decorator.cc index 5a3e799333565..139be72d18ec4 100644 --- a/google/cloud/containeranalysis/internal/grafeas_metadata_decorator.cc +++ b/google/cloud/containeranalysis/internal/grafeas_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: grafeas/v1/grafeas.proto #include "google/cloud/containeranalysis/internal/grafeas_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -140,6 +141,11 @@ void GrafeasMetadata::SetMetadata(grpc::ClientContext& context, void GrafeasMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/containeranalysis/internal/grafeas_option_defaults.cc b/google/cloud/containeranalysis/internal/grafeas_option_defaults.cc index 9006d3fe19f8d..7a687c5fad88c 100644 --- a/google/cloud/containeranalysis/internal/grafeas_option_defaults.cc +++ b/google/cloud/containeranalysis/internal/grafeas_option_defaults.cc @@ -42,6 +42,10 @@ Options GrafeasDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "containeranalysis.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/datacatalog/internal/data_catalog_metadata_decorator.cc b/google/cloud/datacatalog/internal/data_catalog_metadata_decorator.cc index 95a86c4cd0d72..c2f396ab1b5e2 100644 --- a/google/cloud/datacatalog/internal/data_catalog_metadata_decorator.cc +++ b/google/cloud/datacatalog/internal/data_catalog_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/datacatalog/v1/datacatalog.proto #include "google/cloud/datacatalog/internal/data_catalog_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -259,6 +260,11 @@ void DataCatalogMetadata::SetMetadata(grpc::ClientContext& context, void DataCatalogMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/datacatalog/internal/data_catalog_option_defaults.cc b/google/cloud/datacatalog/internal/data_catalog_option_defaults.cc index 1769ee69b7a9a..23f346fb99a66 100644 --- a/google/cloud/datacatalog/internal/data_catalog_option_defaults.cc +++ b/google/cloud/datacatalog/internal/data_catalog_option_defaults.cc @@ -42,6 +42,10 @@ Options DataCatalogDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "datacatalog.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/datacatalog/internal/policy_tag_manager_metadata_decorator.cc b/google/cloud/datacatalog/internal/policy_tag_manager_metadata_decorator.cc index d61d8f08703ec..aad6ea8ca4ed7 100644 --- a/google/cloud/datacatalog/internal/policy_tag_manager_metadata_decorator.cc +++ b/google/cloud/datacatalog/internal/policy_tag_manager_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/datacatalog/v1/policytagmanager.proto #include "google/cloud/datacatalog/internal/policy_tag_manager_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -141,6 +142,11 @@ void PolicyTagManagerMetadata::SetMetadata(grpc::ClientContext& context, void PolicyTagManagerMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/datacatalog/internal/policy_tag_manager_option_defaults.cc b/google/cloud/datacatalog/internal/policy_tag_manager_option_defaults.cc index 8fbeab6402479..a85f499693991 100644 --- a/google/cloud/datacatalog/internal/policy_tag_manager_option_defaults.cc +++ b/google/cloud/datacatalog/internal/policy_tag_manager_option_defaults.cc @@ -42,6 +42,10 @@ Options PolicyTagManagerDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "datacatalog.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/datacatalog/internal/policy_tag_manager_serialization_metadata_decorator.cc b/google/cloud/datacatalog/internal/policy_tag_manager_serialization_metadata_decorator.cc index 165b21da4f909..11dd1b1257f06 100644 --- a/google/cloud/datacatalog/internal/policy_tag_manager_serialization_metadata_decorator.cc +++ b/google/cloud/datacatalog/internal/policy_tag_manager_serialization_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/datacatalog/v1/policytagmanagerserialization.proto #include "google/cloud/datacatalog/internal/policy_tag_manager_serialization_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -66,6 +67,11 @@ void PolicyTagManagerSerializationMetadata::SetMetadata( void PolicyTagManagerSerializationMetadata::SetMetadata( grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/datacatalog/internal/policy_tag_manager_serialization_option_defaults.cc b/google/cloud/datacatalog/internal/policy_tag_manager_serialization_option_defaults.cc index 1aa055c2a45ce..0b32885271de0 100644 --- a/google/cloud/datacatalog/internal/policy_tag_manager_serialization_option_defaults.cc +++ b/google/cloud/datacatalog/internal/policy_tag_manager_serialization_option_defaults.cc @@ -43,6 +43,10 @@ Options PolicyTagManagerSerializationDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "datacatalog.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/datamigration/internal/data_migration_metadata_decorator.cc b/google/cloud/datamigration/internal/data_migration_metadata_decorator.cc index ffa82f6200a6d..e3d5756e10b21 100644 --- a/google/cloud/datamigration/internal/data_migration_metadata_decorator.cc +++ b/google/cloud/datamigration/internal/data_migration_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/clouddms/v1/clouddms.proto #include "google/cloud/datamigration/internal/data_migration_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -210,6 +211,11 @@ void DataMigrationServiceMetadata::SetMetadata( void DataMigrationServiceMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/datamigration/internal/data_migration_option_defaults.cc b/google/cloud/datamigration/internal/data_migration_option_defaults.cc index c7571dc4a7a90..08510049d9918 100644 --- a/google/cloud/datamigration/internal/data_migration_option_defaults.cc +++ b/google/cloud/datamigration/internal/data_migration_option_defaults.cc @@ -43,6 +43,10 @@ Options DataMigrationServiceDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "datamigration.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/debugger/internal/controller2_metadata_decorator.cc b/google/cloud/debugger/internal/controller2_metadata_decorator.cc index c20ff07445b49..7f889f018d2ce 100644 --- a/google/cloud/debugger/internal/controller2_metadata_decorator.cc +++ b/google/cloud/debugger/internal/controller2_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/devtools/clouddebugger/v2/controller.proto #include "google/cloud/debugger/internal/controller2_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -67,6 +68,11 @@ void Controller2Metadata::SetMetadata(grpc::ClientContext& context, void Controller2Metadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/debugger/internal/controller2_option_defaults.cc b/google/cloud/debugger/internal/controller2_option_defaults.cc index 140687790ce77..e73fa8fe1afb8 100644 --- a/google/cloud/debugger/internal/controller2_option_defaults.cc +++ b/google/cloud/debugger/internal/controller2_option_defaults.cc @@ -42,6 +42,10 @@ Options Controller2DefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "clouddebugger.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/debugger/internal/debugger2_metadata_decorator.cc b/google/cloud/debugger/internal/debugger2_metadata_decorator.cc index f12f6d36f95c2..e9b5f3f1e2de7 100644 --- a/google/cloud/debugger/internal/debugger2_metadata_decorator.cc +++ b/google/cloud/debugger/internal/debugger2_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/devtools/clouddebugger/v2/debugger.proto #include "google/cloud/debugger/internal/debugger2_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -81,6 +82,11 @@ void Debugger2Metadata::SetMetadata(grpc::ClientContext& context, void Debugger2Metadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/debugger/internal/debugger2_option_defaults.cc b/google/cloud/debugger/internal/debugger2_option_defaults.cc index 6c6f45c29b2ed..ff5958b0c3007 100644 --- a/google/cloud/debugger/internal/debugger2_option_defaults.cc +++ b/google/cloud/debugger/internal/debugger2_option_defaults.cc @@ -42,6 +42,10 @@ Options Debugger2DefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "clouddebugger.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/dlp/internal/dlp_metadata_decorator.cc b/google/cloud/dlp/internal/dlp_metadata_decorator.cc index d1b53c063da3c..bfd3660ae6cab 100644 --- a/google/cloud/dlp/internal/dlp_metadata_decorator.cc +++ b/google/cloud/dlp/internal/dlp_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/privacy/dlp/v2/dlp.proto #include "google/cloud/dlp/internal/dlp_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -303,6 +304,11 @@ void DlpServiceMetadata::SetMetadata(grpc::ClientContext& context, void DlpServiceMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/dlp/internal/dlp_option_defaults.cc b/google/cloud/dlp/internal/dlp_option_defaults.cc index 8d742852cf45e..890385c6d978f 100644 --- a/google/cloud/dlp/internal/dlp_option_defaults.cc +++ b/google/cloud/dlp/internal/dlp_option_defaults.cc @@ -42,6 +42,10 @@ Options DlpServiceDefaultOptions(Options options) { options.set(env && !env->empty() ? *env : "dlp.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/eventarc/internal/eventarc_metadata_decorator.cc b/google/cloud/eventarc/internal/eventarc_metadata_decorator.cc index e9e7b9b2e68a7..796e21095a6e6 100644 --- a/google/cloud/eventarc/internal/eventarc_metadata_decorator.cc +++ b/google/cloud/eventarc/internal/eventarc_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/eventarc/v1/eventarc.proto #include "google/cloud/eventarc/internal/eventarc_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -99,6 +100,11 @@ void EventarcMetadata::SetMetadata(grpc::ClientContext& context, void EventarcMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/eventarc/internal/eventarc_option_defaults.cc b/google/cloud/eventarc/internal/eventarc_option_defaults.cc index e638db1f7cd1f..33235c2d0f262 100644 --- a/google/cloud/eventarc/internal/eventarc_option_defaults.cc +++ b/google/cloud/eventarc/internal/eventarc_option_defaults.cc @@ -42,6 +42,10 @@ Options EventarcDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "eventarc.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/eventarc/internal/publisher_metadata_decorator.cc b/google/cloud/eventarc/internal/publisher_metadata_decorator.cc index 83787004f0327..ba1ebf0798861 100644 --- a/google/cloud/eventarc/internal/publisher_metadata_decorator.cc +++ b/google/cloud/eventarc/internal/publisher_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/eventarc/publishing/v1/publisher.proto #include "google/cloud/eventarc/internal/publisher_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -50,6 +51,11 @@ void PublisherMetadata::SetMetadata(grpc::ClientContext& context, void PublisherMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/eventarc/internal/publisher_option_defaults.cc b/google/cloud/eventarc/internal/publisher_option_defaults.cc index d84136d24019f..c2ceaf07bacc4 100644 --- a/google/cloud/eventarc/internal/publisher_option_defaults.cc +++ b/google/cloud/eventarc/internal/publisher_option_defaults.cc @@ -42,6 +42,10 @@ Options PublisherDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "eventarcpublishing.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/filestore/internal/cloud_filestore_manager_metadata_decorator.cc b/google/cloud/filestore/internal/cloud_filestore_manager_metadata_decorator.cc index 6d4fd5344efd6..f1e7c56b21282 100644 --- a/google/cloud/filestore/internal/cloud_filestore_manager_metadata_decorator.cc +++ b/google/cloud/filestore/internal/cloud_filestore_manager_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/filestore/v1/cloud_filestore_service.proto #include "google/cloud/filestore/internal/cloud_filestore_manager_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -153,6 +154,11 @@ void CloudFilestoreManagerMetadata::SetMetadata( void CloudFilestoreManagerMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/filestore/internal/cloud_filestore_manager_option_defaults.cc b/google/cloud/filestore/internal/cloud_filestore_manager_option_defaults.cc index 76c0f2ec12e61..9832e4ce488fb 100644 --- a/google/cloud/filestore/internal/cloud_filestore_manager_option_defaults.cc +++ b/google/cloud/filestore/internal/cloud_filestore_manager_option_defaults.cc @@ -43,6 +43,10 @@ Options CloudFilestoreManagerDefaultOptions(Options options) { options.set(env && !env->empty() ? *env : "file.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/functions/internal/cloud_functions_metadata_decorator.cc b/google/cloud/functions/internal/cloud_functions_metadata_decorator.cc index 96cfa0b234064..b1d1c729a1d46 100644 --- a/google/cloud/functions/internal/cloud_functions_metadata_decorator.cc +++ b/google/cloud/functions/internal/cloud_functions_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/functions/v1/functions.proto #include "google/cloud/functions/internal/cloud_functions_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -147,6 +148,11 @@ void CloudFunctionsServiceMetadata::SetMetadata( void CloudFunctionsServiceMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/functions/internal/cloud_functions_option_defaults.cc b/google/cloud/functions/internal/cloud_functions_option_defaults.cc index be79ac893f9d4..efc0d749155b7 100644 --- a/google/cloud/functions/internal/cloud_functions_option_defaults.cc +++ b/google/cloud/functions/internal/cloud_functions_option_defaults.cc @@ -43,6 +43,10 @@ Options CloudFunctionsServiceDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "cloudfunctions.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/gameservices/internal/game_server_clusters_metadata_decorator.cc b/google/cloud/gameservices/internal/game_server_clusters_metadata_decorator.cc index 398db38da51ea..de48a3cad199d 100644 --- a/google/cloud/gameservices/internal/game_server_clusters_metadata_decorator.cc +++ b/google/cloud/gameservices/internal/game_server_clusters_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/gaming/v1/game_server_clusters_service.proto #include "google/cloud/gameservices/internal/game_server_clusters_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -131,6 +132,11 @@ void GameServerClustersServiceMetadata::SetMetadata( void GameServerClustersServiceMetadata::SetMetadata( grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/gameservices/internal/game_server_clusters_option_defaults.cc b/google/cloud/gameservices/internal/game_server_clusters_option_defaults.cc index a124498a54b43..97da7c147c7a5 100644 --- a/google/cloud/gameservices/internal/game_server_clusters_option_defaults.cc +++ b/google/cloud/gameservices/internal/game_server_clusters_option_defaults.cc @@ -43,6 +43,10 @@ Options GameServerClustersServiceDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "gameservices.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/gameservices/internal/game_server_configs_metadata_decorator.cc b/google/cloud/gameservices/internal/game_server_configs_metadata_decorator.cc index 1b5262430730a..c92fc832352e0 100644 --- a/google/cloud/gameservices/internal/game_server_configs_metadata_decorator.cc +++ b/google/cloud/gameservices/internal/game_server_configs_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/gaming/v1/game_server_configs_service.proto #include "google/cloud/gameservices/internal/game_server_configs_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -93,6 +94,11 @@ void GameServerConfigsServiceMetadata::SetMetadata( void GameServerConfigsServiceMetadata::SetMetadata( grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/gameservices/internal/game_server_configs_option_defaults.cc b/google/cloud/gameservices/internal/game_server_configs_option_defaults.cc index 0a0976c634afb..682bab85dfdd5 100644 --- a/google/cloud/gameservices/internal/game_server_configs_option_defaults.cc +++ b/google/cloud/gameservices/internal/game_server_configs_option_defaults.cc @@ -43,6 +43,10 @@ Options GameServerConfigsServiceDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "gameservices.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/gameservices/internal/game_server_deployments_metadata_decorator.cc b/google/cloud/gameservices/internal/game_server_deployments_metadata_decorator.cc index fe875e1080706..a3f0f154884d4 100644 --- a/google/cloud/gameservices/internal/game_server_deployments_metadata_decorator.cc +++ b/google/cloud/gameservices/internal/game_server_deployments_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/gaming/v1/game_server_deployments_service.proto #include "google/cloud/gameservices/internal/game_server_deployments_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -147,6 +148,11 @@ void GameServerDeploymentsServiceMetadata::SetMetadata( void GameServerDeploymentsServiceMetadata::SetMetadata( grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/gameservices/internal/game_server_deployments_option_defaults.cc b/google/cloud/gameservices/internal/game_server_deployments_option_defaults.cc index 159c997a2917d..6cf9c39d40c6a 100644 --- a/google/cloud/gameservices/internal/game_server_deployments_option_defaults.cc +++ b/google/cloud/gameservices/internal/game_server_deployments_option_defaults.cc @@ -43,6 +43,10 @@ Options GameServerDeploymentsServiceDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "gameservices.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/gameservices/internal/realms_metadata_decorator.cc b/google/cloud/gameservices/internal/realms_metadata_decorator.cc index ee35c28fe2f45..9edf2dce8a7d2 100644 --- a/google/cloud/gameservices/internal/realms_metadata_decorator.cc +++ b/google/cloud/gameservices/internal/realms_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/gaming/v1/realms_service.proto #include "google/cloud/gameservices/internal/realms_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -108,6 +109,11 @@ void RealmsServiceMetadata::SetMetadata(grpc::ClientContext& context, void RealmsServiceMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/gameservices/internal/realms_option_defaults.cc b/google/cloud/gameservices/internal/realms_option_defaults.cc index ce3683426b79c..72e3205d29aeb 100644 --- a/google/cloud/gameservices/internal/realms_option_defaults.cc +++ b/google/cloud/gameservices/internal/realms_option_defaults.cc @@ -42,6 +42,10 @@ Options RealmsServiceDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "gameservices.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/gkehub/internal/gke_hub_metadata_decorator.cc b/google/cloud/gkehub/internal/gke_hub_metadata_decorator.cc index eb85848e639ae..e190a39894eeb 100644 --- a/google/cloud/gkehub/internal/gke_hub_metadata_decorator.cc +++ b/google/cloud/gkehub/internal/gke_hub_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/gkehub/v1/service.proto #include "google/cloud/gkehub/internal/gke_hub_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -149,6 +150,11 @@ void GkeHubMetadata::SetMetadata(grpc::ClientContext& context, void GkeHubMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/gkehub/internal/gke_hub_option_defaults.cc b/google/cloud/gkehub/internal/gke_hub_option_defaults.cc index 9cc031bfa8cde..8931b4fdd9717 100644 --- a/google/cloud/gkehub/internal/gke_hub_option_defaults.cc +++ b/google/cloud/gkehub/internal/gke_hub_option_defaults.cc @@ -42,6 +42,10 @@ Options GkeHubDefaultOptions(Options options) { options.set(env && !env->empty() ? *env : "gkehub.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/iam/internal/iam_credentials_metadata_decorator.cc b/google/cloud/iam/internal/iam_credentials_metadata_decorator.cc index 1b34bd79468bd..a01480ee4772f 100644 --- a/google/cloud/iam/internal/iam_credentials_metadata_decorator.cc +++ b/google/cloud/iam/internal/iam_credentials_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/iam/credentials/v1/iamcredentials.proto #include "google/cloud/iam/internal/iam_credentials_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -73,6 +74,11 @@ void IAMCredentialsMetadata::SetMetadata(grpc::ClientContext& context, void IAMCredentialsMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/iam/internal/iam_credentials_option_defaults.cc b/google/cloud/iam/internal/iam_credentials_option_defaults.cc index 346e39bbbd2b2..9cf0dbef0bfe6 100644 --- a/google/cloud/iam/internal/iam_credentials_option_defaults.cc +++ b/google/cloud/iam/internal/iam_credentials_option_defaults.cc @@ -42,6 +42,10 @@ Options IAMCredentialsDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "iamcredentials.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/iam/internal/iam_metadata_decorator.cc b/google/cloud/iam/internal/iam_metadata_decorator.cc index 407396ed067e6..dc6073e947abc 100644 --- a/google/cloud/iam/internal/iam_metadata_decorator.cc +++ b/google/cloud/iam/internal/iam_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/iam/admin/v1/iam.proto #include "google/cloud/iam/internal/iam_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -235,6 +236,11 @@ void IAMMetadata::SetMetadata(grpc::ClientContext& context, void IAMMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/iam/internal/iam_option_defaults.cc b/google/cloud/iam/internal/iam_option_defaults.cc index 40869c7d3c3f7..32fc5ea51a985 100644 --- a/google/cloud/iam/internal/iam_option_defaults.cc +++ b/google/cloud/iam/internal/iam_option_defaults.cc @@ -42,6 +42,10 @@ Options IAMDefaultOptions(Options options) { options.set(env && !env->empty() ? *env : "iam.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/iap/internal/identity_aware_proxy_admin_metadata_decorator.cc b/google/cloud/iap/internal/identity_aware_proxy_admin_metadata_decorator.cc index 5cf087ed3acae..7a012ce52c072 100644 --- a/google/cloud/iap/internal/identity_aware_proxy_admin_metadata_decorator.cc +++ b/google/cloud/iap/internal/identity_aware_proxy_admin_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/iap/v1/service.proto #include "google/cloud/iap/internal/identity_aware_proxy_admin_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -82,6 +83,11 @@ void IdentityAwareProxyAdminServiceMetadata::SetMetadata( void IdentityAwareProxyAdminServiceMetadata::SetMetadata( grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/iap/internal/identity_aware_proxy_admin_option_defaults.cc b/google/cloud/iap/internal/identity_aware_proxy_admin_option_defaults.cc index 8f485b2a542e4..0cf941133f1f3 100644 --- a/google/cloud/iap/internal/identity_aware_proxy_admin_option_defaults.cc +++ b/google/cloud/iap/internal/identity_aware_proxy_admin_option_defaults.cc @@ -43,6 +43,10 @@ Options IdentityAwareProxyAdminServiceDefaultOptions(Options options) { options.set(env && !env->empty() ? *env : "iap.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/iap/internal/identity_aware_proxy_o_auth_metadata_decorator.cc b/google/cloud/iap/internal/identity_aware_proxy_o_auth_metadata_decorator.cc index 122b4e5f4f10d..2907bc2e21647 100644 --- a/google/cloud/iap/internal/identity_aware_proxy_o_auth_metadata_decorator.cc +++ b/google/cloud/iap/internal/identity_aware_proxy_o_auth_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/iap/v1/service.proto #include "google/cloud/iap/internal/identity_aware_proxy_o_auth_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -109,6 +110,11 @@ void IdentityAwareProxyOAuthServiceMetadata::SetMetadata( void IdentityAwareProxyOAuthServiceMetadata::SetMetadata( grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/iap/internal/identity_aware_proxy_o_auth_option_defaults.cc b/google/cloud/iap/internal/identity_aware_proxy_o_auth_option_defaults.cc index 66cefd884e811..8ef853c4df2fe 100644 --- a/google/cloud/iap/internal/identity_aware_proxy_o_auth_option_defaults.cc +++ b/google/cloud/iap/internal/identity_aware_proxy_o_auth_option_defaults.cc @@ -43,6 +43,10 @@ Options IdentityAwareProxyOAuthServiceDefaultOptions(Options options) { options.set(env && !env->empty() ? *env : "iap.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/ids/internal/ids_metadata_decorator.cc b/google/cloud/ids/internal/ids_metadata_decorator.cc index 56ad9134818c0..55d3e58269a94 100644 --- a/google/cloud/ids/internal/ids_metadata_decorator.cc +++ b/google/cloud/ids/internal/ids_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/ids/v1/ids.proto #include "google/cloud/ids/internal/ids_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -89,6 +90,11 @@ void IDSMetadata::SetMetadata(grpc::ClientContext& context, void IDSMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/ids/internal/ids_option_defaults.cc b/google/cloud/ids/internal/ids_option_defaults.cc index a33d270433bd6..f0d3349814d40 100644 --- a/google/cloud/ids/internal/ids_option_defaults.cc +++ b/google/cloud/ids/internal/ids_option_defaults.cc @@ -42,6 +42,10 @@ Options IDSDefaultOptions(Options options) { options.set(env && !env->empty() ? *env : "ids.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/iot/internal/device_manager_metadata_decorator.cc b/google/cloud/iot/internal/device_manager_metadata_decorator.cc index 9d2f6d95846f8..b65540e3340dc 100644 --- a/google/cloud/iot/internal/device_manager_metadata_decorator.cc +++ b/google/cloud/iot/internal/device_manager_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/iot/v1/device_manager.proto #include "google/cloud/iot/internal/device_manager_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -187,6 +188,11 @@ void DeviceManagerMetadata::SetMetadata(grpc::ClientContext& context, void DeviceManagerMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/iot/internal/device_manager_option_defaults.cc b/google/cloud/iot/internal/device_manager_option_defaults.cc index f4ce437dd5c90..8128d401176e9 100644 --- a/google/cloud/iot/internal/device_manager_option_defaults.cc +++ b/google/cloud/iot/internal/device_manager_option_defaults.cc @@ -42,6 +42,10 @@ Options DeviceManagerDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "cloudiot.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/kms/internal/key_management_metadata_decorator.cc b/google/cloud/kms/internal/key_management_metadata_decorator.cc index 1e93a5bf8f0fd..0e9f5d25eeb07 100644 --- a/google/cloud/kms/internal/key_management_metadata_decorator.cc +++ b/google/cloud/kms/internal/key_management_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/kms/v1/service.proto #include "google/cloud/kms/internal/key_management_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -251,6 +252,11 @@ void KeyManagementServiceMetadata::SetMetadata( void KeyManagementServiceMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/kms/internal/key_management_option_defaults.cc b/google/cloud/kms/internal/key_management_option_defaults.cc index 58a09028858a5..1944145316b6e 100644 --- a/google/cloud/kms/internal/key_management_option_defaults.cc +++ b/google/cloud/kms/internal/key_management_option_defaults.cc @@ -43,6 +43,10 @@ Options KeyManagementServiceDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "cloudkms.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/language/internal/language_metadata_decorator.cc b/google/cloud/language/internal/language_metadata_decorator.cc index 77b169ab4c148..0179e394e5046 100644 --- a/google/cloud/language/internal/language_metadata_decorator.cc +++ b/google/cloud/language/internal/language_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/language/v1/language_service.proto #include "google/cloud/language/internal/language_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -89,6 +90,11 @@ void LanguageServiceMetadata::SetMetadata(grpc::ClientContext& context, void LanguageServiceMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/language/internal/language_option_defaults.cc b/google/cloud/language/internal/language_option_defaults.cc index 36ece227295a4..e83b820ab72c8 100644 --- a/google/cloud/language/internal/language_option_defaults.cc +++ b/google/cloud/language/internal/language_option_defaults.cc @@ -42,6 +42,10 @@ Options LanguageServiceDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "language.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/logging/internal/logging_service_v2_metadata_decorator.cc b/google/cloud/logging/internal/logging_service_v2_metadata_decorator.cc index 3a7aa7365cc97..725689755560b 100644 --- a/google/cloud/logging/internal/logging_service_v2_metadata_decorator.cc +++ b/google/cloud/logging/internal/logging_service_v2_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/logging/v2/logging.proto #include "google/cloud/logging/internal/logging_service_v2_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -91,6 +92,11 @@ void LoggingServiceV2Metadata::SetMetadata(grpc::ClientContext& context, void LoggingServiceV2Metadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/logging/internal/logging_service_v2_option_defaults.cc b/google/cloud/logging/internal/logging_service_v2_option_defaults.cc index 79f217497d925..6994364ac27c4 100644 --- a/google/cloud/logging/internal/logging_service_v2_option_defaults.cc +++ b/google/cloud/logging/internal/logging_service_v2_option_defaults.cc @@ -42,6 +42,10 @@ Options LoggingServiceV2DefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "logging.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/managedidentities/internal/managed_identities_metadata_decorator.cc b/google/cloud/managedidentities/internal/managed_identities_metadata_decorator.cc index 3a98e107eae87..d90caa38f091e 100644 --- a/google/cloud/managedidentities/internal/managed_identities_metadata_decorator.cc +++ b/google/cloud/managedidentities/internal/managed_identities_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/managedidentities/v1/managed_identities_service.proto #include "google/cloud/managedidentities/internal/managed_identities_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -149,6 +150,11 @@ void ManagedIdentitiesServiceMetadata::SetMetadata( void ManagedIdentitiesServiceMetadata::SetMetadata( grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/managedidentities/internal/managed_identities_option_defaults.cc b/google/cloud/managedidentities/internal/managed_identities_option_defaults.cc index ab2dfa64e3c2b..ea055573df6b8 100644 --- a/google/cloud/managedidentities/internal/managed_identities_option_defaults.cc +++ b/google/cloud/managedidentities/internal/managed_identities_option_defaults.cc @@ -43,6 +43,10 @@ Options ManagedIdentitiesServiceDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "managedidentities.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/memcache/internal/cloud_memcache_metadata_decorator.cc b/google/cloud/memcache/internal/cloud_memcache_metadata_decorator.cc index 614070d70a3e9..8c2f19cf78455 100644 --- a/google/cloud/memcache/internal/cloud_memcache_metadata_decorator.cc +++ b/google/cloud/memcache/internal/cloud_memcache_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/memcache/v1/cloud_memcache.proto #include "google/cloud/memcache/internal/cloud_memcache_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -119,6 +120,11 @@ void CloudMemcacheMetadata::SetMetadata(grpc::ClientContext& context, void CloudMemcacheMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/memcache/internal/cloud_memcache_option_defaults.cc b/google/cloud/memcache/internal/cloud_memcache_option_defaults.cc index 7bc5856ecb6cf..380b93537c6f3 100644 --- a/google/cloud/memcache/internal/cloud_memcache_option_defaults.cc +++ b/google/cloud/memcache/internal/cloud_memcache_option_defaults.cc @@ -42,6 +42,10 @@ Options CloudMemcacheDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "memcache.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/monitoring/internal/alert_policy_metadata_decorator.cc b/google/cloud/monitoring/internal/alert_policy_metadata_decorator.cc index 1240fa9405098..62d7ba1c5f47d 100644 --- a/google/cloud/monitoring/internal/alert_policy_metadata_decorator.cc +++ b/google/cloud/monitoring/internal/alert_policy_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/monitoring/v3/alert_service.proto #include "google/cloud/monitoring/internal/alert_policy_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -80,6 +81,11 @@ void AlertPolicyServiceMetadata::SetMetadata( void AlertPolicyServiceMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/monitoring/internal/alert_policy_option_defaults.cc b/google/cloud/monitoring/internal/alert_policy_option_defaults.cc index db8d07ec8da61..afab92a3efd40 100644 --- a/google/cloud/monitoring/internal/alert_policy_option_defaults.cc +++ b/google/cloud/monitoring/internal/alert_policy_option_defaults.cc @@ -43,6 +43,10 @@ Options AlertPolicyServiceDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "monitoring.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/monitoring/internal/dashboards_metadata_decorator.cc b/google/cloud/monitoring/internal/dashboards_metadata_decorator.cc index b277d0f9311be..e30776765472d 100644 --- a/google/cloud/monitoring/internal/dashboards_metadata_decorator.cc +++ b/google/cloud/monitoring/internal/dashboards_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/monitoring/dashboard/v1/dashboards_service.proto #include "google/cloud/monitoring/internal/dashboards_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -80,6 +81,11 @@ void DashboardsServiceMetadata::SetMetadata(grpc::ClientContext& context, void DashboardsServiceMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/monitoring/internal/dashboards_option_defaults.cc b/google/cloud/monitoring/internal/dashboards_option_defaults.cc index ea504dae0ba5b..fdec8f609c2e1 100644 --- a/google/cloud/monitoring/internal/dashboards_option_defaults.cc +++ b/google/cloud/monitoring/internal/dashboards_option_defaults.cc @@ -42,6 +42,10 @@ Options DashboardsServiceDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "monitoring.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/monitoring/internal/group_metadata_decorator.cc b/google/cloud/monitoring/internal/group_metadata_decorator.cc index 56b4b24fb421e..3e7d57bd40524 100644 --- a/google/cloud/monitoring/internal/group_metadata_decorator.cc +++ b/google/cloud/monitoring/internal/group_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/monitoring/v3/group_service.proto #include "google/cloud/monitoring/internal/group_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -85,6 +86,11 @@ void GroupServiceMetadata::SetMetadata(grpc::ClientContext& context, void GroupServiceMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/monitoring/internal/group_option_defaults.cc b/google/cloud/monitoring/internal/group_option_defaults.cc index 8417808edf98f..aac01cf6c1026 100644 --- a/google/cloud/monitoring/internal/group_option_defaults.cc +++ b/google/cloud/monitoring/internal/group_option_defaults.cc @@ -42,6 +42,10 @@ Options GroupServiceDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "monitoring.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/monitoring/internal/metric_metadata_decorator.cc b/google/cloud/monitoring/internal/metric_metadata_decorator.cc index 6c4362756de98..c508efc6a66f4 100644 --- a/google/cloud/monitoring/internal/metric_metadata_decorator.cc +++ b/google/cloud/monitoring/internal/metric_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/monitoring/v3/metric_service.proto #include "google/cloud/monitoring/internal/metric_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -112,6 +113,11 @@ void MetricServiceMetadata::SetMetadata(grpc::ClientContext& context, void MetricServiceMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/monitoring/internal/metric_option_defaults.cc b/google/cloud/monitoring/internal/metric_option_defaults.cc index 32771b08bfbd4..211743a462d99 100644 --- a/google/cloud/monitoring/internal/metric_option_defaults.cc +++ b/google/cloud/monitoring/internal/metric_option_defaults.cc @@ -42,6 +42,10 @@ Options MetricServiceDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "monitoring.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/monitoring/internal/metrics_scopes_metadata_decorator.cc b/google/cloud/monitoring/internal/metrics_scopes_metadata_decorator.cc index e1bcc66fa0030..a324fc1174900 100644 --- a/google/cloud/monitoring/internal/metrics_scopes_metadata_decorator.cc +++ b/google/cloud/monitoring/internal/metrics_scopes_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/monitoring/metricsscope/v1/metrics_scopes.proto #include "google/cloud/monitoring/internal/metrics_scopes_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -97,6 +98,11 @@ void MetricsScopesMetadata::SetMetadata(grpc::ClientContext& context, void MetricsScopesMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/monitoring/internal/metrics_scopes_option_defaults.cc b/google/cloud/monitoring/internal/metrics_scopes_option_defaults.cc index 7f2fa4758047c..4a6ca4e102aed 100644 --- a/google/cloud/monitoring/internal/metrics_scopes_option_defaults.cc +++ b/google/cloud/monitoring/internal/metrics_scopes_option_defaults.cc @@ -42,6 +42,10 @@ Options MetricsScopesDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "monitoring.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/monitoring/internal/notification_channel_metadata_decorator.cc b/google/cloud/monitoring/internal/notification_channel_metadata_decorator.cc index e692e36a0516f..9b5e1b6dc1af7 100644 --- a/google/cloud/monitoring/internal/notification_channel_metadata_decorator.cc +++ b/google/cloud/monitoring/internal/notification_channel_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/monitoring/v3/notification_service.proto #include "google/cloud/monitoring/internal/notification_channel_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -126,6 +127,11 @@ void NotificationChannelServiceMetadata::SetMetadata( void NotificationChannelServiceMetadata::SetMetadata( grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/monitoring/internal/notification_channel_option_defaults.cc b/google/cloud/monitoring/internal/notification_channel_option_defaults.cc index 9ce83528e0e56..a9b7657570b05 100644 --- a/google/cloud/monitoring/internal/notification_channel_option_defaults.cc +++ b/google/cloud/monitoring/internal/notification_channel_option_defaults.cc @@ -43,6 +43,10 @@ Options NotificationChannelServiceDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "monitoring.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/monitoring/internal/query_metadata_decorator.cc b/google/cloud/monitoring/internal/query_metadata_decorator.cc index 0fe383cfc9ed3..d47037c56f52d 100644 --- a/google/cloud/monitoring/internal/query_metadata_decorator.cc +++ b/google/cloud/monitoring/internal/query_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/monitoring/v3/query_service.proto #include "google/cloud/monitoring/internal/query_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -49,6 +50,11 @@ void QueryServiceMetadata::SetMetadata(grpc::ClientContext& context, void QueryServiceMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/monitoring/internal/query_option_defaults.cc b/google/cloud/monitoring/internal/query_option_defaults.cc index f5f702859c15d..040843d03da9d 100644 --- a/google/cloud/monitoring/internal/query_option_defaults.cc +++ b/google/cloud/monitoring/internal/query_option_defaults.cc @@ -42,6 +42,10 @@ Options QueryServiceDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "monitoring.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/monitoring/internal/service_monitoring_metadata_decorator.cc b/google/cloud/monitoring/internal/service_monitoring_metadata_decorator.cc index 70b23c47c6f36..70f413c07488b 100644 --- a/google/cloud/monitoring/internal/service_monitoring_metadata_decorator.cc +++ b/google/cloud/monitoring/internal/service_monitoring_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/monitoring/v3/service_service.proto #include "google/cloud/monitoring/internal/service_monitoring_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -121,6 +122,11 @@ void ServiceMonitoringServiceMetadata::SetMetadata( void ServiceMonitoringServiceMetadata::SetMetadata( grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/monitoring/internal/service_monitoring_option_defaults.cc b/google/cloud/monitoring/internal/service_monitoring_option_defaults.cc index 96898a491aa9b..e9403949aa41e 100644 --- a/google/cloud/monitoring/internal/service_monitoring_option_defaults.cc +++ b/google/cloud/monitoring/internal/service_monitoring_option_defaults.cc @@ -43,6 +43,10 @@ Options ServiceMonitoringServiceDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "monitoring.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/monitoring/internal/uptime_check_metadata_decorator.cc b/google/cloud/monitoring/internal/uptime_check_metadata_decorator.cc index 9e0d32a40d12a..7850a0a03ec28 100644 --- a/google/cloud/monitoring/internal/uptime_check_metadata_decorator.cc +++ b/google/cloud/monitoring/internal/uptime_check_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/monitoring/v3/uptime_service.proto #include "google/cloud/monitoring/internal/uptime_check_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -89,6 +90,11 @@ void UptimeCheckServiceMetadata::SetMetadata( void UptimeCheckServiceMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/monitoring/internal/uptime_check_option_defaults.cc b/google/cloud/monitoring/internal/uptime_check_option_defaults.cc index fbae5726d0600..72a6d83373f03 100644 --- a/google/cloud/monitoring/internal/uptime_check_option_defaults.cc +++ b/google/cloud/monitoring/internal/uptime_check_option_defaults.cc @@ -43,6 +43,10 @@ Options UptimeCheckServiceDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "monitoring.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/networkmanagement/internal/reachability_metadata_decorator.cc b/google/cloud/networkmanagement/internal/reachability_metadata_decorator.cc index 60f53717ecb1d..1dbd7822d22f5 100644 --- a/google/cloud/networkmanagement/internal/reachability_metadata_decorator.cc +++ b/google/cloud/networkmanagement/internal/reachability_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/networkmanagement/v1/reachability.proto #include "google/cloud/networkmanagement/internal/reachability_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -116,6 +117,11 @@ void ReachabilityServiceMetadata::SetMetadata( void ReachabilityServiceMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/networkmanagement/internal/reachability_option_defaults.cc b/google/cloud/networkmanagement/internal/reachability_option_defaults.cc index be71924ffa850..b0e719703b12c 100644 --- a/google/cloud/networkmanagement/internal/reachability_option_defaults.cc +++ b/google/cloud/networkmanagement/internal/reachability_option_defaults.cc @@ -43,6 +43,10 @@ Options ReachabilityServiceDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "networkmanagement.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/notebooks/internal/managed_notebook_metadata_decorator.cc b/google/cloud/notebooks/internal/managed_notebook_metadata_decorator.cc index 78ff0d6ae6523..696a6fa1f47ee 100644 --- a/google/cloud/notebooks/internal/managed_notebook_metadata_decorator.cc +++ b/google/cloud/notebooks/internal/managed_notebook_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/notebooks/v1/managed_service.proto #include "google/cloud/notebooks/internal/managed_notebook_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -137,6 +138,11 @@ void ManagedNotebookServiceMetadata::SetMetadata( void ManagedNotebookServiceMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/notebooks/internal/managed_notebook_option_defaults.cc b/google/cloud/notebooks/internal/managed_notebook_option_defaults.cc index e6ba19c3bf635..8ac805a83f514 100644 --- a/google/cloud/notebooks/internal/managed_notebook_option_defaults.cc +++ b/google/cloud/notebooks/internal/managed_notebook_option_defaults.cc @@ -43,6 +43,10 @@ Options ManagedNotebookServiceDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "notebooks.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/notebooks/internal/notebook_metadata_decorator.cc b/google/cloud/notebooks/internal/notebook_metadata_decorator.cc index 6b106ec84acb6..0481789b47065 100644 --- a/google/cloud/notebooks/internal/notebook_metadata_decorator.cc +++ b/google/cloud/notebooks/internal/notebook_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/notebooks/v1/service.proto #include "google/cloud/notebooks/internal/notebook_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -341,6 +342,11 @@ void NotebookServiceMetadata::SetMetadata(grpc::ClientContext& context, void NotebookServiceMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/notebooks/internal/notebook_option_defaults.cc b/google/cloud/notebooks/internal/notebook_option_defaults.cc index abd45e6be2d5c..a83d354bd4308 100644 --- a/google/cloud/notebooks/internal/notebook_option_defaults.cc +++ b/google/cloud/notebooks/internal/notebook_option_defaults.cc @@ -42,6 +42,10 @@ Options NotebookServiceDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "notebooks.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/orgpolicy/internal/org_policy_metadata_decorator.cc b/google/cloud/orgpolicy/internal/org_policy_metadata_decorator.cc index 6d1d0c1d00c02..fb95dc20daa8d 100644 --- a/google/cloud/orgpolicy/internal/org_policy_metadata_decorator.cc +++ b/google/cloud/orgpolicy/internal/org_policy_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/orgpolicy/v2/orgpolicy.proto #include "google/cloud/orgpolicy/internal/org_policy_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -92,6 +93,11 @@ void OrgPolicyMetadata::SetMetadata(grpc::ClientContext& context, void OrgPolicyMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/orgpolicy/internal/org_policy_option_defaults.cc b/google/cloud/orgpolicy/internal/org_policy_option_defaults.cc index 580423219ad91..3d0d99d48cade 100644 --- a/google/cloud/orgpolicy/internal/org_policy_option_defaults.cc +++ b/google/cloud/orgpolicy/internal/org_policy_option_defaults.cc @@ -42,6 +42,10 @@ Options OrgPolicyDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "orgpolicy.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/osconfig/internal/agent_endpoint_metadata_decorator.cc b/google/cloud/osconfig/internal/agent_endpoint_metadata_decorator.cc index e2638a8b9c3ce..08ac50b988199 100644 --- a/google/cloud/osconfig/internal/agent_endpoint_metadata_decorator.cc +++ b/google/cloud/osconfig/internal/agent_endpoint_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/osconfig/agentendpoint/v1/agentendpoint.proto #include "google/cloud/osconfig/internal/agent_endpoint_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -97,6 +98,11 @@ void AgentEndpointServiceMetadata::SetMetadata( void AgentEndpointServiceMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/osconfig/internal/agent_endpoint_option_defaults.cc b/google/cloud/osconfig/internal/agent_endpoint_option_defaults.cc index 0b38269df4efb..ee939d09c729f 100644 --- a/google/cloud/osconfig/internal/agent_endpoint_option_defaults.cc +++ b/google/cloud/osconfig/internal/agent_endpoint_option_defaults.cc @@ -43,6 +43,10 @@ Options AgentEndpointServiceDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "osconfig.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/osconfig/internal/os_config_metadata_decorator.cc b/google/cloud/osconfig/internal/os_config_metadata_decorator.cc index 22cfbaae85499..c4f2a9ef05d23 100644 --- a/google/cloud/osconfig/internal/os_config_metadata_decorator.cc +++ b/google/cloud/osconfig/internal/os_config_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/osconfig/v1/osconfig_service.proto #include "google/cloud/osconfig/internal/os_config_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -113,6 +114,11 @@ void OsConfigServiceMetadata::SetMetadata(grpc::ClientContext& context, void OsConfigServiceMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/osconfig/internal/os_config_option_defaults.cc b/google/cloud/osconfig/internal/os_config_option_defaults.cc index ecbe7539be24e..5e09e1fbc9d5a 100644 --- a/google/cloud/osconfig/internal/os_config_option_defaults.cc +++ b/google/cloud/osconfig/internal/os_config_option_defaults.cc @@ -42,6 +42,10 @@ Options OsConfigServiceDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "osconfig.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/oslogin/internal/os_login_metadata_decorator.cc b/google/cloud/oslogin/internal/os_login_metadata_decorator.cc index 4876c6372eb8a..8a158c283984f 100644 --- a/google/cloud/oslogin/internal/os_login_metadata_decorator.cc +++ b/google/cloud/oslogin/internal/os_login_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/oslogin/v1/oslogin.proto #include "google/cloud/oslogin/internal/os_login_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -87,6 +88,11 @@ void OsLoginServiceMetadata::SetMetadata(grpc::ClientContext& context, void OsLoginServiceMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/oslogin/internal/os_login_option_defaults.cc b/google/cloud/oslogin/internal/os_login_option_defaults.cc index 0e982b584139c..51c5b60fedd08 100644 --- a/google/cloud/oslogin/internal/os_login_option_defaults.cc +++ b/google/cloud/oslogin/internal/os_login_option_defaults.cc @@ -42,6 +42,10 @@ Options OsLoginServiceDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "oslogin.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/policytroubleshooter/internal/iam_checker_metadata_decorator.cc b/google/cloud/policytroubleshooter/internal/iam_checker_metadata_decorator.cc index 5e6d1c204e758..a57dec6b4fc04 100644 --- a/google/cloud/policytroubleshooter/internal/iam_checker_metadata_decorator.cc +++ b/google/cloud/policytroubleshooter/internal/iam_checker_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/policytroubleshooter/v1/checker.proto #include "google/cloud/policytroubleshooter/internal/iam_checker_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -49,6 +50,11 @@ void IamCheckerMetadata::SetMetadata(grpc::ClientContext& context, void IamCheckerMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/policytroubleshooter/internal/iam_checker_option_defaults.cc b/google/cloud/policytroubleshooter/internal/iam_checker_option_defaults.cc index bf225168dd78e..fc7a7e7084786 100644 --- a/google/cloud/policytroubleshooter/internal/iam_checker_option_defaults.cc +++ b/google/cloud/policytroubleshooter/internal/iam_checker_option_defaults.cc @@ -42,6 +42,10 @@ Options IamCheckerDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "policytroubleshooter.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/privateca/internal/certificate_authority_metadata_decorator.cc b/google/cloud/privateca/internal/certificate_authority_metadata_decorator.cc index 23c73a4608cbf..c34b54694016e 100644 --- a/google/cloud/privateca/internal/certificate_authority_metadata_decorator.cc +++ b/google/cloud/privateca/internal/certificate_authority_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/security/privateca/v1/service.proto #include "google/cloud/privateca/internal/certificate_authority_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -350,6 +351,11 @@ void CertificateAuthorityServiceMetadata::SetMetadata( void CertificateAuthorityServiceMetadata::SetMetadata( grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/privateca/internal/certificate_authority_option_defaults.cc b/google/cloud/privateca/internal/certificate_authority_option_defaults.cc index d23a785b66ba2..2be314efb9394 100644 --- a/google/cloud/privateca/internal/certificate_authority_option_defaults.cc +++ b/google/cloud/privateca/internal/certificate_authority_option_defaults.cc @@ -43,6 +43,10 @@ Options CertificateAuthorityServiceDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "privateca.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/pubsublite/internal/admin_metadata_decorator.cc b/google/cloud/pubsublite/internal/admin_metadata_decorator.cc index bc171718540f3..e3962f70bc712 100644 --- a/google/cloud/pubsublite/internal/admin_metadata_decorator.cc +++ b/google/cloud/pubsublite/internal/admin_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/pubsublite/v1/admin.proto #include "google/cloud/pubsublite/internal/admin_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -209,6 +210,11 @@ void AdminServiceMetadata::SetMetadata(grpc::ClientContext& context, void AdminServiceMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/pubsublite/internal/admin_option_defaults.cc b/google/cloud/pubsublite/internal/admin_option_defaults.cc index cad4e3312fc89..b8b715a107753 100644 --- a/google/cloud/pubsublite/internal/admin_option_defaults.cc +++ b/google/cloud/pubsublite/internal/admin_option_defaults.cc @@ -42,6 +42,10 @@ Options AdminServiceDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "pubsublite.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/pubsublite/internal/cursor_metadata_decorator.cc b/google/cloud/pubsublite/internal/cursor_metadata_decorator.cc index 5a5315cd6a748..a117252600e23 100644 --- a/google/cloud/pubsublite/internal/cursor_metadata_decorator.cc +++ b/google/cloud/pubsublite/internal/cursor_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/pubsublite/v1/cursor.proto #include "google/cloud/pubsublite/internal/cursor_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -67,6 +68,11 @@ void CursorServiceMetadata::SetMetadata(grpc::ClientContext& context, void CursorServiceMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/pubsublite/internal/partition_assignment_metadata_decorator.cc b/google/cloud/pubsublite/internal/partition_assignment_metadata_decorator.cc index 656f3f5df6cc1..f840f4304a0b3 100644 --- a/google/cloud/pubsublite/internal/partition_assignment_metadata_decorator.cc +++ b/google/cloud/pubsublite/internal/partition_assignment_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/pubsublite/v1/subscriber.proto #include "google/cloud/pubsublite/internal/partition_assignment_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -52,6 +53,11 @@ void PartitionAssignmentServiceMetadata::SetMetadata( void PartitionAssignmentServiceMetadata::SetMetadata( grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/pubsublite/internal/publisher_metadata_decorator.cc b/google/cloud/pubsublite/internal/publisher_metadata_decorator.cc index 4bcce1bdbb6bd..961567de3e4a9 100644 --- a/google/cloud/pubsublite/internal/publisher_metadata_decorator.cc +++ b/google/cloud/pubsublite/internal/publisher_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/pubsublite/v1/publisher.proto #include "google/cloud/pubsublite/internal/publisher_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -51,6 +52,11 @@ void PublisherServiceMetadata::SetMetadata(grpc::ClientContext& context, void PublisherServiceMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/pubsublite/internal/subscriber_metadata_decorator.cc b/google/cloud/pubsublite/internal/subscriber_metadata_decorator.cc index a02397b4c69c6..cd7d7bc5dce9e 100644 --- a/google/cloud/pubsublite/internal/subscriber_metadata_decorator.cc +++ b/google/cloud/pubsublite/internal/subscriber_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/pubsublite/v1/subscriber.proto #include "google/cloud/pubsublite/internal/subscriber_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -51,6 +52,11 @@ void SubscriberServiceMetadata::SetMetadata(grpc::ClientContext& context, void SubscriberServiceMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/pubsublite/internal/topic_stats_metadata_decorator.cc b/google/cloud/pubsublite/internal/topic_stats_metadata_decorator.cc index 13c05d853eac0..c7909bcec1d82 100644 --- a/google/cloud/pubsublite/internal/topic_stats_metadata_decorator.cc +++ b/google/cloud/pubsublite/internal/topic_stats_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/pubsublite/v1/topic_stats.proto #include "google/cloud/pubsublite/internal/topic_stats_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -65,6 +66,11 @@ void TopicStatsServiceMetadata::SetMetadata(grpc::ClientContext& context, void TopicStatsServiceMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/pubsublite/internal/topic_stats_option_defaults.cc b/google/cloud/pubsublite/internal/topic_stats_option_defaults.cc index 7b7e2aadc7a3e..6ea1d2439f378 100644 --- a/google/cloud/pubsublite/internal/topic_stats_option_defaults.cc +++ b/google/cloud/pubsublite/internal/topic_stats_option_defaults.cc @@ -43,6 +43,10 @@ Options TopicStatsServiceDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "pubsublite.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/recommender/internal/recommender_metadata_decorator.cc b/google/cloud/recommender/internal/recommender_metadata_decorator.cc index 79a1cd298cf29..d3387814ae209 100644 --- a/google/cloud/recommender/internal/recommender_metadata_decorator.cc +++ b/google/cloud/recommender/internal/recommender_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/recommender/v1/recommender_service.proto #include "google/cloud/recommender/internal/recommender_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -107,6 +108,11 @@ void RecommenderMetadata::SetMetadata(grpc::ClientContext& context, void RecommenderMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/recommender/internal/recommender_option_defaults.cc b/google/cloud/recommender/internal/recommender_option_defaults.cc index 2639169162702..590c6c7ca827d 100644 --- a/google/cloud/recommender/internal/recommender_option_defaults.cc +++ b/google/cloud/recommender/internal/recommender_option_defaults.cc @@ -42,6 +42,10 @@ Options RecommenderDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "recommender.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/redis/internal/cloud_redis_metadata_decorator.cc b/google/cloud/redis/internal/cloud_redis_metadata_decorator.cc index a9a1206a41083..a8a47b50b042a 100644 --- a/google/cloud/redis/internal/cloud_redis_metadata_decorator.cc +++ b/google/cloud/redis/internal/cloud_redis_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/redis/v1/cloud_redis.proto #include "google/cloud/redis/internal/cloud_redis_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -135,6 +136,11 @@ void CloudRedisMetadata::SetMetadata(grpc::ClientContext& context, void CloudRedisMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/redis/internal/cloud_redis_option_defaults.cc b/google/cloud/redis/internal/cloud_redis_option_defaults.cc index 6512e3061270e..6174a03c3197c 100644 --- a/google/cloud/redis/internal/cloud_redis_option_defaults.cc +++ b/google/cloud/redis/internal/cloud_redis_option_defaults.cc @@ -42,6 +42,10 @@ Options CloudRedisDefaultOptions(Options options) { options.set(env && !env->empty() ? *env : "redis.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/resourcemanager/internal/folders_metadata_decorator.cc b/google/cloud/resourcemanager/internal/folders_metadata_decorator.cc index ccbbdc39512ae..06cf5a131c2c1 100644 --- a/google/cloud/resourcemanager/internal/folders_metadata_decorator.cc +++ b/google/cloud/resourcemanager/internal/folders_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/resourcemanager/v3/folders.proto #include "google/cloud/resourcemanager/internal/folders_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -147,6 +148,11 @@ void FoldersMetadata::SetMetadata(grpc::ClientContext& context, void FoldersMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/resourcemanager/internal/folders_option_defaults.cc b/google/cloud/resourcemanager/internal/folders_option_defaults.cc index 88a6b97c387bf..d9b3e88ba3c1e 100644 --- a/google/cloud/resourcemanager/internal/folders_option_defaults.cc +++ b/google/cloud/resourcemanager/internal/folders_option_defaults.cc @@ -42,6 +42,10 @@ Options FoldersDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "cloudresourcemanager.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/resourcemanager/internal/organizations_metadata_decorator.cc b/google/cloud/resourcemanager/internal/organizations_metadata_decorator.cc index a4cf10019a05f..e41a2cc072ed7 100644 --- a/google/cloud/resourcemanager/internal/organizations_metadata_decorator.cc +++ b/google/cloud/resourcemanager/internal/organizations_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/resourcemanager/v3/organizations.proto #include "google/cloud/resourcemanager/internal/organizations_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -80,6 +81,11 @@ void OrganizationsMetadata::SetMetadata(grpc::ClientContext& context, void OrganizationsMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/resourcemanager/internal/organizations_option_defaults.cc b/google/cloud/resourcemanager/internal/organizations_option_defaults.cc index 6dcf4f15013a0..5704f89bee489 100644 --- a/google/cloud/resourcemanager/internal/organizations_option_defaults.cc +++ b/google/cloud/resourcemanager/internal/organizations_option_defaults.cc @@ -42,6 +42,10 @@ Options OrganizationsDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "cloudresourcemanager.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/resourcemanager/internal/projects_metadata_decorator.cc b/google/cloud/resourcemanager/internal/projects_metadata_decorator.cc index cd5c51a45ece6..c3f28390a9f71 100644 --- a/google/cloud/resourcemanager/internal/projects_metadata_decorator.cc +++ b/google/cloud/resourcemanager/internal/projects_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/resourcemanager/v3/projects.proto #include "google/cloud/resourcemanager/internal/projects_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -148,6 +149,11 @@ void ProjectsMetadata::SetMetadata(grpc::ClientContext& context, void ProjectsMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/resourcemanager/internal/projects_option_defaults.cc b/google/cloud/resourcemanager/internal/projects_option_defaults.cc index 74dcf77aecf64..839024dd58c66 100644 --- a/google/cloud/resourcemanager/internal/projects_option_defaults.cc +++ b/google/cloud/resourcemanager/internal/projects_option_defaults.cc @@ -42,6 +42,10 @@ Options ProjectsDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "cloudresourcemanager.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/resourcesettings/internal/resource_settings_metadata_decorator.cc b/google/cloud/resourcesettings/internal/resource_settings_metadata_decorator.cc index 3f6edb2773b53..71b28bb42e2b8 100644 --- a/google/cloud/resourcesettings/internal/resource_settings_metadata_decorator.cc +++ b/google/cloud/resourcesettings/internal/resource_settings_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/resourcesettings/v1/resource_settings.proto #include "google/cloud/resourcesettings/internal/resource_settings_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -66,6 +67,11 @@ void ResourceSettingsServiceMetadata::SetMetadata( void ResourceSettingsServiceMetadata::SetMetadata( grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/resourcesettings/internal/resource_settings_option_defaults.cc b/google/cloud/resourcesettings/internal/resource_settings_option_defaults.cc index b6fc544094a16..193cd37d841d8 100644 --- a/google/cloud/resourcesettings/internal/resource_settings_option_defaults.cc +++ b/google/cloud/resourcesettings/internal/resource_settings_option_defaults.cc @@ -43,6 +43,10 @@ Options ResourceSettingsServiceDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "resourcesettings.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/retail/internal/catalog_metadata_decorator.cc b/google/cloud/retail/internal/catalog_metadata_decorator.cc index 99891ac2e2a9f..b1262000811f2 100644 --- a/google/cloud/retail/internal/catalog_metadata_decorator.cc +++ b/google/cloud/retail/internal/catalog_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/retail/v2/catalog_service.proto #include "google/cloud/retail/internal/catalog_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -72,6 +73,11 @@ void CatalogServiceMetadata::SetMetadata(grpc::ClientContext& context, void CatalogServiceMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/retail/internal/catalog_option_defaults.cc b/google/cloud/retail/internal/catalog_option_defaults.cc index 660b22e6fa7a2..64201b5257a2b 100644 --- a/google/cloud/retail/internal/catalog_option_defaults.cc +++ b/google/cloud/retail/internal/catalog_option_defaults.cc @@ -42,6 +42,10 @@ Options CatalogServiceDefaultOptions(Options options) { options.set(env && !env->empty() ? *env : "retail.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/retail/internal/completion_metadata_decorator.cc b/google/cloud/retail/internal/completion_metadata_decorator.cc index 3b4d04c879285..a01ea0917faa4 100644 --- a/google/cloud/retail/internal/completion_metadata_decorator.cc +++ b/google/cloud/retail/internal/completion_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/retail/v2/completion_service.proto #include "google/cloud/retail/internal/completion_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -75,6 +76,11 @@ void CompletionServiceMetadata::SetMetadata(grpc::ClientContext& context, void CompletionServiceMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/retail/internal/completion_option_defaults.cc b/google/cloud/retail/internal/completion_option_defaults.cc index ca12cd2c657ae..d4f878601e345 100644 --- a/google/cloud/retail/internal/completion_option_defaults.cc +++ b/google/cloud/retail/internal/completion_option_defaults.cc @@ -42,6 +42,10 @@ Options CompletionServiceDefaultOptions(Options options) { options.set(env && !env->empty() ? *env : "retail.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/retail/internal/prediction_metadata_decorator.cc b/google/cloud/retail/internal/prediction_metadata_decorator.cc index 5a807b6e3a7cd..130ab43a832c0 100644 --- a/google/cloud/retail/internal/prediction_metadata_decorator.cc +++ b/google/cloud/retail/internal/prediction_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/retail/v2/prediction_service.proto #include "google/cloud/retail/internal/prediction_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -49,6 +50,11 @@ void PredictionServiceMetadata::SetMetadata(grpc::ClientContext& context, void PredictionServiceMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/retail/internal/prediction_option_defaults.cc b/google/cloud/retail/internal/prediction_option_defaults.cc index af34271f96828..d5e119aff2250 100644 --- a/google/cloud/retail/internal/prediction_option_defaults.cc +++ b/google/cloud/retail/internal/prediction_option_defaults.cc @@ -42,6 +42,10 @@ Options PredictionServiceDefaultOptions(Options options) { options.set(env && !env->empty() ? *env : "retail.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/retail/internal/product_metadata_decorator.cc b/google/cloud/retail/internal/product_metadata_decorator.cc index b24c3782c9c9f..2d6a82a52997e 100644 --- a/google/cloud/retail/internal/product_metadata_decorator.cc +++ b/google/cloud/retail/internal/product_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/retail/v2/product_service.proto #include "google/cloud/retail/internal/product_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -132,6 +133,11 @@ void ProductServiceMetadata::SetMetadata(grpc::ClientContext& context, void ProductServiceMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/retail/internal/product_option_defaults.cc b/google/cloud/retail/internal/product_option_defaults.cc index a85c6b559ef6d..ababa0300c373 100644 --- a/google/cloud/retail/internal/product_option_defaults.cc +++ b/google/cloud/retail/internal/product_option_defaults.cc @@ -42,6 +42,10 @@ Options ProductServiceDefaultOptions(Options options) { options.set(env && !env->empty() ? *env : "retail.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/retail/internal/search_metadata_decorator.cc b/google/cloud/retail/internal/search_metadata_decorator.cc index fa18bea40ad52..906382da0dc31 100644 --- a/google/cloud/retail/internal/search_metadata_decorator.cc +++ b/google/cloud/retail/internal/search_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/retail/v2/search_service.proto #include "google/cloud/retail/internal/search_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -49,6 +50,11 @@ void SearchServiceMetadata::SetMetadata(grpc::ClientContext& context, void SearchServiceMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/retail/internal/search_option_defaults.cc b/google/cloud/retail/internal/search_option_defaults.cc index a8c08e4e91ce5..865c59c1a3b2c 100644 --- a/google/cloud/retail/internal/search_option_defaults.cc +++ b/google/cloud/retail/internal/search_option_defaults.cc @@ -42,6 +42,10 @@ Options SearchServiceDefaultOptions(Options options) { options.set(env && !env->empty() ? *env : "retail.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/retail/internal/user_event_metadata_decorator.cc b/google/cloud/retail/internal/user_event_metadata_decorator.cc index fc612f9608684..2d3d719ebb699 100644 --- a/google/cloud/retail/internal/user_event_metadata_decorator.cc +++ b/google/cloud/retail/internal/user_event_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/retail/v2/user_event_service.proto #include "google/cloud/retail/internal/user_event_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -100,6 +101,11 @@ void UserEventServiceMetadata::SetMetadata(grpc::ClientContext& context, void UserEventServiceMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/retail/internal/user_event_option_defaults.cc b/google/cloud/retail/internal/user_event_option_defaults.cc index aeb3aefa98e94..6feb076341163 100644 --- a/google/cloud/retail/internal/user_event_option_defaults.cc +++ b/google/cloud/retail/internal/user_event_option_defaults.cc @@ -42,6 +42,10 @@ Options UserEventServiceDefaultOptions(Options options) { options.set(env && !env->empty() ? *env : "retail.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/scheduler/internal/cloud_scheduler_metadata_decorator.cc b/google/cloud/scheduler/internal/cloud_scheduler_metadata_decorator.cc index e04aedb65bf17..2e1ee81b621d6 100644 --- a/google/cloud/scheduler/internal/cloud_scheduler_metadata_decorator.cc +++ b/google/cloud/scheduler/internal/cloud_scheduler_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/scheduler/v1/cloudscheduler.proto #include "google/cloud/scheduler/internal/cloud_scheduler_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -98,6 +99,11 @@ void CloudSchedulerMetadata::SetMetadata(grpc::ClientContext& context, void CloudSchedulerMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/scheduler/internal/cloud_scheduler_option_defaults.cc b/google/cloud/scheduler/internal/cloud_scheduler_option_defaults.cc index 664a998772515..e63d729f3a646 100644 --- a/google/cloud/scheduler/internal/cloud_scheduler_option_defaults.cc +++ b/google/cloud/scheduler/internal/cloud_scheduler_option_defaults.cc @@ -42,6 +42,10 @@ Options CloudSchedulerDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "cloudscheduler.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/secretmanager/internal/secret_manager_metadata_decorator.cc b/google/cloud/secretmanager/internal/secret_manager_metadata_decorator.cc index 752c00f51a4a1..7107b2373ae54 100644 --- a/google/cloud/secretmanager/internal/secret_manager_metadata_decorator.cc +++ b/google/cloud/secretmanager/internal/secret_manager_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/secretmanager/v1/service.proto #include "google/cloud/secretmanager/internal/secret_manager_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -163,6 +164,11 @@ void SecretManagerServiceMetadata::SetMetadata( void SecretManagerServiceMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/secretmanager/internal/secret_manager_option_defaults.cc b/google/cloud/secretmanager/internal/secret_manager_option_defaults.cc index 5d2955ffb69b3..f8c501bc86d34 100644 --- a/google/cloud/secretmanager/internal/secret_manager_option_defaults.cc +++ b/google/cloud/secretmanager/internal/secret_manager_option_defaults.cc @@ -43,6 +43,10 @@ Options SecretManagerServiceDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "secretmanager.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/securitycenter/internal/security_center_metadata_decorator.cc b/google/cloud/securitycenter/internal/security_center_metadata_decorator.cc index 23986472db3cf..6ef6f41a806bf 100644 --- a/google/cloud/securitycenter/internal/security_center_metadata_decorator.cc +++ b/google/cloud/securitycenter/internal/security_center_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/securitycenter/v1/securitycenter_service.proto #include "google/cloud/securitycenter/internal/security_center_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -318,6 +319,11 @@ void SecurityCenterMetadata::SetMetadata(grpc::ClientContext& context, void SecurityCenterMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/securitycenter/internal/security_center_option_defaults.cc b/google/cloud/securitycenter/internal/security_center_option_defaults.cc index 086af7ac5e0ca..d0e395e164439 100644 --- a/google/cloud/securitycenter/internal/security_center_option_defaults.cc +++ b/google/cloud/securitycenter/internal/security_center_option_defaults.cc @@ -42,6 +42,10 @@ Options SecurityCenterDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "securitycenter.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/servicecontrol/internal/quota_controller_metadata_decorator.cc b/google/cloud/servicecontrol/internal/quota_controller_metadata_decorator.cc index 94346a1768d3d..49eb3fbf7ff1f 100644 --- a/google/cloud/servicecontrol/internal/quota_controller_metadata_decorator.cc +++ b/google/cloud/servicecontrol/internal/quota_controller_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/api/servicecontrol/v1/quota_controller.proto #include "google/cloud/servicecontrol/internal/quota_controller_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -49,6 +50,11 @@ void QuotaControllerMetadata::SetMetadata(grpc::ClientContext& context, void QuotaControllerMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/servicecontrol/internal/quota_controller_option_defaults.cc b/google/cloud/servicecontrol/internal/quota_controller_option_defaults.cc index f61e4bf678438..641e09cac3f8b 100644 --- a/google/cloud/servicecontrol/internal/quota_controller_option_defaults.cc +++ b/google/cloud/servicecontrol/internal/quota_controller_option_defaults.cc @@ -42,6 +42,10 @@ Options QuotaControllerDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "servicecontrol.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/servicecontrol/internal/service_controller_metadata_decorator.cc b/google/cloud/servicecontrol/internal/service_controller_metadata_decorator.cc index cd436d8dffeff..d18263bf0a1e5 100644 --- a/google/cloud/servicecontrol/internal/service_controller_metadata_decorator.cc +++ b/google/cloud/servicecontrol/internal/service_controller_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/api/servicecontrol/v1/service_controller.proto #include "google/cloud/servicecontrol/internal/service_controller_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -57,6 +58,11 @@ void ServiceControllerMetadata::SetMetadata(grpc::ClientContext& context, void ServiceControllerMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/servicecontrol/internal/service_controller_option_defaults.cc b/google/cloud/servicecontrol/internal/service_controller_option_defaults.cc index f854db8b5849f..c5bc1d55eb325 100644 --- a/google/cloud/servicecontrol/internal/service_controller_option_defaults.cc +++ b/google/cloud/servicecontrol/internal/service_controller_option_defaults.cc @@ -42,6 +42,10 @@ Options ServiceControllerDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "servicecontrol.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/servicedirectory/internal/lookup_metadata_decorator.cc b/google/cloud/servicedirectory/internal/lookup_metadata_decorator.cc index 36cfb42c5cde7..a9815a64fe88e 100644 --- a/google/cloud/servicedirectory/internal/lookup_metadata_decorator.cc +++ b/google/cloud/servicedirectory/internal/lookup_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/servicedirectory/v1/lookup_service.proto #include "google/cloud/servicedirectory/internal/lookup_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -49,6 +50,11 @@ void LookupServiceMetadata::SetMetadata(grpc::ClientContext& context, void LookupServiceMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/servicedirectory/internal/lookup_option_defaults.cc b/google/cloud/servicedirectory/internal/lookup_option_defaults.cc index 8d7ea98a7fae9..e434429e903af 100644 --- a/google/cloud/servicedirectory/internal/lookup_option_defaults.cc +++ b/google/cloud/servicedirectory/internal/lookup_option_defaults.cc @@ -42,6 +42,10 @@ Options LookupServiceDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "servicedirectory.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/servicedirectory/internal/registration_metadata_decorator.cc b/google/cloud/servicedirectory/internal/registration_metadata_decorator.cc index 36f7eca0d6e14..1559d88aa7cb6 100644 --- a/google/cloud/servicedirectory/internal/registration_metadata_decorator.cc +++ b/google/cloud/servicedirectory/internal/registration_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/servicedirectory/v1/registration_service.proto #include "google/cloud/servicedirectory/internal/registration_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -183,6 +184,11 @@ void RegistrationServiceMetadata::SetMetadata( void RegistrationServiceMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/servicedirectory/internal/registration_option_defaults.cc b/google/cloud/servicedirectory/internal/registration_option_defaults.cc index 7c0d5f030b4d4..91fb2d1e91350 100644 --- a/google/cloud/servicedirectory/internal/registration_option_defaults.cc +++ b/google/cloud/servicedirectory/internal/registration_option_defaults.cc @@ -43,6 +43,10 @@ Options RegistrationServiceDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "servicedirectory.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/servicemanagement/internal/service_manager_metadata_decorator.cc b/google/cloud/servicemanagement/internal/service_manager_metadata_decorator.cc index 2ac8ac4d4ecf4..43e22e62e3892 100644 --- a/google/cloud/servicemanagement/internal/service_manager_metadata_decorator.cc +++ b/google/cloud/servicemanagement/internal/service_manager_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/api/servicemanagement/v1/servicemanager.proto #include "google/cloud/servicemanagement/internal/service_manager_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -191,6 +192,11 @@ void ServiceManagerMetadata::SetMetadata(grpc::ClientContext& context, void ServiceManagerMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/servicemanagement/internal/service_manager_option_defaults.cc b/google/cloud/servicemanagement/internal/service_manager_option_defaults.cc index 9481f34d61ae7..d2d81adc5f891 100644 --- a/google/cloud/servicemanagement/internal/service_manager_option_defaults.cc +++ b/google/cloud/servicemanagement/internal/service_manager_option_defaults.cc @@ -42,6 +42,10 @@ Options ServiceManagerDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "servicemanagement.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/serviceusage/internal/service_usage_metadata_decorator.cc b/google/cloud/serviceusage/internal/service_usage_metadata_decorator.cc index 34e08368187a9..7c90c01b5bb12 100644 --- a/google/cloud/serviceusage/internal/service_usage_metadata_decorator.cc +++ b/google/cloud/serviceusage/internal/service_usage_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/api/serviceusage/v1/serviceusage.proto #include "google/cloud/serviceusage/internal/service_usage_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -109,6 +110,11 @@ void ServiceUsageMetadata::SetMetadata(grpc::ClientContext& context, void ServiceUsageMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/serviceusage/internal/service_usage_option_defaults.cc b/google/cloud/serviceusage/internal/service_usage_option_defaults.cc index e72dc7f844b44..669852860878d 100644 --- a/google/cloud/serviceusage/internal/service_usage_option_defaults.cc +++ b/google/cloud/serviceusage/internal/service_usage_option_defaults.cc @@ -42,6 +42,10 @@ Options ServiceUsageDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "serviceusage.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/shell/internal/cloud_shell_metadata_decorator.cc b/google/cloud/shell/internal/cloud_shell_metadata_decorator.cc index 8d17de3ddb163..626cbbd66859c 100644 --- a/google/cloud/shell/internal/cloud_shell_metadata_decorator.cc +++ b/google/cloud/shell/internal/cloud_shell_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/shell/v1/cloudshell.proto #include "google/cloud/shell/internal/cloud_shell_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -102,6 +103,11 @@ void CloudShellServiceMetadata::SetMetadata(grpc::ClientContext& context, void CloudShellServiceMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/shell/internal/cloud_shell_option_defaults.cc b/google/cloud/shell/internal/cloud_shell_option_defaults.cc index c5377123c19f5..bae9aaf3d17f9 100644 --- a/google/cloud/shell/internal/cloud_shell_option_defaults.cc +++ b/google/cloud/shell/internal/cloud_shell_option_defaults.cc @@ -43,6 +43,10 @@ Options CloudShellServiceDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "cloudshell.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/spanner/admin/internal/database_admin_metadata_decorator.cc b/google/cloud/spanner/admin/internal/database_admin_metadata_decorator.cc index 56d30cd5bc9a2..e53a1a9e81c6c 100644 --- a/google/cloud/spanner/admin/internal/database_admin_metadata_decorator.cc +++ b/google/cloud/spanner/admin/internal/database_admin_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/spanner/admin/database/v1/spanner_database_admin.proto #include "google/cloud/spanner/admin/internal/database_admin_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -200,6 +201,11 @@ void DatabaseAdminMetadata::SetMetadata(grpc::ClientContext& context, void DatabaseAdminMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/spanner/admin/internal/database_admin_option_defaults.cc b/google/cloud/spanner/admin/internal/database_admin_option_defaults.cc index ca03e2754e132..c3f6c01df5659 100644 --- a/google/cloud/spanner/admin/internal/database_admin_option_defaults.cc +++ b/google/cloud/spanner/admin/internal/database_admin_option_defaults.cc @@ -42,6 +42,10 @@ Options DatabaseAdminDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "spanner.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (auto emulator = internal::GetEnv("SPANNER_EMULATOR_HOST")) { options.set(*emulator).set( grpc::InsecureChannelCredentials()); diff --git a/google/cloud/spanner/admin/internal/instance_admin_metadata_decorator.cc b/google/cloud/spanner/admin/internal/instance_admin_metadata_decorator.cc index 47b763cc9aa68..2b92e2cf3c57a 100644 --- a/google/cloud/spanner/admin/internal/instance_admin_metadata_decorator.cc +++ b/google/cloud/spanner/admin/internal/instance_admin_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/spanner/admin/instance/v1/spanner_instance_admin.proto #include "google/cloud/spanner/admin/internal/instance_admin_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -142,6 +143,11 @@ void InstanceAdminMetadata::SetMetadata(grpc::ClientContext& context, void InstanceAdminMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/spanner/admin/internal/instance_admin_option_defaults.cc b/google/cloud/spanner/admin/internal/instance_admin_option_defaults.cc index bd7d42ca0ba88..2f79c78eba376 100644 --- a/google/cloud/spanner/admin/internal/instance_admin_option_defaults.cc +++ b/google/cloud/spanner/admin/internal/instance_admin_option_defaults.cc @@ -42,6 +42,10 @@ Options InstanceAdminDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "spanner.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (auto emulator = internal::GetEnv("SPANNER_EMULATOR_HOST")) { options.set(*emulator).set( grpc::InsecureChannelCredentials()); diff --git a/google/cloud/storage/internal/storage_metadata_decorator.cc b/google/cloud/storage/internal/storage_metadata_decorator.cc index d67a9629e17c5..d2a4f8b349a70 100644 --- a/google/cloud/storage/internal/storage_metadata_decorator.cc +++ b/google/cloud/storage/internal/storage_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/storage/v2/storage.proto #include "google/cloud/storage/internal/storage_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -130,6 +131,11 @@ void StorageMetadata::SetMetadata(grpc::ClientContext& context, void StorageMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/storagetransfer/internal/storage_transfer_metadata_decorator.cc b/google/cloud/storagetransfer/internal/storage_transfer_metadata_decorator.cc index 2b30ba9454a41..becd649509aea 100644 --- a/google/cloud/storagetransfer/internal/storage_transfer_metadata_decorator.cc +++ b/google/cloud/storagetransfer/internal/storage_transfer_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/storagetransfer/v1/transfer.proto #include "google/cloud/storagetransfer/internal/storage_transfer_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -123,6 +124,11 @@ void StorageTransferServiceMetadata::SetMetadata( void StorageTransferServiceMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/storagetransfer/internal/storage_transfer_option_defaults.cc b/google/cloud/storagetransfer/internal/storage_transfer_option_defaults.cc index 157f5cca7de2d..3768307b66572 100644 --- a/google/cloud/storagetransfer/internal/storage_transfer_option_defaults.cc +++ b/google/cloud/storagetransfer/internal/storage_transfer_option_defaults.cc @@ -43,6 +43,10 @@ Options StorageTransferServiceDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "storagetransfer.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/talent/internal/company_metadata_decorator.cc b/google/cloud/talent/internal/company_metadata_decorator.cc index c864413c5e3f2..0bca6e371f654 100644 --- a/google/cloud/talent/internal/company_metadata_decorator.cc +++ b/google/cloud/talent/internal/company_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/talent/v4/company_service.proto #include "google/cloud/talent/internal/company_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -79,6 +80,11 @@ void CompanyServiceMetadata::SetMetadata(grpc::ClientContext& context, void CompanyServiceMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/talent/internal/company_option_defaults.cc b/google/cloud/talent/internal/company_option_defaults.cc index accc01c345d0d..094c6313988fa 100644 --- a/google/cloud/talent/internal/company_option_defaults.cc +++ b/google/cloud/talent/internal/company_option_defaults.cc @@ -42,6 +42,10 @@ Options CompanyServiceDefaultOptions(Options options) { options.set(env && !env->empty() ? *env : "jobs.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/talent/internal/completion_metadata_decorator.cc b/google/cloud/talent/internal/completion_metadata_decorator.cc index a931c8a0f6ba9..9c4c8a933189c 100644 --- a/google/cloud/talent/internal/completion_metadata_decorator.cc +++ b/google/cloud/talent/internal/completion_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/talent/v4/completion_service.proto #include "google/cloud/talent/internal/completion_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -48,6 +49,11 @@ void CompletionMetadata::SetMetadata(grpc::ClientContext& context, void CompletionMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/talent/internal/completion_option_defaults.cc b/google/cloud/talent/internal/completion_option_defaults.cc index 1195407488cce..62674a0b96026 100644 --- a/google/cloud/talent/internal/completion_option_defaults.cc +++ b/google/cloud/talent/internal/completion_option_defaults.cc @@ -42,6 +42,10 @@ Options CompletionDefaultOptions(Options options) { options.set(env && !env->empty() ? *env : "jobs.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/talent/internal/event_metadata_decorator.cc b/google/cloud/talent/internal/event_metadata_decorator.cc index 95d29b55743a5..7f5a97f5175d1 100644 --- a/google/cloud/talent/internal/event_metadata_decorator.cc +++ b/google/cloud/talent/internal/event_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/talent/v4/event_service.proto #include "google/cloud/talent/internal/event_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -49,6 +50,11 @@ void EventServiceMetadata::SetMetadata(grpc::ClientContext& context, void EventServiceMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/talent/internal/event_option_defaults.cc b/google/cloud/talent/internal/event_option_defaults.cc index be1496e31c1c4..128c6ea89b515 100644 --- a/google/cloud/talent/internal/event_option_defaults.cc +++ b/google/cloud/talent/internal/event_option_defaults.cc @@ -42,6 +42,10 @@ Options EventServiceDefaultOptions(Options options) { options.set(env && !env->empty() ? *env : "jobs.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/talent/internal/job_metadata_decorator.cc b/google/cloud/talent/internal/job_metadata_decorator.cc index 09b8ea70e0a60..c8733f4c5cbbb 100644 --- a/google/cloud/talent/internal/job_metadata_decorator.cc +++ b/google/cloud/talent/internal/job_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/talent/v4/job_service.proto #include "google/cloud/talent/internal/job_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -136,6 +137,11 @@ void JobServiceMetadata::SetMetadata(grpc::ClientContext& context, void JobServiceMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/talent/internal/job_option_defaults.cc b/google/cloud/talent/internal/job_option_defaults.cc index f160cf1b7f51d..e483ae6c7c368 100644 --- a/google/cloud/talent/internal/job_option_defaults.cc +++ b/google/cloud/talent/internal/job_option_defaults.cc @@ -42,6 +42,10 @@ Options JobServiceDefaultOptions(Options options) { options.set(env && !env->empty() ? *env : "jobs.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/talent/internal/tenant_metadata_decorator.cc b/google/cloud/talent/internal/tenant_metadata_decorator.cc index bc713c4386836..b0e11d75cf1c8 100644 --- a/google/cloud/talent/internal/tenant_metadata_decorator.cc +++ b/google/cloud/talent/internal/tenant_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/talent/v4/tenant_service.proto #include "google/cloud/talent/internal/tenant_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -77,6 +78,11 @@ void TenantServiceMetadata::SetMetadata(grpc::ClientContext& context, void TenantServiceMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/talent/internal/tenant_option_defaults.cc b/google/cloud/talent/internal/tenant_option_defaults.cc index e05a033591fc4..584c8fc7b79a4 100644 --- a/google/cloud/talent/internal/tenant_option_defaults.cc +++ b/google/cloud/talent/internal/tenant_option_defaults.cc @@ -42,6 +42,10 @@ Options TenantServiceDefaultOptions(Options options) { options.set(env && !env->empty() ? *env : "jobs.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/tasks/internal/cloud_tasks_metadata_decorator.cc b/google/cloud/tasks/internal/cloud_tasks_metadata_decorator.cc index 132634d934ae5..afade09b69ba5 100644 --- a/google/cloud/tasks/internal/cloud_tasks_metadata_decorator.cc +++ b/google/cloud/tasks/internal/cloud_tasks_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/tasks/v2/cloudtasks.proto #include "google/cloud/tasks/internal/cloud_tasks_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -155,6 +156,11 @@ void CloudTasksMetadata::SetMetadata(grpc::ClientContext& context, void CloudTasksMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/tasks/internal/cloud_tasks_option_defaults.cc b/google/cloud/tasks/internal/cloud_tasks_option_defaults.cc index a7f60f427dc32..5d2dcfab76aa0 100644 --- a/google/cloud/tasks/internal/cloud_tasks_option_defaults.cc +++ b/google/cloud/tasks/internal/cloud_tasks_option_defaults.cc @@ -42,6 +42,10 @@ Options CloudTasksDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "cloudtasks.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/texttospeech/internal/text_to_speech_metadata_decorator.cc b/google/cloud/texttospeech/internal/text_to_speech_metadata_decorator.cc index 375d98687c9b6..a5ea7f221fbf3 100644 --- a/google/cloud/texttospeech/internal/text_to_speech_metadata_decorator.cc +++ b/google/cloud/texttospeech/internal/text_to_speech_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/texttospeech/v1/cloud_tts.proto #include "google/cloud/texttospeech/internal/text_to_speech_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -57,6 +58,11 @@ void TextToSpeechMetadata::SetMetadata(grpc::ClientContext& context, void TextToSpeechMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/texttospeech/internal/text_to_speech_option_defaults.cc b/google/cloud/texttospeech/internal/text_to_speech_option_defaults.cc index 83f22829f8ca9..32b277c0da949 100644 --- a/google/cloud/texttospeech/internal/text_to_speech_option_defaults.cc +++ b/google/cloud/texttospeech/internal/text_to_speech_option_defaults.cc @@ -42,6 +42,10 @@ Options TextToSpeechDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "texttospeech.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/tpu/internal/tpu_metadata_decorator.cc b/google/cloud/tpu/internal/tpu_metadata_decorator.cc index 4c938a1f1e9bf..b870e20b24c47 100644 --- a/google/cloud/tpu/internal/tpu_metadata_decorator.cc +++ b/google/cloud/tpu/internal/tpu_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/tpu/v1/cloud_tpu.proto #include "google/cloud/tpu/internal/tpu_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -142,6 +143,11 @@ void TpuMetadata::SetMetadata(grpc::ClientContext& context, void TpuMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/tpu/internal/tpu_option_defaults.cc b/google/cloud/tpu/internal/tpu_option_defaults.cc index 0d472c32b3338..e3e0611b1515f 100644 --- a/google/cloud/tpu/internal/tpu_option_defaults.cc +++ b/google/cloud/tpu/internal/tpu_option_defaults.cc @@ -42,6 +42,10 @@ Options TpuDefaultOptions(Options options) { options.set(env && !env->empty() ? *env : "tpu.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/trace/internal/trace_metadata_decorator.cc b/google/cloud/trace/internal/trace_metadata_decorator.cc index 0f6c40c0956e2..ca830311e5a6e 100644 --- a/google/cloud/trace/internal/trace_metadata_decorator.cc +++ b/google/cloud/trace/internal/trace_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/devtools/cloudtrace/v2/tracing.proto #include "google/cloud/trace/internal/trace_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -56,6 +57,11 @@ void TraceServiceMetadata::SetMetadata(grpc::ClientContext& context, void TraceServiceMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/trace/internal/trace_option_defaults.cc b/google/cloud/trace/internal/trace_option_defaults.cc index 53fec840a6585..5646d002c7d91 100644 --- a/google/cloud/trace/internal/trace_option_defaults.cc +++ b/google/cloud/trace/internal/trace_option_defaults.cc @@ -42,6 +42,10 @@ Options TraceServiceDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "cloudtrace.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/translate/internal/translation_metadata_decorator.cc b/google/cloud/translate/internal/translation_metadata_decorator.cc index 58cf3c7dbc77f..0ae74f89491e6 100644 --- a/google/cloud/translate/internal/translation_metadata_decorator.cc +++ b/google/cloud/translate/internal/translation_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/translate/v3/translation_service.proto #include "google/cloud/translate/internal/translation_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -144,6 +145,11 @@ void TranslationServiceMetadata::SetMetadata( void TranslationServiceMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/translate/internal/translation_option_defaults.cc b/google/cloud/translate/internal/translation_option_defaults.cc index de6a24ae40158..4ae2e60ca3260 100644 --- a/google/cloud/translate/internal/translation_option_defaults.cc +++ b/google/cloud/translate/internal/translation_option_defaults.cc @@ -43,6 +43,10 @@ Options TranslationServiceDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "translate.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/videointelligence/internal/video_intelligence_metadata_decorator.cc b/google/cloud/videointelligence/internal/video_intelligence_metadata_decorator.cc index d7984c79c5cb9..405dee2eb5c78 100644 --- a/google/cloud/videointelligence/internal/video_intelligence_metadata_decorator.cc +++ b/google/cloud/videointelligence/internal/video_intelligence_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/videointelligence/v1/video_intelligence.proto #include "google/cloud/videointelligence/internal/video_intelligence_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -68,6 +69,11 @@ void VideoIntelligenceServiceMetadata::SetMetadata( void VideoIntelligenceServiceMetadata::SetMetadata( grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/videointelligence/internal/video_intelligence_option_defaults.cc b/google/cloud/videointelligence/internal/video_intelligence_option_defaults.cc index e3101998b72df..dc651224a8945 100644 --- a/google/cloud/videointelligence/internal/video_intelligence_option_defaults.cc +++ b/google/cloud/videointelligence/internal/video_intelligence_option_defaults.cc @@ -43,6 +43,10 @@ Options VideoIntelligenceServiceDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "videointelligence.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/vision/internal/image_annotator_metadata_decorator.cc b/google/cloud/vision/internal/image_annotator_metadata_decorator.cc index 4c3097ac426bb..964e0f6651e49 100644 --- a/google/cloud/vision/internal/image_annotator_metadata_decorator.cc +++ b/google/cloud/vision/internal/image_annotator_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/vision/v1/image_annotator.proto #include "google/cloud/vision/internal/image_annotator_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -92,6 +93,11 @@ void ImageAnnotatorMetadata::SetMetadata(grpc::ClientContext& context, void ImageAnnotatorMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/vision/internal/image_annotator_option_defaults.cc b/google/cloud/vision/internal/image_annotator_option_defaults.cc index 8e07444fddacd..55bf825563e97 100644 --- a/google/cloud/vision/internal/image_annotator_option_defaults.cc +++ b/google/cloud/vision/internal/image_annotator_option_defaults.cc @@ -42,6 +42,10 @@ Options ImageAnnotatorDefaultOptions(Options options) { options.set(env && !env->empty() ? *env : "vision.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/vision/internal/product_search_metadata_decorator.cc b/google/cloud/vision/internal/product_search_metadata_decorator.cc index a2f5695caf7cd..8ef2c033aee64 100644 --- a/google/cloud/vision/internal/product_search_metadata_decorator.cc +++ b/google/cloud/vision/internal/product_search_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/vision/v1/product_search_service.proto #include "google/cloud/vision/internal/product_search_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -207,6 +208,11 @@ void ProductSearchMetadata::SetMetadata(grpc::ClientContext& context, void ProductSearchMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/vision/internal/product_search_option_defaults.cc b/google/cloud/vision/internal/product_search_option_defaults.cc index 1ce3689cb1743..3dd94acffae89 100644 --- a/google/cloud/vision/internal/product_search_option_defaults.cc +++ b/google/cloud/vision/internal/product_search_option_defaults.cc @@ -42,6 +42,10 @@ Options ProductSearchDefaultOptions(Options options) { options.set(env && !env->empty() ? *env : "vision.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/vmmigration/internal/vm_migration_metadata_decorator.cc b/google/cloud/vmmigration/internal/vm_migration_metadata_decorator.cc index a1e59fc63cd94..9b03864eef5e6 100644 --- a/google/cloud/vmmigration/internal/vm_migration_metadata_decorator.cc +++ b/google/cloud/vmmigration/internal/vm_migration_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/vmmigration/v1/vmmigration.proto #include "google/cloud/vmmigration/internal/vm_migration_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -437,6 +438,11 @@ void VmMigrationMetadata::SetMetadata(grpc::ClientContext& context, void VmMigrationMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/vmmigration/internal/vm_migration_option_defaults.cc b/google/cloud/vmmigration/internal/vm_migration_option_defaults.cc index 31320aa1cee80..4fb28ebc28870 100644 --- a/google/cloud/vmmigration/internal/vm_migration_option_defaults.cc +++ b/google/cloud/vmmigration/internal/vm_migration_option_defaults.cc @@ -42,6 +42,10 @@ Options VmMigrationDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "vmmigration.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/vpcaccess/internal/vpc_access_metadata_decorator.cc b/google/cloud/vpcaccess/internal/vpc_access_metadata_decorator.cc index b82af159217d1..3cc93c662b21d 100644 --- a/google/cloud/vpcaccess/internal/vpc_access_metadata_decorator.cc +++ b/google/cloud/vpcaccess/internal/vpc_access_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/vpcaccess/v1/vpc_access.proto #include "google/cloud/vpcaccess/internal/vpc_access_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -92,6 +93,11 @@ void VpcAccessServiceMetadata::SetMetadata(grpc::ClientContext& context, void VpcAccessServiceMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/vpcaccess/internal/vpc_access_option_defaults.cc b/google/cloud/vpcaccess/internal/vpc_access_option_defaults.cc index dd147c375eb46..1ce8b8194dfb5 100644 --- a/google/cloud/vpcaccess/internal/vpc_access_option_defaults.cc +++ b/google/cloud/vpcaccess/internal/vpc_access_option_defaults.cc @@ -42,6 +42,10 @@ Options VpcAccessServiceDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "vpcaccess.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/webrisk/internal/web_risk_metadata_decorator.cc b/google/cloud/webrisk/internal/web_risk_metadata_decorator.cc index 5e4a75a014224..a9082a7cc456d 100644 --- a/google/cloud/webrisk/internal/web_risk_metadata_decorator.cc +++ b/google/cloud/webrisk/internal/web_risk_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/webrisk/v1/webrisk.proto #include "google/cloud/webrisk/internal/web_risk_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -73,6 +74,11 @@ void WebRiskServiceMetadata::SetMetadata(grpc::ClientContext& context, void WebRiskServiceMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/webrisk/internal/web_risk_option_defaults.cc b/google/cloud/webrisk/internal/web_risk_option_defaults.cc index 960e490db992c..d89f8b3cd27f6 100644 --- a/google/cloud/webrisk/internal/web_risk_option_defaults.cc +++ b/google/cloud/webrisk/internal/web_risk_option_defaults.cc @@ -42,6 +42,10 @@ Options WebRiskServiceDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "webrisk.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/websecurityscanner/internal/web_security_scanner_metadata_decorator.cc b/google/cloud/websecurityscanner/internal/web_security_scanner_metadata_decorator.cc index 2e78bc6026997..f5bc347e9a727 100644 --- a/google/cloud/websecurityscanner/internal/web_security_scanner_metadata_decorator.cc +++ b/google/cloud/websecurityscanner/internal/web_security_scanner_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/websecurityscanner/v1/web_security_scanner.proto #include "google/cloud/websecurityscanner/internal/web_security_scanner_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -151,6 +152,11 @@ void WebSecurityScannerMetadata::SetMetadata( void WebSecurityScannerMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/websecurityscanner/internal/web_security_scanner_option_defaults.cc b/google/cloud/websecurityscanner/internal/web_security_scanner_option_defaults.cc index d258a96b024de..53ba00780f54e 100644 --- a/google/cloud/websecurityscanner/internal/web_security_scanner_option_defaults.cc +++ b/google/cloud/websecurityscanner/internal/web_security_scanner_option_defaults.cc @@ -43,6 +43,10 @@ Options WebSecurityScannerDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "websecurityscanner.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/workflows/internal/executions_metadata_decorator.cc b/google/cloud/workflows/internal/executions_metadata_decorator.cc index 482bc7052e7c3..b658ba33e58b6 100644 --- a/google/cloud/workflows/internal/executions_metadata_decorator.cc +++ b/google/cloud/workflows/internal/executions_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/workflows/executions/v1/executions.proto #include "google/cloud/workflows/internal/executions_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -76,6 +77,11 @@ void ExecutionsMetadata::SetMetadata(grpc::ClientContext& context, void ExecutionsMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/workflows/internal/executions_option_defaults.cc b/google/cloud/workflows/internal/executions_option_defaults.cc index 43b41e7348db6..9f5da709f8607 100644 --- a/google/cloud/workflows/internal/executions_option_defaults.cc +++ b/google/cloud/workflows/internal/executions_option_defaults.cc @@ -42,6 +42,10 @@ Options ExecutionsDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "workflowexecutions.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); } diff --git a/google/cloud/workflows/internal/workflows_metadata_decorator.cc b/google/cloud/workflows/internal/workflows_metadata_decorator.cc index 264a1649bdbb6..48f2c838cd775 100644 --- a/google/cloud/workflows/internal/workflows_metadata_decorator.cc +++ b/google/cloud/workflows/internal/workflows_metadata_decorator.cc @@ -17,6 +17,7 @@ // source: google/cloud/workflows/v1/workflows.proto #include "google/cloud/workflows/internal/workflows_metadata_decorator.h" +#include "google/cloud/common_options.h" #include "google/cloud/internal/api_client_header.h" #include "google/cloud/status_or.h" #include @@ -99,6 +100,11 @@ void WorkflowsMetadata::SetMetadata(grpc::ClientContext& context, void WorkflowsMetadata::SetMetadata(grpc::ClientContext& context) { context.AddMetadata("x-goog-api-client", api_client_header_); + auto const& options = internal::CurrentOptions(); + if (options.has()) { + context.AddMetadata("x-goog-user-project", + options.get()); + } } GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END diff --git a/google/cloud/workflows/internal/workflows_option_defaults.cc b/google/cloud/workflows/internal/workflows_option_defaults.cc index 1b38122649add..bf973f7ac7c59 100644 --- a/google/cloud/workflows/internal/workflows_option_defaults.cc +++ b/google/cloud/workflows/internal/workflows_option_defaults.cc @@ -42,6 +42,10 @@ Options WorkflowsDefaultOptions(Options options) { options.set( env && !env->empty() ? *env : "workflows.googleapis.com"); } + if (!options.has()) { + auto env = internal::GetEnv("GOOGLE_CLOUD_CPP_USER_PROJECT"); + if (env.has_value() && !env->empty()) options.set(*env); + } if (!options.has()) { options.set(grpc::GoogleDefaultCredentials()); }