From edc5395ddcb21465c29b689dcd117d4c87dcdccf Mon Sep 17 00:00:00 2001 From: Tonis Tiigi Date: Tue, 11 Feb 2025 09:35:40 -0800 Subject: [PATCH] remove azure remote cache backend This is blocking upgrade to Github Actions Cache V2 API and update to latest release has not happened. Signed-off-by: Tonis Tiigi --- Dockerfile | 3 - README.md | 49 - cache/remotecache/azblob/exporter.go | 217 -- cache/remotecache/azblob/importer.go | 249 -- cache/remotecache/azblob/utils.go | 196 -- client/client_test.go | 40 - cmd/buildkitd/main.go | 3 - go.mod | 7 - go.sum | 12 - solver/pb/caps.go | 2 +- util/testutil/helpers/azurite.go | 96 - .../azure-sdk-for-go/sdk/azcore/CHANGELOG.md | 786 ----- .../azure-sdk-for-go/sdk/azcore/LICENSE.txt | 21 - .../azure-sdk-for-go/sdk/azcore/README.md | 39 - .../internal/resource/resource_identifier.go | 224 -- .../arm/internal/resource/resource_type.go | 114 - .../sdk/azcore/arm/policy/policy.go | 108 - .../sdk/azcore/arm/runtime/pipeline.go | 66 - .../azcore/arm/runtime/policy_bearer_token.go | 146 - .../azcore/arm/runtime/policy_register_rp.go | 322 -- .../arm/runtime/policy_trace_namespace.go | 30 - .../sdk/azcore/arm/runtime/runtime.go | 24 - .../Azure/azure-sdk-for-go/sdk/azcore/ci.yml | 29 - .../sdk/azcore/cloud/cloud.go | 44 - .../azure-sdk-for-go/sdk/azcore/cloud/doc.go | 53 - .../Azure/azure-sdk-for-go/sdk/azcore/core.go | 173 - .../Azure/azure-sdk-for-go/sdk/azcore/doc.go | 264 -- .../azure-sdk-for-go/sdk/azcore/errors.go | 14 - .../Azure/azure-sdk-for-go/sdk/azcore/etag.go | 57 - .../sdk/azcore/internal/exported/exported.go | 175 - .../sdk/azcore/internal/exported/pipeline.go | 77 - .../sdk/azcore/internal/exported/request.go | 223 -- .../internal/exported/response_error.go | 167 - .../sdk/azcore/internal/log/log.go | 50 - .../azcore/internal/pollers/async/async.go | 159 - .../sdk/azcore/internal/pollers/body/body.go | 135 - .../sdk/azcore/internal/pollers/fake/fake.go | 133 - .../sdk/azcore/internal/pollers/loc/loc.go | 123 - .../sdk/azcore/internal/pollers/op/op.go | 145 - .../sdk/azcore/internal/pollers/poller.go | 24 - .../sdk/azcore/internal/pollers/util.go | 200 -- .../sdk/azcore/internal/shared/constants.go | 44 - .../sdk/azcore/internal/shared/shared.go | 149 - .../azure-sdk-for-go/sdk/azcore/log/doc.go | 10 - .../azure-sdk-for-go/sdk/azcore/log/log.go | 55 - .../azure-sdk-for-go/sdk/azcore/policy/doc.go | 10 - .../sdk/azcore/policy/policy.go | 197 -- .../sdk/azcore/runtime/doc.go | 10 - .../sdk/azcore/runtime/errors.go | 27 - .../sdk/azcore/runtime/pager.go | 128 - .../sdk/azcore/runtime/pipeline.go | 94 - .../sdk/azcore/runtime/policy_api_version.go | 75 - .../sdk/azcore/runtime/policy_bearer_token.go | 123 - .../azcore/runtime/policy_body_download.go | 72 - .../sdk/azcore/runtime/policy_http_header.go | 40 - .../sdk/azcore/runtime/policy_http_trace.go | 143 - .../azcore/runtime/policy_include_response.go | 35 - .../azcore/runtime/policy_key_credential.go | 64 - .../sdk/azcore/runtime/policy_logging.go | 264 -- .../sdk/azcore/runtime/policy_request_id.go | 34 - .../sdk/azcore/runtime/policy_retry.go | 255 -- .../azcore/runtime/policy_sas_credential.go | 55 - .../sdk/azcore/runtime/policy_telemetry.go | 83 - .../sdk/azcore/runtime/poller.go | 389 --- .../sdk/azcore/runtime/request.go | 265 -- .../sdk/azcore/runtime/response.go | 109 - .../runtime/transport_default_dialer_other.go | 15 - .../runtime/transport_default_dialer_wasm.go | 15 - .../runtime/transport_default_http_client.go | 48 - .../sdk/azcore/streaming/doc.go | 9 - .../sdk/azcore/streaming/progress.go | 89 - .../azure-sdk-for-go/sdk/azcore/to/doc.go | 9 - .../azure-sdk-for-go/sdk/azcore/to/to.go | 21 - .../sdk/azcore/tracing/constants.go | 41 - .../sdk/azcore/tracing/tracing.go | 191 -- .../sdk/azidentity/.gitignore | 4 - .../sdk/azidentity/CHANGELOG.md | 551 ---- .../sdk/azidentity/LICENSE.txt | 21 - .../sdk/azidentity/MIGRATION.md | 307 -- .../azure-sdk-for-go/sdk/azidentity/README.md | 257 -- .../sdk/azidentity/TOKEN_CACHING.MD | 70 - .../sdk/azidentity/TROUBLESHOOTING.md | 231 -- .../sdk/azidentity/assets.json | 6 - .../sdk/azidentity/authentication_record.go | 95 - .../sdk/azidentity/azidentity.go | 190 -- .../sdk/azidentity/azure_cli_credential.go | 190 -- .../azure_developer_cli_credential.go | 169 - .../azidentity/azure_pipelines_credential.go | 130 - .../azidentity/chained_token_credential.go | 138 - .../azure-sdk-for-go/sdk/azidentity/ci.yml | 46 - .../azidentity/client_assertion_credential.go | 85 - .../client_certificate_credential.go | 174 - .../azidentity/client_secret_credential.go | 75 - .../sdk/azidentity/confidential_client.go | 184 -- .../azidentity/default_azure_credential.go | 165 - .../azidentity/developer_credential_util.go | 38 - .../sdk/azidentity/device_code_credential.go | 138 - .../sdk/azidentity/environment_credential.go | 167 - .../azure-sdk-for-go/sdk/azidentity/errors.go | 168 - .../azure-sdk-for-go/sdk/azidentity/go.work | 6 - .../sdk/azidentity/go.work.sum | 60 - .../interactive_browser_credential.go | 118 - .../sdk/azidentity/internal/exported.go | 18 - .../sdk/azidentity/internal/internal.go | 31 - .../sdk/azidentity/logging.go | 14 - .../azidentity/managed-identity-matrix.json | 17 - .../sdk/azidentity/managed_identity_client.go | 501 --- .../azidentity/managed_identity_credential.go | 128 - .../sdk/azidentity/on_behalf_of_credential.go | 113 - .../sdk/azidentity/public_client.go | 273 -- .../sdk/azidentity/test-resources-post.ps1 | 112 - .../sdk/azidentity/test-resources-pre.ps1 | 44 - .../sdk/azidentity/test-resources.bicep | 219 -- .../username_password_credential.go | 90 - .../sdk/azidentity/version.go | 18 - .../sdk/azidentity/workload_identity.go | 131 - .../azure-sdk-for-go/sdk/internal/LICENSE.txt | 21 - .../sdk/internal/diag/diag.go | 51 - .../azure-sdk-for-go/sdk/internal/diag/doc.go | 7 - .../sdk/internal/errorinfo/doc.go | 7 - .../sdk/internal/errorinfo/errorinfo.go | 46 - .../sdk/internal/exported/exported.go | 129 - .../azure-sdk-for-go/sdk/internal/log/doc.go | 7 - .../azure-sdk-for-go/sdk/internal/log/log.go | 104 - .../sdk/internal/poller/util.go | 155 - .../sdk/internal/temporal/resource.go | 123 - .../azure-sdk-for-go/sdk/internal/uuid/doc.go | 7 - .../sdk/internal/uuid/uuid.go | 76 - .../sdk/storage/azblob/CHANGELOG.md | 54 - .../sdk/storage/azblob/LICENSE.txt | 21 - .../sdk/storage/azblob/README.md | 397 --- .../sdk/storage/azblob/autorest.md | 171 - .../sdk/storage/azblob/bytes_writer.go | 30 - .../sdk/storage/azblob/chunkwriting.go | 231 -- .../sdk/storage/azblob/ci.yml | 28 - .../sdk/storage/azblob/connection.go | 39 - .../sdk/storage/azblob/constants.go | 46 - .../sdk/storage/azblob/doc.go | 214 -- .../sdk/storage/azblob/highlevel.go | 316 -- .../sdk/storage/azblob/internal/zc_shared.go | 150 - .../sdk/storage/azblob/section_writer.go | 53 - .../sdk/storage/azblob/transfer_manager.go | 154 - .../sdk/storage/azblob/zc_access_policy.go | 67 - .../storage/azblob/zc_append_blob_client.go | 154 - .../sdk/storage/azblob/zc_blob_client.go | 278 -- .../storage/azblob/zc_blob_lease_client.go | 98 - .../storage/azblob/zc_block_blob_client.go | 201 -- .../storage/azblob/zc_connection_string.go | 88 - .../sdk/storage/azblob/zc_container_client.go | 253 -- .../azblob/zc_container_lease_client.go | 102 - .../sdk/storage/azblob/zc_page_blob_client.go | 261 -- .../sdk/storage/azblob/zc_parsing_urls.go | 184 -- .../sdk/storage/azblob/zc_response_error.go | 17 - .../sdk/storage/azblob/zc_response_helpers.go | 35 - .../sdk/storage/azblob/zc_retry_reader.go | 194 -- .../sdk/storage/azblob/zc_sas_account.go | 243 -- .../sdk/storage/azblob/zc_sas_query_params.go | 427 --- .../sdk/storage/azblob/zc_sas_service.go | 365 --- .../sdk/storage/azblob/zc_service_client.go | 266 -- .../zc_shared_policy_shared_key_credential.go | 197 -- .../sdk/storage/azblob/zc_storage_error.go | 236 -- .../sdk/storage/azblob/zc_validators.go | 107 - .../storage/azblob/zm_access_conditions.go | 43 - .../azblob/zm_append_blob_client_util.go | 184 -- .../sdk/storage/azblob/zm_blob_client_util.go | 478 --- .../azblob/zm_blob_lease_client_util.go | 160 - .../azblob/zm_block_blob_client_util.go | 272 -- .../sdk/storage/azblob/zm_client_util.go | 55 - .../azblob/zm_container_client_util.go | 271 -- .../azblob/zm_container_lease_client_util.go | 166 - .../sdk/storage/azblob/zm_highlevel_util.go | 201 -- .../azblob/zm_page_blob_client_util.go | 402 --- .../zm_serialize_and_desearilize_util.go | 68 - .../storage/azblob/zm_service_client_util.go | 226 -- .../azblob/zz_generated_appendblob_client.go | 648 ---- .../azblob/zz_generated_blob_client.go | 2831 ----------------- .../azblob/zz_generated_blockblob_client.go | 953 ------ .../storage/azblob/zz_generated_constants.go | 841 ----- .../azblob/zz_generated_container_client.go | 1442 --------- .../sdk/storage/azblob/zz_generated_models.go | 2158 ------------- .../azblob/zz_generated_pageblob_client.go | 1247 -------- .../sdk/storage/azblob/zz_generated_pagers.go | 287 -- .../azblob/zz_generated_response_types.go | 2434 -------------- .../azblob/zz_generated_service_client.go | 551 ---- .../azblob/zz_generated_time_rfc1123.go | 42 - .../azblob/zz_generated_time_rfc3339.go | 58 - .../storage/azblob/zz_generated_xml_helper.go | 40 - .../LICENSE | 21 - .../apps/cache/cache.go | 54 - .../apps/confidential/confidential.go | 719 ----- .../apps/errors/error_design.md | 111 - .../apps/errors/errors.go | 89 - .../apps/internal/base/base.go | 477 --- .../internal/base/internal/storage/items.go | 213 -- .../internal/storage/partitioned_storage.go | 442 --- .../internal/base/internal/storage/storage.go | 583 ---- .../apps/internal/exported/exported.go | 34 - .../apps/internal/json/design.md | 140 - .../apps/internal/json/json.go | 184 -- .../apps/internal/json/mapslice.go | 333 -- .../apps/internal/json/marshal.go | 346 -- .../apps/internal/json/struct.go | 290 -- .../apps/internal/json/types/time/time.go | 70 - .../apps/internal/local/server.go | 177 -- .../apps/internal/oauth/oauth.go | 354 --- .../oauth/ops/accesstokens/accesstokens.go | 457 --- .../oauth/ops/accesstokens/apptype_string.go | 25 - .../internal/oauth/ops/accesstokens/tokens.go | 339 -- .../internal/oauth/ops/authority/authority.go | 589 ---- .../ops/authority/authorizetype_string.go | 30 - .../internal/oauth/ops/internal/comm/comm.go | 320 -- .../oauth/ops/internal/comm/compress.go | 33 - .../oauth/ops/internal/grant/grant.go | 17 - .../apps/internal/oauth/ops/ops.go | 56 - .../ops/wstrust/defs/endpointtype_string.go | 25 - .../wstrust/defs/mex_document_definitions.go | 394 --- .../defs/saml_assertion_definitions.go | 230 -- .../oauth/ops/wstrust/defs/version_string.go | 25 - .../ops/wstrust/defs/wstrust_endpoint.go | 199 -- .../ops/wstrust/defs/wstrust_mex_document.go | 159 - .../internal/oauth/ops/wstrust/wstrust.go | 136 - .../apps/internal/oauth/resolvers.go | 149 - .../apps/internal/options/options.go | 52 - .../apps/internal/shared/shared.go | 72 - .../apps/internal/version/version.go | 8 - .../apps/public/public.go | 756 ----- vendor/github.com/kylelemons/godebug/LICENSE | 202 -- .../kylelemons/godebug/diff/diff.go | 186 -- .../kylelemons/godebug/pretty/.gitignore | 5 - .../kylelemons/godebug/pretty/doc.go | 25 - .../kylelemons/godebug/pretty/public.go | 188 -- .../kylelemons/godebug/pretty/reflect.go | 241 -- .../kylelemons/godebug/pretty/structure.go | 223 -- vendor/github.com/pkg/browser/LICENSE | 23 - vendor/github.com/pkg/browser/README.md | 55 - vendor/github.com/pkg/browser/browser.go | 57 - .../github.com/pkg/browser/browser_darwin.go | 5 - .../github.com/pkg/browser/browser_freebsd.go | 14 - .../github.com/pkg/browser/browser_linux.go | 21 - .../github.com/pkg/browser/browser_netbsd.go | 14 - .../github.com/pkg/browser/browser_openbsd.go | 14 - .../pkg/browser/browser_unsupported.go | 12 - .../github.com/pkg/browser/browser_windows.go | 7 - .../golang.org/x/crypto/pkcs12/bmp-string.go | 50 - vendor/golang.org/x/crypto/pkcs12/crypto.go | 131 - vendor/golang.org/x/crypto/pkcs12/errors.go | 23 - .../x/crypto/pkcs12/internal/rc2/rc2.go | 268 -- vendor/golang.org/x/crypto/pkcs12/mac.go | 45 - vendor/golang.org/x/crypto/pkcs12/pbkdf.go | 170 - vendor/golang.org/x/crypto/pkcs12/pkcs12.go | 360 --- vendor/golang.org/x/crypto/pkcs12/safebags.go | 57 - vendor/modules.txt | 71 - 252 files changed, 1 insertion(+), 47301 deletions(-) delete mode 100644 cache/remotecache/azblob/exporter.go delete mode 100644 cache/remotecache/azblob/importer.go delete mode 100644 cache/remotecache/azblob/utils.go delete mode 100644 util/testutil/helpers/azurite.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/CHANGELOG.md delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/LICENSE.txt delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/README.md delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/internal/resource/resource_identifier.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/internal/resource/resource_type.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/policy/policy.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/runtime/pipeline.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/runtime/policy_bearer_token.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/runtime/policy_register_rp.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/runtime/policy_trace_namespace.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/runtime/runtime.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/ci.yml delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/cloud/cloud.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/cloud/doc.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/core.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/doc.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/errors.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/etag.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported/exported.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported/pipeline.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported/request.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported/response_error.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/log/log.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/async/async.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/body/body.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/fake/fake.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/loc/loc.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/op/op.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/poller.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/util.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared/constants.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared/shared.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/log/doc.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/log/log.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/policy/doc.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/policy/policy.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/doc.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/errors.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/pager.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/pipeline.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_api_version.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_bearer_token.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_body_download.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_http_header.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_http_trace.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_include_response.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_key_credential.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_logging.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_request_id.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_retry.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_sas_credential.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_telemetry.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/poller.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/request.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/response.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/transport_default_dialer_other.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/transport_default_dialer_wasm.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/transport_default_http_client.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/streaming/doc.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/streaming/progress.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/to/doc.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/to/to.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/tracing/constants.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/tracing/tracing.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/.gitignore delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/CHANGELOG.md delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/LICENSE.txt delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/MIGRATION.md delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/README.md delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/TOKEN_CACHING.MD delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/TROUBLESHOOTING.md delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/assets.json delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/authentication_record.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/azidentity.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/azure_cli_credential.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/azure_developer_cli_credential.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/azure_pipelines_credential.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/chained_token_credential.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/ci.yml delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/client_assertion_credential.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/client_certificate_credential.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/client_secret_credential.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/confidential_client.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/default_azure_credential.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/developer_credential_util.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/device_code_credential.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/environment_credential.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/errors.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/go.work delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/go.work.sum delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/interactive_browser_credential.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/internal/exported.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/internal/internal.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/logging.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/managed-identity-matrix.json delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/managed_identity_client.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/managed_identity_credential.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/on_behalf_of_credential.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/public_client.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/test-resources-post.ps1 delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/test-resources-pre.ps1 delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/test-resources.bicep delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/username_password_credential.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/version.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/workload_identity.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/LICENSE.txt delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/diag/diag.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/diag/doc.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/errorinfo/doc.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/errorinfo/errorinfo.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/exported/exported.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/log/doc.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/log/log.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/poller/util.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/temporal/resource.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/uuid/doc.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/uuid/uuid.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/CHANGELOG.md delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/LICENSE.txt delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/README.md delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/autorest.md delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/bytes_writer.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/chunkwriting.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/ci.yml delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/connection.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/constants.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/doc.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/highlevel.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/internal/zc_shared.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/section_writer.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/transfer_manager.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_access_policy.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_append_blob_client.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_blob_client.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_blob_lease_client.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_block_blob_client.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_connection_string.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_container_client.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_container_lease_client.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_page_blob_client.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_parsing_urls.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_response_error.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_response_helpers.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_retry_reader.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_sas_account.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_sas_query_params.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_sas_service.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_service_client.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_shared_policy_shared_key_credential.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_storage_error.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_validators.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zm_access_conditions.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zm_append_blob_client_util.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zm_blob_client_util.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zm_blob_lease_client_util.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zm_block_blob_client_util.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zm_client_util.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zm_container_client_util.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zm_container_lease_client_util.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zm_highlevel_util.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zm_page_blob_client_util.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zm_serialize_and_desearilize_util.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zm_service_client_util.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zz_generated_appendblob_client.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zz_generated_blob_client.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zz_generated_blockblob_client.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zz_generated_constants.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zz_generated_container_client.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zz_generated_models.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zz_generated_pageblob_client.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zz_generated_pagers.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zz_generated_response_types.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zz_generated_service_client.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zz_generated_time_rfc1123.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zz_generated_time_rfc3339.go delete mode 100644 vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zz_generated_xml_helper.go delete mode 100644 vendor/github.com/AzureAD/microsoft-authentication-library-for-go/LICENSE delete mode 100644 vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/cache/cache.go delete mode 100644 vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/confidential/confidential.go delete mode 100644 vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/errors/error_design.md delete mode 100644 vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/errors/errors.go delete mode 100644 vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/base/base.go delete mode 100644 vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/base/internal/storage/items.go delete mode 100644 vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/base/internal/storage/partitioned_storage.go delete mode 100644 vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/base/internal/storage/storage.go delete mode 100644 vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/exported/exported.go delete mode 100644 vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/json/design.md delete mode 100644 vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/json/json.go delete mode 100644 vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/json/mapslice.go delete mode 100644 vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/json/marshal.go delete mode 100644 vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/json/struct.go delete mode 100644 vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/json/types/time/time.go delete mode 100644 vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/local/server.go delete mode 100644 vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/oauth.go delete mode 100644 vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/accesstokens/accesstokens.go delete mode 100644 vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/accesstokens/apptype_string.go delete mode 100644 vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/accesstokens/tokens.go delete mode 100644 vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/authority/authority.go delete mode 100644 vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/authority/authorizetype_string.go delete mode 100644 vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/internal/comm/comm.go delete mode 100644 vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/internal/comm/compress.go delete mode 100644 vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/internal/grant/grant.go delete mode 100644 vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/ops.go delete mode 100644 vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/wstrust/defs/endpointtype_string.go delete mode 100644 vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/wstrust/defs/mex_document_definitions.go delete mode 100644 vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/wstrust/defs/saml_assertion_definitions.go delete mode 100644 vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/wstrust/defs/version_string.go delete mode 100644 vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/wstrust/defs/wstrust_endpoint.go delete mode 100644 vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/wstrust/defs/wstrust_mex_document.go delete mode 100644 vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/wstrust/wstrust.go delete mode 100644 vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/resolvers.go delete mode 100644 vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/options/options.go delete mode 100644 vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/shared/shared.go delete mode 100644 vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/version/version.go delete mode 100644 vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/public/public.go delete mode 100644 vendor/github.com/kylelemons/godebug/LICENSE delete mode 100644 vendor/github.com/kylelemons/godebug/diff/diff.go delete mode 100644 vendor/github.com/kylelemons/godebug/pretty/.gitignore delete mode 100644 vendor/github.com/kylelemons/godebug/pretty/doc.go delete mode 100644 vendor/github.com/kylelemons/godebug/pretty/public.go delete mode 100644 vendor/github.com/kylelemons/godebug/pretty/reflect.go delete mode 100644 vendor/github.com/kylelemons/godebug/pretty/structure.go delete mode 100644 vendor/github.com/pkg/browser/LICENSE delete mode 100644 vendor/github.com/pkg/browser/README.md delete mode 100644 vendor/github.com/pkg/browser/browser.go delete mode 100644 vendor/github.com/pkg/browser/browser_darwin.go delete mode 100644 vendor/github.com/pkg/browser/browser_freebsd.go delete mode 100644 vendor/github.com/pkg/browser/browser_linux.go delete mode 100644 vendor/github.com/pkg/browser/browser_netbsd.go delete mode 100644 vendor/github.com/pkg/browser/browser_openbsd.go delete mode 100644 vendor/github.com/pkg/browser/browser_unsupported.go delete mode 100644 vendor/github.com/pkg/browser/browser_windows.go delete mode 100644 vendor/golang.org/x/crypto/pkcs12/bmp-string.go delete mode 100644 vendor/golang.org/x/crypto/pkcs12/crypto.go delete mode 100644 vendor/golang.org/x/crypto/pkcs12/errors.go delete mode 100644 vendor/golang.org/x/crypto/pkcs12/internal/rc2/rc2.go delete mode 100644 vendor/golang.org/x/crypto/pkcs12/mac.go delete mode 100644 vendor/golang.org/x/crypto/pkcs12/pbkdf.go delete mode 100644 vendor/golang.org/x/crypto/pkcs12/pkcs12.go delete mode 100644 vendor/golang.org/x/crypto/pkcs12/safebags.go diff --git a/Dockerfile b/Dockerfile index abdd0cffb0fc..8f8f16906d36 100644 --- a/Dockerfile +++ b/Dockerfile @@ -396,9 +396,6 @@ RUN apk add --no-cache shadow shadow-uidmap sudo vim iptables ip6tables dnsmasq ARG NERDCTL_VERSION RUN curl -Ls https://raw.githubusercontent.com/containerd/nerdctl/$NERDCTL_VERSION/extras/rootless/containerd-rootless.sh > /usr/bin/containerd-rootless.sh \ && chmod 0755 /usr/bin/containerd-rootless.sh -ARG AZURITE_VERSION -RUN apk add --no-cache nodejs npm \ - && npm install -g azurite@${AZURITE_VERSION} # The entrypoint script is needed for enabling nested cgroup v2 (https://github.com/moby/buildkit/issues/3265#issuecomment-1309631736) RUN curl -Ls https://raw.githubusercontent.com/moby/moby/v25.0.1/hack/dind > /docker-entrypoint.sh \ && chmod 0755 /docker-entrypoint.sh diff --git a/README.md b/README.md index 4a9294b2dd93..bff09696fc4f 100644 --- a/README.md +++ b/README.md @@ -590,55 +590,6 @@ Other options are: * `manifests_prefix=`: set global prefix to store / read manifests on s3 (default: `manifests/`) * `name=`: name of the manifest to use (default `buildkit`) -#### Azure Blob Storage cache (experimental) - -```bash -buildctl build ... \ - --output type=image,name=docker.io/username/image,push=true \ - --export-cache type=azblob,account_url=https://myaccount.blob.core.windows.net,name=my_image \ - --import-cache type=azblob,account_url=https://myaccount.blob.core.windows.net,name=my_image -``` - -The following attributes are required: -* `account_url`: The Azure Blob Storage account URL (default: `$BUILDKIT_AZURE_STORAGE_ACCOUNT_URL`) - -Storage locations: -* blobs: `///`, default: `//blobs/` -* manifests: `///`, default: `//manifests/` - -Azure Blob Storage configuration: -* `container`: The Azure Blob Storage container name (default: `buildkit-cache` or `$BUILDKIT_AZURE_STORAGE_CONTAINER` if set) -* `blobs_prefix`: Global prefix to store / read blobs on the Azure Blob Storage container (``) (default: `blobs/`) -* `manifests_prefix`: Global prefix to store / read blobs on the Azure Blob Storage container (``) (default: `manifests/`) - -Azure Blob Storage authentication: - -There are 2 options supported for Azure Blob Storage authentication: - -* Any system using environment variables supported by the [Azure SDK for Go](https://docs.microsoft.com/en-us/azure/developer/go/azure-sdk-authentication). The configuration must be available for the buildkit daemon, not for the client. -* Secret Access Key, using the `secret_access_key` attribute to specify the primary or secondary account key for your Azure Blob Storage account. [Azure Blob Storage account keys](https://docs.microsoft.com/en-us/azure/storage/common/storage-account-keys-manage) - -> [!NOTE] -> Account name can also be specified with `account_name` attribute (or `$BUILDKIT_AZURE_STORAGE_ACCOUNT_NAME`) -> if it is not part of the account URL host. - -`--export-cache` options: -* `type=azblob` -* `mode=`: specify cache layers to export (default: `min`) - * `min`: only export layers for the resulting image - * `max`: export all the layers of all intermediate steps -* `prefix=`: set global prefix to store / read files on the Azure Blob Storage container (``) (default: empty) -* `name=`: specify name of the manifest to use (default: `buildkit`) - * Multiple manifest names can be specified at the same time, separated by `;`. The standard use case is to use the git sha1 as name, and the branch name as duplicate, and load both with 2 `import-cache` commands. -* `ignore-error=`: specify if error is ignored in case cache export fails (default: `false`) - -`--import-cache` options: -* `type=azblob` -* `prefix=`: set global prefix to store / read files on the Azure Blob Storage container (``) (default: empty) -* `blobs_prefix=`: set global prefix to store / read blobs on the Azure Blob Storage container (``) (default: `blobs/`) -* `manifests_prefix=`: set global prefix to store / read manifests on the Azure Blob Storage container (``) (default: `manifests/`) -* `name=`: name of the manifest to use (default: `buildkit`) - ### Consistent hashing If you have multiple BuildKit daemon instances, but you don't want to use registry for sharing cache across the cluster, diff --git a/cache/remotecache/azblob/exporter.go b/cache/remotecache/azblob/exporter.go deleted file mode 100644 index 473b7e8a5ffd..000000000000 --- a/cache/remotecache/azblob/exporter.go +++ /dev/null @@ -1,217 +0,0 @@ -package azblob - -import ( - "bytes" - "context" - "encoding/json" - "fmt" - "io" - "time" - - "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob" - "github.com/containerd/containerd/v2/core/content" - "github.com/containerd/containerd/v2/pkg/labels" - "github.com/moby/buildkit/cache/remotecache" - v1 "github.com/moby/buildkit/cache/remotecache/v1" - "github.com/moby/buildkit/session" - "github.com/moby/buildkit/solver" - "github.com/moby/buildkit/util/bklog" - "github.com/moby/buildkit/util/compression" - "github.com/moby/buildkit/util/progress" - digest "github.com/opencontainers/go-digest" - "github.com/pkg/errors" -) - -// ResolveCacheExporterFunc for "azblob" cache exporter. -func ResolveCacheExporterFunc() remotecache.ResolveCacheExporterFunc { - return func(ctx context.Context, g session.Group, attrs map[string]string) (remotecache.Exporter, error) { - config, err := getConfig(attrs) - if err != nil { - return nil, errors.WithMessage(err, "failed to create azblob config") - } - - containerClient, err := createContainerClient(ctx, config) - if err != nil { - return nil, errors.WithMessage(err, "failed to create container client") - } - - cc := v1.NewCacheChains() - return &exporter{ - CacheExporterTarget: cc, - chains: cc, - containerClient: containerClient, - config: config, - }, nil - } -} - -var _ remotecache.Exporter = &exporter{} - -type exporter struct { - solver.CacheExporterTarget - chains *v1.CacheChains - containerClient *azblob.ContainerClient - config *Config -} - -func (ce *exporter) Name() string { - return "exporting cache to Azure Blob Storage" -} - -func (ce *exporter) Finalize(ctx context.Context) (map[string]string, error) { - config, descs, err := ce.chains.Marshal(ctx) - if err != nil { - return nil, err - } - - for i, l := range config.Layers { - dgstPair, ok := descs[l.Blob] - if !ok { - return nil, errors.Errorf("missing blob %s", l.Blob) - } - if dgstPair.Descriptor.Annotations == nil { - return nil, errors.Errorf("invalid descriptor without annotations") - } - var diffID digest.Digest - v, ok := dgstPair.Descriptor.Annotations[labels.LabelUncompressed] - if !ok { - return nil, errors.Errorf("invalid descriptor without uncompressed annotation") - } - dgst, err := digest.Parse(v) - if err != nil { - return nil, errors.Wrapf(err, "failed to parse uncompressed annotation") - } - diffID = dgst - - key := blobKey(ce.config, dgstPair.Descriptor.Digest.String()) - - exists, err := blobExists(ctx, ce.containerClient, key) - if err != nil { - return nil, err - } - - bklog.G(ctx).Debugf("layers %s exists = %t", key, exists) - - if !exists { - layerDone := progress.OneOff(ctx, fmt.Sprintf("writing layer %s", l.Blob)) - ra, err := dgstPair.Provider.ReaderAt(ctx, dgstPair.Descriptor) - if err != nil { - err = errors.Wrapf(err, "failed to get reader for %s", dgstPair.Descriptor.Digest) - return nil, layerDone(err) - } - if err := ce.uploadBlobIfNotExists(ctx, key, content.NewReader(ra)); err != nil { - return nil, layerDone(err) - } - layerDone(nil) - } - - la := &v1.LayerAnnotations{ - DiffID: diffID, - Size: dgstPair.Descriptor.Size, - MediaType: dgstPair.Descriptor.MediaType, - } - if v, ok := dgstPair.Descriptor.Annotations["buildkit/createdat"]; ok { - var t time.Time - if err := (&t).UnmarshalText([]byte(v)); err != nil { - return nil, err - } - la.CreatedAt = t.UTC() - } - config.Layers[i].Annotations = la - } - - dt, err := json.Marshal(config) - if err != nil { - return nil, errors.Wrap(err, "failed to marshal config") - } - - for _, name := range ce.config.Names { - if innerError := ce.uploadManifest(ctx, manifestKey(ce.config, name), bytesToReadSeekCloser(dt)); innerError != nil { - return nil, errors.Wrapf(innerError, "error writing manifest %s", name) - } - } - - return nil, nil -} - -func (ce *exporter) Config() remotecache.Config { - return remotecache.Config{ - Compression: compression.New(compression.Default), - } -} - -// For uploading manifests, use the Upload API which follows "last writer wins" sematics -// This is slightly slower than UploadStream call but is safe to call concurrently from multiple threads. Refer to: -// https://github.com/Azure/azure-sdk-for-go/issues/18490#issuecomment-1170806877 -func (ce *exporter) uploadManifest(ctx context.Context, manifestKey string, reader io.ReadSeekCloser) error { - defer reader.Close() - blobClient, err := ce.containerClient.NewBlockBlobClient(manifestKey) - if err != nil { - return errors.Wrap(err, "error creating container client") - } - - ctx, cnclFn := context.WithCancelCause(ctx) - ctx, _ = context.WithTimeoutCause(ctx, time.Minute*5, errors.WithStack(context.DeadlineExceeded)) - defer cnclFn(errors.WithStack(context.Canceled)) - - _, err = blobClient.Upload(ctx, reader, &azblob.BlockBlobUploadOptions{}) - if err != nil { - return errors.Wrapf(err, "failed to upload blob %s: %v", manifestKey, err) - } - - return nil -} - -// For uploading blobs, use the UploadStream with access conditions which state that only upload if the blob -// does not already exist. Since blobs are content addressable, this is the right thing to do for blobs and it gives -// a performance improvement over the Upload API used for uploading manifests. -func (ce *exporter) uploadBlobIfNotExists(ctx context.Context, blobKey string, reader io.Reader) error { - blobClient, err := ce.containerClient.NewBlockBlobClient(blobKey) - if err != nil { - return errors.Wrap(err, "error creating container client") - } - - uploadCtx, cnclFn := context.WithCancelCause(ctx) - uploadCtx, _ = context.WithTimeoutCause(uploadCtx, time.Minute*5, errors.WithStack(context.DeadlineExceeded)) - defer cnclFn(errors.WithStack(context.Canceled)) - - // Only upload if the blob doesn't exist - eTagAny := azblob.ETagAny - _, err = blobClient.UploadStream(uploadCtx, reader, azblob.UploadStreamOptions{ - BufferSize: IOChunkSize, - MaxBuffers: IOConcurrency, - BlobAccessConditions: &azblob.BlobAccessConditions{ - ModifiedAccessConditions: &azblob.ModifiedAccessConditions{ - IfNoneMatch: &eTagAny, - }, - }, - }) - - if err == nil { - return nil - } - - var se *azblob.StorageError - if errors.As(err, &se) && se.ErrorCode == azblob.StorageErrorCodeBlobAlreadyExists { - return nil - } - - return errors.Wrapf(err, "failed to upload blob %s: %v", blobKey, err) -} - -var _ io.ReadSeekCloser = &readSeekCloser{} - -type readSeekCloser struct { - io.Reader - io.Seeker - io.Closer -} - -func bytesToReadSeekCloser(dt []byte) io.ReadSeekCloser { - bytesReader := bytes.NewReader(dt) - return &readSeekCloser{ - Reader: bytesReader, - Seeker: bytesReader, - Closer: io.NopCloser(bytesReader), - } -} diff --git a/cache/remotecache/azblob/importer.go b/cache/remotecache/azblob/importer.go deleted file mode 100644 index 211b3bd573c7..000000000000 --- a/cache/remotecache/azblob/importer.go +++ /dev/null @@ -1,249 +0,0 @@ -package azblob - -import ( - "context" - "encoding/json" - "fmt" - "io" - "sync" - - "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob" - "github.com/containerd/containerd/v2/core/content" - "github.com/containerd/containerd/v2/pkg/labels" - "github.com/moby/buildkit/cache/remotecache" - v1 "github.com/moby/buildkit/cache/remotecache/v1" - "github.com/moby/buildkit/session" - "github.com/moby/buildkit/solver" - "github.com/moby/buildkit/util/bklog" - "github.com/moby/buildkit/util/contentutil" - "github.com/moby/buildkit/util/progress" - "github.com/moby/buildkit/worker" - digest "github.com/opencontainers/go-digest" - ocispecs "github.com/opencontainers/image-spec/specs-go/v1" - "github.com/pkg/errors" - "golang.org/x/sync/errgroup" -) - -// ResolveCacheImporterFunc for "azblob" cache importer. -func ResolveCacheImporterFunc() remotecache.ResolveCacheImporterFunc { - return func(ctx context.Context, g session.Group, attrs map[string]string) (remotecache.Importer, ocispecs.Descriptor, error) { - config, err := getConfig(attrs) - if err != nil { - return nil, ocispecs.Descriptor{}, errors.WithMessage(err, "failed to create azblob config") - } - - containerClient, err := createContainerClient(ctx, config) - if err != nil { - return nil, ocispecs.Descriptor{}, errors.WithMessage(err, "failed to create container client") - } - - importer := &importer{ - config: config, - containerClient: containerClient, - } - - return importer, ocispecs.Descriptor{}, nil - } -} - -var _ remotecache.Importer = &importer{} - -type importer struct { - config *Config - containerClient *azblob.ContainerClient -} - -func (ci *importer) Resolve(ctx context.Context, _ ocispecs.Descriptor, id string, w worker.Worker) (solver.CacheManager, error) { - eg, ctx := errgroup.WithContext(ctx) - ccs := make([]*v1.CacheChains, len(ci.config.Names)) - - for i, name := range ci.config.Names { - func(i int, name string) { - eg.Go(func() error { - cc, err := ci.loadManifest(ctx, name) - if err != nil { - return errors.Wrapf(err, "failed to load cache manifest %s", name) - } - ccs[i] = cc - return nil - }) - }(i, name) - } - - if err := eg.Wait(); err != nil { - return nil, err - } - - cms := make([]solver.CacheManager, 0, len(ccs)) - - for _, cc := range ccs { - keysStorage, resultStorage, err := v1.NewCacheKeyStorage(cc, w) - if err != nil { - return nil, err - } - cms = append(cms, solver.NewCacheManager(ctx, id, keysStorage, resultStorage)) - } - - return solver.NewCombinedCacheManager(cms, nil), nil -} - -func (ci *importer) loadManifest(ctx context.Context, name string) (*v1.CacheChains, error) { - key := manifestKey(ci.config, name) - exists, err := blobExists(ctx, ci.containerClient, key) - if err != nil { - return nil, err - } - - bklog.G(ctx).Debugf("name %s cache with key %s exists = %v", name, key, exists) - - if !exists { - return v1.NewCacheChains(), nil - } - - blobClient, err := ci.containerClient.NewBlockBlobClient(key) - if err != nil { - return nil, errors.Wrap(err, "error creating container client") - } - - res, err := blobClient.Download(ctx, &azblob.BlobDownloadOptions{}) - if err != nil { - return nil, errors.WithStack(err) - } - - bytes, err := io.ReadAll(res.RawResponse.Body) - if err != nil { - return nil, errors.WithStack(err) - } - - bklog.G(ctx).Debugf("imported config: %s", string(bytes)) - - var config v1.CacheConfig - if err := json.Unmarshal(bytes, &config); err != nil { - return nil, errors.WithStack(err) - } - - allLayers := v1.DescriptorProvider{} - for _, l := range config.Layers { - dpp, err := ci.makeDescriptorProviderPair(l) - if err != nil { - return nil, err - } - allLayers[l.Blob] = *dpp - } - - progress.OneOff(ctx, fmt.Sprintf("found %d layers in cache", len(allLayers)))(nil) - - cc := v1.NewCacheChains() - if err := v1.ParseConfig(config, allLayers, cc); err != nil { - return nil, err - } - - return cc, nil -} - -func (ci *importer) makeDescriptorProviderPair(l v1.CacheLayer) (*v1.DescriptorProviderPair, error) { - if l.Annotations == nil { - return nil, errors.Errorf("cache layer with missing annotations") - } - annotations := map[string]string{} - if l.Annotations.DiffID == "" { - return nil, errors.Errorf("cache layer with missing diffid") - } - annotations[labels.LabelUncompressed] = l.Annotations.DiffID.String() - if !l.Annotations.CreatedAt.IsZero() { - txt, err := l.Annotations.CreatedAt.MarshalText() - if err != nil { - return nil, errors.WithStack(err) - } - annotations["buildkit/createdat"] = string(txt) - } - desc := ocispecs.Descriptor{ - MediaType: l.Annotations.MediaType, - Digest: l.Blob, - Size: l.Annotations.Size, - Annotations: annotations, - } - p := &ciProvider{ - desc: desc, - containerClient: ci.containerClient, - Provider: contentutil.FromFetcher(&fetcher{containerClient: ci.containerClient, config: ci.config}), - config: ci.config, - } - return &v1.DescriptorProviderPair{ - Descriptor: desc, - Provider: p, - InfoProvider: p, - }, nil -} - -type fetcher struct { - containerClient *azblob.ContainerClient - config *Config -} - -func (f *fetcher) Fetch(ctx context.Context, desc ocispecs.Descriptor) (io.ReadCloser, error) { - key := blobKey(f.config, desc.Digest.String()) - exists, err := blobExists(ctx, f.containerClient, key) - if err != nil { - return nil, err - } - - if !exists { - return nil, errors.Errorf("blob %s not found", desc.Digest) - } - - bklog.G(ctx).Debugf("reading layer from cache: %s", key) - - blobClient, err := f.containerClient.NewBlockBlobClient(key) - if err != nil { - return nil, errors.Wrap(err, "error creating block blob client") - } - - res, err := blobClient.Download(ctx, &azblob.BlobDownloadOptions{}) - if err != nil { - return nil, err - } - - return res.RawResponse.Body, nil -} - -type ciProvider struct { - content.Provider - desc ocispecs.Descriptor - containerClient *azblob.ContainerClient - config *Config - checkMutex sync.Mutex - checked bool -} - -func (p *ciProvider) Info(ctx context.Context, dgst digest.Digest) (content.Info, error) { - if dgst != p.desc.Digest { - return content.Info{}, errors.Errorf("content not found %s", dgst) - } - - if p.checked { - return content.Info{ - Digest: p.desc.Digest, - Size: p.desc.Size, - }, nil - } - - p.checkMutex.Lock() - defer p.checkMutex.Unlock() - - key := blobKey(p.config, dgst.String()) - exists, err := blobExists(ctx, p.containerClient, key) - if err != nil { - return content.Info{}, err - } - - if !exists { - return content.Info{}, errors.Errorf("blob %s not found", dgst) - } - - p.checked = true - return content.Info{ - Digest: p.desc.Digest, - Size: p.desc.Size, - }, nil -} diff --git a/cache/remotecache/azblob/utils.go b/cache/remotecache/azblob/utils.go deleted file mode 100644 index ff27a9e4676b..000000000000 --- a/cache/remotecache/azblob/utils.go +++ /dev/null @@ -1,196 +0,0 @@ -package azblob - -import ( - "context" - "net/url" - "os" - "path/filepath" - "strings" - "time" - - "github.com/Azure/azure-sdk-for-go/sdk/azidentity" - "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob" - "github.com/pkg/errors" -) - -const ( - attrSecretAccessKey = "secret_access_key" - attrAccountName = "account_name" - attrAccountURL = "account_url" - attrPrefix = "prefix" - attrManifestsPrefix = "manifests_prefix" - attrBlobsPrefix = "blobs_prefix" - attrName = "name" - attrContainer = "container" - IOConcurrency = 4 - IOChunkSize = 32 * 1024 * 1024 -) - -type Config struct { - AccountURL string - Container string - Prefix string - ManifestsPrefix string - BlobsPrefix string - Names []string - AccountName string - secretAccessKey string -} - -func getConfig(attrs map[string]string) (*Config, error) { - accountURLString, ok := attrs[attrAccountURL] - if !ok { - accountURLString, ok = os.LookupEnv("BUILDKIT_AZURE_STORAGE_ACCOUNT_URL") - if !ok { - return &Config{}, errors.New("either ${BUILDKIT_AZURE_STORAGE_ACCOUNT_URL} or account_url attribute is required for azblob cache") - } - } - - accountURL, err := url.Parse(accountURLString) - if err != nil { - return &Config{}, errors.Wrap(err, "azure storage account url provided is not a valid url") - } - - accountName, ok := attrs[attrAccountName] - if !ok { - accountName, ok = os.LookupEnv("BUILDKIT_AZURE_STORAGE_ACCOUNT_NAME") - if !ok { - accountName = strings.Split(accountURL.Hostname(), ".")[0] - } - } - if accountName == "" { - return &Config{}, errors.New("unable to retrieve account name from account url or ${BUILDKIT_AZURE_STORAGE_ACCOUNT_NAME} or account_name attribute for azblob cache") - } - - container, ok := attrs[attrContainer] - if !ok { - container, ok = os.LookupEnv("BUILDKIT_AZURE_STORAGE_CONTAINER") - if !ok { - container = "buildkit-cache" - } - } - - prefix, ok := attrs[attrPrefix] - if !ok { - prefix, _ = os.LookupEnv("BUILDKIT_AZURE_STORAGE_PREFIX") - } - - manifestsPrefix, ok := attrs[attrManifestsPrefix] - if !ok { - manifestsPrefix = "manifests" - } - - blobsPrefix, ok := attrs[attrBlobsPrefix] - if !ok { - blobsPrefix = "blobs" - } - - names := []string{"buildkit"} - name, ok := attrs[attrName] - if ok { - splittedNames := strings.Split(name, ";") - if len(splittedNames) > 0 { - names = splittedNames - } - } - - secretAccessKey := attrs[attrSecretAccessKey] - - config := Config{ - AccountURL: accountURLString, - AccountName: accountName, - Container: container, - Prefix: prefix, - Names: names, - ManifestsPrefix: manifestsPrefix, - BlobsPrefix: blobsPrefix, - secretAccessKey: secretAccessKey, - } - - return &config, nil -} - -func createContainerClient(ctx context.Context, config *Config) (*azblob.ContainerClient, error) { - var serviceClient *azblob.ServiceClient - if config.secretAccessKey != "" { - sharedKey, err := azblob.NewSharedKeyCredential(config.AccountName, config.secretAccessKey) - if err != nil { - return nil, errors.Wrap(err, "failed to create shared key") - } - serviceClient, err = azblob.NewServiceClientWithSharedKey(config.AccountURL, sharedKey, &azblob.ClientOptions{}) - if err != nil { - return nil, errors.Wrap(err, "failed to created service client from shared key") - } - } else { - cred, err := azidentity.NewDefaultAzureCredential(nil) - if err != nil { - return nil, errors.Wrap(err, "failed to create default azure credentials") - } - - serviceClient, err = azblob.NewServiceClient(config.AccountURL, cred, &azblob.ClientOptions{}) - if err != nil { - return nil, errors.Wrap(err, "failed to create service client") - } - } - - ctx, cnclFn := context.WithCancelCause(ctx) - ctx, _ = context.WithTimeoutCause(ctx, time.Second*60, errors.WithStack(context.DeadlineExceeded)) - defer cnclFn(errors.WithStack(context.Canceled)) - - containerClient, err := serviceClient.NewContainerClient(config.Container) - if err != nil { - return nil, errors.Wrap(err, "error creating container client") - } - - _, err = containerClient.GetProperties(ctx, &azblob.ContainerGetPropertiesOptions{}) - if err == nil { - return containerClient, nil - } - - var se *azblob.StorageError - if errors.As(err, &se) && se.ErrorCode == azblob.StorageErrorCodeContainerNotFound { - ctx, cnclFn := context.WithCancelCause(ctx) - ctx, _ = context.WithTimeoutCause(ctx, time.Minute*5, errors.WithStack(context.DeadlineExceeded)) - defer cnclFn(errors.WithStack(context.Canceled)) - _, err := containerClient.Create(ctx, &azblob.ContainerCreateOptions{}) - if err != nil { - return nil, errors.Wrapf(err, "failed to create cache container %s", config.Container) - } - - return containerClient, nil - } - - return nil, errors.Wrapf(err, "failed to get properties of cache container %s", config.Container) -} - -func manifestKey(config *Config, name string) string { - key := filepath.Join(config.Prefix, config.ManifestsPrefix, name) - return key -} - -func blobKey(config *Config, digest string) string { - key := filepath.Join(config.Prefix, config.BlobsPrefix, digest) - return key -} - -func blobExists(ctx context.Context, containerClient *azblob.ContainerClient, blobKey string) (bool, error) { - blobClient, err := containerClient.NewBlobClient(blobKey) - if err != nil { - return false, errors.Wrap(err, "error creating blob client") - } - - ctx, cnclFn := context.WithCancelCause(ctx) - ctx, _ = context.WithTimeoutCause(ctx, time.Second*60, errors.WithStack(context.DeadlineExceeded)) - defer cnclFn(errors.WithStack(context.Canceled)) - _, err = blobClient.GetProperties(ctx, &azblob.BlobGetPropertiesOptions{}) - if err == nil { - return true, nil - } - - var se *azblob.StorageError - if errors.As(err, &se) && se.ErrorCode == azblob.StorageErrorCodeBlobNotFound { - return false, nil - } - - return false, errors.Wrapf(err, "failed to check blob %s existence", blobKey) -} diff --git a/client/client_test.go b/client/client_test.go index fd183f2fb9c0..9d04158e0012 100644 --- a/client/client_test.go +++ b/client/client_test.go @@ -8,7 +8,6 @@ import ( "crypto/rand" "crypto/rsa" "crypto/x509" - "encoding/base64" "encoding/json" "encoding/pem" "fmt" @@ -121,7 +120,6 @@ var allTests = []func(t *testing.T, sb integration.Sandbox){ testBasicRegistryCacheImportExport, testBasicLocalCacheImportExport, testBasicS3CacheImportExport, - testBasicAzblobCacheImportExport, testCachedMounts, testCopyFromEmptyImage, testProxyEnv, @@ -5972,44 +5970,6 @@ func testBasicS3CacheImportExport(t *testing.T, sb integration.Sandbox) { testBasicCacheImportExport(t, sb, []CacheOptionsEntry{im}, []CacheOptionsEntry{ex}) } -func testBasicAzblobCacheImportExport(t *testing.T, sb integration.Sandbox) { - integration.SkipOnPlatform(t, "windows") - workers.CheckFeatureCompat(t, sb, - workers.FeatureCacheExport, - workers.FeatureCacheImport, - workers.FeatureCacheBackendAzblob, - ) - - opts := helpers.AzuriteOpts{ - AccountName: "azblobcacheaccount", - AccountKey: base64.StdEncoding.EncodeToString([]byte("azblobcacheaccountkey")), - } - - azAddr, cleanup, err := helpers.NewAzuriteServer(t, sb, opts) - require.NoError(t, err) - defer cleanup() - - im := CacheOptionsEntry{ - Type: "azblob", - Attrs: map[string]string{ - "account_url": azAddr, - "account_name": opts.AccountName, - "secret_access_key": opts.AccountKey, - "container": "cachecontainer", - }, - } - ex := CacheOptionsEntry{ - Type: "azblob", - Attrs: map[string]string{ - "account_url": azAddr, - "account_name": opts.AccountName, - "secret_access_key": opts.AccountKey, - "container": "cachecontainer", - }, - } - testBasicCacheImportExport(t, sb, []CacheOptionsEntry{im}, []CacheOptionsEntry{ex}) -} - func testBasicInlineCacheImportExport(t *testing.T, sb integration.Sandbox) { workers.CheckFeatureCompat(t, sb, workers.FeatureDirectPush, diff --git a/cmd/buildkitd/main.go b/cmd/buildkitd/main.go index cdfe9a948a0e..9ff7fab7b034 100644 --- a/cmd/buildkitd/main.go +++ b/cmd/buildkitd/main.go @@ -22,7 +22,6 @@ import ( "github.com/gofrs/flock" "github.com/hashicorp/go-multierror" "github.com/moby/buildkit/cache/remotecache" - "github.com/moby/buildkit/cache/remotecache/azblob" "github.com/moby/buildkit/cache/remotecache/gha" inlineremotecache "github.com/moby/buildkit/cache/remotecache/inline" localremotecache "github.com/moby/buildkit/cache/remotecache/local" @@ -816,14 +815,12 @@ func newController(ctx context.Context, c *cli.Context, cfg *config.Config) (*co "inline": inlineremotecache.ResolveCacheExporterFunc(), "gha": gha.ResolveCacheExporterFunc(), "s3": s3remotecache.ResolveCacheExporterFunc(), - "azblob": azblob.ResolveCacheExporterFunc(), } remoteCacheImporterFuncs := map[string]remotecache.ResolveCacheImporterFunc{ "registry": registryremotecache.ResolveCacheImporterFunc(sessionManager, w.ContentStore(), resolverFn), "local": localremotecache.ResolveCacheImporterFunc(sessionManager), "gha": gha.ResolveCacheImporterFunc(), "s3": s3remotecache.ResolveCacheImporterFunc(), - "azblob": azblob.ResolveCacheImporterFunc(), } return control.NewController(control.Opt{ SessionManager: sessionManager, diff --git a/go.mod b/go.mod index fde31734ec8f..87948f51490a 100644 --- a/go.mod +++ b/go.mod @@ -3,8 +3,6 @@ module github.com/moby/buildkit go 1.22.0 require ( - github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.6.0 - github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v0.4.1 github.com/Microsoft/go-winio v0.6.2 github.com/Microsoft/hcsshim v0.12.9 github.com/agext/levenshtein v1.2.3 @@ -112,9 +110,6 @@ require ( require ( github.com/AdaLogics/go-fuzz-headers v0.0.0-20240806141605-e8a1dd7889d6 // indirect github.com/AdamKorcz/go-118-fuzz-build v0.0.0-20231105174938-2b5cbb29f3e2 // indirect - github.com/Azure/azure-sdk-for-go/sdk/azcore v1.11.1 // indirect - github.com/Azure/azure-sdk-for-go/sdk/internal v1.8.0 // indirect - github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2 // indirect github.com/anchore/go-struct-converter v0.0.0-20221118182256-c68fdcfa2092 // indirect github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.3 // indirect github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.11 // indirect @@ -158,14 +153,12 @@ require ( github.com/hanwen/go-fuse/v2 v2.6.3 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-retryablehttp v0.7.7 // indirect - github.com/kylelemons/godebug v1.1.0 // indirect github.com/moby/sys/mount v0.3.4 // indirect github.com/moby/sys/sequential v0.6.0 // indirect github.com/moby/term v0.5.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/opencontainers/runtime-tools v0.9.1-0.20221107090550-2e043c6bd626 // indirect github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7 // indirect - github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_model v0.6.1 // indirect github.com/prometheus/common v0.55.0 // indirect diff --git a/go.sum b/go.sum index c13e22795c49..d05a21bbd770 100644 --- a/go.sum +++ b/go.sum @@ -3,18 +3,8 @@ github.com/AdaLogics/go-fuzz-headers v0.0.0-20240806141605-e8a1dd7889d6 h1:He8af github.com/AdaLogics/go-fuzz-headers v0.0.0-20240806141605-e8a1dd7889d6/go.mod h1:8o94RPi1/7XTJvwPpRSzSUedZrtlirdB3r9Z20bi2f8= github.com/AdamKorcz/go-118-fuzz-build v0.0.0-20231105174938-2b5cbb29f3e2 h1:dIScnXFlF784X79oi7MzVT6GWqr/W1uUt0pB5CsDs9M= github.com/AdamKorcz/go-118-fuzz-build v0.0.0-20231105174938-2b5cbb29f3e2/go.mod h1:gCLVsLfv1egrcZu+GoJATN5ts75F2s62ih/457eWzOw= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.11.1 h1:E+OJmp2tPvt1W+amx48v1eqbjDYsgN+RzP4q16yV5eM= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.11.1/go.mod h1:a6xsAQUZg+VsS3TJ05SRp524Hs4pZ/AeFSr5ENf0Yjo= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.6.0 h1:U2rTu3Ef+7w9FHKIAXM6ZyqF3UOWJZ12zIm8zECAFfg= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.6.0/go.mod h1:9kIvujWAA58nmPmWB1m23fyWic1kYZMxD9CxaWn4Qpg= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.8.0 h1:jBQA3cKT4L2rWMpgE7Yt3Hwh2aUj8KXjIGLxjHeYNNo= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.8.0/go.mod h1:4OG6tQ9EOP/MT0NMjDlRzWoVFxfu9rN9B2X+tlSVktg= -github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v0.4.1 h1:QSdcrd/UFJv6Bp/CfoVf2SrENpFn9P6Yh8yb+xNhYMM= -github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v0.4.1/go.mod h1:eZ4g6GUvXiGulfIbbhh1Xr4XwUYaYaWMqzGD/284wCA= github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c h1:udKWzYgxTojEKWjV8V+WSxDXJ4NFATAsZjh8iIbsQIg= github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= -github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2 h1:XHOnouVk1mxXfQidrMEnLlPk9UMeRtyBTnEFtxkV0kU= -github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= @@ -318,8 +308,6 @@ github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3v github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7 h1:Dx7Ovyv/SFnMFw3fD4oEoeorXc6saIiQ23LrGLth0Gw= github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= -github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ= -github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= diff --git a/solver/pb/caps.go b/solver/pb/caps.go index b7a802499814..3b15b07ef193 100644 --- a/solver/pb/caps.go +++ b/solver/pb/caps.go @@ -456,7 +456,7 @@ func init() { Caps.Init(apicaps.Cap{ ID: CapRemoteCacheAzBlob, - Enabled: true, + Enabled: false, Status: apicaps.CapStatusExperimental, }) diff --git a/util/testutil/helpers/azurite.go b/util/testutil/helpers/azurite.go deleted file mode 100644 index 26bc460e513b..000000000000 --- a/util/testutil/helpers/azurite.go +++ /dev/null @@ -1,96 +0,0 @@ -package helpers - -import ( - "context" - "fmt" - "net" - "net/http" - "os" - "os/exec" - "testing" - "time" - - "github.com/moby/buildkit/util/testutil/integration" - "github.com/pkg/errors" -) - -const ( - azuriteBin = "azurite-blob" -) - -type AzuriteOpts struct { - AccountName string - AccountKey string -} - -func NewAzuriteServer(t *testing.T, sb integration.Sandbox, opts AzuriteOpts) (address string, cl func() error, err error) { - t.Helper() - - if _, err := exec.LookPath(azuriteBin); err != nil { - return "", nil, errors.Wrapf(err, "failed to lookup %s binary", azuriteBin) - } - - deferF := &integration.MultiCloser{} - cl = deferF.F() - - defer func() { - if err != nil { - deferF.F()() - cl = nil - } - }() - - l, err := net.Listen("tcp", "localhost:0") - if err != nil { - return "", nil, err - } - - addr := l.Addr().String() - if err = l.Close(); err != nil { - return "", nil, err - } - host, port, err := net.SplitHostPort(addr) - if err != nil { - return "", nil, err - } - address = fmt.Sprintf("http://%s/%s", addr, opts.AccountName) - - // start server - cmd := exec.Command(azuriteBin, "--disableProductStyleUrl", "--blobHost", host, "--blobPort", port, "--location", t.TempDir()) - cmd.Env = append(os.Environ(), []string{ - "AZURITE_ACCOUNTS=" + opts.AccountName + ":" + opts.AccountKey, - }...) - azuriteStop, err := integration.StartCmd(cmd, sb.Logs()) - if err != nil { - return "", nil, err - } - if err = waitAzurite(sb.Context(), address, 15*time.Second); err != nil { - azuriteStop() - return "", nil, errors.Wrapf(err, "azurite did not start up: %s", integration.FormatLogs(sb.Logs())) - } - deferF.Append(azuriteStop) - - return -} - -func waitAzurite(ctx context.Context, address string, d time.Duration) error { - step := 1 * time.Second - i := 0 - for { - req, err := http.NewRequest("GET", fmt.Sprintf("%s?comp=list", address), nil) - if err != nil { - return errors.Wrapf(err, "failed to create request") - } - req = req.WithContext(ctx) - if resp, err := http.DefaultClient.Do(req); err == nil { - resp.Body.Close() - break - } - i++ - if time.Duration(i)*step > d { - return errors.Errorf("failed dialing: %s", address) - } - time.Sleep(step) - } - return nil -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/CHANGELOG.md b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/CHANGELOG.md deleted file mode 100644 index a6675492b1a6..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/CHANGELOG.md +++ /dev/null @@ -1,786 +0,0 @@ -# Release History - -## 1.11.1 (2024-04-02) - -### Bugs Fixed - -* Pollers that use the `Location` header won't consider `http.StatusRequestTimeout` a terminal failure. -* `runtime.Poller[T].Result` won't consider non-terminal error responses as terminal. - -## 1.11.0 (2024-04-01) - -### Features Added - -* Added `StatusCodes` to `arm/policy.RegistrationOptions` to allow supporting non-standard HTTP status codes during registration. -* Added field `InsecureAllowCredentialWithHTTP` to `azcore.ClientOptions` and dependent authentication pipeline policies. -* Added type `MultipartContent` to the `streaming` package to support multipart/form payloads with custom Content-Type and file name. - -### Bugs Fixed - -* `runtime.SetMultipartFormData` won't try to stringify `[]byte` values. -* Pollers that use the `Location` header won't consider `http.StatusTooManyRequests` a terminal failure. - -### Other Changes - -* Update dependencies. - -## 1.10.0 (2024-02-29) - -### Features Added - -* Added logging event `log.EventResponseError` that will contain the contents of `ResponseError.Error()` whenever an `azcore.ResponseError` is created. -* Added `runtime.NewResponseErrorWithErrorCode` for creating an `azcore.ResponseError` with a caller-supplied error code. -* Added type `MatchConditions` for use in conditional requests. - -### Bugs Fixed - -* Fixed a potential race condition between `NullValue` and `IsNullValue`. -* `runtime.EncodeQueryParams` will escape semicolons before calling `url.ParseQuery`. - -### Other Changes - -* Update dependencies. - -## 1.9.2 (2024-02-06) - -### Bugs Fixed - -* `runtime.MarshalAsByteArray` and `runtime.MarshalAsJSON` will preserve the preexisting value of the `Content-Type` header. - -### Other Changes - -* Update to latest version of `internal`. - -## 1.9.1 (2023-12-11) - -### Bugs Fixed - -* The `retry-after-ms` and `x-ms-retry-after-ms` headers weren't being checked during retries. - -### Other Changes - -* Update dependencies. - -## 1.9.0 (2023-11-06) - -### Breaking Changes -> These changes affect only code written against previous beta versions of `v1.7.0` and `v1.8.0` -* The function `NewTokenCredential` has been removed from the `fake` package. Use a literal `&fake.TokenCredential{}` instead. -* The field `TracingNamespace` in `runtime.PipelineOptions` has been replaced by `TracingOptions`. - -### Bugs Fixed - -* Fixed an issue that could cause some allowed HTTP header values to not show up in logs. -* Include error text instead of error type in traces when the transport returns an error. -* Fixed an issue that could cause an HTTP/2 request to hang when the TCP connection becomes unresponsive. -* Block key and SAS authentication for non TLS protected endpoints. -* Passing a `nil` credential value will no longer cause a panic. Instead, the authentication is skipped. -* Calling `Error` on a zero-value `azcore.ResponseError` will no longer panic. -* Fixed an issue in `fake.PagerResponder[T]` that would cause a trailing error to be omitted when iterating over pages. -* Context values created by `azcore` will no longer flow across disjoint HTTP requests. - -### Other Changes - -* Skip generating trace info for no-op tracers. -* The `clientName` paramater in client constructors has been renamed to `moduleName`. - -## 1.9.0-beta.1 (2023-10-05) - -### Other Changes - -* The beta features for tracing and fakes have been reinstated. - -## 1.8.0 (2023-10-05) - -### Features Added - -* This includes the following features from `v1.8.0-beta.N` releases. - * Claims and CAE for authentication. - * New `messaging` package. - * Various helpers in the `runtime` package. - * Deprecation of `runtime.With*` funcs and their replacements in the `policy` package. -* Added types `KeyCredential` and `SASCredential` to the `azcore` package. - * Includes their respective constructor functions. -* Added types `KeyCredentialPolicy` and `SASCredentialPolicy` to the `azcore/runtime` package. - * Includes their respective constructor functions and options types. - -### Breaking Changes -> These changes affect only code written against beta versions of `v1.8.0` -* The beta features for tracing and fakes have been omitted for this release. - -### Bugs Fixed - -* Fixed an issue that could cause some ARM RPs to not be automatically registered. -* Block bearer token authentication for non TLS protected endpoints. - -### Other Changes - -* Updated dependencies. - -## 1.8.0-beta.3 (2023-09-07) - -### Features Added - -* Added function `FetcherForNextLink` and `FetcherForNextLinkOptions` to the `runtime` package to centralize creation of `Pager[T].Fetcher` from a next link URL. - -### Bugs Fixed - -* Suppress creating spans for nested SDK API calls. The HTTP span will be a child of the outer API span. - -### Other Changes - -* The following functions in the `runtime` package are now exposed from the `policy` package, and the `runtime` versions have been deprecated. - * `WithCaptureResponse` - * `WithHTTPHeader` - * `WithRetryOptions` - -## 1.7.2 (2023-09-06) - -### Bugs Fixed - -* Fix default HTTP transport to work in WASM modules. - -## 1.8.0-beta.2 (2023-08-14) - -### Features Added - -* Added function `SanitizePagerPollerPath` to the `server` package to centralize sanitization and formalize the contract. -* Added `TokenRequestOptions.EnableCAE` to indicate whether to request a CAE token. - -### Breaking Changes - -> This change affects only code written against beta version `v1.8.0-beta.1`. -* `messaging.CloudEvent` deserializes JSON objects as `[]byte`, instead of `json.RawMessage`. See the documentation for CloudEvent.Data for more information. - -> This change affects only code written against beta versions `v1.7.0-beta.2` and `v1.8.0-beta.1`. -* Removed parameter from method `Span.End()` and its type `tracing.SpanEndOptions`. This API GA'ed in `v1.2.0` so we cannot change it. - -### Bugs Fixed - -* Propagate any query parameters when constructing a fake poller and/or injecting next links. - -## 1.7.1 (2023-08-14) - -## Bugs Fixed - -* Enable TLS renegotiation in the default transport policy. - -## 1.8.0-beta.1 (2023-07-12) - -### Features Added - -- `messaging/CloudEvent` allows you to serialize/deserialize CloudEvents, as described in the CloudEvents 1.0 specification: [link](https://github.com/cloudevents/spec) - -### Other Changes - -* The beta features for CAE, tracing, and fakes have been reinstated. - -## 1.7.0 (2023-07-12) - -### Features Added -* Added method `WithClientName()` to type `azcore.Client` to support shallow cloning of a client with a new name used for tracing. - -### Breaking Changes -> These changes affect only code written against beta versions v1.7.0-beta.1 or v1.7.0-beta.2 -* The beta features for CAE, tracing, and fakes have been omitted for this release. - -## 1.7.0-beta.2 (2023-06-06) - -### Breaking Changes -> These changes affect only code written against beta version v1.7.0-beta.1 -* Method `SpanFromContext()` on type `tracing.Tracer` had the `bool` return value removed. - * This includes the field `SpanFromContext` in supporting type `tracing.TracerOptions`. -* Method `AddError()` has been removed from type `tracing.Span`. -* Method `Span.End()` now requires an argument of type `*tracing.SpanEndOptions`. - -## 1.6.1 (2023-06-06) - -### Bugs Fixed -* Fixed an issue in `azcore.NewClient()` and `arm.NewClient()` that could cause an incorrect module name to be used in telemetry. - -### Other Changes -* This version contains all bug fixes from `v1.7.0-beta.1` - -## 1.7.0-beta.1 (2023-05-24) - -### Features Added -* Restored CAE support for ARM clients. -* Added supporting features to enable distributed tracing. - * Added func `runtime.StartSpan()` for use by SDKs to start spans. - * Added method `WithContext()` to `runtime.Request` to support shallow cloning with a new context. - * Added field `TracingNamespace` to `runtime.PipelineOptions`. - * Added field `Tracer` to `runtime.NewPollerOptions` and `runtime.NewPollerFromResumeTokenOptions` types. - * Added field `SpanFromContext` to `tracing.TracerOptions`. - * Added methods `Enabled()`, `SetAttributes()`, and `SpanFromContext()` to `tracing.Tracer`. - * Added supporting pipeline policies to include HTTP spans when creating clients. -* Added package `fake` to support generated fakes packages in SDKs. - * The package contains public surface area exposed by fake servers and supporting APIs intended only for use by the fake server implementations. - * Added an internal fake poller implementation. - -### Bugs Fixed -* Retry policy always clones the underlying `*http.Request` before invoking the next policy. -* Added some non-standard error codes to the list of error codes for unregistered resource providers. - -## 1.6.0 (2023-05-04) - -### Features Added -* Added support for ARM cross-tenant authentication. Set the `AuxiliaryTenants` field of `arm.ClientOptions` to enable. -* Added `TenantID` field to `policy.TokenRequestOptions`. - -## 1.5.0 (2023-04-06) - -### Features Added -* Added `ShouldRetry` to `policy.RetryOptions` for finer-grained control over when to retry. - -### Breaking Changes -> These changes affect only code written against a beta version such as v1.5.0-beta.1 -> These features will return in v1.6.0-beta.1. -* Removed `TokenRequestOptions.Claims` and `.TenantID` -* Removed ARM client support for CAE and cross-tenant auth. - -### Bugs Fixed -* Added non-conformant LRO terminal states `Cancelled` and `Completed`. - -### Other Changes -* Updated to latest `internal` module. - -## 1.5.0-beta.1 (2023-03-02) - -### Features Added -* This release includes the features added in v1.4.0-beta.1 - -## 1.4.0 (2023-03-02) -> This release doesn't include features added in v1.4.0-beta.1. They will return in v1.5.0-beta.1. - -### Features Added -* Add `Clone()` method for `arm/policy.ClientOptions`. - -### Bugs Fixed -* ARM's RP registration policy will no longer swallow unrecognized errors. -* Fixed an issue in `runtime.NewPollerFromResumeToken()` when resuming a `Poller` with a custom `PollingHandler`. -* Fixed wrong policy copy in `arm/runtime.NewPipeline()`. - -## 1.4.0-beta.1 (2023-02-02) - -### Features Added -* Added support for ARM cross-tenant authentication. Set the `AuxiliaryTenants` field of `arm.ClientOptions` to enable. -* Added `Claims` and `TenantID` fields to `policy.TokenRequestOptions`. -* ARM bearer token policy handles CAE challenges. - -## 1.3.1 (2023-02-02) - -### Other Changes -* Update dependencies to latest versions. - -## 1.3.0 (2023-01-06) - -### Features Added -* Added `BearerTokenOptions.AuthorizationHandler` to enable extending `runtime.BearerTokenPolicy` - with custom authorization logic -* Added `Client` types and matching constructors to the `azcore` and `arm` packages. These represent a basic client for HTTP and ARM respectively. - -### Other Changes -* Updated `internal` module to latest version. -* `policy/Request.SetBody()` allows replacing a request's body with an empty one - -## 1.2.0 (2022-11-04) - -### Features Added -* Added `ClientOptions.APIVersion` field, which overrides the default version a client - requests of the service, if the client supports this (all ARM clients do). -* Added package `tracing` that contains the building blocks for distributed tracing. -* Added field `TracingProvider` to type `policy.ClientOptions` that will be used to set the per-client tracing implementation. - -### Bugs Fixed -* Fixed an issue in `runtime.SetMultipartFormData` to properly handle slices of `io.ReadSeekCloser`. -* Fixed the MaxRetryDelay default to be 60s. -* Failure to poll the state of an LRO will now return an `*azcore.ResponseError` for poller types that require this behavior. -* Fixed a bug in `runtime.NewPipeline` that would cause pipeline-specified allowed headers and query parameters to be lost. - -### Other Changes -* Retain contents of read-only fields when sending requests. - -## 1.1.4 (2022-10-06) - -### Bugs Fixed -* Don't retry a request if the `Retry-After` delay is greater than the configured `RetryOptions.MaxRetryDelay`. -* `runtime.JoinPaths`: do not unconditionally add a forward slash before the query string - -### Other Changes -* Removed logging URL from retry policy as it's redundant. -* Retry policy logs when it exits due to a non-retriable status code. - -## 1.1.3 (2022-09-01) - -### Bugs Fixed -* Adjusted the initial retry delay to 800ms per the Azure SDK guidelines. - -## 1.1.2 (2022-08-09) - -### Other Changes -* Fixed various doc bugs. - -## 1.1.1 (2022-06-30) - -### Bugs Fixed -* Avoid polling when a RELO LRO synchronously terminates. - -## 1.1.0 (2022-06-03) - -### Other Changes -* The one-second floor for `Frequency` when calling `PollUntilDone()` has been removed when running tests. - -## 1.0.0 (2022-05-12) - -### Features Added -* Added interface `runtime.PollingHandler` to support custom poller implementations. - * Added field `PollingHandler` of this type to `runtime.NewPollerOptions[T]` and `runtime.NewPollerFromResumeTokenOptions[T]`. - -### Breaking Changes -* Renamed `cloud.Configuration.LoginEndpoint` to `.ActiveDirectoryAuthorityHost` -* Renamed `cloud.AzurePublicCloud` to `cloud.AzurePublic` -* Removed `AuxiliaryTenants` field from `arm/ClientOptions` and `arm/policy/BearerTokenOptions` -* Removed `TokenRequestOptions.TenantID` -* `Poller[T].PollUntilDone()` now takes an `options *PollUntilDoneOptions` param instead of `freq time.Duration` -* Removed `arm/runtime.Poller[T]`, `arm/runtime.NewPoller[T]()` and `arm/runtime.NewPollerFromResumeToken[T]()` -* Removed `arm/runtime.FinalStateVia` and related `const` values -* Renamed `runtime.PageProcessor` to `runtime.PagingHandler` -* The `arm/runtime.ProviderRepsonse` and `arm/runtime.Provider` types are no longer exported. -* Renamed `NewRequestIdPolicy()` to `NewRequestIDPolicy()` -* `TokenCredential.GetToken` now returns `AccessToken` by value. - -### Bugs Fixed -* When per-try timeouts are enabled, only cancel the context after the body has been read and closed. -* The `Operation-Location` poller now properly handles `final-state-via` values. -* Improvements in `runtime.Poller[T]` - * `Poll()` shouldn't cache errors, allowing for additional retries when in a non-terminal state. - * `Result()` will cache the terminal result or error but not transient errors, allowing for additional retries. - -### Other Changes -* Updated to latest `internal` module and absorbed breaking changes. - * Use `temporal.Resource` and deleted copy. -* The internal poller implementation has been refactored. - * The implementation in `internal/pollers/poller.go` has been merged into `runtime/poller.go` with some slight modification. - * The internal poller types had their methods updated to conform to the `runtime.PollingHandler` interface. - * The creation of resume tokens has been refactored so that implementers of `runtime.PollingHandler` don't need to know about it. -* `NewPipeline()` places policies from `ClientOptions` after policies from `PipelineOptions` -* Default User-Agent headers no longer include `azcore` version information - -## 0.23.1 (2022-04-14) - -### Bugs Fixed -* Include XML header when marshalling XML content. -* Handle XML namespaces when searching for error code. -* Handle `odata.error` when searching for error code. - -## 0.23.0 (2022-04-04) - -### Features Added -* Added `runtime.Pager[T any]` and `runtime.Poller[T any]` supporting types for central, generic, implementations. -* Added `cloud` package with a new API for cloud configuration -* Added `FinalStateVia` field to `runtime.NewPollerOptions[T any]` type. - -### Breaking Changes -* Removed the `Poller` type-alias to the internal poller implementation. -* Added `Ptr[T any]` and `SliceOfPtrs[T any]` in the `to` package and removed all non-generic implementations. -* `NullValue` and `IsNullValue` now take a generic type parameter instead of an interface func parameter. -* Replaced `arm.Endpoint` with `cloud` API - * Removed the `endpoint` parameter from `NewRPRegistrationPolicy()` - * `arm/runtime.NewPipeline()` and `.NewRPRegistrationPolicy()` now return an `error` -* Refactored `NewPoller` and `NewPollerFromResumeToken` funcs in `arm/runtime` and `runtime` packages. - * Removed the `pollerID` parameter as it's no longer required. - * Created optional parameter structs and moved optional parameters into them. -* Changed `FinalStateVia` field to a `const` type. - -### Other Changes -* Converted expiring resource and dependent types to use generics. - -## 0.22.0 (2022-03-03) - -### Features Added -* Added header `WWW-Authenticate` to the default allow-list of headers for logging. -* Added a pipeline policy that enables the retrieval of HTTP responses from API calls. - * Added `runtime.WithCaptureResponse` to enable the policy at the API level (off by default). - -### Breaking Changes -* Moved `WithHTTPHeader` and `WithRetryOptions` from the `policy` package to the `runtime` package. - -## 0.21.1 (2022-02-04) - -### Bugs Fixed -* Restore response body after reading in `Poller.FinalResponse()`. (#16911) -* Fixed bug in `NullValue` that could lead to incorrect comparisons for empty maps/slices (#16969) - -### Other Changes -* `BearerTokenPolicy` is more resilient to transient authentication failures. (#16789) - -## 0.21.0 (2022-01-11) - -### Features Added -* Added `AllowedHeaders` and `AllowedQueryParams` to `policy.LogOptions` to control which headers and query parameters are written to the logger. -* Added `azcore.ResponseError` type which is returned from APIs when a non-success HTTP status code is received. - -### Breaking Changes -* Moved `[]policy.Policy` parameters of `arm/runtime.NewPipeline` and `runtime.NewPipeline` into a new struct, `runtime.PipelineOptions` -* Renamed `arm/ClientOptions.Host` to `.Endpoint` -* Moved `Request.SkipBodyDownload` method to function `runtime.SkipBodyDownload` -* Removed `azcore.HTTPResponse` interface type -* `arm.NewPoller()` and `runtime.NewPoller()` no longer require an `eu` parameter -* `runtime.NewResponseError()` no longer requires an `error` parameter - -## 0.20.0 (2021-10-22) - -### Breaking Changes -* Removed `arm.Connection` -* Removed `azcore.Credential` and `.NewAnonymousCredential()` - * `NewRPRegistrationPolicy` now requires an `azcore.TokenCredential` -* `runtime.NewPipeline` has a new signature that simplifies implementing custom authentication -* `arm/runtime.RegistrationOptions` embeds `policy.ClientOptions` -* Contents in the `log` package have been slightly renamed. -* Removed `AuthenticationOptions` in favor of `policy.BearerTokenOptions` -* Changed parameters for `NewBearerTokenPolicy()` -* Moved policy config options out of `arm/runtime` and into `arm/policy` - -### Features Added -* Updating Documentation -* Added string typdef `arm.Endpoint` to provide a hint toward expected ARM client endpoints -* `azcore.ClientOptions` contains common pipeline configuration settings -* Added support for multi-tenant authorization in `arm/runtime` -* Require one second minimum when calling `PollUntilDone()` - -### Bug Fixes -* Fixed a potential panic when creating the default Transporter. -* Close LRO initial response body when creating a poller. -* Fixed a panic when recursively cloning structs that contain time.Time. - -## 0.19.0 (2021-08-25) - -### Breaking Changes -* Split content out of `azcore` into various packages. The intent is to separate content based on its usage (common, uncommon, SDK authors). - * `azcore` has all core functionality. - * `log` contains facilities for configuring in-box logging. - * `policy` is used for configuring pipeline options and creating custom pipeline policies. - * `runtime` contains various helpers used by SDK authors and generated content. - * `streaming` has helpers for streaming IO operations. -* `NewTelemetryPolicy()` now requires module and version parameters and the `Value` option has been removed. - * As a result, the `Request.Telemetry()` method has been removed. -* The telemetry policy now includes the SDK prefix `azsdk-go-` so callers no longer need to provide it. -* The `*http.Request` in `runtime.Request` is no longer anonymously embedded. Use the `Raw()` method to access it. -* The `UserAgent` and `Version` constants have been made internal, `Module` and `Version` respectively. - -### Bug Fixes -* Fixed an issue in the retry policy where the request body could be overwritten after a rewind. - -### Other Changes -* Moved modules `armcore` and `to` content into `arm` and `to` packages respectively. - * The `Pipeline()` method on `armcore.Connection` has been replaced by `NewPipeline()` in `arm.Connection`. It takes module and version parameters used by the telemetry policy. -* Poller logic has been consolidated across ARM and core implementations. - * This required some changes to the internal interfaces for core pollers. -* The core poller types have been improved, including more logging and test coverage. - -## 0.18.1 (2021-08-20) - -### Features Added -* Adds an `ETag` type for comparing etags and handling etags on requests -* Simplifies the `requestBodyProgess` and `responseBodyProgress` into a single `progress` object - -### Bugs Fixed -* `JoinPaths` will preserve query parameters encoded in the `root` url. - -### Other Changes -* Bumps dependency on `internal` module to the latest version (v0.7.0) - -## 0.18.0 (2021-07-29) -### Features Added -* Replaces methods from Logger type with two package methods for interacting with the logging functionality. -* `azcore.SetClassifications` replaces `azcore.Logger().SetClassifications` -* `azcore.SetListener` replaces `azcore.Logger().SetListener` - -### Breaking Changes -* Removes `Logger` type from `azcore` - - -## 0.17.0 (2021-07-27) -### Features Added -* Adding TenantID to TokenRequestOptions (https://github.com/Azure/azure-sdk-for-go/pull/14879) -* Adding AuxiliaryTenants to AuthenticationOptions (https://github.com/Azure/azure-sdk-for-go/pull/15123) - -### Breaking Changes -* Rename `AnonymousCredential` to `NewAnonymousCredential` (https://github.com/Azure/azure-sdk-for-go/pull/15104) -* rename `AuthenticationPolicyOptions` to `AuthenticationOptions` (https://github.com/Azure/azure-sdk-for-go/pull/15103) -* Make Header constants private (https://github.com/Azure/azure-sdk-for-go/pull/15038) - - -## 0.16.2 (2021-05-26) -### Features Added -* Improved support for byte arrays [#14715](https://github.com/Azure/azure-sdk-for-go/pull/14715) - - -## 0.16.1 (2021-05-19) -### Features Added -* Add license.txt to azcore module [#14682](https://github.com/Azure/azure-sdk-for-go/pull/14682) - - -## 0.16.0 (2021-05-07) -### Features Added -* Remove extra `*` in UnmarshalAsByteArray() [#14642](https://github.com/Azure/azure-sdk-for-go/pull/14642) - - -## 0.15.1 (2021-05-06) -### Features Added -* Cache the original request body on Request [#14634](https://github.com/Azure/azure-sdk-for-go/pull/14634) - - -## 0.15.0 (2021-05-05) -### Features Added -* Add support for null map and slice -* Export `Response.Payload` method - -### Breaking Changes -* remove `Response.UnmarshalError` as it's no longer required - - -## 0.14.5 (2021-04-23) -### Features Added -* Add `UnmarshalError()` on `azcore.Response` - - -## 0.14.4 (2021-04-22) -### Features Added -* Support for basic LRO polling -* Added type `LROPoller` and supporting types for basic polling on long running operations. -* rename poller param and added doc comment - -### Bugs Fixed -* Fixed content type detection bug in logging. - - -## 0.14.3 (2021-03-29) -### Features Added -* Add support for multi-part form data -* Added method `WriteMultipartFormData()` to Request. - - -## 0.14.2 (2021-03-17) -### Features Added -* Add support for encoding JSON null values -* Adds `NullValue()` and `IsNullValue()` functions for setting and detecting sentinel values used for encoding a JSON null. -* Documentation fixes - -### Bugs Fixed -* Fixed improper error wrapping - - -## 0.14.1 (2021-02-08) -### Features Added -* Add `Pager` and `Poller` interfaces to azcore - - -## 0.14.0 (2021-01-12) -### Features Added -* Accept zero-value options for default values -* Specify zero-value options structs to accept default values. -* Remove `DefaultXxxOptions()` methods. -* Do not silently change TryTimeout on negative values -* make per-try timeout opt-in - - -## 0.13.4 (2020-11-20) -### Features Added -* Include telemetry string in User Agent - - -## 0.13.3 (2020-11-20) -### Features Added -* Updating response body handling on `azcore.Response` - - -## 0.13.2 (2020-11-13) -### Features Added -* Remove implementation of stateless policies as first-class functions. - - -## 0.13.1 (2020-11-05) -### Features Added -* Add `Telemetry()` method to `azcore.Request()` - - -## 0.13.0 (2020-10-14) -### Features Added -* Rename `log` to `logger` to avoid name collision with the log package. -* Documentation improvements -* Simplified `DefaultHTTPClientTransport()` implementation - - -## 0.12.1 (2020-10-13) -### Features Added -* Update `internal` module dependence to `v0.5.0` - - -## 0.12.0 (2020-10-08) -### Features Added -* Removed storage specific content -* Removed internal content to prevent API clutter -* Refactored various policy options to conform with our options pattern - - -## 0.11.0 (2020-09-22) -### Features Added - -* Removed `LogError` and `LogSlowResponse`. -* Renamed `options` in `RequestLogOptions`. -* Updated `NewRequestLogPolicy()` to follow standard pattern for options. -* Refactored `requestLogPolicy.Do()` per above changes. -* Cleaned up/added logging in retry policy. -* Export `NewResponseError()` -* Fix `RequestLogOptions` comment - - -## 0.10.1 (2020-09-17) -### Features Added -* Add default console logger -* Default console logger writes to stderr. To enable it, set env var `AZURE_SDK_GO_LOGGING` to the value 'all'. -* Added `Logger.Writef()` to reduce the need for `ShouldLog()` checks. -* Add `LogLongRunningOperation` - - -## 0.10.0 (2020-09-10) -### Features Added -* The `request` and `transport` interfaces have been refactored to align with the patterns in the standard library. -* `NewRequest()` now uses `http.NewRequestWithContext()` and performs additional validation, it also requires a context parameter. -* The `Policy` and `Transport` interfaces have had their context parameter removed as the context is associated with the underlying `http.Request`. -* `Pipeline.Do()` will validate the HTTP request before sending it through the pipeline, avoiding retries on a malformed request. -* The `Retrier` interface has been replaced with the `NonRetriableError` interface, and the retry policy updated to test for this. -* `Request.SetBody()` now requires a content type parameter for setting the request's MIME type. -* moved path concatenation into `JoinPaths()` func - - -## 0.9.6 (2020-08-18) -### Features Added -* Improvements to body download policy -* Always download the response body for error responses, i.e. HTTP status codes >= 400. -* Simplify variable declarations - - -## 0.9.5 (2020-08-11) -### Features Added -* Set the Content-Length header in `Request.SetBody` - - -## 0.9.4 (2020-08-03) -### Features Added -* Fix cancellation of per try timeout -* Per try timeout is used to ensure that an HTTP operation doesn't take too long, e.g. that a GET on some URL doesn't take an inordinant amount of time. -* Once the HTTP request returns, the per try timeout should be cancelled, not when the response has been read to completion. -* Do not drain response body if there are no more retries -* Do not retry non-idempotent operations when body download fails - - -## 0.9.3 (2020-07-28) -### Features Added -* Add support for custom HTTP request headers -* Inserts an internal policy into the pipeline that can extract HTTP header values from the caller's context, adding them to the request. -* Use `azcore.WithHTTPHeader` to add HTTP headers to a context. -* Remove method specific to Go 1.14 - - -## 0.9.2 (2020-07-28) -### Features Added -* Omit read-only content from request payloads -* If any field in a payload's object graph contains `azure:"ro"`, make a clone of the object graph, omitting all fields with this annotation. -* Verify no fields were dropped -* Handle embedded struct types -* Added test for cloning by value -* Add messages to failures - - -## 0.9.1 (2020-07-22) -### Features Added -* Updated dependency on internal module to fix race condition. - - -## 0.9.0 (2020-07-09) -### Features Added -* Add `HTTPResponse` interface to be used by callers to access the raw HTTP response from an error in the event of an API call failure. -* Updated `sdk/internal` dependency to latest version. -* Rename package alias - - -## 0.8.2 (2020-06-29) -### Features Added -* Added missing documentation comments - -### Bugs Fixed -* Fixed a bug in body download policy. - - -## 0.8.1 (2020-06-26) -### Features Added -* Miscellaneous clean-up reported by linters - - -## 0.8.0 (2020-06-01) -### Features Added -* Differentiate between standard and URL encoding. - - -## 0.7.1 (2020-05-27) -### Features Added -* Add support for for base64 encoding and decoding of payloads. - - -## 0.7.0 (2020-05-12) -### Features Added -* Change `RetryAfter()` to a function. - - -## 0.6.0 (2020-04-29) -### Features Added -* Updating `RetryAfter` to only return the detaion in the RetryAfter header - - -## 0.5.0 (2020-03-23) -### Features Added -* Export `TransportFunc` - -### Breaking Changes -* Removed `IterationDone` - - -## 0.4.1 (2020-02-25) -### Features Added -* Ensure per-try timeout is properly cancelled -* Explicitly call cancel the per-try timeout when the response body has been read/closed by the body download policy. -* When the response body is returned to the caller for reading/closing, wrap it in a `responseBodyReader` that will cancel the timeout when the body is closed. -* `Logger.Should()` will return false if no listener is set. - - -## 0.4.0 (2020-02-18) -### Features Added -* Enable custom `RetryOptions` to be specified per API call -* Added `WithRetryOptions()` that adds a custom `RetryOptions` to the provided context, allowing custom settings per API call. -* Remove 429 from the list of default HTTP status codes for retry. -* Change StatusCodesForRetry to a slice so consumers can append to it. -* Added support for retry-after in HTTP-date format. -* Cleaned up some comments specific to storage. -* Remove `Request.SetQueryParam()` -* Renamed `MaxTries` to `MaxRetries` - -## 0.3.0 (2020-01-16) -### Features Added -* Added `DefaultRetryOptions` to create initialized default options. - -### Breaking Changes -* Removed `Response.CheckStatusCode()` - - -## 0.2.0 (2020-01-15) -### Features Added -* Add support for marshalling and unmarshalling JSON -* Removed `Response.Payload` field -* Exit early when unmarsahlling if there is no payload - - -## 0.1.0 (2020-01-10) -### Features Added -* Initial release diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/LICENSE.txt b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/LICENSE.txt deleted file mode 100644 index 48ea6616b5b8..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/LICENSE.txt +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) Microsoft Corporation. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/README.md b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/README.md deleted file mode 100644 index 35a74e18d09a..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/README.md +++ /dev/null @@ -1,39 +0,0 @@ -# Azure Core Client Module for Go - -[![PkgGoDev](https://pkg.go.dev/badge/github.com/Azure/azure-sdk-for-go/sdk/azcore)](https://pkg.go.dev/github.com/Azure/azure-sdk-for-go/sdk/azcore) -[![Build Status](https://dev.azure.com/azure-sdk/public/_apis/build/status/go/go%20-%20azcore%20-%20ci?branchName=main)](https://dev.azure.com/azure-sdk/public/_build/latest?definitionId=1843&branchName=main) -[![Code Coverage](https://img.shields.io/azure-devops/coverage/azure-sdk/public/1843/main)](https://img.shields.io/azure-devops/coverage/azure-sdk/public/1843/main) - -The `azcore` module provides a set of common interfaces and types for Go SDK client modules. -These modules follow the [Azure SDK Design Guidelines for Go](https://azure.github.io/azure-sdk/golang_introduction.html). - -## Getting started - -This project uses [Go modules](https://github.com/golang/go/wiki/Modules) for versioning and dependency management. - -Typically, you will not need to explicitly install `azcore` as it will be installed as a client module dependency. -To add the latest version to your `go.mod` file, execute the following command. - -```bash -go get github.com/Azure/azure-sdk-for-go/sdk/azcore -``` - -General documentation and examples can be found on [pkg.go.dev](https://pkg.go.dev/github.com/Azure/azure-sdk-for-go/sdk/azcore). - -## Contributing -This project welcomes contributions and suggestions. Most contributions require -you to agree to a Contributor License Agreement (CLA) declaring that you have -the right to, and actually do, grant us the rights to use your contribution. -For details, visit [https://cla.microsoft.com](https://cla.microsoft.com). - -When you submit a pull request, a CLA-bot will automatically determine whether -you need to provide a CLA and decorate the PR appropriately (e.g., label, -comment). Simply follow the instructions provided by the bot. You will only -need to do this once across all repos using our CLA. - -This project has adopted the -[Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). -For more information, see the -[Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) -or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any -additional questions or comments. diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/internal/resource/resource_identifier.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/internal/resource/resource_identifier.go deleted file mode 100644 index 187fe82b97c4..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/internal/resource/resource_identifier.go +++ /dev/null @@ -1,224 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package resource - -import ( - "fmt" - "strings" -) - -const ( - providersKey = "providers" - subscriptionsKey = "subscriptions" - resourceGroupsLowerKey = "resourcegroups" - locationsKey = "locations" - builtInResourceNamespace = "Microsoft.Resources" -) - -// RootResourceID defines the tenant as the root parent of all other ResourceID. -var RootResourceID = &ResourceID{ - Parent: nil, - ResourceType: TenantResourceType, - Name: "", -} - -// ResourceID represents a resource ID such as `/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myRg`. -// Don't create this type directly, use ParseResourceID instead. -type ResourceID struct { - // Parent is the parent ResourceID of this instance. - // Can be nil if there is no parent. - Parent *ResourceID - - // SubscriptionID is the subscription ID in this resource ID. - // The value can be empty if the resource ID does not contain a subscription ID. - SubscriptionID string - - // ResourceGroupName is the resource group name in this resource ID. - // The value can be empty if the resource ID does not contain a resource group name. - ResourceGroupName string - - // Provider represents the provider name in this resource ID. - // This is only valid when the resource ID represents a resource provider. - // Example: `/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Insights` - Provider string - - // Location is the location in this resource ID. - // The value can be empty if the resource ID does not contain a location name. - Location string - - // ResourceType represents the type of this resource ID. - ResourceType ResourceType - - // Name is the resource name of this resource ID. - Name string - - isChild bool - stringValue string -} - -// ParseResourceID parses a string to an instance of ResourceID -func ParseResourceID(id string) (*ResourceID, error) { - if len(id) == 0 { - return nil, fmt.Errorf("invalid resource ID: id cannot be empty") - } - - if !strings.HasPrefix(id, "/") { - return nil, fmt.Errorf("invalid resource ID: resource id '%s' must start with '/'", id) - } - - parts := splitStringAndOmitEmpty(id, "/") - - if len(parts) < 2 { - return nil, fmt.Errorf("invalid resource ID: %s", id) - } - - if !strings.EqualFold(parts[0], subscriptionsKey) && !strings.EqualFold(parts[0], providersKey) { - return nil, fmt.Errorf("invalid resource ID: %s", id) - } - - return appendNext(RootResourceID, parts, id) -} - -// String returns the string of the ResourceID -func (id *ResourceID) String() string { - if len(id.stringValue) > 0 { - return id.stringValue - } - - if id.Parent == nil { - return "" - } - - builder := strings.Builder{} - builder.WriteString(id.Parent.String()) - - if id.isChild { - builder.WriteString(fmt.Sprintf("/%s", id.ResourceType.lastType())) - if len(id.Name) > 0 { - builder.WriteString(fmt.Sprintf("/%s", id.Name)) - } - } else { - builder.WriteString(fmt.Sprintf("/providers/%s/%s/%s", id.ResourceType.Namespace, id.ResourceType.Type, id.Name)) - } - - id.stringValue = builder.String() - - return id.stringValue -} - -func newResourceID(parent *ResourceID, resourceTypeName string, resourceName string) *ResourceID { - id := &ResourceID{} - id.init(parent, chooseResourceType(resourceTypeName, parent), resourceName, true) - return id -} - -func newResourceIDWithResourceType(parent *ResourceID, resourceType ResourceType, resourceName string) *ResourceID { - id := &ResourceID{} - id.init(parent, resourceType, resourceName, true) - return id -} - -func newResourceIDWithProvider(parent *ResourceID, providerNamespace, resourceTypeName, resourceName string) *ResourceID { - id := &ResourceID{} - id.init(parent, NewResourceType(providerNamespace, resourceTypeName), resourceName, false) - return id -} - -func chooseResourceType(resourceTypeName string, parent *ResourceID) ResourceType { - if strings.EqualFold(resourceTypeName, resourceGroupsLowerKey) { - return ResourceGroupResourceType - } else if strings.EqualFold(resourceTypeName, subscriptionsKey) && parent != nil && parent.ResourceType.String() == TenantResourceType.String() { - return SubscriptionResourceType - } - - return parent.ResourceType.AppendChild(resourceTypeName) -} - -func (id *ResourceID) init(parent *ResourceID, resourceType ResourceType, name string, isChild bool) { - if parent != nil { - id.Provider = parent.Provider - id.SubscriptionID = parent.SubscriptionID - id.ResourceGroupName = parent.ResourceGroupName - id.Location = parent.Location - } - - if resourceType.String() == SubscriptionResourceType.String() { - id.SubscriptionID = name - } - - if resourceType.lastType() == locationsKey { - id.Location = name - } - - if resourceType.String() == ResourceGroupResourceType.String() { - id.ResourceGroupName = name - } - - if resourceType.String() == ProviderResourceType.String() { - id.Provider = name - } - - if parent == nil { - id.Parent = RootResourceID - } else { - id.Parent = parent - } - id.isChild = isChild - id.ResourceType = resourceType - id.Name = name -} - -func appendNext(parent *ResourceID, parts []string, id string) (*ResourceID, error) { - if len(parts) == 0 { - return parent, nil - } - - if len(parts) == 1 { - // subscriptions and resourceGroups are not valid ids without their names - if strings.EqualFold(parts[0], subscriptionsKey) || strings.EqualFold(parts[0], resourceGroupsLowerKey) { - return nil, fmt.Errorf("invalid resource ID: %s", id) - } - - // resourceGroup must contain either child or provider resource type - if parent.ResourceType.String() == ResourceGroupResourceType.String() { - return nil, fmt.Errorf("invalid resource ID: %s", id) - } - - return newResourceID(parent, parts[0], ""), nil - } - - if strings.EqualFold(parts[0], providersKey) && (len(parts) == 2 || strings.EqualFold(parts[2], providersKey)) { - //provider resource can only be on a tenant or a subscription parent - if parent.ResourceType.String() != SubscriptionResourceType.String() && parent.ResourceType.String() != TenantResourceType.String() { - return nil, fmt.Errorf("invalid resource ID: %s", id) - } - - return appendNext(newResourceIDWithResourceType(parent, ProviderResourceType, parts[1]), parts[2:], id) - } - - if len(parts) > 3 && strings.EqualFold(parts[0], providersKey) { - return appendNext(newResourceIDWithProvider(parent, parts[1], parts[2], parts[3]), parts[4:], id) - } - - if len(parts) > 1 && !strings.EqualFold(parts[0], providersKey) { - return appendNext(newResourceID(parent, parts[0], parts[1]), parts[2:], id) - } - - return nil, fmt.Errorf("invalid resource ID: %s", id) -} - -func splitStringAndOmitEmpty(v, sep string) []string { - r := make([]string, 0) - for _, s := range strings.Split(v, sep) { - if len(s) == 0 { - continue - } - r = append(r, s) - } - - return r -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/internal/resource/resource_type.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/internal/resource/resource_type.go deleted file mode 100644 index ca03ac9713d5..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/internal/resource/resource_type.go +++ /dev/null @@ -1,114 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package resource - -import ( - "fmt" - "strings" -) - -// SubscriptionResourceType is the ResourceType of a subscription -var SubscriptionResourceType = NewResourceType(builtInResourceNamespace, "subscriptions") - -// ResourceGroupResourceType is the ResourceType of a resource group -var ResourceGroupResourceType = NewResourceType(builtInResourceNamespace, "resourceGroups") - -// TenantResourceType is the ResourceType of a tenant -var TenantResourceType = NewResourceType(builtInResourceNamespace, "tenants") - -// ProviderResourceType is the ResourceType of a provider -var ProviderResourceType = NewResourceType(builtInResourceNamespace, "providers") - -// ResourceType represents an Azure resource type, e.g. "Microsoft.Network/virtualNetworks/subnets". -// Don't create this type directly, use ParseResourceType or NewResourceType instead. -type ResourceType struct { - // Namespace is the namespace of the resource type. - // e.g. "Microsoft.Network" in resource type "Microsoft.Network/virtualNetworks/subnets" - Namespace string - - // Type is the full type name of the resource type. - // e.g. "virtualNetworks/subnets" in resource type "Microsoft.Network/virtualNetworks/subnets" - Type string - - // Types is the slice of all the sub-types of this resource type. - // e.g. ["virtualNetworks", "subnets"] in resource type "Microsoft.Network/virtualNetworks/subnets" - Types []string - - stringValue string -} - -// String returns the string of the ResourceType -func (t ResourceType) String() string { - return t.stringValue -} - -// IsParentOf returns true when the receiver is the parent resource type of the child. -func (t ResourceType) IsParentOf(child ResourceType) bool { - if !strings.EqualFold(t.Namespace, child.Namespace) { - return false - } - if len(t.Types) >= len(child.Types) { - return false - } - for i := range t.Types { - if !strings.EqualFold(t.Types[i], child.Types[i]) { - return false - } - } - - return true -} - -// AppendChild creates an instance of ResourceType using the receiver as the parent with childType appended to it. -func (t ResourceType) AppendChild(childType string) ResourceType { - return NewResourceType(t.Namespace, fmt.Sprintf("%s/%s", t.Type, childType)) -} - -// NewResourceType creates an instance of ResourceType using a provider namespace -// such as "Microsoft.Network" and type such as "virtualNetworks/subnets". -func NewResourceType(providerNamespace, typeName string) ResourceType { - return ResourceType{ - Namespace: providerNamespace, - Type: typeName, - Types: splitStringAndOmitEmpty(typeName, "/"), - stringValue: fmt.Sprintf("%s/%s", providerNamespace, typeName), - } -} - -// ParseResourceType parses the ResourceType from a resource type string (e.g. Microsoft.Network/virtualNetworks/subsets) -// or a resource identifier string. -// e.g. /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myRg/providers/Microsoft.Network/virtualNetworks/vnet/subnets/mySubnet) -func ParseResourceType(resourceIDOrType string) (ResourceType, error) { - // split the path into segments - parts := splitStringAndOmitEmpty(resourceIDOrType, "/") - - // There must be at least a namespace and type name - if len(parts) < 1 { - return ResourceType{}, fmt.Errorf("invalid resource ID or type: %s", resourceIDOrType) - } - - // if the type is just subscriptions, it is a built-in type in the Microsoft.Resources namespace - if len(parts) == 1 { - // Simple resource type - return NewResourceType(builtInResourceNamespace, parts[0]), nil - } else if strings.Contains(parts[0], ".") { - // Handle resource types (Microsoft.Compute/virtualMachines, Microsoft.Network/virtualNetworks/subnets) - // it is a full type name - return NewResourceType(parts[0], strings.Join(parts[1:], "/")), nil - } else { - // Check if ResourceID - id, err := ParseResourceID(resourceIDOrType) - if err != nil { - return ResourceType{}, err - } - return NewResourceType(id.ResourceType.Namespace, id.ResourceType.Type), nil - } -} - -func (t ResourceType) lastType() string { - return t.Types[len(t.Types)-1] -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/policy/policy.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/policy/policy.go deleted file mode 100644 index f18caf848935..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/policy/policy.go +++ /dev/null @@ -1,108 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package policy - -import ( - "time" - - "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" -) - -// BearerTokenOptions configures the bearer token policy's behavior. -type BearerTokenOptions struct { - // AuxiliaryTenants are additional tenant IDs for authenticating cross-tenant requests. - // The policy will add a token from each of these tenants to every request. The - // authenticating user or service principal must be a guest in these tenants, and the - // policy's credential must support multitenant authentication. - AuxiliaryTenants []string - - // InsecureAllowCredentialWithHTTP enables authenticated requests over HTTP. - // By default, authenticated requests to an HTTP endpoint are rejected by the client. - // WARNING: setting this to true will allow sending the authentication key in clear text. Use with caution. - InsecureAllowCredentialWithHTTP bool - - // Scopes contains the list of permission scopes required for the token. - Scopes []string -} - -// RegistrationOptions configures the registration policy's behavior. -// All zero-value fields will be initialized with their default values. -type RegistrationOptions struct { - policy.ClientOptions - - // MaxAttempts is the total number of times to attempt automatic registration - // in the event that an attempt fails. - // The default value is 3. - // Set to a value less than zero to disable the policy. - MaxAttempts int - - // PollingDelay is the amount of time to sleep between polling intervals. - // The default value is 15 seconds. - // A value less than zero means no delay between polling intervals (not recommended). - PollingDelay time.Duration - - // PollingDuration is the amount of time to wait before abandoning polling. - // The default valule is 5 minutes. - // NOTE: Setting this to a small value might cause the policy to prematurely fail. - PollingDuration time.Duration - - // StatusCodes contains the slice of custom HTTP status codes to use instead - // of the default http.StatusConflict. This should only be set if a service - // returns a non-standard HTTP status code when unregistered. - StatusCodes []int -} - -// ClientOptions contains configuration settings for a client's pipeline. -type ClientOptions struct { - policy.ClientOptions - - // AuxiliaryTenants are additional tenant IDs for authenticating cross-tenant requests. - // The client will add a token from each of these tenants to every request. The - // authenticating user or service principal must be a guest in these tenants, and the - // client's credential must support multitenant authentication. - AuxiliaryTenants []string - - // DisableRPRegistration disables the auto-RP registration policy. Defaults to false. - DisableRPRegistration bool -} - -// Clone return a deep copy of the current options. -func (o *ClientOptions) Clone() *ClientOptions { - if o == nil { - return nil - } - copiedOptions := *o - copiedOptions.Cloud.Services = copyMap(copiedOptions.Cloud.Services) - copiedOptions.Logging.AllowedHeaders = copyArray(copiedOptions.Logging.AllowedHeaders) - copiedOptions.Logging.AllowedQueryParams = copyArray(copiedOptions.Logging.AllowedQueryParams) - copiedOptions.Retry.StatusCodes = copyArray(copiedOptions.Retry.StatusCodes) - copiedOptions.PerRetryPolicies = copyArray(copiedOptions.PerRetryPolicies) - copiedOptions.PerCallPolicies = copyArray(copiedOptions.PerCallPolicies) - return &copiedOptions -} - -// copyMap return a new map with all the key value pair in the src map -func copyMap[K comparable, V any](src map[K]V) map[K]V { - if src == nil { - return nil - } - copiedMap := make(map[K]V) - for k, v := range src { - copiedMap[k] = v - } - return copiedMap -} - -// copyMap return a new array with all the elements in the src array -func copyArray[T any](src []T) []T { - if src == nil { - return nil - } - copiedArray := make([]T, len(src)) - copy(copiedArray, src) - return copiedArray -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/runtime/pipeline.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/runtime/pipeline.go deleted file mode 100644 index 039b758bf988..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/runtime/pipeline.go +++ /dev/null @@ -1,66 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package runtime - -import ( - "errors" - "reflect" - - "github.com/Azure/azure-sdk-for-go/sdk/azcore" - armpolicy "github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/policy" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/cloud" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported" - azpolicy "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" - azruntime "github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime" -) - -// NewPipeline creates a pipeline from connection options. Policies from ClientOptions are -// placed after policies from PipelineOptions. The telemetry policy, when enabled, will -// use the specified module and version info. -func NewPipeline(module, version string, cred azcore.TokenCredential, plOpts azruntime.PipelineOptions, options *armpolicy.ClientOptions) (azruntime.Pipeline, error) { - if options == nil { - options = &armpolicy.ClientOptions{} - } - conf, err := getConfiguration(&options.ClientOptions) - if err != nil { - return azruntime.Pipeline{}, err - } - authPolicy := NewBearerTokenPolicy(cred, &armpolicy.BearerTokenOptions{ - AuxiliaryTenants: options.AuxiliaryTenants, - InsecureAllowCredentialWithHTTP: options.InsecureAllowCredentialWithHTTP, - Scopes: []string{conf.Audience + "/.default"}, - }) - perRetry := make([]azpolicy.Policy, len(plOpts.PerRetry), len(plOpts.PerRetry)+1) - copy(perRetry, plOpts.PerRetry) - plOpts.PerRetry = append(perRetry, authPolicy, exported.PolicyFunc(httpTraceNamespacePolicy)) - if !options.DisableRPRegistration { - regRPOpts := armpolicy.RegistrationOptions{ClientOptions: options.ClientOptions} - regPolicy, err := NewRPRegistrationPolicy(cred, ®RPOpts) - if err != nil { - return azruntime.Pipeline{}, err - } - perCall := make([]azpolicy.Policy, len(plOpts.PerCall), len(plOpts.PerCall)+1) - copy(perCall, plOpts.PerCall) - plOpts.PerCall = append(perCall, regPolicy) - } - if plOpts.APIVersion.Name == "" { - plOpts.APIVersion.Name = "api-version" - } - return azruntime.NewPipeline(module, version, plOpts, &options.ClientOptions), nil -} - -func getConfiguration(o *azpolicy.ClientOptions) (cloud.ServiceConfiguration, error) { - c := cloud.AzurePublic - if !reflect.ValueOf(o.Cloud).IsZero() { - c = o.Cloud - } - if conf, ok := c.Services[cloud.ResourceManager]; ok && conf.Endpoint != "" && conf.Audience != "" { - return conf, nil - } else { - return conf, errors.New("provided Cloud field is missing Azure Resource Manager configuration") - } -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/runtime/policy_bearer_token.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/runtime/policy_bearer_token.go deleted file mode 100644 index 765fbc6843da..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/runtime/policy_bearer_token.go +++ /dev/null @@ -1,146 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package runtime - -import ( - "context" - "encoding/base64" - "fmt" - "net/http" - "strings" - "time" - - "github.com/Azure/azure-sdk-for-go/sdk/azcore" - armpolicy "github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/policy" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared" - azpolicy "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" - azruntime "github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime" - "github.com/Azure/azure-sdk-for-go/sdk/internal/temporal" -) - -const headerAuxiliaryAuthorization = "x-ms-authorization-auxiliary" - -// acquiringResourceState holds data for an auxiliary token request -type acquiringResourceState struct { - ctx context.Context - p *BearerTokenPolicy - tenant string -} - -// acquireAuxToken acquires a token from an auxiliary tenant. Only one thread/goroutine at a time ever calls this function. -func acquireAuxToken(state acquiringResourceState) (newResource azcore.AccessToken, newExpiration time.Time, err error) { - tk, err := state.p.cred.GetToken(state.ctx, azpolicy.TokenRequestOptions{ - EnableCAE: true, - Scopes: state.p.scopes, - TenantID: state.tenant, - }) - if err != nil { - return azcore.AccessToken{}, time.Time{}, err - } - return tk, tk.ExpiresOn, nil -} - -// BearerTokenPolicy authorizes requests with bearer tokens acquired from a TokenCredential. -type BearerTokenPolicy struct { - auxResources map[string]*temporal.Resource[azcore.AccessToken, acquiringResourceState] - btp *azruntime.BearerTokenPolicy - cred azcore.TokenCredential - scopes []string -} - -// NewBearerTokenPolicy creates a policy object that authorizes requests with bearer tokens. -// cred: an azcore.TokenCredential implementation such as a credential object from azidentity -// opts: optional settings. Pass nil to accept default values; this is the same as passing a zero-value options. -func NewBearerTokenPolicy(cred azcore.TokenCredential, opts *armpolicy.BearerTokenOptions) *BearerTokenPolicy { - if opts == nil { - opts = &armpolicy.BearerTokenOptions{} - } - p := &BearerTokenPolicy{cred: cred} - p.auxResources = make(map[string]*temporal.Resource[azcore.AccessToken, acquiringResourceState], len(opts.AuxiliaryTenants)) - for _, t := range opts.AuxiliaryTenants { - p.auxResources[t] = temporal.NewResource(acquireAuxToken) - } - p.scopes = make([]string, len(opts.Scopes)) - copy(p.scopes, opts.Scopes) - p.btp = azruntime.NewBearerTokenPolicy(cred, opts.Scopes, &azpolicy.BearerTokenOptions{ - InsecureAllowCredentialWithHTTP: opts.InsecureAllowCredentialWithHTTP, - AuthorizationHandler: azpolicy.AuthorizationHandler{ - OnChallenge: p.onChallenge, - OnRequest: p.onRequest, - }, - }) - return p -} - -func (b *BearerTokenPolicy) onChallenge(req *azpolicy.Request, res *http.Response, authNZ func(azpolicy.TokenRequestOptions) error) error { - challenge := res.Header.Get(shared.HeaderWWWAuthenticate) - claims, err := parseChallenge(challenge) - if err != nil { - // the challenge contains claims we can't parse - return err - } else if claims != "" { - // request a new token having the specified claims, send the request again - return authNZ(azpolicy.TokenRequestOptions{Claims: claims, EnableCAE: true, Scopes: b.scopes}) - } - // auth challenge didn't include claims, so this is a simple authorization failure - return azruntime.NewResponseError(res) -} - -// onRequest authorizes requests with one or more bearer tokens -func (b *BearerTokenPolicy) onRequest(req *azpolicy.Request, authNZ func(azpolicy.TokenRequestOptions) error) error { - // authorize the request with a token for the primary tenant - err := authNZ(azpolicy.TokenRequestOptions{EnableCAE: true, Scopes: b.scopes}) - if err != nil || len(b.auxResources) == 0 { - return err - } - // add tokens for auxiliary tenants - as := acquiringResourceState{ - ctx: req.Raw().Context(), - p: b, - } - auxTokens := make([]string, 0, len(b.auxResources)) - for tenant, er := range b.auxResources { - as.tenant = tenant - auxTk, err := er.Get(as) - if err != nil { - return err - } - auxTokens = append(auxTokens, fmt.Sprintf("%s%s", shared.BearerTokenPrefix, auxTk.Token)) - } - req.Raw().Header.Set(headerAuxiliaryAuthorization, strings.Join(auxTokens, ", ")) - return nil -} - -// Do authorizes a request with a bearer token -func (b *BearerTokenPolicy) Do(req *azpolicy.Request) (*http.Response, error) { - return b.btp.Do(req) -} - -// parseChallenge parses claims from an authentication challenge issued by ARM so a client can request a token -// that will satisfy conditional access policies. It returns a non-nil error when the given value contains -// claims it can't parse. If the value contains no claims, it returns an empty string and a nil error. -func parseChallenge(wwwAuthenticate string) (string, error) { - claims := "" - var err error - for _, param := range strings.Split(wwwAuthenticate, ",") { - if _, after, found := strings.Cut(param, "claims="); found { - if claims != "" { - // The header contains multiple challenges, at least two of which specify claims. The specs allow this - // but it's unclear what a client should do in this case and there's as yet no concrete example of it. - err = fmt.Errorf("found multiple claims challenges in %q", wwwAuthenticate) - break - } - // trim stuff that would get an error from RawURLEncoding; claims may or may not be padded - claims = strings.Trim(after, `\"=`) - // we don't return this error because it's something unhelpful like "illegal base64 data at input byte 42" - if b, decErr := base64.RawURLEncoding.DecodeString(claims); decErr == nil { - claims = string(b) - } else { - err = fmt.Errorf("failed to parse claims from %q", wwwAuthenticate) - break - } - } - } - return claims, err -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/runtime/policy_register_rp.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/runtime/policy_register_rp.go deleted file mode 100644 index 810ac9d9fabf..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/runtime/policy_register_rp.go +++ /dev/null @@ -1,322 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package runtime - -import ( - "context" - "fmt" - "net/http" - "net/url" - "strings" - "time" - - "github.com/Azure/azure-sdk-for-go/sdk/azcore" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/internal/resource" - armpolicy "github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/policy" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared" - azpolicy "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime" - "github.com/Azure/azure-sdk-for-go/sdk/internal/log" -) - -const ( - // LogRPRegistration entries contain information specific to the automatic registration of an RP. - // Entries of this classification are written IFF the policy needs to take any action. - LogRPRegistration log.Event = "RPRegistration" -) - -// init sets any default values -func setDefaults(r *armpolicy.RegistrationOptions) { - if r.MaxAttempts == 0 { - r.MaxAttempts = 3 - } else if r.MaxAttempts < 0 { - r.MaxAttempts = 0 - } - if r.PollingDelay == 0 { - r.PollingDelay = 15 * time.Second - } else if r.PollingDelay < 0 { - r.PollingDelay = 0 - } - if r.PollingDuration == 0 { - r.PollingDuration = 5 * time.Minute - } - if len(r.StatusCodes) == 0 { - r.StatusCodes = []int{http.StatusConflict} - } -} - -// NewRPRegistrationPolicy creates a policy object configured using the specified options. -// The policy controls whether an unregistered resource provider should automatically be -// registered. See https://aka.ms/rps-not-found for more information. -func NewRPRegistrationPolicy(cred azcore.TokenCredential, o *armpolicy.RegistrationOptions) (azpolicy.Policy, error) { - if o == nil { - o = &armpolicy.RegistrationOptions{} - } - conf, err := getConfiguration(&o.ClientOptions) - if err != nil { - return nil, err - } - authPolicy := NewBearerTokenPolicy(cred, &armpolicy.BearerTokenOptions{Scopes: []string{conf.Audience + "/.default"}}) - p := &rpRegistrationPolicy{ - endpoint: conf.Endpoint, - pipeline: runtime.NewPipeline(shared.Module, shared.Version, runtime.PipelineOptions{PerRetry: []azpolicy.Policy{authPolicy}}, &o.ClientOptions), - options: *o, - } - // init the copy - setDefaults(&p.options) - return p, nil -} - -type rpRegistrationPolicy struct { - endpoint string - pipeline runtime.Pipeline - options armpolicy.RegistrationOptions -} - -func (r *rpRegistrationPolicy) Do(req *azpolicy.Request) (*http.Response, error) { - if r.options.MaxAttempts == 0 { - // policy is disabled - return req.Next() - } - const registeredState = "Registered" - var rp string - var resp *http.Response - for attempts := 0; attempts < r.options.MaxAttempts; attempts++ { - var err error - // make the original request - resp, err = req.Next() - // getting a 409 is the first indication that the RP might need to be registered, check error response - if err != nil || !runtime.HasStatusCode(resp, r.options.StatusCodes...) { - return resp, err - } - var reqErr requestError - if err = runtime.UnmarshalAsJSON(resp, &reqErr); err != nil { - return resp, err - } - if reqErr.ServiceError == nil { - // missing service error info. just return the response - // to the caller so its error unmarshalling will kick in - return resp, err - } - if !isUnregisteredRPCode(reqErr.ServiceError.Code) { - // not a 409 due to unregistered RP. just return the response - // to the caller so its error unmarshalling will kick in - return resp, err - } - res, err := resource.ParseResourceID(req.Raw().URL.Path) - if err != nil { - return resp, err - } - rp = res.ResourceType.Namespace - logRegistrationExit := func(v any) { - log.Writef(LogRPRegistration, "END registration for %s: %v", rp, v) - } - log.Writef(LogRPRegistration, "BEGIN registration for %s", rp) - // create client and make the registration request - // we use the scheme and host from the original request - rpOps := &providersOperations{ - p: r.pipeline, - u: r.endpoint, - subID: res.SubscriptionID, - } - if _, err = rpOps.Register(&shared.ContextWithDeniedValues{Context: req.Raw().Context()}, rp); err != nil { - logRegistrationExit(err) - return resp, err - } - - // RP was registered, however we need to wait for the registration to complete - pollCtx, pollCancel := context.WithTimeout(&shared.ContextWithDeniedValues{Context: req.Raw().Context()}, r.options.PollingDuration) - var lastRegState string - for { - // get the current registration state - getResp, err := rpOps.Get(pollCtx, rp) - if err != nil { - pollCancel() - logRegistrationExit(err) - return resp, err - } - if getResp.Provider.RegistrationState != nil && !strings.EqualFold(*getResp.Provider.RegistrationState, lastRegState) { - // registration state has changed, or was updated for the first time - lastRegState = *getResp.Provider.RegistrationState - log.Writef(LogRPRegistration, "registration state is %s", lastRegState) - } - if strings.EqualFold(lastRegState, registeredState) { - // registration complete - pollCancel() - logRegistrationExit(lastRegState) - break - } - // wait before trying again - select { - case <-time.After(r.options.PollingDelay): - // continue polling - case <-pollCtx.Done(): - pollCancel() - logRegistrationExit(pollCtx.Err()) - return resp, pollCtx.Err() - } - } - // RP was successfully registered, retry the original request - err = req.RewindBody() - if err != nil { - return resp, err - } - } - // if we get here it means we exceeded the number of attempts - return resp, fmt.Errorf("exceeded attempts to register %s", rp) -} - -var unregisteredRPCodes = []string{ - "MissingSubscriptionRegistration", - "MissingRegistrationForResourceProvider", - "Subscription Not Registered", - "SubscriptionNotRegistered", -} - -func isUnregisteredRPCode(errorCode string) bool { - for _, code := range unregisteredRPCodes { - if strings.EqualFold(errorCode, code) { - return true - } - } - return false -} - -// minimal error definitions to simplify detection -type requestError struct { - ServiceError *serviceError `json:"error"` -} - -type serviceError struct { - Code string `json:"code"` -} - -/////////////////////////////////////////////////////////////////////////////////////////////// -// the following code was copied from module armresources, providers.go and models.go -// only the minimum amount of code was copied to get this working and some edits were made. -/////////////////////////////////////////////////////////////////////////////////////////////// - -type providersOperations struct { - p runtime.Pipeline - u string - subID string -} - -// Get - Gets the specified resource provider. -func (client *providersOperations) Get(ctx context.Context, resourceProviderNamespace string) (providerResponse, error) { - req, err := client.getCreateRequest(ctx, resourceProviderNamespace) - if err != nil { - return providerResponse{}, err - } - resp, err := client.p.Do(req) - if err != nil { - return providerResponse{}, err - } - result, err := client.getHandleResponse(resp) - if err != nil { - return providerResponse{}, err - } - return result, nil -} - -// getCreateRequest creates the Get request. -func (client *providersOperations) getCreateRequest(ctx context.Context, resourceProviderNamespace string) (*azpolicy.Request, error) { - urlPath := "/subscriptions/{subscriptionId}/providers/{resourceProviderNamespace}" - urlPath = strings.ReplaceAll(urlPath, "{resourceProviderNamespace}", url.PathEscape(resourceProviderNamespace)) - urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subID)) - req, err := runtime.NewRequest(ctx, http.MethodGet, runtime.JoinPaths(client.u, urlPath)) - if err != nil { - return nil, err - } - query := req.Raw().URL.Query() - query.Set("api-version", "2019-05-01") - req.Raw().URL.RawQuery = query.Encode() - return req, nil -} - -// getHandleResponse handles the Get response. -func (client *providersOperations) getHandleResponse(resp *http.Response) (providerResponse, error) { - if !runtime.HasStatusCode(resp, http.StatusOK) { - return providerResponse{}, exported.NewResponseError(resp) - } - result := providerResponse{RawResponse: resp} - err := runtime.UnmarshalAsJSON(resp, &result.Provider) - if err != nil { - return providerResponse{}, err - } - return result, err -} - -// Register - Registers a subscription with a resource provider. -func (client *providersOperations) Register(ctx context.Context, resourceProviderNamespace string) (providerResponse, error) { - req, err := client.registerCreateRequest(ctx, resourceProviderNamespace) - if err != nil { - return providerResponse{}, err - } - resp, err := client.p.Do(req) - if err != nil { - return providerResponse{}, err - } - result, err := client.registerHandleResponse(resp) - if err != nil { - return providerResponse{}, err - } - return result, nil -} - -// registerCreateRequest creates the Register request. -func (client *providersOperations) registerCreateRequest(ctx context.Context, resourceProviderNamespace string) (*azpolicy.Request, error) { - urlPath := "/subscriptions/{subscriptionId}/providers/{resourceProviderNamespace}/register" - urlPath = strings.ReplaceAll(urlPath, "{resourceProviderNamespace}", url.PathEscape(resourceProviderNamespace)) - urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subID)) - req, err := runtime.NewRequest(ctx, http.MethodPost, runtime.JoinPaths(client.u, urlPath)) - if err != nil { - return nil, err - } - query := req.Raw().URL.Query() - query.Set("api-version", "2019-05-01") - req.Raw().URL.RawQuery = query.Encode() - return req, nil -} - -// registerHandleResponse handles the Register response. -func (client *providersOperations) registerHandleResponse(resp *http.Response) (providerResponse, error) { - if !runtime.HasStatusCode(resp, http.StatusOK) { - return providerResponse{}, exported.NewResponseError(resp) - } - result := providerResponse{RawResponse: resp} - err := runtime.UnmarshalAsJSON(resp, &result.Provider) - if err != nil { - return providerResponse{}, err - } - return result, err -} - -// ProviderResponse is the response envelope for operations that return a Provider type. -type providerResponse struct { - // Resource provider information. - Provider *provider - - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// Provider - Resource provider information. -type provider struct { - // The provider ID. - ID *string `json:"id,omitempty"` - - // The namespace of the resource provider. - Namespace *string `json:"namespace,omitempty"` - - // The registration policy of the resource provider. - RegistrationPolicy *string `json:"registrationPolicy,omitempty"` - - // The registration state of the resource provider. - RegistrationState *string `json:"registrationState,omitempty"` -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/runtime/policy_trace_namespace.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/runtime/policy_trace_namespace.go deleted file mode 100644 index 6cea184240f2..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/runtime/policy_trace_namespace.go +++ /dev/null @@ -1,30 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package runtime - -import ( - "net/http" - - "github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/internal/resource" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/tracing" -) - -// httpTraceNamespacePolicy is a policy that adds the az.namespace attribute to the current Span -func httpTraceNamespacePolicy(req *policy.Request) (resp *http.Response, err error) { - rawTracer := req.Raw().Context().Value(shared.CtxWithTracingTracer{}) - if tracer, ok := rawTracer.(tracing.Tracer); ok && tracer.Enabled() { - rt, err := resource.ParseResourceType(req.Raw().URL.Path) - if err == nil { - // add the namespace attribute to the current span - span := tracer.SpanFromContext(req.Raw().Context()) - span.SetAttributes(tracing.Attribute{Key: shared.TracingNamespaceAttrName, Value: rt.Namespace}) - } - } - return req.Next() -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/runtime/runtime.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/runtime/runtime.go deleted file mode 100644 index 1400d43799f3..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/runtime/runtime.go +++ /dev/null @@ -1,24 +0,0 @@ -//go:build go1.16 -// +build go1.16 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package runtime - -import "github.com/Azure/azure-sdk-for-go/sdk/azcore/cloud" - -func init() { - cloud.AzureChina.Services[cloud.ResourceManager] = cloud.ServiceConfiguration{ - Audience: "https://management.core.chinacloudapi.cn", - Endpoint: "https://management.chinacloudapi.cn", - } - cloud.AzureGovernment.Services[cloud.ResourceManager] = cloud.ServiceConfiguration{ - Audience: "https://management.core.usgovcloudapi.net", - Endpoint: "https://management.usgovcloudapi.net", - } - cloud.AzurePublic.Services[cloud.ResourceManager] = cloud.ServiceConfiguration{ - Audience: "https://management.core.windows.net/", - Endpoint: "https://management.azure.com", - } -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/ci.yml b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/ci.yml deleted file mode 100644 index 99348527b541..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/ci.yml +++ /dev/null @@ -1,29 +0,0 @@ -# NOTE: Please refer to https://aka.ms/azsdk/engsys/ci-yaml before editing this file. -trigger: - branches: - include: - - main - - feature/* - - hotfix/* - - release/* - paths: - include: - - sdk/azcore/ - - eng/ - -pr: - branches: - include: - - main - - feature/* - - hotfix/* - - release/* - paths: - include: - - sdk/azcore/ - - eng/ - -extends: - template: /eng/pipelines/templates/jobs/archetype-sdk-client.yml - parameters: - ServiceDirectory: azcore diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/cloud/cloud.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/cloud/cloud.go deleted file mode 100644 index 9d077a3e1260..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/cloud/cloud.go +++ /dev/null @@ -1,44 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package cloud - -var ( - // AzureChina contains configuration for Azure China. - AzureChina = Configuration{ - ActiveDirectoryAuthorityHost: "https://login.chinacloudapi.cn/", Services: map[ServiceName]ServiceConfiguration{}, - } - // AzureGovernment contains configuration for Azure Government. - AzureGovernment = Configuration{ - ActiveDirectoryAuthorityHost: "https://login.microsoftonline.us/", Services: map[ServiceName]ServiceConfiguration{}, - } - // AzurePublic contains configuration for Azure Public Cloud. - AzurePublic = Configuration{ - ActiveDirectoryAuthorityHost: "https://login.microsoftonline.com/", Services: map[ServiceName]ServiceConfiguration{}, - } -) - -// ServiceName identifies a cloud service. -type ServiceName string - -// ResourceManager is a global constant identifying Azure Resource Manager. -const ResourceManager ServiceName = "resourceManager" - -// ServiceConfiguration configures a specific cloud service such as Azure Resource Manager. -type ServiceConfiguration struct { - // Audience is the audience the client will request for its access tokens. - Audience string - // Endpoint is the service's base URL. - Endpoint string -} - -// Configuration configures a cloud. -type Configuration struct { - // ActiveDirectoryAuthorityHost is the base URL of the cloud's Azure Active Directory. - ActiveDirectoryAuthorityHost string - // Services contains configuration for the cloud's services. - Services map[ServiceName]ServiceConfiguration -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/cloud/doc.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/cloud/doc.go deleted file mode 100644 index 985b1bde2f2d..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/cloud/doc.go +++ /dev/null @@ -1,53 +0,0 @@ -//go:build go1.16 -// +build go1.16 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -/* -Package cloud implements a configuration API for applications deployed to sovereign or private Azure clouds. - -Azure SDK client configuration defaults are appropriate for Azure Public Cloud (sometimes referred to as -"Azure Commercial" or simply "Microsoft Azure"). This package enables applications deployed to other -Azure Clouds to configure clients appropriately. - -This package contains predefined configuration for well-known sovereign clouds such as Azure Government and -Azure China. Azure SDK clients accept this configuration via the Cloud field of azcore.ClientOptions. For -example, configuring a credential and ARM client for Azure Government: - - opts := azcore.ClientOptions{Cloud: cloud.AzureGovernment} - cred, err := azidentity.NewDefaultAzureCredential( - &azidentity.DefaultAzureCredentialOptions{ClientOptions: opts}, - ) - handle(err) - - client, err := armsubscription.NewClient( - cred, &arm.ClientOptions{ClientOptions: opts}, - ) - handle(err) - -Applications deployed to a private cloud such as Azure Stack create a Configuration object with -appropriate values: - - c := cloud.Configuration{ - ActiveDirectoryAuthorityHost: "https://...", - Services: map[cloud.ServiceName]cloud.ServiceConfiguration{ - cloud.ResourceManager: { - Audience: "...", - Endpoint: "https://...", - }, - }, - } - opts := azcore.ClientOptions{Cloud: c} - - cred, err := azidentity.NewDefaultAzureCredential( - &azidentity.DefaultAzureCredentialOptions{ClientOptions: opts}, - ) - handle(err) - - client, err := armsubscription.NewClient( - cred, &arm.ClientOptions{ClientOptions: opts}, - ) - handle(err) -*/ -package cloud diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/core.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/core.go deleted file mode 100644 index 9d1c2f0c0537..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/core.go +++ /dev/null @@ -1,173 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azcore - -import ( - "reflect" - "sync" - - "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/tracing" -) - -// AccessToken represents an Azure service bearer access token with expiry information. -type AccessToken = exported.AccessToken - -// TokenCredential represents a credential capable of providing an OAuth token. -type TokenCredential = exported.TokenCredential - -// KeyCredential contains an authentication key used to authenticate to an Azure service. -type KeyCredential = exported.KeyCredential - -// NewKeyCredential creates a new instance of [KeyCredential] with the specified values. -// - key is the authentication key -func NewKeyCredential(key string) *KeyCredential { - return exported.NewKeyCredential(key) -} - -// SASCredential contains a shared access signature used to authenticate to an Azure service. -type SASCredential = exported.SASCredential - -// NewSASCredential creates a new instance of [SASCredential] with the specified values. -// - sas is the shared access signature -func NewSASCredential(sas string) *SASCredential { - return exported.NewSASCredential(sas) -} - -// holds sentinel values used to send nulls -var nullables map[reflect.Type]any = map[reflect.Type]any{} -var nullablesMu sync.RWMutex - -// NullValue is used to send an explicit 'null' within a request. -// This is typically used in JSON-MERGE-PATCH operations to delete a value. -func NullValue[T any]() T { - t := shared.TypeOfT[T]() - - nullablesMu.RLock() - v, found := nullables[t] - nullablesMu.RUnlock() - - if found { - // return the sentinel object - return v.(T) - } - - // promote to exclusive lock and check again (double-checked locking pattern) - nullablesMu.Lock() - defer nullablesMu.Unlock() - v, found = nullables[t] - - if !found { - var o reflect.Value - if k := t.Kind(); k == reflect.Map { - o = reflect.MakeMap(t) - } else if k == reflect.Slice { - // empty slices appear to all point to the same data block - // which causes comparisons to become ambiguous. so we create - // a slice with len/cap of one which ensures a unique address. - o = reflect.MakeSlice(t, 1, 1) - } else { - o = reflect.New(t.Elem()) - } - v = o.Interface() - nullables[t] = v - } - // return the sentinel object - return v.(T) -} - -// IsNullValue returns true if the field contains a null sentinel value. -// This is used by custom marshallers to properly encode a null value. -func IsNullValue[T any](v T) bool { - // see if our map has a sentinel object for this *T - t := reflect.TypeOf(v) - nullablesMu.RLock() - defer nullablesMu.RUnlock() - - if o, found := nullables[t]; found { - o1 := reflect.ValueOf(o) - v1 := reflect.ValueOf(v) - // we found it; return true if v points to the sentinel object. - // NOTE: maps and slices can only be compared to nil, else you get - // a runtime panic. so we compare addresses instead. - return o1.Pointer() == v1.Pointer() - } - // no sentinel object for this *t - return false -} - -// ClientOptions contains optional settings for a client's pipeline. -// Instances can be shared across calls to SDK client constructors when uniform configuration is desired. -// Zero-value fields will have their specified default values applied during use. -type ClientOptions = policy.ClientOptions - -// Client is a basic HTTP client. It consists of a pipeline and tracing provider. -type Client struct { - pl runtime.Pipeline - tr tracing.Tracer - - // cached on the client to support shallow copying with new values - tp tracing.Provider - modVer string - namespace string -} - -// NewClient creates a new Client instance with the provided values. -// - moduleName - the fully qualified name of the module where the client is defined; used by the telemetry policy and tracing provider. -// - moduleVersion - the semantic version of the module; used by the telemetry policy and tracing provider. -// - plOpts - pipeline configuration options; can be the zero-value -// - options - optional client configurations; pass nil to accept the default values -func NewClient(moduleName, moduleVersion string, plOpts runtime.PipelineOptions, options *ClientOptions) (*Client, error) { - if options == nil { - options = &ClientOptions{} - } - - if !options.Telemetry.Disabled { - if err := shared.ValidateModVer(moduleVersion); err != nil { - return nil, err - } - } - - pl := runtime.NewPipeline(moduleName, moduleVersion, plOpts, options) - - tr := options.TracingProvider.NewTracer(moduleName, moduleVersion) - if tr.Enabled() && plOpts.Tracing.Namespace != "" { - tr.SetAttributes(tracing.Attribute{Key: shared.TracingNamespaceAttrName, Value: plOpts.Tracing.Namespace}) - } - - return &Client{ - pl: pl, - tr: tr, - tp: options.TracingProvider, - modVer: moduleVersion, - namespace: plOpts.Tracing.Namespace, - }, nil -} - -// Pipeline returns the pipeline for this client. -func (c *Client) Pipeline() runtime.Pipeline { - return c.pl -} - -// Tracer returns the tracer for this client. -func (c *Client) Tracer() tracing.Tracer { - return c.tr -} - -// WithClientName returns a shallow copy of the Client with its tracing client name changed to clientName. -// Note that the values for module name and version will be preserved from the source Client. -// - clientName - the fully qualified name of the client ("package.Client"); this is used by the tracing provider when creating spans -func (c *Client) WithClientName(clientName string) *Client { - tr := c.tp.NewTracer(clientName, c.modVer) - if tr.Enabled() && c.namespace != "" { - tr.SetAttributes(tracing.Attribute{Key: shared.TracingNamespaceAttrName, Value: c.namespace}) - } - return &Client{pl: c.pl, tr: tr, tp: c.tp, modVer: c.modVer, namespace: c.namespace} -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/doc.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/doc.go deleted file mode 100644 index 654a5f404314..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/doc.go +++ /dev/null @@ -1,264 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright 2017 Microsoft Corporation. All rights reserved. -// Use of this source code is governed by an MIT -// license that can be found in the LICENSE file. - -/* -Package azcore implements an HTTP request/response middleware pipeline used by Azure SDK clients. - -The middleware consists of three components. - - - One or more Policy instances. - - A Transporter instance. - - A Pipeline instance that combines the Policy and Transporter instances. - -# Implementing the Policy Interface - -A Policy can be implemented in two ways; as a first-class function for a stateless Policy, or as -a method on a type for a stateful Policy. Note that HTTP requests made via the same pipeline share -the same Policy instances, so if a Policy mutates its state it MUST be properly synchronized to -avoid race conditions. - -A Policy's Do method is called when an HTTP request wants to be sent over the network. The Do method can -perform any operation(s) it desires. For example, it can log the outgoing request, mutate the URL, headers, -and/or query parameters, inject a failure, etc. Once the Policy has successfully completed its request -work, it must call the Next() method on the *policy.Request instance in order to pass the request to the -next Policy in the chain. - -When an HTTP response comes back, the Policy then gets a chance to process the response/error. The Policy instance -can log the response, retry the operation if it failed due to a transient error or timeout, unmarshal the response -body, etc. Once the Policy has successfully completed its response work, it must return the *http.Response -and error instances to its caller. - -Template for implementing a stateless Policy: - - type policyFunc func(*policy.Request) (*http.Response, error) - - // Do implements the Policy interface on policyFunc. - func (pf policyFunc) Do(req *policy.Request) (*http.Response, error) { - return pf(req) - } - - func NewMyStatelessPolicy() policy.Policy { - return policyFunc(func(req *policy.Request) (*http.Response, error) { - // TODO: mutate/process Request here - - // forward Request to next Policy & get Response/error - resp, err := req.Next() - - // TODO: mutate/process Response/error here - - // return Response/error to previous Policy - return resp, err - }) - } - -Template for implementing a stateful Policy: - - type MyStatefulPolicy struct { - // TODO: add configuration/setting fields here - } - - // TODO: add initialization args to NewMyStatefulPolicy() - func NewMyStatefulPolicy() policy.Policy { - return &MyStatefulPolicy{ - // TODO: initialize configuration/setting fields here - } - } - - func (p *MyStatefulPolicy) Do(req *policy.Request) (resp *http.Response, err error) { - // TODO: mutate/process Request here - - // forward Request to next Policy & get Response/error - resp, err := req.Next() - - // TODO: mutate/process Response/error here - - // return Response/error to previous Policy - return resp, err - } - -# Implementing the Transporter Interface - -The Transporter interface is responsible for sending the HTTP request and returning the corresponding -HTTP response or error. The Transporter is invoked by the last Policy in the chain. The default Transporter -implementation uses a shared http.Client from the standard library. - -The same stateful/stateless rules for Policy implementations apply to Transporter implementations. - -# Using Policy and Transporter Instances Via a Pipeline - -To use the Policy and Transporter instances, an application passes them to the runtime.NewPipeline function. - - func NewPipeline(transport Transporter, policies ...Policy) Pipeline - -The specified Policy instances form a chain and are invoked in the order provided to NewPipeline -followed by the Transporter. - -Once the Pipeline has been created, create a runtime.Request instance and pass it to Pipeline's Do method. - - func NewRequest(ctx context.Context, httpMethod string, endpoint string) (*Request, error) - - func (p Pipeline) Do(req *Request) (*http.Request, error) - -The Pipeline.Do method sends the specified Request through the chain of Policy and Transporter -instances. The response/error is then sent through the same chain of Policy instances in reverse -order. For example, assuming there are Policy types PolicyA, PolicyB, and PolicyC along with -TransportA. - - pipeline := NewPipeline(TransportA, PolicyA, PolicyB, PolicyC) - -The flow of Request and Response looks like the following: - - policy.Request -> PolicyA -> PolicyB -> PolicyC -> TransportA -----+ - | - HTTP(S) endpoint - | - caller <--------- PolicyA <- PolicyB <- PolicyC <- http.Response-+ - -# Creating a Request Instance - -The Request instance passed to Pipeline's Do method is a wrapper around an *http.Request. It also -contains some internal state and provides various convenience methods. You create a Request instance -by calling the runtime.NewRequest function: - - func NewRequest(ctx context.Context, httpMethod string, endpoint string) (*Request, error) - -If the Request should contain a body, call the SetBody method. - - func (req *Request) SetBody(body ReadSeekCloser, contentType string) error - -A seekable stream is required so that upon retry, the retry Policy instance can seek the stream -back to the beginning before retrying the network request and re-uploading the body. - -# Sending an Explicit Null - -Operations like JSON-MERGE-PATCH send a JSON null to indicate a value should be deleted. - - { - "delete-me": null - } - -This requirement conflicts with the SDK's default marshalling that specifies "omitempty" as -a means to resolve the ambiguity between a field to be excluded and its zero-value. - - type Widget struct { - Name *string `json:",omitempty"` - Count *int `json:",omitempty"` - } - -In the above example, Name and Count are defined as pointer-to-type to disambiguate between -a missing value (nil) and a zero-value (0) which might have semantic differences. - -In a PATCH operation, any fields left as nil are to have their values preserved. When updating -a Widget's count, one simply specifies the new value for Count, leaving Name nil. - -To fulfill the requirement for sending a JSON null, the NullValue() function can be used. - - w := Widget{ - Count: azcore.NullValue[*int](), - } - -This sends an explict "null" for Count, indicating that any current value for Count should be deleted. - -# Processing the Response - -When the HTTP response is received, the *http.Response is returned directly. Each Policy instance -can inspect/mutate the *http.Response. - -# Built-in Logging - -To enable logging, set environment variable AZURE_SDK_GO_LOGGING to "all" before executing your program. - -By default the logger writes to stderr. This can be customized by calling log.SetListener, providing -a callback that writes to the desired location. Any custom logging implementation MUST provide its -own synchronization to handle concurrent invocations. - -See the docs for the log package for further details. - -# Pageable Operations - -Pageable operations return potentially large data sets spread over multiple GET requests. The result of -each GET is a "page" of data consisting of a slice of items. - -Pageable operations can be identified by their New*Pager naming convention and return type of *runtime.Pager[T]. - - func (c *WidgetClient) NewListWidgetsPager(o *Options) *runtime.Pager[PageResponse] - -The call to WidgetClient.NewListWidgetsPager() returns an instance of *runtime.Pager[T] for fetching pages -and determining if there are more pages to fetch. No IO calls are made until the NextPage() method is invoked. - - pager := widgetClient.NewListWidgetsPager(nil) - for pager.More() { - page, err := pager.NextPage(context.TODO()) - // handle err - for _, widget := range page.Values { - // process widget - } - } - -# Long-Running Operations - -Long-running operations (LROs) are operations consisting of an initial request to start the operation followed -by polling to determine when the operation has reached a terminal state. An LRO's terminal state is one -of the following values. - - - Succeeded - the LRO completed successfully - - Failed - the LRO failed to complete - - Canceled - the LRO was canceled - -LROs can be identified by their Begin* prefix and their return type of *runtime.Poller[T]. - - func (c *WidgetClient) BeginCreateOrUpdate(ctx context.Context, w Widget, o *Options) (*runtime.Poller[Response], error) - -When a call to WidgetClient.BeginCreateOrUpdate() returns a nil error, it means that the LRO has started. -It does _not_ mean that the widget has been created or updated (or failed to be created/updated). - -The *runtime.Poller[T] provides APIs for determining the state of the LRO. To wait for the LRO to complete, -call the PollUntilDone() method. - - poller, err := widgetClient.BeginCreateOrUpdate(context.TODO(), Widget{}, nil) - // handle err - result, err := poller.PollUntilDone(context.TODO(), nil) - // handle err - // use result - -The call to PollUntilDone() will block the current goroutine until the LRO has reached a terminal state or the -context is canceled/timed out. - -Note that LROs can take anywhere from several seconds to several minutes. The duration is operation-dependent. Due to -this variant behavior, pollers do _not_ have a preconfigured time-out. Use a context with the appropriate cancellation -mechanism as required. - -# Resume Tokens - -Pollers provide the ability to serialize their state into a "resume token" which can be used by another process to -recreate the poller. This is achieved via the runtime.Poller[T].ResumeToken() method. - - token, err := poller.ResumeToken() - // handle error - -Note that a token can only be obtained for a poller that's in a non-terminal state. Also note that any subsequent calls -to poller.Poll() might change the poller's state. In this case, a new token should be created. - -After the token has been obtained, it can be used to recreate an instance of the originating poller. - - poller, err := widgetClient.BeginCreateOrUpdate(nil, Widget{}, &Options{ - ResumeToken: token, - }) - -When resuming a poller, no IO is performed, and zero-value arguments can be used for everything but the Options.ResumeToken. - -Resume tokens are unique per service client and operation. Attempting to resume a poller for LRO BeginB() with a token from LRO -BeginA() will result in an error. - -# Fakes - -The fake package contains types used for constructing in-memory fake servers used in unit tests. -This allows writing tests to cover various success/error conditions without the need for connecting to a live service. - -Please see https://github.com/Azure/azure-sdk-for-go/tree/main/sdk/samples/fakes for details and examples on how to use fakes. -*/ -package azcore diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/errors.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/errors.go deleted file mode 100644 index 17bd50c67320..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/errors.go +++ /dev/null @@ -1,14 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azcore - -import "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported" - -// ResponseError is returned when a request is made to a service and -// the service returns a non-success HTTP status code. -// Use errors.As() to access this type in the error chain. -type ResponseError = exported.ResponseError diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/etag.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/etag.go deleted file mode 100644 index 2b19d01f76ec..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/etag.go +++ /dev/null @@ -1,57 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azcore - -import ( - "strings" -) - -// ETag is a property used for optimistic concurrency during updates -// ETag is a validator based on https://tools.ietf.org/html/rfc7232#section-2.3.2 -// An ETag can be empty (""). -type ETag string - -// ETagAny is an ETag that represents everything, the value is "*" -const ETagAny ETag = "*" - -// Equals does a strong comparison of two ETags. Equals returns true when both -// ETags are not weak and the values of the underlying strings are equal. -func (e ETag) Equals(other ETag) bool { - return !e.IsWeak() && !other.IsWeak() && e == other -} - -// WeakEquals does a weak comparison of two ETags. Two ETags are equivalent if their opaque-tags match -// character-by-character, regardless of either or both being tagged as "weak". -func (e ETag) WeakEquals(other ETag) bool { - getStart := func(e1 ETag) int { - if e1.IsWeak() { - return 2 - } - return 0 - } - aStart := getStart(e) - bStart := getStart(other) - - aVal := e[aStart:] - bVal := other[bStart:] - - return aVal == bVal -} - -// IsWeak specifies whether the ETag is strong or weak. -func (e ETag) IsWeak() bool { - return len(e) >= 4 && strings.HasPrefix(string(e), "W/\"") && strings.HasSuffix(string(e), "\"") -} - -// MatchConditions specifies HTTP options for conditional requests. -type MatchConditions struct { - // Optionally limit requests to resources that have a matching ETag. - IfMatch *ETag - - // Optionally limit requests to resources that do not match the ETag. - IfNoneMatch *ETag -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported/exported.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported/exported.go deleted file mode 100644 index f2b296b6dc7c..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported/exported.go +++ /dev/null @@ -1,175 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package exported - -import ( - "context" - "encoding/base64" - "fmt" - "io" - "net/http" - "sync/atomic" - "time" -) - -type nopCloser struct { - io.ReadSeeker -} - -func (n nopCloser) Close() error { - return nil -} - -// NopCloser returns a ReadSeekCloser with a no-op close method wrapping the provided io.ReadSeeker. -// Exported as streaming.NopCloser(). -func NopCloser(rs io.ReadSeeker) io.ReadSeekCloser { - return nopCloser{rs} -} - -// HasStatusCode returns true if the Response's status code is one of the specified values. -// Exported as runtime.HasStatusCode(). -func HasStatusCode(resp *http.Response, statusCodes ...int) bool { - if resp == nil { - return false - } - for _, sc := range statusCodes { - if resp.StatusCode == sc { - return true - } - } - return false -} - -// AccessToken represents an Azure service bearer access token with expiry information. -// Exported as azcore.AccessToken. -type AccessToken struct { - Token string - ExpiresOn time.Time -} - -// TokenRequestOptions contain specific parameter that may be used by credentials types when attempting to get a token. -// Exported as policy.TokenRequestOptions. -type TokenRequestOptions struct { - // Claims are any additional claims required for the token to satisfy a conditional access policy, such as a - // service may return in a claims challenge following an authorization failure. If a service returned the - // claims value base64 encoded, it must be decoded before setting this field. - Claims string - - // EnableCAE indicates whether to enable Continuous Access Evaluation (CAE) for the requested token. When true, - // azidentity credentials request CAE tokens for resource APIs supporting CAE. Clients are responsible for - // handling CAE challenges. If a client that doesn't handle CAE challenges receives a CAE token, it may end up - // in a loop retrying an API call with a token that has been revoked due to CAE. - EnableCAE bool - - // Scopes contains the list of permission scopes required for the token. - Scopes []string - - // TenantID identifies the tenant from which to request the token. azidentity credentials authenticate in - // their configured default tenants when this field isn't set. - TenantID string -} - -// TokenCredential represents a credential capable of providing an OAuth token. -// Exported as azcore.TokenCredential. -type TokenCredential interface { - // GetToken requests an access token for the specified set of scopes. - GetToken(ctx context.Context, options TokenRequestOptions) (AccessToken, error) -} - -// DecodeByteArray will base-64 decode the provided string into v. -// Exported as runtime.DecodeByteArray() -func DecodeByteArray(s string, v *[]byte, format Base64Encoding) error { - if len(s) == 0 { - return nil - } - payload := string(s) - if payload[0] == '"' { - // remove surrounding quotes - payload = payload[1 : len(payload)-1] - } - switch format { - case Base64StdFormat: - decoded, err := base64.StdEncoding.DecodeString(payload) - if err == nil { - *v = decoded - return nil - } - return err - case Base64URLFormat: - // use raw encoding as URL format should not contain any '=' characters - decoded, err := base64.RawURLEncoding.DecodeString(payload) - if err == nil { - *v = decoded - return nil - } - return err - default: - return fmt.Errorf("unrecognized byte array format: %d", format) - } -} - -// KeyCredential contains an authentication key used to authenticate to an Azure service. -// Exported as azcore.KeyCredential. -type KeyCredential struct { - cred *keyCredential -} - -// NewKeyCredential creates a new instance of [KeyCredential] with the specified values. -// - key is the authentication key -func NewKeyCredential(key string) *KeyCredential { - return &KeyCredential{cred: newKeyCredential(key)} -} - -// Update replaces the existing key with the specified value. -func (k *KeyCredential) Update(key string) { - k.cred.Update(key) -} - -// SASCredential contains a shared access signature used to authenticate to an Azure service. -// Exported as azcore.SASCredential. -type SASCredential struct { - cred *keyCredential -} - -// NewSASCredential creates a new instance of [SASCredential] with the specified values. -// - sas is the shared access signature -func NewSASCredential(sas string) *SASCredential { - return &SASCredential{cred: newKeyCredential(sas)} -} - -// Update replaces the existing shared access signature with the specified value. -func (k *SASCredential) Update(sas string) { - k.cred.Update(sas) -} - -// KeyCredentialGet returns the key for cred. -func KeyCredentialGet(cred *KeyCredential) string { - return cred.cred.Get() -} - -// SASCredentialGet returns the shared access sig for cred. -func SASCredentialGet(cred *SASCredential) string { - return cred.cred.Get() -} - -type keyCredential struct { - key atomic.Value // string -} - -func newKeyCredential(key string) *keyCredential { - keyCred := keyCredential{} - keyCred.key.Store(key) - return &keyCred -} - -func (k *keyCredential) Get() string { - return k.key.Load().(string) -} - -func (k *keyCredential) Update(key string) { - k.key.Store(key) -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported/pipeline.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported/pipeline.go deleted file mode 100644 index e45f831ed2a4..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported/pipeline.go +++ /dev/null @@ -1,77 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package exported - -import ( - "errors" - "net/http" -) - -// Policy represents an extensibility point for the Pipeline that can mutate the specified -// Request and react to the received Response. -// Exported as policy.Policy. -type Policy interface { - // Do applies the policy to the specified Request. When implementing a Policy, mutate the - // request before calling req.Next() to move on to the next policy, and respond to the result - // before returning to the caller. - Do(req *Request) (*http.Response, error) -} - -// Pipeline represents a primitive for sending HTTP requests and receiving responses. -// Its behavior can be extended by specifying policies during construction. -// Exported as runtime.Pipeline. -type Pipeline struct { - policies []Policy -} - -// Transporter represents an HTTP pipeline transport used to send HTTP requests and receive responses. -// Exported as policy.Transporter. -type Transporter interface { - // Do sends the HTTP request and returns the HTTP response or error. - Do(req *http.Request) (*http.Response, error) -} - -// used to adapt a TransportPolicy to a Policy -type transportPolicy struct { - trans Transporter -} - -func (tp transportPolicy) Do(req *Request) (*http.Response, error) { - if tp.trans == nil { - return nil, errors.New("missing transporter") - } - resp, err := tp.trans.Do(req.Raw()) - if err != nil { - return nil, err - } else if resp == nil { - // there was no response and no error (rare but can happen) - // this ensures the retry policy will retry the request - return nil, errors.New("received nil response") - } - return resp, nil -} - -// NewPipeline creates a new Pipeline object from the specified Policies. -// Not directly exported, but used as part of runtime.NewPipeline(). -func NewPipeline(transport Transporter, policies ...Policy) Pipeline { - // transport policy must always be the last in the slice - policies = append(policies, transportPolicy{trans: transport}) - return Pipeline{ - policies: policies, - } -} - -// Do is called for each and every HTTP request. It passes the request through all -// the Policy objects (which can transform the Request's URL/query parameters/headers) -// and ultimately sends the transformed HTTP request over the network. -func (p Pipeline) Do(req *Request) (*http.Response, error) { - if req == nil { - return nil, errors.New("request cannot be nil") - } - req.policies = p.policies - return req.Next() -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported/request.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported/request.go deleted file mode 100644 index 3041984d9b1f..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported/request.go +++ /dev/null @@ -1,223 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package exported - -import ( - "context" - "encoding/base64" - "errors" - "fmt" - "io" - "net/http" - "reflect" - "strconv" - - "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared" -) - -// Base64Encoding is usesd to specify which base-64 encoder/decoder to use when -// encoding/decoding a slice of bytes to/from a string. -// Exported as runtime.Base64Encoding -type Base64Encoding int - -const ( - // Base64StdFormat uses base64.StdEncoding for encoding and decoding payloads. - Base64StdFormat Base64Encoding = 0 - - // Base64URLFormat uses base64.RawURLEncoding for encoding and decoding payloads. - Base64URLFormat Base64Encoding = 1 -) - -// EncodeByteArray will base-64 encode the byte slice v. -// Exported as runtime.EncodeByteArray() -func EncodeByteArray(v []byte, format Base64Encoding) string { - if format == Base64URLFormat { - return base64.RawURLEncoding.EncodeToString(v) - } - return base64.StdEncoding.EncodeToString(v) -} - -// Request is an abstraction over the creation of an HTTP request as it passes through the pipeline. -// Don't use this type directly, use NewRequest() instead. -// Exported as policy.Request. -type Request struct { - req *http.Request - body io.ReadSeekCloser - policies []Policy - values opValues -} - -type opValues map[reflect.Type]any - -// Set adds/changes a value -func (ov opValues) set(value any) { - ov[reflect.TypeOf(value)] = value -} - -// Get looks for a value set by SetValue first -func (ov opValues) get(value any) bool { - v, ok := ov[reflect.ValueOf(value).Elem().Type()] - if ok { - reflect.ValueOf(value).Elem().Set(reflect.ValueOf(v)) - } - return ok -} - -// NewRequest creates a new Request with the specified input. -// Exported as runtime.NewRequest(). -func NewRequest(ctx context.Context, httpMethod string, endpoint string) (*Request, error) { - req, err := http.NewRequestWithContext(ctx, httpMethod, endpoint, nil) - if err != nil { - return nil, err - } - if req.URL.Host == "" { - return nil, errors.New("no Host in request URL") - } - if !(req.URL.Scheme == "http" || req.URL.Scheme == "https") { - return nil, fmt.Errorf("unsupported protocol scheme %s", req.URL.Scheme) - } - return &Request{req: req}, nil -} - -// Body returns the original body specified when the Request was created. -func (req *Request) Body() io.ReadSeekCloser { - return req.body -} - -// Raw returns the underlying HTTP request. -func (req *Request) Raw() *http.Request { - return req.req -} - -// Next calls the next policy in the pipeline. -// If there are no more policies, nil and an error are returned. -// This method is intended to be called from pipeline policies. -// To send a request through a pipeline call Pipeline.Do(). -func (req *Request) Next() (*http.Response, error) { - if len(req.policies) == 0 { - return nil, errors.New("no more policies") - } - nextPolicy := req.policies[0] - nextReq := *req - nextReq.policies = nextReq.policies[1:] - return nextPolicy.Do(&nextReq) -} - -// SetOperationValue adds/changes a mutable key/value associated with a single operation. -func (req *Request) SetOperationValue(value any) { - if req.values == nil { - req.values = opValues{} - } - req.values.set(value) -} - -// OperationValue looks for a value set by SetOperationValue(). -func (req *Request) OperationValue(value any) bool { - if req.values == nil { - return false - } - return req.values.get(value) -} - -// SetBody sets the specified ReadSeekCloser as the HTTP request body, and sets Content-Type and Content-Length -// accordingly. If the ReadSeekCloser is nil or empty, Content-Length won't be set. If contentType is "", -// Content-Type won't be set, and if it was set, will be deleted. -// Use streaming.NopCloser to turn an io.ReadSeeker into an io.ReadSeekCloser. -func (req *Request) SetBody(body io.ReadSeekCloser, contentType string) error { - // clobber the existing Content-Type to preserve behavior - return SetBody(req, body, contentType, true) -} - -// RewindBody seeks the request's Body stream back to the beginning so it can be resent when retrying an operation. -func (req *Request) RewindBody() error { - if req.body != nil { - // Reset the stream back to the beginning and restore the body - _, err := req.body.Seek(0, io.SeekStart) - req.req.Body = req.body - return err - } - return nil -} - -// Close closes the request body. -func (req *Request) Close() error { - if req.body == nil { - return nil - } - return req.body.Close() -} - -// Clone returns a deep copy of the request with its context changed to ctx. -func (req *Request) Clone(ctx context.Context) *Request { - r2 := *req - r2.req = req.req.Clone(ctx) - return &r2 -} - -// WithContext returns a shallow copy of the request with its context changed to ctx. -func (req *Request) WithContext(ctx context.Context) *Request { - r2 := new(Request) - *r2 = *req - r2.req = r2.req.WithContext(ctx) - return r2 -} - -// not exported but dependent on Request - -// PolicyFunc is a type that implements the Policy interface. -// Use this type when implementing a stateless policy as a first-class function. -type PolicyFunc func(*Request) (*http.Response, error) - -// Do implements the Policy interface on policyFunc. -func (pf PolicyFunc) Do(req *Request) (*http.Response, error) { - return pf(req) -} - -// SetBody sets the specified ReadSeekCloser as the HTTP request body, and sets Content-Type and Content-Length accordingly. -// - req is the request to modify -// - body is the request body; if nil or empty, Content-Length won't be set -// - contentType is the value for the Content-Type header; if empty, Content-Type will be deleted -// - clobberContentType when true, will overwrite the existing value of Content-Type with contentType -func SetBody(req *Request, body io.ReadSeekCloser, contentType string, clobberContentType bool) error { - var err error - var size int64 - if body != nil { - size, err = body.Seek(0, io.SeekEnd) // Seek to the end to get the stream's size - if err != nil { - return err - } - } - if size == 0 { - // treat an empty stream the same as a nil one: assign req a nil body - body = nil - // RFC 9110 specifies a client shouldn't set Content-Length on a request containing no content - // (Del is a no-op when the header has no value) - req.req.Header.Del(shared.HeaderContentLength) - } else { - _, err = body.Seek(0, io.SeekStart) - if err != nil { - return err - } - req.req.Header.Set(shared.HeaderContentLength, strconv.FormatInt(size, 10)) - req.Raw().GetBody = func() (io.ReadCloser, error) { - _, err := body.Seek(0, io.SeekStart) // Seek back to the beginning of the stream - return body, err - } - } - // keep a copy of the body argument. this is to handle cases - // where req.Body is replaced, e.g. httputil.DumpRequest and friends. - req.body = body - req.req.Body = body - req.req.ContentLength = size - if contentType == "" { - // Del is a no-op when the header has no value - req.req.Header.Del(shared.HeaderContentType) - } else if req.req.Header.Get(shared.HeaderContentType) == "" || clobberContentType { - req.req.Header.Set(shared.HeaderContentType, contentType) - } - return nil -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported/response_error.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported/response_error.go deleted file mode 100644 index 08a95458730b..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported/response_error.go +++ /dev/null @@ -1,167 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package exported - -import ( - "bytes" - "encoding/json" - "fmt" - "net/http" - "regexp" - - "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/log" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared" - "github.com/Azure/azure-sdk-for-go/sdk/internal/exported" -) - -// NewResponseError creates a new *ResponseError from the provided HTTP response. -// Exported as runtime.NewResponseError(). -func NewResponseError(resp *http.Response) error { - // prefer the error code in the response header - if ec := resp.Header.Get(shared.HeaderXMSErrorCode); ec != "" { - return NewResponseErrorWithErrorCode(resp, ec) - } - - // if we didn't get x-ms-error-code, check in the response body - body, err := exported.Payload(resp, nil) - if err != nil { - // since we're not returning the ResponseError in this - // case we also don't want to write it to the log. - return err - } - - var errorCode string - if len(body) > 0 { - if fromJSON := extractErrorCodeJSON(body); fromJSON != "" { - errorCode = fromJSON - } else if fromXML := extractErrorCodeXML(body); fromXML != "" { - errorCode = fromXML - } - } - - return NewResponseErrorWithErrorCode(resp, errorCode) -} - -// NewResponseErrorWithErrorCode creates an *azcore.ResponseError from the provided HTTP response and errorCode. -// Exported as runtime.NewResponseErrorWithErrorCode(). -func NewResponseErrorWithErrorCode(resp *http.Response, errorCode string) error { - respErr := &ResponseError{ - ErrorCode: errorCode, - StatusCode: resp.StatusCode, - RawResponse: resp, - } - log.Write(log.EventResponseError, respErr.Error()) - return respErr -} - -func extractErrorCodeJSON(body []byte) string { - var rawObj map[string]any - if err := json.Unmarshal(body, &rawObj); err != nil { - // not a JSON object - return "" - } - - // check if this is a wrapped error, i.e. { "error": { ... } } - // if so then unwrap it - if wrapped, ok := rawObj["error"]; ok { - unwrapped, ok := wrapped.(map[string]any) - if !ok { - return "" - } - rawObj = unwrapped - } else if wrapped, ok := rawObj["odata.error"]; ok { - // check if this a wrapped odata error, i.e. { "odata.error": { ... } } - unwrapped, ok := wrapped.(map[string]any) - if !ok { - return "" - } - rawObj = unwrapped - } - - // now check for the error code - code, ok := rawObj["code"] - if !ok { - return "" - } - codeStr, ok := code.(string) - if !ok { - return "" - } - return codeStr -} - -func extractErrorCodeXML(body []byte) string { - // regular expression is much easier than dealing with the XML parser - rx := regexp.MustCompile(`<(?:\w+:)?[c|C]ode>\s*(\w+)\s*<\/(?:\w+:)?[c|C]ode>`) - res := rx.FindStringSubmatch(string(body)) - if len(res) != 2 { - return "" - } - // first submatch is the entire thing, second one is the captured error code - return res[1] -} - -// ResponseError is returned when a request is made to a service and -// the service returns a non-success HTTP status code. -// Use errors.As() to access this type in the error chain. -// Exported as azcore.ResponseError. -type ResponseError struct { - // ErrorCode is the error code returned by the resource provider if available. - ErrorCode string - - // StatusCode is the HTTP status code as defined in https://pkg.go.dev/net/http#pkg-constants. - StatusCode int - - // RawResponse is the underlying HTTP response. - RawResponse *http.Response -} - -// Error implements the error interface for type ResponseError. -// Note that the message contents are not contractual and can change over time. -func (e *ResponseError) Error() string { - const separator = "--------------------------------------------------------------------------------" - // write the request method and URL with response status code - msg := &bytes.Buffer{} - if e.RawResponse != nil { - if e.RawResponse.Request != nil { - fmt.Fprintf(msg, "%s %s://%s%s\n", e.RawResponse.Request.Method, e.RawResponse.Request.URL.Scheme, e.RawResponse.Request.URL.Host, e.RawResponse.Request.URL.Path) - } else { - fmt.Fprintln(msg, "Request information not available") - } - fmt.Fprintln(msg, separator) - fmt.Fprintf(msg, "RESPONSE %d: %s\n", e.RawResponse.StatusCode, e.RawResponse.Status) - } else { - fmt.Fprintln(msg, "Missing RawResponse") - fmt.Fprintln(msg, separator) - } - if e.ErrorCode != "" { - fmt.Fprintf(msg, "ERROR CODE: %s\n", e.ErrorCode) - } else { - fmt.Fprintln(msg, "ERROR CODE UNAVAILABLE") - } - if e.RawResponse != nil { - fmt.Fprintln(msg, separator) - body, err := exported.Payload(e.RawResponse, nil) - if err != nil { - // this really shouldn't fail at this point as the response - // body is already cached (it was read in NewResponseError) - fmt.Fprintf(msg, "Error reading response body: %v", err) - } else if len(body) > 0 { - if err := json.Indent(msg, body, "", " "); err != nil { - // failed to pretty-print so just dump it verbatim - fmt.Fprint(msg, string(body)) - } - // the standard library doesn't have a pretty-printer for XML - fmt.Fprintln(msg) - } else { - fmt.Fprintln(msg, "Response contained no body") - } - } - fmt.Fprintln(msg, separator) - - return msg.String() -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/log/log.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/log/log.go deleted file mode 100644 index 6fc6d1400e7f..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/log/log.go +++ /dev/null @@ -1,50 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -// This is an internal helper package to combine the complete logging APIs. -package log - -import ( - azlog "github.com/Azure/azure-sdk-for-go/sdk/azcore/log" - "github.com/Azure/azure-sdk-for-go/sdk/internal/log" -) - -type Event = log.Event - -const ( - EventRequest = azlog.EventRequest - EventResponse = azlog.EventResponse - EventResponseError = azlog.EventResponseError - EventRetryPolicy = azlog.EventRetryPolicy - EventLRO = azlog.EventLRO -) - -// Write invokes the underlying listener with the specified event and message. -// If the event shouldn't be logged or there is no listener then Write does nothing. -func Write(cls log.Event, msg string) { - log.Write(cls, msg) -} - -// Writef invokes the underlying listener with the specified event and formatted message. -// If the event shouldn't be logged or there is no listener then Writef does nothing. -func Writef(cls log.Event, format string, a ...any) { - log.Writef(cls, format, a...) -} - -// SetListener will set the Logger to write to the specified listener. -func SetListener(lst func(Event, string)) { - log.SetListener(lst) -} - -// Should returns true if the specified log event should be written to the log. -// By default all log events will be logged. Call SetEvents() to limit -// the log events for logging. -// If no listener has been set this will return false. -// Calling this method is useful when the message to log is computationally expensive -// and you want to avoid the overhead if its log event is not enabled. -func Should(cls log.Event) bool { - return log.Should(cls) -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/async/async.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/async/async.go deleted file mode 100644 index ccd4794e9e9b..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/async/async.go +++ /dev/null @@ -1,159 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package async - -import ( - "context" - "errors" - "fmt" - "net/http" - - "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/log" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared" - "github.com/Azure/azure-sdk-for-go/sdk/internal/poller" -) - -// see https://github.com/Azure/azure-resource-manager-rpc/blob/master/v1.0/async-api-reference.md - -// Applicable returns true if the LRO is using Azure-AsyncOperation. -func Applicable(resp *http.Response) bool { - return resp.Header.Get(shared.HeaderAzureAsync) != "" -} - -// CanResume returns true if the token can rehydrate this poller type. -func CanResume(token map[string]any) bool { - _, ok := token["asyncURL"] - return ok -} - -// Poller is an LRO poller that uses the Azure-AsyncOperation pattern. -type Poller[T any] struct { - pl exported.Pipeline - - resp *http.Response - - // The URL from Azure-AsyncOperation header. - AsyncURL string `json:"asyncURL"` - - // The URL from Location header. - LocURL string `json:"locURL"` - - // The URL from the initial LRO request. - OrigURL string `json:"origURL"` - - // The HTTP method from the initial LRO request. - Method string `json:"method"` - - // The value of final-state-via from swagger, can be the empty string. - FinalState pollers.FinalStateVia `json:"finalState"` - - // The LRO's current state. - CurState string `json:"state"` -} - -// New creates a new Poller from the provided initial response and final-state type. -// Pass nil for response to create an empty Poller for rehydration. -func New[T any](pl exported.Pipeline, resp *http.Response, finalState pollers.FinalStateVia) (*Poller[T], error) { - if resp == nil { - log.Write(log.EventLRO, "Resuming Azure-AsyncOperation poller.") - return &Poller[T]{pl: pl}, nil - } - log.Write(log.EventLRO, "Using Azure-AsyncOperation poller.") - asyncURL := resp.Header.Get(shared.HeaderAzureAsync) - if asyncURL == "" { - return nil, errors.New("response is missing Azure-AsyncOperation header") - } - if !poller.IsValidURL(asyncURL) { - return nil, fmt.Errorf("invalid polling URL %s", asyncURL) - } - // check for provisioning state. if the operation is a RELO - // and terminates synchronously this will prevent extra polling. - // it's ok if there's no provisioning state. - state, _ := poller.GetProvisioningState(resp) - if state == "" { - state = poller.StatusInProgress - } - p := &Poller[T]{ - pl: pl, - resp: resp, - AsyncURL: asyncURL, - LocURL: resp.Header.Get(shared.HeaderLocation), - OrigURL: resp.Request.URL.String(), - Method: resp.Request.Method, - FinalState: finalState, - CurState: state, - } - return p, nil -} - -// Done returns true if the LRO is in a terminal state. -func (p *Poller[T]) Done() bool { - return poller.IsTerminalState(p.CurState) -} - -// Poll retrieves the current state of the LRO. -func (p *Poller[T]) Poll(ctx context.Context) (*http.Response, error) { - err := pollers.PollHelper(ctx, p.AsyncURL, p.pl, func(resp *http.Response) (string, error) { - if !poller.StatusCodeValid(resp) { - p.resp = resp - return "", exported.NewResponseError(resp) - } - state, err := poller.GetStatus(resp) - if err != nil { - return "", err - } else if state == "" { - return "", errors.New("the response did not contain a status") - } - p.resp = resp - p.CurState = state - return p.CurState, nil - }) - if err != nil { - return nil, err - } - return p.resp, nil -} - -func (p *Poller[T]) Result(ctx context.Context, out *T) error { - if p.resp.StatusCode == http.StatusNoContent { - return nil - } else if poller.Failed(p.CurState) { - return exported.NewResponseError(p.resp) - } - var req *exported.Request - var err error - if p.Method == http.MethodPatch || p.Method == http.MethodPut { - // for PATCH and PUT, the final GET is on the original resource URL - req, err = exported.NewRequest(ctx, http.MethodGet, p.OrigURL) - } else if p.Method == http.MethodPost { - if p.FinalState == pollers.FinalStateViaAzureAsyncOp { - // no final GET required - } else if p.FinalState == pollers.FinalStateViaOriginalURI { - req, err = exported.NewRequest(ctx, http.MethodGet, p.OrigURL) - } else if p.LocURL != "" { - // ideally FinalState would be set to "location" but it isn't always. - // must check last due to more permissive condition. - req, err = exported.NewRequest(ctx, http.MethodGet, p.LocURL) - } - } - if err != nil { - return err - } - - // if a final GET request has been created, execute it - if req != nil { - resp, err := p.pl.Do(req) - if err != nil { - return err - } - p.resp = resp - } - - return pollers.ResultHelper(p.resp, poller.Failed(p.CurState), out) -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/body/body.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/body/body.go deleted file mode 100644 index 0d781b31d0c7..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/body/body.go +++ /dev/null @@ -1,135 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package body - -import ( - "context" - "errors" - "net/http" - - "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/log" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers" - "github.com/Azure/azure-sdk-for-go/sdk/internal/poller" -) - -// Kind is the identifier of this type in a resume token. -const kind = "body" - -// Applicable returns true if the LRO is using no headers, just provisioning state. -// This is only applicable to PATCH and PUT methods and assumes no polling headers. -func Applicable(resp *http.Response) bool { - // we can't check for absense of headers due to some misbehaving services - // like redis that return a Location header but don't actually use that protocol - return resp.Request.Method == http.MethodPatch || resp.Request.Method == http.MethodPut -} - -// CanResume returns true if the token can rehydrate this poller type. -func CanResume(token map[string]any) bool { - t, ok := token["type"] - if !ok { - return false - } - tt, ok := t.(string) - if !ok { - return false - } - return tt == kind -} - -// Poller is an LRO poller that uses the Body pattern. -type Poller[T any] struct { - pl exported.Pipeline - - resp *http.Response - - // The poller's type, used for resume token processing. - Type string `json:"type"` - - // The URL for polling. - PollURL string `json:"pollURL"` - - // The LRO's current state. - CurState string `json:"state"` -} - -// New creates a new Poller from the provided initial response. -// Pass nil for response to create an empty Poller for rehydration. -func New[T any](pl exported.Pipeline, resp *http.Response) (*Poller[T], error) { - if resp == nil { - log.Write(log.EventLRO, "Resuming Body poller.") - return &Poller[T]{pl: pl}, nil - } - log.Write(log.EventLRO, "Using Body poller.") - p := &Poller[T]{ - pl: pl, - resp: resp, - Type: kind, - PollURL: resp.Request.URL.String(), - } - // default initial state to InProgress. depending on the HTTP - // status code and provisioning state, we might change the value. - curState := poller.StatusInProgress - provState, err := poller.GetProvisioningState(resp) - if err != nil && !errors.Is(err, poller.ErrNoBody) { - return nil, err - } - if resp.StatusCode == http.StatusCreated && provState != "" { - // absense of provisioning state is ok for a 201, means the operation is in progress - curState = provState - } else if resp.StatusCode == http.StatusOK { - if provState != "" { - curState = provState - } else if provState == "" { - // for a 200, absense of provisioning state indicates success - curState = poller.StatusSucceeded - } - } else if resp.StatusCode == http.StatusNoContent { - curState = poller.StatusSucceeded - } - p.CurState = curState - return p, nil -} - -func (p *Poller[T]) Done() bool { - return poller.IsTerminalState(p.CurState) -} - -func (p *Poller[T]) Poll(ctx context.Context) (*http.Response, error) { - err := pollers.PollHelper(ctx, p.PollURL, p.pl, func(resp *http.Response) (string, error) { - if !poller.StatusCodeValid(resp) { - p.resp = resp - return "", exported.NewResponseError(resp) - } - if resp.StatusCode == http.StatusNoContent { - p.resp = resp - p.CurState = poller.StatusSucceeded - return p.CurState, nil - } - state, err := poller.GetProvisioningState(resp) - if errors.Is(err, poller.ErrNoBody) { - // a missing response body in non-204 case is an error - return "", err - } else if state == "" { - // a response body without provisioning state is considered terminal success - state = poller.StatusSucceeded - } else if err != nil { - return "", err - } - p.resp = resp - p.CurState = state - return p.CurState, nil - }) - if err != nil { - return nil, err - } - return p.resp, nil -} - -func (p *Poller[T]) Result(ctx context.Context, out *T) error { - return pollers.ResultHelper(p.resp, poller.Failed(p.CurState), out) -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/fake/fake.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/fake/fake.go deleted file mode 100644 index 51aede8a2b8f..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/fake/fake.go +++ /dev/null @@ -1,133 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package fake - -import ( - "context" - "errors" - "fmt" - "net/http" - "strings" - - "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/log" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared" - "github.com/Azure/azure-sdk-for-go/sdk/internal/poller" -) - -// Applicable returns true if the LRO is a fake. -func Applicable(resp *http.Response) bool { - return resp.Header.Get(shared.HeaderFakePollerStatus) != "" -} - -// CanResume returns true if the token can rehydrate this poller type. -func CanResume(token map[string]any) bool { - _, ok := token["fakeURL"] - return ok -} - -// Poller is an LRO poller that uses the Core-Fake-Poller pattern. -type Poller[T any] struct { - pl exported.Pipeline - - resp *http.Response - - // The API name from CtxAPINameKey - APIName string `json:"apiName"` - - // The URL from Core-Fake-Poller header. - FakeURL string `json:"fakeURL"` - - // The LRO's current state. - FakeStatus string `json:"status"` -} - -// lroStatusURLSuffix is the URL path suffix for a faked LRO. -const lroStatusURLSuffix = "/get/fake/status" - -// New creates a new Poller from the provided initial response. -// Pass nil for response to create an empty Poller for rehydration. -func New[T any](pl exported.Pipeline, resp *http.Response) (*Poller[T], error) { - if resp == nil { - log.Write(log.EventLRO, "Resuming Core-Fake-Poller poller.") - return &Poller[T]{pl: pl}, nil - } - - log.Write(log.EventLRO, "Using Core-Fake-Poller poller.") - fakeStatus := resp.Header.Get(shared.HeaderFakePollerStatus) - if fakeStatus == "" { - return nil, errors.New("response is missing Fake-Poller-Status header") - } - - ctxVal := resp.Request.Context().Value(shared.CtxAPINameKey{}) - if ctxVal == nil { - return nil, errors.New("missing value for CtxAPINameKey") - } - - apiName, ok := ctxVal.(string) - if !ok { - return nil, fmt.Errorf("expected string for CtxAPINameKey, the type was %T", ctxVal) - } - - qp := "" - if resp.Request.URL.RawQuery != "" { - qp = "?" + resp.Request.URL.RawQuery - } - - p := &Poller[T]{ - pl: pl, - resp: resp, - APIName: apiName, - // NOTE: any changes to this path format MUST be reflected in SanitizePollerPath() - FakeURL: fmt.Sprintf("%s://%s%s%s%s", resp.Request.URL.Scheme, resp.Request.URL.Host, resp.Request.URL.Path, lroStatusURLSuffix, qp), - FakeStatus: fakeStatus, - } - return p, nil -} - -// Done returns true if the LRO is in a terminal state. -func (p *Poller[T]) Done() bool { - return poller.IsTerminalState(p.FakeStatus) -} - -// Poll retrieves the current state of the LRO. -func (p *Poller[T]) Poll(ctx context.Context) (*http.Response, error) { - ctx = context.WithValue(ctx, shared.CtxAPINameKey{}, p.APIName) - err := pollers.PollHelper(ctx, p.FakeURL, p.pl, func(resp *http.Response) (string, error) { - if !poller.StatusCodeValid(resp) { - p.resp = resp - return "", exported.NewResponseError(resp) - } - fakeStatus := resp.Header.Get(shared.HeaderFakePollerStatus) - if fakeStatus == "" { - return "", errors.New("response is missing Fake-Poller-Status header") - } - p.resp = resp - p.FakeStatus = fakeStatus - return p.FakeStatus, nil - }) - if err != nil { - return nil, err - } - return p.resp, nil -} - -func (p *Poller[T]) Result(ctx context.Context, out *T) error { - if p.resp.StatusCode == http.StatusNoContent { - return nil - } else if poller.Failed(p.FakeStatus) { - return exported.NewResponseError(p.resp) - } - - return pollers.ResultHelper(p.resp, poller.Failed(p.FakeStatus), out) -} - -// SanitizePollerPath removes any fake-appended suffix from a URL's path. -func SanitizePollerPath(path string) string { - return strings.TrimSuffix(path, lroStatusURLSuffix) -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/loc/loc.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/loc/loc.go deleted file mode 100644 index 7a56c5211b71..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/loc/loc.go +++ /dev/null @@ -1,123 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package loc - -import ( - "context" - "errors" - "fmt" - "net/http" - - "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/log" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared" - "github.com/Azure/azure-sdk-for-go/sdk/internal/poller" -) - -// Kind is the identifier of this type in a resume token. -const kind = "loc" - -// Applicable returns true if the LRO is using Location. -func Applicable(resp *http.Response) bool { - return resp.Header.Get(shared.HeaderLocation) != "" -} - -// CanResume returns true if the token can rehydrate this poller type. -func CanResume(token map[string]any) bool { - t, ok := token["type"] - if !ok { - return false - } - tt, ok := t.(string) - if !ok { - return false - } - return tt == kind -} - -// Poller is an LRO poller that uses the Location pattern. -type Poller[T any] struct { - pl exported.Pipeline - resp *http.Response - - Type string `json:"type"` - PollURL string `json:"pollURL"` - CurState string `json:"state"` -} - -// New creates a new Poller from the provided initial response. -// Pass nil for response to create an empty Poller for rehydration. -func New[T any](pl exported.Pipeline, resp *http.Response) (*Poller[T], error) { - if resp == nil { - log.Write(log.EventLRO, "Resuming Location poller.") - return &Poller[T]{pl: pl}, nil - } - log.Write(log.EventLRO, "Using Location poller.") - locURL := resp.Header.Get(shared.HeaderLocation) - if locURL == "" { - return nil, errors.New("response is missing Location header") - } - if !poller.IsValidURL(locURL) { - return nil, fmt.Errorf("invalid polling URL %s", locURL) - } - // check for provisioning state. if the operation is a RELO - // and terminates synchronously this will prevent extra polling. - // it's ok if there's no provisioning state. - state, _ := poller.GetProvisioningState(resp) - if state == "" { - state = poller.StatusInProgress - } - return &Poller[T]{ - pl: pl, - resp: resp, - Type: kind, - PollURL: locURL, - CurState: state, - }, nil -} - -func (p *Poller[T]) Done() bool { - return poller.IsTerminalState(p.CurState) -} - -func (p *Poller[T]) Poll(ctx context.Context) (*http.Response, error) { - err := pollers.PollHelper(ctx, p.PollURL, p.pl, func(resp *http.Response) (string, error) { - // location polling can return an updated polling URL - if h := resp.Header.Get(shared.HeaderLocation); h != "" { - p.PollURL = h - } - // if provisioning state is available, use that. this is only - // for some ARM LRO scenarios (e.g. DELETE with a Location header) - // so if it's missing then use HTTP status code. - provState, _ := poller.GetProvisioningState(resp) - p.resp = resp - if provState != "" { - p.CurState = provState - } else if resp.StatusCode == http.StatusAccepted { - p.CurState = poller.StatusInProgress - } else if resp.StatusCode > 199 && resp.StatusCode < 300 { - // any 2xx other than a 202 indicates success - p.CurState = poller.StatusSucceeded - } else if pollers.IsNonTerminalHTTPStatusCode(resp) { - // the request timed out or is being throttled. - // DO NOT include this as a terminal failure. preserve - // the existing state and return the response. - } else { - p.CurState = poller.StatusFailed - } - return p.CurState, nil - }) - if err != nil { - return nil, err - } - return p.resp, nil -} - -func (p *Poller[T]) Result(ctx context.Context, out *T) error { - return pollers.ResultHelper(p.resp, poller.Failed(p.CurState), out) -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/op/op.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/op/op.go deleted file mode 100644 index ac1c0efb5acf..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/op/op.go +++ /dev/null @@ -1,145 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package op - -import ( - "context" - "errors" - "fmt" - "net/http" - - "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/log" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared" - "github.com/Azure/azure-sdk-for-go/sdk/internal/poller" -) - -// Applicable returns true if the LRO is using Operation-Location. -func Applicable(resp *http.Response) bool { - return resp.Header.Get(shared.HeaderOperationLocation) != "" -} - -// CanResume returns true if the token can rehydrate this poller type. -func CanResume(token map[string]any) bool { - _, ok := token["oplocURL"] - return ok -} - -// Poller is an LRO poller that uses the Operation-Location pattern. -type Poller[T any] struct { - pl exported.Pipeline - resp *http.Response - - OpLocURL string `json:"oplocURL"` - LocURL string `json:"locURL"` - OrigURL string `json:"origURL"` - Method string `json:"method"` - FinalState pollers.FinalStateVia `json:"finalState"` - CurState string `json:"state"` -} - -// New creates a new Poller from the provided initial response. -// Pass nil for response to create an empty Poller for rehydration. -func New[T any](pl exported.Pipeline, resp *http.Response, finalState pollers.FinalStateVia) (*Poller[T], error) { - if resp == nil { - log.Write(log.EventLRO, "Resuming Operation-Location poller.") - return &Poller[T]{pl: pl}, nil - } - log.Write(log.EventLRO, "Using Operation-Location poller.") - opURL := resp.Header.Get(shared.HeaderOperationLocation) - if opURL == "" { - return nil, errors.New("response is missing Operation-Location header") - } - if !poller.IsValidURL(opURL) { - return nil, fmt.Errorf("invalid Operation-Location URL %s", opURL) - } - locURL := resp.Header.Get(shared.HeaderLocation) - // Location header is optional - if locURL != "" && !poller.IsValidURL(locURL) { - return nil, fmt.Errorf("invalid Location URL %s", locURL) - } - // default initial state to InProgress. if the - // service sent us a status then use that instead. - curState := poller.StatusInProgress - status, err := poller.GetStatus(resp) - if err != nil && !errors.Is(err, poller.ErrNoBody) { - return nil, err - } - if status != "" { - curState = status - } - - return &Poller[T]{ - pl: pl, - resp: resp, - OpLocURL: opURL, - LocURL: locURL, - OrigURL: resp.Request.URL.String(), - Method: resp.Request.Method, - FinalState: finalState, - CurState: curState, - }, nil -} - -func (p *Poller[T]) Done() bool { - return poller.IsTerminalState(p.CurState) -} - -func (p *Poller[T]) Poll(ctx context.Context) (*http.Response, error) { - err := pollers.PollHelper(ctx, p.OpLocURL, p.pl, func(resp *http.Response) (string, error) { - if !poller.StatusCodeValid(resp) { - p.resp = resp - return "", exported.NewResponseError(resp) - } - state, err := poller.GetStatus(resp) - if err != nil { - return "", err - } else if state == "" { - return "", errors.New("the response did not contain a status") - } - p.resp = resp - p.CurState = state - return p.CurState, nil - }) - if err != nil { - return nil, err - } - return p.resp, nil -} - -func (p *Poller[T]) Result(ctx context.Context, out *T) error { - var req *exported.Request - var err error - if p.FinalState == pollers.FinalStateViaLocation && p.LocURL != "" { - req, err = exported.NewRequest(ctx, http.MethodGet, p.LocURL) - } else if p.FinalState == pollers.FinalStateViaOpLocation && p.Method == http.MethodPost { - // no final GET required, terminal response should have it - } else if rl, rlErr := poller.GetResourceLocation(p.resp); rlErr != nil && !errors.Is(rlErr, poller.ErrNoBody) { - return rlErr - } else if rl != "" { - req, err = exported.NewRequest(ctx, http.MethodGet, rl) - } else if p.Method == http.MethodPatch || p.Method == http.MethodPut { - req, err = exported.NewRequest(ctx, http.MethodGet, p.OrigURL) - } else if p.Method == http.MethodPost && p.LocURL != "" { - req, err = exported.NewRequest(ctx, http.MethodGet, p.LocURL) - } - if err != nil { - return err - } - - // if a final GET request has been created, execute it - if req != nil { - resp, err := p.pl.Do(req) - if err != nil { - return err - } - p.resp = resp - } - - return pollers.ResultHelper(p.resp, poller.Failed(p.CurState), out) -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/poller.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/poller.go deleted file mode 100644 index 37ed647f4e0d..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/poller.go +++ /dev/null @@ -1,24 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package pollers - -// FinalStateVia is the enumerated type for the possible final-state-via values. -type FinalStateVia string - -const ( - // FinalStateViaAzureAsyncOp indicates the final payload comes from the Azure-AsyncOperation URL. - FinalStateViaAzureAsyncOp FinalStateVia = "azure-async-operation" - - // FinalStateViaLocation indicates the final payload comes from the Location URL. - FinalStateViaLocation FinalStateVia = "location" - - // FinalStateViaOriginalURI indicates the final payload comes from the original URL. - FinalStateViaOriginalURI FinalStateVia = "original-uri" - - // FinalStateViaOpLocation indicates the final payload comes from the Operation-Location URL. - FinalStateViaOpLocation FinalStateVia = "operation-location" -) diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/util.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/util.go deleted file mode 100644 index eb3cf651db03..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/util.go +++ /dev/null @@ -1,200 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package pollers - -import ( - "context" - "encoding/json" - "errors" - "fmt" - "net/http" - "reflect" - - azexported "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/log" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared" - "github.com/Azure/azure-sdk-for-go/sdk/internal/exported" - "github.com/Azure/azure-sdk-for-go/sdk/internal/poller" -) - -// getTokenTypeName creates a type name from the type parameter T. -func getTokenTypeName[T any]() (string, error) { - tt := shared.TypeOfT[T]() - var n string - if tt.Kind() == reflect.Pointer { - n = "*" - tt = tt.Elem() - } - n += tt.Name() - if n == "" { - return "", errors.New("nameless types are not allowed") - } - return n, nil -} - -type resumeTokenWrapper[T any] struct { - Type string `json:"type"` - Token T `json:"token"` -} - -// NewResumeToken creates a resume token from the specified type. -// An error is returned if the generic type has no name (e.g. struct{}). -func NewResumeToken[TResult, TSource any](from TSource) (string, error) { - n, err := getTokenTypeName[TResult]() - if err != nil { - return "", err - } - b, err := json.Marshal(resumeTokenWrapper[TSource]{ - Type: n, - Token: from, - }) - if err != nil { - return "", err - } - return string(b), nil -} - -// ExtractToken returns the poller-specific token information from the provided token value. -func ExtractToken(token string) ([]byte, error) { - raw := map[string]json.RawMessage{} - if err := json.Unmarshal([]byte(token), &raw); err != nil { - return nil, err - } - // this is dependent on the type resumeTokenWrapper[T] - tk, ok := raw["token"] - if !ok { - return nil, errors.New("missing token value") - } - return tk, nil -} - -// IsTokenValid returns an error if the specified token isn't applicable for generic type T. -func IsTokenValid[T any](token string) error { - raw := map[string]any{} - if err := json.Unmarshal([]byte(token), &raw); err != nil { - return err - } - t, ok := raw["type"] - if !ok { - return errors.New("missing type value") - } - tt, ok := t.(string) - if !ok { - return fmt.Errorf("invalid type format %T", t) - } - n, err := getTokenTypeName[T]() - if err != nil { - return err - } - if tt != n { - return fmt.Errorf("cannot resume from this poller token. token is for type %s, not %s", tt, n) - } - return nil -} - -// used if the operation synchronously completed -type NopPoller[T any] struct { - resp *http.Response - result T -} - -// NewNopPoller creates a NopPoller from the provided response. -// It unmarshals the response body into an instance of T. -func NewNopPoller[T any](resp *http.Response) (*NopPoller[T], error) { - np := &NopPoller[T]{resp: resp} - if resp.StatusCode == http.StatusNoContent { - return np, nil - } - payload, err := exported.Payload(resp, nil) - if err != nil { - return nil, err - } - if len(payload) == 0 { - return np, nil - } - if err = json.Unmarshal(payload, &np.result); err != nil { - return nil, err - } - return np, nil -} - -func (*NopPoller[T]) Done() bool { - return true -} - -func (p *NopPoller[T]) Poll(context.Context) (*http.Response, error) { - return p.resp, nil -} - -func (p *NopPoller[T]) Result(ctx context.Context, out *T) error { - *out = p.result - return nil -} - -// PollHelper creates and executes the request, calling update() with the response. -// If the request fails, the update func is not called. -// The update func returns the state of the operation for logging purposes or an error -// if it fails to extract the required state from the response. -func PollHelper(ctx context.Context, endpoint string, pl azexported.Pipeline, update func(resp *http.Response) (string, error)) error { - req, err := azexported.NewRequest(ctx, http.MethodGet, endpoint) - if err != nil { - return err - } - resp, err := pl.Do(req) - if err != nil { - return err - } - state, err := update(resp) - if err != nil { - return err - } - log.Writef(log.EventLRO, "State %s", state) - return nil -} - -// ResultHelper processes the response as success or failure. -// In the success case, it unmarshals the payload into either a new instance of T or out. -// In the failure case, it creates an *azcore.Response error from the response. -func ResultHelper[T any](resp *http.Response, failed bool, out *T) error { - // short-circuit the simple success case with no response body to unmarshal - if resp.StatusCode == http.StatusNoContent { - return nil - } - - defer resp.Body.Close() - if !poller.StatusCodeValid(resp) || failed { - // the LRO failed. unmarshall the error and update state - return azexported.NewResponseError(resp) - } - - // success case - payload, err := exported.Payload(resp, nil) - if err != nil { - return err - } - if len(payload) == 0 { - return nil - } - - if err = json.Unmarshal(payload, out); err != nil { - return err - } - return nil -} - -// IsNonTerminalHTTPStatusCode returns true if the HTTP status code should be -// considered non-terminal thus eligible for retry. -func IsNonTerminalHTTPStatusCode(resp *http.Response) bool { - return exported.HasStatusCode(resp, - http.StatusRequestTimeout, // 408 - http.StatusTooManyRequests, // 429 - http.StatusInternalServerError, // 500 - http.StatusBadGateway, // 502 - http.StatusServiceUnavailable, // 503 - http.StatusGatewayTimeout, // 504 - ) -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared/constants.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared/constants.go deleted file mode 100644 index 03691cbf024c..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared/constants.go +++ /dev/null @@ -1,44 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package shared - -const ( - ContentTypeAppJSON = "application/json" - ContentTypeAppXML = "application/xml" - ContentTypeTextPlain = "text/plain" -) - -const ( - HeaderAuthorization = "Authorization" - HeaderAuxiliaryAuthorization = "x-ms-authorization-auxiliary" - HeaderAzureAsync = "Azure-AsyncOperation" - HeaderContentLength = "Content-Length" - HeaderContentType = "Content-Type" - HeaderFakePollerStatus = "Fake-Poller-Status" - HeaderLocation = "Location" - HeaderOperationLocation = "Operation-Location" - HeaderRetryAfter = "Retry-After" - HeaderRetryAfterMS = "Retry-After-Ms" - HeaderUserAgent = "User-Agent" - HeaderWWWAuthenticate = "WWW-Authenticate" - HeaderXMSClientRequestID = "x-ms-client-request-id" - HeaderXMSRequestID = "x-ms-request-id" - HeaderXMSErrorCode = "x-ms-error-code" - HeaderXMSRetryAfterMS = "x-ms-retry-after-ms" -) - -const BearerTokenPrefix = "Bearer " - -const TracingNamespaceAttrName = "az.namespace" - -const ( - // Module is the name of the calling module used in telemetry data. - Module = "azcore" - - // Version is the semantic version (see http://semver.org) of this module. - Version = "v1.11.1" -) diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared/shared.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared/shared.go deleted file mode 100644 index d3da2c5fdfa3..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared/shared.go +++ /dev/null @@ -1,149 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package shared - -import ( - "context" - "fmt" - "net/http" - "reflect" - "regexp" - "strconv" - "time" -) - -// NOTE: when adding a new context key type, it likely needs to be -// added to the deny-list of key types in ContextWithDeniedValues - -// CtxWithHTTPHeaderKey is used as a context key for adding/retrieving http.Header. -type CtxWithHTTPHeaderKey struct{} - -// CtxWithRetryOptionsKey is used as a context key for adding/retrieving RetryOptions. -type CtxWithRetryOptionsKey struct{} - -// CtxWithCaptureResponse is used as a context key for retrieving the raw response. -type CtxWithCaptureResponse struct{} - -// CtxWithTracingTracer is used as a context key for adding/retrieving tracing.Tracer. -type CtxWithTracingTracer struct{} - -// CtxAPINameKey is used as a context key for adding/retrieving the API name. -type CtxAPINameKey struct{} - -// Delay waits for the duration to elapse or the context to be cancelled. -func Delay(ctx context.Context, delay time.Duration) error { - select { - case <-time.After(delay): - return nil - case <-ctx.Done(): - return ctx.Err() - } -} - -// RetryAfter returns non-zero if the response contains one of the headers with a "retry after" value. -// Headers are checked in the following order: retry-after-ms, x-ms-retry-after-ms, retry-after -func RetryAfter(resp *http.Response) time.Duration { - if resp == nil { - return 0 - } - - type retryData struct { - header string - units time.Duration - - // custom is used when the regular algorithm failed and is optional. - // the returned duration is used verbatim (units is not applied). - custom func(string) time.Duration - } - - nop := func(string) time.Duration { return 0 } - - // the headers are listed in order of preference - retries := []retryData{ - { - header: HeaderRetryAfterMS, - units: time.Millisecond, - custom: nop, - }, - { - header: HeaderXMSRetryAfterMS, - units: time.Millisecond, - custom: nop, - }, - { - header: HeaderRetryAfter, - units: time.Second, - - // retry-after values are expressed in either number of - // seconds or an HTTP-date indicating when to try again - custom: func(ra string) time.Duration { - t, err := time.Parse(time.RFC1123, ra) - if err != nil { - return 0 - } - return time.Until(t) - }, - }, - } - - for _, retry := range retries { - v := resp.Header.Get(retry.header) - if v == "" { - continue - } - if retryAfter, _ := strconv.Atoi(v); retryAfter > 0 { - return time.Duration(retryAfter) * retry.units - } else if d := retry.custom(v); d > 0 { - return d - } - } - - return 0 -} - -// TypeOfT returns the type of the generic type param. -func TypeOfT[T any]() reflect.Type { - // you can't, at present, obtain the type of - // a type parameter, so this is the trick - return reflect.TypeOf((*T)(nil)).Elem() -} - -// TransportFunc is a helper to use a first-class func to satisfy the Transporter interface. -type TransportFunc func(*http.Request) (*http.Response, error) - -// Do implements the Transporter interface for the TransportFunc type. -func (pf TransportFunc) Do(req *http.Request) (*http.Response, error) { - return pf(req) -} - -// ValidateModVer verifies that moduleVersion is a valid semver 2.0 string. -func ValidateModVer(moduleVersion string) error { - modVerRegx := regexp.MustCompile(`^v\d+\.\d+\.\d+(?:-[a-zA-Z0-9_.-]+)?$`) - if !modVerRegx.MatchString(moduleVersion) { - return fmt.Errorf("malformed moduleVersion param value %s", moduleVersion) - } - return nil -} - -// ContextWithDeniedValues wraps an existing [context.Context], denying access to certain context values. -// Pipeline policies that create new requests to be sent down their own pipeline MUST wrap the caller's -// context with an instance of this type. This is to prevent context values from flowing across disjoint -// requests which can have unintended side-effects. -type ContextWithDeniedValues struct { - context.Context -} - -// Value implements part of the [context.Context] interface. -// It acts as a deny-list for certain context keys. -func (c *ContextWithDeniedValues) Value(key any) any { - switch key.(type) { - case CtxAPINameKey, CtxWithCaptureResponse, CtxWithHTTPHeaderKey, CtxWithRetryOptionsKey, CtxWithTracingTracer: - return nil - default: - return c.Context.Value(key) - } -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/log/doc.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/log/doc.go deleted file mode 100644 index 2f3901bff3c4..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/log/doc.go +++ /dev/null @@ -1,10 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright 2017 Microsoft Corporation. All rights reserved. -// Use of this source code is governed by an MIT -// license that can be found in the LICENSE file. - -// Package log contains functionality for configuring logging behavior. -// Default logging to stderr can be enabled by setting environment variable AZURE_SDK_GO_LOGGING to "all". -package log diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/log/log.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/log/log.go deleted file mode 100644 index f260dac3637c..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/log/log.go +++ /dev/null @@ -1,55 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -// Package log provides functionality for configuring logging facilities. -package log - -import ( - "github.com/Azure/azure-sdk-for-go/sdk/internal/log" -) - -// Event is used to group entries. Each group can be toggled on or off. -type Event = log.Event - -const ( - // EventRequest entries contain information about HTTP requests. - // This includes information like the URL, query parameters, and headers. - EventRequest Event = "Request" - - // EventResponse entries contain information about HTTP responses. - // This includes information like the HTTP status code, headers, and request URL. - EventResponse Event = "Response" - - // EventResponseError entries contain information about HTTP responses that returned - // an *azcore.ResponseError (i.e. responses with a non 2xx HTTP status code). - // This includes the contents of ResponseError.Error(). - EventResponseError Event = "ResponseError" - - // EventRetryPolicy entries contain information specific to the retry policy in use. - EventRetryPolicy Event = "Retry" - - // EventLRO entries contain information specific to long-running operations. - // This includes information like polling location, operation state, and sleep intervals. - EventLRO Event = "LongRunningOperation" -) - -// SetEvents is used to control which events are written to -// the log. By default all log events are writen. -// NOTE: this is not goroutine safe and should be called before using SDK clients. -func SetEvents(cls ...Event) { - log.SetEvents(cls...) -} - -// SetListener will set the Logger to write to the specified Listener. -// NOTE: this is not goroutine safe and should be called before using SDK clients. -func SetListener(lst func(Event, string)) { - log.SetListener(lst) -} - -// for testing purposes -func resetEvents() { - log.TestResetEvents() -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/policy/doc.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/policy/doc.go deleted file mode 100644 index fad2579ed6c5..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/policy/doc.go +++ /dev/null @@ -1,10 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright 2017 Microsoft Corporation. All rights reserved. -// Use of this source code is governed by an MIT -// license that can be found in the LICENSE file. - -// Package policy contains the definitions needed for configuring in-box pipeline policies -// and creating custom policies. -package policy diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/policy/policy.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/policy/policy.go deleted file mode 100644 index 8d984535887e..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/policy/policy.go +++ /dev/null @@ -1,197 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package policy - -import ( - "context" - "net/http" - "time" - - "github.com/Azure/azure-sdk-for-go/sdk/azcore/cloud" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/tracing" -) - -// Policy represents an extensibility point for the Pipeline that can mutate the specified -// Request and react to the received Response. -type Policy = exported.Policy - -// Transporter represents an HTTP pipeline transport used to send HTTP requests and receive responses. -type Transporter = exported.Transporter - -// Request is an abstraction over the creation of an HTTP request as it passes through the pipeline. -// Don't use this type directly, use runtime.NewRequest() instead. -type Request = exported.Request - -// ClientOptions contains optional settings for a client's pipeline. -// Instances can be shared across calls to SDK client constructors when uniform configuration is desired. -// Zero-value fields will have their specified default values applied during use. -type ClientOptions struct { - // APIVersion overrides the default version requested of the service. - // Set with caution as this package version has not been tested with arbitrary service versions. - APIVersion string - - // Cloud specifies a cloud for the client. The default is Azure Public Cloud. - Cloud cloud.Configuration - - // InsecureAllowCredentialWithHTTP enables authenticated requests over HTTP. - // By default, authenticated requests to an HTTP endpoint are rejected by the client. - // WARNING: setting this to true will allow sending the credential in clear text. Use with caution. - InsecureAllowCredentialWithHTTP bool - - // Logging configures the built-in logging policy. - Logging LogOptions - - // Retry configures the built-in retry policy. - Retry RetryOptions - - // Telemetry configures the built-in telemetry policy. - Telemetry TelemetryOptions - - // TracingProvider configures the tracing provider. - // It defaults to a no-op tracer. - TracingProvider tracing.Provider - - // Transport sets the transport for HTTP requests. - Transport Transporter - - // PerCallPolicies contains custom policies to inject into the pipeline. - // Each policy is executed once per request. - PerCallPolicies []Policy - - // PerRetryPolicies contains custom policies to inject into the pipeline. - // Each policy is executed once per request, and for each retry of that request. - PerRetryPolicies []Policy -} - -// LogOptions configures the logging policy's behavior. -type LogOptions struct { - // IncludeBody indicates if request and response bodies should be included in logging. - // The default value is false. - // NOTE: enabling this can lead to disclosure of sensitive information, use with care. - IncludeBody bool - - // AllowedHeaders is the slice of headers to log with their values intact. - // All headers not in the slice will have their values REDACTED. - // Applies to request and response headers. - AllowedHeaders []string - - // AllowedQueryParams is the slice of query parameters to log with their values intact. - // All query parameters not in the slice will have their values REDACTED. - AllowedQueryParams []string -} - -// RetryOptions configures the retry policy's behavior. -// Zero-value fields will have their specified default values applied during use. -// This allows for modification of a subset of fields. -type RetryOptions struct { - // MaxRetries specifies the maximum number of attempts a failed operation will be retried - // before producing an error. - // The default value is three. A value less than zero means one try and no retries. - MaxRetries int32 - - // TryTimeout indicates the maximum time allowed for any single try of an HTTP request. - // This is disabled by default. Specify a value greater than zero to enable. - // NOTE: Setting this to a small value might cause premature HTTP request time-outs. - TryTimeout time.Duration - - // RetryDelay specifies the initial amount of delay to use before retrying an operation. - // The value is used only if the HTTP response does not contain a Retry-After header. - // The delay increases exponentially with each retry up to the maximum specified by MaxRetryDelay. - // The default value is four seconds. A value less than zero means no delay between retries. - RetryDelay time.Duration - - // MaxRetryDelay specifies the maximum delay allowed before retrying an operation. - // Typically the value is greater than or equal to the value specified in RetryDelay. - // The default Value is 60 seconds. A value less than zero means there is no cap. - MaxRetryDelay time.Duration - - // StatusCodes specifies the HTTP status codes that indicate the operation should be retried. - // A nil slice will use the following values. - // http.StatusRequestTimeout 408 - // http.StatusTooManyRequests 429 - // http.StatusInternalServerError 500 - // http.StatusBadGateway 502 - // http.StatusServiceUnavailable 503 - // http.StatusGatewayTimeout 504 - // Specifying values will replace the default values. - // Specifying an empty slice will disable retries for HTTP status codes. - StatusCodes []int - - // ShouldRetry evaluates if the retry policy should retry the request. - // When specified, the function overrides comparison against the list of - // HTTP status codes and error checking within the retry policy. Context - // and NonRetriable errors remain evaluated before calling ShouldRetry. - // The *http.Response and error parameters are mutually exclusive, i.e. - // if one is nil, the other is not nil. - // A return value of true means the retry policy should retry. - ShouldRetry func(*http.Response, error) bool -} - -// TelemetryOptions configures the telemetry policy's behavior. -type TelemetryOptions struct { - // ApplicationID is an application-specific identification string to add to the User-Agent. - // It has a maximum length of 24 characters and must not contain any spaces. - ApplicationID string - - // Disabled will prevent the addition of any telemetry data to the User-Agent. - Disabled bool -} - -// TokenRequestOptions contain specific parameter that may be used by credentials types when attempting to get a token. -type TokenRequestOptions = exported.TokenRequestOptions - -// BearerTokenOptions configures the bearer token policy's behavior. -type BearerTokenOptions struct { - // AuthorizationHandler allows SDK developers to run client-specific logic when BearerTokenPolicy must authorize a request. - // When this field isn't set, the policy follows its default behavior of authorizing every request with a bearer token from - // its given credential. - AuthorizationHandler AuthorizationHandler - - // InsecureAllowCredentialWithHTTP enables authenticated requests over HTTP. - // By default, authenticated requests to an HTTP endpoint are rejected by the client. - // WARNING: setting this to true will allow sending the bearer token in clear text. Use with caution. - InsecureAllowCredentialWithHTTP bool -} - -// AuthorizationHandler allows SDK developers to insert custom logic that runs when BearerTokenPolicy must authorize a request. -type AuthorizationHandler struct { - // OnRequest is called each time the policy receives a request. Its func parameter authorizes the request with a token - // from the policy's given credential. Implementations that need to perform I/O should use the Request's context, - // available from Request.Raw().Context(). When OnRequest returns an error, the policy propagates that error and doesn't - // send the request. When OnRequest is nil, the policy follows its default behavior, authorizing the request with a - // token from its credential according to its configuration. - OnRequest func(*Request, func(TokenRequestOptions) error) error - - // OnChallenge is called when the policy receives a 401 response, allowing the AuthorizationHandler to re-authorize the - // request according to an authentication challenge (the Response's WWW-Authenticate header). OnChallenge is responsible - // for parsing parameters from the challenge. Its func parameter will authorize the request with a token from the policy's - // given credential. Implementations that need to perform I/O should use the Request's context, available from - // Request.Raw().Context(). When OnChallenge returns nil, the policy will send the request again. When OnChallenge is nil, - // the policy will return any 401 response to the client. - OnChallenge func(*Request, *http.Response, func(TokenRequestOptions) error) error -} - -// WithCaptureResponse applies the HTTP response retrieval annotation to the parent context. -// The resp parameter will contain the HTTP response after the request has completed. -func WithCaptureResponse(parent context.Context, resp **http.Response) context.Context { - return context.WithValue(parent, shared.CtxWithCaptureResponse{}, resp) -} - -// WithHTTPHeader adds the specified http.Header to the parent context. -// Use this to specify custom HTTP headers at the API-call level. -// Any overlapping headers will have their values replaced with the values specified here. -func WithHTTPHeader(parent context.Context, header http.Header) context.Context { - return context.WithValue(parent, shared.CtxWithHTTPHeaderKey{}, header) -} - -// WithRetryOptions adds the specified RetryOptions to the parent context. -// Use this to specify custom RetryOptions at the API-call level. -func WithRetryOptions(parent context.Context, options RetryOptions) context.Context { - return context.WithValue(parent, shared.CtxWithRetryOptionsKey{}, options) -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/doc.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/doc.go deleted file mode 100644 index c9cfa438cb34..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/doc.go +++ /dev/null @@ -1,10 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright 2017 Microsoft Corporation. All rights reserved. -// Use of this source code is governed by an MIT -// license that can be found in the LICENSE file. - -// Package runtime contains various facilities for creating requests and handling responses. -// The content is intended for SDK authors. -package runtime diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/errors.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/errors.go deleted file mode 100644 index c0d56158e229..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/errors.go +++ /dev/null @@ -1,27 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package runtime - -import ( - "net/http" - - "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported" -) - -// NewResponseError creates an *azcore.ResponseError from the provided HTTP response. -// Call this when a service request returns a non-successful status code. -// The error code will be extracted from the *http.Response, either from the x-ms-error-code -// header (preferred) or attempted to be parsed from the response body. -func NewResponseError(resp *http.Response) error { - return exported.NewResponseError(resp) -} - -// NewResponseErrorWithErrorCode creates an *azcore.ResponseError from the provided HTTP response and errorCode. -// Use this variant when the error code is in a non-standard location. -func NewResponseErrorWithErrorCode(resp *http.Response, errorCode string) error { - return exported.NewResponseErrorWithErrorCode(resp, errorCode) -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/pager.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/pager.go deleted file mode 100644 index cffe692d7e30..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/pager.go +++ /dev/null @@ -1,128 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package runtime - -import ( - "context" - "encoding/json" - "errors" - "fmt" - "net/http" - "reflect" - - "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/tracing" -) - -// PagingHandler contains the required data for constructing a Pager. -type PagingHandler[T any] struct { - // More returns a boolean indicating if there are more pages to fetch. - // It uses the provided page to make the determination. - More func(T) bool - - // Fetcher fetches the first and subsequent pages. - Fetcher func(context.Context, *T) (T, error) - - // Tracer contains the Tracer from the client that's creating the Pager. - Tracer tracing.Tracer -} - -// Pager provides operations for iterating over paged responses. -type Pager[T any] struct { - current *T - handler PagingHandler[T] - tracer tracing.Tracer - firstPage bool -} - -// NewPager creates an instance of Pager using the specified PagingHandler. -// Pass a non-nil T for firstPage if the first page has already been retrieved. -func NewPager[T any](handler PagingHandler[T]) *Pager[T] { - return &Pager[T]{ - handler: handler, - tracer: handler.Tracer, - firstPage: true, - } -} - -// More returns true if there are more pages to retrieve. -func (p *Pager[T]) More() bool { - if p.current != nil { - return p.handler.More(*p.current) - } - return true -} - -// NextPage advances the pager to the next page. -func (p *Pager[T]) NextPage(ctx context.Context) (T, error) { - if p.current != nil { - if p.firstPage { - // we get here if it's an LRO-pager, we already have the first page - p.firstPage = false - return *p.current, nil - } else if !p.handler.More(*p.current) { - return *new(T), errors.New("no more pages") - } - } else { - // non-LRO case, first page - p.firstPage = false - } - - var err error - ctx, endSpan := StartSpan(ctx, fmt.Sprintf("%s.NextPage", shortenTypeName(reflect.TypeOf(*p).Name())), p.tracer, nil) - defer func() { endSpan(err) }() - - resp, err := p.handler.Fetcher(ctx, p.current) - if err != nil { - return *new(T), err - } - p.current = &resp - return *p.current, nil -} - -// UnmarshalJSON implements the json.Unmarshaler interface for Pager[T]. -func (p *Pager[T]) UnmarshalJSON(data []byte) error { - return json.Unmarshal(data, &p.current) -} - -// FetcherForNextLinkOptions contains the optional values for [FetcherForNextLink]. -type FetcherForNextLinkOptions struct { - // NextReq is the func to be called when requesting subsequent pages. - // Used for paged operations that have a custom next link operation. - NextReq func(context.Context, string) (*policy.Request, error) -} - -// FetcherForNextLink is a helper containing boilerplate code to simplify creating a PagingHandler[T].Fetcher from a next link URL. -// - ctx is the [context.Context] controlling the lifetime of the HTTP operation -// - pl is the [Pipeline] used to dispatch the HTTP request -// - nextLink is the URL used to fetch the next page. the empty string indicates the first page is to be requested -// - firstReq is the func to be called when creating the request for the first page -// - options contains any optional parameters, pass nil to accept the default values -func FetcherForNextLink(ctx context.Context, pl Pipeline, nextLink string, firstReq func(context.Context) (*policy.Request, error), options *FetcherForNextLinkOptions) (*http.Response, error) { - var req *policy.Request - var err error - if nextLink == "" { - req, err = firstReq(ctx) - } else if nextLink, err = EncodeQueryParams(nextLink); err == nil { - if options != nil && options.NextReq != nil { - req, err = options.NextReq(ctx, nextLink) - } else { - req, err = NewRequest(ctx, http.MethodGet, nextLink) - } - } - if err != nil { - return nil, err - } - resp, err := pl.Do(req) - if err != nil { - return nil, err - } - if !HasStatusCode(resp, http.StatusOK) { - return nil, NewResponseError(resp) - } - return resp, nil -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/pipeline.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/pipeline.go deleted file mode 100644 index 6b1f5c083eb6..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/pipeline.go +++ /dev/null @@ -1,94 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package runtime - -import ( - "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" -) - -// PipelineOptions contains Pipeline options for SDK developers -type PipelineOptions struct { - // AllowedHeaders is the slice of headers to log with their values intact. - // All headers not in the slice will have their values REDACTED. - // Applies to request and response headers. - AllowedHeaders []string - - // AllowedQueryParameters is the slice of query parameters to log with their values intact. - // All query parameters not in the slice will have their values REDACTED. - AllowedQueryParameters []string - - // APIVersion overrides the default version requested of the service. - // Set with caution as this package version has not been tested with arbitrary service versions. - APIVersion APIVersionOptions - - // PerCall contains custom policies to inject into the pipeline. - // Each policy is executed once per request. - PerCall []policy.Policy - - // PerRetry contains custom policies to inject into the pipeline. - // Each policy is executed once per request, and for each retry of that request. - PerRetry []policy.Policy - - // Tracing contains options used to configure distributed tracing. - Tracing TracingOptions -} - -// TracingOptions contains tracing options for SDK developers. -type TracingOptions struct { - // Namespace contains the value to use for the az.namespace span attribute. - Namespace string -} - -// Pipeline represents a primitive for sending HTTP requests and receiving responses. -// Its behavior can be extended by specifying policies during construction. -type Pipeline = exported.Pipeline - -// NewPipeline creates a pipeline from connection options, with any additional policies as specified. -// Policies from ClientOptions are placed after policies from PipelineOptions. -// The module and version parameters are used by the telemetry policy, when enabled. -func NewPipeline(module, version string, plOpts PipelineOptions, options *policy.ClientOptions) Pipeline { - cp := policy.ClientOptions{} - if options != nil { - cp = *options - } - if len(plOpts.AllowedHeaders) > 0 { - headers := make([]string, len(plOpts.AllowedHeaders)+len(cp.Logging.AllowedHeaders)) - copy(headers, plOpts.AllowedHeaders) - headers = append(headers, cp.Logging.AllowedHeaders...) - cp.Logging.AllowedHeaders = headers - } - if len(plOpts.AllowedQueryParameters) > 0 { - qp := make([]string, len(plOpts.AllowedQueryParameters)+len(cp.Logging.AllowedQueryParams)) - copy(qp, plOpts.AllowedQueryParameters) - qp = append(qp, cp.Logging.AllowedQueryParams...) - cp.Logging.AllowedQueryParams = qp - } - // we put the includeResponsePolicy at the very beginning so that the raw response - // is populated with the final response (some policies might mutate the response) - policies := []policy.Policy{exported.PolicyFunc(includeResponsePolicy)} - if cp.APIVersion != "" { - policies = append(policies, newAPIVersionPolicy(cp.APIVersion, &plOpts.APIVersion)) - } - if !cp.Telemetry.Disabled { - policies = append(policies, NewTelemetryPolicy(module, version, &cp.Telemetry)) - } - policies = append(policies, plOpts.PerCall...) - policies = append(policies, cp.PerCallPolicies...) - policies = append(policies, NewRetryPolicy(&cp.Retry)) - policies = append(policies, plOpts.PerRetry...) - policies = append(policies, cp.PerRetryPolicies...) - policies = append(policies, exported.PolicyFunc(httpHeaderPolicy)) - policies = append(policies, newHTTPTracePolicy(cp.Logging.AllowedQueryParams)) - policies = append(policies, NewLogPolicy(&cp.Logging)) - policies = append(policies, exported.PolicyFunc(bodyDownloadPolicy)) - transport := cp.Transport - if transport == nil { - transport = defaultHTTPClient - } - return exported.NewPipeline(transport, policies...) -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_api_version.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_api_version.go deleted file mode 100644 index e5309aa6c15b..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_api_version.go +++ /dev/null @@ -1,75 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package runtime - -import ( - "errors" - "fmt" - "net/http" - - "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" -) - -// APIVersionOptions contains options for API versions -type APIVersionOptions struct { - // Location indicates where to set the version on a request, for example in a header or query param - Location APIVersionLocation - // Name is the name of the header or query parameter, for example "api-version" - Name string -} - -// APIVersionLocation indicates which part of a request identifies the service version -type APIVersionLocation int - -const ( - // APIVersionLocationQueryParam indicates a query parameter - APIVersionLocationQueryParam = 0 - // APIVersionLocationHeader indicates a header - APIVersionLocationHeader = 1 -) - -// newAPIVersionPolicy constructs an APIVersionPolicy. If version is "", Do will be a no-op. If version -// isn't empty and opts.Name is empty, Do will return an error. -func newAPIVersionPolicy(version string, opts *APIVersionOptions) *apiVersionPolicy { - if opts == nil { - opts = &APIVersionOptions{} - } - return &apiVersionPolicy{location: opts.Location, name: opts.Name, version: version} -} - -// apiVersionPolicy enables users to set the API version of every request a client sends. -type apiVersionPolicy struct { - // location indicates whether "name" refers to a query parameter or header. - location APIVersionLocation - - // name of the query param or header whose value should be overridden; provided by the client. - name string - - // version is the value (provided by the user) that replaces the default version value. - version string -} - -// Do sets the request's API version, if the policy is configured to do so, replacing any prior value. -func (a *apiVersionPolicy) Do(req *policy.Request) (*http.Response, error) { - if a.version != "" { - if a.name == "" { - // user set ClientOptions.APIVersion but the client ctor didn't set PipelineOptions.APIVersionOptions - return nil, errors.New("this client doesn't support overriding its API version") - } - switch a.location { - case APIVersionLocationHeader: - req.Raw().Header.Set(a.name, a.version) - case APIVersionLocationQueryParam: - q := req.Raw().URL.Query() - q.Set(a.name, a.version) - req.Raw().URL.RawQuery = q.Encode() - default: - return nil, fmt.Errorf("unknown APIVersionLocation %d", a.location) - } - } - return req.Next() -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_bearer_token.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_bearer_token.go deleted file mode 100644 index cb2a6952805d..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_bearer_token.go +++ /dev/null @@ -1,123 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package runtime - -import ( - "errors" - "net/http" - "strings" - "time" - - "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" - "github.com/Azure/azure-sdk-for-go/sdk/internal/errorinfo" - "github.com/Azure/azure-sdk-for-go/sdk/internal/temporal" -) - -// BearerTokenPolicy authorizes requests with bearer tokens acquired from a TokenCredential. -type BearerTokenPolicy struct { - // mainResource is the resource to be retreived using the tenant specified in the credential - mainResource *temporal.Resource[exported.AccessToken, acquiringResourceState] - // the following fields are read-only - authzHandler policy.AuthorizationHandler - cred exported.TokenCredential - scopes []string - allowHTTP bool -} - -type acquiringResourceState struct { - req *policy.Request - p *BearerTokenPolicy - tro policy.TokenRequestOptions -} - -// acquire acquires or updates the resource; only one -// thread/goroutine at a time ever calls this function -func acquire(state acquiringResourceState) (newResource exported.AccessToken, newExpiration time.Time, err error) { - tk, err := state.p.cred.GetToken(&shared.ContextWithDeniedValues{Context: state.req.Raw().Context()}, state.tro) - if err != nil { - return exported.AccessToken{}, time.Time{}, err - } - return tk, tk.ExpiresOn, nil -} - -// NewBearerTokenPolicy creates a policy object that authorizes requests with bearer tokens. -// cred: an azcore.TokenCredential implementation such as a credential object from azidentity -// scopes: the list of permission scopes required for the token. -// opts: optional settings. Pass nil to accept default values; this is the same as passing a zero-value options. -func NewBearerTokenPolicy(cred exported.TokenCredential, scopes []string, opts *policy.BearerTokenOptions) *BearerTokenPolicy { - if opts == nil { - opts = &policy.BearerTokenOptions{} - } - return &BearerTokenPolicy{ - authzHandler: opts.AuthorizationHandler, - cred: cred, - scopes: scopes, - mainResource: temporal.NewResource(acquire), - allowHTTP: opts.InsecureAllowCredentialWithHTTP, - } -} - -// authenticateAndAuthorize returns a function which authorizes req with a token from the policy's credential -func (b *BearerTokenPolicy) authenticateAndAuthorize(req *policy.Request) func(policy.TokenRequestOptions) error { - return func(tro policy.TokenRequestOptions) error { - as := acquiringResourceState{p: b, req: req, tro: tro} - tk, err := b.mainResource.Get(as) - if err != nil { - return err - } - req.Raw().Header.Set(shared.HeaderAuthorization, shared.BearerTokenPrefix+tk.Token) - return nil - } -} - -// Do authorizes a request with a bearer token -func (b *BearerTokenPolicy) Do(req *policy.Request) (*http.Response, error) { - // skip adding the authorization header if no TokenCredential was provided. - // this prevents a panic that might be hard to diagnose and allows testing - // against http endpoints that don't require authentication. - if b.cred == nil { - return req.Next() - } - - if err := checkHTTPSForAuth(req, b.allowHTTP); err != nil { - return nil, err - } - - var err error - if b.authzHandler.OnRequest != nil { - err = b.authzHandler.OnRequest(req, b.authenticateAndAuthorize(req)) - } else { - err = b.authenticateAndAuthorize(req)(policy.TokenRequestOptions{Scopes: b.scopes}) - } - if err != nil { - return nil, errorinfo.NonRetriableError(err) - } - - res, err := req.Next() - if err != nil { - return nil, err - } - - if res.StatusCode == http.StatusUnauthorized { - b.mainResource.Expire() - if res.Header.Get("WWW-Authenticate") != "" && b.authzHandler.OnChallenge != nil { - if err = b.authzHandler.OnChallenge(req, res, b.authenticateAndAuthorize(req)); err == nil { - res, err = req.Next() - } - } - } - if err != nil { - err = errorinfo.NonRetriableError(err) - } - return res, err -} - -func checkHTTPSForAuth(req *policy.Request, allowHTTP bool) error { - if strings.ToLower(req.Raw().URL.Scheme) != "https" && !allowHTTP { - return errorinfo.NonRetriableError(errors.New("authenticated requests are not permitted for non TLS protected (https) endpoints")) - } - return nil -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_body_download.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_body_download.go deleted file mode 100644 index 99dc029f0c17..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_body_download.go +++ /dev/null @@ -1,72 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package runtime - -import ( - "fmt" - "net/http" - "strings" - - "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" - "github.com/Azure/azure-sdk-for-go/sdk/internal/errorinfo" -) - -// bodyDownloadPolicy creates a policy object that downloads the response's body to a []byte. -func bodyDownloadPolicy(req *policy.Request) (*http.Response, error) { - resp, err := req.Next() - if err != nil { - return resp, err - } - var opValues bodyDownloadPolicyOpValues - // don't skip downloading error response bodies - if req.OperationValue(&opValues); opValues.Skip && resp.StatusCode < 400 { - return resp, err - } - // Either bodyDownloadPolicyOpValues was not specified (so skip is false) - // or it was specified and skip is false: don't skip downloading the body - _, err = Payload(resp) - if err != nil { - return resp, newBodyDownloadError(err, req) - } - return resp, err -} - -// bodyDownloadPolicyOpValues is the struct containing the per-operation values -type bodyDownloadPolicyOpValues struct { - Skip bool -} - -type bodyDownloadError struct { - err error -} - -func newBodyDownloadError(err error, req *policy.Request) error { - // on failure, only retry the request for idempotent operations. - // we currently identify them as DELETE, GET, and PUT requests. - if m := strings.ToUpper(req.Raw().Method); m == http.MethodDelete || m == http.MethodGet || m == http.MethodPut { - // error is safe for retry - return err - } - // wrap error to avoid retries - return &bodyDownloadError{ - err: err, - } -} - -func (b *bodyDownloadError) Error() string { - return fmt.Sprintf("body download policy: %s", b.err.Error()) -} - -func (b *bodyDownloadError) NonRetriable() { - // marker method -} - -func (b *bodyDownloadError) Unwrap() error { - return b.err -} - -var _ errorinfo.NonRetriable = (*bodyDownloadError)(nil) diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_http_header.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_http_header.go deleted file mode 100644 index c230af0afa89..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_http_header.go +++ /dev/null @@ -1,40 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package runtime - -import ( - "context" - "net/http" - - "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" -) - -// newHTTPHeaderPolicy creates a policy object that adds custom HTTP headers to a request -func httpHeaderPolicy(req *policy.Request) (*http.Response, error) { - // check if any custom HTTP headers have been specified - if header := req.Raw().Context().Value(shared.CtxWithHTTPHeaderKey{}); header != nil { - for k, v := range header.(http.Header) { - // use Set to replace any existing value - // it also canonicalizes the header key - req.Raw().Header.Set(k, v[0]) - // add any remaining values - for i := 1; i < len(v); i++ { - req.Raw().Header.Add(k, v[i]) - } - } - } - return req.Next() -} - -// WithHTTPHeader adds the specified http.Header to the parent context. -// Use this to specify custom HTTP headers at the API-call level. -// Any overlapping headers will have their values replaced with the values specified here. -// Deprecated: use [policy.WithHTTPHeader] instead. -func WithHTTPHeader(parent context.Context, header http.Header) context.Context { - return policy.WithHTTPHeader(parent, header) -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_http_trace.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_http_trace.go deleted file mode 100644 index 3df1c1218901..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_http_trace.go +++ /dev/null @@ -1,143 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package runtime - -import ( - "context" - "errors" - "fmt" - "net/http" - "net/url" - "strings" - - "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/tracing" -) - -const ( - attrHTTPMethod = "http.method" - attrHTTPURL = "http.url" - attrHTTPUserAgent = "http.user_agent" - attrHTTPStatusCode = "http.status_code" - - attrAZClientReqID = "az.client_request_id" - attrAZServiceReqID = "az.service_request_id" - - attrNetPeerName = "net.peer.name" -) - -// newHTTPTracePolicy creates a new instance of the httpTracePolicy. -// - allowedQueryParams contains the user-specified query parameters that don't need to be redacted from the trace -func newHTTPTracePolicy(allowedQueryParams []string) exported.Policy { - return &httpTracePolicy{allowedQP: getAllowedQueryParams(allowedQueryParams)} -} - -// httpTracePolicy is a policy that creates a trace for the HTTP request and its response -type httpTracePolicy struct { - allowedQP map[string]struct{} -} - -// Do implements the pipeline.Policy interfaces for the httpTracePolicy type. -func (h *httpTracePolicy) Do(req *policy.Request) (resp *http.Response, err error) { - rawTracer := req.Raw().Context().Value(shared.CtxWithTracingTracer{}) - if tracer, ok := rawTracer.(tracing.Tracer); ok && tracer.Enabled() { - attributes := []tracing.Attribute{ - {Key: attrHTTPMethod, Value: req.Raw().Method}, - {Key: attrHTTPURL, Value: getSanitizedURL(*req.Raw().URL, h.allowedQP)}, - {Key: attrNetPeerName, Value: req.Raw().URL.Host}, - } - - if ua := req.Raw().Header.Get(shared.HeaderUserAgent); ua != "" { - attributes = append(attributes, tracing.Attribute{Key: attrHTTPUserAgent, Value: ua}) - } - if reqID := req.Raw().Header.Get(shared.HeaderXMSClientRequestID); reqID != "" { - attributes = append(attributes, tracing.Attribute{Key: attrAZClientReqID, Value: reqID}) - } - - ctx := req.Raw().Context() - ctx, span := tracer.Start(ctx, "HTTP "+req.Raw().Method, &tracing.SpanOptions{ - Kind: tracing.SpanKindClient, - Attributes: attributes, - }) - - defer func() { - if resp != nil { - span.SetAttributes(tracing.Attribute{Key: attrHTTPStatusCode, Value: resp.StatusCode}) - if resp.StatusCode > 399 { - span.SetStatus(tracing.SpanStatusError, resp.Status) - } - if reqID := resp.Header.Get(shared.HeaderXMSRequestID); reqID != "" { - span.SetAttributes(tracing.Attribute{Key: attrAZServiceReqID, Value: reqID}) - } - } else if err != nil { - var urlErr *url.Error - if errors.As(err, &urlErr) { - // calling *url.Error.Error() will include the unsanitized URL - // which we don't want. in addition, we already have the HTTP verb - // and sanitized URL in the trace so we aren't losing any info - err = urlErr.Err - } - span.SetStatus(tracing.SpanStatusError, err.Error()) - } - span.End() - }() - - req = req.WithContext(ctx) - } - resp, err = req.Next() - return -} - -// StartSpanOptions contains the optional values for StartSpan. -type StartSpanOptions struct { - // for future expansion -} - -// StartSpan starts a new tracing span. -// You must call the returned func to terminate the span. Pass the applicable error -// if the span will exit with an error condition. -// - ctx is the parent context of the newly created context -// - name is the name of the span. this is typically the fully qualified name of an API ("Client.Method") -// - tracer is the client's Tracer for creating spans -// - options contains optional values. pass nil to accept any default values -func StartSpan(ctx context.Context, name string, tracer tracing.Tracer, options *StartSpanOptions) (context.Context, func(error)) { - if !tracer.Enabled() { - return ctx, func(err error) {} - } - - // we MUST propagate the active tracer before returning so that the trace policy can access it - ctx = context.WithValue(ctx, shared.CtxWithTracingTracer{}, tracer) - - const newSpanKind = tracing.SpanKindInternal - if activeSpan := ctx.Value(ctxActiveSpan{}); activeSpan != nil { - // per the design guidelines, if a SDK method Foo() calls SDK method Bar(), - // then the span for Bar() must be suppressed. however, if Bar() makes a REST - // call, then Bar's HTTP span must be a child of Foo's span. - // however, there is an exception to this rule. if the SDK method Foo() is a - // messaging producer/consumer, and it takes a callback that's a SDK method - // Bar(), then the span for Bar() must _not_ be suppressed. - if kind := activeSpan.(tracing.SpanKind); kind == tracing.SpanKindClient || kind == tracing.SpanKindInternal { - return ctx, func(err error) {} - } - } - ctx, span := tracer.Start(ctx, name, &tracing.SpanOptions{ - Kind: newSpanKind, - }) - ctx = context.WithValue(ctx, ctxActiveSpan{}, newSpanKind) - return ctx, func(err error) { - if err != nil { - errType := strings.Replace(fmt.Sprintf("%T", err), "*exported.", "*azcore.", 1) - span.SetStatus(tracing.SpanStatusError, fmt.Sprintf("%s:\n%s", errType, err.Error())) - } - span.End() - } -} - -// ctxActiveSpan is used as a context key for indicating a SDK client span is in progress. -type ctxActiveSpan struct{} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_include_response.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_include_response.go deleted file mode 100644 index bb00f6c2fdb7..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_include_response.go +++ /dev/null @@ -1,35 +0,0 @@ -//go:build go1.16 -// +build go1.16 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package runtime - -import ( - "context" - "net/http" - - "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" -) - -// includeResponsePolicy creates a policy that retrieves the raw HTTP response upon request -func includeResponsePolicy(req *policy.Request) (*http.Response, error) { - resp, err := req.Next() - if resp == nil { - return resp, err - } - if httpOutRaw := req.Raw().Context().Value(shared.CtxWithCaptureResponse{}); httpOutRaw != nil { - httpOut := httpOutRaw.(**http.Response) - *httpOut = resp - } - return resp, err -} - -// WithCaptureResponse applies the HTTP response retrieval annotation to the parent context. -// The resp parameter will contain the HTTP response after the request has completed. -// Deprecated: use [policy.WithCaptureResponse] instead. -func WithCaptureResponse(parent context.Context, resp **http.Response) context.Context { - return policy.WithCaptureResponse(parent, resp) -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_key_credential.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_key_credential.go deleted file mode 100644 index eeb1c09cc122..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_key_credential.go +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package runtime - -import ( - "net/http" - - "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" -) - -// KeyCredentialPolicy authorizes requests with a [azcore.KeyCredential]. -type KeyCredentialPolicy struct { - cred *exported.KeyCredential - header string - prefix string - allowHTTP bool -} - -// KeyCredentialPolicyOptions contains the optional values configuring [KeyCredentialPolicy]. -type KeyCredentialPolicyOptions struct { - // InsecureAllowCredentialWithHTTP enables authenticated requests over HTTP. - // By default, authenticated requests to an HTTP endpoint are rejected by the client. - // WARNING: setting this to true will allow sending the authentication key in clear text. Use with caution. - InsecureAllowCredentialWithHTTP bool - - // Prefix is used if the key requires a prefix before it's inserted into the HTTP request. - Prefix string -} - -// NewKeyCredentialPolicy creates a new instance of [KeyCredentialPolicy]. -// - cred is the [azcore.KeyCredential] used to authenticate with the service -// - header is the name of the HTTP request header in which the key is placed -// - options contains optional configuration, pass nil to accept the default values -func NewKeyCredentialPolicy(cred *exported.KeyCredential, header string, options *KeyCredentialPolicyOptions) *KeyCredentialPolicy { - if options == nil { - options = &KeyCredentialPolicyOptions{} - } - return &KeyCredentialPolicy{ - cred: cred, - header: header, - prefix: options.Prefix, - allowHTTP: options.InsecureAllowCredentialWithHTTP, - } -} - -// Do implementes the Do method on the [policy.Polilcy] interface. -func (k *KeyCredentialPolicy) Do(req *policy.Request) (*http.Response, error) { - // skip adding the authorization header if no KeyCredential was provided. - // this prevents a panic that might be hard to diagnose and allows testing - // against http endpoints that don't require authentication. - if k.cred != nil { - if err := checkHTTPSForAuth(req, k.allowHTTP); err != nil { - return nil, err - } - val := exported.KeyCredentialGet(k.cred) - if k.prefix != "" { - val = k.prefix + val - } - req.Raw().Header.Add(k.header, val) - } - return req.Next() -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_logging.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_logging.go deleted file mode 100644 index f048d7fb53f5..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_logging.go +++ /dev/null @@ -1,264 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package runtime - -import ( - "bytes" - "fmt" - "io" - "net/http" - "net/url" - "sort" - "strings" - "time" - - "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/log" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" - "github.com/Azure/azure-sdk-for-go/sdk/internal/diag" -) - -type logPolicy struct { - includeBody bool - allowedHeaders map[string]struct{} - allowedQP map[string]struct{} -} - -// NewLogPolicy creates a request/response logging policy object configured using the specified options. -// Pass nil to accept the default values; this is the same as passing a zero-value options. -func NewLogPolicy(o *policy.LogOptions) policy.Policy { - if o == nil { - o = &policy.LogOptions{} - } - // construct default hash set of allowed headers - allowedHeaders := map[string]struct{}{ - "accept": {}, - "cache-control": {}, - "connection": {}, - "content-length": {}, - "content-type": {}, - "date": {}, - "etag": {}, - "expires": {}, - "if-match": {}, - "if-modified-since": {}, - "if-none-match": {}, - "if-unmodified-since": {}, - "last-modified": {}, - "ms-cv": {}, - "pragma": {}, - "request-id": {}, - "retry-after": {}, - "server": {}, - "traceparent": {}, - "transfer-encoding": {}, - "user-agent": {}, - "www-authenticate": {}, - "x-ms-request-id": {}, - "x-ms-client-request-id": {}, - "x-ms-return-client-request-id": {}, - } - // add any caller-specified allowed headers to the set - for _, ah := range o.AllowedHeaders { - allowedHeaders[strings.ToLower(ah)] = struct{}{} - } - // now do the same thing for query params - allowedQP := getAllowedQueryParams(o.AllowedQueryParams) - return &logPolicy{ - includeBody: o.IncludeBody, - allowedHeaders: allowedHeaders, - allowedQP: allowedQP, - } -} - -// getAllowedQueryParams merges the default set of allowed query parameters -// with a custom set (usually comes from client options). -func getAllowedQueryParams(customAllowedQP []string) map[string]struct{} { - allowedQP := map[string]struct{}{ - "api-version": {}, - } - for _, qp := range customAllowedQP { - allowedQP[strings.ToLower(qp)] = struct{}{} - } - return allowedQP -} - -// logPolicyOpValues is the struct containing the per-operation values -type logPolicyOpValues struct { - try int32 - start time.Time -} - -func (p *logPolicy) Do(req *policy.Request) (*http.Response, error) { - // Get the per-operation values. These are saved in the Message's map so that they persist across each retry calling into this policy object. - var opValues logPolicyOpValues - if req.OperationValue(&opValues); opValues.start.IsZero() { - opValues.start = time.Now() // If this is the 1st try, record this operation's start time - } - opValues.try++ // The first try is #1 (not #0) - req.SetOperationValue(opValues) - - // Log the outgoing request as informational - if log.Should(log.EventRequest) { - b := &bytes.Buffer{} - fmt.Fprintf(b, "==> OUTGOING REQUEST (Try=%d)\n", opValues.try) - p.writeRequestWithResponse(b, req, nil, nil) - var err error - if p.includeBody { - err = writeReqBody(req, b) - } - log.Write(log.EventRequest, b.String()) - if err != nil { - return nil, err - } - } - - // Set the time for this particular retry operation and then Do the operation. - tryStart := time.Now() - response, err := req.Next() // Make the request - tryEnd := time.Now() - tryDuration := tryEnd.Sub(tryStart) - opDuration := tryEnd.Sub(opValues.start) - - if log.Should(log.EventResponse) { - // We're going to log this; build the string to log - b := &bytes.Buffer{} - fmt.Fprintf(b, "==> REQUEST/RESPONSE (Try=%d/%v, OpTime=%v) -- ", opValues.try, tryDuration, opDuration) - if err != nil { // This HTTP request did not get a response from the service - fmt.Fprint(b, "REQUEST ERROR\n") - } else { - fmt.Fprint(b, "RESPONSE RECEIVED\n") - } - - p.writeRequestWithResponse(b, req, response, err) - if err != nil { - // skip frames runtime.Callers() and runtime.StackTrace() - b.WriteString(diag.StackTrace(2, 32)) - } else if p.includeBody { - err = writeRespBody(response, b) - } - log.Write(log.EventResponse, b.String()) - } - return response, err -} - -const redactedValue = "REDACTED" - -// getSanitizedURL returns a sanitized string for the provided url.URL -func getSanitizedURL(u url.URL, allowedQueryParams map[string]struct{}) string { - // redact applicable query params - qp := u.Query() - for k := range qp { - if _, ok := allowedQueryParams[strings.ToLower(k)]; !ok { - qp.Set(k, redactedValue) - } - } - u.RawQuery = qp.Encode() - return u.String() -} - -// writeRequestWithResponse appends a formatted HTTP request into a Buffer. If request and/or err are -// not nil, then these are also written into the Buffer. -func (p *logPolicy) writeRequestWithResponse(b *bytes.Buffer, req *policy.Request, resp *http.Response, err error) { - // Write the request into the buffer. - fmt.Fprint(b, " "+req.Raw().Method+" "+getSanitizedURL(*req.Raw().URL, p.allowedQP)+"\n") - p.writeHeader(b, req.Raw().Header) - if resp != nil { - fmt.Fprintln(b, " --------------------------------------------------------------------------------") - fmt.Fprint(b, " RESPONSE Status: "+resp.Status+"\n") - p.writeHeader(b, resp.Header) - } - if err != nil { - fmt.Fprintln(b, " --------------------------------------------------------------------------------") - fmt.Fprint(b, " ERROR:\n"+err.Error()+"\n") - } -} - -// formatHeaders appends an HTTP request's or response's header into a Buffer. -func (p *logPolicy) writeHeader(b *bytes.Buffer, header http.Header) { - if len(header) == 0 { - b.WriteString(" (no headers)\n") - return - } - keys := make([]string, 0, len(header)) - // Alphabetize the headers - for k := range header { - keys = append(keys, k) - } - sort.Strings(keys) - for _, k := range keys { - // don't use Get() as it will canonicalize k which might cause a mismatch - value := header[k][0] - // redact all header values not in the allow-list - if _, ok := p.allowedHeaders[strings.ToLower(k)]; !ok { - value = redactedValue - } - fmt.Fprintf(b, " %s: %+v\n", k, value) - } -} - -// returns true if the request/response body should be logged. -// this is determined by looking at the content-type header value. -func shouldLogBody(b *bytes.Buffer, contentType string) bool { - contentType = strings.ToLower(contentType) - if strings.HasPrefix(contentType, "text") || - strings.Contains(contentType, "json") || - strings.Contains(contentType, "xml") { - return true - } - fmt.Fprintf(b, " Skip logging body for %s\n", contentType) - return false -} - -// writes to a buffer, used for logging purposes -func writeReqBody(req *policy.Request, b *bytes.Buffer) error { - if req.Raw().Body == nil { - fmt.Fprint(b, " Request contained no body\n") - return nil - } - if ct := req.Raw().Header.Get(shared.HeaderContentType); !shouldLogBody(b, ct) { - return nil - } - body, err := io.ReadAll(req.Raw().Body) - if err != nil { - fmt.Fprintf(b, " Failed to read request body: %s\n", err.Error()) - return err - } - if err := req.RewindBody(); err != nil { - return err - } - logBody(b, body) - return nil -} - -// writes to a buffer, used for logging purposes -func writeRespBody(resp *http.Response, b *bytes.Buffer) error { - ct := resp.Header.Get(shared.HeaderContentType) - if ct == "" { - fmt.Fprint(b, " Response contained no body\n") - return nil - } else if !shouldLogBody(b, ct) { - return nil - } - body, err := Payload(resp) - if err != nil { - fmt.Fprintf(b, " Failed to read response body: %s\n", err.Error()) - return err - } - if len(body) > 0 { - logBody(b, body) - } else { - fmt.Fprint(b, " Response contained no body\n") - } - return nil -} - -func logBody(b *bytes.Buffer, body []byte) { - fmt.Fprintln(b, " --------------------------------------------------------------------------------") - fmt.Fprintln(b, string(body)) - fmt.Fprintln(b, " --------------------------------------------------------------------------------") -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_request_id.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_request_id.go deleted file mode 100644 index 360a7f2118a3..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_request_id.go +++ /dev/null @@ -1,34 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package runtime - -import ( - "net/http" - - "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" - "github.com/Azure/azure-sdk-for-go/sdk/internal/uuid" -) - -type requestIDPolicy struct{} - -// NewRequestIDPolicy returns a policy that add the x-ms-client-request-id header -func NewRequestIDPolicy() policy.Policy { - return &requestIDPolicy{} -} - -func (r *requestIDPolicy) Do(req *policy.Request) (*http.Response, error) { - if req.Raw().Header.Get(shared.HeaderXMSClientRequestID) == "" { - id, err := uuid.New() - if err != nil { - return nil, err - } - req.Raw().Header.Set(shared.HeaderXMSClientRequestID, id.String()) - } - - return req.Next() -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_retry.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_retry.go deleted file mode 100644 index 04d7bb4ecbc6..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_retry.go +++ /dev/null @@ -1,255 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package runtime - -import ( - "context" - "errors" - "io" - "math" - "math/rand" - "net/http" - "time" - - "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/log" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" - "github.com/Azure/azure-sdk-for-go/sdk/internal/errorinfo" - "github.com/Azure/azure-sdk-for-go/sdk/internal/exported" -) - -const ( - defaultMaxRetries = 3 -) - -func setDefaults(o *policy.RetryOptions) { - if o.MaxRetries == 0 { - o.MaxRetries = defaultMaxRetries - } else if o.MaxRetries < 0 { - o.MaxRetries = 0 - } - - // SDK guidelines specify the default MaxRetryDelay is 60 seconds - if o.MaxRetryDelay == 0 { - o.MaxRetryDelay = 60 * time.Second - } else if o.MaxRetryDelay < 0 { - // not really an unlimited cap, but sufficiently large enough to be considered as such - o.MaxRetryDelay = math.MaxInt64 - } - if o.RetryDelay == 0 { - o.RetryDelay = 800 * time.Millisecond - } else if o.RetryDelay < 0 { - o.RetryDelay = 0 - } - if o.StatusCodes == nil { - // NOTE: if you change this list, you MUST update the docs in policy/policy.go - o.StatusCodes = []int{ - http.StatusRequestTimeout, // 408 - http.StatusTooManyRequests, // 429 - http.StatusInternalServerError, // 500 - http.StatusBadGateway, // 502 - http.StatusServiceUnavailable, // 503 - http.StatusGatewayTimeout, // 504 - } - } -} - -func calcDelay(o policy.RetryOptions, try int32) time.Duration { // try is >=1; never 0 - delay := time.Duration((1< o.MaxRetryDelay { - delay = o.MaxRetryDelay - } - return delay -} - -// NewRetryPolicy creates a policy object configured using the specified options. -// Pass nil to accept the default values; this is the same as passing a zero-value options. -func NewRetryPolicy(o *policy.RetryOptions) policy.Policy { - if o == nil { - o = &policy.RetryOptions{} - } - p := &retryPolicy{options: *o} - return p -} - -type retryPolicy struct { - options policy.RetryOptions -} - -func (p *retryPolicy) Do(req *policy.Request) (resp *http.Response, err error) { - options := p.options - // check if the retry options have been overridden for this call - if override := req.Raw().Context().Value(shared.CtxWithRetryOptionsKey{}); override != nil { - options = override.(policy.RetryOptions) - } - setDefaults(&options) - // Exponential retry algorithm: ((2 ^ attempt) - 1) * delay * random(0.8, 1.2) - // When to retry: connection failure or temporary/timeout. - var rwbody *retryableRequestBody - if req.Body() != nil { - // wrap the body so we control when it's actually closed. - // do this outside the for loop so defers don't accumulate. - rwbody = &retryableRequestBody{body: req.Body()} - defer rwbody.realClose() - } - try := int32(1) - for { - resp = nil // reset - log.Writef(log.EventRetryPolicy, "=====> Try=%d", try) - - // For each try, seek to the beginning of the Body stream. We do this even for the 1st try because - // the stream may not be at offset 0 when we first get it and we want the same behavior for the - // 1st try as for additional tries. - err = req.RewindBody() - if err != nil { - return - } - // RewindBody() restores Raw().Body to its original state, so set our rewindable after - if rwbody != nil { - req.Raw().Body = rwbody - } - - if options.TryTimeout == 0 { - clone := req.Clone(req.Raw().Context()) - resp, err = clone.Next() - } else { - // Set the per-try time for this particular retry operation and then Do the operation. - tryCtx, tryCancel := context.WithTimeout(req.Raw().Context(), options.TryTimeout) - clone := req.Clone(tryCtx) - resp, err = clone.Next() // Make the request - // if the body was already downloaded or there was an error it's safe to cancel the context now - if err != nil { - tryCancel() - } else if exported.PayloadDownloaded(resp) { - tryCancel() - } else { - // must cancel the context after the body has been read and closed - resp.Body = &contextCancelReadCloser{cf: tryCancel, body: resp.Body} - } - } - if err == nil { - log.Writef(log.EventRetryPolicy, "response %d", resp.StatusCode) - } else { - log.Writef(log.EventRetryPolicy, "error %v", err) - } - - if ctxErr := req.Raw().Context().Err(); ctxErr != nil { - // don't retry if the parent context has been cancelled or its deadline exceeded - err = ctxErr - log.Writef(log.EventRetryPolicy, "abort due to %v", err) - return - } - - // check if the error is not retriable - var nre errorinfo.NonRetriable - if errors.As(err, &nre) { - // the error says it's not retriable so don't retry - log.Writef(log.EventRetryPolicy, "non-retriable error %T", nre) - return - } - - if options.ShouldRetry != nil { - // a non-nil ShouldRetry overrides our HTTP status code check - if !options.ShouldRetry(resp, err) { - // predicate says we shouldn't retry - log.Write(log.EventRetryPolicy, "exit due to ShouldRetry") - return - } - } else if err == nil && !HasStatusCode(resp, options.StatusCodes...) { - // if there is no error and the response code isn't in the list of retry codes then we're done. - log.Write(log.EventRetryPolicy, "exit due to non-retriable status code") - return - } - - if try == options.MaxRetries+1 { - // max number of tries has been reached, don't sleep again - log.Writef(log.EventRetryPolicy, "MaxRetries %d exceeded", options.MaxRetries) - return - } - - // use the delay from retry-after if available - delay := shared.RetryAfter(resp) - if delay <= 0 { - delay = calcDelay(options, try) - } else if delay > options.MaxRetryDelay { - // the retry-after delay exceeds the the cap so don't retry - log.Writef(log.EventRetryPolicy, "Retry-After delay %s exceeds MaxRetryDelay of %s", delay, options.MaxRetryDelay) - return - } - - // drain before retrying so nothing is leaked - Drain(resp) - - log.Writef(log.EventRetryPolicy, "End Try #%d, Delay=%v", try, delay) - select { - case <-time.After(delay): - try++ - case <-req.Raw().Context().Done(): - err = req.Raw().Context().Err() - log.Writef(log.EventRetryPolicy, "abort due to %v", err) - return - } - } -} - -// WithRetryOptions adds the specified RetryOptions to the parent context. -// Use this to specify custom RetryOptions at the API-call level. -// Deprecated: use [policy.WithRetryOptions] instead. -func WithRetryOptions(parent context.Context, options policy.RetryOptions) context.Context { - return policy.WithRetryOptions(parent, options) -} - -// ********** The following type/methods implement the retryableRequestBody (a ReadSeekCloser) - -// This struct is used when sending a body to the network -type retryableRequestBody struct { - body io.ReadSeeker // Seeking is required to support retries -} - -// Read reads a block of data from an inner stream and reports progress -func (b *retryableRequestBody) Read(p []byte) (n int, err error) { - return b.body.Read(p) -} - -func (b *retryableRequestBody) Seek(offset int64, whence int) (offsetFromStart int64, err error) { - return b.body.Seek(offset, whence) -} - -func (b *retryableRequestBody) Close() error { - // We don't want the underlying transport to close the request body on transient failures so this is a nop. - // The retry policy closes the request body upon success. - return nil -} - -func (b *retryableRequestBody) realClose() error { - if c, ok := b.body.(io.Closer); ok { - return c.Close() - } - return nil -} - -// ********** The following type/methods implement the contextCancelReadCloser - -// contextCancelReadCloser combines an io.ReadCloser with a cancel func. -// it ensures the cancel func is invoked once the body has been read and closed. -type contextCancelReadCloser struct { - cf context.CancelFunc - body io.ReadCloser -} - -func (rc *contextCancelReadCloser) Read(p []byte) (n int, err error) { - return rc.body.Read(p) -} - -func (rc *contextCancelReadCloser) Close() error { - err := rc.body.Close() - rc.cf() - return err -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_sas_credential.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_sas_credential.go deleted file mode 100644 index 3964beea8623..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_sas_credential.go +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package runtime - -import ( - "net/http" - - "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" -) - -// SASCredentialPolicy authorizes requests with a [azcore.SASCredential]. -type SASCredentialPolicy struct { - cred *exported.SASCredential - header string - allowHTTP bool -} - -// SASCredentialPolicyOptions contains the optional values configuring [SASCredentialPolicy]. -type SASCredentialPolicyOptions struct { - // InsecureAllowCredentialWithHTTP enables authenticated requests over HTTP. - // By default, authenticated requests to an HTTP endpoint are rejected by the client. - // WARNING: setting this to true will allow sending the authentication key in clear text. Use with caution. - InsecureAllowCredentialWithHTTP bool -} - -// NewSASCredentialPolicy creates a new instance of [SASCredentialPolicy]. -// - cred is the [azcore.SASCredential] used to authenticate with the service -// - header is the name of the HTTP request header in which the shared access signature is placed -// - options contains optional configuration, pass nil to accept the default values -func NewSASCredentialPolicy(cred *exported.SASCredential, header string, options *SASCredentialPolicyOptions) *SASCredentialPolicy { - if options == nil { - options = &SASCredentialPolicyOptions{} - } - return &SASCredentialPolicy{ - cred: cred, - header: header, - allowHTTP: options.InsecureAllowCredentialWithHTTP, - } -} - -// Do implementes the Do method on the [policy.Polilcy] interface. -func (k *SASCredentialPolicy) Do(req *policy.Request) (*http.Response, error) { - // skip adding the authorization header if no SASCredential was provided. - // this prevents a panic that might be hard to diagnose and allows testing - // against http endpoints that don't require authentication. - if k.cred != nil { - if err := checkHTTPSForAuth(req, k.allowHTTP); err != nil { - return nil, err - } - req.Raw().Header.Add(k.header, exported.SASCredentialGet(k.cred)) - } - return req.Next() -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_telemetry.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_telemetry.go deleted file mode 100644 index 80a903546193..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_telemetry.go +++ /dev/null @@ -1,83 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package runtime - -import ( - "bytes" - "fmt" - "net/http" - "os" - "runtime" - "strings" - - "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" -) - -type telemetryPolicy struct { - telemetryValue string -} - -// NewTelemetryPolicy creates a telemetry policy object that adds telemetry information to outgoing HTTP requests. -// The format is [ ]azsdk-go-/ . -// Pass nil to accept the default values; this is the same as passing a zero-value options. -func NewTelemetryPolicy(mod, ver string, o *policy.TelemetryOptions) policy.Policy { - if o == nil { - o = &policy.TelemetryOptions{} - } - tp := telemetryPolicy{} - if o.Disabled { - return &tp - } - b := &bytes.Buffer{} - // normalize ApplicationID - if o.ApplicationID != "" { - o.ApplicationID = strings.ReplaceAll(o.ApplicationID, " ", "/") - if len(o.ApplicationID) > 24 { - o.ApplicationID = o.ApplicationID[:24] - } - b.WriteString(o.ApplicationID) - b.WriteRune(' ') - } - // mod might be the fully qualified name. in that case, we just want the package name - if i := strings.LastIndex(mod, "/"); i > -1 { - mod = mod[i+1:] - } - b.WriteString(formatTelemetry(mod, ver)) - b.WriteRune(' ') - b.WriteString(platformInfo) - tp.telemetryValue = b.String() - return &tp -} - -func formatTelemetry(comp, ver string) string { - return fmt.Sprintf("azsdk-go-%s/%s", comp, ver) -} - -func (p telemetryPolicy) Do(req *policy.Request) (*http.Response, error) { - if p.telemetryValue == "" { - return req.Next() - } - // preserve the existing User-Agent string - if ua := req.Raw().Header.Get(shared.HeaderUserAgent); ua != "" { - p.telemetryValue = fmt.Sprintf("%s %s", p.telemetryValue, ua) - } - req.Raw().Header.Set(shared.HeaderUserAgent, p.telemetryValue) - return req.Next() -} - -// NOTE: the ONLY function that should write to this variable is this func -var platformInfo = func() string { - operatingSystem := runtime.GOOS // Default OS string - switch operatingSystem { - case "windows": - operatingSystem = os.Getenv("OS") // Get more specific OS information - case "linux": // accept default OS info - case "freebsd": // accept default OS info - } - return fmt.Sprintf("(%s; %s)", runtime.Version(), operatingSystem) -}() diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/poller.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/poller.go deleted file mode 100644 index 03f76c9aa8ef..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/poller.go +++ /dev/null @@ -1,389 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package runtime - -import ( - "context" - "encoding/json" - "errors" - "flag" - "fmt" - "net/http" - "reflect" - "strings" - "time" - - "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/log" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/async" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/body" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/fake" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/loc" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/op" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/tracing" - "github.com/Azure/azure-sdk-for-go/sdk/internal/poller" -) - -// FinalStateVia is the enumerated type for the possible final-state-via values. -type FinalStateVia = pollers.FinalStateVia - -const ( - // FinalStateViaAzureAsyncOp indicates the final payload comes from the Azure-AsyncOperation URL. - FinalStateViaAzureAsyncOp = pollers.FinalStateViaAzureAsyncOp - - // FinalStateViaLocation indicates the final payload comes from the Location URL. - FinalStateViaLocation = pollers.FinalStateViaLocation - - // FinalStateViaOriginalURI indicates the final payload comes from the original URL. - FinalStateViaOriginalURI = pollers.FinalStateViaOriginalURI - - // FinalStateViaOpLocation indicates the final payload comes from the Operation-Location URL. - FinalStateViaOpLocation = pollers.FinalStateViaOpLocation -) - -// NewPollerOptions contains the optional parameters for NewPoller. -type NewPollerOptions[T any] struct { - // FinalStateVia contains the final-state-via value for the LRO. - FinalStateVia FinalStateVia - - // Response contains a preconstructed response type. - // The final payload will be unmarshaled into it and returned. - Response *T - - // Handler[T] contains a custom polling implementation. - Handler PollingHandler[T] - - // Tracer contains the Tracer from the client that's creating the Poller. - Tracer tracing.Tracer -} - -// NewPoller creates a Poller based on the provided initial response. -func NewPoller[T any](resp *http.Response, pl exported.Pipeline, options *NewPollerOptions[T]) (*Poller[T], error) { - if options == nil { - options = &NewPollerOptions[T]{} - } - result := options.Response - if result == nil { - result = new(T) - } - if options.Handler != nil { - return &Poller[T]{ - op: options.Handler, - resp: resp, - result: result, - tracer: options.Tracer, - }, nil - } - - defer resp.Body.Close() - // this is a back-stop in case the swagger is incorrect (i.e. missing one or more status codes for success). - // ideally the codegen should return an error if the initial response failed and not even create a poller. - if !poller.StatusCodeValid(resp) { - return nil, errors.New("the operation failed or was cancelled") - } - - // determine the polling method - var opr PollingHandler[T] - var err error - if fake.Applicable(resp) { - opr, err = fake.New[T](pl, resp) - } else if async.Applicable(resp) { - // async poller must be checked first as it can also have a location header - opr, err = async.New[T](pl, resp, options.FinalStateVia) - } else if op.Applicable(resp) { - // op poller must be checked before loc as it can also have a location header - opr, err = op.New[T](pl, resp, options.FinalStateVia) - } else if loc.Applicable(resp) { - opr, err = loc.New[T](pl, resp) - } else if body.Applicable(resp) { - // must test body poller last as it's a subset of the other pollers. - // TODO: this is ambiguous for PATCH/PUT if it returns a 200 with no polling headers (sync completion) - opr, err = body.New[T](pl, resp) - } else if m := resp.Request.Method; resp.StatusCode == http.StatusAccepted && (m == http.MethodDelete || m == http.MethodPost) { - // if we get here it means we have a 202 with no polling headers. - // for DELETE and POST this is a hard error per ARM RPC spec. - return nil, errors.New("response is missing polling URL") - } else { - opr, err = pollers.NewNopPoller[T](resp) - } - - if err != nil { - return nil, err - } - return &Poller[T]{ - op: opr, - resp: resp, - result: result, - tracer: options.Tracer, - }, nil -} - -// NewPollerFromResumeTokenOptions contains the optional parameters for NewPollerFromResumeToken. -type NewPollerFromResumeTokenOptions[T any] struct { - // Response contains a preconstructed response type. - // The final payload will be unmarshaled into it and returned. - Response *T - - // Handler[T] contains a custom polling implementation. - Handler PollingHandler[T] - - // Tracer contains the Tracer from the client that's creating the Poller. - Tracer tracing.Tracer -} - -// NewPollerFromResumeToken creates a Poller from a resume token string. -func NewPollerFromResumeToken[T any](token string, pl exported.Pipeline, options *NewPollerFromResumeTokenOptions[T]) (*Poller[T], error) { - if options == nil { - options = &NewPollerFromResumeTokenOptions[T]{} - } - result := options.Response - if result == nil { - result = new(T) - } - - if err := pollers.IsTokenValid[T](token); err != nil { - return nil, err - } - raw, err := pollers.ExtractToken(token) - if err != nil { - return nil, err - } - var asJSON map[string]any - if err := json.Unmarshal(raw, &asJSON); err != nil { - return nil, err - } - - opr := options.Handler - // now rehydrate the poller based on the encoded poller type - if fake.CanResume(asJSON) { - opr, _ = fake.New[T](pl, nil) - } else if opr != nil { - log.Writef(log.EventLRO, "Resuming custom poller %T.", opr) - } else if async.CanResume(asJSON) { - opr, _ = async.New[T](pl, nil, "") - } else if body.CanResume(asJSON) { - opr, _ = body.New[T](pl, nil) - } else if loc.CanResume(asJSON) { - opr, _ = loc.New[T](pl, nil) - } else if op.CanResume(asJSON) { - opr, _ = op.New[T](pl, nil, "") - } else { - return nil, fmt.Errorf("unhandled poller token %s", string(raw)) - } - if err := json.Unmarshal(raw, &opr); err != nil { - return nil, err - } - return &Poller[T]{ - op: opr, - result: result, - tracer: options.Tracer, - }, nil -} - -// PollingHandler[T] abstracts the differences among poller implementations. -type PollingHandler[T any] interface { - // Done returns true if the LRO has reached a terminal state. - Done() bool - - // Poll fetches the latest state of the LRO. - Poll(context.Context) (*http.Response, error) - - // Result is called once the LRO has reached a terminal state. It populates the out parameter - // with the result of the operation. - Result(ctx context.Context, out *T) error -} - -// Poller encapsulates a long-running operation, providing polling facilities until the operation reaches a terminal state. -type Poller[T any] struct { - op PollingHandler[T] - resp *http.Response - err error - result *T - tracer tracing.Tracer - done bool -} - -// PollUntilDoneOptions contains the optional values for the Poller[T].PollUntilDone() method. -type PollUntilDoneOptions struct { - // Frequency is the time to wait between polling intervals in absence of a Retry-After header. Allowed minimum is one second. - // Pass zero to accept the default value (30s). - Frequency time.Duration -} - -// PollUntilDone will poll the service endpoint until a terminal state is reached, an error is received, or the context expires. -// It internally uses Poll(), Done(), and Result() in its polling loop, sleeping for the specified duration between intervals. -// options: pass nil to accept the default values. -// NOTE: the default polling frequency is 30 seconds which works well for most operations. However, some operations might -// benefit from a shorter or longer duration. -func (p *Poller[T]) PollUntilDone(ctx context.Context, options *PollUntilDoneOptions) (res T, err error) { - if options == nil { - options = &PollUntilDoneOptions{} - } - cp := *options - if cp.Frequency == 0 { - cp.Frequency = 30 * time.Second - } - - ctx, endSpan := StartSpan(ctx, fmt.Sprintf("%s.PollUntilDone", shortenTypeName(reflect.TypeOf(*p).Name())), p.tracer, nil) - defer func() { endSpan(err) }() - - // skip the floor check when executing tests so they don't take so long - if isTest := flag.Lookup("test.v"); isTest == nil && cp.Frequency < time.Second { - err = errors.New("polling frequency minimum is one second") - return - } - - start := time.Now() - logPollUntilDoneExit := func(v any) { - log.Writef(log.EventLRO, "END PollUntilDone() for %T: %v, total time: %s", p.op, v, time.Since(start)) - } - log.Writef(log.EventLRO, "BEGIN PollUntilDone() for %T", p.op) - if p.resp != nil { - // initial check for a retry-after header existing on the initial response - if retryAfter := shared.RetryAfter(p.resp); retryAfter > 0 { - log.Writef(log.EventLRO, "initial Retry-After delay for %s", retryAfter.String()) - if err = shared.Delay(ctx, retryAfter); err != nil { - logPollUntilDoneExit(err) - return - } - } - } - // begin polling the endpoint until a terminal state is reached - for { - var resp *http.Response - resp, err = p.Poll(ctx) - if err != nil { - logPollUntilDoneExit(err) - return - } - if p.Done() { - logPollUntilDoneExit("succeeded") - res, err = p.Result(ctx) - return - } - d := cp.Frequency - if retryAfter := shared.RetryAfter(resp); retryAfter > 0 { - log.Writef(log.EventLRO, "Retry-After delay for %s", retryAfter.String()) - d = retryAfter - } else { - log.Writef(log.EventLRO, "delay for %s", d.String()) - } - if err = shared.Delay(ctx, d); err != nil { - logPollUntilDoneExit(err) - return - } - } -} - -// Poll fetches the latest state of the LRO. It returns an HTTP response or error. -// If Poll succeeds, the poller's state is updated and the HTTP response is returned. -// If Poll fails, the poller's state is unmodified and the error is returned. -// Calling Poll on an LRO that has reached a terminal state will return the last HTTP response. -func (p *Poller[T]) Poll(ctx context.Context) (resp *http.Response, err error) { - if p.Done() { - // the LRO has reached a terminal state, don't poll again - resp = p.resp - return - } - - ctx, endSpan := StartSpan(ctx, fmt.Sprintf("%s.Poll", shortenTypeName(reflect.TypeOf(*p).Name())), p.tracer, nil) - defer func() { endSpan(err) }() - - resp, err = p.op.Poll(ctx) - if err != nil { - return - } - p.resp = resp - return -} - -// Done returns true if the LRO has reached a terminal state. -// Once a terminal state is reached, call Result(). -func (p *Poller[T]) Done() bool { - return p.op.Done() -} - -// Result returns the result of the LRO and is meant to be used in conjunction with Poll and Done. -// If the LRO completed successfully, a populated instance of T is returned. -// If the LRO failed or was canceled, an *azcore.ResponseError error is returned. -// Calling this on an LRO in a non-terminal state will return an error. -func (p *Poller[T]) Result(ctx context.Context) (res T, err error) { - if !p.Done() { - err = errors.New("poller is in a non-terminal state") - return - } - if p.done { - // the result has already been retrieved, return the cached value - if p.err != nil { - err = p.err - return - } - res = *p.result - return - } - - ctx, endSpan := StartSpan(ctx, fmt.Sprintf("%s.Result", shortenTypeName(reflect.TypeOf(*p).Name())), p.tracer, nil) - defer func() { endSpan(err) }() - - err = p.op.Result(ctx, p.result) - var respErr *exported.ResponseError - if errors.As(err, &respErr) { - if pollers.IsNonTerminalHTTPStatusCode(respErr.RawResponse) { - // the request failed in a non-terminal way. - // don't cache the error or mark the Poller as done - return - } - // the LRO failed. record the error - p.err = err - } else if err != nil { - // the call to Result failed, don't cache anything in this case - return - } - p.done = true - if p.err != nil { - err = p.err - return - } - res = *p.result - return -} - -// ResumeToken returns a value representing the poller that can be used to resume -// the LRO at a later time. ResumeTokens are unique per service operation. -// The token's format should be considered opaque and is subject to change. -// Calling this on an LRO in a terminal state will return an error. -func (p *Poller[T]) ResumeToken() (string, error) { - if p.Done() { - return "", errors.New("poller is in a terminal state") - } - tk, err := pollers.NewResumeToken[T](p.op) - if err != nil { - return "", err - } - return tk, err -} - -// extracts the type name from the string returned from reflect.Value.Name() -func shortenTypeName(s string) string { - // the value is formatted as follows - // Poller[module/Package.Type].Method - // we want to shorten the generic type parameter string to Type - // anything we don't recognize will be left as-is - begin := strings.Index(s, "[") - end := strings.Index(s, "]") - if begin == -1 || end == -1 { - return s - } - - typeName := s[begin+1 : end] - if i := strings.LastIndex(typeName, "."); i > -1 { - typeName = typeName[i+1:] - } - return s[:begin+1] + typeName + s[end:] -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/request.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/request.go deleted file mode 100644 index 06ac95b1b718..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/request.go +++ /dev/null @@ -1,265 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package runtime - -import ( - "bytes" - "context" - "encoding/json" - "encoding/xml" - "errors" - "fmt" - "io" - "mime/multipart" - "net/textproto" - "net/url" - "path" - "strings" - - "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/streaming" -) - -// Base64Encoding is usesd to specify which base-64 encoder/decoder to use when -// encoding/decoding a slice of bytes to/from a string. -type Base64Encoding = exported.Base64Encoding - -const ( - // Base64StdFormat uses base64.StdEncoding for encoding and decoding payloads. - Base64StdFormat Base64Encoding = exported.Base64StdFormat - - // Base64URLFormat uses base64.RawURLEncoding for encoding and decoding payloads. - Base64URLFormat Base64Encoding = exported.Base64URLFormat -) - -// NewRequest creates a new policy.Request with the specified input. -// The endpoint MUST be properly encoded before calling this function. -func NewRequest(ctx context.Context, httpMethod string, endpoint string) (*policy.Request, error) { - return exported.NewRequest(ctx, httpMethod, endpoint) -} - -// EncodeQueryParams will parse and encode any query parameters in the specified URL. -// Any semicolons will automatically be escaped. -func EncodeQueryParams(u string) (string, error) { - before, after, found := strings.Cut(u, "?") - if !found { - return u, nil - } - // starting in Go 1.17, url.ParseQuery will reject semicolons in query params. - // so, we must escape them first. note that this assumes that semicolons aren't - // being used as query param separators which is per the current RFC. - // for more info: - // https://github.com/golang/go/issues/25192 - // https://github.com/golang/go/issues/50034 - qp, err := url.ParseQuery(strings.ReplaceAll(after, ";", "%3B")) - if err != nil { - return "", err - } - return before + "?" + qp.Encode(), nil -} - -// JoinPaths concatenates multiple URL path segments into one path, -// inserting path separation characters as required. JoinPaths will preserve -// query parameters in the root path -func JoinPaths(root string, paths ...string) string { - if len(paths) == 0 { - return root - } - - qps := "" - if strings.Contains(root, "?") { - splitPath := strings.Split(root, "?") - root, qps = splitPath[0], splitPath[1] - } - - p := path.Join(paths...) - // path.Join will remove any trailing slashes. - // if one was provided, preserve it. - if strings.HasSuffix(paths[len(paths)-1], "/") && !strings.HasSuffix(p, "/") { - p += "/" - } - - if qps != "" { - p = p + "?" + qps - } - - if strings.HasSuffix(root, "/") && strings.HasPrefix(p, "/") { - root = root[:len(root)-1] - } else if !strings.HasSuffix(root, "/") && !strings.HasPrefix(p, "/") { - p = "/" + p - } - return root + p -} - -// EncodeByteArray will base-64 encode the byte slice v. -func EncodeByteArray(v []byte, format Base64Encoding) string { - return exported.EncodeByteArray(v, format) -} - -// MarshalAsByteArray will base-64 encode the byte slice v, then calls SetBody. -// The encoded value is treated as a JSON string. -func MarshalAsByteArray(req *policy.Request, v []byte, format Base64Encoding) error { - // send as a JSON string - encode := fmt.Sprintf("\"%s\"", EncodeByteArray(v, format)) - // tsp generated code can set Content-Type so we must prefer that - return exported.SetBody(req, exported.NopCloser(strings.NewReader(encode)), shared.ContentTypeAppJSON, false) -} - -// MarshalAsJSON calls json.Marshal() to get the JSON encoding of v then calls SetBody. -func MarshalAsJSON(req *policy.Request, v any) error { - b, err := json.Marshal(v) - if err != nil { - return fmt.Errorf("error marshalling type %T: %s", v, err) - } - // tsp generated code can set Content-Type so we must prefer that - return exported.SetBody(req, exported.NopCloser(bytes.NewReader(b)), shared.ContentTypeAppJSON, false) -} - -// MarshalAsXML calls xml.Marshal() to get the XML encoding of v then calls SetBody. -func MarshalAsXML(req *policy.Request, v any) error { - b, err := xml.Marshal(v) - if err != nil { - return fmt.Errorf("error marshalling type %T: %s", v, err) - } - // inclue the XML header as some services require it - b = []byte(xml.Header + string(b)) - return req.SetBody(exported.NopCloser(bytes.NewReader(b)), shared.ContentTypeAppXML) -} - -// SetMultipartFormData writes the specified keys/values as multi-part form fields with the specified value. -// File content must be specified as an [io.ReadSeekCloser] or [streaming.MultipartContent]. -// Byte slices will be treated as JSON. All other values are treated as string values. -func SetMultipartFormData(req *policy.Request, formData map[string]any) error { - body := bytes.Buffer{} - writer := multipart.NewWriter(&body) - - writeContent := func(fieldname, filename string, src io.Reader) error { - fd, err := writer.CreateFormFile(fieldname, filename) - if err != nil { - return err - } - // copy the data to the form file - if _, err = io.Copy(fd, src); err != nil { - return err - } - return nil - } - - quoteEscaper := strings.NewReplacer("\\", "\\\\", `"`, "\\\"") - - writeMultipartContent := func(fieldname string, mpc streaming.MultipartContent) error { - if mpc.Body == nil { - return errors.New("streaming.MultipartContent.Body cannot be nil") - } - - // use fieldname for the file name when unspecified - filename := fieldname - - if mpc.ContentType == "" && mpc.Filename == "" { - return writeContent(fieldname, filename, mpc.Body) - } - if mpc.Filename != "" { - filename = mpc.Filename - } - // this is pretty much copied from multipart.Writer.CreateFormFile - // but lets us set the caller provided Content-Type and filename - h := make(textproto.MIMEHeader) - h.Set("Content-Disposition", - fmt.Sprintf(`form-data; name="%s"; filename="%s"`, - quoteEscaper.Replace(fieldname), quoteEscaper.Replace(filename))) - contentType := "application/octet-stream" - if mpc.ContentType != "" { - contentType = mpc.ContentType - } - h.Set("Content-Type", contentType) - fd, err := writer.CreatePart(h) - if err != nil { - return err - } - // copy the data to the form file - if _, err = io.Copy(fd, mpc.Body); err != nil { - return err - } - return nil - } - - // the same as multipart.Writer.WriteField but lets us specify the Content-Type - writeField := func(fieldname, contentType string, value string) error { - h := make(textproto.MIMEHeader) - h.Set("Content-Disposition", - fmt.Sprintf(`form-data; name="%s"`, quoteEscaper.Replace(fieldname))) - h.Set("Content-Type", contentType) - fd, err := writer.CreatePart(h) - if err != nil { - return err - } - if _, err = fd.Write([]byte(value)); err != nil { - return err - } - return nil - } - - for k, v := range formData { - if rsc, ok := v.(io.ReadSeekCloser); ok { - if err := writeContent(k, k, rsc); err != nil { - return err - } - continue - } else if rscs, ok := v.([]io.ReadSeekCloser); ok { - for _, rsc := range rscs { - if err := writeContent(k, k, rsc); err != nil { - return err - } - } - continue - } else if mpc, ok := v.(streaming.MultipartContent); ok { - if err := writeMultipartContent(k, mpc); err != nil { - return err - } - continue - } else if mpcs, ok := v.([]streaming.MultipartContent); ok { - for _, mpc := range mpcs { - if err := writeMultipartContent(k, mpc); err != nil { - return err - } - } - continue - } - - var content string - contentType := shared.ContentTypeTextPlain - switch tt := v.(type) { - case []byte: - // JSON, don't quote it - content = string(tt) - contentType = shared.ContentTypeAppJSON - case string: - content = tt - default: - // ensure the value is in string format - content = fmt.Sprintf("%v", v) - } - - if err := writeField(k, contentType, content); err != nil { - return err - } - } - if err := writer.Close(); err != nil { - return err - } - return req.SetBody(exported.NopCloser(bytes.NewReader(body.Bytes())), writer.FormDataContentType()) -} - -// SkipBodyDownload will disable automatic downloading of the response body. -func SkipBodyDownload(req *policy.Request) { - req.SetOperationValue(bodyDownloadPolicyOpValues{Skip: true}) -} - -// CtxAPINameKey is used as a context key for adding/retrieving the API name. -type CtxAPINameKey = shared.CtxAPINameKey diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/response.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/response.go deleted file mode 100644 index 048566e02c06..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/response.go +++ /dev/null @@ -1,109 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package runtime - -import ( - "bytes" - "encoding/json" - "encoding/xml" - "fmt" - "io" - "net/http" - - azexported "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported" - "github.com/Azure/azure-sdk-for-go/sdk/internal/exported" -) - -// Payload reads and returns the response body or an error. -// On a successful read, the response body is cached. -// Subsequent reads will access the cached value. -func Payload(resp *http.Response) ([]byte, error) { - return exported.Payload(resp, nil) -} - -// HasStatusCode returns true if the Response's status code is one of the specified values. -func HasStatusCode(resp *http.Response, statusCodes ...int) bool { - return exported.HasStatusCode(resp, statusCodes...) -} - -// UnmarshalAsByteArray will base-64 decode the received payload and place the result into the value pointed to by v. -func UnmarshalAsByteArray(resp *http.Response, v *[]byte, format Base64Encoding) error { - p, err := Payload(resp) - if err != nil { - return err - } - return DecodeByteArray(string(p), v, format) -} - -// UnmarshalAsJSON calls json.Unmarshal() to unmarshal the received payload into the value pointed to by v. -func UnmarshalAsJSON(resp *http.Response, v any) error { - payload, err := Payload(resp) - if err != nil { - return err - } - // TODO: verify early exit is correct - if len(payload) == 0 { - return nil - } - err = removeBOM(resp) - if err != nil { - return err - } - err = json.Unmarshal(payload, v) - if err != nil { - err = fmt.Errorf("unmarshalling type %T: %s", v, err) - } - return err -} - -// UnmarshalAsXML calls xml.Unmarshal() to unmarshal the received payload into the value pointed to by v. -func UnmarshalAsXML(resp *http.Response, v any) error { - payload, err := Payload(resp) - if err != nil { - return err - } - // TODO: verify early exit is correct - if len(payload) == 0 { - return nil - } - err = removeBOM(resp) - if err != nil { - return err - } - err = xml.Unmarshal(payload, v) - if err != nil { - err = fmt.Errorf("unmarshalling type %T: %s", v, err) - } - return err -} - -// Drain reads the response body to completion then closes it. The bytes read are discarded. -func Drain(resp *http.Response) { - if resp != nil && resp.Body != nil { - _, _ = io.Copy(io.Discard, resp.Body) - resp.Body.Close() - } -} - -// removeBOM removes any byte-order mark prefix from the payload if present. -func removeBOM(resp *http.Response) error { - _, err := exported.Payload(resp, &exported.PayloadOptions{ - BytesModifier: func(b []byte) []byte { - // UTF8 - return bytes.TrimPrefix(b, []byte("\xef\xbb\xbf")) - }, - }) - if err != nil { - return err - } - return nil -} - -// DecodeByteArray will base-64 decode the provided string into v. -func DecodeByteArray(s string, v *[]byte, format Base64Encoding) error { - return azexported.DecodeByteArray(s, v, format) -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/transport_default_dialer_other.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/transport_default_dialer_other.go deleted file mode 100644 index 1c75d771f2e4..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/transport_default_dialer_other.go +++ /dev/null @@ -1,15 +0,0 @@ -//go:build !wasm - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package runtime - -import ( - "context" - "net" -) - -func defaultTransportDialContext(dialer *net.Dialer) func(context.Context, string, string) (net.Conn, error) { - return dialer.DialContext -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/transport_default_dialer_wasm.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/transport_default_dialer_wasm.go deleted file mode 100644 index 3dc9eeecddf6..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/transport_default_dialer_wasm.go +++ /dev/null @@ -1,15 +0,0 @@ -//go:build (js && wasm) || wasip1 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package runtime - -import ( - "context" - "net" -) - -func defaultTransportDialContext(dialer *net.Dialer) func(context.Context, string, string) (net.Conn, error) { - return nil -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/transport_default_http_client.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/transport_default_http_client.go deleted file mode 100644 index 2124c1d48b9a..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/transport_default_http_client.go +++ /dev/null @@ -1,48 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package runtime - -import ( - "crypto/tls" - "net" - "net/http" - "time" - - "golang.org/x/net/http2" -) - -var defaultHTTPClient *http.Client - -func init() { - defaultTransport := &http.Transport{ - Proxy: http.ProxyFromEnvironment, - DialContext: defaultTransportDialContext(&net.Dialer{ - Timeout: 30 * time.Second, - KeepAlive: 30 * time.Second, - }), - ForceAttemptHTTP2: true, - MaxIdleConns: 100, - MaxIdleConnsPerHost: 10, - IdleConnTimeout: 90 * time.Second, - TLSHandshakeTimeout: 10 * time.Second, - ExpectContinueTimeout: 1 * time.Second, - TLSClientConfig: &tls.Config{ - MinVersion: tls.VersionTLS12, - Renegotiation: tls.RenegotiateFreelyAsClient, - }, - } - // TODO: evaluate removing this once https://github.com/golang/go/issues/59690 has been fixed - if http2Transport, err := http2.ConfigureTransports(defaultTransport); err == nil { - // if the connection has been idle for 10 seconds, send a ping frame for a health check - http2Transport.ReadIdleTimeout = 10 * time.Second - // if there's no response to the ping within the timeout, the connection will be closed - http2Transport.PingTimeout = 5 * time.Second - } - defaultHTTPClient = &http.Client{ - Transport: defaultTransport, - } -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/streaming/doc.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/streaming/doc.go deleted file mode 100644 index cadaef3d5842..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/streaming/doc.go +++ /dev/null @@ -1,9 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright 2017 Microsoft Corporation. All rights reserved. -// Use of this source code is governed by an MIT -// license that can be found in the LICENSE file. - -// Package streaming contains helpers for streaming IO operations and progress reporting. -package streaming diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/streaming/progress.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/streaming/progress.go deleted file mode 100644 index 2468540bd757..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/streaming/progress.go +++ /dev/null @@ -1,89 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package streaming - -import ( - "io" - - "github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported" -) - -type progress struct { - rc io.ReadCloser - rsc io.ReadSeekCloser - pr func(bytesTransferred int64) - offset int64 -} - -// NopCloser returns a ReadSeekCloser with a no-op close method wrapping the provided io.ReadSeeker. -// In addition to adding a Close method to an io.ReadSeeker, this can also be used to wrap an -// io.ReadSeekCloser with a no-op Close method to allow explicit control of when the io.ReedSeekCloser -// has its underlying stream closed. -func NopCloser(rs io.ReadSeeker) io.ReadSeekCloser { - return exported.NopCloser(rs) -} - -// NewRequestProgress adds progress reporting to an HTTP request's body stream. -func NewRequestProgress(body io.ReadSeekCloser, pr func(bytesTransferred int64)) io.ReadSeekCloser { - return &progress{ - rc: body, - rsc: body, - pr: pr, - offset: 0, - } -} - -// NewResponseProgress adds progress reporting to an HTTP response's body stream. -func NewResponseProgress(body io.ReadCloser, pr func(bytesTransferred int64)) io.ReadCloser { - return &progress{ - rc: body, - rsc: nil, - pr: pr, - offset: 0, - } -} - -// Read reads a block of data from an inner stream and reports progress -func (p *progress) Read(b []byte) (n int, err error) { - n, err = p.rc.Read(b) - if err != nil && err != io.EOF { - return - } - p.offset += int64(n) - // Invokes the user's callback method to report progress - p.pr(p.offset) - return -} - -// Seek only expects a zero or from beginning. -func (p *progress) Seek(offset int64, whence int) (int64, error) { - // This should only ever be called with offset = 0 and whence = io.SeekStart - n, err := p.rsc.Seek(offset, whence) - if err == nil { - p.offset = int64(n) - } - return n, err -} - -// requestBodyProgress supports Close but the underlying stream may not; if it does, Close will close it. -func (p *progress) Close() error { - return p.rc.Close() -} - -// MultipartContent contains streaming content used in multipart/form payloads. -type MultipartContent struct { - // Body contains the required content body. - Body io.ReadSeekCloser - - // ContentType optionally specifies the HTTP Content-Type for this Body. - // The default value is application/octet-stream. - ContentType string - - // Filename optionally specifies the filename for this Body. - // The default value is the field name for the multipart/form section. - Filename string -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/to/doc.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/to/doc.go deleted file mode 100644 index faa98c9dc514..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/to/doc.go +++ /dev/null @@ -1,9 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright 2017 Microsoft Corporation. All rights reserved. -// Use of this source code is governed by an MIT -// license that can be found in the LICENSE file. - -// Package to contains various type-conversion helper functions. -package to diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/to/to.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/to/to.go deleted file mode 100644 index e0e4817b90d1..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/to/to.go +++ /dev/null @@ -1,21 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package to - -// Ptr returns a pointer to the provided value. -func Ptr[T any](v T) *T { - return &v -} - -// SliceOfPtrs returns a slice of *T from the specified values. -func SliceOfPtrs[T any](vv ...T) []*T { - slc := make([]*T, len(vv)) - for i := range vv { - slc[i] = Ptr(vv[i]) - } - return slc -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/tracing/constants.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/tracing/constants.go deleted file mode 100644 index 80282d4ab0a6..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/tracing/constants.go +++ /dev/null @@ -1,41 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package tracing - -// SpanKind represents the role of a Span inside a Trace. Often, this defines how a Span will be processed and visualized by various backends. -type SpanKind int - -const ( - // SpanKindInternal indicates the span represents an internal operation within an application. - SpanKindInternal SpanKind = 1 - - // SpanKindServer indicates the span covers server-side handling of a request. - SpanKindServer SpanKind = 2 - - // SpanKindClient indicates the span describes a request to a remote service. - SpanKindClient SpanKind = 3 - - // SpanKindProducer indicates the span was created by a messaging producer. - SpanKindProducer SpanKind = 4 - - // SpanKindConsumer indicates the span was created by a messaging consumer. - SpanKindConsumer SpanKind = 5 -) - -// SpanStatus represents the status of a span. -type SpanStatus int - -const ( - // SpanStatusUnset is the default status code. - SpanStatusUnset SpanStatus = 0 - - // SpanStatusError indicates the operation contains an error. - SpanStatusError SpanStatus = 1 - - // SpanStatusOK indicates the operation completed successfully. - SpanStatusOK SpanStatus = 2 -) diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/tracing/tracing.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/tracing/tracing.go deleted file mode 100644 index 1ade7c560ff1..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/tracing/tracing.go +++ /dev/null @@ -1,191 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -// Package tracing contains the definitions needed to support distributed tracing. -package tracing - -import ( - "context" -) - -// ProviderOptions contains the optional values when creating a Provider. -type ProviderOptions struct { - // for future expansion -} - -// NewProvider creates a new Provider with the specified values. -// - newTracerFn is the underlying implementation for creating Tracer instances -// - options contains optional values; pass nil to accept the default value -func NewProvider(newTracerFn func(name, version string) Tracer, options *ProviderOptions) Provider { - return Provider{ - newTracerFn: newTracerFn, - } -} - -// Provider is the factory that creates Tracer instances. -// It defaults to a no-op provider. -type Provider struct { - newTracerFn func(name, version string) Tracer -} - -// NewTracer creates a new Tracer for the specified module name and version. -// - module - the fully qualified name of the module -// - version - the version of the module -func (p Provider) NewTracer(module, version string) (tracer Tracer) { - if p.newTracerFn != nil { - tracer = p.newTracerFn(module, version) - } - return -} - -///////////////////////////////////////////////////////////////////////////////////////////////////////////// - -// TracerOptions contains the optional values when creating a Tracer. -type TracerOptions struct { - // SpanFromContext contains the implementation for the Tracer.SpanFromContext method. - SpanFromContext func(context.Context) Span -} - -// NewTracer creates a Tracer with the specified values. -// - newSpanFn is the underlying implementation for creating Span instances -// - options contains optional values; pass nil to accept the default value -func NewTracer(newSpanFn func(ctx context.Context, spanName string, options *SpanOptions) (context.Context, Span), options *TracerOptions) Tracer { - if options == nil { - options = &TracerOptions{} - } - return Tracer{ - newSpanFn: newSpanFn, - spanFromContextFn: options.SpanFromContext, - } -} - -// Tracer is the factory that creates Span instances. -type Tracer struct { - attrs []Attribute - newSpanFn func(ctx context.Context, spanName string, options *SpanOptions) (context.Context, Span) - spanFromContextFn func(ctx context.Context) Span -} - -// Start creates a new span and a context.Context that contains it. -// - ctx is the parent context for this span. If it contains a Span, the newly created span will be a child of that span, else it will be a root span -// - spanName identifies the span within a trace, it's typically the fully qualified API name -// - options contains optional values for the span, pass nil to accept any defaults -func (t Tracer) Start(ctx context.Context, spanName string, options *SpanOptions) (context.Context, Span) { - if t.newSpanFn != nil { - opts := SpanOptions{} - if options != nil { - opts = *options - } - opts.Attributes = append(opts.Attributes, t.attrs...) - return t.newSpanFn(ctx, spanName, &opts) - } - return ctx, Span{} -} - -// SetAttributes sets attrs to be applied to each Span. If a key from attrs -// already exists for an attribute of the Span it will be overwritten with -// the value contained in attrs. -func (t *Tracer) SetAttributes(attrs ...Attribute) { - t.attrs = append(t.attrs, attrs...) -} - -// Enabled returns true if this Tracer is capable of creating Spans. -func (t Tracer) Enabled() bool { - return t.newSpanFn != nil -} - -// SpanFromContext returns the Span associated with the current context. -// If the provided context has no Span, false is returned. -func (t Tracer) SpanFromContext(ctx context.Context) Span { - if t.spanFromContextFn != nil { - return t.spanFromContextFn(ctx) - } - return Span{} -} - -// SpanOptions contains optional settings for creating a span. -type SpanOptions struct { - // Kind indicates the kind of Span. - Kind SpanKind - - // Attributes contains key-value pairs of attributes for the span. - Attributes []Attribute -} - -///////////////////////////////////////////////////////////////////////////////////////////////////////////// - -// SpanImpl abstracts the underlying implementation for Span, -// allowing it to work with various tracing implementations. -// Any zero-values will have their default, no-op behavior. -type SpanImpl struct { - // End contains the implementation for the Span.End method. - End func() - - // SetAttributes contains the implementation for the Span.SetAttributes method. - SetAttributes func(...Attribute) - - // AddEvent contains the implementation for the Span.AddEvent method. - AddEvent func(string, ...Attribute) - - // SetStatus contains the implementation for the Span.SetStatus method. - SetStatus func(SpanStatus, string) -} - -// NewSpan creates a Span with the specified implementation. -func NewSpan(impl SpanImpl) Span { - return Span{ - impl: impl, - } -} - -// Span is a single unit of a trace. A trace can contain multiple spans. -// A zero-value Span provides a no-op implementation. -type Span struct { - impl SpanImpl -} - -// End terminates the span and MUST be called before the span leaves scope. -// Any further updates to the span will be ignored after End is called. -func (s Span) End() { - if s.impl.End != nil { - s.impl.End() - } -} - -// SetAttributes sets the specified attributes on the Span. -// Any existing attributes with the same keys will have their values overwritten. -func (s Span) SetAttributes(attrs ...Attribute) { - if s.impl.SetAttributes != nil { - s.impl.SetAttributes(attrs...) - } -} - -// AddEvent adds a named event with an optional set of attributes to the span. -func (s Span) AddEvent(name string, attrs ...Attribute) { - if s.impl.AddEvent != nil { - s.impl.AddEvent(name, attrs...) - } -} - -// SetStatus sets the status on the span along with a description. -func (s Span) SetStatus(code SpanStatus, desc string) { - if s.impl.SetStatus != nil { - s.impl.SetStatus(code, desc) - } -} - -///////////////////////////////////////////////////////////////////////////////////////////////////////////// - -// Attribute is a key-value pair. -type Attribute struct { - // Key is the name of the attribute. - Key string - - // Value is the attribute's value. - // Types that are natively supported include int64, float64, int, bool, string. - // Any other type will be formatted per rules of fmt.Sprintf("%v"). - Value any -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/.gitignore b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/.gitignore deleted file mode 100644 index 8cdb9103650c..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -# live test artifacts -Dockerfile -k8s.yaml -sshkey* diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/CHANGELOG.md b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/CHANGELOG.md deleted file mode 100644 index 6d4b6feb86ee..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/CHANGELOG.md +++ /dev/null @@ -1,551 +0,0 @@ -# Release History - -## 1.6.0 (2024-06-10) - -### Features Added -* `NewOnBehalfOfCredentialWithClientAssertions` creates an on-behalf-of credential - that authenticates with client assertions such as federated credentials - -### Breaking Changes -> These changes affect only code written against a beta version such as v1.6.0-beta.4 -* Removed `AzurePipelinesCredential` and the persistent token caching API. - They will return in v1.7.0-beta.1 - -### Bugs Fixed -* Managed identity bug fixes - -## 1.6.0-beta.4 (2024-05-14) - -### Features Added -* `AzurePipelinesCredential` authenticates an Azure Pipeline service connection with - workload identity federation - -## 1.6.0-beta.3 (2024-04-09) - -### Breaking Changes -* `DefaultAzureCredential` now sends a probe request with no retries for IMDS managed identity - environments to avoid excessive retry delays when the IMDS endpoint is not available. This - should improve credential chain resolution for local development scenarios. - -### Bugs Fixed -* `ManagedIdentityCredential` now specifies resource IDs correctly for Azure Container Instances - -## 1.5.2 (2024-04-09) - -### Bugs Fixed -* `ManagedIdentityCredential` now specifies resource IDs correctly for Azure Container Instances - -### Other Changes -* Restored v1.4.0 error behavior for empty tenant IDs -* Upgraded dependencies - -## 1.6.0-beta.2 (2024-02-06) - -### Breaking Changes -> These changes affect only code written against a beta version such as v1.6.0-beta.1 -* Replaced `ErrAuthenticationRequired` with `AuthenticationRequiredError`, a struct - type that carries the `TokenRequestOptions` passed to the `GetToken` call which - returned the error. - -### Bugs Fixed -* Fixed more cases in which credential chains like `DefaultAzureCredential` - should try their next credential after attempting managed identity - authentication in a Docker Desktop container - -### Other Changes -* `AzureCLICredential` uses the CLI's `expires_on` value for token expiration - -## 1.6.0-beta.1 (2024-01-17) - -### Features Added -* Restored persistent token caching API first added in v1.5.0-beta.1 -* Added `AzureCLICredentialOptions.Subscription` - -## 1.5.1 (2024-01-17) - -### Bugs Fixed -* `InteractiveBrowserCredential` handles `AdditionallyAllowedTenants` correctly - -## 1.5.0 (2024-01-16) - -### Breaking Changes -> These changes affect only code written against a beta version such as v1.5.0-beta.1 -* Removed persistent token caching. It will return in v1.6.0-beta.1 - -### Bugs Fixed -* Credentials now preserve MSAL headers e.g. X-Client-Sku - -### Other Changes -* Upgraded dependencies - -## 1.5.0-beta.2 (2023-11-07) - -### Features Added -* `DefaultAzureCredential` and `ManagedIdentityCredential` support Azure ML managed identity -* Added spans for distributed tracing. - -## 1.5.0-beta.1 (2023-10-10) - -### Features Added -* Optional persistent token caching for most credentials. Set `TokenCachePersistenceOptions` - on a credential's options to enable and configure this. See the package documentation for - this version and [TOKEN_CACHING.md](https://aka.ms/azsdk/go/identity/caching) for more - details. -* `AzureDeveloperCLICredential` authenticates with the Azure Developer CLI (`azd`). This - credential is also part of the `DefaultAzureCredential` authentication flow. - -## 1.4.0 (2023-10-10) - -### Bugs Fixed -* `ManagedIdentityCredential` will now retry when IMDS responds 410 or 503 - -## 1.4.0-beta.5 (2023-09-12) - -### Features Added -* Service principal credentials can request CAE tokens - -### Breaking Changes -> These changes affect only code written against a beta version such as v1.4.0-beta.4 -* Whether `GetToken` requests a CAE token is now determined by `TokenRequestOptions.EnableCAE`. Azure - SDK clients which support CAE will set this option automatically. Credentials no longer request CAE - tokens by default or observe the environment variable "AZURE_IDENTITY_DISABLE_CP1". - -### Bugs Fixed -* Credential chains such as `DefaultAzureCredential` now try their next credential, if any, when - managed identity authentication fails in a Docker Desktop container - ([#21417](https://github.com/Azure/azure-sdk-for-go/issues/21417)) - -## 1.4.0-beta.4 (2023-08-16) - -### Other Changes -* Upgraded dependencies - -## 1.3.1 (2023-08-16) - -### Other Changes -* Upgraded dependencies - -## 1.4.0-beta.3 (2023-08-08) - -### Bugs Fixed -* One invocation of `AzureCLICredential.GetToken()` and `OnBehalfOfCredential.GetToken()` - can no longer make two authentication attempts - -## 1.4.0-beta.2 (2023-07-14) - -### Other Changes -* `DefaultAzureCredentialOptions.TenantID` applies to workload identity authentication -* Upgraded dependencies - -## 1.4.0-beta.1 (2023-06-06) - -### Other Changes -* Re-enabled CAE support as in v1.3.0-beta.3 - -## 1.3.0 (2023-05-09) - -### Breaking Changes -> These changes affect only code written against a beta version such as v1.3.0-beta.5 -* Renamed `NewOnBehalfOfCredentialFromCertificate` to `NewOnBehalfOfCredentialWithCertificate` -* Renamed `NewOnBehalfOfCredentialFromSecret` to `NewOnBehalfOfCredentialWithSecret` - -### Other Changes -* Upgraded to MSAL v1.0.0 - -## 1.3.0-beta.5 (2023-04-11) - -### Breaking Changes -> These changes affect only code written against a beta version such as v1.3.0-beta.4 -* Moved `NewWorkloadIdentityCredential()` parameters into `WorkloadIdentityCredentialOptions`. - The constructor now reads default configuration from environment variables set by the Azure - workload identity webhook by default. - ([#20478](https://github.com/Azure/azure-sdk-for-go/pull/20478)) -* Removed CAE support. It will return in v1.4.0-beta.1 - ([#20479](https://github.com/Azure/azure-sdk-for-go/pull/20479)) - -### Bugs Fixed -* Fixed an issue in `DefaultAzureCredential` that could cause the managed identity endpoint check to fail in rare circumstances. - -## 1.3.0-beta.4 (2023-03-08) - -### Features Added -* Added `WorkloadIdentityCredentialOptions.AdditionallyAllowedTenants` and `.DisableInstanceDiscovery` - -### Bugs Fixed -* Credentials now synchronize within `GetToken()` so a single instance can be shared among goroutines - ([#20044](https://github.com/Azure/azure-sdk-for-go/issues/20044)) - -### Other Changes -* Upgraded dependencies - -## 1.2.2 (2023-03-07) - -### Other Changes -* Upgraded dependencies - -## 1.3.0-beta.3 (2023-02-07) - -### Features Added -* By default, credentials set client capability "CP1" to enable support for - [Continuous Access Evaluation (CAE)](https://learn.microsoft.com/entra/identity-platform/app-resilience-continuous-access-evaluation). - This indicates to Microsoft Entra ID that your application can handle CAE claims challenges. - You can disable this behavior by setting the environment variable "AZURE_IDENTITY_DISABLE_CP1" to "true". -* `InteractiveBrowserCredentialOptions.LoginHint` enables pre-populating the login - prompt with a username ([#15599](https://github.com/Azure/azure-sdk-for-go/pull/15599)) -* Service principal and user credentials support ADFS authentication on Azure Stack. - Specify "adfs" as the credential's tenant. -* Applications running in private or disconnected clouds can prevent credentials from - requesting Microsoft Entra instance metadata by setting the `DisableInstanceDiscovery` - field on credential options. -* Many credentials can now be configured to authenticate in multiple tenants. The - options types for these credentials have an `AdditionallyAllowedTenants` field - that specifies additional tenants in which the credential may authenticate. - -## 1.3.0-beta.2 (2023-01-10) - -### Features Added -* Added `OnBehalfOfCredential` to support the on-behalf-of flow - ([#16642](https://github.com/Azure/azure-sdk-for-go/issues/16642)) - -### Bugs Fixed -* `AzureCLICredential` reports token expiration in local time (should be UTC) - -### Other Changes -* `AzureCLICredential` imposes its default timeout only when the `Context` - passed to `GetToken()` has no deadline -* Added `NewCredentialUnavailableError()`. This function constructs an error indicating - a credential can't authenticate and an encompassing `ChainedTokenCredential` should - try its next credential, if any. - -## 1.3.0-beta.1 (2022-12-13) - -### Features Added -* `WorkloadIdentityCredential` and `DefaultAzureCredential` support - Workload Identity Federation on Kubernetes. `DefaultAzureCredential` - support requires environment variable configuration as set by the - Workload Identity webhook. - ([#15615](https://github.com/Azure/azure-sdk-for-go/issues/15615)) - -## 1.2.0 (2022-11-08) - -### Other Changes -* This version includes all fixes and features from 1.2.0-beta.* - -## 1.2.0-beta.3 (2022-10-11) - -### Features Added -* `ManagedIdentityCredential` caches tokens in memory - -### Bugs Fixed -* `ClientCertificateCredential` sends only the leaf cert for SNI authentication - -## 1.2.0-beta.2 (2022-08-10) - -### Features Added -* Added `ClientAssertionCredential` to enable applications to authenticate - with custom client assertions - -### Other Changes -* Updated AuthenticationFailedError with links to TROUBLESHOOTING.md for relevant errors -* Upgraded `microsoft-authentication-library-for-go` requirement to v0.6.0 - -## 1.2.0-beta.1 (2022-06-07) - -### Features Added -* `EnvironmentCredential` reads certificate passwords from `AZURE_CLIENT_CERTIFICATE_PASSWORD` - ([#17099](https://github.com/Azure/azure-sdk-for-go/pull/17099)) - -## 1.1.0 (2022-06-07) - -### Features Added -* `ClientCertificateCredential` and `ClientSecretCredential` support ESTS-R. First-party - applications can set environment variable `AZURE_REGIONAL_AUTHORITY_NAME` with a - region name. - ([#15605](https://github.com/Azure/azure-sdk-for-go/issues/15605)) - -## 1.0.1 (2022-06-07) - -### Other Changes -* Upgrade `microsoft-authentication-library-for-go` requirement to v0.5.1 - ([#18176](https://github.com/Azure/azure-sdk-for-go/issues/18176)) - -## 1.0.0 (2022-05-12) - -### Features Added -* `DefaultAzureCredential` reads environment variable `AZURE_CLIENT_ID` for the - client ID of a user-assigned managed identity - ([#17293](https://github.com/Azure/azure-sdk-for-go/pull/17293)) - -### Breaking Changes -* Removed `AuthorizationCodeCredential`. Use `InteractiveBrowserCredential` instead - to authenticate a user with the authorization code flow. -* Instances of `AuthenticationFailedError` are now returned by pointer. -* `GetToken()` returns `azcore.AccessToken` by value - -### Bugs Fixed -* `AzureCLICredential` panics after receiving an unexpected error type - ([#17490](https://github.com/Azure/azure-sdk-for-go/issues/17490)) - -### Other Changes -* `GetToken()` returns an error when the caller specifies no scope -* Updated to the latest versions of `golang.org/x/crypto`, `azcore` and `internal` - -## 0.14.0 (2022-04-05) - -### Breaking Changes -* This module now requires Go 1.18 -* Removed `AuthorityHost`. Credentials are now configured for sovereign or private - clouds with the API in `azcore/cloud`, for example: - ```go - // before - opts := azidentity.ClientSecretCredentialOptions{AuthorityHost: azidentity.AzureGovernment} - cred, err := azidentity.NewClientSecretCredential(tenantID, clientID, secret, &opts) - - // after - import "github.com/Azure/azure-sdk-for-go/sdk/azcore/cloud" - - opts := azidentity.ClientSecretCredentialOptions{} - opts.Cloud = cloud.AzureGovernment - cred, err := azidentity.NewClientSecretCredential(tenantID, clientID, secret, &opts) - ``` - -## 0.13.2 (2022-03-08) - -### Bugs Fixed -* Prevented a data race in `DefaultAzureCredential` and `ChainedTokenCredential` - ([#17144](https://github.com/Azure/azure-sdk-for-go/issues/17144)) - -### Other Changes -* Upgraded App Service managed identity version from 2017-09-01 to 2019-08-01 - ([#17086](https://github.com/Azure/azure-sdk-for-go/pull/17086)) - -## 0.13.1 (2022-02-08) - -### Features Added -* `EnvironmentCredential` supports certificate SNI authentication when - `AZURE_CLIENT_SEND_CERTIFICATE_CHAIN` is "true". - ([#16851](https://github.com/Azure/azure-sdk-for-go/pull/16851)) - -### Bugs Fixed -* `ManagedIdentityCredential.GetToken()` now returns an error when configured for - a user assigned identity in Azure Cloud Shell (which doesn't support such identities) - ([#16946](https://github.com/Azure/azure-sdk-for-go/pull/16946)) - -### Other Changes -* `NewDefaultAzureCredential()` logs non-fatal errors. These errors are also included in the - error returned by `DefaultAzureCredential.GetToken()` when it's unable to acquire a token - from any source. ([#15923](https://github.com/Azure/azure-sdk-for-go/issues/15923)) - -## 0.13.0 (2022-01-11) - -### Breaking Changes -* Replaced `AuthenticationFailedError.RawResponse()` with a field having the same name -* Unexported `CredentialUnavailableError` -* Instances of `ChainedTokenCredential` will now skip looping through the list of source credentials and re-use the first successful credential on subsequent calls to `GetToken`. - * If `ChainedTokenCredentialOptions.RetrySources` is true, `ChainedTokenCredential` will continue to try all of the originally provided credentials each time the `GetToken` method is called. - * `ChainedTokenCredential.successfulCredential` will contain a reference to the last successful credential. - * `DefaultAzureCredenial` will also re-use the first successful credential on subsequent calls to `GetToken`. - * `DefaultAzureCredential.chain.successfulCredential` will also contain a reference to the last successful credential. - -### Other Changes -* `ManagedIdentityCredential` no longer probes IMDS before requesting a token - from it. Also, an error response from IMDS no longer disables a credential - instance. Following an error, a credential instance will continue to send - requests to IMDS as necessary. -* Adopted MSAL for user and service principal authentication -* Updated `azcore` requirement to 0.21.0 - -## 0.12.0 (2021-11-02) -### Breaking Changes -* Raised minimum go version to 1.16 -* Removed `NewAuthenticationPolicy()` from credentials. Clients should instead use azcore's - `runtime.NewBearerTokenPolicy()` to construct a bearer token authorization policy. -* The `AuthorityHost` field in credential options structs is now a custom type, - `AuthorityHost`, with underlying type `string` -* `NewChainedTokenCredential` has a new signature to accommodate a placeholder - options struct: - ```go - // before - cred, err := NewChainedTokenCredential(credA, credB) - - // after - cred, err := NewChainedTokenCredential([]azcore.TokenCredential{credA, credB}, nil) - ``` -* Removed `ExcludeAzureCLICredential`, `ExcludeEnvironmentCredential`, and `ExcludeMSICredential` - from `DefaultAzureCredentialOptions` -* `NewClientCertificateCredential` requires a `[]*x509.Certificate` and `crypto.PrivateKey` instead of - a path to a certificate file. Added `ParseCertificates` to simplify getting these in common cases: - ```go - // before - cred, err := NewClientCertificateCredential("tenant", "client-id", "/cert.pem", nil) - - // after - certData, err := os.ReadFile("/cert.pem") - certs, key, err := ParseCertificates(certData, password) - cred, err := NewClientCertificateCredential(tenantID, clientID, certs, key, nil) - ``` -* Removed `InteractiveBrowserCredentialOptions.ClientSecret` and `.Port` -* Removed `AADAuthenticationFailedError` -* Removed `id` parameter of `NewManagedIdentityCredential()`. User assigned identities are now - specified by `ManagedIdentityCredentialOptions.ID`: - ```go - // before - cred, err := NewManagedIdentityCredential("client-id", nil) - // or, for a resource ID - opts := &ManagedIdentityCredentialOptions{ID: ResourceID} - cred, err := NewManagedIdentityCredential("/subscriptions/...", opts) - - // after - clientID := ClientID("7cf7db0d-...") - opts := &ManagedIdentityCredentialOptions{ID: clientID} - // or, for a resource ID - resID: ResourceID("/subscriptions/...") - opts := &ManagedIdentityCredentialOptions{ID: resID} - cred, err := NewManagedIdentityCredential(opts) - ``` -* `DeviceCodeCredentialOptions.UserPrompt` has a new type: `func(context.Context, DeviceCodeMessage) error` -* Credential options structs now embed `azcore.ClientOptions`. In addition to changing literal initialization - syntax, this change renames `HTTPClient` fields to `Transport`. -* Renamed `LogCredential` to `EventCredential` -* `AzureCLICredential` no longer reads the environment variable `AZURE_CLI_PATH` -* `NewManagedIdentityCredential` no longer reads environment variables `AZURE_CLIENT_ID` and - `AZURE_RESOURCE_ID`. Use `ManagedIdentityCredentialOptions.ID` instead. -* Unexported `AuthenticationFailedError` and `CredentialUnavailableError` structs. In their place are two - interfaces having the same names. - -### Bugs Fixed -* `AzureCLICredential.GetToken` no longer mutates its `opts.Scopes` - -### Features Added -* Added connection configuration options to `DefaultAzureCredentialOptions` -* `AuthenticationFailedError.RawResponse()` returns the HTTP response motivating the error, - if available - -### Other Changes -* `NewDefaultAzureCredential()` returns `*DefaultAzureCredential` instead of `*ChainedTokenCredential` -* Added `TenantID` field to `DefaultAzureCredentialOptions` and `AzureCLICredentialOptions` - -## 0.11.0 (2021-09-08) -### Breaking Changes -* Unexported `AzureCLICredentialOptions.TokenProvider` and its type, - `AzureCLITokenProvider` - -### Bug Fixes -* `ManagedIdentityCredential.GetToken` returns `CredentialUnavailableError` - when IMDS has no assigned identity, signaling `DefaultAzureCredential` to - try other credentials - - -## 0.10.0 (2021-08-30) -### Breaking Changes -* Update based on `azcore` refactor [#15383](https://github.com/Azure/azure-sdk-for-go/pull/15383) - -## 0.9.3 (2021-08-20) - -### Bugs Fixed -* `ManagedIdentityCredential.GetToken` no longer mutates its `opts.Scopes` - -### Other Changes -* Bumps version of `azcore` to `v0.18.1` - - -## 0.9.2 (2021-07-23) -### Features Added -* Adding support for Service Fabric environment in `ManagedIdentityCredential` -* Adding an option for using a resource ID instead of client ID in `ManagedIdentityCredential` - - -## 0.9.1 (2021-05-24) -### Features Added -* Add LICENSE.txt and bump version information - - -## 0.9.0 (2021-05-21) -### Features Added -* Add support for authenticating in Azure Stack environments -* Enable user assigned identities for the IMDS scenario in `ManagedIdentityCredential` -* Add scope to resource conversion in `GetToken()` on `ManagedIdentityCredential` - - -## 0.8.0 (2021-01-20) -### Features Added -* Updating documentation - - -## 0.7.1 (2021-01-04) -### Features Added -* Adding port option to `InteractiveBrowserCredential` - - -## 0.7.0 (2020-12-11) -### Features Added -* Add `redirectURI` parameter back to authentication code flow - - -## 0.6.1 (2020-12-09) -### Features Added -* Updating query parameter in `ManagedIdentityCredential` and updating datetime string for parsing managed identity access tokens. - - -## 0.6.0 (2020-11-16) -### Features Added -* Remove `RedirectURL` parameter from auth code flow to align with the MSAL implementation which relies on the native client redirect URL. - - -## 0.5.0 (2020-10-30) -### Features Added -* Flattening credential options - - -## 0.4.3 (2020-10-21) -### Features Added -* Adding Azure Arc support in `ManagedIdentityCredential` - - -## 0.4.2 (2020-10-16) -### Features Added -* Typo fixes - - -## 0.4.1 (2020-10-16) -### Features Added -* Ensure authority hosts are only HTTPs - - -## 0.4.0 (2020-10-16) -### Features Added -* Adding options structs for credentials - - -## 0.3.0 (2020-10-09) -### Features Added -* Update `DeviceCodeCredential` callback - - -## 0.2.2 (2020-10-09) -### Features Added -* Add `AuthorizationCodeCredential` - - -## 0.2.1 (2020-10-06) -### Features Added -* Add `InteractiveBrowserCredential` - - -## 0.2.0 (2020-09-11) -### Features Added -* Refactor `azidentity` on top of `azcore` refactor -* Updated policies to conform to `policy.Policy` interface changes. -* Updated non-retriable errors to conform to `azcore.NonRetriableError`. -* Fixed calls to `Request.SetBody()` to include content type. -* Switched endpoints to string types and removed extra parsing code. - - -## 0.1.1 (2020-09-02) -### Features Added -* Add `AzureCLICredential` to `DefaultAzureCredential` chain - - -## 0.1.0 (2020-07-23) -### Features Added -* Initial Release. Azure Identity library that provides Microsoft Entra token authentication support for the SDK. diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/LICENSE.txt b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/LICENSE.txt deleted file mode 100644 index 48ea6616b5b8..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/LICENSE.txt +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) Microsoft Corporation. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/MIGRATION.md b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/MIGRATION.md deleted file mode 100644 index 4404be824491..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/MIGRATION.md +++ /dev/null @@ -1,307 +0,0 @@ -# Migrating from autorest/adal to azidentity - -`azidentity` provides Microsoft Entra ID ([formerly Azure Active Directory](https://learn.microsoft.com/entra/fundamentals/new-name)) authentication for the newest Azure SDK modules (`github.com/azure-sdk-for-go/sdk/...`). Older Azure SDK packages (`github.com/azure-sdk-for-go/services/...`) use types from `github.com/go-autorest/autorest/adal` instead. - -This guide shows common authentication code using `autorest/adal` and its equivalent using `azidentity`. - -## Table of contents - -- [Acquire a token](#acquire-a-token) -- [Client certificate authentication](#client-certificate-authentication) -- [Client secret authentication](#client-secret-authentication) -- [Configuration](#configuration) -- [Device code authentication](#device-code-authentication) -- [Managed identity](#managed-identity) -- [Use azidentity credentials with older packages](#use-azidentity-credentials-with-older-packages) - -## Configuration - -### `autorest/adal` - -Token providers require a token audience (resource identifier) and an instance of `adal.OAuthConfig`, which requires a Microsoft Entra endpoint and tenant: - -```go -import "github.com/Azure/go-autorest/autorest/adal" - -oauthCfg, err := adal.NewOAuthConfig("https://login.chinacloudapi.cn", tenantID) -handle(err) - -spt, err := adal.NewServicePrincipalTokenWithSecret( - *oauthCfg, clientID, "https://management.chinacloudapi.cn/", &adal.ServicePrincipalTokenSecret{ClientSecret: secret}, -) -``` - -### `azidentity` - -A credential instance can acquire tokens for any audience. The audience for each token is determined by the client requesting it. Credentials require endpoint configuration only for sovereign or private clouds. The `azcore/cloud` package has predefined configuration for sovereign clouds such as Azure China: - -```go -import ( - "github.com/Azure/azure-sdk-for-go/sdk/azcore/cloud" - "github.com/Azure/azure-sdk-for-go/sdk/azidentity" -) - -clientOpts := azcore.ClientOptions{Cloud: cloud.AzureChina} - -cred, err := azidentity.NewClientSecretCredential( - tenantID, clientID, secret, &azidentity.ClientSecretCredentialOptions{ClientOptions: clientOpts}, -) -handle(err) -``` - -## Client secret authentication - -### `autorest/adal` - -```go -import ( - "github.com/Azure/azure-sdk-for-go/services/resources/mgmt/2018-06-01/subscriptions" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/adal" -) - -oauthCfg, err := adal.NewOAuthConfig("https://login.microsoftonline.com", tenantID) -handle(err) -spt, err := adal.NewServicePrincipalTokenWithSecret( - *oauthCfg, clientID, "https://management.azure.com/", &adal.ServicePrincipalTokenSecret{ClientSecret: secret}, -) -handle(err) - -client := subscriptions.NewClient() -client.Authorizer = autorest.NewBearerAuthorizer(spt) -``` - -### `azidentity` - -```go -import ( - "github.com/Azure/azure-sdk-for-go/sdk/azidentity" - "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armsubscriptions" -) - -cred, err := azidentity.NewClientSecretCredential(tenantID, clientID, secret, nil) -handle(err) - -client, err := armsubscriptions.NewClient(cred, nil) -handle(err) -``` - -## Client certificate authentication - -### `autorest/adal` - -```go -import ( - "os" - - "github.com/Azure/azure-sdk-for-go/services/resources/mgmt/2018-06-01/subscriptions" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/adal" -) -certData, err := os.ReadFile("./example.pfx") -handle(err) - -certificate, rsaPrivateKey, err := decodePkcs12(certData, "") -handle(err) - -oauthCfg, err := adal.NewOAuthConfig("https://login.microsoftonline.com", tenantID) -handle(err) - -spt, err := adal.NewServicePrincipalTokenFromCertificate( - *oauthConfig, clientID, certificate, rsaPrivateKey, "https://management.azure.com/", -) - -client := subscriptions.NewClient() -client.Authorizer = autorest.NewBearerAuthorizer(spt) -``` - -### `azidentity` - -```go -import ( - "os" - - "github.com/Azure/azure-sdk-for-go/sdk/azidentity" - "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armsubscriptions" -) - -certData, err := os.ReadFile("./example.pfx") -handle(err) - -certs, key, err := azidentity.ParseCertificates(certData, nil) -handle(err) - -cred, err = azidentity.NewClientCertificateCredential(tenantID, clientID, certs, key, nil) -handle(err) - -client, err := armsubscriptions.NewClient(cred, nil) -handle(err) -``` - -## Managed identity - -### `autorest/adal` - -```go -import ( - "github.com/Azure/azure-sdk-for-go/services/resources/mgmt/2018-06-01/subscriptions" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/adal" -) - -spt, err := adal.NewServicePrincipalTokenFromManagedIdentity("https://management.azure.com/", nil) -handle(err) - -client := subscriptions.NewClient() -client.Authorizer = autorest.NewBearerAuthorizer(spt) -``` - -### `azidentity` - -```go -import ( - "github.com/Azure/azure-sdk-for-go/sdk/azidentity" - "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armsubscriptions" -) - -cred, err := azidentity.NewManagedIdentityCredential(nil) -handle(err) - -client, err := armsubscriptions.NewClient(cred, nil) -handle(err) -``` - -### User-assigned identities - -`autorest/adal`: - -```go -import "github.com/Azure/go-autorest/autorest/adal" - -opts := &adal.ManagedIdentityOptions{ClientID: "..."} -spt, err := adal.NewServicePrincipalTokenFromManagedIdentity("https://management.azure.com/") -handle(err) -``` - -`azidentity`: - -```go -import "github.com/Azure/azure-sdk-for-go/sdk/azidentity" - -opts := azidentity.ManagedIdentityCredentialOptions{ID: azidentity.ClientID("...")} -cred, err := azidentity.NewManagedIdentityCredential(&opts) -handle(err) -``` - -## Device code authentication - -### `autorest/adal` - -```go -import ( - "fmt" - "net/http" - - "github.com/Azure/azure-sdk-for-go/services/resources/mgmt/2018-06-01/subscriptions" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/adal" -) - -oauthClient := &http.Client{} -oauthCfg, err := adal.NewOAuthConfig("https://login.microsoftonline.com", tenantID) -handle(err) -resource := "https://management.azure.com/" -deviceCode, err := adal.InitiateDeviceAuth(oauthClient, *oauthCfg, clientID, resource) -handle(err) - -// display instructions, wait for the user to authenticate -fmt.Println(*deviceCode.Message) -token, err := adal.WaitForUserCompletion(oauthClient, deviceCode) -handle(err) - -spt, err := adal.NewServicePrincipalTokenFromManualToken(*oauthCfg, clientID, resource, *token) -handle(err) - -client := subscriptions.NewClient() -client.Authorizer = autorest.NewBearerAuthorizer(spt) -``` - -### `azidentity` - -```go -import ( - "github.com/Azure/azure-sdk-for-go/sdk/azidentity" - "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armsubscriptions" -) - -cred, err := azidentity.NewDeviceCodeCredential(nil) -handle(err) - -client, err := armsubscriptions.NewSubscriptionsClient(cred, nil) -handle(err) -``` - -`azidentity.DeviceCodeCredential` will guide a user through authentication, printing instructions to the console by default. The user prompt is customizable. For more information, see the [package documentation](https://pkg.go.dev/github.com/Azure/azure-sdk-for-go/sdk/azidentity#DeviceCodeCredential). - -## Acquire a token - -### `autorest/adal` - -```go -import "github.com/Azure/go-autorest/autorest/adal" - -oauthCfg, err := adal.NewOAuthConfig("https://login.microsoftonline.com", tenantID) -handle(err) - -spt, err := adal.NewServicePrincipalTokenWithSecret( - *oauthCfg, clientID, "https://vault.azure.net", &adal.ServicePrincipalTokenSecret{ClientSecret: secret}, -) - -err = spt.Refresh() -if err == nil { - token := spt.Token -} -``` - -### `azidentity` - -In ordinary usage, application code doesn't need to request tokens from credentials directly. Azure SDK clients handle token acquisition and refreshing internally. However, applications may call `GetToken()` to do so. All credential types have this method. - -```go -import ( - "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" - "github.com/Azure/azure-sdk-for-go/sdk/azidentity" -) - -cred, err := azidentity.NewClientSecretCredential(tenantID, clientID, secret, nil) -handle(err) - -tk, err := cred.GetToken( - context.TODO(), policy.TokenRequestOptions{Scopes: []string{"https://vault.azure.net/.default"}}, -) -if err == nil { - token := tk.Token -} -``` - -Note that `azidentity` credentials use the Microsoft Entra endpoint, which requires OAuth 2 scopes instead of the resource identifiers `autorest/adal` expects. For more information, see [Microsoft Entra ID documentation](https://learn.microsoft.com/entra/identity-platform/permissions-consent-overview). - -## Use azidentity credentials with older packages - -The [azidext module](https://pkg.go.dev/github.com/jongio/azidext/go/azidext) provides an adapter for `azidentity` credential types. The adapter enables using the credential types with older Azure SDK clients. For example: - -```go -import ( - "github.com/Azure/azure-sdk-for-go/sdk/azidentity" - "github.com/Azure/azure-sdk-for-go/services/resources/mgmt/2018-06-01/subscriptions" - "github.com/jongio/azidext/go/azidext" -) - -cred, err := azidentity.NewClientSecretCredential(tenantID, clientID, secret, nil) -handle(err) - -client := subscriptions.NewClient() -client.Authorizer = azidext.NewTokenCredentialAdapter(cred, []string{"https://management.azure.com//.default"}) -``` - -![Impressions](https://azure-sdk-impressions.azurewebsites.net/api/impressions/azure-sdk-for-go%2Fsdk%2Fazidentity%2FMIGRATION.png) diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/README.md b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/README.md deleted file mode 100644 index b5acff0e632e..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/README.md +++ /dev/null @@ -1,257 +0,0 @@ -# Azure Identity Client Module for Go - -The Azure Identity module provides Microsoft Entra ID ([formerly Azure Active Directory](https://learn.microsoft.com/entra/fundamentals/new-name)) token authentication support across the Azure SDK. It includes a set of `TokenCredential` implementations, which can be used with Azure SDK clients supporting token authentication. - -[![PkgGoDev](https://pkg.go.dev/badge/github.com/Azure/azure-sdk-for-go/sdk/azidentity)](https://pkg.go.dev/github.com/Azure/azure-sdk-for-go/sdk/azidentity) -| [Microsoft Entra ID documentation](https://learn.microsoft.com/entra/identity/) -| [Source code](https://github.com/Azure/azure-sdk-for-go/tree/main/sdk/azidentity) - -# Getting started - -## Install the module - -This project uses [Go modules](https://github.com/golang/go/wiki/Modules) for versioning and dependency management. - -Install the Azure Identity module: - -```sh -go get -u github.com/Azure/azure-sdk-for-go/sdk/azidentity -``` - -## Prerequisites - -- an [Azure subscription](https://azure.microsoft.com/free/) -- Go 1.18 - -### Authenticating during local development - -When debugging and executing code locally, developers typically use their own accounts to authenticate calls to Azure services. The `azidentity` module supports authenticating through developer tools to simplify local development. - -#### Authenticating via the Azure CLI - -`DefaultAzureCredential` and `AzureCLICredential` can authenticate as the user -signed in to the [Azure CLI](https://learn.microsoft.com/cli/azure). To sign in to the Azure CLI, run `az login`. On a system with a default web browser, the Azure CLI will launch the browser to authenticate a user. - -When no default browser is available, `az login` will use the device code -authentication flow. This can also be selected manually by running `az login --use-device-code`. - -#### Authenticate via the Azure Developer CLI - -Developers coding outside of an IDE can also use the [Azure Developer CLI](https://aka.ms/azure-dev) to authenticate. Applications using the `DefaultAzureCredential` or the `AzureDeveloperCLICredential` can use the account logged in to the Azure Developer CLI to authenticate calls in their application when running locally. - -To authenticate with the Azure Developer CLI, run `azd auth login`. On a system with a default web browser, `azd` will launch the browser to authenticate. On systems without a default web browser, run `azd auth login --use-device-code` to use the device code authentication flow. - -## Key concepts - -### Credentials - -A credential is a type which contains or can obtain the data needed for a -service client to authenticate requests. Service clients across the Azure SDK -accept a credential instance when they are constructed, and use that credential -to authenticate requests. - -The `azidentity` module focuses on OAuth authentication with Microsoft Entra ID. It offers a variety of credential types capable of acquiring a Microsoft Entra access token. See [Credential Types](#credential-types "Credential Types") for a list of this module's credential types. - -### DefaultAzureCredential - -`DefaultAzureCredential` is appropriate for most apps that will be deployed to Azure. It combines common production credentials with development credentials. It attempts to authenticate via the following mechanisms in this order, stopping when one succeeds: - -![DefaultAzureCredential authentication flow](img/mermaidjs/DefaultAzureCredentialAuthFlow.svg) - -1. **Environment** - `DefaultAzureCredential` will read account information specified via [environment variables](#environment-variables) and use it to authenticate. -1. **Workload Identity** - If the app is deployed on Kubernetes with environment variables set by the workload identity webhook, `DefaultAzureCredential` will authenticate the configured identity. -1. **Managed Identity** - If the app is deployed to an Azure host with managed identity enabled, `DefaultAzureCredential` will authenticate with it. -1. **Azure CLI** - If a user or service principal has authenticated via the Azure CLI `az login` command, `DefaultAzureCredential` will authenticate that identity. -1. **Azure Developer CLI** - If the developer has authenticated via the Azure Developer CLI `azd auth login` command, the `DefaultAzureCredential` will authenticate with that account. - -> Note: `DefaultAzureCredential` is intended to simplify getting started with the SDK by handling common scenarios with reasonable default behaviors. Developers who want more control or whose scenario isn't served by the default settings should use other credential types. - -## Managed Identity - -`DefaultAzureCredential` and `ManagedIdentityCredential` support -[managed identity authentication](https://learn.microsoft.com/entra/identity/managed-identities-azure-resources/overview) -in any hosting environment which supports managed identities, such as (this list is not exhaustive): -* [Azure App Service](https://learn.microsoft.com/azure/app-service/overview-managed-identity) -* [Azure Arc](https://learn.microsoft.com/azure/azure-arc/servers/managed-identity-authentication) -* [Azure Cloud Shell](https://learn.microsoft.com/azure/cloud-shell/msi-authorization) -* [Azure Kubernetes Service](https://learn.microsoft.com/azure/aks/use-managed-identity) -* [Azure Service Fabric](https://learn.microsoft.com/azure/service-fabric/concepts-managed-identity) -* [Azure Virtual Machines](https://learn.microsoft.com/entra/identity/managed-identities-azure-resources/how-to-use-vm-token) - -## Examples - -- [Authenticate with DefaultAzureCredential](#authenticate-with-defaultazurecredential "Authenticate with DefaultAzureCredential") -- [Define a custom authentication flow with ChainedTokenCredential](#define-a-custom-authentication-flow-with-chainedtokencredential "Define a custom authentication flow with ChainedTokenCredential") -- [Specify a user-assigned managed identity for DefaultAzureCredential](#specify-a-user-assigned-managed-identity-for-defaultazurecredential) - -### Authenticate with DefaultAzureCredential - -This example demonstrates authenticating a client from the `armresources` module with `DefaultAzureCredential`. - -```go -cred, err := azidentity.NewDefaultAzureCredential(nil) -if err != nil { - // handle error -} - -client := armresources.NewResourceGroupsClient("subscription ID", cred, nil) -``` - -### Specify a user-assigned managed identity for DefaultAzureCredential - -To configure `DefaultAzureCredential` to authenticate a user-assigned managed identity, set the environment variable `AZURE_CLIENT_ID` to the identity's client ID. - -### Define a custom authentication flow with `ChainedTokenCredential` - -`DefaultAzureCredential` is generally the quickest way to get started developing apps for Azure. For more advanced scenarios, `ChainedTokenCredential` links multiple credential instances to be tried sequentially when authenticating. It will try each chained credential in turn until one provides a token or fails to authenticate due to an error. - -The following example demonstrates creating a credential, which will attempt to authenticate using managed identity. It will fall back to authenticating via the Azure CLI when a managed identity is unavailable. - -```go -managed, err := azidentity.NewManagedIdentityCredential(nil) -if err != nil { - // handle error -} -azCLI, err := azidentity.NewAzureCLICredential(nil) -if err != nil { - // handle error -} -chain, err := azidentity.NewChainedTokenCredential([]azcore.TokenCredential{managed, azCLI}, nil) -if err != nil { - // handle error -} - -client := armresources.NewResourceGroupsClient("subscription ID", chain, nil) -``` - -## Credential Types - -### Authenticating Azure Hosted Applications - -|Credential|Usage -|-|- -|[DefaultAzureCredential](https://pkg.go.dev/github.com/Azure/azure-sdk-for-go/sdk/azidentity#DefaultAzureCredential)|Simplified authentication experience for getting started developing Azure apps -|[ChainedTokenCredential](https://pkg.go.dev/github.com/Azure/azure-sdk-for-go/sdk/azidentity#ChainedTokenCredential)|Define custom authentication flows, composing multiple credentials -|[EnvironmentCredential](https://pkg.go.dev/github.com/Azure/azure-sdk-for-go/sdk/azidentity#EnvironmentCredential)|Authenticate a service principal or user configured by environment variables -|[ManagedIdentityCredential](https://pkg.go.dev/github.com/Azure/azure-sdk-for-go/sdk/azidentity#ManagedIdentityCredential)|Authenticate the managed identity of an Azure resource -|[WorkloadIdentityCredential](https://pkg.go.dev/github.com/Azure/azure-sdk-for-go/sdk/azidentity#WorkloadIdentityCredential)|Authenticate a workload identity on Kubernetes - -### Authenticating Service Principals - -|Credential|Usage -|-|- -|[ClientAssertionCredential](https://pkg.go.dev/github.com/Azure/azure-sdk-for-go/sdk/azidentity#ClientAssertionCredential)|Authenticate a service principal with a signed client assertion -|[ClientCertificateCredential](https://pkg.go.dev/github.com/Azure/azure-sdk-for-go/sdk/azidentity#ClientCertificateCredential)|Authenticate a service principal with a certificate -|[ClientSecretCredential](https://pkg.go.dev/github.com/Azure/azure-sdk-for-go/sdk/azidentity#ClientSecretCredential)|Authenticate a service principal with a secret - -### Authenticating Users - -|Credential|Usage -|-|- -|[InteractiveBrowserCredential](https://pkg.go.dev/github.com/Azure/azure-sdk-for-go/sdk/azidentity#InteractiveBrowserCredential)|Interactively authenticate a user with the default web browser -|[DeviceCodeCredential](https://pkg.go.dev/github.com/Azure/azure-sdk-for-go/sdk/azidentity#DeviceCodeCredential)|Interactively authenticate a user on a device with limited UI -|[UsernamePasswordCredential](https://pkg.go.dev/github.com/Azure/azure-sdk-for-go/sdk/azidentity#UsernamePasswordCredential)|Authenticate a user with a username and password - -### Authenticating via Development Tools - -|Credential|Usage -|-|- -|[AzureCLICredential](https://pkg.go.dev/github.com/Azure/azure-sdk-for-go/sdk/azidentity#AzureCLICredential)|Authenticate as the user signed in to the Azure CLI -|[`AzureDeveloperCLICredential`](https://pkg.go.dev/github.com/Azure/azure-sdk-for-go/sdk/azidentity#AzureDeveloperCLICredential)|Authenticates as the user signed in to the Azure Developer CLI - -## Environment Variables - -`DefaultAzureCredential` and `EnvironmentCredential` can be configured with environment variables. Each type of authentication requires values for specific variables: - -#### Service principal with secret - -|variable name|value -|-|- -|`AZURE_CLIENT_ID`|ID of a Microsoft Entra application -|`AZURE_TENANT_ID`|ID of the application's Microsoft Entra tenant -|`AZURE_CLIENT_SECRET`|one of the application's client secrets - -#### Service principal with certificate - -|variable name|value -|-|- -|`AZURE_CLIENT_ID`|ID of a Microsoft Entra application -|`AZURE_TENANT_ID`|ID of the application's Microsoft Entra tenant -|`AZURE_CLIENT_CERTIFICATE_PATH`|path to a certificate file including private key -|`AZURE_CLIENT_CERTIFICATE_PASSWORD`|password of the certificate file, if any - -#### Username and password - -|variable name|value -|-|- -|`AZURE_CLIENT_ID`|ID of a Microsoft Entra application -|`AZURE_USERNAME`|a username (usually an email address) -|`AZURE_PASSWORD`|that user's password - -Configuration is attempted in the above order. For example, if values for a -client secret and certificate are both present, the client secret will be used. - -## Token caching - -Token caching is an `azidentity` feature that allows apps to: - -* Cache tokens in memory (default) or on disk (opt-in). -* Improve resilience and performance. -* Reduce the number of requests made to Microsoft Entra ID to obtain access tokens. - -For more details, see the [token caching documentation](https://aka.ms/azsdk/go/identity/caching). - -## Troubleshooting - -### Error Handling - -Credentials return an `error` when they fail to authenticate or lack data they require to authenticate. For guidance on resolving errors from specific credential types, see the [troubleshooting guide](https://aka.ms/azsdk/go/identity/troubleshoot). - -For more details on handling specific Microsoft Entra errors, see the Microsoft Entra [error code documentation](https://learn.microsoft.com/entra/identity-platform/reference-error-codes). - -### Logging - -This module uses the classification-based logging implementation in `azcore`. To enable console logging for all SDK modules, set `AZURE_SDK_GO_LOGGING` to `all`. Use the `azcore/log` package to control log event output or to enable logs for `azidentity` only. For example: -```go -import azlog "github.com/Azure/azure-sdk-for-go/sdk/azcore/log" - -// print log output to stdout -azlog.SetListener(func(event azlog.Event, s string) { - fmt.Println(s) -}) - -// include only azidentity credential logs -azlog.SetEvents(azidentity.EventAuthentication) -``` - -Credentials log basic information only, such as `GetToken` success or failure and errors. These log entries don't contain authentication secrets but may contain sensitive information. - -## Next steps - -Client and management modules listed on the [Azure SDK releases page](https://azure.github.io/azure-sdk/releases/latest/go.html) support authenticating with `azidentity` credential types. You can learn more about using these libraries in their documentation, which is linked from the release page. - -## Provide Feedback - -If you encounter bugs or have suggestions, please -[open an issue](https://github.com/Azure/azure-sdk-for-go/issues). - -## Contributing - -This project welcomes contributions and suggestions. Most contributions require -you to agree to a Contributor License Agreement (CLA) declaring that you have -the right to, and actually do, grant us the rights to use your contribution. -For details, visit [https://cla.microsoft.com](https://cla.microsoft.com). - -When you submit a pull request, a CLA-bot will automatically determine whether -you need to provide a CLA and decorate the PR appropriately (e.g., label, -comment). Simply follow the instructions provided by the bot. You will only -need to do this once across all repos using our CLA. - -This project has adopted the -[Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). -For more information, see the -[Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) -or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any -additional questions or comments. - -![Impressions](https://azure-sdk-impressions.azurewebsites.net/api/impressions/azure-sdk-for-go%2Fsdk%2Fazidentity%2FREADME.png) diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/TOKEN_CACHING.MD b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/TOKEN_CACHING.MD deleted file mode 100644 index f9cc4894339a..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/TOKEN_CACHING.MD +++ /dev/null @@ -1,70 +0,0 @@ -## Token caching in the Azure Identity client module - -*Token caching* is a feature provided by the Azure Identity library that allows apps to: - -- Improve their resilience and performance. -- Reduce the number of requests made to Microsoft Entra ID to obtain access tokens. -- Reduce the number of times the user is prompted to authenticate. - -When an app needs to access a protected Azure resource, it typically needs to obtain an access token from Entra ID. Obtaining that token involves sending a request to Entra ID and may also involve prompting the user. Entra ID then validates the credentials provided in the request and issues an access token. - -Token caching, via the Azure Identity library, allows the app to store this access token [in memory](#in-memory-token-caching), where it's accessible to the current process, or [on disk](#persistent-token-caching) where it can be accessed across application or process invocations. The token can then be retrieved quickly and easily the next time the app needs to access the same resource. The app can avoid making another request to Entra ID, which reduces network traffic and improves resilience. Additionally, in scenarios where the app is authenticating users, token caching also avoids prompting the user each time new tokens are requested. - -### In-memory token caching - -*In-memory token caching* is the default option provided by the Azure Identity library. This caching approach allows apps to store access tokens in memory. With in-memory token caching, the library first determines if a valid access token for the requested resource is already stored in memory. If a valid token is found, it's returned to the app without the need to make another request to Entra ID. If a valid token isn't found, the library will automatically acquire a token by sending a request to Entra ID. The in-memory token cache provided by the Azure Identity library is thread-safe. - -**Note:** When Azure Identity library credentials are used with Azure service libraries (for example, Azure Blob Storage), the in-memory token caching is active in the `Pipeline` layer as well. All `TokenCredential` implementations are supported there, including custom implementations external to the Azure Identity library. - -#### Caching cannot be disabled - -As there are many levels of caching, it's not possible disable in-memory caching. However, the in-memory cache may be cleared by creating a new credential instance. - -### Persistent token caching - -> Only azidentity v1.5.0-beta versions support persistent token caching - -*Persistent disk token caching* is an opt-in feature in the Azure Identity library. The feature allows apps to cache access tokens in an encrypted, persistent storage mechanism. As indicated in the following table, the storage mechanism differs across operating systems. - -| Operating system | Storage mechanism | -|------------------|---------------------------------------| -| Linux | kernel key retention service (keyctl) | -| macOS | Keychain | -| Windows | DPAPI | - -By default the token cache will protect any data which is persisted using the user data protection APIs available on the current platform. -However, there are cases where no data protection is available, and applications may choose to allow storing the token cache in an unencrypted state by setting `TokenCachePersistenceOptions.AllowUnencryptedStorage` to `true`. This allows a credential to fall back to unencrypted storage if it can't encrypt the cache. However, we do not recommend using this storage method due to its significantly lower security measures. In addition, tokens are not encrypted solely to the current user, which could potentially allow unauthorized access to the cache by individuals with machine access. - -With persistent disk token caching enabled, the library first determines if a valid access token for the requested resource is already stored in the persistent cache. If a valid token is found, it's returned to the app without the need to make another request to Entra ID. Additionally, the tokens are preserved across app runs, which: - -- Makes the app more resilient to failures. -- Ensures the app can continue to function during an Entra ID outage or disruption. -- Avoids having to prompt users to authenticate each time the process is restarted. - ->IMPORTANT! The token cache contains sensitive data and **MUST** be protected to prevent compromising accounts. All application decisions regarding the persistence of the token cache must consider that a breach of its content will fully compromise all the accounts it contains. - -#### Example code - -See the [package documentation](https://pkg.go.dev/github.com/Azure/azure-sdk-for-go/sdk/azidentity@v1.6.0-beta.2#pkg-overview) for example code demonstrating how to configure persistent caching and access cached data. - -### Credentials supporting token caching - -The following table indicates the state of in-memory and persistent caching in each credential type. - -**Note:** In-memory caching is activated by default. Persistent token caching needs to be enabled as shown in [this example](https://pkg.go.dev/github.com/Azure/azure-sdk-for-go/sdk/azidentity@v1.5.0-beta.1#example-package-PersistentCache). - -| Credential | In-memory token caching | Persistent token caching | -|--------------------------------|---------------------------------------------------------------------|--------------------------| -| `AzureCLICredential` | Not Supported | Not Supported | -| `AzureDeveloperCLICredential` | Not Supported | Not Supported | -| `ClientAssertionCredential` | Supported | Supported | -| `ClientCertificateCredential` | Supported | Supported | -| `ClientSecretCredential` | Supported | Supported | -| `DefaultAzureCredential` | Supported if the target credential in the default chain supports it | Not Supported | -| `DeviceCodeCredential` | Supported | Supported | -| `EnvironmentCredential` | Supported | Not Supported | -| `InteractiveBrowserCredential` | Supported | Supported | -| `ManagedIdentityCredential` | Supported | Not Supported | -| `OnBehalfOfCredential` | Supported | Supported | -| `UsernamePasswordCredential` | Supported | Supported | -| `WorkloadIdentityCredential` | Supported | Supported | diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/TROUBLESHOOTING.md b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/TROUBLESHOOTING.md deleted file mode 100644 index 3564e685e18d..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/TROUBLESHOOTING.md +++ /dev/null @@ -1,231 +0,0 @@ -# Troubleshoot Azure Identity authentication issues - -This troubleshooting guide covers failure investigation techniques, common errors for the credential types in the `azidentity` module, and mitigation steps to resolve these errors. - -## Table of contents - -- [Handle azidentity errors](#handle-azidentity-errors) - - [Permission issues](#permission-issues) -- [Find relevant information in errors](#find-relevant-information-in-errors) -- [Enable and configure logging](#enable-and-configure-logging) -- [Troubleshoot AzureCLICredential authentication issues](#troubleshoot-azureclicredential-authentication-issues) -- [Troubleshoot AzureDeveloperCLICredential authentication issues](#troubleshoot-azuredeveloperclicredential-authentication-issues) -- [Troubleshoot ClientCertificateCredential authentication issues](#troubleshoot-clientcertificatecredential-authentication-issues) -- [Troubleshoot ClientSecretCredential authentication issues](#troubleshoot-clientsecretcredential-authentication-issues) -- [Troubleshoot DefaultAzureCredential authentication issues](#troubleshoot-defaultazurecredential-authentication-issues) -- [Troubleshoot EnvironmentCredential authentication issues](#troubleshoot-environmentcredential-authentication-issues) -- [Troubleshoot ManagedIdentityCredential authentication issues](#troubleshoot-managedidentitycredential-authentication-issues) - - [Azure App Service and Azure Functions managed identity](#azure-app-service-and-azure-functions-managed-identity) - - [Azure Kubernetes Service managed identity](#azure-kubernetes-service-managed-identity) - - [Azure Virtual Machine managed identity](#azure-virtual-machine-managed-identity) -- [Troubleshoot UsernamePasswordCredential authentication issues](#troubleshoot-usernamepasswordcredential-authentication-issues) -- [Troubleshoot WorkloadIdentityCredential authentication issues](#troubleshoot-workloadidentitycredential-authentication-issues) -- [Get additional help](#get-additional-help) - -## Handle azidentity errors - -Any service client method that makes a request to the service may return an error due to authentication failure. This is because the credential authenticates on the first call to the service and on any subsequent call that needs to refresh an access token. Authentication errors include a description of the failure and possibly an error message from Microsoft Entra ID. Depending on the application, these errors may or may not be recoverable. - -### Permission issues - -Service client errors with a status code of 401 or 403 often indicate that authentication succeeded but the caller doesn't have permission to access the specified API. Check the service documentation to determine which RBAC roles are needed for the request, and ensure the authenticated user or service principal has the appropriate role assignments. - -## Find relevant information in errors - -Authentication errors can include responses from Microsoft Entra ID and often contain information helpful in diagnosis. Consider the following error message: - -``` -ClientSecretCredential authentication failed -POST https://login.microsoftonline.com/3c631bb7-a9f7-4343-a5ba-a615913/oauth2/v2.0/token --------------------------------------------------------------------------------- -RESPONSE 401 Unauthorized --------------------------------------------------------------------------------- -{ - "error": "invalid_client", - "error_description": "AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app '86be4c01-505b-45e9-bfc0-9b825fd84'.\r\nTrace ID: 03da4b8e-5ffe-48ca-9754-aff4276f0100\r\nCorrelation ID: 7b12f9bb-2eef-42e3-ad75-eee69ec9088d\r\nTimestamp: 2022-03-02 18:25:26Z", - "error_codes": [ - 7000215 - ], - "timestamp": "2022-03-02 18:25:26Z", - "trace_id": "03da4b8e-5ffe-48ca-9754-aff4276f0100", - "correlation_id": "7b12f9bb-2eef-42e3-ad75-eee69ec9088d", - "error_uri": "https://login.microsoftonline.com/error?code=7000215" -} --------------------------------------------------------------------------------- -``` - -This error contains several pieces of information: - -- __Failing Credential Type__: The type of credential that failed to authenticate. This can be helpful when diagnosing issues with chained credential types such as `DefaultAzureCredential` or `ChainedTokenCredential`. - -- __Microsoft Entra ID Error Code and Message__: The error code and message returned by Microsoft Entra ID. This can give insight into the specific reason the request failed. For instance, in this case authentication failed because the provided client secret is incorrect. [Microsoft Entra ID documentation](https://learn.microsoft.com/entra/identity-platform/reference-error-codes#aadsts-error-codes) has more information on AADSTS error codes. - -- __Correlation ID and Timestamp__: The correlation ID and timestamp identify the request in server-side logs. This information can be useful to support engineers diagnosing unexpected Microsoft Entra failures. - -### Enable and configure logging - -`azidentity` provides the same logging capabilities as the rest of the Azure SDK. The simplest way to see the logs to help debug authentication issues is to print credential logs to the console. -```go -import azlog "github.com/Azure/azure-sdk-for-go/sdk/azcore/log" - -// print log output to stdout -azlog.SetListener(func(event azlog.Event, s string) { - fmt.Println(s) -}) - -// include only azidentity credential logs -azlog.SetEvents(azidentity.EventAuthentication) -``` - - -## Troubleshoot DefaultAzureCredential authentication issues - -| Error |Description| Mitigation | -|---|---|---| -|"DefaultAzureCredential failed to acquire a token"|No credential in the `DefaultAzureCredential` chain provided a token|
  • [Enable logging](#enable-and-configure-logging) to get further diagnostic information.
  • Consult the troubleshooting guide for underlying credential types for more information.
    • [EnvironmentCredential](#troubleshoot-environmentcredential-authentication-issues)
    • [ManagedIdentityCredential](#troubleshoot-managedidentitycredential-authentication-issues)
    • [AzureCLICredential](#troubleshoot-azureclicredential-authentication-issues)
    | -|Error from the client with a status code of 401 or 403|Authentication succeeded but the authorizing Azure service responded with a 401 (Unauthorized), or 403 (Forbidden) status code|
    • [Enable logging](#enable-and-configure-logging) to determine which credential in the chain returned the authenticating token.
    • If an unexpected credential is returning a token, check application configuration such as environment variables.
    • Ensure the correct role is assigned to the authenticated identity. For example, a service specific role rather than the subscription Owner role.
    | -|"managed identity timed out"|`DefaultAzureCredential` sets a short timeout on its first managed identity authentication attempt to prevent very long timeouts during local development when no managed identity is available. That timeout causes this error in production when an application requests a token before the hosting environment is ready to provide one.|Use [ManagedIdentityCredential](https://pkg.go.dev/github.com/Azure/azure-sdk-for-go/sdk/azidentity#ManagedIdentityCredential) directly, at least in production. It doesn't set a timeout on its authentication attempts.| - -## Troubleshoot EnvironmentCredential authentication issues - -| Error Message |Description| Mitigation | -|---|---|---| -|Missing or incomplete environment variable configuration|A valid combination of environment variables wasn't set|Ensure the appropriate environment variables are set for the intended authentication method as described in the [module documentation](https://pkg.go.dev/github.com/Azure/azure-sdk-for-go/sdk/azidentity#EnvironmentCredential)| - - -## Troubleshoot ClientSecretCredential authentication issues - -| Error Code | Issue | Mitigation | -|---|---|---| -|AADSTS7000215|An invalid client secret was provided.|Ensure the secret provided to the credential constructor is valid. If unsure, create a new client secret using the Azure portal. Details on creating a new client secret are in [Microsoft Entra ID documentation](https://learn.microsoft.com/entra/identity-platform/howto-create-service-principal-portal#option-2-create-a-new-application-secret).| -|AADSTS7000222|An expired client secret was provided.|Create a new client secret using the Azure portal. Details on creating a new client secret are in [Microsoft Entra ID documentation](https://learn.microsoft.com/entra/identity-platform/howto-create-service-principal-portal#option-2-create-a-new-application-secret).| -|AADSTS700016|The specified application wasn't found in the specified tenant.|Ensure the client and tenant IDs provided to the credential constructor are correct for your application registration. For multi-tenant apps, ensure the application has been added to the desired tenant by a tenant admin. To add a new application in the desired tenant, follow the [Microsoft Entra ID instructions](https://learn.microsoft.com/entra/identity-platform/howto-create-service-principal-portal).| - - -## Troubleshoot ClientCertificateCredential authentication issues - -| Error Code | Description | Mitigation | -|---|---|---| -|AADSTS700027|Client assertion contains an invalid signature.|Ensure the specified certificate has been uploaded to the application registration as described in [Microsoft Entra ID documentation](https://learn.microsoft.com/entra/identity-platform/howto-create-service-principal-portal#option-1-upload-a-certificate).| -|AADSTS700016|The specified application wasn't found in the specified tenant.|Ensure the client and tenant IDs provided to the credential constructor are correct for your application registration. For multi-tenant apps, ensure the application has been added to the desired tenant by a tenant admin. To add a new application in the desired tenant, follow the [Microsoft Entra ID instructions](https://learn.microsoft.com/entra/identity-platform/howto-create-service-principal-portal).| - - -## Troubleshoot UsernamePasswordCredential authentication issues - -| Error Code | Issue | Mitigation | -|---|---|---| -|AADSTS50126|The provided username or password is invalid.|Ensure the username and password provided to the credential constructor are valid.| - - -## Troubleshoot ManagedIdentityCredential authentication issues - -`ManagedIdentityCredential` is designed to work on a variety of Azure hosts support managed identity. Configuration and troubleshooting vary from host to host. The below table lists the Azure hosts that can be assigned a managed identity and are supported by `ManagedIdentityCredential`. - -|Host Environment| | | -|---|---|---| -|Azure Virtual Machines and Scale Sets|[Configuration](https://learn.microsoft.com/entra/identity/managed-identities-azure-resources/qs-configure-portal-windows-vm)|[Troubleshooting](#azure-virtual-machine-managed-identity)| -|Azure App Service and Azure Functions|[Configuration](https://learn.microsoft.com/azure/app-service/overview-managed-identity)|[Troubleshooting](#azure-app-service-and-azure-functions-managed-identity)| -|Azure Kubernetes Service|[Configuration](https://azure.github.io/aad-pod-identity/docs/)|[Troubleshooting](#azure-kubernetes-service-managed-identity)| -|Azure Arc|[Configuration](https://learn.microsoft.com/azure/azure-arc/servers/managed-identity-authentication)|| -|Azure Service Fabric|[Configuration](https://learn.microsoft.com/azure/service-fabric/concepts-managed-identity)|| - -### Azure Virtual Machine managed identity - -| Error Message |Description| Mitigation | -|---|---|---| -|The requested identity hasn’t been assigned to this resource.|The IMDS endpoint responded with a status code of 400, indicating the requested identity isn’t assigned to the VM.|If using a user assigned identity, ensure the specified ID is correct.

    If using a system assigned identity, make sure it has been enabled as described in [managed identity documentation](https://learn.microsoft.com/entra/identity/managed-identities-azure-resources/qs-configure-portal-windows-vm#enable-system-assigned-managed-identity-on-an-existing-vm).| -|The request failed due to a gateway error.|The request to the IMDS endpoint failed due to a gateway error, 502 or 504 status code.|IMDS doesn't support requests via proxy or gateway. Disable proxies or gateways running on the VM for requests to the IMDS endpoint `http://169.254.169.254`| -|No response received from the managed identity endpoint.|No response was received for the request to IMDS or the request timed out.|

    • Ensure the VM is configured for managed identity as described in [managed identity documentation](https://learn.microsoft.com/entra/identity/managed-identities-azure-resources/qs-configure-portal-windows-vm).
    • Verify the IMDS endpoint is reachable on the VM. See [below](#verify-imds-is-available-on-the-vm) for instructions.
    | -|Multiple attempts failed to obtain a token from the managed identity endpoint.|The credential has exhausted its retries for a token request.|
    • Refer to the error message for more details on specific failures.
    • Ensure the VM is configured for managed identity as described in [managed identity documentation](https://learn.microsoft.com/entra/identity/managed-identities-azure-resources/qs-configure-portal-windows-vm).
    • Verify the IMDS endpoint is reachable on the VM. See [below](#verify-imds-is-available-on-the-vm) for instructions.
    | - -#### Verify IMDS is available on the VM - -If you have access to the VM, you can use `curl` to verify the managed identity endpoint is available. - -```sh -curl 'http://169.254.169.254/metadata/identity/oauth2/token?resource=https://management.core.windows.net&api-version=2018-02-01' -H "Metadata: true" -``` - -> This command's output will contain an access token and SHOULD NOT BE SHARED, to avoid compromising account security. - -### Azure App Service and Azure Functions managed identity - -| Error Message |Description| Mitigation | -|---|---|---| -|Get "`http://169.254.169.254/...`" i/o timeout|The App Service host hasn't set environment variables for managed identity configuration.|
    • Ensure the App Service is configured for managed identity as described in [App Service documentation](https://learn.microsoft.com/azure/app-service/overview-managed-identity).
    • Verify the App Service environment is properly configured and the managed identity endpoint is available. See [below](#verify-the-app-service-managed-identity-endpoint-is-available) for instructions.
    | - -#### Verify the App Service managed identity endpoint is available - -If you can SSH into the App Service, you can verify managed identity is available in the environment. First ensure the environment variables `IDENTITY_ENDPOINT` and `IDENTITY_SECRET` are set. Then you can verify the managed identity endpoint is available using `curl`. - -```sh -curl "$IDENTITY_ENDPOINT?resource=https://management.core.windows.net&api-version=2019-08-01" -H "X-IDENTITY-HEADER: $IDENTITY_HEADER" -``` - -> This command's output will contain an access token and SHOULD NOT BE SHARED, to avoid compromising account security. - -### Azure Kubernetes Service managed identity - -#### Pod Identity - -| Error Message |Description| Mitigation | -|---|---|---| -|"no azure identity found for request clientID"|The application attempted to authenticate before an identity was assigned to its pod|Verify the pod is labeled correctly. This also occurs when a correctly labeled pod authenticates before the identity is ready. To prevent initialization races, configure NMI to set the Retry-After header in its responses as described in [Pod Identity documentation](https://azure.github.io/aad-pod-identity/docs/configure/feature_flags/#set-retry-after-header-in-nmi-response). - - -## Troubleshoot AzureCLICredential authentication issues - -| Error Message |Description| Mitigation | -|---|---|---| -|Azure CLI not found on path|The Azure CLI isn’t installed or isn't on the application's path.|
    • Ensure the Azure CLI is installed as described in [Azure CLI documentation](https://learn.microsoft.com/cli/azure/install-azure-cli).
    • Validate the installation location is in the application's `PATH` environment variable.
    | -|Please run 'az login' to set up account|No account is currently logged into the Azure CLI, or the login has expired.|
    • Run `az login` to log into the Azure CLI. More information about Azure CLI authentication is available in the [Azure CLI documentation](https://learn.microsoft.com/cli/azure/authenticate-azure-cli).
    • Verify that the Azure CLI can obtain tokens. See [below](#verify-the-azure-cli-can-obtain-tokens) for instructions.
    | - -#### Verify the Azure CLI can obtain tokens - -You can manually verify that the Azure CLI can authenticate and obtain tokens. First, use the `account` command to verify the logged in account. - -```azurecli -az account show -``` - -Once you've verified the Azure CLI is using the correct account, you can validate that it's able to obtain tokens for that account. - -```azurecli -az account get-access-token --output json --resource https://management.core.windows.net -``` - -> This command's output will contain an access token and SHOULD NOT BE SHARED, to avoid compromising account security. - - -## Troubleshoot AzureDeveloperCLICredential authentication issues - -| Error Message |Description| Mitigation | -|---|---|---| -|Azure Developer CLI not found on path|The Azure Developer CLI isn't installed or couldn't be found.|
    • Ensure the Azure Developer CLI is properly installed. See the installation instructions at [Install or update the Azure Developer CLI](https://learn.microsoft.com/azure/developer/azure-developer-cli/install-azd).
    • Validate the installation location has been added to the `PATH` environment variable.
    | -|Please run "azd auth login"|No account is logged into the Azure Developer CLI, or the login has expired.|
    • Log in to the Azure Developer CLI using the `azd login` command.
    • Validate that the Azure Developer CLI can obtain tokens. For instructions, see [Verify the Azure Developer CLI can obtain tokens](#verify-the-azure-developer-cli-can-obtain-tokens).
    | - -#### Verify the Azure Developer CLI can obtain tokens - -You can manually verify that the Azure Developer CLI is properly authenticated and can obtain tokens. First, use the `config` command to verify the account that is currently logged in to the Azure Developer CLI. - -```sh -azd config list -``` - -Once you've verified the Azure Developer CLI is using correct account, you can validate that it's able to obtain tokens for this account. - -```sh -azd auth token --output json --scope https://management.core.windows.net/.default -``` ->Note that output of this command will contain a valid access token, and SHOULD NOT BE SHARED to avoid compromising account security. - - -## Troubleshoot `WorkloadIdentityCredential` authentication issues - -| Error Message |Description| Mitigation | -|---|---|---| -|no client ID/tenant ID/token file specified|Incomplete configuration|In most cases these values are provided via environment variables set by Azure Workload Identity.
    • If your application runs on Azure Kubernetes Servide (AKS) or a cluster that has deployed the Azure Workload Identity admission webhook, check pod labels and service account configuration. See the [AKS documentation](https://learn.microsoft.com/azure/aks/workload-identity-deploy-cluster#disable-workload-identity) and [Azure Workload Identity troubleshooting guide](https://azure.github.io/azure-workload-identity/docs/troubleshooting.html) for more details.
    • If your application isn't running on AKS or your cluster hasn't deployed the Workload Identity admission webhook, set these values in `WorkloadIdentityCredentialOptions` - -## Get additional help - -Additional information on ways to reach out for support can be found in [SUPPORT.md](https://github.com/Azure/azure-sdk-for-go/blob/main/SUPPORT.md). diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/assets.json b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/assets.json deleted file mode 100644 index bff0c44dac48..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/assets.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "AssetsRepo": "Azure/azure-sdk-assets", - "AssetsRepoPrefixPath": "go", - "TagPrefix": "go/azidentity", - "Tag": "go/azidentity_087379b475" -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/authentication_record.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/authentication_record.go deleted file mode 100644 index ada4d6501d2c..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/authentication_record.go +++ /dev/null @@ -1,95 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azidentity - -import ( - "encoding/json" - "errors" - "fmt" - "net/url" - "strings" - - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/public" -) - -var supportedAuthRecordVersions = []string{"1.0"} - -// authenticationRecord is non-secret account information about an authenticated user that user credentials such as -// [DeviceCodeCredential] and [InteractiveBrowserCredential] can use to access previously cached authentication -// data. Call these credentials' Authenticate method to get an authenticationRecord for a user. -type authenticationRecord struct { - // Authority is the URL of the authority that issued the token. - Authority string `json:"authority"` - - // ClientID is the ID of the application that authenticated the user. - ClientID string `json:"clientId"` - - // HomeAccountID uniquely identifies the account. - HomeAccountID string `json:"homeAccountId"` - - // TenantID identifies the tenant in which the user authenticated. - TenantID string `json:"tenantId"` - - // Username is the user's preferred username. - Username string `json:"username"` - - // Version of the AuthenticationRecord. - Version string `json:"version"` -} - -// UnmarshalJSON implements json.Unmarshaler for AuthenticationRecord -func (a *authenticationRecord) UnmarshalJSON(b []byte) error { - // Default unmarshaling is fine but we want to return an error if the record's version isn't supported i.e., we - // want to inspect the unmarshalled values before deciding whether to return an error. Unmarshaling a formally - // different type enables this by assigning all the fields without recursing into this method. - type r authenticationRecord - err := json.Unmarshal(b, (*r)(a)) - if err != nil { - return err - } - if a.Version == "" { - return errors.New("AuthenticationRecord must have a version") - } - for _, v := range supportedAuthRecordVersions { - if a.Version == v { - return nil - } - } - return fmt.Errorf("unsupported AuthenticationRecord version %q. This module supports %v", a.Version, supportedAuthRecordVersions) -} - -// account returns the AuthenticationRecord as an MSAL Account. The account is zero-valued when the AuthenticationRecord is zero-valued. -func (a *authenticationRecord) account() public.Account { - return public.Account{ - Environment: a.Authority, - HomeAccountID: a.HomeAccountID, - PreferredUsername: a.Username, - } -} - -func newAuthenticationRecord(ar public.AuthResult) (authenticationRecord, error) { - u, err := url.Parse(ar.IDToken.Issuer) - if err != nil { - return authenticationRecord{}, fmt.Errorf("Authenticate expected a URL issuer but got %q", ar.IDToken.Issuer) - } - tenant := ar.IDToken.TenantID - if tenant == "" { - tenant = strings.Trim(u.Path, "/") - } - username := ar.IDToken.PreferredUsername - if username == "" { - username = ar.IDToken.UPN - } - return authenticationRecord{ - Authority: fmt.Sprintf("%s://%s", u.Scheme, u.Host), - ClientID: ar.IDToken.Audience, - HomeAccountID: ar.Account.HomeAccountID, - TenantID: tenant, - Username: username, - Version: "1.0", - }, nil -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/azidentity.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/azidentity.go deleted file mode 100644 index b0965036bbf0..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/azidentity.go +++ /dev/null @@ -1,190 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azidentity - -import ( - "bytes" - "context" - "errors" - "fmt" - "io" - "net/http" - "net/url" - "os" - - "github.com/Azure/azure-sdk-for-go/sdk/azcore" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/cloud" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/streaming" - "github.com/Azure/azure-sdk-for-go/sdk/azidentity/internal" - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/confidential" - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/public" -) - -const ( - azureAdditionallyAllowedTenants = "AZURE_ADDITIONALLY_ALLOWED_TENANTS" - azureAuthorityHost = "AZURE_AUTHORITY_HOST" - azureClientCertificatePassword = "AZURE_CLIENT_CERTIFICATE_PASSWORD" - azureClientCertificatePath = "AZURE_CLIENT_CERTIFICATE_PATH" - azureClientID = "AZURE_CLIENT_ID" - azureClientSecret = "AZURE_CLIENT_SECRET" - azureFederatedTokenFile = "AZURE_FEDERATED_TOKEN_FILE" - azurePassword = "AZURE_PASSWORD" - azureRegionalAuthorityName = "AZURE_REGIONAL_AUTHORITY_NAME" - azureTenantID = "AZURE_TENANT_ID" - azureUsername = "AZURE_USERNAME" - - organizationsTenantID = "organizations" - developerSignOnClientID = "04b07795-8ddb-461a-bbee-02f9e1bf7b46" - defaultSuffix = "/.default" - - traceNamespace = "Microsoft.Entra" - traceOpGetToken = "GetToken" - traceOpAuthenticate = "Authenticate" -) - -var ( - // capability CP1 indicates the client application is capable of handling CAE claims challenges - cp1 = []string{"CP1"} - errInvalidTenantID = errors.New("invalid tenantID. You can locate your tenantID by following the instructions listed here: https://learn.microsoft.com/partner-center/find-ids-and-domain-names") -) - -// tokenCachePersistenceOptions contains options for persistent token caching -type tokenCachePersistenceOptions = internal.TokenCachePersistenceOptions - -// setAuthorityHost initializes the authority host for credentials. Precedence is: -// 1. cloud.Configuration.ActiveDirectoryAuthorityHost value set by user -// 2. value of AZURE_AUTHORITY_HOST -// 3. default: Azure Public Cloud -func setAuthorityHost(cc cloud.Configuration) (string, error) { - host := cc.ActiveDirectoryAuthorityHost - if host == "" { - if len(cc.Services) > 0 { - return "", errors.New("missing ActiveDirectoryAuthorityHost for specified cloud") - } - host = cloud.AzurePublic.ActiveDirectoryAuthorityHost - if envAuthorityHost := os.Getenv(azureAuthorityHost); envAuthorityHost != "" { - host = envAuthorityHost - } - } - u, err := url.Parse(host) - if err != nil { - return "", err - } - if u.Scheme != "https" { - return "", errors.New("cannot use an authority host without https") - } - return host, nil -} - -// resolveAdditionalTenants returns a copy of tenants, simplified when tenants contains a wildcard -func resolveAdditionalTenants(tenants []string) []string { - if len(tenants) == 0 { - return nil - } - for _, t := range tenants { - // a wildcard makes all other values redundant - if t == "*" { - return []string{"*"} - } - } - cp := make([]string, len(tenants)) - copy(cp, tenants) - return cp -} - -// resolveTenant returns the correct tenant for a token request -func resolveTenant(defaultTenant, specified, credName string, additionalTenants []string) (string, error) { - if specified == "" || specified == defaultTenant { - return defaultTenant, nil - } - if defaultTenant == "adfs" { - return "", errors.New("ADFS doesn't support tenants") - } - if !validTenantID(specified) { - return "", errInvalidTenantID - } - for _, t := range additionalTenants { - if t == "*" || t == specified { - return specified, nil - } - } - return "", fmt.Errorf(`%s isn't configured to acquire tokens for tenant %q. To enable acquiring tokens for this tenant add it to the AdditionallyAllowedTenants on the credential options, or add "*" to allow acquiring tokens for any tenant`, credName, specified) -} - -func alphanumeric(r rune) bool { - return ('0' <= r && r <= '9') || ('a' <= r && r <= 'z') || ('A' <= r && r <= 'Z') -} - -func validTenantID(tenantID string) bool { - if len(tenantID) < 1 { - return false - } - for _, r := range tenantID { - if !(alphanumeric(r) || r == '.' || r == '-') { - return false - } - } - return true -} - -func doForClient(client *azcore.Client, r *http.Request) (*http.Response, error) { - req, err := runtime.NewRequest(r.Context(), r.Method, r.URL.String()) - if err != nil { - return nil, err - } - if r.Body != nil && r.Body != http.NoBody { - // create a rewindable body from the existing body as required - var body io.ReadSeekCloser - if rsc, ok := r.Body.(io.ReadSeekCloser); ok { - body = rsc - } else { - b, err := io.ReadAll(r.Body) - if err != nil { - return nil, err - } - body = streaming.NopCloser(bytes.NewReader(b)) - } - err = req.SetBody(body, r.Header.Get("Content-Type")) - if err != nil { - return nil, err - } - } - - // copy headers to the new request, ignoring any for which the new request has a value - h := req.Raw().Header - for key, vals := range r.Header { - if _, has := h[key]; !has { - for _, val := range vals { - h.Add(key, val) - } - } - } - - resp, err := client.Pipeline().Do(req) - if err != nil { - return nil, err - } - return resp, err -} - -// enables fakes for test scenarios -type msalConfidentialClient interface { - AcquireTokenSilent(ctx context.Context, scopes []string, options ...confidential.AcquireSilentOption) (confidential.AuthResult, error) - AcquireTokenByAuthCode(ctx context.Context, code string, redirectURI string, scopes []string, options ...confidential.AcquireByAuthCodeOption) (confidential.AuthResult, error) - AcquireTokenByCredential(ctx context.Context, scopes []string, options ...confidential.AcquireByCredentialOption) (confidential.AuthResult, error) - AcquireTokenOnBehalfOf(ctx context.Context, userAssertion string, scopes []string, options ...confidential.AcquireOnBehalfOfOption) (confidential.AuthResult, error) -} - -// enables fakes for test scenarios -type msalPublicClient interface { - AcquireTokenSilent(ctx context.Context, scopes []string, options ...public.AcquireSilentOption) (public.AuthResult, error) - AcquireTokenByUsernamePassword(ctx context.Context, scopes []string, username string, password string, options ...public.AcquireByUsernamePasswordOption) (public.AuthResult, error) - AcquireTokenByDeviceCode(ctx context.Context, scopes []string, options ...public.AcquireByDeviceCodeOption) (public.DeviceCode, error) - AcquireTokenByAuthCode(ctx context.Context, code string, redirectURI string, scopes []string, options ...public.AcquireByAuthCodeOption) (public.AuthResult, error) - AcquireTokenInteractive(ctx context.Context, scopes []string, options ...public.AcquireInteractiveOption) (public.AuthResult, error) -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/azure_cli_credential.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/azure_cli_credential.go deleted file mode 100644 index b9976f5fedee..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/azure_cli_credential.go +++ /dev/null @@ -1,190 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azidentity - -import ( - "bytes" - "context" - "encoding/json" - "errors" - "fmt" - "os" - "os/exec" - "runtime" - "strings" - "sync" - "time" - - "github.com/Azure/azure-sdk-for-go/sdk/azcore" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" - "github.com/Azure/azure-sdk-for-go/sdk/internal/log" -) - -const credNameAzureCLI = "AzureCLICredential" - -type azTokenProvider func(ctx context.Context, scopes []string, tenant, subscription string) ([]byte, error) - -// AzureCLICredentialOptions contains optional parameters for AzureCLICredential. -type AzureCLICredentialOptions struct { - // AdditionallyAllowedTenants specifies tenants for which the credential may acquire tokens, in addition - // to TenantID. Add the wildcard value "*" to allow the credential to acquire tokens for any tenant the - // logged in account can access. - AdditionallyAllowedTenants []string - - // Subscription is the name or ID of a subscription. Set this to acquire tokens for an account other - // than the Azure CLI's current account. - Subscription string - - // TenantID identifies the tenant the credential should authenticate in. - // Defaults to the CLI's default tenant, which is typically the home tenant of the logged in user. - TenantID string - - // inDefaultChain is true when the credential is part of DefaultAzureCredential - inDefaultChain bool - // tokenProvider is used by tests to fake invoking az - tokenProvider azTokenProvider -} - -// init returns an instance of AzureCLICredentialOptions initialized with default values. -func (o *AzureCLICredentialOptions) init() { - if o.tokenProvider == nil { - o.tokenProvider = defaultAzTokenProvider - } -} - -// AzureCLICredential authenticates as the identity logged in to the Azure CLI. -type AzureCLICredential struct { - mu *sync.Mutex - opts AzureCLICredentialOptions -} - -// NewAzureCLICredential constructs an AzureCLICredential. Pass nil to accept default options. -func NewAzureCLICredential(options *AzureCLICredentialOptions) (*AzureCLICredential, error) { - cp := AzureCLICredentialOptions{} - if options != nil { - cp = *options - } - for _, r := range cp.Subscription { - if !(alphanumeric(r) || r == '-' || r == '_' || r == ' ' || r == '.') { - return nil, fmt.Errorf("%s: invalid Subscription %q", credNameAzureCLI, cp.Subscription) - } - } - if cp.TenantID != "" && !validTenantID(cp.TenantID) { - return nil, errInvalidTenantID - } - cp.init() - cp.AdditionallyAllowedTenants = resolveAdditionalTenants(cp.AdditionallyAllowedTenants) - return &AzureCLICredential{mu: &sync.Mutex{}, opts: cp}, nil -} - -// GetToken requests a token from the Azure CLI. This credential doesn't cache tokens, so every call invokes the CLI. -// This method is called automatically by Azure SDK clients. -func (c *AzureCLICredential) GetToken(ctx context.Context, opts policy.TokenRequestOptions) (azcore.AccessToken, error) { - at := azcore.AccessToken{} - if len(opts.Scopes) != 1 { - return at, errors.New(credNameAzureCLI + ": GetToken() requires exactly one scope") - } - if !validScope(opts.Scopes[0]) { - return at, fmt.Errorf("%s.GetToken(): invalid scope %q", credNameAzureCLI, opts.Scopes[0]) - } - tenant, err := resolveTenant(c.opts.TenantID, opts.TenantID, credNameAzureCLI, c.opts.AdditionallyAllowedTenants) - if err != nil { - return at, err - } - c.mu.Lock() - defer c.mu.Unlock() - b, err := c.opts.tokenProvider(ctx, opts.Scopes, tenant, c.opts.Subscription) - if err == nil { - at, err = c.createAccessToken(b) - } - if err != nil { - err = unavailableIfInChain(err, c.opts.inDefaultChain) - return at, err - } - msg := fmt.Sprintf("%s.GetToken() acquired a token for scope %q", credNameAzureCLI, strings.Join(opts.Scopes, ", ")) - log.Write(EventAuthentication, msg) - return at, nil -} - -// defaultAzTokenProvider invokes the Azure CLI to acquire a token. It assumes -// callers have verified that all string arguments are safe to pass to the CLI. -var defaultAzTokenProvider azTokenProvider = func(ctx context.Context, scopes []string, tenantID, subscription string) ([]byte, error) { - // pass the CLI a Microsoft Entra ID v1 resource because we don't know which CLI version is installed and older ones don't support v2 scopes - resource := strings.TrimSuffix(scopes[0], defaultSuffix) - // set a default timeout for this authentication iff the application hasn't done so already - var cancel context.CancelFunc - if _, hasDeadline := ctx.Deadline(); !hasDeadline { - ctx, cancel = context.WithTimeout(ctx, cliTimeout) - defer cancel() - } - commandLine := "az account get-access-token -o json --resource " + resource - if tenantID != "" { - commandLine += " --tenant " + tenantID - } - if subscription != "" { - // subscription needs quotes because it may contain spaces - commandLine += ` --subscription "` + subscription + `"` - } - var cliCmd *exec.Cmd - if runtime.GOOS == "windows" { - dir := os.Getenv("SYSTEMROOT") - if dir == "" { - return nil, newCredentialUnavailableError(credNameAzureCLI, "environment variable 'SYSTEMROOT' has no value") - } - cliCmd = exec.CommandContext(ctx, "cmd.exe", "/c", commandLine) - cliCmd.Dir = dir - } else { - cliCmd = exec.CommandContext(ctx, "/bin/sh", "-c", commandLine) - cliCmd.Dir = "/bin" - } - cliCmd.Env = os.Environ() - var stderr bytes.Buffer - cliCmd.Stderr = &stderr - - output, err := cliCmd.Output() - if err != nil { - msg := stderr.String() - var exErr *exec.ExitError - if errors.As(err, &exErr) && exErr.ExitCode() == 127 || strings.HasPrefix(msg, "'az' is not recognized") { - msg = "Azure CLI not found on path" - } - if msg == "" { - msg = err.Error() - } - return nil, newCredentialUnavailableError(credNameAzureCLI, msg) - } - - return output, nil -} - -func (c *AzureCLICredential) createAccessToken(tk []byte) (azcore.AccessToken, error) { - t := struct { - AccessToken string `json:"accessToken"` - Expires_On int64 `json:"expires_on"` - ExpiresOn string `json:"expiresOn"` - }{} - err := json.Unmarshal(tk, &t) - if err != nil { - return azcore.AccessToken{}, err - } - - exp := time.Unix(t.Expires_On, 0) - if t.Expires_On == 0 { - exp, err = time.ParseInLocation("2006-01-02 15:04:05.999999", t.ExpiresOn, time.Local) - if err != nil { - return azcore.AccessToken{}, fmt.Errorf("%s: error parsing token expiration time %q: %v", credNameAzureCLI, t.ExpiresOn, err) - } - } - - converted := azcore.AccessToken{ - Token: t.AccessToken, - ExpiresOn: exp.UTC(), - } - return converted, nil -} - -var _ azcore.TokenCredential = (*AzureCLICredential)(nil) diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/azure_developer_cli_credential.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/azure_developer_cli_credential.go deleted file mode 100644 index cbe7c4c2db1f..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/azure_developer_cli_credential.go +++ /dev/null @@ -1,169 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azidentity - -import ( - "bytes" - "context" - "encoding/json" - "errors" - "fmt" - "os" - "os/exec" - "runtime" - "strings" - "sync" - "time" - - "github.com/Azure/azure-sdk-for-go/sdk/azcore" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" - "github.com/Azure/azure-sdk-for-go/sdk/internal/log" -) - -const credNameAzureDeveloperCLI = "AzureDeveloperCLICredential" - -type azdTokenProvider func(ctx context.Context, scopes []string, tenant string) ([]byte, error) - -// AzureDeveloperCLICredentialOptions contains optional parameters for AzureDeveloperCLICredential. -type AzureDeveloperCLICredentialOptions struct { - // AdditionallyAllowedTenants specifies tenants for which the credential may acquire tokens, in addition - // to TenantID. Add the wildcard value "*" to allow the credential to acquire tokens for any tenant the - // logged in account can access. - AdditionallyAllowedTenants []string - - // TenantID identifies the tenant the credential should authenticate in. Defaults to the azd environment, - // which is the tenant of the selected Azure subscription. - TenantID string - - // inDefaultChain is true when the credential is part of DefaultAzureCredential - inDefaultChain bool - // tokenProvider is used by tests to fake invoking azd - tokenProvider azdTokenProvider -} - -// AzureDeveloperCLICredential authenticates as the identity logged in to the [Azure Developer CLI]. -// -// [Azure Developer CLI]: https://learn.microsoft.com/azure/developer/azure-developer-cli/overview -type AzureDeveloperCLICredential struct { - mu *sync.Mutex - opts AzureDeveloperCLICredentialOptions -} - -// NewAzureDeveloperCLICredential constructs an AzureDeveloperCLICredential. Pass nil to accept default options. -func NewAzureDeveloperCLICredential(options *AzureDeveloperCLICredentialOptions) (*AzureDeveloperCLICredential, error) { - cp := AzureDeveloperCLICredentialOptions{} - if options != nil { - cp = *options - } - if cp.TenantID != "" && !validTenantID(cp.TenantID) { - return nil, errInvalidTenantID - } - if cp.tokenProvider == nil { - cp.tokenProvider = defaultAzdTokenProvider - } - return &AzureDeveloperCLICredential{mu: &sync.Mutex{}, opts: cp}, nil -} - -// GetToken requests a token from the Azure Developer CLI. This credential doesn't cache tokens, so every call invokes azd. -// This method is called automatically by Azure SDK clients. -func (c *AzureDeveloperCLICredential) GetToken(ctx context.Context, opts policy.TokenRequestOptions) (azcore.AccessToken, error) { - at := azcore.AccessToken{} - if len(opts.Scopes) == 0 { - return at, errors.New(credNameAzureDeveloperCLI + ": GetToken() requires at least one scope") - } - for _, scope := range opts.Scopes { - if !validScope(scope) { - return at, fmt.Errorf("%s.GetToken(): invalid scope %q", credNameAzureDeveloperCLI, scope) - } - } - tenant, err := resolveTenant(c.opts.TenantID, opts.TenantID, credNameAzureDeveloperCLI, c.opts.AdditionallyAllowedTenants) - if err != nil { - return at, err - } - c.mu.Lock() - defer c.mu.Unlock() - b, err := c.opts.tokenProvider(ctx, opts.Scopes, tenant) - if err == nil { - at, err = c.createAccessToken(b) - } - if err != nil { - err = unavailableIfInChain(err, c.opts.inDefaultChain) - return at, err - } - msg := fmt.Sprintf("%s.GetToken() acquired a token for scope %q", credNameAzureDeveloperCLI, strings.Join(opts.Scopes, ", ")) - log.Write(EventAuthentication, msg) - return at, nil -} - -// defaultAzTokenProvider invokes the Azure Developer CLI to acquire a token. It assumes -// callers have verified that all string arguments are safe to pass to the CLI. -var defaultAzdTokenProvider azdTokenProvider = func(ctx context.Context, scopes []string, tenant string) ([]byte, error) { - // set a default timeout for this authentication iff the application hasn't done so already - var cancel context.CancelFunc - if _, hasDeadline := ctx.Deadline(); !hasDeadline { - ctx, cancel = context.WithTimeout(ctx, cliTimeout) - defer cancel() - } - commandLine := "azd auth token -o json" - if tenant != "" { - commandLine += " --tenant-id " + tenant - } - for _, scope := range scopes { - commandLine += " --scope " + scope - } - var cliCmd *exec.Cmd - if runtime.GOOS == "windows" { - dir := os.Getenv("SYSTEMROOT") - if dir == "" { - return nil, newCredentialUnavailableError(credNameAzureDeveloperCLI, "environment variable 'SYSTEMROOT' has no value") - } - cliCmd = exec.CommandContext(ctx, "cmd.exe", "/c", commandLine) - cliCmd.Dir = dir - } else { - cliCmd = exec.CommandContext(ctx, "/bin/sh", "-c", commandLine) - cliCmd.Dir = "/bin" - } - cliCmd.Env = os.Environ() - var stderr bytes.Buffer - cliCmd.Stderr = &stderr - output, err := cliCmd.Output() - if err != nil { - msg := stderr.String() - var exErr *exec.ExitError - if errors.As(err, &exErr) && exErr.ExitCode() == 127 || strings.HasPrefix(msg, "'azd' is not recognized") { - msg = "Azure Developer CLI not found on path" - } else if strings.Contains(msg, "azd auth login") { - msg = `please run "azd auth login" from a command prompt to authenticate before using this credential` - } - if msg == "" { - msg = err.Error() - } - return nil, newCredentialUnavailableError(credNameAzureDeveloperCLI, msg) - } - return output, nil -} - -func (c *AzureDeveloperCLICredential) createAccessToken(tk []byte) (azcore.AccessToken, error) { - t := struct { - AccessToken string `json:"token"` - ExpiresOn string `json:"expiresOn"` - }{} - err := json.Unmarshal(tk, &t) - if err != nil { - return azcore.AccessToken{}, err - } - exp, err := time.Parse("2006-01-02T15:04:05Z", t.ExpiresOn) - if err != nil { - return azcore.AccessToken{}, fmt.Errorf("error parsing token expiration time %q: %v", t.ExpiresOn, err) - } - return azcore.AccessToken{ - ExpiresOn: exp.UTC(), - Token: t.AccessToken, - }, nil -} - -var _ azcore.TokenCredential = (*AzureDeveloperCLICredential)(nil) diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/azure_pipelines_credential.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/azure_pipelines_credential.go deleted file mode 100644 index 2655543aee64..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/azure_pipelines_credential.go +++ /dev/null @@ -1,130 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azidentity - -import ( - "context" - "encoding/json" - "errors" - "fmt" - "net/http" - "os" - - "github.com/Azure/azure-sdk-for-go/sdk/azcore" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime" -) - -const ( - credNameAzurePipelines = "AzurePipelinesCredential" - oidcAPIVersion = "7.1" - systemAccessToken = "SYSTEM_ACCESSTOKEN" - systemOIDCRequestURI = "SYSTEM_OIDCREQUESTURI" -) - -// azurePipelinesCredential authenticates with workload identity federation in an Azure Pipeline. See -// [Azure Pipelines documentation] for more information. -// -// [Azure Pipelines documentation]: https://learn.microsoft.com/azure/devops/pipelines/library/connect-to-azure?view=azure-devops#create-an-azure-resource-manager-service-connection-that-uses-workload-identity-federation -type azurePipelinesCredential struct { - connectionID, oidcURI, systemAccessToken string - cred *ClientAssertionCredential -} - -// azurePipelinesCredentialOptions contains optional parameters for AzurePipelinesCredential. -type azurePipelinesCredentialOptions struct { - azcore.ClientOptions - - // AdditionallyAllowedTenants specifies additional tenants for which the credential may acquire tokens. - // Add the wildcard value "*" to allow the credential to acquire tokens for any tenant in which the - // application is registered. - AdditionallyAllowedTenants []string - - // DisableInstanceDiscovery should be set true only by applications authenticating in disconnected clouds, or - // private clouds such as Azure Stack. It determines whether the credential requests Microsoft Entra instance metadata - // from https://login.microsoft.com before authenticating. Setting this to true will skip this request, making - // the application responsible for ensuring the configured authority is valid and trustworthy. - DisableInstanceDiscovery bool -} - -// newAzurePipelinesCredential is the constructor for AzurePipelinesCredential. In addition to its required arguments, -// it reads a security token for the running build, which is required to authenticate the service connection, from the -// environment variable SYSTEM_ACCESSTOKEN. See the [Azure Pipelines documentation] for an example showing how to set -// this variable in build job YAML. -// -// [Azure Pipelines documentation]: https://learn.microsoft.com/azure/devops/pipelines/build/variables?view=azure-devops&tabs=yaml#systemaccesstoken -func newAzurePipelinesCredential(tenantID, clientID, serviceConnectionID string, options *azurePipelinesCredentialOptions) (*azurePipelinesCredential, error) { - if options == nil { - options = &azurePipelinesCredentialOptions{} - } - u := os.Getenv(systemOIDCRequestURI) - if u == "" { - return nil, fmt.Errorf("no value for environment variable %s. This should be set by Azure Pipelines", systemOIDCRequestURI) - } - sat := os.Getenv(systemAccessToken) - if sat == "" { - return nil, errors.New("no value for environment variable " + systemAccessToken) - } - a := azurePipelinesCredential{ - connectionID: serviceConnectionID, - oidcURI: u, - systemAccessToken: sat, - } - caco := ClientAssertionCredentialOptions{ - AdditionallyAllowedTenants: options.AdditionallyAllowedTenants, - ClientOptions: options.ClientOptions, - DisableInstanceDiscovery: options.DisableInstanceDiscovery, - } - cred, err := NewClientAssertionCredential(tenantID, clientID, a.getAssertion, &caco) - if err != nil { - return nil, err - } - cred.client.name = credNameAzurePipelines - a.cred = cred - return &a, nil -} - -// GetToken requests an access token from Microsoft Entra ID. Azure SDK clients call this method automatically. -func (a *azurePipelinesCredential) GetToken(ctx context.Context, opts policy.TokenRequestOptions) (azcore.AccessToken, error) { - var err error - ctx, endSpan := runtime.StartSpan(ctx, credNameAzurePipelines+"."+traceOpGetToken, a.cred.client.azClient.Tracer(), nil) - defer func() { endSpan(err) }() - tk, err := a.cred.GetToken(ctx, opts) - return tk, err -} - -func (a *azurePipelinesCredential) getAssertion(ctx context.Context) (string, error) { - url := a.oidcURI + "?api-version=" + oidcAPIVersion + "&serviceConnectionId=" + a.connectionID - url, err := runtime.EncodeQueryParams(url) - if err != nil { - return "", newAuthenticationFailedError(credNameAzurePipelines, "couldn't encode OIDC URL: "+err.Error(), nil, nil) - } - req, err := http.NewRequestWithContext(ctx, http.MethodPost, url, nil) - if err != nil { - return "", newAuthenticationFailedError(credNameAzurePipelines, "couldn't create OIDC token request: "+err.Error(), nil, nil) - } - req.Header.Set("Authorization", "Bearer "+a.systemAccessToken) - res, err := doForClient(a.cred.client.azClient, req) - if err != nil { - return "", newAuthenticationFailedError(credNameAzurePipelines, "couldn't send OIDC token request: "+err.Error(), nil, nil) - } - if res.StatusCode != http.StatusOK { - msg := res.Status + " response from the OIDC endpoint. Check service connection ID and Pipeline configuration" - // include the response because its body, if any, probably contains an error message. - // OK responses aren't included with errors because they probably contain secrets - return "", newAuthenticationFailedError(credNameAzurePipelines, msg, res, nil) - } - b, err := runtime.Payload(res) - if err != nil { - return "", newAuthenticationFailedError(credNameAzurePipelines, "couldn't read OIDC response content: "+err.Error(), nil, nil) - } - var r struct { - OIDCToken string `json:"oidcToken"` - } - err = json.Unmarshal(b, &r) - if err != nil { - return "", newAuthenticationFailedError(credNameAzurePipelines, "unexpected response from OIDC endpoint", nil, nil) - } - return r.OIDCToken, nil -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/chained_token_credential.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/chained_token_credential.go deleted file mode 100644 index 6c35a941b976..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/chained_token_credential.go +++ /dev/null @@ -1,138 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azidentity - -import ( - "context" - "errors" - "fmt" - "strings" - "sync" - - "github.com/Azure/azure-sdk-for-go/sdk/azcore" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" - "github.com/Azure/azure-sdk-for-go/sdk/internal/log" -) - -// ChainedTokenCredentialOptions contains optional parameters for ChainedTokenCredential. -type ChainedTokenCredentialOptions struct { - // RetrySources configures how the credential uses its sources. When true, the credential always attempts to - // authenticate through each source in turn, stopping when one succeeds. When false, the credential authenticates - // only through this first successful source--it never again tries the sources which failed. - RetrySources bool -} - -// ChainedTokenCredential links together multiple credentials and tries them sequentially when authenticating. By default, -// it tries all the credentials until one authenticates, after which it always uses that credential. -type ChainedTokenCredential struct { - cond *sync.Cond - iterating bool - name string - retrySources bool - sources []azcore.TokenCredential - successfulCredential azcore.TokenCredential -} - -// NewChainedTokenCredential creates a ChainedTokenCredential. Pass nil for options to accept defaults. -func NewChainedTokenCredential(sources []azcore.TokenCredential, options *ChainedTokenCredentialOptions) (*ChainedTokenCredential, error) { - if len(sources) == 0 { - return nil, errors.New("sources must contain at least one TokenCredential") - } - for _, source := range sources { - if source == nil { // cannot have a nil credential in the chain or else the application will panic when GetToken() is called on nil - return nil, errors.New("sources cannot contain nil") - } - } - cp := make([]azcore.TokenCredential, len(sources)) - copy(cp, sources) - if options == nil { - options = &ChainedTokenCredentialOptions{} - } - return &ChainedTokenCredential{ - cond: sync.NewCond(&sync.Mutex{}), - name: "ChainedTokenCredential", - retrySources: options.RetrySources, - sources: cp, - }, nil -} - -// GetToken calls GetToken on the chained credentials in turn, stopping when one returns a token. -// This method is called automatically by Azure SDK clients. -func (c *ChainedTokenCredential) GetToken(ctx context.Context, opts policy.TokenRequestOptions) (azcore.AccessToken, error) { - if !c.retrySources { - // ensure only one goroutine at a time iterates the sources and perhaps sets c.successfulCredential - c.cond.L.Lock() - for { - if c.successfulCredential != nil { - c.cond.L.Unlock() - return c.successfulCredential.GetToken(ctx, opts) - } - if !c.iterating { - c.iterating = true - // allow other goroutines to wait while this one iterates - c.cond.L.Unlock() - break - } - c.cond.Wait() - } - } - - var ( - err error - errs []error - successfulCredential azcore.TokenCredential - token azcore.AccessToken - unavailableErr credentialUnavailable - ) - for _, cred := range c.sources { - token, err = cred.GetToken(ctx, opts) - if err == nil { - log.Writef(EventAuthentication, "%s authenticated with %s", c.name, extractCredentialName(cred)) - successfulCredential = cred - break - } - errs = append(errs, err) - // continue to the next source iff this one returned credentialUnavailableError - if !errors.As(err, &unavailableErr) { - break - } - } - if c.iterating { - c.cond.L.Lock() - // this is nil when all credentials returned an error - c.successfulCredential = successfulCredential - c.iterating = false - c.cond.L.Unlock() - c.cond.Broadcast() - } - // err is the error returned by the last GetToken call. It will be nil when that call succeeds - if err != nil { - // return credentialUnavailableError iff all sources did so; return AuthenticationFailedError otherwise - msg := createChainedErrorMessage(errs) - if errors.As(err, &unavailableErr) { - err = newCredentialUnavailableError(c.name, msg) - } else { - res := getResponseFromError(err) - err = newAuthenticationFailedError(c.name, msg, res, err) - } - } - return token, err -} - -func createChainedErrorMessage(errs []error) string { - msg := "failed to acquire a token.\nAttempted credentials:" - for _, err := range errs { - msg += fmt.Sprintf("\n\t%s", err.Error()) - } - return msg -} - -func extractCredentialName(credential azcore.TokenCredential) string { - return strings.TrimPrefix(fmt.Sprintf("%T", credential), "*azidentity.") -} - -var _ azcore.TokenCredential = (*ChainedTokenCredential)(nil) diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/ci.yml b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/ci.yml deleted file mode 100644 index 4cd8c5144731..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/ci.yml +++ /dev/null @@ -1,46 +0,0 @@ -# NOTE: Please refer to https://aka.ms/azsdk/engsys/ci-yaml before editing this file. -trigger: - branches: - include: - - main - - feature/* - - hotfix/* - - release/* - paths: - include: - - sdk/azidentity/ - -pr: - branches: - include: - - main - - feature/* - - hotfix/* - - release/* - paths: - include: - - sdk/azidentity/ - -extends: - template: /eng/pipelines/templates/jobs/archetype-sdk-client.yml - parameters: - CloudConfig: - Public: - SubscriptionConfigurations: - - $(sub-config-azure-cloud-test-resources) - - $(sub-config-identity-test-resources) - EnvVars: - SYSTEM_ACCESSTOKEN: $(System.AccessToken) - RunLiveTests: true - ServiceDirectory: azidentity - UsePipelineProxy: false - - ${{ if endsWith(variables['Build.DefinitionName'], 'weekly') }}: - MatrixConfigs: - - Name: managed_identity_matrix - GenerateVMJobs: true - Path: sdk/azidentity/managed-identity-matrix.json - Selection: sparse - MatrixReplace: - - Pool=.*LINUXPOOL.*/azsdk-pool-mms-ubuntu-2204-identitymsi - - OSVmImage=.*LINUXNEXTVMIMAGE.*/azsdk-pool-mms-ubuntu-2204-1espt diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/client_assertion_credential.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/client_assertion_credential.go deleted file mode 100644 index b588750ef33b..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/client_assertion_credential.go +++ /dev/null @@ -1,85 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azidentity - -import ( - "context" - "errors" - - "github.com/Azure/azure-sdk-for-go/sdk/azcore" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime" - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/confidential" -) - -const credNameAssertion = "ClientAssertionCredential" - -// ClientAssertionCredential authenticates an application with assertions provided by a callback function. -// This credential is for advanced scenarios. [ClientCertificateCredential] has a more convenient API for -// the most common assertion scenario, authenticating a service principal with a certificate. See -// [Microsoft Entra ID documentation] for details of the assertion format. -// -// [Microsoft Entra ID documentation]: https://learn.microsoft.com/entra/identity-platform/certificate-credentials#assertion-format -type ClientAssertionCredential struct { - client *confidentialClient -} - -// ClientAssertionCredentialOptions contains optional parameters for ClientAssertionCredential. -type ClientAssertionCredentialOptions struct { - azcore.ClientOptions - - // AdditionallyAllowedTenants specifies additional tenants for which the credential may acquire tokens. - // Add the wildcard value "*" to allow the credential to acquire tokens for any tenant in which the - // application is registered. - AdditionallyAllowedTenants []string - - // DisableInstanceDiscovery should be set true only by applications authenticating in disconnected clouds, or - // private clouds such as Azure Stack. It determines whether the credential requests Microsoft Entra instance metadata - // from https://login.microsoft.com before authenticating. Setting this to true will skip this request, making - // the application responsible for ensuring the configured authority is valid and trustworthy. - DisableInstanceDiscovery bool - - // tokenCachePersistenceOptions enables persistent token caching when not nil. - tokenCachePersistenceOptions *tokenCachePersistenceOptions -} - -// NewClientAssertionCredential constructs a ClientAssertionCredential. The getAssertion function must be thread safe. Pass nil for options to accept defaults. -func NewClientAssertionCredential(tenantID, clientID string, getAssertion func(context.Context) (string, error), options *ClientAssertionCredentialOptions) (*ClientAssertionCredential, error) { - if getAssertion == nil { - return nil, errors.New("getAssertion must be a function that returns assertions") - } - if options == nil { - options = &ClientAssertionCredentialOptions{} - } - cred := confidential.NewCredFromAssertionCallback( - func(ctx context.Context, _ confidential.AssertionRequestOptions) (string, error) { - return getAssertion(ctx) - }, - ) - msalOpts := confidentialClientOptions{ - AdditionallyAllowedTenants: options.AdditionallyAllowedTenants, - ClientOptions: options.ClientOptions, - DisableInstanceDiscovery: options.DisableInstanceDiscovery, - tokenCachePersistenceOptions: options.tokenCachePersistenceOptions, - } - c, err := newConfidentialClient(tenantID, clientID, credNameAssertion, cred, msalOpts) - if err != nil { - return nil, err - } - return &ClientAssertionCredential{client: c}, nil -} - -// GetToken requests an access token from Microsoft Entra ID. This method is called automatically by Azure SDK clients. -func (c *ClientAssertionCredential) GetToken(ctx context.Context, opts policy.TokenRequestOptions) (azcore.AccessToken, error) { - var err error - ctx, endSpan := runtime.StartSpan(ctx, credNameAssertion+"."+traceOpGetToken, c.client.azClient.Tracer(), nil) - defer func() { endSpan(err) }() - tk, err := c.client.GetToken(ctx, opts) - return tk, err -} - -var _ azcore.TokenCredential = (*ClientAssertionCredential)(nil) diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/client_certificate_credential.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/client_certificate_credential.go deleted file mode 100644 index 80cd96b560f4..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/client_certificate_credential.go +++ /dev/null @@ -1,174 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azidentity - -import ( - "context" - "crypto" - "crypto/x509" - "encoding/pem" - "errors" - - "github.com/Azure/azure-sdk-for-go/sdk/azcore" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime" - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/confidential" - "golang.org/x/crypto/pkcs12" -) - -const credNameCert = "ClientCertificateCredential" - -// ClientCertificateCredentialOptions contains optional parameters for ClientCertificateCredential. -type ClientCertificateCredentialOptions struct { - azcore.ClientOptions - - // AdditionallyAllowedTenants specifies additional tenants for which the credential may acquire tokens. - // Add the wildcard value "*" to allow the credential to acquire tokens for any tenant in which the - // application is registered. - AdditionallyAllowedTenants []string - - // DisableInstanceDiscovery should be set true only by applications authenticating in disconnected clouds, or - // private clouds such as Azure Stack. It determines whether the credential requests Microsoft Entra instance metadata - // from https://login.microsoft.com before authenticating. Setting this to true will skip this request, making - // the application responsible for ensuring the configured authority is valid and trustworthy. - DisableInstanceDiscovery bool - - // SendCertificateChain controls whether the credential sends the public certificate chain in the x5c - // header of each token request's JWT. This is required for Subject Name/Issuer (SNI) authentication. - // Defaults to False. - SendCertificateChain bool - - // tokenCachePersistenceOptions enables persistent token caching when not nil. - tokenCachePersistenceOptions *tokenCachePersistenceOptions -} - -// ClientCertificateCredential authenticates a service principal with a certificate. -type ClientCertificateCredential struct { - client *confidentialClient -} - -// NewClientCertificateCredential constructs a ClientCertificateCredential. Pass nil for options to accept defaults. See -// [ParseCertificates] for help loading a certificate. -func NewClientCertificateCredential(tenantID string, clientID string, certs []*x509.Certificate, key crypto.PrivateKey, options *ClientCertificateCredentialOptions) (*ClientCertificateCredential, error) { - if len(certs) == 0 { - return nil, errors.New("at least one certificate is required") - } - if options == nil { - options = &ClientCertificateCredentialOptions{} - } - cred, err := confidential.NewCredFromCert(certs, key) - if err != nil { - return nil, err - } - msalOpts := confidentialClientOptions{ - AdditionallyAllowedTenants: options.AdditionallyAllowedTenants, - ClientOptions: options.ClientOptions, - DisableInstanceDiscovery: options.DisableInstanceDiscovery, - SendX5C: options.SendCertificateChain, - tokenCachePersistenceOptions: options.tokenCachePersistenceOptions, - } - c, err := newConfidentialClient(tenantID, clientID, credNameCert, cred, msalOpts) - if err != nil { - return nil, err - } - return &ClientCertificateCredential{client: c}, nil -} - -// GetToken requests an access token from Microsoft Entra ID. This method is called automatically by Azure SDK clients. -func (c *ClientCertificateCredential) GetToken(ctx context.Context, opts policy.TokenRequestOptions) (azcore.AccessToken, error) { - var err error - ctx, endSpan := runtime.StartSpan(ctx, credNameCert+"."+traceOpGetToken, c.client.azClient.Tracer(), nil) - defer func() { endSpan(err) }() - tk, err := c.client.GetToken(ctx, opts) - return tk, err -} - -// ParseCertificates loads certificates and a private key, in PEM or PKCS#12 format, for use with [NewClientCertificateCredential]. -// Pass nil for password if the private key isn't encrypted. This function has limitations, for example it can't decrypt keys in -// PEM format or PKCS#12 certificates that use SHA256 for message authentication. If you encounter such limitations, consider -// using another module to load the certificate and private key. -func ParseCertificates(certData []byte, password []byte) ([]*x509.Certificate, crypto.PrivateKey, error) { - var blocks []*pem.Block - var err error - if len(password) == 0 { - blocks, err = loadPEMCert(certData) - } - if len(blocks) == 0 || err != nil { - blocks, err = loadPKCS12Cert(certData, string(password)) - } - if err != nil { - return nil, nil, err - } - var certs []*x509.Certificate - var pk crypto.PrivateKey - for _, block := range blocks { - switch block.Type { - case "CERTIFICATE": - c, err := x509.ParseCertificate(block.Bytes) - if err != nil { - return nil, nil, err - } - certs = append(certs, c) - case "PRIVATE KEY": - if pk != nil { - return nil, nil, errors.New("certData contains multiple private keys") - } - pk, err = x509.ParsePKCS8PrivateKey(block.Bytes) - if err != nil { - pk, err = x509.ParsePKCS1PrivateKey(block.Bytes) - } - if err != nil { - return nil, nil, err - } - case "RSA PRIVATE KEY": - if pk != nil { - return nil, nil, errors.New("certData contains multiple private keys") - } - pk, err = x509.ParsePKCS1PrivateKey(block.Bytes) - if err != nil { - return nil, nil, err - } - } - } - if len(certs) == 0 { - return nil, nil, errors.New("found no certificate") - } - if pk == nil { - return nil, nil, errors.New("found no private key") - } - return certs, pk, nil -} - -func loadPEMCert(certData []byte) ([]*pem.Block, error) { - blocks := []*pem.Block{} - for { - var block *pem.Block - block, certData = pem.Decode(certData) - if block == nil { - break - } - blocks = append(blocks, block) - } - if len(blocks) == 0 { - return nil, errors.New("didn't find any PEM blocks") - } - return blocks, nil -} - -func loadPKCS12Cert(certData []byte, password string) ([]*pem.Block, error) { - blocks, err := pkcs12.ToPEM(certData, password) - if err != nil { - return nil, err - } - if len(blocks) == 0 { - // not mentioning PKCS12 in this message because we end up here when certData is garbage - return nil, errors.New("didn't find any certificate content") - } - return blocks, err -} - -var _ azcore.TokenCredential = (*ClientCertificateCredential)(nil) diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/client_secret_credential.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/client_secret_credential.go deleted file mode 100644 index 9e6772e9b80a..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/client_secret_credential.go +++ /dev/null @@ -1,75 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azidentity - -import ( - "context" - - "github.com/Azure/azure-sdk-for-go/sdk/azcore" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime" - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/confidential" -) - -const credNameSecret = "ClientSecretCredential" - -// ClientSecretCredentialOptions contains optional parameters for ClientSecretCredential. -type ClientSecretCredentialOptions struct { - azcore.ClientOptions - - // AdditionallyAllowedTenants specifies additional tenants for which the credential may acquire tokens. - // Add the wildcard value "*" to allow the credential to acquire tokens for any tenant in which the - // application is registered. - AdditionallyAllowedTenants []string - - // DisableInstanceDiscovery should be set true only by applications authenticating in disconnected clouds, or - // private clouds such as Azure Stack. It determines whether the credential requests Microsoft Entra instance metadata - // from https://login.microsoft.com before authenticating. Setting this to true will skip this request, making - // the application responsible for ensuring the configured authority is valid and trustworthy. - DisableInstanceDiscovery bool - - // tokenCachePersistenceOptions enables persistent token caching when not nil. - tokenCachePersistenceOptions *tokenCachePersistenceOptions -} - -// ClientSecretCredential authenticates an application with a client secret. -type ClientSecretCredential struct { - client *confidentialClient -} - -// NewClientSecretCredential constructs a ClientSecretCredential. Pass nil for options to accept defaults. -func NewClientSecretCredential(tenantID string, clientID string, clientSecret string, options *ClientSecretCredentialOptions) (*ClientSecretCredential, error) { - if options == nil { - options = &ClientSecretCredentialOptions{} - } - cred, err := confidential.NewCredFromSecret(clientSecret) - if err != nil { - return nil, err - } - msalOpts := confidentialClientOptions{ - AdditionallyAllowedTenants: options.AdditionallyAllowedTenants, - ClientOptions: options.ClientOptions, - DisableInstanceDiscovery: options.DisableInstanceDiscovery, - tokenCachePersistenceOptions: options.tokenCachePersistenceOptions, - } - c, err := newConfidentialClient(tenantID, clientID, credNameSecret, cred, msalOpts) - if err != nil { - return nil, err - } - return &ClientSecretCredential{client: c}, nil -} - -// GetToken requests an access token from Microsoft Entra ID. This method is called automatically by Azure SDK clients. -func (c *ClientSecretCredential) GetToken(ctx context.Context, opts policy.TokenRequestOptions) (azcore.AccessToken, error) { - var err error - ctx, endSpan := runtime.StartSpan(ctx, credNameSecret+"."+traceOpGetToken, c.client.azClient.Tracer(), nil) - defer func() { endSpan(err) }() - tk, err := c.client.GetToken(ctx, opts) - return tk, err -} - -var _ azcore.TokenCredential = (*ClientSecretCredential)(nil) diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/confidential_client.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/confidential_client.go deleted file mode 100644 index 3bd08c685fb2..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/confidential_client.go +++ /dev/null @@ -1,184 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azidentity - -import ( - "context" - "errors" - "fmt" - "net/http" - "os" - "strings" - "sync" - - "github.com/Azure/azure-sdk-for-go/sdk/azcore" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime" - "github.com/Azure/azure-sdk-for-go/sdk/azidentity/internal" - "github.com/Azure/azure-sdk-for-go/sdk/internal/log" - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/confidential" -) - -type confidentialClientOptions struct { - azcore.ClientOptions - - AdditionallyAllowedTenants []string - // Assertion for on-behalf-of authentication - Assertion string - DisableInstanceDiscovery, SendX5C bool - tokenCachePersistenceOptions *tokenCachePersistenceOptions -} - -// confidentialClient wraps the MSAL confidential client -type confidentialClient struct { - cae, noCAE msalConfidentialClient - caeMu, noCAEMu, clientMu *sync.Mutex - clientID, tenantID string - cred confidential.Credential - host string - name string - opts confidentialClientOptions - region string - azClient *azcore.Client -} - -func newConfidentialClient(tenantID, clientID, name string, cred confidential.Credential, opts confidentialClientOptions) (*confidentialClient, error) { - if !validTenantID(tenantID) { - return nil, errInvalidTenantID - } - host, err := setAuthorityHost(opts.Cloud) - if err != nil { - return nil, err - } - client, err := azcore.NewClient(module, version, runtime.PipelineOptions{ - Tracing: runtime.TracingOptions{ - Namespace: traceNamespace, - }, - }, &opts.ClientOptions) - if err != nil { - return nil, err - } - opts.AdditionallyAllowedTenants = resolveAdditionalTenants(opts.AdditionallyAllowedTenants) - return &confidentialClient{ - caeMu: &sync.Mutex{}, - clientID: clientID, - clientMu: &sync.Mutex{}, - cred: cred, - host: host, - name: name, - noCAEMu: &sync.Mutex{}, - opts: opts, - region: os.Getenv(azureRegionalAuthorityName), - tenantID: tenantID, - azClient: client, - }, nil -} - -// GetToken requests an access token from MSAL, checking the cache first. -func (c *confidentialClient) GetToken(ctx context.Context, tro policy.TokenRequestOptions) (azcore.AccessToken, error) { - if len(tro.Scopes) < 1 { - return azcore.AccessToken{}, fmt.Errorf("%s.GetToken() requires at least one scope", c.name) - } - // we don't resolve the tenant for managed identities because they acquire tokens only from their home tenants - if c.name != credNameManagedIdentity { - tenant, err := c.resolveTenant(tro.TenantID) - if err != nil { - return azcore.AccessToken{}, err - } - tro.TenantID = tenant - } - client, mu, err := c.client(tro) - if err != nil { - return azcore.AccessToken{}, err - } - mu.Lock() - defer mu.Unlock() - var ar confidential.AuthResult - if c.opts.Assertion != "" { - ar, err = client.AcquireTokenOnBehalfOf(ctx, c.opts.Assertion, tro.Scopes, confidential.WithClaims(tro.Claims), confidential.WithTenantID(tro.TenantID)) - } else { - ar, err = client.AcquireTokenSilent(ctx, tro.Scopes, confidential.WithClaims(tro.Claims), confidential.WithTenantID(tro.TenantID)) - if err != nil { - ar, err = client.AcquireTokenByCredential(ctx, tro.Scopes, confidential.WithClaims(tro.Claims), confidential.WithTenantID(tro.TenantID)) - } - } - if err != nil { - // We could get a credentialUnavailableError from managed identity authentication because in that case the error comes from our code. - // We return it directly because it affects the behavior of credential chains. Otherwise, we return AuthenticationFailedError. - var unavailableErr credentialUnavailable - if !errors.As(err, &unavailableErr) { - res := getResponseFromError(err) - err = newAuthenticationFailedError(c.name, err.Error(), res, err) - } - } else { - msg := fmt.Sprintf("%s.GetToken() acquired a token for scope %q", c.name, strings.Join(ar.GrantedScopes, ", ")) - log.Write(EventAuthentication, msg) - } - return azcore.AccessToken{Token: ar.AccessToken, ExpiresOn: ar.ExpiresOn.UTC()}, err -} - -func (c *confidentialClient) client(tro policy.TokenRequestOptions) (msalConfidentialClient, *sync.Mutex, error) { - c.clientMu.Lock() - defer c.clientMu.Unlock() - if tro.EnableCAE { - if c.cae == nil { - client, err := c.newMSALClient(true) - if err != nil { - return nil, nil, err - } - c.cae = client - } - return c.cae, c.caeMu, nil - } - if c.noCAE == nil { - client, err := c.newMSALClient(false) - if err != nil { - return nil, nil, err - } - c.noCAE = client - } - return c.noCAE, c.noCAEMu, nil -} - -func (c *confidentialClient) newMSALClient(enableCAE bool) (msalConfidentialClient, error) { - cache, err := internal.NewCache(c.opts.tokenCachePersistenceOptions, enableCAE) - if err != nil { - return nil, err - } - authority := runtime.JoinPaths(c.host, c.tenantID) - o := []confidential.Option{ - confidential.WithAzureRegion(c.region), - confidential.WithCache(cache), - confidential.WithHTTPClient(c), - } - if enableCAE { - o = append(o, confidential.WithClientCapabilities(cp1)) - } - if c.opts.SendX5C { - o = append(o, confidential.WithX5C()) - } - if c.opts.DisableInstanceDiscovery || strings.ToLower(c.tenantID) == "adfs" { - o = append(o, confidential.WithInstanceDiscovery(false)) - } - return confidential.New(authority, c.clientID, c.cred, o...) -} - -// resolveTenant returns the correct WithTenantID() argument for a token request given the client's -// configuration, or an error when that configuration doesn't allow the specified tenant -func (c *confidentialClient) resolveTenant(specified string) (string, error) { - return resolveTenant(c.tenantID, specified, c.name, c.opts.AdditionallyAllowedTenants) -} - -// these methods satisfy the MSAL ops.HTTPClient interface - -func (c *confidentialClient) CloseIdleConnections() { - // do nothing -} - -func (c *confidentialClient) Do(r *http.Request) (*http.Response, error) { - return doForClient(c.azClient, r) -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/default_azure_credential.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/default_azure_credential.go deleted file mode 100644 index 551d3199462e..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/default_azure_credential.go +++ /dev/null @@ -1,165 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azidentity - -import ( - "context" - "os" - "strings" - - "github.com/Azure/azure-sdk-for-go/sdk/azcore" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" - "github.com/Azure/azure-sdk-for-go/sdk/internal/log" -) - -// DefaultAzureCredentialOptions contains optional parameters for DefaultAzureCredential. -// These options may not apply to all credentials in the chain. -type DefaultAzureCredentialOptions struct { - // ClientOptions has additional options for credentials that use an Azure SDK HTTP pipeline. These options don't apply - // to credential types that authenticate via external tools such as the Azure CLI. - azcore.ClientOptions - - // AdditionallyAllowedTenants specifies additional tenants for which the credential may acquire tokens. Add - // the wildcard value "*" to allow the credential to acquire tokens for any tenant. This value can also be - // set as a semicolon delimited list of tenants in the environment variable AZURE_ADDITIONALLY_ALLOWED_TENANTS. - AdditionallyAllowedTenants []string - // DisableInstanceDiscovery should be set true only by applications authenticating in disconnected clouds, or - // private clouds such as Azure Stack. It determines whether the credential requests Microsoft Entra instance metadata - // from https://login.microsoft.com before authenticating. Setting this to true will skip this request, making - // the application responsible for ensuring the configured authority is valid and trustworthy. - DisableInstanceDiscovery bool - // TenantID sets the default tenant for authentication via the Azure CLI and workload identity. - TenantID string -} - -// DefaultAzureCredential is a default credential chain for applications that will deploy to Azure. -// It combines credentials suitable for deployment with credentials suitable for local development. -// It attempts to authenticate with each of these credential types, in the following order, stopping -// when one provides a token: -// -// - [EnvironmentCredential] -// - [WorkloadIdentityCredential], if environment variable configuration is set by the Azure workload -// identity webhook. Use [WorkloadIdentityCredential] directly when not using the webhook or needing -// more control over its configuration. -// - [ManagedIdentityCredential] -// - [AzureCLICredential] -// - [AzureDeveloperCLICredential] -// -// Consult the documentation for these credential types for more information on how they authenticate. -// Once a credential has successfully authenticated, DefaultAzureCredential will use that credential for -// every subsequent authentication. -type DefaultAzureCredential struct { - chain *ChainedTokenCredential -} - -// NewDefaultAzureCredential creates a DefaultAzureCredential. Pass nil for options to accept defaults. -func NewDefaultAzureCredential(options *DefaultAzureCredentialOptions) (*DefaultAzureCredential, error) { - var creds []azcore.TokenCredential - var errorMessages []string - - if options == nil { - options = &DefaultAzureCredentialOptions{} - } - additionalTenants := options.AdditionallyAllowedTenants - if len(additionalTenants) == 0 { - if tenants := os.Getenv(azureAdditionallyAllowedTenants); tenants != "" { - additionalTenants = strings.Split(tenants, ";") - } - } - - envCred, err := NewEnvironmentCredential(&EnvironmentCredentialOptions{ - ClientOptions: options.ClientOptions, - DisableInstanceDiscovery: options.DisableInstanceDiscovery, - additionallyAllowedTenants: additionalTenants, - }) - if err == nil { - creds = append(creds, envCred) - } else { - errorMessages = append(errorMessages, "EnvironmentCredential: "+err.Error()) - creds = append(creds, &defaultCredentialErrorReporter{credType: "EnvironmentCredential", err: err}) - } - - wic, err := NewWorkloadIdentityCredential(&WorkloadIdentityCredentialOptions{ - AdditionallyAllowedTenants: additionalTenants, - ClientOptions: options.ClientOptions, - DisableInstanceDiscovery: options.DisableInstanceDiscovery, - TenantID: options.TenantID, - }) - if err == nil { - creds = append(creds, wic) - } else { - errorMessages = append(errorMessages, credNameWorkloadIdentity+": "+err.Error()) - creds = append(creds, &defaultCredentialErrorReporter{credType: credNameWorkloadIdentity, err: err}) - } - - o := &ManagedIdentityCredentialOptions{ClientOptions: options.ClientOptions, dac: true} - if ID, ok := os.LookupEnv(azureClientID); ok { - o.ID = ClientID(ID) - } - miCred, err := NewManagedIdentityCredential(o) - if err == nil { - creds = append(creds, miCred) - } else { - errorMessages = append(errorMessages, credNameManagedIdentity+": "+err.Error()) - creds = append(creds, &defaultCredentialErrorReporter{credType: credNameManagedIdentity, err: err}) - } - - cliCred, err := NewAzureCLICredential(&AzureCLICredentialOptions{AdditionallyAllowedTenants: additionalTenants, TenantID: options.TenantID}) - if err == nil { - creds = append(creds, cliCred) - } else { - errorMessages = append(errorMessages, credNameAzureCLI+": "+err.Error()) - creds = append(creds, &defaultCredentialErrorReporter{credType: credNameAzureCLI, err: err}) - } - - azdCred, err := NewAzureDeveloperCLICredential(&AzureDeveloperCLICredentialOptions{ - AdditionallyAllowedTenants: additionalTenants, - TenantID: options.TenantID, - }) - if err == nil { - creds = append(creds, azdCred) - } else { - errorMessages = append(errorMessages, credNameAzureDeveloperCLI+": "+err.Error()) - creds = append(creds, &defaultCredentialErrorReporter{credType: credNameAzureDeveloperCLI, err: err}) - } - - if len(errorMessages) > 0 { - log.Writef(EventAuthentication, "NewDefaultAzureCredential failed to initialize some credentials:\n\t%s", strings.Join(errorMessages, "\n\t")) - } - - chain, err := NewChainedTokenCredential(creds, nil) - if err != nil { - return nil, err - } - chain.name = "DefaultAzureCredential" - return &DefaultAzureCredential{chain: chain}, nil -} - -// GetToken requests an access token from Microsoft Entra ID. This method is called automatically by Azure SDK clients. -func (c *DefaultAzureCredential) GetToken(ctx context.Context, opts policy.TokenRequestOptions) (azcore.AccessToken, error) { - return c.chain.GetToken(ctx, opts) -} - -var _ azcore.TokenCredential = (*DefaultAzureCredential)(nil) - -// defaultCredentialErrorReporter is a substitute for credentials that couldn't be constructed. -// Its GetToken method always returns a credentialUnavailableError having the same message as -// the error that prevented constructing the credential. This ensures the message is present -// in the error returned by ChainedTokenCredential.GetToken() -type defaultCredentialErrorReporter struct { - credType string - err error -} - -func (d *defaultCredentialErrorReporter) GetToken(ctx context.Context, opts policy.TokenRequestOptions) (azcore.AccessToken, error) { - if _, ok := d.err.(credentialUnavailable); ok { - return azcore.AccessToken{}, d.err - } - return azcore.AccessToken{}, newCredentialUnavailableError(d.credType, d.err.Error()) -} - -var _ azcore.TokenCredential = (*defaultCredentialErrorReporter)(nil) diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/developer_credential_util.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/developer_credential_util.go deleted file mode 100644 index be963d3a2af0..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/developer_credential_util.go +++ /dev/null @@ -1,38 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azidentity - -import ( - "errors" - "time" -) - -// cliTimeout is the default timeout for authentication attempts via CLI tools -const cliTimeout = 10 * time.Second - -// unavailableIfInChain returns err or, if the credential was invoked by DefaultAzureCredential, a -// credentialUnavailableError having the same message. This ensures DefaultAzureCredential will try -// the next credential in its chain (another developer credential). -func unavailableIfInChain(err error, inDefaultChain bool) error { - if err != nil && inDefaultChain { - var unavailableErr credentialUnavailable - if !errors.As(err, &unavailableErr) { - err = newCredentialUnavailableError(credNameAzureDeveloperCLI, err.Error()) - } - } - return err -} - -// validScope is for credentials authenticating via external tools. The authority validates scopes for all other credentials. -func validScope(scope string) bool { - for _, r := range scope { - if !(alphanumeric(r) || r == '.' || r == '-' || r == '_' || r == '/' || r == ':') { - return false - } - } - return true -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/device_code_credential.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/device_code_credential.go deleted file mode 100644 index cd30bedd5e9e..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/device_code_credential.go +++ /dev/null @@ -1,138 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azidentity - -import ( - "context" - "fmt" - - "github.com/Azure/azure-sdk-for-go/sdk/azcore" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime" -) - -const credNameDeviceCode = "DeviceCodeCredential" - -// DeviceCodeCredentialOptions contains optional parameters for DeviceCodeCredential. -type DeviceCodeCredentialOptions struct { - azcore.ClientOptions - - // AdditionallyAllowedTenants specifies additional tenants for which the credential may acquire - // tokens. Add the wildcard value "*" to allow the credential to acquire tokens for any tenant. - AdditionallyAllowedTenants []string - - // authenticationRecord returned by a call to a credential's Authenticate method. Set this option - // to enable the credential to use data from a previous authentication. - authenticationRecord authenticationRecord - - // ClientID is the ID of the application users will authenticate to. - // Defaults to the ID of an Azure development application. - ClientID string - - // disableAutomaticAuthentication prevents the credential from automatically prompting the user to authenticate. - // When this option is true, GetToken will return authenticationRequiredError when user interaction is necessary - // to acquire a token. - disableAutomaticAuthentication bool - - // DisableInstanceDiscovery should be set true only by applications authenticating in disconnected clouds, or - // private clouds such as Azure Stack. It determines whether the credential requests Microsoft Entra instance metadata - // from https://login.microsoft.com before authenticating. Setting this to true will skip this request, making - // the application responsible for ensuring the configured authority is valid and trustworthy. - DisableInstanceDiscovery bool - - // TenantID is the Microsoft Entra tenant the credential authenticates in. Defaults to the - // "organizations" tenant, which can authenticate work and school accounts. Required for single-tenant - // applications. - TenantID string - - // tokenCachePersistenceOptions enables persistent token caching when not nil. - tokenCachePersistenceOptions *tokenCachePersistenceOptions - - // UserPrompt controls how the credential presents authentication instructions. The credential calls - // this function with authentication details when it receives a device code. By default, the credential - // prints these details to stdout. - UserPrompt func(context.Context, DeviceCodeMessage) error -} - -func (o *DeviceCodeCredentialOptions) init() { - if o.TenantID == "" { - o.TenantID = organizationsTenantID - } - if o.ClientID == "" { - o.ClientID = developerSignOnClientID - } - if o.UserPrompt == nil { - o.UserPrompt = func(ctx context.Context, dc DeviceCodeMessage) error { - fmt.Println(dc.Message) - return nil - } - } -} - -// DeviceCodeMessage contains the information a user needs to complete authentication. -type DeviceCodeMessage struct { - // UserCode is the user code returned by the service. - UserCode string `json:"user_code"` - // VerificationURL is the URL at which the user must authenticate. - VerificationURL string `json:"verification_uri"` - // Message is user instruction from Microsoft Entra ID. - Message string `json:"message"` -} - -// DeviceCodeCredential acquires tokens for a user via the device code flow, which has the -// user browse to a Microsoft Entra URL, enter a code, and authenticate. It's useful -// for authenticating a user in an environment without a web browser, such as an SSH session. -// If a web browser is available, [InteractiveBrowserCredential] is more convenient because it -// automatically opens a browser to the login page. -type DeviceCodeCredential struct { - client *publicClient -} - -// NewDeviceCodeCredential creates a DeviceCodeCredential. Pass nil to accept default options. -func NewDeviceCodeCredential(options *DeviceCodeCredentialOptions) (*DeviceCodeCredential, error) { - cp := DeviceCodeCredentialOptions{} - if options != nil { - cp = *options - } - cp.init() - msalOpts := publicClientOptions{ - AdditionallyAllowedTenants: cp.AdditionallyAllowedTenants, - ClientOptions: cp.ClientOptions, - DeviceCodePrompt: cp.UserPrompt, - DisableAutomaticAuthentication: cp.disableAutomaticAuthentication, - DisableInstanceDiscovery: cp.DisableInstanceDiscovery, - Record: cp.authenticationRecord, - TokenCachePersistenceOptions: cp.tokenCachePersistenceOptions, - } - c, err := newPublicClient(cp.TenantID, cp.ClientID, credNameDeviceCode, msalOpts) - if err != nil { - return nil, err - } - c.name = credNameDeviceCode - return &DeviceCodeCredential{client: c}, nil -} - -// Authenticate a user via the device code flow. Subsequent calls to GetToken will automatically use the returned AuthenticationRecord. -func (c *DeviceCodeCredential) authenticate(ctx context.Context, opts *policy.TokenRequestOptions) (authenticationRecord, error) { - var err error - ctx, endSpan := runtime.StartSpan(ctx, credNameDeviceCode+"."+traceOpAuthenticate, c.client.azClient.Tracer(), nil) - defer func() { endSpan(err) }() - tk, err := c.client.Authenticate(ctx, opts) - return tk, err -} - -// GetToken requests an access token from Microsoft Entra ID. It will begin the device code flow and poll until the user completes authentication. -// This method is called automatically by Azure SDK clients. -func (c *DeviceCodeCredential) GetToken(ctx context.Context, opts policy.TokenRequestOptions) (azcore.AccessToken, error) { - var err error - ctx, endSpan := runtime.StartSpan(ctx, credNameDeviceCode+"."+traceOpGetToken, c.client.azClient.Tracer(), nil) - defer func() { endSpan(err) }() - tk, err := c.client.GetToken(ctx, opts) - return tk, err -} - -var _ azcore.TokenCredential = (*DeviceCodeCredential)(nil) diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/environment_credential.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/environment_credential.go deleted file mode 100644 index b30f5474f55b..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/environment_credential.go +++ /dev/null @@ -1,167 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azidentity - -import ( - "context" - "errors" - "fmt" - "os" - "strings" - - "github.com/Azure/azure-sdk-for-go/sdk/azcore" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" - "github.com/Azure/azure-sdk-for-go/sdk/internal/log" -) - -const envVarSendCertChain = "AZURE_CLIENT_SEND_CERTIFICATE_CHAIN" - -// EnvironmentCredentialOptions contains optional parameters for EnvironmentCredential -type EnvironmentCredentialOptions struct { - azcore.ClientOptions - - // DisableInstanceDiscovery should be set true only by applications authenticating in disconnected clouds, or - // private clouds such as Azure Stack. It determines whether the credential requests Microsoft Entra instance metadata - // from https://login.microsoft.com before authenticating. Setting this to true will skip this request, making - // the application responsible for ensuring the configured authority is valid and trustworthy. - DisableInstanceDiscovery bool - // additionallyAllowedTenants is used only by NewDefaultAzureCredential() to enable that constructor's explicit - // option to override the value of AZURE_ADDITIONALLY_ALLOWED_TENANTS. Applications using EnvironmentCredential - // directly should set that variable instead. This field should remain unexported to preserve this credential's - // unambiguous "all configuration from environment variables" design. - additionallyAllowedTenants []string -} - -// EnvironmentCredential authenticates a service principal with a secret or certificate, or a user with a password, depending -// on environment variable configuration. It reads configuration from these variables, in the following order: -// -// # Service principal with client secret -// -// AZURE_TENANT_ID: ID of the service principal's tenant. Also called its "directory" ID. -// -// AZURE_CLIENT_ID: the service principal's client ID -// -// AZURE_CLIENT_SECRET: one of the service principal's client secrets -// -// # Service principal with certificate -// -// AZURE_TENANT_ID: ID of the service principal's tenant. Also called its "directory" ID. -// -// AZURE_CLIENT_ID: the service principal's client ID -// -// AZURE_CLIENT_CERTIFICATE_PATH: path to a PEM or PKCS12 certificate file including the private key. -// -// AZURE_CLIENT_CERTIFICATE_PASSWORD: (optional) password for the certificate file. -// -// Note that this credential uses [ParseCertificates] to load the certificate and key from the file. If this -// function isn't able to parse your certificate, use [ClientCertificateCredential] instead. -// -// # User with username and password -// -// AZURE_TENANT_ID: (optional) tenant to authenticate in. Defaults to "organizations". -// -// AZURE_CLIENT_ID: client ID of the application the user will authenticate to -// -// AZURE_USERNAME: a username (usually an email address) -// -// AZURE_PASSWORD: the user's password -// -// # Configuration for multitenant applications -// -// To enable multitenant authentication, set AZURE_ADDITIONALLY_ALLOWED_TENANTS with a semicolon delimited list of tenants -// the credential may request tokens from in addition to the tenant specified by AZURE_TENANT_ID. Set -// AZURE_ADDITIONALLY_ALLOWED_TENANTS to "*" to enable the credential to request a token from any tenant. -type EnvironmentCredential struct { - cred azcore.TokenCredential -} - -// NewEnvironmentCredential creates an EnvironmentCredential. Pass nil to accept default options. -func NewEnvironmentCredential(options *EnvironmentCredentialOptions) (*EnvironmentCredential, error) { - if options == nil { - options = &EnvironmentCredentialOptions{} - } - tenantID := os.Getenv(azureTenantID) - if tenantID == "" { - return nil, errors.New("missing environment variable AZURE_TENANT_ID") - } - clientID := os.Getenv(azureClientID) - if clientID == "" { - return nil, errors.New("missing environment variable " + azureClientID) - } - // tenants set by NewDefaultAzureCredential() override the value of AZURE_ADDITIONALLY_ALLOWED_TENANTS - additionalTenants := options.additionallyAllowedTenants - if len(additionalTenants) == 0 { - if tenants := os.Getenv(azureAdditionallyAllowedTenants); tenants != "" { - additionalTenants = strings.Split(tenants, ";") - } - } - if clientSecret := os.Getenv(azureClientSecret); clientSecret != "" { - log.Write(EventAuthentication, "EnvironmentCredential will authenticate with ClientSecretCredential") - o := &ClientSecretCredentialOptions{ - AdditionallyAllowedTenants: additionalTenants, - ClientOptions: options.ClientOptions, - DisableInstanceDiscovery: options.DisableInstanceDiscovery, - } - cred, err := NewClientSecretCredential(tenantID, clientID, clientSecret, o) - if err != nil { - return nil, err - } - return &EnvironmentCredential{cred: cred}, nil - } - if certPath := os.Getenv(azureClientCertificatePath); certPath != "" { - log.Write(EventAuthentication, "EnvironmentCredential will authenticate with ClientCertificateCredential") - certData, err := os.ReadFile(certPath) - if err != nil { - return nil, fmt.Errorf(`failed to read certificate file "%s": %v`, certPath, err) - } - var password []byte - if v := os.Getenv(azureClientCertificatePassword); v != "" { - password = []byte(v) - } - certs, key, err := ParseCertificates(certData, password) - if err != nil { - return nil, fmt.Errorf("failed to parse %q due to error %q. This may be due to a limitation of this module's certificate loader. Consider calling NewClientCertificateCredential instead", certPath, err.Error()) - } - o := &ClientCertificateCredentialOptions{ - AdditionallyAllowedTenants: additionalTenants, - ClientOptions: options.ClientOptions, - DisableInstanceDiscovery: options.DisableInstanceDiscovery, - } - if v, ok := os.LookupEnv(envVarSendCertChain); ok { - o.SendCertificateChain = v == "1" || strings.ToLower(v) == "true" - } - cred, err := NewClientCertificateCredential(tenantID, clientID, certs, key, o) - if err != nil { - return nil, err - } - return &EnvironmentCredential{cred: cred}, nil - } - if username := os.Getenv(azureUsername); username != "" { - if password := os.Getenv(azurePassword); password != "" { - log.Write(EventAuthentication, "EnvironmentCredential will authenticate with UsernamePasswordCredential") - o := &UsernamePasswordCredentialOptions{ - AdditionallyAllowedTenants: additionalTenants, - ClientOptions: options.ClientOptions, - DisableInstanceDiscovery: options.DisableInstanceDiscovery, - } - cred, err := NewUsernamePasswordCredential(tenantID, clientID, username, password, o) - if err != nil { - return nil, err - } - return &EnvironmentCredential{cred: cred}, nil - } - return nil, errors.New("no value for AZURE_PASSWORD") - } - return nil, errors.New("incomplete environment variable configuration. Only AZURE_TENANT_ID and AZURE_CLIENT_ID are set") -} - -// GetToken requests an access token from Microsoft Entra ID. This method is called automatically by Azure SDK clients. -func (c *EnvironmentCredential) GetToken(ctx context.Context, opts policy.TokenRequestOptions) (azcore.AccessToken, error) { - return c.cred.GetToken(ctx, opts) -} - -var _ azcore.TokenCredential = (*EnvironmentCredential)(nil) diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/errors.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/errors.go deleted file mode 100644 index 698650bbb629..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/errors.go +++ /dev/null @@ -1,168 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azidentity - -import ( - "bytes" - "encoding/json" - "errors" - "fmt" - "net/http" - - "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime" - "github.com/Azure/azure-sdk-for-go/sdk/internal/errorinfo" - msal "github.com/AzureAD/microsoft-authentication-library-for-go/apps/errors" -) - -// getResponseFromError retrieves the response carried by -// an AuthenticationFailedError or MSAL CallErr, if any -func getResponseFromError(err error) *http.Response { - var a *AuthenticationFailedError - var c msal.CallErr - var res *http.Response - if errors.As(err, &c) { - res = c.Resp - } else if errors.As(err, &a) { - res = a.RawResponse - } - return res -} - -// AuthenticationFailedError indicates an authentication request has failed. -type AuthenticationFailedError struct { - // RawResponse is the HTTP response motivating the error, if available. - RawResponse *http.Response - - credType string - message string - err error -} - -func newAuthenticationFailedError(credType string, message string, resp *http.Response, err error) error { - return &AuthenticationFailedError{credType: credType, message: message, RawResponse: resp, err: err} -} - -// Error implements the error interface. Note that the message contents are not contractual and can change over time. -func (e *AuthenticationFailedError) Error() string { - if e.RawResponse == nil { - return e.credType + ": " + e.message - } - msg := &bytes.Buffer{} - fmt.Fprintf(msg, "%s authentication failed. %s\n", e.credType, e.message) - if e.RawResponse.Request != nil { - fmt.Fprintf(msg, "%s %s://%s%s\n", e.RawResponse.Request.Method, e.RawResponse.Request.URL.Scheme, e.RawResponse.Request.URL.Host, e.RawResponse.Request.URL.Path) - } else { - // this happens when the response is created from a custom HTTP transporter, - // which doesn't guarantee to bind the original request to the response - fmt.Fprintln(msg, "Request information not available") - } - fmt.Fprintln(msg, "--------------------------------------------------------------------------------") - fmt.Fprintf(msg, "RESPONSE %s\n", e.RawResponse.Status) - fmt.Fprintln(msg, "--------------------------------------------------------------------------------") - body, err := runtime.Payload(e.RawResponse) - switch { - case err != nil: - fmt.Fprintf(msg, "Error reading response body: %v", err) - case len(body) > 0: - if err := json.Indent(msg, body, "", " "); err != nil { - // failed to pretty-print so just dump it verbatim - fmt.Fprint(msg, string(body)) - } - default: - fmt.Fprint(msg, "Response contained no body") - } - fmt.Fprintln(msg, "\n--------------------------------------------------------------------------------") - var anchor string - switch e.credType { - case credNameAzureCLI: - anchor = "azure-cli" - case credNameAzureDeveloperCLI: - anchor = "azd" - case credNameCert: - anchor = "client-cert" - case credNameSecret: - anchor = "client-secret" - case credNameManagedIdentity: - anchor = "managed-id" - case credNameUserPassword: - anchor = "username-password" - case credNameWorkloadIdentity: - anchor = "workload" - } - if anchor != "" { - fmt.Fprintf(msg, "To troubleshoot, visit https://aka.ms/azsdk/go/identity/troubleshoot#%s", anchor) - } - return msg.String() -} - -// NonRetriable indicates the request which provoked this error shouldn't be retried. -func (*AuthenticationFailedError) NonRetriable() { - // marker method -} - -var _ errorinfo.NonRetriable = (*AuthenticationFailedError)(nil) - -// authenticationRequiredError indicates a credential's Authenticate method must be called to acquire a token -// because the credential requires user interaction and is configured not to request it automatically. -type authenticationRequiredError struct { - credentialUnavailableError - - // TokenRequestOptions for the required token. Pass this to the credential's Authenticate method. - TokenRequestOptions policy.TokenRequestOptions -} - -func newauthenticationRequiredError(credType string, tro policy.TokenRequestOptions) error { - return &authenticationRequiredError{ - credentialUnavailableError: credentialUnavailableError{ - credType + " can't acquire a token without user interaction. Call Authenticate to authenticate a user interactively", - }, - TokenRequestOptions: tro, - } -} - -var ( - _ credentialUnavailable = (*authenticationRequiredError)(nil) - _ errorinfo.NonRetriable = (*authenticationRequiredError)(nil) -) - -type credentialUnavailable interface { - error - credentialUnavailable() -} - -type credentialUnavailableError struct { - message string -} - -// newCredentialUnavailableError is an internal helper that ensures consistent error message formatting -func newCredentialUnavailableError(credType, message string) error { - msg := fmt.Sprintf("%s: %s", credType, message) - return &credentialUnavailableError{msg} -} - -// NewCredentialUnavailableError constructs an error indicating a credential can't attempt authentication -// because it lacks required data or state. When [ChainedTokenCredential] receives this error it will try -// its next credential, if any. -func NewCredentialUnavailableError(message string) error { - return &credentialUnavailableError{message} -} - -// Error implements the error interface. Note that the message contents are not contractual and can change over time. -func (e *credentialUnavailableError) Error() string { - return e.message -} - -// NonRetriable is a marker method indicating this error should not be retried. It has no implementation. -func (*credentialUnavailableError) NonRetriable() {} - -func (*credentialUnavailableError) credentialUnavailable() {} - -var ( - _ credentialUnavailable = (*credentialUnavailableError)(nil) - _ errorinfo.NonRetriable = (*credentialUnavailableError)(nil) -) diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/go.work b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/go.work deleted file mode 100644 index 04ea962b422d..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/go.work +++ /dev/null @@ -1,6 +0,0 @@ -go 1.18 - -use ( - . - ./cache -) diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/go.work.sum b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/go.work.sum deleted file mode 100644 index c592f283b6bd..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/go.work.sum +++ /dev/null @@ -1,60 +0,0 @@ -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.0-beta.1 h1:ODs3brnqQM99Tq1PffODpAViYv3Bf8zOg464MU7p5ew= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.0-beta.1/go.mod h1:3Ug6Qzto9anB6mGlEdgYMDF5zHQ+wwhEaYR4s17PHMw= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.0 h1:fb8kj/Dh4CSwgsOzHeZY4Xh68cFVbzXx+ONXGMY//4w= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.0/go.mod h1:uReU2sSxZExRPBAg3qKzmAucSi51+SP1OhohieR821Q= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0/go.mod h1:okt5dMMTOFjX/aovMlrjvvXoPMBVSPzk9185BT0+eZM= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.2/go.mod h1:yInRyqWXAuaPrgI7p70+lDDgh3mlBohis29jGMISnmc= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI= -github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/keybase/dbus v0.0.0-20220506165403-5aa21ea2c23a/go.mod h1:YPNKjjE7Ubp9dTbnWvsP3HT+hYnY6TfXzubYTBeUxc8= -github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/montanaflynn/stats v0.7.0/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow= -github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= -github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= -golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= -golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= -golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= -golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= -golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= -golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= -golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= -golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8= -golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= -golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= -golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o= -golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= -golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= -golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= -golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= -golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= -golang.org/x/term v0.19.0/go.mod h1:2CuTdWZ7KHSQwUzKva0cbMg6q2DMI3Mmxp+gKJbskEk= -golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= -golang.org/x/term v0.21.0/go.mod h1:ooXLefLobQVslOqselCNF4SxFAaoS6KujMbsGzSDmX0= -golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/interactive_browser_credential.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/interactive_browser_credential.go deleted file mode 100644 index 056785a8a33a..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/interactive_browser_credential.go +++ /dev/null @@ -1,118 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azidentity - -import ( - "context" - - "github.com/Azure/azure-sdk-for-go/sdk/azcore" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime" -) - -const credNameBrowser = "InteractiveBrowserCredential" - -// InteractiveBrowserCredentialOptions contains optional parameters for InteractiveBrowserCredential. -type InteractiveBrowserCredentialOptions struct { - azcore.ClientOptions - - // AdditionallyAllowedTenants specifies additional tenants for which the credential may acquire - // tokens. Add the wildcard value "*" to allow the credential to acquire tokens for any tenant. - AdditionallyAllowedTenants []string - - // authenticationRecord returned by a call to a credential's Authenticate method. Set this option - // to enable the credential to use data from a previous authentication. - authenticationRecord authenticationRecord - - // ClientID is the ID of the application users will authenticate to. - // Defaults to the ID of an Azure development application. - ClientID string - - // disableAutomaticAuthentication prevents the credential from automatically prompting the user to authenticate. - // When this option is true, GetToken will return authenticationRequiredError when user interaction is necessary - // to acquire a token. - disableAutomaticAuthentication bool - - // DisableInstanceDiscovery should be set true only by applications authenticating in disconnected clouds, or - // private clouds such as Azure Stack. It determines whether the credential requests Microsoft Entra instance metadata - // from https://login.microsoft.com before authenticating. Setting this to true will skip this request, making - // the application responsible for ensuring the configured authority is valid and trustworthy. - DisableInstanceDiscovery bool - - // LoginHint pre-populates the account prompt with a username. Users may choose to authenticate a different account. - LoginHint string - - // RedirectURL is the URL Microsoft Entra ID will redirect to with the access token. This is required - // only when setting ClientID, and must match a redirect URI in the application's registration. - // Applications which have registered "http://localhost" as a redirect URI need not set this option. - RedirectURL string - - // TenantID is the Microsoft Entra tenant the credential authenticates in. Defaults to the - // "organizations" tenant, which can authenticate work and school accounts. - TenantID string - - // tokenCachePersistenceOptions enables persistent token caching when not nil. - tokenCachePersistenceOptions *tokenCachePersistenceOptions -} - -func (o *InteractiveBrowserCredentialOptions) init() { - if o.TenantID == "" { - o.TenantID = organizationsTenantID - } - if o.ClientID == "" { - o.ClientID = developerSignOnClientID - } -} - -// InteractiveBrowserCredential opens a browser to interactively authenticate a user. -type InteractiveBrowserCredential struct { - client *publicClient -} - -// NewInteractiveBrowserCredential constructs a new InteractiveBrowserCredential. Pass nil to accept default options. -func NewInteractiveBrowserCredential(options *InteractiveBrowserCredentialOptions) (*InteractiveBrowserCredential, error) { - cp := InteractiveBrowserCredentialOptions{} - if options != nil { - cp = *options - } - cp.init() - msalOpts := publicClientOptions{ - AdditionallyAllowedTenants: cp.AdditionallyAllowedTenants, - ClientOptions: cp.ClientOptions, - DisableAutomaticAuthentication: cp.disableAutomaticAuthentication, - DisableInstanceDiscovery: cp.DisableInstanceDiscovery, - LoginHint: cp.LoginHint, - Record: cp.authenticationRecord, - RedirectURL: cp.RedirectURL, - TokenCachePersistenceOptions: cp.tokenCachePersistenceOptions, - } - c, err := newPublicClient(cp.TenantID, cp.ClientID, credNameBrowser, msalOpts) - if err != nil { - return nil, err - } - return &InteractiveBrowserCredential{client: c}, nil -} - -// Authenticate a user via the default browser. Subsequent calls to GetToken will automatically use the returned AuthenticationRecord. -func (c *InteractiveBrowserCredential) authenticate(ctx context.Context, opts *policy.TokenRequestOptions) (authenticationRecord, error) { - var err error - ctx, endSpan := runtime.StartSpan(ctx, credNameBrowser+"."+traceOpAuthenticate, c.client.azClient.Tracer(), nil) - defer func() { endSpan(err) }() - tk, err := c.client.Authenticate(ctx, opts) - return tk, err -} - -// GetToken requests an access token from Microsoft Entra ID. This method is called automatically by Azure SDK clients. -func (c *InteractiveBrowserCredential) GetToken(ctx context.Context, opts policy.TokenRequestOptions) (azcore.AccessToken, error) { - var err error - ctx, endSpan := runtime.StartSpan(ctx, credNameBrowser+"."+traceOpGetToken, c.client.azClient.Tracer(), nil) - defer func() { endSpan(err) }() - tk, err := c.client.GetToken(ctx, opts) - return tk, err -} - -var _ azcore.TokenCredential = (*InteractiveBrowserCredential)(nil) diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/internal/exported.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/internal/exported.go deleted file mode 100644 index b1b4d5c8bd35..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/internal/exported.go +++ /dev/null @@ -1,18 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package internal - -// TokenCachePersistenceOptions contains options for persistent token caching -type TokenCachePersistenceOptions struct { - // AllowUnencryptedStorage controls whether the cache should fall back to storing its data in plain text - // when encryption isn't possible. Setting this true doesn't disable encryption. The cache always attempts - // encryption before falling back to plaintext storage. - AllowUnencryptedStorage bool - - // Name identifies the cache. Set this to isolate data from other applications. - Name string -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/internal/internal.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/internal/internal.go deleted file mode 100644 index c1498b464471..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/internal/internal.go +++ /dev/null @@ -1,31 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package internal - -import ( - "errors" - - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/cache" -) - -var errMissingImport = errors.New("import github.com/Azure/azure-sdk-for-go/sdk/azidentity/cache to enable persistent caching") - -// NewCache constructs a persistent token cache when "o" isn't nil. Applications that intend to -// use a persistent cache must first import the cache module, which will replace this function -// with a platform-specific implementation. -var NewCache = func(o *TokenCachePersistenceOptions, enableCAE bool) (cache.ExportReplace, error) { - if o == nil { - return nil, nil - } - return nil, errMissingImport -} - -// CacheFilePath returns the path to the cache file for the given name. -// Defining it in this package makes it available to azidentity tests. -var CacheFilePath = func(name string) (string, error) { - return "", errMissingImport -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/logging.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/logging.go deleted file mode 100644 index 1aa1e0fc7c8e..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/logging.go +++ /dev/null @@ -1,14 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azidentity - -import "github.com/Azure/azure-sdk-for-go/sdk/internal/log" - -// EventAuthentication entries contain information about authentication. -// This includes information like the names of environment variables -// used when obtaining credentials and the type of credential used. -const EventAuthentication log.Event = "Authentication" diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/managed-identity-matrix.json b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/managed-identity-matrix.json deleted file mode 100644 index 1c3791777a1f..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/managed-identity-matrix.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "include": [ - { - "Agent": { - "msi_image": { - "ArmTemplateParameters": "@{deployResources = $true}", - "OSVmImage": "env:LINUXNEXTVMIMAGE", - "Pool": "env:LINUXPOOL" - } - }, - "GoVersion": [ - "1.22.1" - ], - "IDENTITY_IMDS_AVAILABLE": "1" - } - ] -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/managed_identity_client.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/managed_identity_client.go deleted file mode 100644 index 6122cc70050f..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/managed_identity_client.go +++ /dev/null @@ -1,501 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azidentity - -import ( - "context" - "encoding/json" - "errors" - "fmt" - "net/http" - "net/url" - "os" - "path/filepath" - "runtime" - "strconv" - "strings" - "time" - - "github.com/Azure/azure-sdk-for-go/sdk/azcore" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" - azruntime "github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/streaming" - "github.com/Azure/azure-sdk-for-go/sdk/internal/log" - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/confidential" -) - -const ( - arcIMDSEndpoint = "IMDS_ENDPOINT" - defaultIdentityClientID = "DEFAULT_IDENTITY_CLIENT_ID" - identityEndpoint = "IDENTITY_ENDPOINT" - identityHeader = "IDENTITY_HEADER" - identityServerThumbprint = "IDENTITY_SERVER_THUMBPRINT" - headerMetadata = "Metadata" - imdsEndpoint = "http://169.254.169.254/metadata/identity/oauth2/token" - miResID = "mi_res_id" - msiEndpoint = "MSI_ENDPOINT" - msiResID = "msi_res_id" - msiSecret = "MSI_SECRET" - imdsAPIVersion = "2018-02-01" - azureArcAPIVersion = "2019-08-15" - qpClientID = "client_id" - serviceFabricAPIVersion = "2019-07-01-preview" -) - -var imdsProbeTimeout = time.Second - -type msiType int - -const ( - msiTypeAppService msiType = iota - msiTypeAzureArc - msiTypeAzureML - msiTypeCloudShell - msiTypeIMDS - msiTypeServiceFabric -) - -type managedIdentityClient struct { - azClient *azcore.Client - endpoint string - id ManagedIDKind - msiType msiType - probeIMDS bool -} - -// arcKeyDirectory returns the directory expected to contain Azure Arc keys -var arcKeyDirectory = func() (string, error) { - switch runtime.GOOS { - case "linux": - return "/var/opt/azcmagent/tokens", nil - case "windows": - pd := os.Getenv("ProgramData") - if pd == "" { - return "", errors.New("environment variable ProgramData has no value") - } - return filepath.Join(pd, "AzureConnectedMachineAgent", "Tokens"), nil - default: - return "", fmt.Errorf("unsupported OS %q", runtime.GOOS) - } -} - -type wrappedNumber json.Number - -func (n *wrappedNumber) UnmarshalJSON(b []byte) error { - c := string(b) - if c == "\"\"" { - return nil - } - return json.Unmarshal(b, (*json.Number)(n)) -} - -// setIMDSRetryOptionDefaults sets zero-valued fields to default values appropriate for IMDS -func setIMDSRetryOptionDefaults(o *policy.RetryOptions) { - if o.MaxRetries == 0 { - o.MaxRetries = 5 - } - if o.MaxRetryDelay == 0 { - o.MaxRetryDelay = 1 * time.Minute - } - if o.RetryDelay == 0 { - o.RetryDelay = 2 * time.Second - } - if o.StatusCodes == nil { - o.StatusCodes = []int{ - // IMDS docs recommend retrying 404, 410, 429 and 5xx - // https://learn.microsoft.com/entra/identity/managed-identities-azure-resources/how-to-use-vm-token#error-handling - http.StatusNotFound, // 404 - http.StatusGone, // 410 - http.StatusTooManyRequests, // 429 - http.StatusInternalServerError, // 500 - http.StatusNotImplemented, // 501 - http.StatusBadGateway, // 502 - http.StatusServiceUnavailable, // 503 - http.StatusGatewayTimeout, // 504 - http.StatusHTTPVersionNotSupported, // 505 - http.StatusVariantAlsoNegotiates, // 506 - http.StatusInsufficientStorage, // 507 - http.StatusLoopDetected, // 508 - http.StatusNotExtended, // 510 - http.StatusNetworkAuthenticationRequired, // 511 - } - } - if o.TryTimeout == 0 { - o.TryTimeout = 1 * time.Minute - } -} - -// newManagedIdentityClient creates a new instance of the ManagedIdentityClient with the ManagedIdentityCredentialOptions -// that are passed into it along with a default pipeline. -// options: ManagedIdentityCredentialOptions configure policies for the pipeline and the authority host that -// will be used to retrieve tokens and authenticate -func newManagedIdentityClient(options *ManagedIdentityCredentialOptions) (*managedIdentityClient, error) { - if options == nil { - options = &ManagedIdentityCredentialOptions{} - } - cp := options.ClientOptions - c := managedIdentityClient{id: options.ID, endpoint: imdsEndpoint, msiType: msiTypeIMDS} - env := "IMDS" - if endpoint, ok := os.LookupEnv(identityEndpoint); ok { - if _, ok := os.LookupEnv(identityHeader); ok { - if _, ok := os.LookupEnv(identityServerThumbprint); ok { - env = "Service Fabric" - c.endpoint = endpoint - c.msiType = msiTypeServiceFabric - } else { - env = "App Service" - c.endpoint = endpoint - c.msiType = msiTypeAppService - } - } else if _, ok := os.LookupEnv(arcIMDSEndpoint); ok { - env = "Azure Arc" - c.endpoint = endpoint - c.msiType = msiTypeAzureArc - } - } else if endpoint, ok := os.LookupEnv(msiEndpoint); ok { - c.endpoint = endpoint - if _, ok := os.LookupEnv(msiSecret); ok { - env = "Azure ML" - c.msiType = msiTypeAzureML - } else { - env = "Cloud Shell" - c.msiType = msiTypeCloudShell - } - } else { - c.probeIMDS = options.dac - setIMDSRetryOptionDefaults(&cp.Retry) - } - - client, err := azcore.NewClient(module, version, azruntime.PipelineOptions{ - Tracing: azruntime.TracingOptions{ - Namespace: traceNamespace, - }, - }, &cp) - if err != nil { - return nil, err - } - c.azClient = client - - if log.Should(EventAuthentication) { - log.Writef(EventAuthentication, "Managed Identity Credential will use %s managed identity", env) - } - - return &c, nil -} - -// provideToken acquires a token for MSAL's confidential.Client, which caches the token -func (c *managedIdentityClient) provideToken(ctx context.Context, params confidential.TokenProviderParameters) (confidential.TokenProviderResult, error) { - result := confidential.TokenProviderResult{} - tk, err := c.authenticate(ctx, c.id, params.Scopes) - if err == nil { - result.AccessToken = tk.Token - result.ExpiresInSeconds = int(time.Until(tk.ExpiresOn).Seconds()) - } - return result, err -} - -// authenticate acquires an access token -func (c *managedIdentityClient) authenticate(ctx context.Context, id ManagedIDKind, scopes []string) (azcore.AccessToken, error) { - // no need to synchronize around this value because it's true only when DefaultAzureCredential constructed the client, - // and in that case ChainedTokenCredential.GetToken synchronizes goroutines that would execute this block - if c.probeIMDS { - cx, cancel := context.WithTimeout(ctx, imdsProbeTimeout) - defer cancel() - cx = policy.WithRetryOptions(cx, policy.RetryOptions{MaxRetries: -1}) - req, err := azruntime.NewRequest(cx, http.MethodGet, c.endpoint) - if err == nil { - _, err = c.azClient.Pipeline().Do(req) - } - if err != nil { - msg := err.Error() - if errors.Is(err, context.Canceled) || errors.Is(err, context.DeadlineExceeded) { - msg = "managed identity timed out. See https://aka.ms/azsdk/go/identity/troubleshoot#dac for more information" - } - return azcore.AccessToken{}, newCredentialUnavailableError(credNameManagedIdentity, msg) - } - // send normal token requests from now on because something responded - c.probeIMDS = false - } - - msg, err := c.createAuthRequest(ctx, id, scopes) - if err != nil { - return azcore.AccessToken{}, err - } - - resp, err := c.azClient.Pipeline().Do(msg) - if err != nil { - return azcore.AccessToken{}, newAuthenticationFailedError(credNameManagedIdentity, err.Error(), nil, err) - } - - if azruntime.HasStatusCode(resp, http.StatusOK, http.StatusCreated) { - return c.createAccessToken(resp) - } - - if c.msiType == msiTypeIMDS { - switch resp.StatusCode { - case http.StatusBadRequest: - if id != nil { - return azcore.AccessToken{}, newAuthenticationFailedError(credNameManagedIdentity, "the requested identity isn't assigned to this resource", resp, nil) - } - msg := "failed to authenticate a system assigned identity" - if body, err := azruntime.Payload(resp); err == nil && len(body) > 0 { - msg += fmt.Sprintf(". The endpoint responded with %s", body) - } - return azcore.AccessToken{}, newCredentialUnavailableError(credNameManagedIdentity, msg) - case http.StatusForbidden: - // Docker Desktop runs a proxy that responds 403 to IMDS token requests. If we get that response, - // we return credentialUnavailableError so credential chains continue to their next credential - body, err := azruntime.Payload(resp) - if err == nil && strings.Contains(string(body), "unreachable") { - return azcore.AccessToken{}, newCredentialUnavailableError(credNameManagedIdentity, fmt.Sprintf("unexpected response %q", string(body))) - } - } - } - - return azcore.AccessToken{}, newAuthenticationFailedError(credNameManagedIdentity, "authentication failed", resp, nil) -} - -func (c *managedIdentityClient) createAccessToken(res *http.Response) (azcore.AccessToken, error) { - value := struct { - // these are the only fields that we use - Token string `json:"access_token,omitempty"` - RefreshToken string `json:"refresh_token,omitempty"` - ExpiresIn wrappedNumber `json:"expires_in,omitempty"` // this field should always return the number of seconds for which a token is valid - ExpiresOn interface{} `json:"expires_on,omitempty"` // the value returned in this field varies between a number and a date string - }{} - if err := azruntime.UnmarshalAsJSON(res, &value); err != nil { - return azcore.AccessToken{}, fmt.Errorf("internal AccessToken: %v", err) - } - if value.ExpiresIn != "" { - expiresIn, err := json.Number(value.ExpiresIn).Int64() - if err != nil { - return azcore.AccessToken{}, err - } - return azcore.AccessToken{Token: value.Token, ExpiresOn: time.Now().Add(time.Second * time.Duration(expiresIn)).UTC()}, nil - } - switch v := value.ExpiresOn.(type) { - case float64: - return azcore.AccessToken{Token: value.Token, ExpiresOn: time.Unix(int64(v), 0).UTC()}, nil - case string: - if expiresOn, err := strconv.Atoi(v); err == nil { - return azcore.AccessToken{Token: value.Token, ExpiresOn: time.Unix(int64(expiresOn), 0).UTC()}, nil - } - return azcore.AccessToken{}, newAuthenticationFailedError(credNameManagedIdentity, "unexpected expires_on value: "+v, res, nil) - default: - msg := fmt.Sprintf("unsupported type received in expires_on: %T, %v", v, v) - return azcore.AccessToken{}, newAuthenticationFailedError(credNameManagedIdentity, msg, res, nil) - } -} - -func (c *managedIdentityClient) createAuthRequest(ctx context.Context, id ManagedIDKind, scopes []string) (*policy.Request, error) { - switch c.msiType { - case msiTypeIMDS: - return c.createIMDSAuthRequest(ctx, id, scopes) - case msiTypeAppService: - return c.createAppServiceAuthRequest(ctx, id, scopes) - case msiTypeAzureArc: - // need to perform preliminary request to retreive the secret key challenge provided by the HIMDS service - key, err := c.getAzureArcSecretKey(ctx, scopes) - if err != nil { - msg := fmt.Sprintf("failed to retreive secret key from the identity endpoint: %v", err) - return nil, newAuthenticationFailedError(credNameManagedIdentity, msg, nil, err) - } - return c.createAzureArcAuthRequest(ctx, id, scopes, key) - case msiTypeAzureML: - return c.createAzureMLAuthRequest(ctx, id, scopes) - case msiTypeServiceFabric: - return c.createServiceFabricAuthRequest(ctx, id, scopes) - case msiTypeCloudShell: - return c.createCloudShellAuthRequest(ctx, id, scopes) - default: - return nil, newCredentialUnavailableError(credNameManagedIdentity, "managed identity isn't supported in this environment") - } -} - -func (c *managedIdentityClient) createIMDSAuthRequest(ctx context.Context, id ManagedIDKind, scopes []string) (*policy.Request, error) { - request, err := azruntime.NewRequest(ctx, http.MethodGet, c.endpoint) - if err != nil { - return nil, err - } - request.Raw().Header.Set(headerMetadata, "true") - q := request.Raw().URL.Query() - q.Add("api-version", imdsAPIVersion) - q.Add("resource", strings.Join(scopes, " ")) - if id != nil { - if id.idKind() == miResourceID { - q.Add(msiResID, id.String()) - } else { - q.Add(qpClientID, id.String()) - } - } - request.Raw().URL.RawQuery = q.Encode() - return request, nil -} - -func (c *managedIdentityClient) createAppServiceAuthRequest(ctx context.Context, id ManagedIDKind, scopes []string) (*policy.Request, error) { - request, err := azruntime.NewRequest(ctx, http.MethodGet, c.endpoint) - if err != nil { - return nil, err - } - request.Raw().Header.Set("X-IDENTITY-HEADER", os.Getenv(identityHeader)) - q := request.Raw().URL.Query() - q.Add("api-version", "2019-08-01") - q.Add("resource", scopes[0]) - if id != nil { - if id.idKind() == miResourceID { - q.Add(miResID, id.String()) - } else { - q.Add(qpClientID, id.String()) - } - } - request.Raw().URL.RawQuery = q.Encode() - return request, nil -} - -func (c *managedIdentityClient) createAzureMLAuthRequest(ctx context.Context, id ManagedIDKind, scopes []string) (*policy.Request, error) { - request, err := azruntime.NewRequest(ctx, http.MethodGet, c.endpoint) - if err != nil { - return nil, err - } - request.Raw().Header.Set("secret", os.Getenv(msiSecret)) - q := request.Raw().URL.Query() - q.Add("api-version", "2017-09-01") - q.Add("resource", strings.Join(scopes, " ")) - q.Add("clientid", os.Getenv(defaultIdentityClientID)) - if id != nil { - if id.idKind() == miResourceID { - log.Write(EventAuthentication, "WARNING: Azure ML doesn't support specifying a managed identity by resource ID") - q.Set("clientid", "") - q.Set(miResID, id.String()) - } else { - q.Set("clientid", id.String()) - } - } - request.Raw().URL.RawQuery = q.Encode() - return request, nil -} - -func (c *managedIdentityClient) createServiceFabricAuthRequest(ctx context.Context, id ManagedIDKind, scopes []string) (*policy.Request, error) { - request, err := azruntime.NewRequest(ctx, http.MethodGet, c.endpoint) - if err != nil { - return nil, err - } - q := request.Raw().URL.Query() - request.Raw().Header.Set("Accept", "application/json") - request.Raw().Header.Set("Secret", os.Getenv(identityHeader)) - q.Add("api-version", serviceFabricAPIVersion) - q.Add("resource", strings.Join(scopes, " ")) - if id != nil { - log.Write(EventAuthentication, "WARNING: Service Fabric doesn't support selecting a user-assigned identity at runtime") - if id.idKind() == miResourceID { - q.Add(miResID, id.String()) - } else { - q.Add(qpClientID, id.String()) - } - } - request.Raw().URL.RawQuery = q.Encode() - return request, nil -} - -func (c *managedIdentityClient) getAzureArcSecretKey(ctx context.Context, resources []string) (string, error) { - // create the request to retreive the secret key challenge provided by the HIMDS service - request, err := azruntime.NewRequest(ctx, http.MethodGet, c.endpoint) - if err != nil { - return "", err - } - request.Raw().Header.Set(headerMetadata, "true") - q := request.Raw().URL.Query() - q.Add("api-version", azureArcAPIVersion) - q.Add("resource", strings.Join(resources, " ")) - request.Raw().URL.RawQuery = q.Encode() - // send the initial request to get the short-lived secret key - response, err := c.azClient.Pipeline().Do(request) - if err != nil { - return "", err - } - // the endpoint is expected to return a 401 with the WWW-Authenticate header set to the location - // of the secret key file. Any other status code indicates an error in the request. - if response.StatusCode != 401 { - msg := fmt.Sprintf("expected a 401 response, received %d", response.StatusCode) - return "", newAuthenticationFailedError(credNameManagedIdentity, msg, response, nil) - } - header := response.Header.Get("WWW-Authenticate") - if len(header) == 0 { - return "", newAuthenticationFailedError(credNameManagedIdentity, "HIMDS response has no WWW-Authenticate header", nil, nil) - } - // the WWW-Authenticate header is expected in the following format: Basic realm=/some/file/path.key - _, p, found := strings.Cut(header, "=") - if !found { - return "", newAuthenticationFailedError(credNameManagedIdentity, "unexpected WWW-Authenticate header from HIMDS: "+header, nil, nil) - } - expected, err := arcKeyDirectory() - if err != nil { - return "", err - } - if filepath.Dir(p) != expected || !strings.HasSuffix(p, ".key") { - return "", newAuthenticationFailedError(credNameManagedIdentity, "unexpected file path from HIMDS service: "+p, nil, nil) - } - f, err := os.Stat(p) - if err != nil { - return "", newAuthenticationFailedError(credNameManagedIdentity, fmt.Sprintf("could not stat %q: %v", p, err), nil, nil) - } - if s := f.Size(); s > 4096 { - return "", newAuthenticationFailedError(credNameManagedIdentity, fmt.Sprintf("key is too large (%d bytes)", s), nil, nil) - } - key, err := os.ReadFile(p) - if err != nil { - return "", newAuthenticationFailedError(credNameManagedIdentity, fmt.Sprintf("could not read %q: %v", p, err), nil, nil) - } - return string(key), nil -} - -func (c *managedIdentityClient) createAzureArcAuthRequest(ctx context.Context, id ManagedIDKind, resources []string, key string) (*policy.Request, error) { - request, err := azruntime.NewRequest(ctx, http.MethodGet, c.endpoint) - if err != nil { - return nil, err - } - request.Raw().Header.Set(headerMetadata, "true") - request.Raw().Header.Set("Authorization", fmt.Sprintf("Basic %s", key)) - q := request.Raw().URL.Query() - q.Add("api-version", azureArcAPIVersion) - q.Add("resource", strings.Join(resources, " ")) - if id != nil { - log.Write(EventAuthentication, "WARNING: Azure Arc doesn't support user-assigned managed identities") - if id.idKind() == miResourceID { - q.Add(miResID, id.String()) - } else { - q.Add(qpClientID, id.String()) - } - } - request.Raw().URL.RawQuery = q.Encode() - return request, nil -} - -func (c *managedIdentityClient) createCloudShellAuthRequest(ctx context.Context, id ManagedIDKind, scopes []string) (*policy.Request, error) { - request, err := azruntime.NewRequest(ctx, http.MethodPost, c.endpoint) - if err != nil { - return nil, err - } - request.Raw().Header.Set(headerMetadata, "true") - data := url.Values{} - data.Set("resource", strings.Join(scopes, " ")) - dataEncoded := data.Encode() - body := streaming.NopCloser(strings.NewReader(dataEncoded)) - if err := request.SetBody(body, "application/x-www-form-urlencoded"); err != nil { - return nil, err - } - if id != nil { - log.Write(EventAuthentication, "WARNING: Cloud Shell doesn't support user-assigned managed identities") - q := request.Raw().URL.Query() - if id.idKind() == miResourceID { - q.Add(miResID, id.String()) - } else { - q.Add(qpClientID, id.String()) - } - } - return request, nil -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/managed_identity_credential.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/managed_identity_credential.go deleted file mode 100644 index 13c043d8e0ce..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/managed_identity_credential.go +++ /dev/null @@ -1,128 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azidentity - -import ( - "context" - "fmt" - "strings" - - "github.com/Azure/azure-sdk-for-go/sdk/azcore" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime" - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/confidential" -) - -const credNameManagedIdentity = "ManagedIdentityCredential" - -type managedIdentityIDKind int - -const ( - miClientID managedIdentityIDKind = 0 - miResourceID managedIdentityIDKind = 1 -) - -// ManagedIDKind identifies the ID of a managed identity as either a client or resource ID -type ManagedIDKind interface { - fmt.Stringer - idKind() managedIdentityIDKind -} - -// ClientID is the client ID of a user-assigned managed identity. -type ClientID string - -func (ClientID) idKind() managedIdentityIDKind { - return miClientID -} - -// String returns the string value of the ID. -func (c ClientID) String() string { - return string(c) -} - -// ResourceID is the resource ID of a user-assigned managed identity. -type ResourceID string - -func (ResourceID) idKind() managedIdentityIDKind { - return miResourceID -} - -// String returns the string value of the ID. -func (r ResourceID) String() string { - return string(r) -} - -// ManagedIdentityCredentialOptions contains optional parameters for ManagedIdentityCredential. -type ManagedIdentityCredentialOptions struct { - azcore.ClientOptions - - // ID is the ID of a managed identity the credential should authenticate. Set this field to use a specific identity - // instead of the hosting environment's default. The value may be the identity's client ID or resource ID, but note that - // some platforms don't accept resource IDs. - ID ManagedIDKind - - // dac indicates whether the credential is part of DefaultAzureCredential. When true, and the environment doesn't have - // configuration for a specific managed identity API, the credential tries to determine whether IMDS is available before - // sending its first token request. It does this by sending a malformed request with a short timeout. Any response to that - // request is taken to mean IMDS is available, in which case the credential will send ordinary token requests thereafter - // with no special timeout. The purpose of this behavior is to prevent a very long timeout when IMDS isn't available. - dac bool -} - -// ManagedIdentityCredential authenticates an Azure managed identity in any hosting environment supporting managed identities. -// This credential authenticates a system-assigned identity by default. Use ManagedIdentityCredentialOptions.ID to specify a -// user-assigned identity. See Microsoft Entra ID documentation for more information about managed identities: -// https://learn.microsoft.com/entra/identity/managed-identities-azure-resources/overview -type ManagedIdentityCredential struct { - client *confidentialClient - mic *managedIdentityClient -} - -// NewManagedIdentityCredential creates a ManagedIdentityCredential. Pass nil to accept default options. -func NewManagedIdentityCredential(options *ManagedIdentityCredentialOptions) (*ManagedIdentityCredential, error) { - if options == nil { - options = &ManagedIdentityCredentialOptions{} - } - mic, err := newManagedIdentityClient(options) - if err != nil { - return nil, err - } - cred := confidential.NewCredFromTokenProvider(mic.provideToken) - - // It's okay to give MSAL an invalid client ID because MSAL will use it only as part of a cache key. - // ManagedIdentityClient handles all the details of authentication and won't receive this value from MSAL. - clientID := "SYSTEM-ASSIGNED-MANAGED-IDENTITY" - if options.ID != nil { - clientID = options.ID.String() - } - // similarly, it's okay to give MSAL an incorrect tenant because MSAL won't use the value - c, err := newConfidentialClient("common", clientID, credNameManagedIdentity, cred, confidentialClientOptions{ - ClientOptions: options.ClientOptions, - }) - if err != nil { - return nil, err - } - return &ManagedIdentityCredential{client: c, mic: mic}, nil -} - -// GetToken requests an access token from the hosting environment. This method is called automatically by Azure SDK clients. -func (c *ManagedIdentityCredential) GetToken(ctx context.Context, opts policy.TokenRequestOptions) (azcore.AccessToken, error) { - var err error - ctx, endSpan := runtime.StartSpan(ctx, credNameManagedIdentity+"."+traceOpGetToken, c.client.azClient.Tracer(), nil) - defer func() { endSpan(err) }() - - if len(opts.Scopes) != 1 { - err = fmt.Errorf("%s.GetToken() requires exactly one scope", credNameManagedIdentity) - return azcore.AccessToken{}, err - } - // managed identity endpoints require a Microsoft Entra ID v1 resource (i.e. token audience), not a v2 scope, so we remove "/.default" here - opts.Scopes = []string{strings.TrimSuffix(opts.Scopes[0], defaultSuffix)} - tk, err := c.client.GetToken(ctx, opts) - return tk, err -} - -var _ azcore.TokenCredential = (*ManagedIdentityCredential)(nil) diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/on_behalf_of_credential.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/on_behalf_of_credential.go deleted file mode 100644 index 9dcc82f013ba..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/on_behalf_of_credential.go +++ /dev/null @@ -1,113 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azidentity - -import ( - "context" - "crypto" - "crypto/x509" - "errors" - - "github.com/Azure/azure-sdk-for-go/sdk/azcore" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime" - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/confidential" -) - -const credNameOBO = "OnBehalfOfCredential" - -// OnBehalfOfCredential authenticates a service principal via the on-behalf-of flow. This is typically used by -// middle-tier services that authorize requests to other services with a delegated user identity. Because this -// is not an interactive authentication flow, an application using it must have admin consent for any delegated -// permissions before requesting tokens for them. See [Microsoft Entra ID documentation] for more details. -// -// [Microsoft Entra ID documentation]: https://learn.microsoft.com/entra/identity-platform/v2-oauth2-on-behalf-of-flow -type OnBehalfOfCredential struct { - client *confidentialClient -} - -// OnBehalfOfCredentialOptions contains optional parameters for OnBehalfOfCredential -type OnBehalfOfCredentialOptions struct { - azcore.ClientOptions - - // AdditionallyAllowedTenants specifies additional tenants for which the credential may acquire tokens. - // Add the wildcard value "*" to allow the credential to acquire tokens for any tenant in which the - // application is registered. - AdditionallyAllowedTenants []string - - // DisableInstanceDiscovery should be set true only by applications authenticating in disconnected clouds, or - // private clouds such as Azure Stack. It determines whether the credential requests Microsoft Entra instance metadata - // from https://login.microsoft.com before authenticating. Setting this to true will skip this request, making - // the application responsible for ensuring the configured authority is valid and trustworthy. - DisableInstanceDiscovery bool - - // SendCertificateChain applies only when the credential is configured to authenticate with a certificate. - // This setting controls whether the credential sends the public certificate chain in the x5c header of each - // token request's JWT. This is required for, and only used in, Subject Name/Issuer (SNI) authentication. - SendCertificateChain bool -} - -// NewOnBehalfOfCredentialWithCertificate constructs an OnBehalfOfCredential that authenticates with a certificate. -// See [ParseCertificates] for help loading a certificate. -func NewOnBehalfOfCredentialWithCertificate(tenantID, clientID, userAssertion string, certs []*x509.Certificate, key crypto.PrivateKey, options *OnBehalfOfCredentialOptions) (*OnBehalfOfCredential, error) { - cred, err := confidential.NewCredFromCert(certs, key) - if err != nil { - return nil, err - } - return newOnBehalfOfCredential(tenantID, clientID, userAssertion, cred, options) -} - -// NewOnBehalfOfCredentialWithClientAssertions constructs an OnBehalfOfCredential that authenticates with client assertions. -// userAssertion is the user's access token for the application. The getAssertion function should return client assertions -// that authenticate the application to Microsoft Entra ID, such as federated credentials. -func NewOnBehalfOfCredentialWithClientAssertions(tenantID, clientID, userAssertion string, getAssertion func(context.Context) (string, error), options *OnBehalfOfCredentialOptions) (*OnBehalfOfCredential, error) { - if getAssertion == nil { - return nil, errors.New("getAssertion can't be nil. It must be a function that returns client assertions") - } - cred := confidential.NewCredFromAssertionCallback(func(ctx context.Context, _ confidential.AssertionRequestOptions) (string, error) { - return getAssertion(ctx) - }) - return newOnBehalfOfCredential(tenantID, clientID, userAssertion, cred, options) -} - -// NewOnBehalfOfCredentialWithSecret constructs an OnBehalfOfCredential that authenticates with a client secret. -func NewOnBehalfOfCredentialWithSecret(tenantID, clientID, userAssertion, clientSecret string, options *OnBehalfOfCredentialOptions) (*OnBehalfOfCredential, error) { - cred, err := confidential.NewCredFromSecret(clientSecret) - if err != nil { - return nil, err - } - return newOnBehalfOfCredential(tenantID, clientID, userAssertion, cred, options) -} - -func newOnBehalfOfCredential(tenantID, clientID, userAssertion string, cred confidential.Credential, options *OnBehalfOfCredentialOptions) (*OnBehalfOfCredential, error) { - if options == nil { - options = &OnBehalfOfCredentialOptions{} - } - opts := confidentialClientOptions{ - AdditionallyAllowedTenants: options.AdditionallyAllowedTenants, - Assertion: userAssertion, - ClientOptions: options.ClientOptions, - DisableInstanceDiscovery: options.DisableInstanceDiscovery, - SendX5C: options.SendCertificateChain, - } - c, err := newConfidentialClient(tenantID, clientID, credNameOBO, cred, opts) - if err != nil { - return nil, err - } - return &OnBehalfOfCredential{c}, nil -} - -// GetToken requests an access token from Microsoft Entra ID. This method is called automatically by Azure SDK clients. -func (o *OnBehalfOfCredential) GetToken(ctx context.Context, opts policy.TokenRequestOptions) (azcore.AccessToken, error) { - var err error - ctx, endSpan := runtime.StartSpan(ctx, credNameOBO+"."+traceOpGetToken, o.client.azClient.Tracer(), nil) - defer func() { endSpan(err) }() - tk, err := o.client.GetToken(ctx, opts) - return tk, err -} - -var _ azcore.TokenCredential = (*OnBehalfOfCredential)(nil) diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/public_client.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/public_client.go deleted file mode 100644 index b3d22dbf3ce9..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/public_client.go +++ /dev/null @@ -1,273 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azidentity - -import ( - "context" - "errors" - "fmt" - "net/http" - "strings" - "sync" - - "github.com/Azure/azure-sdk-for-go/sdk/azcore" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/cloud" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime" - "github.com/Azure/azure-sdk-for-go/sdk/azidentity/internal" - "github.com/Azure/azure-sdk-for-go/sdk/internal/log" - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/public" - - // this import ensures well-known configurations in azcore/cloud have ARM audiences for Authenticate() - _ "github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/runtime" -) - -type publicClientOptions struct { - azcore.ClientOptions - - AdditionallyAllowedTenants []string - DeviceCodePrompt func(context.Context, DeviceCodeMessage) error - DisableAutomaticAuthentication bool - DisableInstanceDiscovery bool - LoginHint, RedirectURL string - Record authenticationRecord - TokenCachePersistenceOptions *tokenCachePersistenceOptions - Username, Password string -} - -// publicClient wraps the MSAL public client -type publicClient struct { - cae, noCAE msalPublicClient - caeMu, noCAEMu, clientMu *sync.Mutex - clientID, tenantID string - defaultScope []string - host string - name string - opts publicClientOptions - record authenticationRecord - azClient *azcore.Client -} - -var errScopeRequired = errors.New("authenticating in this environment requires specifying a scope in TokenRequestOptions") - -func newPublicClient(tenantID, clientID, name string, o publicClientOptions) (*publicClient, error) { - if !validTenantID(tenantID) { - return nil, errInvalidTenantID - } - host, err := setAuthorityHost(o.Cloud) - if err != nil { - return nil, err - } - // if the application specified a cloud configuration, use its ARM audience as the default scope for Authenticate() - audience := o.Cloud.Services[cloud.ResourceManager].Audience - if audience == "" { - // no cloud configuration, or no ARM audience, specified; try to map the host to a well-known one (all of which have a trailing slash) - if !strings.HasSuffix(host, "/") { - host += "/" - } - switch host { - case cloud.AzureChina.ActiveDirectoryAuthorityHost: - audience = cloud.AzureChina.Services[cloud.ResourceManager].Audience - case cloud.AzureGovernment.ActiveDirectoryAuthorityHost: - audience = cloud.AzureGovernment.Services[cloud.ResourceManager].Audience - case cloud.AzurePublic.ActiveDirectoryAuthorityHost: - audience = cloud.AzurePublic.Services[cloud.ResourceManager].Audience - } - } - // if we didn't come up with an audience, the application will have to specify a scope for Authenticate() - var defaultScope []string - if audience != "" { - defaultScope = []string{audience + defaultSuffix} - } - client, err := azcore.NewClient(module, version, runtime.PipelineOptions{ - Tracing: runtime.TracingOptions{ - Namespace: traceNamespace, - }, - }, &o.ClientOptions) - if err != nil { - return nil, err - } - o.AdditionallyAllowedTenants = resolveAdditionalTenants(o.AdditionallyAllowedTenants) - return &publicClient{ - caeMu: &sync.Mutex{}, - clientID: clientID, - clientMu: &sync.Mutex{}, - defaultScope: defaultScope, - host: host, - name: name, - noCAEMu: &sync.Mutex{}, - opts: o, - record: o.Record, - tenantID: tenantID, - azClient: client, - }, nil -} - -func (p *publicClient) Authenticate(ctx context.Context, tro *policy.TokenRequestOptions) (authenticationRecord, error) { - if tro == nil { - tro = &policy.TokenRequestOptions{} - } - if len(tro.Scopes) == 0 { - if p.defaultScope == nil { - return authenticationRecord{}, errScopeRequired - } - tro.Scopes = p.defaultScope - } - client, mu, err := p.client(*tro) - if err != nil { - return authenticationRecord{}, err - } - mu.Lock() - defer mu.Unlock() - _, err = p.reqToken(ctx, client, *tro) - if err == nil { - scope := strings.Join(tro.Scopes, ", ") - msg := fmt.Sprintf("%s.Authenticate() acquired a token for scope %q", p.name, scope) - log.Write(EventAuthentication, msg) - } - return p.record, err -} - -// GetToken requests an access token from MSAL, checking the cache first. -func (p *publicClient) GetToken(ctx context.Context, tro policy.TokenRequestOptions) (azcore.AccessToken, error) { - if len(tro.Scopes) < 1 { - return azcore.AccessToken{}, fmt.Errorf("%s.GetToken() requires at least one scope", p.name) - } - tenant, err := p.resolveTenant(tro.TenantID) - if err != nil { - return azcore.AccessToken{}, err - } - client, mu, err := p.client(tro) - if err != nil { - return azcore.AccessToken{}, err - } - mu.Lock() - defer mu.Unlock() - ar, err := client.AcquireTokenSilent(ctx, tro.Scopes, public.WithSilentAccount(p.record.account()), public.WithClaims(tro.Claims), public.WithTenantID(tenant)) - if err == nil { - return p.token(ar, err) - } - if p.opts.DisableAutomaticAuthentication { - return azcore.AccessToken{}, newauthenticationRequiredError(p.name, tro) - } - at, err := p.reqToken(ctx, client, tro) - if err == nil { - msg := fmt.Sprintf("%s.GetToken() acquired a token for scope %q", p.name, strings.Join(ar.GrantedScopes, ", ")) - log.Write(EventAuthentication, msg) - } - return at, err -} - -// reqToken requests a token from the MSAL public client. It's separate from GetToken() to enable Authenticate() to bypass the cache. -func (p *publicClient) reqToken(ctx context.Context, c msalPublicClient, tro policy.TokenRequestOptions) (azcore.AccessToken, error) { - tenant, err := p.resolveTenant(tro.TenantID) - if err != nil { - return azcore.AccessToken{}, err - } - var ar public.AuthResult - switch p.name { - case credNameBrowser: - ar, err = c.AcquireTokenInteractive(ctx, tro.Scopes, - public.WithClaims(tro.Claims), - public.WithLoginHint(p.opts.LoginHint), - public.WithRedirectURI(p.opts.RedirectURL), - public.WithTenantID(tenant), - ) - case credNameDeviceCode: - dc, e := c.AcquireTokenByDeviceCode(ctx, tro.Scopes, public.WithClaims(tro.Claims), public.WithTenantID(tenant)) - if e != nil { - return azcore.AccessToken{}, e - } - err = p.opts.DeviceCodePrompt(ctx, DeviceCodeMessage{ - Message: dc.Result.Message, - UserCode: dc.Result.UserCode, - VerificationURL: dc.Result.VerificationURL, - }) - if err == nil { - ar, err = dc.AuthenticationResult(ctx) - } - case credNameUserPassword: - ar, err = c.AcquireTokenByUsernamePassword(ctx, tro.Scopes, p.opts.Username, p.opts.Password, public.WithClaims(tro.Claims), public.WithTenantID(tenant)) - default: - return azcore.AccessToken{}, fmt.Errorf("unknown credential %q", p.name) - } - return p.token(ar, err) -} - -func (p *publicClient) client(tro policy.TokenRequestOptions) (msalPublicClient, *sync.Mutex, error) { - p.clientMu.Lock() - defer p.clientMu.Unlock() - if tro.EnableCAE { - if p.cae == nil { - client, err := p.newMSALClient(true) - if err != nil { - return nil, nil, err - } - p.cae = client - } - return p.cae, p.caeMu, nil - } - if p.noCAE == nil { - client, err := p.newMSALClient(false) - if err != nil { - return nil, nil, err - } - p.noCAE = client - } - return p.noCAE, p.noCAEMu, nil -} - -func (p *publicClient) newMSALClient(enableCAE bool) (msalPublicClient, error) { - cache, err := internal.NewCache(p.opts.TokenCachePersistenceOptions, enableCAE) - if err != nil { - return nil, err - } - o := []public.Option{ - public.WithAuthority(runtime.JoinPaths(p.host, p.tenantID)), - public.WithCache(cache), - public.WithHTTPClient(p), - } - if enableCAE { - o = append(o, public.WithClientCapabilities(cp1)) - } - if p.opts.DisableInstanceDiscovery || strings.ToLower(p.tenantID) == "adfs" { - o = append(o, public.WithInstanceDiscovery(false)) - } - return public.New(p.clientID, o...) -} - -func (p *publicClient) token(ar public.AuthResult, err error) (azcore.AccessToken, error) { - if err == nil { - p.record, err = newAuthenticationRecord(ar) - } else { - res := getResponseFromError(err) - err = newAuthenticationFailedError(p.name, err.Error(), res, err) - } - return azcore.AccessToken{Token: ar.AccessToken, ExpiresOn: ar.ExpiresOn.UTC()}, err -} - -// resolveTenant returns the correct WithTenantID() argument for a token request given the client's -// configuration, or an error when that configuration doesn't allow the specified tenant -func (p *publicClient) resolveTenant(specified string) (string, error) { - t, err := resolveTenant(p.tenantID, specified, p.name, p.opts.AdditionallyAllowedTenants) - if t == p.tenantID { - // callers pass this value to MSAL's WithTenantID(). There's no need to redundantly specify - // the client's default tenant and doing so is an error when that tenant is "organizations" - t = "" - } - return t, err -} - -// these methods satisfy the MSAL ops.HTTPClient interface - -func (p *publicClient) CloseIdleConnections() { - // do nothing -} - -func (p *publicClient) Do(r *http.Request) (*http.Response, error) { - return doForClient(p.azClient, r) -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/test-resources-post.ps1 b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/test-resources-post.ps1 deleted file mode 100644 index a69bbce34c43..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/test-resources-post.ps1 +++ /dev/null @@ -1,112 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -# IMPORTANT: Do not invoke this file directly. Please instead run eng/common/TestResources/New-TestResources.ps1 from the repository root. - -param ( - [hashtable] $AdditionalParameters = @{}, - [hashtable] $DeploymentOutputs -) - -$ErrorActionPreference = 'Stop' -$PSNativeCommandUseErrorActionPreference = $true - -if ($CI) { - if (!$AdditionalParameters['deployResources']) { - Write-Host "Skipping post-provisioning script because resources weren't deployed" - return - } - az login --service-principal -u $DeploymentOutputs['AZIDENTITY_CLIENT_ID'] -p $DeploymentOutputs['AZIDENTITY_CLIENT_SECRET'] --tenant $DeploymentOutputs['AZIDENTITY_TENANT_ID'] - az account set --subscription $DeploymentOutputs['AZIDENTITY_SUBSCRIPTION_ID'] -} - -Write-Host "Building container" -$image = "$($DeploymentOutputs['AZIDENTITY_ACR_LOGIN_SERVER'])/azidentity-managed-id-test" -Set-Content -Path "$PSScriptRoot/Dockerfile" -Value @" -FROM mcr.microsoft.com/oss/go/microsoft/golang:latest as builder -ENV GOARCH=amd64 GOWORK=off -COPY . /azidentity -WORKDIR /azidentity/testdata/managed-id-test -RUN go mod tidy -RUN go build -o /build/managed-id-test . -RUN GOOS=windows go build -o /build/managed-id-test.exe . - -FROM mcr.microsoft.com/mirror/docker/library/alpine:3.16 -RUN apk add gcompat -COPY --from=builder /build/* . -RUN chmod +x managed-id-test -CMD ["./managed-id-test"] -"@ -# build from sdk/azidentity because we need that dir in the context (because the test app uses local azidentity) -docker build -t $image "$PSScriptRoot" -az acr login -n $DeploymentOutputs['AZIDENTITY_ACR_NAME'] -docker push $image - -$rg = $DeploymentOutputs['AZIDENTITY_RESOURCE_GROUP'] - -# ACI is easier to provision here than in the bicep file because the image isn't available before now -Write-Host "Deploying Azure Container Instance" -$aciName = "azidentity-test" -az container create -g $rg -n $aciName --image $image ` - --acr-identity $($DeploymentOutputs['AZIDENTITY_USER_ASSIGNED_IDENTITY']) ` - --assign-identity [system] $($DeploymentOutputs['AZIDENTITY_USER_ASSIGNED_IDENTITY']) ` - --role "Storage Blob Data Reader" ` - --scope $($DeploymentOutputs['AZIDENTITY_STORAGE_ID']) ` - -e AZIDENTITY_STORAGE_NAME=$($DeploymentOutputs['AZIDENTITY_STORAGE_NAME']) ` - AZIDENTITY_STORAGE_NAME_USER_ASSIGNED=$($DeploymentOutputs['AZIDENTITY_STORAGE_NAME_USER_ASSIGNED']) ` - AZIDENTITY_USER_ASSIGNED_IDENTITY=$($DeploymentOutputs['AZIDENTITY_USER_ASSIGNED_IDENTITY']) ` - FUNCTIONS_CUSTOMHANDLER_PORT=80 -Write-Host "##vso[task.setvariable variable=AZIDENTITY_ACI_NAME;]$aciName" - -# Azure Functions deployment: copy the Windows binary from the Docker image, deploy it in a zip -Write-Host "Deploying to Azure Functions" -$container = docker create $image -docker cp ${container}:managed-id-test.exe "$PSScriptRoot/testdata/managed-id-test/" -docker rm -v $container -Compress-Archive -Path "$PSScriptRoot/testdata/managed-id-test/*" -DestinationPath func.zip -Force -az functionapp deploy -g $rg -n $DeploymentOutputs['AZIDENTITY_FUNCTION_NAME'] --src-path func.zip --type zip - -Write-Host "Creating federated identity" -$aksName = $DeploymentOutputs['AZIDENTITY_AKS_NAME'] -$idName = $DeploymentOutputs['AZIDENTITY_USER_ASSIGNED_IDENTITY_NAME'] -$issuer = az aks show -g $rg -n $aksName --query "oidcIssuerProfile.issuerUrl" -otsv -$podName = "azidentity-test" -$serviceAccountName = "workload-identity-sa" -az identity federated-credential create -g $rg --identity-name $idName --issuer $issuer --name $idName --subject system:serviceaccount:default:$serviceAccountName -Write-Host "Deploying to AKS" -az aks get-credentials -g $rg -n $aksName -az aks update --attach-acr $DeploymentOutputs['AZIDENTITY_ACR_NAME'] -g $rg -n $aksName -Set-Content -Path "$PSScriptRoot/k8s.yaml" -Value @" -apiVersion: v1 -kind: ServiceAccount -metadata: - annotations: - azure.workload.identity/client-id: $($DeploymentOutputs['AZIDENTITY_USER_ASSIGNED_IDENTITY_CLIENT_ID']) - name: $serviceAccountName - namespace: default ---- -apiVersion: v1 -kind: Pod -metadata: - name: $podName - namespace: default - labels: - app: $podName - azure.workload.identity/use: "true" -spec: - serviceAccountName: $serviceAccountName - containers: - - name: $podName - image: $image - env: - - name: AZIDENTITY_STORAGE_NAME - value: $($DeploymentOutputs['AZIDENTITY_STORAGE_NAME_USER_ASSIGNED']) - - name: AZIDENTITY_USE_WORKLOAD_IDENTITY - value: "true" - - name: FUNCTIONS_CUSTOMHANDLER_PORT - value: "80" - nodeSelector: - kubernetes.io/os: linux -"@ -kubectl apply -f "$PSScriptRoot/k8s.yaml" -Write-Host "##vso[task.setvariable variable=AZIDENTITY_POD_NAME;]$podName" diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/test-resources-pre.ps1 b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/test-resources-pre.ps1 deleted file mode 100644 index 58766d0a0227..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/test-resources-pre.ps1 +++ /dev/null @@ -1,44 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -# IMPORTANT: Do not invoke this file directly. Please instead run eng/common/TestResources/New-TestResources.ps1 from the repository root. - -[CmdletBinding(SupportsShouldProcess = $true, ConfirmImpact = 'Medium')] -param ( - [hashtable] $AdditionalParameters = @{}, - - # Captures any arguments from eng/New-TestResources.ps1 not declared here (no parameter errors). - [Parameter(ValueFromRemainingArguments = $true)] - $RemainingArguments -) - -if (-not (Test-Path "$PSScriptRoot/sshkey.pub")) { - ssh-keygen -t rsa -b 4096 -f "$PSScriptRoot/sshkey" -N '' -C '' -} -$templateFileParameters['sshPubKey'] = Get-Content "$PSScriptRoot/sshkey.pub" - -if (!$CI) { - # TODO: Remove this once auto-cloud config downloads are supported locally - Write-Host "Skipping cert setup in local testing mode" - return -} - -if ($null -eq $EnvironmentVariables -or $EnvironmentVariables.Count -eq 0) { - throw "EnvironmentVariables must be set in the calling script New-TestResources.ps1" -} - -$tmp = $env:TEMP ? $env:TEMP : [System.IO.Path]::GetTempPath() -$pfxPath = Join-Path $tmp "test.pfx" -$pemPath = Join-Path $tmp "test.pem" - -Write-Host "Creating identity test files: $pfxPath $pemPath" - -[System.Convert]::FromBase64String($EnvironmentVariables['PFX_CONTENTS']) | Set-Content -Path $pfxPath -AsByteStream -Set-Content -Path $pemPath -Value $EnvironmentVariables['PEM_CONTENTS'] - -# Set for pipeline -Write-Host "##vso[task.setvariable variable=IDENTITY_SP_CERT_PFX;]$pfxPath" -Write-Host "##vso[task.setvariable variable=IDENTITY_SP_CERT_PEM;]$pemPath" -# Set for local -$env:IDENTITY_SP_CERT_PFX = $pfxPath -$env:IDENTITY_SP_CERT_PEM = $pemPath diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/test-resources.bicep b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/test-resources.bicep deleted file mode 100644 index 2a2165293090..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/test-resources.bicep +++ /dev/null @@ -1,219 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -@description('Kubernetes cluster admin user name.') -param adminUser string = 'azureuser' - -@minLength(6) -@maxLength(23) -@description('The base resource name.') -param baseName string = resourceGroup().name - -@description('Whether to deploy resources. When set to false, this file deploys nothing.') -param deployResources bool = false - -param sshPubKey string = '' - -@description('The location of the resource. By default, this is the same as the resource group.') -param location string = resourceGroup().location - -// https://learn.microsoft.com/azure/role-based-access-control/built-in-roles -var acrPull = subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '7f951dda-4ed3-4680-a7ca-43fe172d538d') -var blobReader = subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '2a2b9908-6ea1-4ae2-8e65-a410df84e7d1') - -resource sa 'Microsoft.Storage/storageAccounts@2021-08-01' = if (deployResources) { - kind: 'StorageV2' - location: location - name: 'sa${uniqueString(baseName)}' - properties: { - accessTier: 'Hot' - } - sku: { - name: 'Standard_LRS' - } -} - -resource saUserAssigned 'Microsoft.Storage/storageAccounts@2021-08-01' = if (deployResources) { - kind: 'StorageV2' - location: location - name: 'sa2${uniqueString(baseName)}' - properties: { - accessTier: 'Hot' - } - sku: { - name: 'Standard_LRS' - } -} - -resource usermgdid 'Microsoft.ManagedIdentity/userAssignedIdentities@2018-11-30' = if (deployResources) { - location: location - name: baseName -} - -resource acrPullContainerInstance 'Microsoft.Authorization/roleAssignments@2022-04-01' = if (deployResources) { - name: guid(resourceGroup().id, acrPull, 'containerInstance') - properties: { - principalId: deployResources ? usermgdid.properties.principalId : '' - principalType: 'ServicePrincipal' - roleDefinitionId: acrPull - } - scope: containerRegistry -} - -resource blobRoleUserAssigned 'Microsoft.Authorization/roleAssignments@2022-04-01' = if (deployResources) { - scope: saUserAssigned - name: guid(resourceGroup().id, blobReader, usermgdid.id) - properties: { - principalId: deployResources ? usermgdid.properties.principalId : '' - principalType: 'ServicePrincipal' - roleDefinitionId: blobReader - } -} - -resource blobRoleFunc 'Microsoft.Authorization/roleAssignments@2022-04-01' = if (deployResources) { - name: guid(resourceGroup().id, blobReader, 'azfunc') - properties: { - principalId: deployResources ? azfunc.identity.principalId : '' - roleDefinitionId: blobReader - principalType: 'ServicePrincipal' - } - scope: sa -} - -resource containerRegistry 'Microsoft.ContainerRegistry/registries@2023-01-01-preview' = if (deployResources) { - location: location - name: uniqueString(resourceGroup().id) - properties: { - adminUserEnabled: true - } - sku: { - name: 'Basic' - } -} - -resource farm 'Microsoft.Web/serverfarms@2021-03-01' = if (deployResources) { - kind: 'app' - location: location - name: '${baseName}_asp' - properties: {} - sku: { - capacity: 1 - family: 'B' - name: 'B1' - size: 'B1' - tier: 'Basic' - } -} - -resource azfunc 'Microsoft.Web/sites@2021-03-01' = if (deployResources) { - identity: { - type: 'SystemAssigned, UserAssigned' - userAssignedIdentities: { - '${deployResources ? usermgdid.id : ''}': {} - } - } - kind: 'functionapp' - location: location - name: '${baseName}func' - properties: { - enabled: true - httpsOnly: true - keyVaultReferenceIdentity: 'SystemAssigned' - serverFarmId: farm.id - siteConfig: { - alwaysOn: true - appSettings: [ - { - name: 'AZIDENTITY_STORAGE_NAME' - value: deployResources ? sa.name : null - } - { - name: 'AZIDENTITY_STORAGE_NAME_USER_ASSIGNED' - value: deployResources ? saUserAssigned.name : null - } - { - name: 'AZIDENTITY_USER_ASSIGNED_IDENTITY' - value: deployResources ? usermgdid.id : null - } - { - name: 'AzureWebJobsStorage' - value: 'DefaultEndpointsProtocol=https;AccountName=${deployResources ? sa.name : ''};EndpointSuffix=${deployResources ? environment().suffixes.storage : ''};AccountKey=${deployResources ? sa.listKeys().keys[0].value : ''}' - } - { - name: 'FUNCTIONS_EXTENSION_VERSION' - value: '~4' - } - { - name: 'FUNCTIONS_WORKER_RUNTIME' - value: 'custom' - } - { - name: 'WEBSITE_CONTENTAZUREFILECONNECTIONSTRING' - value: 'DefaultEndpointsProtocol=https;AccountName=${deployResources ? sa.name : ''};EndpointSuffix=${deployResources ? environment().suffixes.storage : ''};AccountKey=${deployResources ? sa.listKeys().keys[0].value : ''}' - } - { - name: 'WEBSITE_CONTENTSHARE' - value: toLower('${baseName}-func') - } - ] - http20Enabled: true - minTlsVersion: '1.2' - } - } -} - -resource aks 'Microsoft.ContainerService/managedClusters@2023-06-01' = if (deployResources) { - name: baseName - location: location - identity: { - type: 'SystemAssigned' - } - properties: { - agentPoolProfiles: [ - { - count: 1 - enableAutoScaling: false - kubeletDiskType: 'OS' - mode: 'System' - name: 'agentpool' - osDiskSizeGB: 128 - osDiskType: 'Managed' - osSKU: 'Ubuntu' - osType: 'Linux' - type: 'VirtualMachineScaleSets' - vmSize: 'Standard_D2s_v3' - } - ] - dnsPrefix: 'identitytest' - enableRBAC: true - linuxProfile: { - adminUsername: adminUser - ssh: { - publicKeys: [ - { - keyData: sshPubKey - } - ] - } - } - oidcIssuerProfile: { - enabled: true - } - securityProfile: { - workloadIdentity: { - enabled: true - } - } - } -} - -output AZIDENTITY_ACR_LOGIN_SERVER string = deployResources ? containerRegistry.properties.loginServer : '' -output AZIDENTITY_ACR_NAME string = deployResources ? containerRegistry.name : '' -output AZIDENTITY_AKS_NAME string = deployResources ? aks.name : '' -output AZIDENTITY_FUNCTION_NAME string = deployResources ? azfunc.name : '' -output AZIDENTITY_STORAGE_ID string = deployResources ? sa.id : '' -output AZIDENTITY_STORAGE_NAME string = deployResources ? sa.name : '' -output AZIDENTITY_STORAGE_NAME_USER_ASSIGNED string = deployResources ? saUserAssigned.name : '' -output AZIDENTITY_USER_ASSIGNED_IDENTITY string = deployResources ? usermgdid.id : '' -output AZIDENTITY_USER_ASSIGNED_IDENTITY_CLIENT_ID string = deployResources ? usermgdid.properties.clientId : '' -output AZIDENTITY_USER_ASSIGNED_IDENTITY_NAME string = deployResources ? usermgdid.name : '' diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/username_password_credential.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/username_password_credential.go deleted file mode 100644 index 294ed81e951c..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/username_password_credential.go +++ /dev/null @@ -1,90 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azidentity - -import ( - "context" - - "github.com/Azure/azure-sdk-for-go/sdk/azcore" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime" -) - -const credNameUserPassword = "UsernamePasswordCredential" - -// UsernamePasswordCredentialOptions contains optional parameters for UsernamePasswordCredential. -type UsernamePasswordCredentialOptions struct { - azcore.ClientOptions - - // AdditionallyAllowedTenants specifies additional tenants for which the credential may acquire tokens. - // Add the wildcard value "*" to allow the credential to acquire tokens for any tenant in which the - // application is registered. - AdditionallyAllowedTenants []string - - // authenticationRecord returned by a call to a credential's Authenticate method. Set this option - // to enable the credential to use data from a previous authentication. - authenticationRecord authenticationRecord - - // DisableInstanceDiscovery should be set true only by applications authenticating in disconnected clouds, or - // private clouds such as Azure Stack. It determines whether the credential requests Microsoft Entra instance metadata - // from https://login.microsoft.com before authenticating. Setting this to true will skip this request, making - // the application responsible for ensuring the configured authority is valid and trustworthy. - DisableInstanceDiscovery bool - - // tokenCachePersistenceOptions enables persistent token caching when not nil. - tokenCachePersistenceOptions *tokenCachePersistenceOptions -} - -// UsernamePasswordCredential authenticates a user with a password. Microsoft doesn't recommend this kind of authentication, -// because it's less secure than other authentication flows. This credential is not interactive, so it isn't compatible -// with any form of multi-factor authentication, and the application must already have user or admin consent. -// This credential can only authenticate work and school accounts; it can't authenticate Microsoft accounts. -type UsernamePasswordCredential struct { - client *publicClient -} - -// NewUsernamePasswordCredential creates a UsernamePasswordCredential. clientID is the ID of the application the user -// will authenticate to. Pass nil for options to accept defaults. -func NewUsernamePasswordCredential(tenantID string, clientID string, username string, password string, options *UsernamePasswordCredentialOptions) (*UsernamePasswordCredential, error) { - if options == nil { - options = &UsernamePasswordCredentialOptions{} - } - opts := publicClientOptions{ - AdditionallyAllowedTenants: options.AdditionallyAllowedTenants, - ClientOptions: options.ClientOptions, - DisableInstanceDiscovery: options.DisableInstanceDiscovery, - Password: password, - Record: options.authenticationRecord, - TokenCachePersistenceOptions: options.tokenCachePersistenceOptions, - Username: username, - } - c, err := newPublicClient(tenantID, clientID, credNameUserPassword, opts) - if err != nil { - return nil, err - } - return &UsernamePasswordCredential{client: c}, err -} - -// Authenticate the user. Subsequent calls to GetToken will automatically use the returned AuthenticationRecord. -func (c *UsernamePasswordCredential) authenticate(ctx context.Context, opts *policy.TokenRequestOptions) (authenticationRecord, error) { - var err error - ctx, endSpan := runtime.StartSpan(ctx, credNameUserPassword+"."+traceOpAuthenticate, c.client.azClient.Tracer(), nil) - defer func() { endSpan(err) }() - tk, err := c.client.Authenticate(ctx, opts) - return tk, err -} - -// GetToken requests an access token from Microsoft Entra ID. This method is called automatically by Azure SDK clients. -func (c *UsernamePasswordCredential) GetToken(ctx context.Context, opts policy.TokenRequestOptions) (azcore.AccessToken, error) { - var err error - ctx, endSpan := runtime.StartSpan(ctx, credNameUserPassword+"."+traceOpGetToken, c.client.azClient.Tracer(), nil) - defer func() { endSpan(err) }() - tk, err := c.client.GetToken(ctx, opts) - return tk, err -} - -var _ azcore.TokenCredential = (*UsernamePasswordCredential)(nil) diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/version.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/version.go deleted file mode 100644 index 459ef64c6f7f..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/version.go +++ /dev/null @@ -1,18 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azidentity - -const ( - // UserAgent is the string to be used in the user agent string when making requests. - component = "azidentity" - - // module is the fully qualified name of the module used in telemetry and distributed tracing. - module = "github.com/Azure/azure-sdk-for-go/sdk/" + component - - // Version is the semantic version (see http://semver.org) of this module. - version = "v1.6.0" -) diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/workload_identity.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/workload_identity.go deleted file mode 100644 index 3e43e788e931..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/workload_identity.go +++ /dev/null @@ -1,131 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azidentity - -import ( - "context" - "errors" - "os" - "sync" - "time" - - "github.com/Azure/azure-sdk-for-go/sdk/azcore" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime" -) - -const credNameWorkloadIdentity = "WorkloadIdentityCredential" - -// WorkloadIdentityCredential supports Azure workload identity on Kubernetes. -// See [Azure Kubernetes Service documentation] for more information. -// -// [Azure Kubernetes Service documentation]: https://learn.microsoft.com/azure/aks/workload-identity-overview -type WorkloadIdentityCredential struct { - assertion, file string - cred *ClientAssertionCredential - expires time.Time - mtx *sync.RWMutex -} - -// WorkloadIdentityCredentialOptions contains optional parameters for WorkloadIdentityCredential. -type WorkloadIdentityCredentialOptions struct { - azcore.ClientOptions - - // AdditionallyAllowedTenants specifies additional tenants for which the credential may acquire tokens. - // Add the wildcard value "*" to allow the credential to acquire tokens for any tenant in which the - // application is registered. - AdditionallyAllowedTenants []string - // ClientID of the service principal. Defaults to the value of the environment variable AZURE_CLIENT_ID. - ClientID string - // DisableInstanceDiscovery should be set true only by applications authenticating in disconnected clouds, or - // private clouds such as Azure Stack. It determines whether the credential requests Microsoft Entra instance metadata - // from https://login.microsoft.com before authenticating. Setting this to true will skip this request, making - // the application responsible for ensuring the configured authority is valid and trustworthy. - DisableInstanceDiscovery bool - // TenantID of the service principal. Defaults to the value of the environment variable AZURE_TENANT_ID. - TenantID string - // TokenFilePath is the path of a file containing a Kubernetes service account token. Defaults to the value of the - // environment variable AZURE_FEDERATED_TOKEN_FILE. - TokenFilePath string -} - -// NewWorkloadIdentityCredential constructs a WorkloadIdentityCredential. Service principal configuration is read -// from environment variables as set by the Azure workload identity webhook. Set options to override those values. -func NewWorkloadIdentityCredential(options *WorkloadIdentityCredentialOptions) (*WorkloadIdentityCredential, error) { - if options == nil { - options = &WorkloadIdentityCredentialOptions{} - } - ok := false - clientID := options.ClientID - if clientID == "" { - if clientID, ok = os.LookupEnv(azureClientID); !ok { - return nil, errors.New("no client ID specified. Check pod configuration or set ClientID in the options") - } - } - file := options.TokenFilePath - if file == "" { - if file, ok = os.LookupEnv(azureFederatedTokenFile); !ok { - return nil, errors.New("no token file specified. Check pod configuration or set TokenFilePath in the options") - } - } - tenantID := options.TenantID - if tenantID == "" { - if tenantID, ok = os.LookupEnv(azureTenantID); !ok { - return nil, errors.New("no tenant ID specified. Check pod configuration or set TenantID in the options") - } - } - w := WorkloadIdentityCredential{file: file, mtx: &sync.RWMutex{}} - caco := ClientAssertionCredentialOptions{ - AdditionallyAllowedTenants: options.AdditionallyAllowedTenants, - ClientOptions: options.ClientOptions, - DisableInstanceDiscovery: options.DisableInstanceDiscovery, - } - cred, err := NewClientAssertionCredential(tenantID, clientID, w.getAssertion, &caco) - if err != nil { - return nil, err - } - // we want "WorkloadIdentityCredential" in log messages, not "ClientAssertionCredential" - cred.client.name = credNameWorkloadIdentity - w.cred = cred - return &w, nil -} - -// GetToken requests an access token from Microsoft Entra ID. Azure SDK clients call this method automatically. -func (w *WorkloadIdentityCredential) GetToken(ctx context.Context, opts policy.TokenRequestOptions) (azcore.AccessToken, error) { - var err error - ctx, endSpan := runtime.StartSpan(ctx, credNameWorkloadIdentity+"."+traceOpGetToken, w.cred.client.azClient.Tracer(), nil) - defer func() { endSpan(err) }() - tk, err := w.cred.GetToken(ctx, opts) - return tk, err -} - -// getAssertion returns the specified file's content, which is expected to be a Kubernetes service account token. -// Kubernetes is responsible for updating the file as service account tokens expire. -func (w *WorkloadIdentityCredential) getAssertion(context.Context) (string, error) { - w.mtx.RLock() - if w.expires.Before(time.Now()) { - // ensure only one goroutine at a time updates the assertion - w.mtx.RUnlock() - w.mtx.Lock() - defer w.mtx.Unlock() - // double check because another goroutine may have acquired the write lock first and done the update - if now := time.Now(); w.expires.Before(now) { - content, err := os.ReadFile(w.file) - if err != nil { - return "", err - } - w.assertion = string(content) - // Kubernetes rotates service account tokens when they reach 80% of their total TTL. The shortest TTL - // is 1 hour. That implies the token we just read is valid for at least 12 minutes (20% of 1 hour), - // but we add some margin for safety. - w.expires = now.Add(10 * time.Minute) - } - } else { - defer w.mtx.RUnlock() - } - return w.assertion, nil -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/LICENSE.txt b/vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/LICENSE.txt deleted file mode 100644 index 48ea6616b5b8..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/LICENSE.txt +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) Microsoft Corporation. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/diag/diag.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/diag/diag.go deleted file mode 100644 index 245af7d2bec4..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/diag/diag.go +++ /dev/null @@ -1,51 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package diag - -import ( - "fmt" - "runtime" - "strings" -) - -// Caller returns the file and line number of a frame on the caller's stack. -// If the funtion fails an empty string is returned. -// skipFrames - the number of frames to skip when determining the caller. -// Passing a value of 0 will return the immediate caller of this function. -func Caller(skipFrames int) string { - if pc, file, line, ok := runtime.Caller(skipFrames + 1); ok { - // the skipFrames + 1 is to skip ourselves - frame := runtime.FuncForPC(pc) - return fmt.Sprintf("%s()\n\t%s:%d", frame.Name(), file, line) - } - return "" -} - -// StackTrace returns a formatted stack trace string. -// If the funtion fails an empty string is returned. -// skipFrames - the number of stack frames to skip before composing the trace string. -// totalFrames - the maximum number of stack frames to include in the trace string. -func StackTrace(skipFrames, totalFrames int) string { - pcCallers := make([]uintptr, totalFrames) - if frames := runtime.Callers(skipFrames, pcCallers); frames == 0 { - return "" - } - frames := runtime.CallersFrames(pcCallers) - sb := strings.Builder{} - for { - frame, more := frames.Next() - sb.WriteString(frame.Function) - sb.WriteString("()\n\t") - sb.WriteString(frame.File) - sb.WriteRune(':') - sb.WriteString(fmt.Sprintf("%d\n", frame.Line)) - if !more { - break - } - } - return sb.String() -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/diag/doc.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/diag/doc.go deleted file mode 100644 index 66bf13e5f04b..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/diag/doc.go +++ /dev/null @@ -1,7 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package diag diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/errorinfo/doc.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/errorinfo/doc.go deleted file mode 100644 index 8c6eacb618a3..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/errorinfo/doc.go +++ /dev/null @@ -1,7 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package errorinfo diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/errorinfo/errorinfo.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/errorinfo/errorinfo.go deleted file mode 100644 index 8ee66b52676e..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/errorinfo/errorinfo.go +++ /dev/null @@ -1,46 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package errorinfo - -// NonRetriable represents a non-transient error. This works in -// conjunction with the retry policy, indicating that the error condition -// is idempotent, so no retries will be attempted. -// Use errors.As() to access this interface in the error chain. -type NonRetriable interface { - error - NonRetriable() -} - -// NonRetriableError marks the specified error as non-retriable. -// This function takes an error as input and returns a new error that is marked as non-retriable. -func NonRetriableError(err error) error { - return &nonRetriableError{err} -} - -// nonRetriableError is a struct that embeds the error interface. -// It is used to represent errors that should not be retried. -type nonRetriableError struct { - error -} - -// Error method for nonRetriableError struct. -// It returns the error message of the embedded error. -func (p *nonRetriableError) Error() string { - return p.error.Error() -} - -// NonRetriable is a marker method for nonRetriableError struct. -// Non-functional and indicates that the error is non-retriable. -func (*nonRetriableError) NonRetriable() { - // marker method -} - -// Unwrap method for nonRetriableError struct. -// It returns the original error that was marked as non-retriable. -func (p *nonRetriableError) Unwrap() error { - return p.error -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/exported/exported.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/exported/exported.go deleted file mode 100644 index 9948f604b301..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/exported/exported.go +++ /dev/null @@ -1,129 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package exported - -import ( - "errors" - "io" - "net/http" -) - -// HasStatusCode returns true if the Response's status code is one of the specified values. -// Exported as runtime.HasStatusCode(). -func HasStatusCode(resp *http.Response, statusCodes ...int) bool { - if resp == nil { - return false - } - for _, sc := range statusCodes { - if resp.StatusCode == sc { - return true - } - } - return false -} - -// PayloadOptions contains the optional values for the Payload func. -// NOT exported but used by azcore. -type PayloadOptions struct { - // BytesModifier receives the downloaded byte slice and returns an updated byte slice. - // Use this to modify the downloaded bytes in a payload (e.g. removing a BOM). - BytesModifier func([]byte) []byte -} - -// Payload reads and returns the response body or an error. -// On a successful read, the response body is cached. -// Subsequent reads will access the cached value. -// Exported as runtime.Payload() WITHOUT the opts parameter. -func Payload(resp *http.Response, opts *PayloadOptions) ([]byte, error) { - if resp.Body == nil { - // this shouldn't happen in real-world scenarios as a - // response with no body should set it to http.NoBody - return nil, nil - } - modifyBytes := func(b []byte) []byte { return b } - if opts != nil && opts.BytesModifier != nil { - modifyBytes = opts.BytesModifier - } - - // r.Body won't be a nopClosingBytesReader if downloading was skipped - if buf, ok := resp.Body.(*nopClosingBytesReader); ok { - bytesBody := modifyBytes(buf.Bytes()) - buf.Set(bytesBody) - return bytesBody, nil - } - - bytesBody, err := io.ReadAll(resp.Body) - resp.Body.Close() - if err != nil { - return nil, err - } - - bytesBody = modifyBytes(bytesBody) - resp.Body = &nopClosingBytesReader{s: bytesBody} - return bytesBody, nil -} - -// PayloadDownloaded returns true if the response body has already been downloaded. -// This implies that the Payload() func above has been previously called. -// NOT exported but used by azcore. -func PayloadDownloaded(resp *http.Response) bool { - _, ok := resp.Body.(*nopClosingBytesReader) - return ok -} - -// nopClosingBytesReader is an io.ReadSeekCloser around a byte slice. -// It also provides direct access to the byte slice to avoid rereading. -type nopClosingBytesReader struct { - s []byte - i int64 -} - -// Bytes returns the underlying byte slice. -func (r *nopClosingBytesReader) Bytes() []byte { - return r.s -} - -// Close implements the io.Closer interface. -func (*nopClosingBytesReader) Close() error { - return nil -} - -// Read implements the io.Reader interface. -func (r *nopClosingBytesReader) Read(b []byte) (n int, err error) { - if r.i >= int64(len(r.s)) { - return 0, io.EOF - } - n = copy(b, r.s[r.i:]) - r.i += int64(n) - return -} - -// Set replaces the existing byte slice with the specified byte slice and resets the reader. -func (r *nopClosingBytesReader) Set(b []byte) { - r.s = b - r.i = 0 -} - -// Seek implements the io.Seeker interface. -func (r *nopClosingBytesReader) Seek(offset int64, whence int) (int64, error) { - var i int64 - switch whence { - case io.SeekStart: - i = offset - case io.SeekCurrent: - i = r.i + offset - case io.SeekEnd: - i = int64(len(r.s)) + offset - default: - return 0, errors.New("nopClosingBytesReader: invalid whence") - } - if i < 0 { - return 0, errors.New("nopClosingBytesReader: negative position") - } - r.i = i - return i, nil -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/log/doc.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/log/doc.go deleted file mode 100644 index d7876d297ae9..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/log/doc.go +++ /dev/null @@ -1,7 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package log diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/log/log.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/log/log.go deleted file mode 100644 index 4f1dcf1b78a6..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/log/log.go +++ /dev/null @@ -1,104 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package log - -import ( - "fmt" - "os" - "time" -) - -/////////////////////////////////////////////////////////////////////////////////////////////////// -// NOTE: The following are exported as public surface area from azcore. DO NOT MODIFY -/////////////////////////////////////////////////////////////////////////////////////////////////// - -// Event is used to group entries. Each group can be toggled on or off. -type Event string - -// SetEvents is used to control which events are written to -// the log. By default all log events are writen. -func SetEvents(cls ...Event) { - log.cls = cls -} - -// SetListener will set the Logger to write to the specified listener. -func SetListener(lst func(Event, string)) { - log.lst = lst -} - -/////////////////////////////////////////////////////////////////////////////////////////////////// -// END PUBLIC SURFACE AREA -/////////////////////////////////////////////////////////////////////////////////////////////////// - -// Should returns true if the specified log event should be written to the log. -// By default all log events will be logged. Call SetEvents() to limit -// the log events for logging. -// If no listener has been set this will return false. -// Calling this method is useful when the message to log is computationally expensive -// and you want to avoid the overhead if its log event is not enabled. -func Should(cls Event) bool { - if log.lst == nil { - return false - } - if log.cls == nil || len(log.cls) == 0 { - return true - } - for _, c := range log.cls { - if c == cls { - return true - } - } - return false -} - -// Write invokes the underlying listener with the specified event and message. -// If the event shouldn't be logged or there is no listener then Write does nothing. -func Write(cls Event, message string) { - if !Should(cls) { - return - } - log.lst(cls, message) -} - -// Writef invokes the underlying listener with the specified event and formatted message. -// If the event shouldn't be logged or there is no listener then Writef does nothing. -func Writef(cls Event, format string, a ...interface{}) { - if !Should(cls) { - return - } - log.lst(cls, fmt.Sprintf(format, a...)) -} - -// TestResetEvents is used for TESTING PURPOSES ONLY. -func TestResetEvents() { - log.cls = nil -} - -// logger controls which events to log and writing to the underlying log. -type logger struct { - cls []Event - lst func(Event, string) -} - -// the process-wide logger -var log logger - -func init() { - initLogging() -} - -// split out for testing purposes -func initLogging() { - if cls := os.Getenv("AZURE_SDK_GO_LOGGING"); cls == "all" { - // cls could be enhanced to support a comma-delimited list of log events - log.lst = func(cls Event, msg string) { - // simple console logger, it writes to stderr in the following format: - // [time-stamp] Event: message - fmt.Fprintf(os.Stderr, "[%s] %s: %s\n", time.Now().Format(time.StampMicro), cls, msg) - } - } -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/poller/util.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/poller/util.go deleted file mode 100644 index db8269627d39..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/poller/util.go +++ /dev/null @@ -1,155 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package poller - -import ( - "encoding/json" - "errors" - "fmt" - "net/http" - "net/url" - "strings" - - "github.com/Azure/azure-sdk-for-go/sdk/internal/exported" -) - -// the well-known set of LRO status/provisioning state values. -const ( - StatusSucceeded = "Succeeded" - StatusCanceled = "Canceled" - StatusFailed = "Failed" - StatusInProgress = "InProgress" -) - -// these are non-conformant states that we've seen in the wild. -// we support them for back-compat. -const ( - StatusCancelled = "Cancelled" - StatusCompleted = "Completed" -) - -// IsTerminalState returns true if the LRO's state is terminal. -func IsTerminalState(s string) bool { - return Failed(s) || Succeeded(s) -} - -// Failed returns true if the LRO's state is terminal failure. -func Failed(s string) bool { - return strings.EqualFold(s, StatusFailed) || strings.EqualFold(s, StatusCanceled) || strings.EqualFold(s, StatusCancelled) -} - -// Succeeded returns true if the LRO's state is terminal success. -func Succeeded(s string) bool { - return strings.EqualFold(s, StatusSucceeded) || strings.EqualFold(s, StatusCompleted) -} - -// returns true if the LRO response contains a valid HTTP status code -func StatusCodeValid(resp *http.Response) bool { - return exported.HasStatusCode(resp, http.StatusOK, http.StatusAccepted, http.StatusCreated, http.StatusNoContent) -} - -// IsValidURL verifies that the URL is valid and absolute. -func IsValidURL(s string) bool { - u, err := url.Parse(s) - return err == nil && u.IsAbs() -} - -// ErrNoBody is returned if the response didn't contain a body. -var ErrNoBody = errors.New("the response did not contain a body") - -// GetJSON reads the response body into a raw JSON object. -// It returns ErrNoBody if there was no content. -func GetJSON(resp *http.Response) (map[string]any, error) { - body, err := exported.Payload(resp, nil) - if err != nil { - return nil, err - } - if len(body) == 0 { - return nil, ErrNoBody - } - // unmarshall the body to get the value - var jsonBody map[string]any - if err = json.Unmarshal(body, &jsonBody); err != nil { - return nil, err - } - return jsonBody, nil -} - -// provisioningState returns the provisioning state from the response or the empty string. -func provisioningState(jsonBody map[string]any) string { - jsonProps, ok := jsonBody["properties"] - if !ok { - return "" - } - props, ok := jsonProps.(map[string]any) - if !ok { - return "" - } - rawPs, ok := props["provisioningState"] - if !ok { - return "" - } - ps, ok := rawPs.(string) - if !ok { - return "" - } - return ps -} - -// status returns the status from the response or the empty string. -func status(jsonBody map[string]any) string { - rawStatus, ok := jsonBody["status"] - if !ok { - return "" - } - status, ok := rawStatus.(string) - if !ok { - return "" - } - return status -} - -// GetStatus returns the LRO's status from the response body. -// Typically used for Azure-AsyncOperation flows. -// If there is no status in the response body the empty string is returned. -func GetStatus(resp *http.Response) (string, error) { - jsonBody, err := GetJSON(resp) - if err != nil { - return "", err - } - return status(jsonBody), nil -} - -// GetProvisioningState returns the LRO's state from the response body. -// If there is no state in the response body the empty string is returned. -func GetProvisioningState(resp *http.Response) (string, error) { - jsonBody, err := GetJSON(resp) - if err != nil { - return "", err - } - return provisioningState(jsonBody), nil -} - -// GetResourceLocation returns the LRO's resourceLocation value from the response body. -// Typically used for Operation-Location flows. -// If there is no resourceLocation in the response body the empty string is returned. -func GetResourceLocation(resp *http.Response) (string, error) { - jsonBody, err := GetJSON(resp) - if err != nil { - return "", err - } - v, ok := jsonBody["resourceLocation"] - if !ok { - // it might be ok if the field doesn't exist, the caller must make that determination - return "", nil - } - vv, ok := v.(string) - if !ok { - return "", fmt.Errorf("the resourceLocation value %v was not in string format", v) - } - return vv, nil -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/temporal/resource.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/temporal/resource.go deleted file mode 100644 index 238ef42ed03a..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/temporal/resource.go +++ /dev/null @@ -1,123 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package temporal - -import ( - "sync" - "time" -) - -// AcquireResource abstracts a method for refreshing a temporal resource. -type AcquireResource[TResource, TState any] func(state TState) (newResource TResource, newExpiration time.Time, err error) - -// Resource is a temporal resource (usually a credential) that requires periodic refreshing. -type Resource[TResource, TState any] struct { - // cond is used to synchronize access to the shared resource embodied by the remaining fields - cond *sync.Cond - - // acquiring indicates that some thread/goroutine is in the process of acquiring/updating the resource - acquiring bool - - // resource contains the value of the shared resource - resource TResource - - // expiration indicates when the shared resource expires; it is 0 if the resource was never acquired - expiration time.Time - - // lastAttempt indicates when a thread/goroutine last attempted to acquire/update the resource - lastAttempt time.Time - - // acquireResource is the callback function that actually acquires the resource - acquireResource AcquireResource[TResource, TState] -} - -// NewResource creates a new Resource that uses the specified AcquireResource for refreshing. -func NewResource[TResource, TState any](ar AcquireResource[TResource, TState]) *Resource[TResource, TState] { - return &Resource[TResource, TState]{cond: sync.NewCond(&sync.Mutex{}), acquireResource: ar} -} - -// Get returns the underlying resource. -// If the resource is fresh, no refresh is performed. -func (er *Resource[TResource, TState]) Get(state TState) (TResource, error) { - // If the resource is expiring within this time window, update it eagerly. - // This allows other threads/goroutines to keep running by using the not-yet-expired - // resource value while one thread/goroutine updates the resource. - const window = 5 * time.Minute // This example updates the resource 5 minutes prior to expiration - const backoff = 30 * time.Second // Minimum wait time between eager update attempts - - now, acquire, expired := time.Now(), false, false - - // acquire exclusive lock - er.cond.L.Lock() - resource := er.resource - - for { - expired = er.expiration.IsZero() || er.expiration.Before(now) - if expired { - // The resource was never acquired or has expired - if !er.acquiring { - // If another thread/goroutine is not acquiring/updating the resource, this thread/goroutine will do it - er.acquiring, acquire = true, true - break - } - // Getting here means that this thread/goroutine will wait for the updated resource - } else if er.expiration.Add(-window).Before(now) { - // The resource is valid but is expiring within the time window - if !er.acquiring && er.lastAttempt.Add(backoff).Before(now) { - // If another thread/goroutine is not acquiring/renewing the resource, and none has attempted - // to do so within the last 30 seconds, this thread/goroutine will do it - er.acquiring, acquire = true, true - break - } - // This thread/goroutine will use the existing resource value while another updates it - resource = er.resource - break - } else { - // The resource is not close to expiring, this thread/goroutine should use its current value - resource = er.resource - break - } - // If we get here, wait for the new resource value to be acquired/updated - er.cond.Wait() - } - er.cond.L.Unlock() // Release the lock so no threads/goroutines are blocked - - var err error - if acquire { - // This thread/goroutine has been selected to acquire/update the resource - var expiration time.Time - var newValue TResource - er.lastAttempt = now - newValue, expiration, err = er.acquireResource(state) - - // Atomically, update the shared resource's new value & expiration. - er.cond.L.Lock() - if err == nil { - // Update resource & expiration, return the new value - resource = newValue - er.resource, er.expiration = resource, expiration - } else if !expired { - // An eager update failed. Discard the error and return the current--still valid--resource value - err = nil - } - er.acquiring = false // Indicate that no thread/goroutine is currently acquiring the resource - - // Wake up any waiting threads/goroutines since there is a resource they can ALL use - er.cond.L.Unlock() - er.cond.Broadcast() - } - return resource, err // Return the resource this thread/goroutine can use -} - -// Expire marks the resource as expired, ensuring it's refreshed on the next call to Get(). -func (er *Resource[TResource, TState]) Expire() { - er.cond.L.Lock() - defer er.cond.L.Unlock() - - // Reset the expiration as if we never got this resource to begin with - er.expiration = time.Time{} -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/uuid/doc.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/uuid/doc.go deleted file mode 100644 index a3824bee8b5b..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/uuid/doc.go +++ /dev/null @@ -1,7 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package uuid diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/uuid/uuid.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/uuid/uuid.go deleted file mode 100644 index 278ac9cd1c2c..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/uuid/uuid.go +++ /dev/null @@ -1,76 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package uuid - -import ( - "crypto/rand" - "errors" - "fmt" - "strconv" -) - -// The UUID reserved variants. -const ( - reservedRFC4122 byte = 0x40 -) - -// A UUID representation compliant with specification in RFC4122 document. -type UUID [16]byte - -// New returns a new UUID using the RFC4122 algorithm. -func New() (UUID, error) { - u := UUID{} - // Set all bits to pseudo-random values. - // NOTE: this takes a process-wide lock - _, err := rand.Read(u[:]) - if err != nil { - return u, err - } - u[8] = (u[8] | reservedRFC4122) & 0x7F // u.setVariant(ReservedRFC4122) - - var version byte = 4 - u[6] = (u[6] & 0xF) | (version << 4) // u.setVersion(4) - return u, nil -} - -// String returns the UUID in "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" format. -func (u UUID) String() string { - return fmt.Sprintf("%x-%x-%x-%x-%x", u[0:4], u[4:6], u[6:8], u[8:10], u[10:]) -} - -// Parse parses a string formatted as "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" -// or "{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}" into a UUID. -func Parse(s string) (UUID, error) { - var uuid UUID - // ensure format - switch len(s) { - case 36: - // xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx - case 38: - // {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} - s = s[1:37] - default: - return uuid, errors.New("invalid UUID format") - } - if s[8] != '-' || s[13] != '-' || s[18] != '-' || s[23] != '-' { - return uuid, errors.New("invalid UUID format") - } - // parse chunks - for i, x := range [16]int{ - 0, 2, 4, 6, - 9, 11, - 14, 16, - 19, 21, - 24, 26, 28, 30, 32, 34} { - b, err := strconv.ParseUint(s[x:x+2], 16, 8) - if err != nil { - return uuid, fmt.Errorf("invalid UUID format: %s", err) - } - uuid[i] = byte(b) - } - return uuid, nil -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/CHANGELOG.md b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/CHANGELOG.md deleted file mode 100644 index db095b3a26ab..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/CHANGELOG.md +++ /dev/null @@ -1,54 +0,0 @@ -# Release History - -## 0.4.1 (2022-05-12) - -### Other Changes -* Updated to latest `azcore` and `internal` modules - -## 0.4.0 (2022-04-19) - -### Breaking Changes -* Fixed Issue #17150 : Renaming/refactoring high level methods. -* Fixed Issue #16972 : Constructors should return clients by reference. -* Renaming the options bags to match the naming convention same as that of response. The behaviour of options bags remains the same. - -### Bugs Fixed -* Fixed Issue #17515 : SetTags options bag missing leaseID. -* Fixed Issue #17423 : Drop "Type" suffix from `GeoReplicationStatusType`. -* Fixed Issue #17335 : Nil pointer exception when passing nil options bag in `ListBlobsFlat` API call. -* Fixed Issue #17188 : `BlobURLParts` not supporting VersionID -* Fixed Issue #17152 , Issue #17131 , Issue #17061 : `UploadStreamToBlockBlob` / `UploadStreamToBlockBlob` methods ignoring the options bag. -* Fixed Issue #16920 : Fixing error handling example. -* Fixed Issue #16786 : Refactoring of autorest code generation definition and adding necessary transformations. -* Fixed Issue #16679 : Response parsing issue in List blobs API. - -## 0.3.0 (2022-02-09) - -### Breaking Changes - -* Updated to latest `azcore`. Public surface area is unchanged. -* [#16978](https://github.com/Azure/azure-sdk-for-go/pull/16978): The `DownloadResponse.Body` parameter is - now `*RetryReaderOptions`. - -### Bugs Fixed - -* Fixed Issue #16193 : `azblob.GetSASToken` wrong signed resource. -* Fixed Issue #16223 : `HttpRange` does not expose its fields. -* Fixed Issue #16254 : Issue passing reader to upload `BlockBlobClient` -* Fixed Issue #16295 : Problem with listing blobs by using of `ListBlobsHierarchy()` -* Fixed Issue #16542 : Empty `StorageError` in the Azurite environment -* Fixed Issue #16679 : Unable to access Metadata when listing blobs -* Fixed Issue #16816 : `ContainerClient.GetSASToken` doesn't allow list permission. -* Fixed Issue #16988 : Too many arguments in call to `runtime.NewResponseError` - -## 0.2.0 (2021-11-03) - -### Breaking Changes - -* Clients now have one constructor per authentication method - -## 0.1.0 (2021-09-13) - -### Features Added - -* This is the initial preview release of the `azblob` library diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/LICENSE.txt b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/LICENSE.txt deleted file mode 100644 index d1ca00f20a89..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/LICENSE.txt +++ /dev/null @@ -1,21 +0,0 @@ - MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE \ No newline at end of file diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/README.md b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/README.md deleted file mode 100644 index 32a10a005c1e..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/README.md +++ /dev/null @@ -1,397 +0,0 @@ -# Azure Blob Storage SDK for Go - -## Introduction - -The Microsoft Azure Storage SDK for Go allows you to build applications that takes advantage of Azure's scalable cloud -storage. This is the new beta client module for Azure Blob Storage, which follows -our [Azure SDK Design Guidelines for Go](https://azure.github.io/azure-sdk/golang_introduction.html) and replaces the -previous beta [azblob package](https://github.com/azure/azure-storage-blob-go). - -## Getting Started - -The Azure Blob SDK can access an Azure Storage account. - -### Prerequisites - -* Go versions 1.18 or higher -* You must have an [Azure storage account][azure_storage_account]. If you need to create one, you can use - the [Azure Cloud Shell](https://shell.azure.com/bash) to create one with these commands (replace `my-resource-group` - and `mystorageaccount` with your own unique names): - (Optional) if you want a new resource group to hold the Storage Account: - ``` - az group create --name my-resource-group --location westus2 - ``` - Create the storage account: - ``` - az storage account create --resource-group my-resource-group --name mystorageaccount - ``` - - The storage account name can be queried with: - ``` - az storage account show -n mystorageaccount -g my-resource-group --query "primaryEndpoints.blob" - ``` - You can set this as an environment variable with: - ```bash - # PowerShell - $ENV:AZURE_STORAGE_ACCOUNT_NAME="mystorageaccount" - # bash - export AZURE_STORAGE_ACCOUNT_NAME="mystorageaccount" - ``` - - Query your storage account keys: - ``` - az storage account keys list --resource-group my-resource-group -n mystorageaccount - ``` - - Output: - ```json - [ - { - "creationTime": "2022-02-07T17:18:44.088870+00:00", - "keyName": "key1", - "permissions": "FULL", - "value": "..." - }, - { - "creationTime": "2022-02-07T17:18:44.088870+00:00", - "keyName": "key2", - "permissions": "FULL", - "value": "..." - } - ] - ``` - - ```bash - # PowerShell - $ENV:AZURE_STORAGE_ACCOUNT_KEY="" - # Bash - export AZURE_STORAGE_ACCOUNT_KEY="" - ``` - > You can obtain your account key from the Azure Portal under the "Access Keys" section on the left-hand pane of your storage account. - -#### Create account - -* To create a new Storage account, you can use [Azure Portal][azure_portal_create_account] - , [Azure PowerShell][azure_powershell_create_account], or [Azure CLI][azure_cli_create_account]. - -### Install the package - -* Install the Azure Blob Storage client module for Go with `go get`: - -```bash -go get github.com/Azure/azure-sdk-for-go/sdk/storage/azblob -``` - -> Optional: If you are going to use AAD authentication, install the `azidentity` package: - -```bash -go get github.com/Azure/azure-sdk-for-go/sdk/azidentity -``` - -#### Create the client - -`azblob` allows you to interact with three types of resources :- - -* [Azure storage accounts][azure_storage_account]. -* [Containers](https://azure.microsoft.com/en-in/overview/what-is-a-container/#overview) within those storage accounts. -* [Blobs](https://azure.microsoft.com/en-in/services/storage/blobs/#overview) (block blobs/ page blobs/ append blobs) - within those containers. - -Interaction with these resources starts with an instance of a [client](#clients). To create a client object, you will -need the account's blob service endpoint URL and a credential that allows you to access the account. The `endpoint` can -be found on the page for your storage account in the [Azure Portal][azure_portal_account_url] under the "Access Keys" -section or by running the following Azure CLI command: - -```bash -# Get the blob service URL for the account -az storage account show -n mystorageaccount -g my-resource-group --query "primaryEndpoints.blob" -``` - -Once you have the account URL, it can be used to create the service client: - -```golang -cred, err := azblob.NewSharedKeyCredential("myAccountName", "myAccountKey") -handle(err) -serviceClient, err := azblob.NewServiceClientWithSharedKey("https://.blob.core.windows.net/", cred, nil) -handle(err) -``` - -For more information about blob service URL's and how to configure custom domain names for Azure Storage check out -the [official documentation][azure_portal_account_url] - -#### Types of credentials - -The azblob clients support authentication via Shared Key Credential, Connection String, Shared Access Signature, or any -of the `azidentity` types that implement the `azcore.TokenCredential` interface. - -##### 1. Creating the client from a shared key - -To use an account [shared key][azure_shared_key] (aka account key or access key), provide the key as a string. This can -be found in your storage account in the [Azure Portal][azure_portal_account_url] under the "Access Keys" section or by -running the following Azure CLI command: - -```bash -az storage account keys list -g my-resource-group -n mystorageaccount -``` - -Use Shared Key authentication as the credential parameter to authenticate the client: - -```golang -credential, err := azblob.NewSharedKeyCredential("accountName", "accountKey") -handle(err) -serviceClient, err := azblob.NewServiceClientWithSharedKey("https://.blob.core.windows.net/", credential, nil) -handle(err) -``` - -##### 2. Creating the client from a connection string - -You can use connection string, instead of providing the account URL and credential separately, for authentication as -well. To do this, pass the connection string to the client's `NewServiceClientFromConnectionString` method. The -connection string can be found in your storage account in the [Azure Portal][azure_portal_account_url] under the "Access -Keys" section or with the following Azure CLI command: - -```bash -az storage account show-connection-string -g my-resource-group -n mystorageaccount -``` - -```golang -connStr := "DefaultEndpointsProtocol=https;AccountName=;AccountKey=;EndpointSuffix=core.windows.net" -serviceClient, err := azblob.NewServiceClientFromConnectionString(connStr, nil) -``` - -##### 3. Creating the client from a SAS token - -To use a [shared access signature (SAS) token][azure_sas_token], provide the token as a string. You can generate a SAS -token from the Azure Portal -under [Shared access signature](https://docs.microsoft.com/rest/api/storageservices/create-service-sas) or use -the `ServiceClient.GetSASToken` or `ContainerClient.GetSASToken()` methods. - -```golang -credential, err := azblob.NewSharedKeyCredential("accountName", "accountKey") -handle(err) -serviceClient, err := azblob.NewServiceClientWithSharedKey(fmt.Sprintf("https://%s.blob.core.windows.net/", accountName), credential, nil) -handle(err) -// Provide the convenience function with relevant info (services, resource types, permissions, and duration) -// The SAS token will be valid from this moment onwards. -accountSAS, err := serviceClient.GetSASToken(AccountSASResourceTypes{Object: true, Service: true, Container: true}, -AccountSASPermissions{Read: true, List: true}, AccountSASServices{Blob: true}, time.Now(), time.Now().Add(48*time.Hour)) -handle(err) -sasURL := fmt.Sprintf("https://%s.blob.core.windows.net/?%s", accountName, accountSAS) - -// The sasURL can be used to authenticate a client without need for a credential -serviceClient, err = NewServiceClientWithNoCredential(sasURL, nil) -handle(err) -``` - -### Clients - -Three different clients are provided to interact with the various components of the Blob Service: - -1. **`ServiceClient`** - * Get and set account settings. - * Query, create, and delete containers within the account. - -2. **`ContainerClient`** - * Get and set container access settings, properties, and metadata. - * Create, delete, and query blobs within the container. - * `ContainerLeaseClient` to support container lease management. - -3. **`BlobClient`** - * `AppendBlobClient`, `BlockBlobClient`, and `PageBlobClient` - * Get and set blob properties. - * Perform CRUD operations on a given blob. - * `BlobLeaseClient` to support blob lease management. - -### Example - -```go -// Use your storage account's name and key to create a credential object, used to access your account. -// You can obtain these details from the Azure Portal. -accountName, ok := os.LookupEnv("AZURE_STORAGE_ACCOUNT_NAME") -if !ok { - handle(errors.New("AZURE_STORAGE_ACCOUNT_NAME could not be found")) -} - -accountKey, ok := os.LookupEnv("AZURE_STORAGE_ACCOUNT_KEY") -if !ok { - handle(errors.New("AZURE_STORAGE_ACCOUNT_KEY could not be found")) -} -cred, err := NewSharedKeyCredential(accountName, accountKey) -handle(err) - -// Open up a service client. -// You'll need to specify a service URL, which for blob endpoints usually makes up the syntax http(s)://.blob.core.windows.net/ -service, err := NewServiceClientWithSharedKey(fmt.Sprintf("https://%s.blob.core.windows.net/", accountName), cred, nil) -handle(err) - -// All operations in the Azure Blob Storage SDK for Go operate on a context.Context, allowing you to control cancellation/timeout. -ctx := context.Background() // This example has no expiry. - -// This example showcases several common operations to help you get started, such as: - -// ===== 1. Creating a container ===== - -// First, branch off of the service client and create a container client. -container := service.NewContainerClient("mycontainer") - -// Then, fire off a create operation on the container client. -// Note that, all service-side requests have an options bag attached, allowing you to specify things like metadata, public access types, etc. -// Specifying nil omits all options. -_, err = container.Create(ctx, nil) -handle(err) - -// ===== 2. Uploading/downloading a block blob ===== -// We'll specify our data up-front, rather than reading a file for simplicity's sake. -data := "Hello world!" - -// Branch off of the container into a block blob client -blockBlob := container.NewBlockBlobClient("HelloWorld.txt") - -// Upload data to the block blob -_, err = blockBlob.Upload(ctx, NopCloser(strings.NewReader(data)), nil) -handle(err) - -// Download the blob's contents and ensure that the download worked properly -get, err := blockBlob.Download(ctx, nil) -handle(err) - -// Open a buffer, reader, and then download! -downloadedData := &bytes.Buffer{} -// RetryReaderOptions has a lot of in-depth tuning abilities, but for the sake of simplicity, we'll omit those here. -reader := get.Body(RetryReaderOptions{}) -_, err = downloadedData.ReadFrom(reader) -handle(err) -err = reader.Close() -handle(err) -if data != downloadedData.String() { - handle(errors.New("downloaded data doesn't match uploaded data")) -} - -// ===== 3. list blobs ===== -// The ListBlobs and ListContainers APIs return two channels, a values channel, and an errors channel. -// You should enumerate on a range over the values channel, and then check the errors channel, as only ONE value will ever be passed to the errors channel. -// The AutoPagerTimeout defines how long it will wait to place into the items channel before it exits & cleans itself up. A zero time will result in no timeout. -pager := container.ListBlobsFlat(nil) - -for pager.NextPage(ctx) { - resp := pager.PageResponse() - - for _, v := range resp.ContainerListBlobFlatSegmentResult.Segment.BlobItems { - fmt.Println(*v.Name) - } -} - -if err = pager.Err(); err != nil { - handle(err) -} - -// Delete the blob we created earlier. -_, err = blockBlob.Delete(ctx, nil) -handle(err) - -// Delete the container we created earlier. -_, err = container.Delete(ctx, nil) -handle(err) -``` - -## Troubleshooting - -### Error Handling - -All I/O operations will return an `error` that can be investigated to discover more information about the error. In -addition, you can investigate the raw response of any response object: - -```golang -var storageErr *azblob.StorageError -resp, err := serviceClient.CreateContainer(context.Background(), "testcontainername", nil) -if err != nil && errors.As(err, &storageErr) { - // do something with storageErr.Response() -} -``` - -### Logging - -This module uses the classification based logging implementation in azcore. To turn on logging -set `AZURE_SDK_GO_LOGGING` to `all`. - -If you only want to include logs for `azblob`, you must create your own logger and set the log classification -as `LogCredential`. - -To obtain more detailed logging, including request/response bodies and header values, make sure to leave the logger as -default or enable the `LogRequest` and/or `LogResponse` classificatons. A logger that only includes credential logs can -be like the following: - -```golang -import azlog "github.com/Azure/azure-sdk-for-go/sdk/azcore/log" -// Set log to output to the console -azlog.SetListener(func (cls azlog.Classification, msg string) { - fmt.Println(msg) // printing log out to the console -}) - -// Includes only requests and responses in credential logs -azlog.SetClassifications(azlog.Request, azlog.Response) -``` - -> CAUTION: logs from credentials contain sensitive information. -> These logs must be protected to avoid compromising account security. -> - -## License - -This project is licensed under MIT. - -## Provide Feedback - -If you encounter bugs or have suggestions, please -[open an issue](https://github.com/Azure/azure-sdk-for-go/issues) and assign the `Azure.AzBlob` label. - -## Contributing - -This project welcomes contributions and suggestions. Most contributions require you to agree to a Contributor License -Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. For -details, visit https://cla.microsoft.com. - -When you submit a pull request, a CLA-bot will automatically determine whether you need to provide a CLA and decorate -the PR appropriately (e.g., label, comment). Simply follow the instructions provided by the bot. You will only need to -do this once across all repos using our CLA. - -This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). -For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or -contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. - - - - -[azure_subscription]:https://azure.microsoft.com/free/ - -[azure_storage_account]:https://docs.microsoft.com/azure/storage/common/storage-account-create?tabs=azure-portal - -[azure_portal_create_account]:https://docs.microsoft.com/azure/storage/common/storage-account-create?tabs=azure-portal - -[azure_powershell_create_account]:https://docs.microsoft.com/azure/storage/common/storage-account-create?tabs=azure-powershell - -[azure_cli_create_account]: https://docs.microsoft.com/azure/storage/common/storage-account-create?tabs=azure-cli - -[azure_cli_account_url]:https://docs.microsoft.com/cli/azure/storage/account?view=azure-cli-latest#az-storage-account-show - -[azure_powershell_account_url]:https://docs.microsoft.com/powershell/module/az.storage/get-azstorageaccount?view=azps-4.6.1 - -[azure_portal_account_url]:https://docs.microsoft.com/azure/storage/common/storage-account-overview#storage-account-endpoints - -[azure_sas_token]:https://docs.microsoft.com/azure/storage/common/storage-sas-overview - -[azure_shared_key]:https://docs.microsoft.com/rest/api/storageservices/authorize-with-shared-key - -[azure_core_ref_docs]:https://pkg.go.dev/github.com/Azure/azure-sdk-for-go/sdk/azcore - -[azure_core_readme]: https://github.com/Azure/azure-sdk-for-go/blob/main/sdk/azcore/README.md - -[blobs_error_codes]: https://docs.microsoft.com/en-us/rest/api/storageservices/blob-service-error-codes - -[msft_oss_coc]:https://opensource.microsoft.com/codeofconduct/ - -[msft_oss_coc_faq]:https://opensource.microsoft.com/codeofconduct/faq/ - -[contact_msft_oss]:mailto:opencode@microsoft.com - -[blobs_rest]: https://docs.microsoft.com/en-us/rest/api/storageservices/blob-service-rest-api diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/autorest.md b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/autorest.md deleted file mode 100644 index 0a391904aac4..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/autorest.md +++ /dev/null @@ -1,171 +0,0 @@ -# Code Generation - Azure Blob SDK for Golang - - - -```bash -cd swagger -autorest autorest.md -gofmt -w generated/* -``` - -### Settings - -```yaml -go: true -clear-output-folder: false -version: "^3.0.0" -license-header: MICROSOFT_MIT_NO_VERSION -input-file: "https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/specification/storage/data-plane/Microsoft.BlobStorage/preview/2020-10-02/blob.json" -module: "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob" -credential-scope: "https://storage.azure.com/.default" -output-folder: internal/ -file-prefix: "zz_generated_" -openapi-type: "data-plane" -verbose: true -security: AzureKey -module-version: "0.3.0" -modelerfour: - group-parameters: false - seal-single-value-enum-by-default: true - lenient-model-deduplication: true -export-clients: false -use: "@autorest/go@4.0.0-preview.36" -``` - -### Fix BlobMetadata. - -``` yaml -directive: -- from: swagger-document - where: $.definitions - transform: > - delete $.BlobMetadata["properties"]; - -``` - -### Don't include container name or blob in path - we have direct URIs. - -``` yaml -directive: -- from: swagger-document - where: $["x-ms-paths"] - transform: > - for (const property in $) - { - if (property.includes('/{containerName}/{blob}')) - { - $[property]["parameters"] = $[property]["parameters"].filter(function(param) { return (typeof param['$ref'] === "undefined") || (false == param['$ref'].endsWith("#/parameters/ContainerName") && false == param['$ref'].endsWith("#/parameters/Blob"))}); - } - else if (property.includes('/{containerName}')) - { - $[property]["parameters"] = $[property]["parameters"].filter(function(param) { return (typeof param['$ref'] === "undefined") || (false == param['$ref'].endsWith("#/parameters/ContainerName"))}); - } - } -``` - -### Remove DataLake stuff. - -``` yaml -directive: -- from: swagger-document - where: $["x-ms-paths"] - transform: > - for (const property in $) - { - if (property.includes('filesystem')) - { - delete $[property]; - } - } -``` - -### Remove DataLakeStorageError - -``` yaml -directive: -- from: swagger-document - where: $.definitions - transform: > - delete $.DataLakeStorageError; -``` - -### Fix 304s - -``` yaml -directive: -- from: swagger-document - where: $["x-ms-paths"]["/{containerName}/{blob}"] - transform: > - $.get.responses["304"] = { - "description": "The condition specified using HTTP conditional header(s) is not met.", - "x-az-response-name": "ConditionNotMetError", - "headers": { "x-ms-error-code": { "x-ms-client-name": "ErrorCode", "type": "string" } } - }; -``` - -### Fix GeoReplication - -``` yaml -directive: -- from: swagger-document - where: $.definitions - transform: > - delete $.GeoReplication.properties.Status["x-ms-enum"]; - $.GeoReplication.properties.Status["x-ms-enum"] = { - "name": "BlobGeoReplicationStatus", - "modelAsString": false - }; -``` - -### Fix RehydratePriority - -``` yaml -directive: -- from: swagger-document - where: $.definitions - transform: > - delete $.RehydratePriority["x-ms-enum"]; - $.RehydratePriority["x-ms-enum"] = { - "name": "RehydratePriority", - "modelAsString": false - }; -``` - -### Fix BlobDeleteType - -``` yaml -directive: -- from: swagger-document - where: $.parameters - transform: > - delete $.BlobDeleteType.enum; - $.BlobDeleteType.enum = [ - "None", - "Permanent" - ]; -``` - -### Fix EncryptionAlgorithm - -``` yaml -directive: -- from: swagger-document - where: $.parameters - transform: > - delete $.EncryptionAlgorithm.enum; - $.EncryptionAlgorithm.enum = [ - "None", - "AES256" - ]; -``` - -### Fix XML string "ObjectReplicationMetadata" to "OrMetadata" - -``` yaml -directive: -- from: swagger-document - where: $.definitions - transform: > - $.BlobItemInternal.properties["OrMetadata"] = $.BlobItemInternal.properties["ObjectReplicationMetadata"]; - delete $.BlobItemInternal.properties["ObjectReplicationMetadata"]; -``` diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/bytes_writer.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/bytes_writer.go deleted file mode 100644 index 14c7feda1105..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/bytes_writer.go +++ /dev/null @@ -1,30 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azblob - -import ( - "errors" -) - -type bytesWriter []byte - -func newBytesWriter(b []byte) bytesWriter { - return b -} - -func (c bytesWriter) WriteAt(b []byte, off int64) (int, error) { - if off >= int64(len(c)) || off < 0 { - return 0, errors.New("offset value is out of range") - } - - n := copy(c[int(off):], b) - if n < len(b) { - return n, errors.New("not enough space for all bytes") - } - - return n, nil -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/chunkwriting.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/chunkwriting.go deleted file mode 100644 index d5ccdfb40766..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/chunkwriting.go +++ /dev/null @@ -1,231 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azblob - -import ( - "bytes" - "context" - "encoding/base64" - "encoding/binary" - "errors" - "fmt" - "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/internal" - "io" - "sync" - "sync/atomic" - - "github.com/Azure/azure-sdk-for-go/sdk/internal/uuid" -) - -// blockWriter provides methods to upload blocks that represent a file to a server and commit them. -// This allows us to provide a local implementation that fakes the server for hermetic testing. -type blockWriter interface { - StageBlock(context.Context, string, io.ReadSeekCloser, *BlockBlobStageBlockOptions) (BlockBlobStageBlockResponse, error) - CommitBlockList(context.Context, []string, *BlockBlobCommitBlockListOptions) (BlockBlobCommitBlockListResponse, error) -} - -// copyFromReader copies a source io.Reader to blob storage using concurrent uploads. -// TODO(someone): The existing model provides a buffer size and buffer limit as limiting factors. The buffer size is probably -// useless other than needing to be above some number, as the network stack is going to hack up the buffer over some size. The -// max buffers is providing a cap on how much memory we use (by multiplying it times the buffer size) and how many go routines can upload -// at a time. I think having a single max memory dial would be more efficient. We can choose an internal buffer size that works -// well, 4 MiB or 8 MiB, and auto-scale to as many goroutines within the memory limit. This gives a single dial to tweak and we can -// choose a max value for the memory setting based on internal transfers within Azure (which will give us the maximum throughput model). -// We can even provide a utility to dial this number in for customer networks to optimize their copies. -func copyFromReader(ctx context.Context, from io.Reader, to blockWriter, o UploadStreamOptions) (BlockBlobCommitBlockListResponse, error) { - if err := o.defaults(); err != nil { - return BlockBlobCommitBlockListResponse{}, err - } - - ctx, cancel := context.WithCancel(ctx) - defer cancel() - - var err error - generatedUuid, err := uuid.New() - if err != nil { - return BlockBlobCommitBlockListResponse{}, err - } - - cp := &copier{ - ctx: ctx, - cancel: cancel, - reader: from, - to: to, - id: newID(generatedUuid), - o: o, - errCh: make(chan error, 1), - } - - // Send all our chunks until we get an error. - for { - if err = cp.sendChunk(); err != nil { - break - } - } - // If the error is not EOF, then we have a problem. - if err != nil && !errors.Is(err, io.EOF) { - return BlockBlobCommitBlockListResponse{}, err - } - - // Close out our upload. - if err := cp.close(); err != nil { - return BlockBlobCommitBlockListResponse{}, err - } - - return cp.result, nil -} - -// copier streams a file via chunks in parallel from a reader representing a file. -// Do not use directly, instead use copyFromReader(). -type copier struct { - // ctx holds the context of a copier. This is normally a faux pas to store a Context in a struct. In this case, - // the copier has the lifetime of a function call, so it's fine. - ctx context.Context - cancel context.CancelFunc - - // reader is the source to be written to storage. - reader io.Reader - // to is the location we are writing our chunks to. - to blockWriter - - // o contains our options for uploading. - o UploadStreamOptions - - // id provides the ids for each chunk. - id *id - - //// num is the current chunk we are on. - //num int32 - //// ch is used to pass the next chunk of data from our reader to one of the writers. - //ch chan copierChunk - - // errCh is used to hold the first error from our concurrent writers. - errCh chan error - // wg provides a count of how many writers we are waiting to finish. - wg sync.WaitGroup - - // result holds the final result from blob storage after we have submitted all chunks. - result BlockBlobCommitBlockListResponse -} - -type copierChunk struct { - buffer []byte - id string - length int -} - -// getErr returns an error by priority. First, if a function set an error, it returns that error. Next, if the Context has an error -// it returns that error. Otherwise, it is nil. getErr supports only returning an error once per copier. -func (c *copier) getErr() error { - select { - case err := <-c.errCh: - return err - default: - } - return c.ctx.Err() -} - -// sendChunk reads data from out internal reader, creates a chunk, and sends it to be written via a channel. -// sendChunk returns io.EOF when the reader returns an io.EOF or io.ErrUnexpectedEOF. -func (c *copier) sendChunk() error { - if err := c.getErr(); err != nil { - return err - } - - buffer := c.o.TransferManager.Get() - if len(buffer) == 0 { - return fmt.Errorf("TransferManager returned a 0 size buffer, this is a bug in the manager") - } - - n, err := io.ReadFull(c.reader, buffer) - if n > 0 { - // Some data was read, schedule the write. - id := c.id.next() - c.wg.Add(1) - c.o.TransferManager.Run( - func() { - defer c.wg.Done() - c.write(copierChunk{buffer: buffer, id: id, length: n}) - }, - ) - } else { - // Return the unused buffer to the manager. - c.o.TransferManager.Put(buffer) - } - - if err == nil { - return nil - } else if err == io.EOF || err == io.ErrUnexpectedEOF { - return io.EOF - } - - if cerr := c.getErr(); cerr != nil { - return cerr - } - - return err -} - -// write uploads a chunk to blob storage. -func (c *copier) write(chunk copierChunk) { - defer c.o.TransferManager.Put(chunk.buffer) - - if err := c.ctx.Err(); err != nil { - return - } - stageBlockOptions := c.o.getStageBlockOptions() - _, err := c.to.StageBlock(c.ctx, chunk.id, internal.NopCloser(bytes.NewReader(chunk.buffer[:chunk.length])), stageBlockOptions) - if err != nil { - c.errCh <- fmt.Errorf("write error: %w", err) - return - } -} - -// close commits our blocks to blob storage and closes our writer. -func (c *copier) close() error { - c.wg.Wait() - - if err := c.getErr(); err != nil { - return err - } - - var err error - commitBlockListOptions := c.o.getCommitBlockListOptions() - c.result, err = c.to.CommitBlockList(c.ctx, c.id.issued(), commitBlockListOptions) - return err -} - -// id allows the creation of unique IDs based on UUID4 + an int32. This auto-increments. -type id struct { - u [64]byte - num uint32 - all []string -} - -// newID constructs a new id. -func newID(uu uuid.UUID) *id { - u := [64]byte{} - copy(u[:], uu[:]) - return &id{u: u} -} - -// next returns the next ID. -func (id *id) next() string { - defer atomic.AddUint32(&id.num, 1) - - binary.BigEndian.PutUint32(id.u[len(uuid.UUID{}):], atomic.LoadUint32(&id.num)) - str := base64.StdEncoding.EncodeToString(id.u[:]) - id.all = append(id.all, str) - - return str -} - -// issued returns all ids that have been issued. This returned value shares the internal slice, so it is not safe to modify the return. -// The value is only valid until the next time next() is called. -func (id *id) issued() []string { - return id.all -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/ci.yml b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/ci.yml deleted file mode 100644 index e0623f50e855..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/ci.yml +++ /dev/null @@ -1,28 +0,0 @@ -trigger: - branches: - include: - - main - - feature/* - - hotfix/* - - release/* - paths: - include: - - sdk/storage/azblob - -pr: - branches: - include: - - main - - feature/* - - hotfix/* - - release/* - paths: - include: - - sdk/storage/azblob - - -stages: - - template: /eng/pipelines/templates/jobs/archetype-sdk-client.yml - parameters: - ServiceDirectory: 'storage/azblob' - RunLiveTests: true diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/connection.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/connection.go deleted file mode 100644 index c5d501c66101..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/connection.go +++ /dev/null @@ -1,39 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -package azblob - -import ( - "github.com/Azure/azure-sdk-for-go/sdk/azcore" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime" -) - -type connection struct { - u string - p runtime.Pipeline -} - -// newConnection creates an instance of the connection type with the specified endpoint. -// Pass nil to accept the default options; this is the same as passing a zero-value options. -func newConnection(endpoint string, options *azcore.ClientOptions) *connection { - cp := azcore.ClientOptions{} - if options != nil { - cp = *options - } - return &connection{u: endpoint, p: runtime.NewPipeline(moduleName, moduleVersion, runtime.PipelineOptions{}, &cp)} -} - -// Endpoint returns the connection's endpoint. -func (c *connection) Endpoint() string { - return c.u -} - -// Pipeline returns the connection's pipeline. -func (c *connection) Pipeline() runtime.Pipeline { - return c.p -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/constants.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/constants.go deleted file mode 100644 index c1c336ed4665..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/constants.go +++ /dev/null @@ -1,46 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azblob - -var SASVersion = "2019-12-12" - -//nolint -const ( - // BlockBlobMaxUploadBlobBytes indicates the maximum number of bytes that can be sent in a call to Upload. - BlockBlobMaxUploadBlobBytes = 256 * 1024 * 1024 // 256MB - - // BlockBlobMaxStageBlockBytes indicates the maximum number of bytes that can be sent in a call to StageBlock. - BlockBlobMaxStageBlockBytes = 4000 * 1024 * 1024 // 4GB - - // BlockBlobMaxBlocks indicates the maximum number of blocks allowed in a block blob. - BlockBlobMaxBlocks = 50000 - - // PageBlobPageBytes indicates the number of bytes in a page (512). - PageBlobPageBytes = 512 - - // BlobDefaultDownloadBlockSize is default block size - BlobDefaultDownloadBlockSize = int64(4 * 1024 * 1024) // 4MB -) - -const ( - headerAuthorization = "Authorization" - headerXmsDate = "x-ms-date" - headerContentLength = "Content-Length" - headerContentEncoding = "Content-Encoding" - headerContentLanguage = "Content-Language" - headerContentType = "Content-Type" - headerContentMD5 = "Content-MD5" - headerIfModifiedSince = "If-Modified-Since" - headerIfMatch = "If-Match" - headerIfNoneMatch = "If-None-Match" - headerIfUnmodifiedSince = "If-Unmodified-Since" - headerRange = "Range" -) - -const ( - tokenScope = "https://storage.azure.com/.default" -) diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/doc.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/doc.go deleted file mode 100644 index c2426eb7005f..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/doc.go +++ /dev/null @@ -1,214 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright 2017 Microsoft Corporation. All rights reserved. -// Use of this source code is governed by an MIT -// license that can be found in the LICENSE file. - -/* - -Package azblob can access an Azure Blob Storage. - -The azblob package is capable of :- - - Creating, deleting, and querying containers in an account - - Creating, deleting, and querying blobs in a container - - Creating Shared Access Signature for authentication - -Types of Resources - -The azblob package allows you to interact with three types of resources :- - -* Azure storage accounts. -* Containers within those storage accounts. -* Blobs (block blobs/ page blobs/ append blobs) within those containers. - -The Azure Blob Storage (azblob) client library for Go allows you to interact with each of these components through the use of a dedicated client object. -To create a client object, you will need the account's blob service endpoint URL and a credential that allows you to access the account. - -Types of Credentials - -The clients support different forms of authentication. -The azblob library supports any of the `azcore.TokenCredential` interfaces, authorization via a Connection String, -or authorization with a Shared Access Signature token. - -Using a Shared Key - -To use an account shared key (aka account key or access key), provide the key as a string. -This can be found in your storage account in the Azure Portal under the "Access Keys" section. - -Use the key as the credential parameter to authenticate the client: - - accountName, ok := os.LookupEnv("AZURE_STORAGE_ACCOUNT_NAME") - if !ok { - panic("AZURE_STORAGE_ACCOUNT_NAME could not be found") - } - accountKey, ok := os.LookupEnv("AZURE_STORAGE_ACCOUNT_KEY") - if !ok { - panic("AZURE_STORAGE_ACCOUNT_KEY could not be found") - } - - serviceURL := fmt.Sprintf("https://%s.blob.core.windows.net/", accountName) - - cred, err := azblob.NewSharedKeyCredential(accountName, accountKey) - handle(err) - - serviceClient, err := azblob.NewServiceClientWithSharedKey(serviceURL, cred, nil) - handle(err) - - fmt.Println(serviceClient.URL()) - -Using a Connection String - -Depending on your use case and authorization method, you may prefer to initialize a client instance with a connection string instead of providing the account URL and credential separately. -To do this, pass the connection string to the service client's `NewServiceClientFromConnectionString` method. -The connection string can be found in your storage account in the Azure Portal under the "Access Keys" section. - - connStr := "DefaultEndpointsProtocol=https;AccountName=;AccountKey=;EndpointSuffix=core.windows.net" - serviceClient, err := azblob.NewServiceClientFromConnectionString(connStr, nil) - -Using a Shared Access Signature (SAS) Token - -To use a shared access signature (SAS) token, provide the token at the end of your service URL. -You can generate a SAS token from the Azure Portal under Shared Access Signature or use the ServiceClient.GetSASToken() functions. - - accountName, ok := os.LookupEnv("AZURE_STORAGE_ACCOUNT_NAME") - if !ok { - panic("AZURE_STORAGE_ACCOUNT_NAME could not be found") - } - accountKey, ok := os.LookupEnv("AZURE_STORAGE_ACCOUNT_KEY") - if !ok { - panic("AZURE_STORAGE_ACCOUNT_KEY could not be found") - } - serviceURL := fmt.Sprintf("https://%s.blob.core.windows.net/", accountName) - - cred, err := azblob.NewSharedKeyCredential(accountName, accountKey) - handle(err) - serviceClient, err := azblob.NewServiceClientWithSharedKey(serviceURL, cred, nil) - handle(err) - fmt.Println(serviceClient.URL()) - - // Alternatively, you can create SAS on the fly - - resources := azblob.AccountSASResourceTypes{Service: true} - permission := azblob.AccountSASPermissions{Read: true} - start := time.Now() - expiry := start.AddDate(0, 0, 1) - serviceURLWithSAS, err := serviceClient.GetSASURL(resources, permission, start, expiry) - handle(err) - - serviceClientWithSAS, err := azblob.NewServiceClientWithNoCredential(serviceURLWithSAS, nil) - handle(err) - - fmt.Println(serviceClientWithSAS.URL()) - -Types of Clients - -There are three different clients provided to interact with the various components of the Blob Service: - -1. **`ServiceClient`** - * Get and set account settings. - * Query, create, and delete containers within the account. - -2. **`ContainerClient`** - * Get and set container access settings, properties, and metadata. - * Create, delete, and query blobs within the container. - * `ContainerLeaseClient` to support container lease management. - -3. **`BlobClient`** - * `AppendBlobClient`, `BlockBlobClient`, and `PageBlobClient` - * Get and set blob properties. - * Perform CRUD operations on a given blob. - * `BlobLeaseClient` to support blob lease management. - -Examples - - // Your account name and key can be obtained from the Azure Portal. - accountName, ok := os.LookupEnv("AZURE_STORAGE_ACCOUNT_NAME") - if !ok { - panic("AZURE_STORAGE_ACCOUNT_NAME could not be found") - } - - accountKey, ok := os.LookupEnv("AZURE_STORAGE_ACCOUNT_KEY") - if !ok { - panic("AZURE_STORAGE_ACCOUNT_KEY could not be found") - } - cred, err := azblob.NewSharedKeyCredential(accountName, accountKey) - handle(err) - - // The service URL for blob endpoints is usually in the form: http(s)://.blob.core.windows.net/ - serviceClient, err := azblob.NewServiceClientWithSharedKey(fmt.Sprintf("https://%s.blob.core.windows.net/", accountName), cred, nil) - handle(err) - - // ===== 1. Create a container ===== - - // First, create a container client, and use the Create method to create a new container in your account - containerClient, err := serviceClient.NewContainerClient("testcontainer") - handle(err) - - // All APIs have an options' bag struct as a parameter. - // The options' bag struct allows you to specify optional parameters such as metadata, public access types, etc. - // If you want to use the default options, pass in nil. - _, err = containerClient.Create(context.TODO(), nil) - handle(err) - - // ===== 2. Upload and Download a block blob ===== - uploadData := "Hello world!" - - // Create a new blockBlobClient from the containerClient - blockBlobClient, err := containerClient.NewBlockBlobClient("HelloWorld.txt") - handle(err) - - // Upload data to the block blob - blockBlobUploadOptions := azblob.BlockBlobUploadOptions{ - Metadata: map[string]string{"Foo": "Bar"}, - TagsMap: map[string]string{"Year": "2022"}, - } - _, err = blockBlobClient.Upload(context.TODO(), streaming.NopCloser(strings.NewReader(uploadData)), &blockBlobUploadOptions) - handle(err) - - // Download the blob's contents and ensure that the download worked properly - blobDownloadResponse, err := blockBlobClient.Download(context.TODO(), nil) - handle(err) - - // Use the bytes.Buffer object to read the downloaded data. - // RetryReaderOptions has a lot of in-depth tuning abilities, but for the sake of simplicity, we'll omit those here. - reader := blobDownloadResponse.Body(nil) - downloadData, err := ioutil.ReadAll(reader) - handle(err) - if string(downloadData) != uploadData { - handle(errors.New("Uploaded data should be same as downloaded data")) - } - - - if err = reader.Close(); err != nil { - handle(err) - return - } - - // ===== 3. List blobs ===== - // List methods returns a pager object which can be used to iterate over the results of a paging operation. - // To iterate over a page use the NextPage(context.Context) to fetch the next page of results. - // PageResponse() can be used to iterate over the results of the specific page. - // Always check the Err() method after paging to see if an error was returned by the pager. A pager will return either an error or the page of results. - pager := containerClient.ListBlobsFlat(nil) - for pager.NextPage(context.TODO()) { - resp := pager.PageResponse() - for _, v := range resp.Segment.BlobItems { - fmt.Println(*v.Name) - } - } - - if err = pager.Err(); err != nil { - handle(err) - } - - // Delete the blob. - _, err = blockBlobClient.Delete(context.TODO(), nil) - handle(err) - - // Delete the container. - _, err = containerClient.Delete(context.TODO(), nil) - handle(err) -*/ - -package azblob diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/highlevel.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/highlevel.go deleted file mode 100644 index 28725003981f..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/highlevel.go +++ /dev/null @@ -1,316 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azblob - -import ( - "context" - "encoding/base64" - "io" - "net/http" - "sync" - - "github.com/Azure/azure-sdk-for-go/sdk/azcore/streaming" - "github.com/Azure/azure-sdk-for-go/sdk/internal/uuid" - "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/internal" - - "bytes" - "errors" - "os" -) - -// uploadReaderAtToBlockBlob uploads a buffer in blocks to a block blob. -func (bb *BlockBlobClient) uploadReaderAtToBlockBlob(ctx context.Context, reader io.ReaderAt, readerSize int64, o UploadOption) (*http.Response, error) { - if o.BlockSize == 0 { - // If bufferSize > (BlockBlobMaxStageBlockBytes * BlockBlobMaxBlocks), then error - if readerSize > BlockBlobMaxStageBlockBytes*BlockBlobMaxBlocks { - return nil, errors.New("buffer is too large to upload to a block blob") - } - // If bufferSize <= BlockBlobMaxUploadBlobBytes, then Upload should be used with just 1 I/O request - if readerSize <= BlockBlobMaxUploadBlobBytes { - o.BlockSize = BlockBlobMaxUploadBlobBytes // Default if unspecified - } else { - o.BlockSize = readerSize / BlockBlobMaxBlocks // buffer / max blocks = block size to use all 50,000 blocks - if o.BlockSize < BlobDefaultDownloadBlockSize { // If the block size is smaller than 4MB, round up to 4MB - o.BlockSize = BlobDefaultDownloadBlockSize - } - // StageBlock will be called with blockSize blocks and a Parallelism of (BufferSize / BlockSize). - } - } - - if readerSize <= BlockBlobMaxUploadBlobBytes { - // If the size can fit in 1 Upload call, do it this way - var body io.ReadSeeker = io.NewSectionReader(reader, 0, readerSize) - if o.Progress != nil { - body = streaming.NewRequestProgress(internal.NopCloser(body), o.Progress) - } - - uploadBlockBlobOptions := o.getUploadBlockBlobOptions() - resp, err := bb.Upload(ctx, internal.NopCloser(body), uploadBlockBlobOptions) - - return resp.RawResponse, err - } - - var numBlocks = uint16(((readerSize - 1) / o.BlockSize) + 1) - - blockIDList := make([]string, numBlocks) // Base-64 encoded block IDs - progress := int64(0) - progressLock := &sync.Mutex{} - - err := DoBatchTransfer(ctx, BatchTransferOptions{ - OperationName: "uploadReaderAtToBlockBlob", - TransferSize: readerSize, - ChunkSize: o.BlockSize, - Parallelism: o.Parallelism, - Operation: func(offset int64, count int64, ctx context.Context) error { - // This function is called once per block. - // It is passed this block's offset within the buffer and its count of bytes - // Prepare to read the proper block/section of the buffer - var body io.ReadSeeker = io.NewSectionReader(reader, offset, count) - blockNum := offset / o.BlockSize - if o.Progress != nil { - blockProgress := int64(0) - body = streaming.NewRequestProgress(internal.NopCloser(body), - func(bytesTransferred int64) { - diff := bytesTransferred - blockProgress - blockProgress = bytesTransferred - progressLock.Lock() // 1 goroutine at a time gets progress report - progress += diff - o.Progress(progress) - progressLock.Unlock() - }) - } - - // Block IDs are unique values to avoid issue if 2+ clients are uploading blocks - // at the same time causing PutBlockList to get a mix of blocks from all the clients. - generatedUuid, err := uuid.New() - if err != nil { - return err - } - blockIDList[blockNum] = base64.StdEncoding.EncodeToString([]byte(generatedUuid.String())) - stageBlockOptions := o.getStageBlockOptions() - _, err = bb.StageBlock(ctx, blockIDList[blockNum], internal.NopCloser(body), stageBlockOptions) - return err - }, - }) - if err != nil { - return nil, err - } - // All put blocks were successful, call Put Block List to finalize the blob - commitBlockListOptions := o.getCommitBlockListOptions() - resp, err := bb.CommitBlockList(ctx, blockIDList, commitBlockListOptions) - - return resp.RawResponse, err -} - -// UploadBuffer uploads a buffer in blocks to a block blob. -func (bb *BlockBlobClient) UploadBuffer(ctx context.Context, b []byte, o UploadOption) (*http.Response, error) { - return bb.uploadReaderAtToBlockBlob(ctx, bytes.NewReader(b), int64(len(b)), o) -} - -// UploadFile uploads a file in blocks to a block blob. -func (bb *BlockBlobClient) UploadFile(ctx context.Context, file *os.File, o UploadOption) (*http.Response, error) { - - stat, err := file.Stat() - if err != nil { - return nil, err - } - return bb.uploadReaderAtToBlockBlob(ctx, file, stat.Size(), o) -} - -// --------------------------------------------------------------------------------------------------------------------- - -// UploadStream copies the file held in io.Reader to the Blob at blockBlobClient. -// A Context deadline or cancellation will cause this to error. -func (bb *BlockBlobClient) UploadStream(ctx context.Context, body io.Reader, o UploadStreamOptions) (BlockBlobCommitBlockListResponse, error) { - if err := o.defaults(); err != nil { - return BlockBlobCommitBlockListResponse{}, err - } - - // If we used the default manager, we need to close it. - if o.transferMangerNotSet { - defer o.TransferManager.Close() - } - - result, err := copyFromReader(ctx, body, bb, o) - if err != nil { - return BlockBlobCommitBlockListResponse{}, err - } - - return result, nil -} - -// --------------------------------------------------------------------------------------------------------------------- - -// DownloadToWriterAt downloads an Azure blob to a WriterAt with parallel. -// Offset and count are optional, pass 0 for both to download the entire blob. -func (b *BlobClient) DownloadToWriterAt(ctx context.Context, offset int64, count int64, writer io.WriterAt, o DownloadOptions) error { - if o.BlockSize == 0 { - o.BlockSize = BlobDefaultDownloadBlockSize - } - - if count == CountToEnd { // If size not specified, calculate it - // If we don't have the length at all, get it - downloadBlobOptions := o.getDownloadBlobOptions(0, CountToEnd, nil) - dr, err := b.Download(ctx, downloadBlobOptions) - if err != nil { - return err - } - count = *dr.ContentLength - offset - } - - if count <= 0 { - // The file is empty, there is nothing to download. - return nil - } - - // Prepare and do parallel download. - progress := int64(0) - progressLock := &sync.Mutex{} - - err := DoBatchTransfer(ctx, BatchTransferOptions{ - OperationName: "downloadBlobToWriterAt", - TransferSize: count, - ChunkSize: o.BlockSize, - Parallelism: o.Parallelism, - Operation: func(chunkStart int64, count int64, ctx context.Context) error { - - downloadBlobOptions := o.getDownloadBlobOptions(chunkStart+offset, count, nil) - dr, err := b.Download(ctx, downloadBlobOptions) - if err != nil { - return err - } - body := dr.Body(&o.RetryReaderOptionsPerBlock) - if o.Progress != nil { - rangeProgress := int64(0) - body = streaming.NewResponseProgress( - body, - func(bytesTransferred int64) { - diff := bytesTransferred - rangeProgress - rangeProgress = bytesTransferred - progressLock.Lock() - progress += diff - o.Progress(progress) - progressLock.Unlock() - }) - } - _, err = io.Copy(newSectionWriter(writer, chunkStart, count), body) - if err != nil { - return err - } - err = body.Close() - return err - }, - }) - if err != nil { - return err - } - return nil -} - -// DownloadToBuffer downloads an Azure blob to a buffer with parallel. -// Offset and count are optional, pass 0 for both to download the entire blob. -func (b *BlobClient) DownloadToBuffer(ctx context.Context, offset int64, count int64, _bytes []byte, o DownloadOptions) error { - return b.DownloadToWriterAt(ctx, offset, count, newBytesWriter(_bytes), o) -} - -// DownloadToFile downloads an Azure blob to a local file. -// The file would be truncated if the size doesn't match. -// Offset and count are optional, pass 0 for both to download the entire blob. -func (b *BlobClient) DownloadToFile(ctx context.Context, offset int64, count int64, file *os.File, o DownloadOptions) error { - // 1. Calculate the size of the destination file - var size int64 - - if count == CountToEnd { - // Try to get Azure blob's size - getBlobPropertiesOptions := o.getBlobPropertiesOptions() - props, err := b.GetProperties(ctx, getBlobPropertiesOptions) - if err != nil { - return err - } - size = *props.ContentLength - offset - } else { - size = count - } - - // 2. Compare and try to resize local file's size if it doesn't match Azure blob's size. - stat, err := file.Stat() - if err != nil { - return err - } - if stat.Size() != size { - if err = file.Truncate(size); err != nil { - return err - } - } - - if size > 0 { - return b.DownloadToWriterAt(ctx, offset, size, file, o) - } else { // if the blob's size is 0, there is no need in downloading it - return nil - } -} - -// --------------------------------------------------------------------------------------------------------------------- - -// DoBatchTransfer helps to execute operations in a batch manner. -// Can be used by users to customize batch works (for other scenarios that the SDK does not provide) -func DoBatchTransfer(ctx context.Context, o BatchTransferOptions) error { - if o.ChunkSize == 0 { - return errors.New("ChunkSize cannot be 0") - } - - if o.Parallelism == 0 { - o.Parallelism = 5 // default Parallelism - } - - // Prepare and do parallel operations. - numChunks := uint16(((o.TransferSize - 1) / o.ChunkSize) + 1) - operationChannel := make(chan func() error, o.Parallelism) // Create the channel that release 'Parallelism' goroutines concurrently - operationResponseChannel := make(chan error, numChunks) // Holds each response - ctx, cancel := context.WithCancel(ctx) - defer cancel() - - // Create the goroutines that process each operation (in parallel). - for g := uint16(0); g < o.Parallelism; g++ { - //grIndex := g - go func() { - for f := range operationChannel { - err := f() - operationResponseChannel <- err - } - }() - } - - // Add each chunk's operation to the channel. - for chunkNum := uint16(0); chunkNum < numChunks; chunkNum++ { - curChunkSize := o.ChunkSize - - if chunkNum == numChunks-1 { // Last chunk - curChunkSize = o.TransferSize - (int64(chunkNum) * o.ChunkSize) // Remove size of all transferred chunks from total - } - offset := int64(chunkNum) * o.ChunkSize - - operationChannel <- func() error { - return o.Operation(offset, curChunkSize, ctx) - } - } - close(operationChannel) - - // Wait for the operations to complete. - var firstErr error = nil - for chunkNum := uint16(0); chunkNum < numChunks; chunkNum++ { - responseError := <-operationResponseChannel - // record the first error (the original error which should cause the other chunks to fail with canceled context) - if responseError != nil && firstErr == nil { - cancel() // As soon as any operation fails, cancel all remaining operation calls - firstErr = responseError - } - } - return firstErr -} - -// --------------------------------------------------------------------------------------------------------------------- diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/internal/zc_shared.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/internal/zc_shared.go deleted file mode 100644 index cd2ada9b5db4..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/internal/zc_shared.go +++ /dev/null @@ -1,150 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package internal - -import ( - "bytes" - "context" - "encoding/json" - "errors" - "io" - "io/ioutil" - "net/http" - "strconv" - "time" -) - -// CtxWithHTTPHeaderKey is used as a context key for adding/retrieving http.Header. -type CtxWithHTTPHeaderKey struct{} - -// CtxWithRetryOptionsKey is used as a context key for adding/retrieving RetryOptions. -type CtxWithRetryOptionsKey struct{} - -type nopCloser struct { - io.ReadSeeker -} - -func (n nopCloser) Close() error { - return nil -} - -// NopCloser returns a ReadSeekCloser with a no-op close method wrapping the provided io.ReadSeeker. -func NopCloser(rs io.ReadSeeker) io.ReadSeekCloser { - return nopCloser{rs} -} - -// BodyDownloadPolicyOpValues is the struct containing the per-operation values -type BodyDownloadPolicyOpValues struct { - Skip bool -} - -func NewResponseError(inner error, resp *http.Response) error { - return &ResponseError{inner: inner, resp: resp} -} - -type ResponseError struct { - inner error - resp *http.Response -} - -// Error implements the error interface for type ResponseError. -func (e *ResponseError) Error() string { - return e.inner.Error() -} - -// Unwrap returns the inner error. -func (e *ResponseError) Unwrap() error { - return e.inner -} - -// RawResponse returns the HTTP response associated with this error. -func (e *ResponseError) RawResponse() *http.Response { - return e.resp -} - -// NonRetriable indicates this error is non-transient. -func (e *ResponseError) NonRetriable() { - // marker method -} - -// Delay waits for the duration to elapse or the context to be cancelled. -func Delay(ctx context.Context, delay time.Duration) error { - select { - case <-time.After(delay): - return nil - case <-ctx.Done(): - return ctx.Err() - } -} - -// ErrNoBody is returned if the response didn't contain a body. -var ErrNoBody = errors.New("the response did not contain a body") - -// GetJSON reads the response body into a raw JSON object. -// It returns ErrNoBody if there was no content. -func GetJSON(resp *http.Response) (map[string]interface{}, error) { - body, err := ioutil.ReadAll(resp.Body) - defer resp.Body.Close() - if err != nil { - return nil, err - } - if len(body) == 0 { - return nil, ErrNoBody - } - // put the body back so it's available to others - resp.Body = ioutil.NopCloser(bytes.NewReader(body)) - // unmarshall the body to get the value - var jsonBody map[string]interface{} - if err = json.Unmarshal(body, &jsonBody); err != nil { - return nil, err - } - return jsonBody, nil -} - -const HeaderRetryAfter = "Retry-After" - -// RetryAfter returns non-zero if the response contains a Retry-After header value. -func RetryAfter(resp *http.Response) time.Duration { - if resp == nil { - return 0 - } - ra := resp.Header.Get(HeaderRetryAfter) - if ra == "" { - return 0 - } - // retry-after values are expressed in either number of - // seconds or an HTTP-date indicating when to try again - if retryAfter, _ := strconv.Atoi(ra); retryAfter > 0 { - return time.Duration(retryAfter) * time.Second - } else if t, err := time.Parse(time.RFC1123, ra); err == nil { - return time.Until(t) - } - return 0 -} - -// HasStatusCode returns true if the Response's status code is one of the specified values. -func HasStatusCode(resp *http.Response, statusCodes ...int) bool { - if resp == nil { - return false - } - for _, sc := range statusCodes { - if resp.StatusCode == sc { - return true - } - } - return false -} - -const defaultScope = "/.default" - -// EndpointToScope converts the provided URL endpoint to its default scope. -func EndpointToScope(endpoint string) string { - if endpoint[len(endpoint)-1] != '/' { - endpoint += "/" - } - return endpoint + defaultScope -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/section_writer.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/section_writer.go deleted file mode 100644 index d2e89f5b2a60..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/section_writer.go +++ /dev/null @@ -1,53 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azblob - -import ( - "errors" - "io" -) - -type sectionWriter struct { - count int64 - offset int64 - position int64 - writerAt io.WriterAt -} - -func newSectionWriter(c io.WriterAt, off int64, count int64) *sectionWriter { - return §ionWriter{ - count: count, - offset: off, - writerAt: c, - } -} - -func (c *sectionWriter) Write(p []byte) (int, error) { - remaining := c.count - c.position - - if remaining <= 0 { - return 0, errors.New("end of section reached") - } - - slice := p - - if int64(len(slice)) > remaining { - slice = slice[:remaining] - } - - n, err := c.writerAt.WriteAt(slice, c.offset+c.position) - c.position += int64(n) - if err != nil { - return n, err - } - - if len(p) > n { - return n, errors.New("not enough space for all bytes") - } - - return n, nil -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/transfer_manager.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/transfer_manager.go deleted file mode 100644 index 5c40e9bc2ab4..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/transfer_manager.go +++ /dev/null @@ -1,154 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azblob - -import ( - "fmt" - "sync" -) - -// TransferManager provides a buffer and thread pool manager for certain transfer options. -// It is undefined behavior if code outside this package call any of these methods. -type TransferManager interface { - // Get provides a buffer that will be used to read data into and write out to the stream. - // It is guaranteed by this package to not read or write beyond the size of the slice. - Get() []byte - - // Put may or may not put the buffer into underlying storage, depending on settings. - // The buffer must not be touched after this has been called. - Put(b []byte) // nolint - - // Run will use a goroutine pool entry to run a function. This blocks until a pool - // goroutine becomes available. - Run(func()) - - // Close shuts down all internal goroutines. This must be called when the TransferManager - // will no longer be used. Not closing it will cause a goroutine leak. - Close() -} - -// --------------------------------------------------------------------------------------------------------------------- - -type staticBuffer struct { - buffers chan []byte - size int - threadpool chan func() -} - -// NewStaticBuffer creates a TransferManager that will use a channel as a circular buffer -// that can hold "max" buffers of "size". The goroutine pool is also sized at max. This -// can be shared between calls if you wish to control maximum memory and concurrency with -// multiple concurrent calls. -func NewStaticBuffer(size, max int) (TransferManager, error) { - if size < 1 || max < 1 { - return nil, fmt.Errorf("cannot be called with size or max set to < 1") - } - - if size < _1MiB { - return nil, fmt.Errorf("cannot have size < 1MiB") - } - - threadpool := make(chan func(), max) - buffers := make(chan []byte, max) - for i := 0; i < max; i++ { - go func() { - for f := range threadpool { - f() - } - }() - - buffers <- make([]byte, size) - } - return staticBuffer{ - buffers: buffers, - size: size, - threadpool: threadpool, - }, nil -} - -// Get implements TransferManager.Get(). -func (s staticBuffer) Get() []byte { - return <-s.buffers -} - -// Put implements TransferManager.Put(). -func (s staticBuffer) Put(b []byte) { // nolint - select { - case s.buffers <- b: - default: // This shouldn't happen, but just in case they call Put() with there own buffer. - } -} - -// Run implements TransferManager.Run(). -func (s staticBuffer) Run(f func()) { - s.threadpool <- f -} - -// Close implements TransferManager.Close(). -func (s staticBuffer) Close() { - close(s.threadpool) - close(s.buffers) -} - -// --------------------------------------------------------------------------------------------------------------------- - -type syncPool struct { - threadpool chan func() - pool sync.Pool -} - -// NewSyncPool creates a TransferManager that will use a sync.Pool -// that can hold a non-capped number of buffers constrained by concurrency. This -// can be shared between calls if you wish to share memory and concurrency. -func NewSyncPool(size, concurrency int) (TransferManager, error) { - if size < 1 || concurrency < 1 { - return nil, fmt.Errorf("cannot be called with size or max set to < 1") - } - - if size < _1MiB { - return nil, fmt.Errorf("cannot have size < 1MiB") - } - - threadpool := make(chan func(), concurrency) - for i := 0; i < concurrency; i++ { - go func() { - for f := range threadpool { - f() - } - }() - } - - return &syncPool{ - threadpool: threadpool, - pool: sync.Pool{ - New: func() interface{} { - return make([]byte, size) - }, - }, - }, nil -} - -// Get implements TransferManager.Get(). -func (s *syncPool) Get() []byte { - return s.pool.Get().([]byte) -} - -// Put implements TransferManager.Put(). -// nolint -func (s *syncPool) Put(b []byte) { - s.pool.Put(b) -} - -// Run implements TransferManager.Run(). -func (s *syncPool) Run(f func()) { - s.threadpool <- f -} - -// Close implements TransferManager.Close(). -func (s *syncPool) Close() { - close(s.threadpool) -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_access_policy.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_access_policy.go deleted file mode 100644 index 612bc784c379..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_access_policy.go +++ /dev/null @@ -1,67 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azblob - -import ( - "bytes" - "fmt" -) - -// AccessPolicyPermission type simplifies creating the permissions string for a container's access policy. -// Initialize an instance of this type and then call its String method to set AccessPolicy's Permission field. -type AccessPolicyPermission struct { - Read, Add, Create, Write, Delete, List bool -} - -// String produces the access policy permission string for an Azure Storage container. -// Call this method to set AccessPolicy's Permission field. -func (p AccessPolicyPermission) String() string { - var b bytes.Buffer - if p.Read { - b.WriteRune('r') - } - if p.Add { - b.WriteRune('a') - } - if p.Create { - b.WriteRune('c') - } - if p.Write { - b.WriteRune('w') - } - if p.Delete { - b.WriteRune('d') - } - if p.List { - b.WriteRune('l') - } - return b.String() -} - -// Parse initializes the AccessPolicyPermission's fields from a string. -func (p *AccessPolicyPermission) Parse(s string) error { - *p = AccessPolicyPermission{} // Clear the flags - for _, r := range s { - switch r { - case 'r': - p.Read = true - case 'a': - p.Add = true - case 'c': - p.Create = true - case 'w': - p.Write = true - case 'd': - p.Delete = true - case 'l': - p.List = true - default: - return fmt.Errorf("invalid permission: '%v'", r) - } - } - return nil -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_append_blob_client.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_append_blob_client.go deleted file mode 100644 index 25490ab5950c..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_append_blob_client.go +++ /dev/null @@ -1,154 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azblob - -import ( - "context" - "io" - - "github.com/Azure/azure-sdk-for-go/sdk/azcore" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime" -) - -// AppendBlobClient represents a client to an Azure Storage append blob; -type AppendBlobClient struct { - BlobClient - client *appendBlobClient -} - -// NewAppendBlobClient creates an AppendBlobClient with the specified URL, Azure AD credential, and options. -func NewAppendBlobClient(blobURL string, cred azcore.TokenCredential, options *ClientOptions) (*AppendBlobClient, error) { - authPolicy := runtime.NewBearerTokenPolicy(cred, []string{tokenScope}, nil) - conOptions := getConnectionOptions(options) - conOptions.PerRetryPolicies = append(conOptions.PerRetryPolicies, authPolicy) - conn := newConnection(blobURL, conOptions) - - return &AppendBlobClient{ - client: newAppendBlobClient(conn.Endpoint(), conn.Pipeline()), - BlobClient: BlobClient{ - client: newBlobClient(conn.Endpoint(), conn.Pipeline()), - }, - }, nil -} - -// NewAppendBlobClientWithNoCredential creates an AppendBlobClient with the specified URL and options. -func NewAppendBlobClientWithNoCredential(blobURL string, options *ClientOptions) (*AppendBlobClient, error) { - conOptions := getConnectionOptions(options) - conn := newConnection(blobURL, conOptions) - - return &AppendBlobClient{ - client: newAppendBlobClient(conn.Endpoint(), conn.Pipeline()), - BlobClient: BlobClient{ - client: newBlobClient(conn.Endpoint(), conn.Pipeline()), - }, - }, nil -} - -// NewAppendBlobClientWithSharedKey creates an AppendBlobClient with the specified URL, shared key, and options. -func NewAppendBlobClientWithSharedKey(blobURL string, cred *SharedKeyCredential, options *ClientOptions) (*AppendBlobClient, error) { - authPolicy := newSharedKeyCredPolicy(cred) - conOptions := getConnectionOptions(options) - conOptions.PerRetryPolicies = append(conOptions.PerRetryPolicies, authPolicy) - conn := newConnection(blobURL, conOptions) - - return &AppendBlobClient{ - client: newAppendBlobClient(conn.Endpoint(), conn.Pipeline()), - BlobClient: BlobClient{ - client: newBlobClient(conn.Endpoint(), conn.Pipeline()), - sharedKey: cred, - }, - }, nil -} - -// WithSnapshot creates a new AppendBlobURL object identical to the source but with the specified snapshot timestamp. -// Pass "" to remove the snapshot returning a URL to the base blob. -func (ab *AppendBlobClient) WithSnapshot(snapshot string) (*AppendBlobClient, error) { - p, err := NewBlobURLParts(ab.URL()) - if err != nil { - return nil, err - } - - p.Snapshot = snapshot - endpoint := p.URL() - pipeline := ab.client.pl - - return &AppendBlobClient{ - client: newAppendBlobClient(endpoint, pipeline), - BlobClient: BlobClient{ - client: newBlobClient(endpoint, pipeline), - sharedKey: ab.sharedKey, - }, - }, nil -} - -// WithVersionID creates a new AppendBlobURL object identical to the source but with the specified version id. -// Pass "" to remove the versionID returning a URL to the base blob. -func (ab *AppendBlobClient) WithVersionID(versionID string) (*AppendBlobClient, error) { - p, err := NewBlobURLParts(ab.URL()) - if err != nil { - return nil, err - } - - p.VersionID = versionID - endpoint := p.URL() - pipeline := ab.client.pl - - return &AppendBlobClient{ - client: newAppendBlobClient(endpoint, pipeline), - BlobClient: BlobClient{ - client: newBlobClient(endpoint, pipeline), - sharedKey: ab.sharedKey, - }, - }, nil -} - -// Create creates a 0-size append blob. Call AppendBlock to append data to an append blob. -// For more information, see https://docs.microsoft.com/rest/api/storageservices/put-blob. -func (ab *AppendBlobClient) Create(ctx context.Context, options *AppendBlobCreateOptions) (AppendBlobCreateResponse, error) { - appendBlobAppendBlockOptions, blobHttpHeaders, leaseAccessConditions, cpkInfo, cpkScopeInfo, modifiedAccessConditions := options.format() - - resp, err := ab.client.Create(ctx, 0, appendBlobAppendBlockOptions, blobHttpHeaders, - leaseAccessConditions, cpkInfo, cpkScopeInfo, modifiedAccessConditions) - - return toAppendBlobCreateResponse(resp), handleError(err) -} - -// AppendBlock writes a stream to a new block of data to the end of the existing append blob. -// This method panics if the stream is not at position 0. -// Note that the http client closes the body stream after the request is sent to the service. -// For more information, see https://docs.microsoft.com/rest/api/storageservices/append-block. -func (ab *AppendBlobClient) AppendBlock(ctx context.Context, body io.ReadSeekCloser, options *AppendBlobAppendBlockOptions) (AppendBlobAppendBlockResponse, error) { - count, err := validateSeekableStreamAt0AndGetCount(body) - if err != nil { - return AppendBlobAppendBlockResponse{}, nil - } - - appendOptions, appendPositionAccessConditions, cpkInfo, cpkScope, modifiedAccessConditions, leaseAccessConditions := options.format() - - resp, err := ab.client.AppendBlock(ctx, count, body, appendOptions, leaseAccessConditions, appendPositionAccessConditions, cpkInfo, cpkScope, modifiedAccessConditions) - - return toAppendBlobAppendBlockResponse(resp), handleError(err) -} - -// AppendBlockFromURL copies a new block of data from source URL to the end of the existing append blob. -// For more information, see https://docs.microsoft.com/rest/api/storageservices/append-block-from-url. -func (ab *AppendBlobClient) AppendBlockFromURL(ctx context.Context, source string, o *AppendBlobAppendBlockFromURLOptions) (AppendBlobAppendBlockFromURLResponse, error) { - appendBlockFromURLOptions, cpkInfo, cpkScopeInfo, leaseAccessConditions, appendPositionAccessConditions, modifiedAccessConditions, sourceModifiedAccessConditions := o.format() - - // content length should be 0 on * from URL. always. It's a 400 if it isn't. - resp, err := ab.client.AppendBlockFromURL(ctx, source, 0, appendBlockFromURLOptions, cpkInfo, cpkScopeInfo, - leaseAccessConditions, appendPositionAccessConditions, modifiedAccessConditions, sourceModifiedAccessConditions) - return toAppendBlobAppendBlockFromURLResponse(resp), handleError(err) -} - -// SealAppendBlob - The purpose of Append Blob Seal is to allow users and applications to seal append blobs, marking them as read only. -// https://docs.microsoft.com/en-us/rest/api/storageservices/append-blob-seal -func (ab *AppendBlobClient) SealAppendBlob(ctx context.Context, options *AppendBlobSealOptions) (AppendBlobSealResponse, error) { - leaseAccessConditions, modifiedAccessConditions, positionAccessConditions := options.format() - resp, err := ab.client.Seal(ctx, nil, leaseAccessConditions, modifiedAccessConditions, positionAccessConditions) - return toAppendBlobSealResponse(resp), handleError(err) -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_blob_client.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_blob_client.go deleted file mode 100644 index 9543d14f8776..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_blob_client.go +++ /dev/null @@ -1,278 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azblob - -import ( - "context" - "errors" - "time" - - "github.com/Azure/azure-sdk-for-go/sdk/azcore" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime" -) - -// BlobClient represents a URL to an Azure Storage blob; the blob may be a block blob, append blob, or page blob. -type BlobClient struct { - client *blobClient - sharedKey *SharedKeyCredential -} - -// NewBlobClient creates a BlobClient object using the specified URL, Azure AD credential, and options. -func NewBlobClient(blobURL string, cred azcore.TokenCredential, options *ClientOptions) (*BlobClient, error) { - authPolicy := runtime.NewBearerTokenPolicy(cred, []string{tokenScope}, nil) - conOptions := getConnectionOptions(options) - conOptions.PerRetryPolicies = append(conOptions.PerRetryPolicies, authPolicy) - conn := newConnection(blobURL, conOptions) - - return &BlobClient{ - client: newBlobClient(conn.Endpoint(), conn.Pipeline()), - }, nil -} - -// NewBlobClientWithNoCredential creates a BlobClient object using the specified URL and options. -func NewBlobClientWithNoCredential(blobURL string, options *ClientOptions) (*BlobClient, error) { - conOptions := getConnectionOptions(options) - conn := newConnection(blobURL, conOptions) - - return &BlobClient{ - client: newBlobClient(conn.Endpoint(), conn.Pipeline()), - }, nil -} - -// NewBlobClientWithSharedKey creates a BlobClient object using the specified URL, shared key, and options. -func NewBlobClientWithSharedKey(blobURL string, cred *SharedKeyCredential, options *ClientOptions) (*BlobClient, error) { - authPolicy := newSharedKeyCredPolicy(cred) - conOptions := getConnectionOptions(options) - conOptions.PerRetryPolicies = append(conOptions.PerRetryPolicies, authPolicy) - conn := newConnection(blobURL, conOptions) - - return &BlobClient{ - client: newBlobClient(blobURL, conn.Pipeline()), - sharedKey: cred, - }, nil -} - -// NewBlobClientFromConnectionString creates BlobClient from a connection String -//nolint -func NewBlobClientFromConnectionString(connectionString, containerName, blobName string, options *ClientOptions) (*BlobClient, error) { - containerClient, err := NewContainerClientFromConnectionString(connectionString, containerName, options) - if err != nil { - return nil, err - } - return containerClient.NewBlobClient(blobName) -} - -// URL returns the URL endpoint used by the BlobClient object. -func (b *BlobClient) URL() string { - return b.client.endpoint -} - -// WithSnapshot creates a new BlobClient object identical to the source but with the specified snapshot timestamp. -// Pass "" to remove the snapshot returning a URL to the base blob. -func (b *BlobClient) WithSnapshot(snapshot string) (*BlobClient, error) { - p, err := NewBlobURLParts(b.URL()) - if err != nil { - return nil, err - } - p.Snapshot = snapshot - - pipeline := b.client.pl - return &BlobClient{ - client: newBlobClient(p.URL(), pipeline), - sharedKey: b.sharedKey, - }, nil -} - -// WithVersionID creates a new AppendBlobURL object identical to the source but with the specified version id. -// Pass "" to remove the versionID returning a URL to the base blob. -func (b *BlobClient) WithVersionID(versionID string) (*BlobClient, error) { - p, err := NewBlobURLParts(b.URL()) - if err != nil { - return nil, err - } - p.VersionID = versionID - - pipeline := b.client.pl - return &BlobClient{ - client: newBlobClient(p.URL(), pipeline), - sharedKey: b.sharedKey, - }, nil -} - -// Download reads a range of bytes from a blob. The response also includes the blob's properties and metadata. -// For more information, see https://docs.microsoft.com/rest/api/storageservices/get-blob. -func (b *BlobClient) Download(ctx context.Context, options *BlobDownloadOptions) (BlobDownloadResponse, error) { - o, lease, cpk, accessConditions := options.format() - dr, err := b.client.Download(ctx, o, lease, cpk, accessConditions) - if err != nil { - return BlobDownloadResponse{}, handleError(err) - } - - offset := int64(0) - count := int64(CountToEnd) - - if options != nil && options.Offset != nil { - offset = *options.Offset - } - - if options != nil && options.Count != nil { - count = *options.Count - } - - eTag := "" - if dr.ETag != nil { - eTag = *dr.ETag - } - return BlobDownloadResponse{ - b: b, - blobClientDownloadResponse: dr, - ctx: ctx, - getInfo: HTTPGetterInfo{Offset: offset, Count: count, ETag: eTag}, - ObjectReplicationRules: deserializeORSPolicies(dr.ObjectReplicationRules), - }, err -} - -// Delete marks the specified blob or snapshot for deletion. The blob is later deleted during garbage collection. -// Note that deleting a blob also deletes all its snapshots. -// For more information, see https://docs.microsoft.com/rest/api/storageservices/delete-blob. -func (b *BlobClient) Delete(ctx context.Context, o *BlobDeleteOptions) (BlobDeleteResponse, error) { - basics, leaseInfo, accessConditions := o.format() - resp, err := b.client.Delete(ctx, basics, leaseInfo, accessConditions) - - return toBlobDeleteResponse(resp), handleError(err) -} - -// Undelete restores the contents and metadata of a soft-deleted blob and any associated soft-deleted snapshots. -// For more information, see https://docs.microsoft.com/rest/api/storageservices/undelete-blob. -func (b *BlobClient) Undelete(ctx context.Context, o *BlobUndeleteOptions) (BlobUndeleteResponse, error) { - undeleteOptions := o.format() - resp, err := b.client.Undelete(ctx, undeleteOptions) - - return toBlobUndeleteResponse(resp), handleError(err) -} - -// SetTier operation sets the tier on a blob. The operation is allowed on a page -// blob in a premium storage account and on a block blob in a blob storage account (locally -// redundant storage only). A premium page blob's tier determines the allowed size, IOPS, and -// bandwidth of the blob. A block blob's tier determines Hot/Cool/Archive storage type. This operation -// does not update the blob's ETag. -// For detailed information about block blob level tiering see https://docs.microsoft.com/en-us/azure/storage/blobs/storage-blob-storage-tiers. -func (b *BlobClient) SetTier(ctx context.Context, tier AccessTier, options *BlobSetTierOptions) (BlobSetTierResponse, error) { - basics, lease, accessConditions := options.format() - resp, err := b.client.SetTier(ctx, tier, basics, lease, accessConditions) - - return toBlobSetTierResponse(resp), handleError(err) -} - -// GetProperties returns the blob's properties. -// For more information, see https://docs.microsoft.com/rest/api/storageservices/get-blob-properties. -func (b *BlobClient) GetProperties(ctx context.Context, options *BlobGetPropertiesOptions) (BlobGetPropertiesResponse, error) { - basics, lease, cpk, access := options.format() - resp, err := b.client.GetProperties(ctx, basics, lease, cpk, access) - - return toGetBlobPropertiesResponse(resp), handleError(err) -} - -// SetHTTPHeaders changes a blob's HTTP headers. -// For more information, see https://docs.microsoft.com/rest/api/storageservices/set-blob-properties. -func (b *BlobClient) SetHTTPHeaders(ctx context.Context, blobHttpHeaders BlobHTTPHeaders, options *BlobSetHTTPHeadersOptions) (BlobSetHTTPHeadersResponse, error) { - basics, lease, access := options.format() - resp, err := b.client.SetHTTPHeaders(ctx, basics, &blobHttpHeaders, lease, access) - - return toBlobSetHTTPHeadersResponse(resp), handleError(err) -} - -// SetMetadata changes a blob's metadata. -// https://docs.microsoft.com/rest/api/storageservices/set-blob-metadata. -func (b *BlobClient) SetMetadata(ctx context.Context, metadata map[string]string, options *BlobSetMetadataOptions) (BlobSetMetadataResponse, error) { - basics := blobClientSetMetadataOptions{ - Metadata: metadata, - } - lease, cpk, cpkScope, access := options.format() - resp, err := b.client.SetMetadata(ctx, &basics, lease, cpk, cpkScope, access) - - return toBlobSetMetadataResponse(resp), handleError(err) -} - -// CreateSnapshot creates a read-only snapshot of a blob. -// For more information, see https://docs.microsoft.com/rest/api/storageservices/snapshot-blob. -func (b *BlobClient) CreateSnapshot(ctx context.Context, options *BlobCreateSnapshotOptions) (BlobCreateSnapshotResponse, error) { - // CreateSnapshot does NOT panic if the user tries to create a snapshot using a URL that already has a snapshot query parameter - // because checking this would be a performance hit for a VERY unusual path, and we don't think the common case should suffer this - // performance hit. - basics, cpk, cpkScope, access, lease := options.format() - resp, err := b.client.CreateSnapshot(ctx, basics, cpk, cpkScope, access, lease) - - return toBlobCreateSnapshotResponse(resp), handleError(err) -} - -// StartCopyFromURL copies the data at the source URL to a blob. -// For more information, see https://docs.microsoft.com/rest/api/storageservices/copy-blob. -func (b *BlobClient) StartCopyFromURL(ctx context.Context, copySource string, options *BlobStartCopyOptions) (BlobStartCopyFromURLResponse, error) { - basics, srcAccess, destAccess, lease := options.format() - resp, err := b.client.StartCopyFromURL(ctx, copySource, basics, srcAccess, destAccess, lease) - - return toBlobStartCopyFromURLResponse(resp), handleError(err) -} - -// AbortCopyFromURL stops a pending copy that was previously started and leaves a destination blob with 0 length and metadata. -// For more information, see https://docs.microsoft.com/rest/api/storageservices/abort-copy-blob. -func (b *BlobClient) AbortCopyFromURL(ctx context.Context, copyID string, options *BlobAbortCopyOptions) (BlobAbortCopyFromURLResponse, error) { - basics, lease := options.format() - resp, err := b.client.AbortCopyFromURL(ctx, copyID, basics, lease) - - return toBlobAbortCopyFromURLResponse(resp), handleError(err) -} - -// SetTags operation enables users to set tags on a blob or specific blob version, but not snapshot. -// Each call to this operation replaces all existing tags attached to the blob. -// To remove all tags from the blob, call this operation with no tags set. -// https://docs.microsoft.com/en-us/rest/api/storageservices/set-blob-tags -func (b *BlobClient) SetTags(ctx context.Context, options *BlobSetTagsOptions) (BlobSetTagsResponse, error) { - blobSetTagsOptions, modifiedAccessConditions, leaseAccessConditions := options.format() - resp, err := b.client.SetTags(ctx, blobSetTagsOptions, modifiedAccessConditions, leaseAccessConditions) - - return toBlobSetTagsResponse(resp), handleError(err) -} - -// GetTags operation enables users to get tags on a blob or specific blob version, or snapshot. -// https://docs.microsoft.com/en-us/rest/api/storageservices/get-blob-tags -func (b *BlobClient) GetTags(ctx context.Context, options *BlobGetTagsOptions) (BlobGetTagsResponse, error) { - blobGetTagsOptions, modifiedAccessConditions, leaseAccessConditions := options.format() - resp, err := b.client.GetTags(ctx, blobGetTagsOptions, modifiedAccessConditions, leaseAccessConditions) - - return toBlobGetTagsResponse(resp), handleError(err) - -} - -// GetSASToken is a convenience method for generating a SAS token for the currently pointed at blob. -// It can only be used if the credential supplied during creation was a SharedKeyCredential. -func (b *BlobClient) GetSASToken(permissions BlobSASPermissions, start time.Time, expiry time.Time) (SASQueryParameters, error) { - urlParts, _ := NewBlobURLParts(b.URL()) - - t, err := time.Parse(SnapshotTimeFormat, urlParts.Snapshot) - - if err != nil { - t = time.Time{} - } - - if b.sharedKey == nil { - return SASQueryParameters{}, errors.New("credential is not a SharedKeyCredential. SAS can only be signed with a SharedKeyCredential") - } - - return BlobSASSignatureValues{ - ContainerName: urlParts.ContainerName, - BlobName: urlParts.BlobName, - SnapshotTime: t, - Version: SASVersion, - - Permissions: permissions.String(), - - StartTime: start.UTC(), - ExpiryTime: expiry.UTC(), - }.NewSASQueryParameters(b.sharedKey) -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_blob_lease_client.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_blob_lease_client.go deleted file mode 100644 index a9273dfb62cd..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_blob_lease_client.go +++ /dev/null @@ -1,98 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azblob - -import ( - "context" - "errors" - - "github.com/Azure/azure-sdk-for-go/sdk/azcore/to" - "github.com/Azure/azure-sdk-for-go/sdk/internal/uuid" -) - -// BlobLeaseClient represents lease client on blob -type BlobLeaseClient struct { - BlobClient - leaseID *string -} - -// NewBlobLeaseClient is constructor for BlobLeaseClient -func (b *BlobClient) NewBlobLeaseClient(leaseID *string) (*BlobLeaseClient, error) { - if leaseID == nil { - generatedUuid, err := uuid.New() - if err != nil { - return nil, err - } - leaseID = to.Ptr(generatedUuid.String()) - } - return &BlobLeaseClient{ - BlobClient: *b, - leaseID: leaseID, - }, nil -} - -// AcquireLease acquires a lease on the blob for write and delete operations. -//The lease Duration must be between 15 and 60 seconds, or infinite (-1). -// For more information, see https://docs.microsoft.com/rest/api/storageservices/lease-blob. -func (blc *BlobLeaseClient) AcquireLease(ctx context.Context, options *BlobAcquireLeaseOptions) (BlobAcquireLeaseResponse, error) { - blobAcquireLeaseOptions, modifiedAccessConditions := options.format() - blobAcquireLeaseOptions.ProposedLeaseID = blc.leaseID - - resp, err := blc.client.AcquireLease(ctx, &blobAcquireLeaseOptions, modifiedAccessConditions) - return toBlobAcquireLeaseResponse(resp), handleError(err) -} - -// BreakLease breaks the blob's previously-acquired lease (if it exists). Pass the LeaseBreakDefault (-1) -// constant to break a fixed-Duration lease when it expires or an infinite lease immediately. -// For more information, see https://docs.microsoft.com/rest/api/storageservices/lease-blob. -func (blc *BlobLeaseClient) BreakLease(ctx context.Context, options *BlobBreakLeaseOptions) (BlobBreakLeaseResponse, error) { - blobBreakLeaseOptions, modifiedAccessConditions := options.format() - resp, err := blc.client.BreakLease(ctx, blobBreakLeaseOptions, modifiedAccessConditions) - return toBlobBreakLeaseResponse(resp), handleError(err) -} - -// ChangeLease changes the blob's lease ID. -// For more information, see https://docs.microsoft.com/rest/api/storageservices/lease-blob. -func (blc *BlobLeaseClient) ChangeLease(ctx context.Context, options *BlobChangeLeaseOptions) (BlobChangeLeaseResponse, error) { - if blc.leaseID == nil { - return BlobChangeLeaseResponse{}, errors.New("leaseID cannot be nil") - } - proposedLeaseID, changeLeaseOptions, modifiedAccessConditions, err := options.format() - if err != nil { - return BlobChangeLeaseResponse{}, err - } - resp, err := blc.client.ChangeLease(ctx, *blc.leaseID, *proposedLeaseID, changeLeaseOptions, modifiedAccessConditions) - - // If lease has been changed successfully, set the leaseID in client - if err == nil { - blc.leaseID = proposedLeaseID - } - - return toBlobChangeLeaseResponse(resp), handleError(err) -} - -// RenewLease renews the blob's previously-acquired lease. -// For more information, see https://docs.microsoft.com/rest/api/storageservices/lease-blob. -func (blc *BlobLeaseClient) RenewLease(ctx context.Context, options *BlobRenewLeaseOptions) (BlobRenewLeaseResponse, error) { - if blc.leaseID == nil { - return BlobRenewLeaseResponse{}, errors.New("leaseID cannot be nil") - } - renewLeaseBlobOptions, modifiedAccessConditions := options.format() - resp, err := blc.client.RenewLease(ctx, *blc.leaseID, renewLeaseBlobOptions, modifiedAccessConditions) - return toBlobRenewLeaseResponse(resp), handleError(err) -} - -// ReleaseLease releases the blob's previously-acquired lease. -// For more information, see https://docs.microsoft.com/rest/api/storageservices/lease-blob. -func (blc *BlobLeaseClient) ReleaseLease(ctx context.Context, options *ReleaseLeaseBlobOptions) (BlobReleaseLeaseResponse, error) { - if blc.leaseID == nil { - return BlobReleaseLeaseResponse{}, errors.New("leaseID cannot be nil") - } - renewLeaseBlobOptions, modifiedAccessConditions := options.format() - resp, err := blc.client.ReleaseLease(ctx, *blc.leaseID, renewLeaseBlobOptions, modifiedAccessConditions) - return toBlobReleaseLeaseResponse(resp), handleError(err) -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_block_blob_client.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_block_blob_client.go deleted file mode 100644 index b080128c8153..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_block_blob_client.go +++ /dev/null @@ -1,201 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azblob - -import ( - "context" - "io" - - "github.com/Azure/azure-sdk-for-go/sdk/azcore" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/to" -) - -// BlockBlobClient defines a set of operations applicable to block blobs. -type BlockBlobClient struct { - BlobClient - client *blockBlobClient -} - -// NewBlockBlobClient creates a BlockBlobClient object using the specified URL, Azure AD credential, and options. -func NewBlockBlobClient(blobURL string, cred azcore.TokenCredential, options *ClientOptions) (*BlockBlobClient, error) { - authPolicy := runtime.NewBearerTokenPolicy(cred, []string{tokenScope}, nil) - conOptions := getConnectionOptions(options) - conOptions.PerRetryPolicies = append(conOptions.PerRetryPolicies, authPolicy) - conn := newConnection(blobURL, conOptions) - - bClient := newBlobClient(conn.Endpoint(), conn.Pipeline()) - return &BlockBlobClient{ - client: newBlockBlobClient(bClient.endpoint, bClient.pl), - BlobClient: BlobClient{ - client: bClient, - }, - }, nil -} - -// NewBlockBlobClientWithNoCredential creates a BlockBlobClient object using the specified URL and options. -func NewBlockBlobClientWithNoCredential(blobURL string, options *ClientOptions) (*BlockBlobClient, error) { - conOptions := getConnectionOptions(options) - conn := newConnection(blobURL, conOptions) - - bClient := newBlobClient(conn.Endpoint(), conn.Pipeline()) - return &BlockBlobClient{ - client: newBlockBlobClient(bClient.endpoint, bClient.pl), - BlobClient: BlobClient{ - client: bClient, - }, - }, nil -} - -// NewBlockBlobClientWithSharedKey creates a BlockBlobClient object using the specified URL, shared key, and options. -func NewBlockBlobClientWithSharedKey(blobURL string, cred *SharedKeyCredential, options *ClientOptions) (*BlockBlobClient, error) { - authPolicy := newSharedKeyCredPolicy(cred) - conOptions := getConnectionOptions(options) - conOptions.PerRetryPolicies = append(conOptions.PerRetryPolicies, authPolicy) - conn := newConnection(blobURL, conOptions) - - bClient := newBlobClient(conn.Endpoint(), conn.Pipeline()) - return &BlockBlobClient{ - client: newBlockBlobClient(bClient.endpoint, bClient.pl), - BlobClient: BlobClient{ - client: bClient, - sharedKey: cred, - }, - }, nil -} - -// WithSnapshot creates a new BlockBlobClient object identical to the source but with the specified snapshot timestamp. -// Pass "" to remove the snapshot returning a URL to the base blob. -func (bb *BlockBlobClient) WithSnapshot(snapshot string) (*BlockBlobClient, error) { - p, err := NewBlobURLParts(bb.URL()) - if err != nil { - return nil, err - } - - p.Snapshot = snapshot - endpoint := p.URL() - bClient := newBlobClient(endpoint, bb.client.pl) - - return &BlockBlobClient{ - client: newBlockBlobClient(bClient.endpoint, bClient.pl), - BlobClient: BlobClient{ - client: bClient, - sharedKey: bb.sharedKey, - }, - }, nil -} - -// WithVersionID creates a new AppendBlobURL object identical to the source but with the specified version id. -// Pass "" to remove the versionID returning a URL to the base blob. -func (bb *BlockBlobClient) WithVersionID(versionID string) (*BlockBlobClient, error) { - p, err := NewBlobURLParts(bb.URL()) - if err != nil { - return nil, err - } - - p.VersionID = versionID - endpoint := p.URL() - bClient := newBlobClient(endpoint, bb.client.pl) - - return &BlockBlobClient{ - client: newBlockBlobClient(bClient.endpoint, bClient.pl), - BlobClient: BlobClient{ - client: bClient, - sharedKey: bb.sharedKey, - }, - }, nil -} - -// Upload creates a new block blob or overwrites an existing block blob. -// Updating an existing block blob overwrites any existing metadata on the blob. Partial updates are not -// supported with Upload; the content of the existing blob is overwritten with the new content. To -// perform a partial update of a block blob, use StageBlock and CommitBlockList. -// This method panics if the stream is not at position 0. -// Note that the http client closes the body stream after the request is sent to the service. -// For more information, see https://docs.microsoft.com/rest/api/storageservices/put-blob. -func (bb *BlockBlobClient) Upload(ctx context.Context, body io.ReadSeekCloser, options *BlockBlobUploadOptions) (BlockBlobUploadResponse, error) { - count, err := validateSeekableStreamAt0AndGetCount(body) - if err != nil { - return BlockBlobUploadResponse{}, err - } - - basics, httpHeaders, leaseInfo, cpkV, cpkN, accessConditions := options.format() - - resp, err := bb.client.Upload(ctx, count, body, basics, httpHeaders, leaseInfo, cpkV, cpkN, accessConditions) - - return toBlockBlobUploadResponse(resp), handleError(err) -} - -// StageBlock uploads the specified block to the block blob's "staging area" to be later committed by a call to CommitBlockList. -// Note that the http client closes the body stream after the request is sent to the service. -// For more information, see https://docs.microsoft.com/rest/api/storageservices/put-block. -func (bb *BlockBlobClient) StageBlock(ctx context.Context, base64BlockID string, body io.ReadSeekCloser, - options *BlockBlobStageBlockOptions) (BlockBlobStageBlockResponse, error) { - count, err := validateSeekableStreamAt0AndGetCount(body) - if err != nil { - return BlockBlobStageBlockResponse{}, err - } - - stageBlockOptions, leaseAccessConditions, cpkInfo, cpkScopeInfo := options.format() - resp, err := bb.client.StageBlock(ctx, base64BlockID, count, body, stageBlockOptions, leaseAccessConditions, cpkInfo, cpkScopeInfo) - - return toBlockBlobStageBlockResponse(resp), handleError(err) -} - -// StageBlockFromURL copies the specified block from a source URL to the block blob's "staging area" to be later committed by a call to CommitBlockList. -// If count is CountToEnd (0), then data is read from specified offset to the end. -// For more information, see https://docs.microsoft.com/en-us/rest/api/storageservices/put-block-from-url. -func (bb *BlockBlobClient) StageBlockFromURL(ctx context.Context, base64BlockID string, sourceURL string, - contentLength int64, options *BlockBlobStageBlockFromURLOptions) (BlockBlobStageBlockFromURLResponse, error) { - - stageBlockFromURLOptions, cpkInfo, cpkScopeInfo, leaseAccessConditions, sourceModifiedAccessConditions := options.format() - - resp, err := bb.client.StageBlockFromURL(ctx, base64BlockID, contentLength, sourceURL, stageBlockFromURLOptions, - cpkInfo, cpkScopeInfo, leaseAccessConditions, sourceModifiedAccessConditions) - - return toBlockBlobStageBlockFromURLResponse(resp), handleError(err) -} - -// CommitBlockList writes a blob by specifying the list of block IDs that make up the blob. -// In order to be written as part of a blob, a block must have been successfully written -// to the server in a prior PutBlock operation. You can call PutBlockList to update a blob -// by uploading only those blocks that have changed, then committing the new and existing -// blocks together. Any blocks not specified in the block list and permanently deleted. -// For more information, see https://docs.microsoft.com/rest/api/storageservices/put-block-list. -func (bb *BlockBlobClient) CommitBlockList(ctx context.Context, base64BlockIDs []string, options *BlockBlobCommitBlockListOptions) (BlockBlobCommitBlockListResponse, error) { - // this is a code smell in the generated code - blockIds := make([]*string, len(base64BlockIDs)) - for k, v := range base64BlockIDs { - blockIds[k] = to.Ptr(v) - } - - blockLookupList := BlockLookupList{Latest: blockIds} - commitOptions, headers, leaseAccess, cpkInfo, cpkScope, modifiedAccess := options.format() - - resp, err := bb.client.CommitBlockList(ctx, blockLookupList, commitOptions, headers, leaseAccess, cpkInfo, cpkScope, modifiedAccess) - - return toBlockBlobCommitBlockListResponse(resp), handleError(err) -} - -// GetBlockList returns the list of blocks that have been uploaded as part of a block blob using the specified block list filter. -// For more information, see https://docs.microsoft.com/rest/api/storageservices/get-block-list. -func (bb *BlockBlobClient) GetBlockList(ctx context.Context, listType BlockListType, options *BlockBlobGetBlockListOptions) (BlockBlobGetBlockListResponse, error) { - o, lac, mac := options.format() - - resp, err := bb.client.GetBlockList(ctx, listType, o, lac, mac) - - return toBlockBlobGetBlockListResponse(resp), handleError(err) -} - -// CopyFromURL synchronously copies the data at the source URL to a block blob, with sizes up to 256 MB. -// For more information, see https://docs.microsoft.com/en-us/rest/api/storageservices/copy-blob-from-url. -func (bb *BlockBlobClient) CopyFromURL(ctx context.Context, source string, options *BlockBlobCopyFromURLOptions) (BlockBlobCopyFromURLResponse, error) { - copyOptions, smac, mac, lac := options.format() - resp, err := bb.BlobClient.client.CopyFromURL(ctx, source, copyOptions, smac, mac, lac) - - return toBlockBlobCopyFromURLResponse(resp), handleError(err) -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_connection_string.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_connection_string.go deleted file mode 100644 index 2c23b8f4ed86..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_connection_string.go +++ /dev/null @@ -1,88 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azblob - -import ( - "errors" - "fmt" - "strings" -) - -var errConnectionString = errors.New("connection string is either blank or malformed. The expected connection string " + - "should contain key value pairs separated by semicolons. For example 'DefaultEndpointsProtocol=https;AccountName=;" + - "AccountKey=;EndpointSuffix=core.windows.net'") - -// convertConnStrToMap converts a connection string (in format key1=value1;key2=value2;key3=value3;) into a map of key-value pairs -func convertConnStrToMap(connStr string) (map[string]string, error) { - ret := make(map[string]string) - connStr = strings.TrimRight(connStr, ";") - - splitString := strings.Split(connStr, ";") - if len(splitString) == 0 { - return ret, errConnectionString - } - for _, stringPart := range splitString { - parts := strings.SplitN(stringPart, "=", 2) - if len(parts) != 2 { - return ret, errConnectionString - } - ret[parts[0]] = parts[1] - } - return ret, nil -} - -// parseConnectionString parses a connection string into a service URL and a SharedKeyCredential or a service url with the -// SharedAccessSignature combined. -func parseConnectionString(connectionString string) (string, *SharedKeyCredential, error) { - var serviceURL string - var cred *SharedKeyCredential - - defaultScheme := "https" - defaultSuffix := "core.windows.net" - - connStrMap, err := convertConnStrToMap(connectionString) - if err != nil { - return "", nil, err - } - - accountName, ok := connStrMap["AccountName"] - if !ok { - return "", nil, errConnectionString - } - accountKey, ok := connStrMap["AccountKey"] - if !ok { - sharedAccessSignature, ok := connStrMap["SharedAccessSignature"] - if !ok { - return "", nil, errConnectionString - } - return fmt.Sprintf("%v://%v.blob.%v/?%v", defaultScheme, accountName, defaultSuffix, sharedAccessSignature), nil, nil - } - - protocol, ok := connStrMap["DefaultEndpointsProtocol"] - if !ok { - protocol = defaultScheme - } - - suffix, ok := connStrMap["EndpointSuffix"] - if !ok { - suffix = defaultSuffix - } - - blobEndpoint, ok := connStrMap["BlobEndpoint"] - if ok { - cred, err = NewSharedKeyCredential(accountName, accountKey) - return blobEndpoint, cred, err - } - serviceURL = fmt.Sprintf("%v://%v.blob.%v", protocol, accountName, suffix) - - cred, err = NewSharedKeyCredential(accountName, accountKey) - if err != nil { - return "", nil, err - } - - return serviceURL, cred, nil -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_container_client.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_container_client.go deleted file mode 100644 index 12c4a18dfd16..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_container_client.go +++ /dev/null @@ -1,253 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azblob - -import ( - "context" - "errors" - "time" - - "github.com/Azure/azure-sdk-for-go/sdk/azcore" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime" -) - -// ContainerClient represents a URL to the Azure Storage container allowing you to manipulate its blobs. -type ContainerClient struct { - client *containerClient - sharedKey *SharedKeyCredential -} - -// URL returns the URL endpoint used by the ContainerClient object. -func (c *ContainerClient) URL() string { - return c.client.endpoint -} - -// NewContainerClient creates a ContainerClient object using the specified URL, Azure AD credential, and options. -func NewContainerClient(containerURL string, cred azcore.TokenCredential, options *ClientOptions) (*ContainerClient, error) { - authPolicy := runtime.NewBearerTokenPolicy(cred, []string{tokenScope}, nil) - conOptions := getConnectionOptions(options) - conOptions.PerRetryPolicies = append(conOptions.PerRetryPolicies, authPolicy) - conn := newConnection(containerURL, conOptions) - - return &ContainerClient{ - client: newContainerClient(conn.Endpoint(), conn.Pipeline()), - }, nil -} - -// NewContainerClientWithNoCredential creates a ContainerClient object using the specified URL and options. -func NewContainerClientWithNoCredential(containerURL string, options *ClientOptions) (*ContainerClient, error) { - conOptions := getConnectionOptions(options) - conn := newConnection(containerURL, conOptions) - - return &ContainerClient{ - client: newContainerClient(conn.Endpoint(), conn.Pipeline()), - }, nil -} - -// NewContainerClientWithSharedKey creates a ContainerClient object using the specified URL, shared key, and options. -func NewContainerClientWithSharedKey(containerURL string, cred *SharedKeyCredential, options *ClientOptions) (*ContainerClient, error) { - authPolicy := newSharedKeyCredPolicy(cred) - conOptions := getConnectionOptions(options) - conOptions.PerRetryPolicies = append(conOptions.PerRetryPolicies, authPolicy) - conn := newConnection(containerURL, conOptions) - - return &ContainerClient{ - client: newContainerClient(conn.Endpoint(), conn.Pipeline()), - sharedKey: cred, - }, nil -} - -// NewContainerClientFromConnectionString creates a ContainerClient object using connection string of an account -func NewContainerClientFromConnectionString(connectionString string, containerName string, options *ClientOptions) (*ContainerClient, error) { - svcClient, err := NewServiceClientFromConnectionString(connectionString, options) - if err != nil { - return nil, err - } - return svcClient.NewContainerClient(containerName) -} - -// NewBlobClient creates a new BlobClient object by concatenating blobName to the end of -// ContainerClient's URL. The new BlobClient uses the same request policy pipeline as the ContainerClient. -// To change the pipeline, create the BlobClient and then call its WithPipeline method passing in the -// desired pipeline object. Or, call this package's NewBlobClient instead of calling this object's -// NewBlobClient method. -func (c *ContainerClient) NewBlobClient(blobName string) (*BlobClient, error) { - blobURL := appendToURLPath(c.URL(), blobName) - - return &BlobClient{ - client: newBlobClient(blobURL, c.client.pl), - sharedKey: c.sharedKey, - }, nil -} - -// NewAppendBlobClient creates a new AppendBlobURL object by concatenating blobName to the end of -// ContainerClient's URL. The new AppendBlobURL uses the same request policy pipeline as the ContainerClient. -// To change the pipeline, create the AppendBlobURL and then call its WithPipeline method passing in the -// desired pipeline object. Or, call this package's NewAppendBlobClient instead of calling this object's -// NewAppendBlobClient method. -func (c *ContainerClient) NewAppendBlobClient(blobName string) (*AppendBlobClient, error) { - blobURL := appendToURLPath(c.URL(), blobName) - - return &AppendBlobClient{ - BlobClient: BlobClient{ - client: newBlobClient(blobURL, c.client.pl), - sharedKey: c.sharedKey, - }, - client: newAppendBlobClient(blobURL, c.client.pl), - }, nil -} - -// NewBlockBlobClient creates a new BlockBlobClient object by concatenating blobName to the end of -// ContainerClient's URL. The new BlockBlobClient uses the same request policy pipeline as the ContainerClient. -// To change the pipeline, create the BlockBlobClient and then call its WithPipeline method passing in the -// desired pipeline object. Or, call this package's NewBlockBlobClient instead of calling this object's -// NewBlockBlobClient method. -func (c *ContainerClient) NewBlockBlobClient(blobName string) (*BlockBlobClient, error) { - blobURL := appendToURLPath(c.URL(), blobName) - - return &BlockBlobClient{ - BlobClient: BlobClient{ - client: newBlobClient(blobURL, c.client.pl), - sharedKey: c.sharedKey, - }, - client: newBlockBlobClient(blobURL, c.client.pl), - }, nil -} - -// NewPageBlobClient creates a new PageBlobURL object by concatenating blobName to the end of ContainerClient's URL. The new PageBlobURL uses the same request policy pipeline as the ContainerClient. -// To change the pipeline, create the PageBlobURL and then call its WithPipeline method passing in the -// desired pipeline object. Or, call this package's NewPageBlobClient instead of calling this object's -// NewPageBlobClient method. -func (c *ContainerClient) NewPageBlobClient(blobName string) (*PageBlobClient, error) { - blobURL := appendToURLPath(c.URL(), blobName) - - return &PageBlobClient{ - BlobClient: BlobClient{ - client: newBlobClient(blobURL, c.client.pl), - sharedKey: c.sharedKey, - }, - client: newPageBlobClient(blobURL, c.client.pl), - }, nil -} - -// Create creates a new container within a storage account. If a container with the same name already exists, the operation fails. -// For more information, see https://docs.microsoft.com/rest/api/storageservices/create-container. -func (c *ContainerClient) Create(ctx context.Context, options *ContainerCreateOptions) (ContainerCreateResponse, error) { - basics, cpkInfo := options.format() - resp, err := c.client.Create(ctx, basics, cpkInfo) - - return toContainerCreateResponse(resp), handleError(err) -} - -// Delete marks the specified container for deletion. The container and any blobs contained within it are later deleted during garbage collection. -// For more information, see https://docs.microsoft.com/rest/api/storageservices/delete-container. -func (c *ContainerClient) Delete(ctx context.Context, o *ContainerDeleteOptions) (ContainerDeleteResponse, error) { - basics, leaseInfo, accessConditions := o.format() - resp, err := c.client.Delete(ctx, basics, leaseInfo, accessConditions) - - return toContainerDeleteResponse(resp), handleError(err) -} - -// GetProperties returns the container's properties. -// For more information, see https://docs.microsoft.com/rest/api/storageservices/get-container-metadata. -func (c *ContainerClient) GetProperties(ctx context.Context, o *ContainerGetPropertiesOptions) (ContainerGetPropertiesResponse, error) { - // NOTE: GetMetadata actually calls GetProperties internally because GetProperties returns the metadata AND the properties. - // This allows us to not expose a GetProperties method at all simplifying the API. - // The optionals are nil, like they were in track 1.5 - options, leaseAccess := o.format() - resp, err := c.client.GetProperties(ctx, options, leaseAccess) - - return toContainerGetPropertiesResponse(resp), handleError(err) -} - -// SetMetadata sets the container's metadata. -// For more information, see https://docs.microsoft.com/rest/api/storageservices/set-container-metadata. -func (c *ContainerClient) SetMetadata(ctx context.Context, o *ContainerSetMetadataOptions) (ContainerSetMetadataResponse, error) { - metadataOptions, lac, mac := o.format() - resp, err := c.client.SetMetadata(ctx, metadataOptions, lac, mac) - - return toContainerSetMetadataResponse(resp), handleError(err) -} - -// GetAccessPolicy returns the container's access policy. The access policy indicates whether container's blobs may be accessed publicly. -// For more information, see https://docs.microsoft.com/rest/api/storageservices/get-container-acl. -func (c *ContainerClient) GetAccessPolicy(ctx context.Context, o *ContainerGetAccessPolicyOptions) (ContainerGetAccessPolicyResponse, error) { - options, ac := o.format() - resp, err := c.client.GetAccessPolicy(ctx, options, ac) - - return toContainerGetAccessPolicyResponse(resp), handleError(err) -} - -// SetAccessPolicy sets the container's permissions. The access policy indicates whether blobs in a container may be accessed publicly. -// For more information, see https://docs.microsoft.com/rest/api/storageservices/set-container-acl. -func (c *ContainerClient) SetAccessPolicy(ctx context.Context, o *ContainerSetAccessPolicyOptions) (ContainerSetAccessPolicyResponse, error) { - accessPolicy, mac, lac := o.format() - resp, err := c.client.SetAccessPolicy(ctx, accessPolicy, mac, lac) - - return toContainerSetAccessPolicyResponse(resp), handleError(err) -} - -// ListBlobsFlat returns a pager for blobs starting from the specified Marker. Use an empty -// Marker to start enumeration from the beginning. Blob names are returned in lexicographic order. -// For more information, see https://docs.microsoft.com/rest/api/storageservices/list-blobs. -func (c *ContainerClient) ListBlobsFlat(o *ContainerListBlobsFlatOptions) *ContainerListBlobFlatPager { - listOptions := o.format() - pager := c.client.ListBlobFlatSegment(listOptions) - - // override the advancer - pager.advancer = func(ctx context.Context, response containerClientListBlobFlatSegmentResponse) (*policy.Request, error) { - listOptions.Marker = response.NextMarker - return c.client.listBlobFlatSegmentCreateRequest(ctx, listOptions) - } - - return toContainerListBlobFlatSegmentPager(pager) -} - -// ListBlobsHierarchy returns a channel of blobs starting from the specified Marker. Use an empty -// Marker to start enumeration from the beginning. Blob names are returned in lexicographic order. -// After getting a segment, process it, and then call ListBlobsHierarchicalSegment again (passing the the -// previously-returned Marker) to get the next segment. -// For more information, see https://docs.microsoft.com/rest/api/storageservices/list-blobs. -// AutoPagerTimeout specifies the amount of time with no read operations before the channel times out and closes. Specify no time and it will be ignored. -// AutoPagerBufferSize specifies the channel's buffer size. -// Both the blob item channel and error channel should be watched. Only one error will be released via this channel (or a nil error, to register a clean exit.) -func (c *ContainerClient) ListBlobsHierarchy(delimiter string, o *ContainerListBlobsHierarchyOptions) *ContainerListBlobHierarchyPager { - listOptions := o.format() - pager := c.client.ListBlobHierarchySegment(delimiter, listOptions) - - // override the advancer - pager.advancer = func(ctx context.Context, response containerClientListBlobHierarchySegmentResponse) (*policy.Request, error) { - listOptions.Marker = response.NextMarker - return c.client.listBlobHierarchySegmentCreateRequest(ctx, delimiter, listOptions) - } - - return toContainerListBlobHierarchySegmentPager(pager) -} - -// GetSASURL is a convenience method for generating a SAS token for the currently pointed at container. -// It can only be used if the credential supplied during creation was a SharedKeyCredential. -func (c *ContainerClient) GetSASURL(permissions ContainerSASPermissions, start time.Time, expiry time.Time) (string, error) { - if c.sharedKey == nil { - return "", errors.New("SAS can only be signed with a SharedKeyCredential") - } - - urlParts, err := NewBlobURLParts(c.URL()) - if err != nil { - return "", err - } - - // Containers do not have snapshots, nor versions. - urlParts.SAS, err = BlobSASSignatureValues{ - ContainerName: urlParts.ContainerName, - Permissions: permissions.String(), - StartTime: start.UTC(), - ExpiryTime: expiry.UTC(), - }.NewSASQueryParameters(c.sharedKey) - - return urlParts.URL(), err -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_container_lease_client.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_container_lease_client.go deleted file mode 100644 index 395a72a89aaa..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_container_lease_client.go +++ /dev/null @@ -1,102 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azblob - -import ( - "context" - "errors" - - "github.com/Azure/azure-sdk-for-go/sdk/azcore/to" - "github.com/Azure/azure-sdk-for-go/sdk/internal/uuid" -) - -//ContainerLeaseClient represents lease client of container -type ContainerLeaseClient struct { - ContainerClient - leaseID *string -} - -// NewContainerLeaseClient is constructor of ContainerLeaseClient -func (c *ContainerClient) NewContainerLeaseClient(leaseID *string) (*ContainerLeaseClient, error) { - if leaseID == nil { - generatedUuid, err := uuid.New() - if err != nil { - return nil, err - } - leaseID = to.Ptr(generatedUuid.String()) - } - return &ContainerLeaseClient{ - ContainerClient: *c, - leaseID: leaseID, - }, nil -} - -// AcquireLease acquires a lease on the container for delete operations. The lease Duration must be between 15 to 60 seconds, or infinite (-1). -// For more information, see https://docs.microsoft.com/rest/api/storageservices/lease-container. -func (clc *ContainerLeaseClient) AcquireLease(ctx context.Context, options *ContainerAcquireLeaseOptions) (ContainerAcquireLeaseResponse, error) { - containerAcquireLeaseOptions, modifiedAccessConditions := options.format() - containerAcquireLeaseOptions.ProposedLeaseID = clc.leaseID - - resp, err := clc.client.AcquireLease(ctx, &containerAcquireLeaseOptions, modifiedAccessConditions) - if err == nil && resp.LeaseID != nil { - clc.leaseID = resp.LeaseID - } - return toContainerAcquireLeaseResponse(resp), handleError(err) -} - -// BreakLease breaks the container's previously-acquired lease (if it exists). -// For more information, see https://docs.microsoft.com/rest/api/storageservices/lease-container. -func (clc *ContainerLeaseClient) BreakLease(ctx context.Context, options *ContainerBreakLeaseOptions) (ContainerBreakLeaseResponse, error) { - containerBreakLeaseOptions, modifiedAccessConditions := options.format() - resp, err := clc.client.BreakLease(ctx, containerBreakLeaseOptions, modifiedAccessConditions) - return toContainerBreakLeaseResponse(resp), handleError(err) -} - -// ChangeLease changes the container's lease ID. -// For more information, see https://docs.microsoft.com/rest/api/storageservices/lease-container. -func (clc *ContainerLeaseClient) ChangeLease(ctx context.Context, options *ContainerChangeLeaseOptions) (ContainerChangeLeaseResponse, error) { - if clc.leaseID == nil { - return ContainerChangeLeaseResponse{}, errors.New("leaseID cannot be nil") - } - - proposedLeaseID, changeLeaseOptions, modifiedAccessConditions, err := options.format() - if err != nil { - return ContainerChangeLeaseResponse{}, err - } - - resp, err := clc.client.ChangeLease(ctx, *clc.leaseID, *proposedLeaseID, changeLeaseOptions, modifiedAccessConditions) - if err == nil && resp.LeaseID != nil { - clc.leaseID = resp.LeaseID - } - return toContainerChangeLeaseResponse(resp), handleError(err) -} - -// ReleaseLease releases the container's previously-acquired lease. -// For more information, see https://docs.microsoft.com/rest/api/storageservices/lease-container. -func (clc *ContainerLeaseClient) ReleaseLease(ctx context.Context, options *ContainerReleaseLeaseOptions) (ContainerReleaseLeaseResponse, error) { - if clc.leaseID == nil { - return ContainerReleaseLeaseResponse{}, errors.New("leaseID cannot be nil") - } - containerReleaseLeaseOptions, modifiedAccessConditions := options.format() - resp, err := clc.client.ReleaseLease(ctx, *clc.leaseID, containerReleaseLeaseOptions, modifiedAccessConditions) - - return toContainerReleaseLeaseResponse(resp), handleError(err) -} - -// RenewLease renews the container's previously-acquired lease. -// For more information, see https://docs.microsoft.com/rest/api/storageservices/lease-container. -func (clc *ContainerLeaseClient) RenewLease(ctx context.Context, options *ContainerRenewLeaseOptions) (ContainerRenewLeaseResponse, error) { - if clc.leaseID == nil { - return ContainerRenewLeaseResponse{}, errors.New("leaseID cannot be nil") - } - renewLeaseBlobOptions, modifiedAccessConditions := options.format() - resp, err := clc.client.RenewLease(ctx, *clc.leaseID, renewLeaseBlobOptions, modifiedAccessConditions) - if err == nil && resp.LeaseID != nil { - clc.leaseID = resp.LeaseID - } - return toContainerRenewLeaseResponse(resp), handleError(err) -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_page_blob_client.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_page_blob_client.go deleted file mode 100644 index 507993b9e5d0..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_page_blob_client.go +++ /dev/null @@ -1,261 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azblob - -import ( - "context" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" - "io" - "net/url" - - "github.com/Azure/azure-sdk-for-go/sdk/azcore" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime" -) - -// PageBlobClient represents a client to an Azure Storage page blob; -type PageBlobClient struct { - BlobClient - client *pageBlobClient -} - -// NewPageBlobClient creates a ServiceClient object using the specified URL, Azure AD credential, and options. -// Example of serviceURL: https://.blob.core.windows.net -func NewPageBlobClient(blobURL string, cred azcore.TokenCredential, options *ClientOptions) (*PageBlobClient, error) { - authPolicy := runtime.NewBearerTokenPolicy(cred, []string{tokenScope}, nil) - conOptions := getConnectionOptions(options) - conOptions.PerRetryPolicies = append(conOptions.PerRetryPolicies, authPolicy) - conn := newConnection(blobURL, conOptions) - - return &PageBlobClient{ - client: newPageBlobClient(conn.Endpoint(), conn.Pipeline()), - BlobClient: BlobClient{ - client: newBlobClient(conn.Endpoint(), conn.Pipeline()), - }, - }, nil -} - -// NewPageBlobClientWithNoCredential creates a ServiceClient object using the specified URL and options. -// Example of serviceURL: https://.blob.core.windows.net? -func NewPageBlobClientWithNoCredential(blobURL string, options *ClientOptions) (*PageBlobClient, error) { - conOptions := getConnectionOptions(options) - conn := newConnection(blobURL, conOptions) - - return &PageBlobClient{ - client: newPageBlobClient(conn.Endpoint(), conn.Pipeline()), - BlobClient: BlobClient{ - client: newBlobClient(conn.Endpoint(), conn.Pipeline()), - }, - }, nil -} - -// NewPageBlobClientWithSharedKey creates a ServiceClient object using the specified URL, shared key, and options. -// Example of serviceURL: https://.blob.core.windows.net -func NewPageBlobClientWithSharedKey(blobURL string, cred *SharedKeyCredential, options *ClientOptions) (*PageBlobClient, error) { - authPolicy := newSharedKeyCredPolicy(cred) - conOptions := getConnectionOptions(options) - conOptions.PerRetryPolicies = append(conOptions.PerRetryPolicies, authPolicy) - conn := newConnection(blobURL, conOptions) - - return &PageBlobClient{ - client: newPageBlobClient(conn.Endpoint(), conn.Pipeline()), - BlobClient: BlobClient{ - client: newBlobClient(conn.Endpoint(), conn.Pipeline()), - sharedKey: cred, - }, - }, nil -} - -// WithSnapshot creates a new PageBlobURL object identical to the source but with the specified snapshot timestamp. -// Pass "" to remove the snapshot returning a URL to the base blob. -func (pb *PageBlobClient) WithSnapshot(snapshot string) (*PageBlobClient, error) { - p, err := NewBlobURLParts(pb.URL()) - if err != nil { - return nil, err - } - p.Snapshot = snapshot - - endpoint := p.URL() - pipeline := pb.client.pl - return &PageBlobClient{ - client: newPageBlobClient(endpoint, pipeline), - BlobClient: BlobClient{ - client: newBlobClient(endpoint, pipeline), - sharedKey: pb.sharedKey, - }, - }, nil -} - -// WithVersionID creates a new PageBlobURL object identical to the source but with the specified snapshot timestamp. -// Pass "" to remove the version returning a URL to the base blob. -func (pb *PageBlobClient) WithVersionID(versionID string) (*PageBlobClient, error) { - p, err := NewBlobURLParts(pb.URL()) - if err != nil { - return nil, err - } - - p.VersionID = versionID - endpoint := p.URL() - - pipeline := pb.client.pl - return &PageBlobClient{ - client: newPageBlobClient(endpoint, pipeline), - BlobClient: BlobClient{ - client: newBlobClient(endpoint, pipeline), - sharedKey: pb.sharedKey, - }, - }, nil -} - -// Create creates a page blob of the specified length. Call PutPage to upload data to a page blob. -// For more information, see https://docs.microsoft.com/rest/api/storageservices/put-blob. -func (pb *PageBlobClient) Create(ctx context.Context, size int64, o *PageBlobCreateOptions) (PageBlobCreateResponse, error) { - createOptions, HTTPHeaders, leaseAccessConditions, cpkInfo, cpkScopeInfo, modifiedAccessConditions := o.format() - - resp, err := pb.client.Create(ctx, 0, size, createOptions, HTTPHeaders, leaseAccessConditions, cpkInfo, cpkScopeInfo, modifiedAccessConditions) - - return toPageBlobCreateResponse(resp), handleError(err) -} - -// UploadPages writes 1 or more pages to the page blob. The start offset and the stream size must be a multiple of 512 bytes. -// This method panics if the stream is not at position 0. -// Note that the http client closes the body stream after the request is sent to the service. -// For more information, see https://docs.microsoft.com/rest/api/storageservices/put-page. -func (pb *PageBlobClient) UploadPages(ctx context.Context, body io.ReadSeekCloser, options *PageBlobUploadPagesOptions) (PageBlobUploadPagesResponse, error) { - count, err := validateSeekableStreamAt0AndGetCount(body) - - if err != nil { - return PageBlobUploadPagesResponse{}, err - } - - uploadPagesOptions, leaseAccessConditions, cpkInfo, cpkScopeInfo, sequenceNumberAccessConditions, modifiedAccessConditions := options.format() - - resp, err := pb.client.UploadPages(ctx, count, body, uploadPagesOptions, leaseAccessConditions, - cpkInfo, cpkScopeInfo, sequenceNumberAccessConditions, modifiedAccessConditions) - - return toPageBlobUploadPagesResponse(resp), handleError(err) -} - -// UploadPagesFromURL copies 1 or more pages from a source URL to the page blob. -// The sourceOffset specifies the start offset of source data to copy from. -// The destOffset specifies the start offset of data in page blob will be written to. -// The count must be a multiple of 512 bytes. -// For more information, see https://docs.microsoft.com/rest/api/storageservices/put-page-from-url. -func (pb *PageBlobClient) UploadPagesFromURL(ctx context.Context, source string, sourceOffset, destOffset, count int64, - options *PageBlobUploadPagesFromURLOptions) (PageBlobUploadPagesFromURLResponse, error) { - - uploadPagesFromURLOptions, cpkInfo, cpkScopeInfo, leaseAccessConditions, sequenceNumberAccessConditions, modifiedAccessConditions, sourceModifiedAccessConditions := options.format() - - resp, err := pb.client.UploadPagesFromURL(ctx, source, rangeToString(sourceOffset, count), 0, - rangeToString(destOffset, count), uploadPagesFromURLOptions, cpkInfo, cpkScopeInfo, leaseAccessConditions, - sequenceNumberAccessConditions, modifiedAccessConditions, sourceModifiedAccessConditions) - - return toPageBlobUploadPagesFromURLResponse(resp), handleError(err) -} - -// ClearPages frees the specified pages from the page blob. -// For more information, see https://docs.microsoft.com/rest/api/storageservices/put-page. -func (pb *PageBlobClient) ClearPages(ctx context.Context, pageRange HttpRange, options *PageBlobClearPagesOptions) (PageBlobClearPagesResponse, error) { - clearOptions := &pageBlobClientClearPagesOptions{ - Range: pageRange.format(), - } - - leaseAccessConditions, cpkInfo, cpkScopeInfo, sequenceNumberAccessConditions, modifiedAccessConditions := options.format() - - resp, err := pb.client.ClearPages(ctx, 0, clearOptions, leaseAccessConditions, cpkInfo, - cpkScopeInfo, sequenceNumberAccessConditions, modifiedAccessConditions) - - return toPageBlobClearPagesResponse(resp), handleError(err) -} - -// GetPageRanges returns the list of valid page ranges for a page blob or snapshot of a page blob. -// For more information, see https://docs.microsoft.com/rest/api/storageservices/get-page-ranges. -func (pb *PageBlobClient) GetPageRanges(options *PageBlobGetPageRangesOptions) *PageBlobGetPageRangesPager { - getPageRangesOptions, leaseAccessConditions, modifiedAccessConditions := options.format() - - pageBlobGetPageRangesPager := pb.client.GetPageRanges(getPageRangesOptions, leaseAccessConditions, modifiedAccessConditions) - - // Fixing Advancer - pageBlobGetPageRangesPager.advancer = func(ctx context.Context, response pageBlobClientGetPageRangesResponse) (*policy.Request, error) { - getPageRangesOptions.Marker = response.NextMarker - req, err := pb.client.getPageRangesCreateRequest(ctx, getPageRangesOptions, leaseAccessConditions, modifiedAccessConditions) - if err != nil { - return nil, handleError(err) - } - queryValues, err := url.ParseQuery(req.Raw().URL.RawQuery) - if err != nil { - return nil, handleError(err) - } - req.Raw().URL.RawQuery = queryValues.Encode() - return req, nil - } - - return toPageBlobGetPageRangesPager(pageBlobGetPageRangesPager) -} - -// GetPageRangesDiff gets the collection of page ranges that differ between a specified snapshot and this page blob. -// For more information, see https://docs.microsoft.com/rest/api/storageservices/get-page-ranges. -func (pb *PageBlobClient) GetPageRangesDiff(options *PageBlobGetPageRangesDiffOptions) *PageBlobGetPageRangesDiffPager { - getPageRangesDiffOptions, leaseAccessConditions, modifiedAccessConditions := options.format() - - getPageRangesDiffPager := pb.client.GetPageRangesDiff(getPageRangesDiffOptions, leaseAccessConditions, modifiedAccessConditions) - - // Fixing Advancer - getPageRangesDiffPager.advancer = func(ctx context.Context, response pageBlobClientGetPageRangesDiffResponse) (*policy.Request, error) { - getPageRangesDiffOptions.Marker = response.NextMarker - req, err := pb.client.getPageRangesDiffCreateRequest(ctx, getPageRangesDiffOptions, leaseAccessConditions, modifiedAccessConditions) - if err != nil { - return nil, handleError(err) - } - queryValues, err := url.ParseQuery(req.Raw().URL.RawQuery) - if err != nil { - return nil, handleError(err) - } - req.Raw().URL.RawQuery = queryValues.Encode() - return req, nil - } - - return toPageBlobGetPageRangesDiffPager(getPageRangesDiffPager) -} - -// Resize resizes the page blob to the specified size (which must be a multiple of 512). -// For more information, see https://docs.microsoft.com/rest/api/storageservices/set-blob-properties. -func (pb *PageBlobClient) Resize(ctx context.Context, size int64, options *PageBlobResizeOptions) (PageBlobResizeResponse, error) { - resizeOptions, leaseAccessConditions, cpkInfo, cpkScopeInfo, modifiedAccessConditions := options.format() - - resp, err := pb.client.Resize(ctx, size, resizeOptions, leaseAccessConditions, cpkInfo, cpkScopeInfo, modifiedAccessConditions) - - return toPageBlobResizeResponse(resp), handleError(err) -} - -// UpdateSequenceNumber sets the page blob's sequence number. -func (pb *PageBlobClient) UpdateSequenceNumber(ctx context.Context, options *PageBlobUpdateSequenceNumberOptions) (PageBlobUpdateSequenceNumberResponse, error) { - actionType, updateOptions, lac, mac := options.format() - resp, err := pb.client.UpdateSequenceNumber(ctx, *actionType, updateOptions, lac, mac) - - return toPageBlobUpdateSequenceNumberResponse(resp), handleError(err) -} - -// StartCopyIncremental begins an operation to start an incremental copy from one page blob's snapshot to this page blob. -// The snapshot is copied such that only the differential changes between the previously copied snapshot are transferred to the destination. -// The copied snapshots are complete copies of the original snapshot and can be read or copied from as usual. -// For more information, see https://docs.microsoft.com/rest/api/storageservices/incremental-copy-blob and -// https://docs.microsoft.com/en-us/azure/virtual-machines/windows/incremental-snapshots. -func (pb *PageBlobClient) StartCopyIncremental(ctx context.Context, copySource string, prevSnapshot string, options *PageBlobCopyIncrementalOptions) (PageBlobCopyIncrementalResponse, error) { - copySourceURL, err := url.Parse(copySource) - if err != nil { - return PageBlobCopyIncrementalResponse{}, err - } - - queryParams := copySourceURL.Query() - queryParams.Set("snapshot", prevSnapshot) - copySourceURL.RawQuery = queryParams.Encode() - - pageBlobCopyIncrementalOptions, modifiedAccessConditions := options.format() - resp, err := pb.client.CopyIncremental(ctx, copySourceURL.String(), pageBlobCopyIncrementalOptions, modifiedAccessConditions) - - return toPageBlobCopyIncrementalResponse(resp), handleError(err) -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_parsing_urls.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_parsing_urls.go deleted file mode 100644 index 062587604e85..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_parsing_urls.go +++ /dev/null @@ -1,184 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azblob - -import ( - "net" - "net/url" - "strings" -) - -const ( - snapshot = "snapshot" - versionId = "versionid" - SnapshotTimeFormat = "2006-01-02T15:04:05.0000000Z07:00" -) - -// BlobURLParts object represents the components that make up an Azure Storage Container/Blob URL. You parse an -// existing URL into its parts by calling NewBlobURLParts(). You construct a URL from parts by calling URL(). -// NOTE: Changing any SAS-related field requires computing a new SAS signature. -type BlobURLParts struct { - Scheme string // Ex: "https://" - Host string // Ex: "account.blob.core.windows.net", "10.132.141.33", "10.132.141.33:80" - IPEndpointStyleInfo IPEndpointStyleInfo - ContainerName string // "" if no container - BlobName string // "" if no blob - Snapshot string // "" if not a snapshot - SAS SASQueryParameters - UnparsedParams string - VersionID string // "" if not versioning enabled -} - -// IPEndpointStyleInfo is used for IP endpoint style URL when working with Azure storage emulator. -// Ex: "https://10.132.141.33/accountname/containername" -type IPEndpointStyleInfo struct { - AccountName string // "" if not using IP endpoint style -} - -// isIPEndpointStyle checkes if URL's host is IP, in this case the storage account endpoint will be composed as: -// http(s)://IP(:port)/storageaccount/container/... -// As url's Host property, host could be both host or host:port -func isIPEndpointStyle(host string) bool { - if host == "" { - return false - } - if h, _, err := net.SplitHostPort(host); err == nil { - host = h - } - // For IPv6, there could be case where SplitHostPort fails for cannot finding port. - // In this case, eliminate the '[' and ']' in the URL. - // For details about IPv6 URL, please refer to https://tools.ietf.org/html/rfc2732 - if host[0] == '[' && host[len(host)-1] == ']' { - host = host[1 : len(host)-1] - } - return net.ParseIP(host) != nil -} - -// NewBlobURLParts parses a URL initializing BlobURLParts' fields including any SAS-related & snapshot query parameters. Any other -// query parameters remain in the UnparsedParams field. This method overwrites all fields in the BlobURLParts object. -func NewBlobURLParts(u string) (BlobURLParts, error) { - uri, err := url.Parse(u) - if err != nil { - return BlobURLParts{}, err - } - - up := BlobURLParts{ - Scheme: uri.Scheme, - Host: uri.Host, - } - - // Find the container & blob names (if any) - if uri.Path != "" { - path := uri.Path - if path[0] == '/' { - path = path[1:] // If path starts with a slash, remove it - } - if isIPEndpointStyle(up.Host) { - if accountEndIndex := strings.Index(path, "/"); accountEndIndex == -1 { // Slash not found; path has account name & no container name or blob - up.IPEndpointStyleInfo.AccountName = path - path = "" // No ContainerName present in the URL so path should be empty - } else { - up.IPEndpointStyleInfo.AccountName = path[:accountEndIndex] // The account name is the part between the slashes - path = path[accountEndIndex+1:] // path refers to portion after the account name now (container & blob names) - } - } - - containerEndIndex := strings.Index(path, "/") // Find the next slash (if it exists) - if containerEndIndex == -1 { // Slash not found; path has container name & no blob name - up.ContainerName = path - } else { - up.ContainerName = path[:containerEndIndex] // The container name is the part between the slashes - up.BlobName = path[containerEndIndex+1:] // The blob name is after the container slash - } - } - - // Convert the query parameters to a case-sensitive map & trim whitespace - paramsMap := uri.Query() - - up.Snapshot = "" // Assume no snapshot - if snapshotStr, ok := caseInsensitiveValues(paramsMap).Get(snapshot); ok { - up.Snapshot = snapshotStr[0] - // If we recognized the query parameter, remove it from the map - delete(paramsMap, snapshot) - } - - up.VersionID = "" // Assume no versionID - if versionIDs, ok := caseInsensitiveValues(paramsMap).Get(versionId); ok { - up.VersionID = versionIDs[0] - // If we recognized the query parameter, remove it from the map - delete(paramsMap, versionId) // delete "versionid" from paramsMap - delete(paramsMap, "versionId") // delete "versionId" from paramsMap - } - - up.SAS = newSASQueryParameters(paramsMap, true) - up.UnparsedParams = paramsMap.Encode() - return up, nil -} - -type caseInsensitiveValues url.Values // map[string][]string -func (values caseInsensitiveValues) Get(key string) ([]string, bool) { - key = strings.ToLower(key) - for k, v := range values { - if strings.ToLower(k) == key { - return v, true - } - } - return []string{}, false -} - -// URL returns a URL object whose fields are initialized from the BlobURLParts fields. The URL's RawQuery -// field contains the SAS, snapshot, and unparsed query parameters. -func (up BlobURLParts) URL() string { - path := "" - if isIPEndpointStyle(up.Host) && up.IPEndpointStyleInfo.AccountName != "" { - path += "/" + up.IPEndpointStyleInfo.AccountName - } - // Concatenate container & blob names (if they exist) - if up.ContainerName != "" { - path += "/" + up.ContainerName - if up.BlobName != "" { - path += "/" + up.BlobName - } - } - - rawQuery := up.UnparsedParams - - //If no snapshot is initially provided, fill it in from the SAS query properties to help the user - if up.Snapshot == "" && !up.SAS.snapshotTime.IsZero() { - up.Snapshot = up.SAS.snapshotTime.Format(SnapshotTimeFormat) - } - - // Concatenate blob version id query parameter (if it exists) - if up.VersionID != "" { - if len(rawQuery) > 0 { - rawQuery += "&" - } - rawQuery += versionId + "=" + up.VersionID - } - - // Concatenate blob snapshot query parameter (if it exists) - if up.Snapshot != "" { - if len(rawQuery) > 0 { - rawQuery += "&" - } - rawQuery += snapshot + "=" + up.Snapshot - } - sas := up.SAS.Encode() - if sas != "" { - if len(rawQuery) > 0 { - rawQuery += "&" - } - rawQuery += sas - } - u := url.URL{ - Scheme: up.Scheme, - Host: up.Host, - Path: path, - RawQuery: rawQuery, - } - return u.String() -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_response_error.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_response_error.go deleted file mode 100644 index 3f987843904b..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_response_error.go +++ /dev/null @@ -1,17 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azblob - -import "net/http" - -// ResponseError is a wrapper of error passed from service -type ResponseError interface { - Error() string - Unwrap() error - RawResponse() *http.Response - NonRetriable() -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_response_helpers.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_response_helpers.go deleted file mode 100644 index dda993d1c96c..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_response_helpers.go +++ /dev/null @@ -1,35 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azblob - -// GetHTTPHeaders returns the user-modifiable properties for this blob. -func (bgpr BlobGetPropertiesResponse) GetHTTPHeaders() BlobHTTPHeaders { - return BlobHTTPHeaders{ - BlobContentType: bgpr.ContentType, - BlobContentEncoding: bgpr.ContentEncoding, - BlobContentLanguage: bgpr.ContentLanguage, - BlobContentDisposition: bgpr.ContentDisposition, - BlobCacheControl: bgpr.CacheControl, - BlobContentMD5: bgpr.ContentMD5, - } -} - -/////////////////////////////////////////////////////////////////////////////// - -// GetHTTPHeaders returns the user-modifiable properties for this blob. -func (r BlobDownloadResponse) GetHTTPHeaders() BlobHTTPHeaders { - return BlobHTTPHeaders{ - BlobContentType: r.ContentType, - BlobContentEncoding: r.ContentEncoding, - BlobContentLanguage: r.ContentLanguage, - BlobContentDisposition: r.ContentDisposition, - BlobCacheControl: r.CacheControl, - BlobContentMD5: r.ContentMD5, - } -} - -/////////////////////////////////////////////////////////////////////////////// diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_retry_reader.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_retry_reader.go deleted file mode 100644 index 3179138f1113..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_retry_reader.go +++ /dev/null @@ -1,194 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azblob - -import ( - "context" - "io" - "net" - "net/http" - "strings" - "sync" -) - -const CountToEnd = 0 - -// HTTPGetter is a function type that refers to a method that performs an HTTP GET operation. -type HTTPGetter func(ctx context.Context, i HTTPGetterInfo) (*http.Response, error) - -// HTTPGetterInfo is passed to an HTTPGetter function passing it parameters -// that should be used to make an HTTP GET request. -type HTTPGetterInfo struct { - // Offset specifies the start offset that should be used when - // creating the HTTP GET request's Range header - Offset int64 - - // Count specifies the count of bytes that should be used to calculate - // the end offset when creating the HTTP GET request's Range header - Count int64 - - // ETag specifies the resource's etag that should be used when creating - // the HTTP GET request's If-Match header - ETag string -} - -// FailedReadNotifier is a function type that represents the notification function called when a read fails -type FailedReadNotifier func(failureCount int, lastError error, offset int64, count int64, willRetry bool) - -// RetryReaderOptions contains properties which can help to decide when to do retry. -type RetryReaderOptions struct { - // MaxRetryRequests specifies the maximum number of HTTP GET requests that will be made - // while reading from a RetryReader. A value of zero means that no additional HTTP - // GET requests will be made. - MaxRetryRequests int - doInjectError bool - doInjectErrorRound int - injectedError error - - // NotifyFailedRead is called, if non-nil, after any failure to read. Expected usage is diagnostic logging. - NotifyFailedRead FailedReadNotifier - - // TreatEarlyCloseAsError can be set to true to prevent retries after "read on closed response body". By default, - // retryReader has the following special behaviour: closing the response body before it is all read is treated as a - // retryable error. This is to allow callers to force a retry by closing the body from another goroutine (e.g. if the = - // read is too slow, caller may want to force a retry in the hope that the retry will be quicker). If - // TreatEarlyCloseAsError is true, then retryReader's special behaviour is suppressed, and "read on closed body" is instead - // treated as a fatal (non-retryable) error. - // Note that setting TreatEarlyCloseAsError only guarantees that Closing will produce a fatal error if the Close happens - // from the same "thread" (goroutine) as Read. Concurrent Close calls from other goroutines may instead produce network errors - // which will be retried. - TreatEarlyCloseAsError bool - - CpkInfo *CpkInfo - CpkScopeInfo *CpkScopeInfo -} - -// retryReader implements io.ReaderCloser methods. -// retryReader tries to read from response, and if there is retriable network error -// returned during reading, it will retry according to retry reader option through executing -// user defined action with provided data to get a new response, and continue the overall reading process -// through reading from the new response. -type retryReader struct { - ctx context.Context - info HTTPGetterInfo - countWasBounded bool - o RetryReaderOptions - getter HTTPGetter - - // we support Close-ing during Reads (from other goroutines), so we protect the shared state, which is response - responseMu *sync.Mutex - response *http.Response -} - -// NewRetryReader creates a retry reader. -func NewRetryReader(ctx context.Context, initialResponse *http.Response, - info HTTPGetterInfo, o RetryReaderOptions, getter HTTPGetter) io.ReadCloser { - return &retryReader{ - ctx: ctx, - getter: getter, - info: info, - countWasBounded: info.Count != CountToEnd, - response: initialResponse, - responseMu: &sync.Mutex{}, - o: o} -} - -func (s *retryReader) setResponse(r *http.Response) { - s.responseMu.Lock() - defer s.responseMu.Unlock() - s.response = r -} - -func (s *retryReader) Read(p []byte) (n int, err error) { - for try := 0; ; try++ { - //fmt.Println(try) // Comment out for debugging. - if s.countWasBounded && s.info.Count == CountToEnd { - // User specified an original count and the remaining bytes are 0, return 0, EOF - return 0, io.EOF - } - - s.responseMu.Lock() - resp := s.response - s.responseMu.Unlock() - if resp == nil { // We don't have a response stream to read from, try to get one. - newResponse, err := s.getter(s.ctx, s.info) - if err != nil { - return 0, err - } - // Successful GET; this is the network stream we'll read from. - s.setResponse(newResponse) - resp = newResponse - } - n, err := resp.Body.Read(p) // Read from the stream (this will return non-nil err if forceRetry is called, from another goroutine, while it is running) - - // Injection mechanism for testing. - if s.o.doInjectError && try == s.o.doInjectErrorRound { - if s.o.injectedError != nil { - err = s.o.injectedError - } else { - err = &net.DNSError{IsTemporary: true} - } - } - - // We successfully read data or end EOF. - if err == nil || err == io.EOF { - s.info.Offset += int64(n) // Increments the start offset in case we need to make a new HTTP request in the future - if s.info.Count != CountToEnd { - s.info.Count -= int64(n) // Decrement the count in case we need to make a new HTTP request in the future - } - return n, err // Return the return to the caller - } - _ = s.Close() - - s.setResponse(nil) // Our stream is no longer good - - // Check the retry count and error code, and decide whether to retry. - retriesExhausted := try >= s.o.MaxRetryRequests - _, isNetError := err.(net.Error) - isUnexpectedEOF := err == io.ErrUnexpectedEOF - willRetry := (isNetError || isUnexpectedEOF || s.wasRetryableEarlyClose(err)) && !retriesExhausted - - // Notify, for logging purposes, of any failures - if s.o.NotifyFailedRead != nil { - failureCount := try + 1 // because try is zero-based - s.o.NotifyFailedRead(failureCount, err, s.info.Offset, s.info.Count, willRetry) - } - - if willRetry { - continue - // Loop around and try to get and read from new stream. - } - return n, err // Not retryable, or retries exhausted, so just return - } -} - -// By default, we allow early Closing, from another concurrent goroutine, to be used to force a retry -// Is this safe, to close early from another goroutine? Early close ultimately ends up calling -// net.Conn.Close, and that is documented as "Any blocked Read or Write operations will be unblocked and return errors" -// which is exactly the behaviour we want. -// NOTE: that if caller has forced an early Close from a separate goroutine (separate from the Read) -// then there are two different types of error that may happen - either the one one we check for here, -// or a net.Error (due to closure of connection). Which one happens depends on timing. We only need this routine -// to check for one, since the other is a net.Error, which our main Read retry loop is already handing. -func (s *retryReader) wasRetryableEarlyClose(err error) bool { - if s.o.TreatEarlyCloseAsError { - return false // user wants all early closes to be errors, and so not retryable - } - // unfortunately, http.errReadOnClosedResBody is private, so the best we can do here is to check for its text - return strings.HasSuffix(err.Error(), ReadOnClosedBodyMessage) -} - -const ReadOnClosedBodyMessage = "read on closed response body" - -func (s *retryReader) Close() error { - s.responseMu.Lock() - defer s.responseMu.Unlock() - if s.response != nil && s.response.Body != nil { - return s.response.Body.Close() - } - return nil -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_sas_account.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_sas_account.go deleted file mode 100644 index b4104def5837..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_sas_account.go +++ /dev/null @@ -1,243 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azblob - -import ( - "bytes" - "errors" - "fmt" - "strings" - "time" -) - -// AccountSASSignatureValues is used to generate a Shared Access Signature (SAS) for an Azure Storage account. -// For more information, see https://docs.microsoft.com/rest/api/storageservices/constructing-an-account-sas -type AccountSASSignatureValues struct { - Version string `param:"sv"` // If not specified, this defaults to SASVersion - Protocol SASProtocol `param:"spr"` // See the SASProtocol* constants - StartTime time.Time `param:"st"` // Not specified if IsZero - ExpiryTime time.Time `param:"se"` // Not specified if IsZero - Permissions string `param:"sp"` // Create by initializing a AccountSASPermissions and then call String() - IPRange IPRange `param:"sip"` - Services string `param:"ss"` // Create by initializing AccountSASServices and then call String() - ResourceTypes string `param:"srt"` // Create by initializing AccountSASResourceTypes and then call String() -} - -// Sign uses an account's shared key credential to sign this signature values to produce -// the proper SAS query parameters. -func (v AccountSASSignatureValues) Sign(sharedKeyCredential *SharedKeyCredential) (SASQueryParameters, error) { - // https://docs.microsoft.com/en-us/rest/api/storageservices/Constructing-an-Account-SAS - if v.ExpiryTime.IsZero() || v.Permissions == "" || v.ResourceTypes == "" || v.Services == "" { - return SASQueryParameters{}, errors.New("account SAS is missing at least one of these: ExpiryTime, Permissions, Service, or ResourceType") - } - if v.Version == "" { - v.Version = SASVersion - } - perms := &AccountSASPermissions{} - if err := perms.Parse(v.Permissions); err != nil { - return SASQueryParameters{}, err - } - v.Permissions = perms.String() - - startTime, expiryTime, _ := FormatTimesForSASSigning(v.StartTime, v.ExpiryTime, time.Time{}) - - stringToSign := strings.Join([]string{ - sharedKeyCredential.AccountName(), - v.Permissions, - v.Services, - v.ResourceTypes, - startTime, - expiryTime, - v.IPRange.String(), - string(v.Protocol), - v.Version, - ""}, // That right, the account SAS requires a terminating extra newline - "\n") - - signature, err := sharedKeyCredential.ComputeHMACSHA256(stringToSign) - if err != nil { - return SASQueryParameters{}, err - } - p := SASQueryParameters{ - // Common SAS parameters - version: v.Version, - protocol: v.Protocol, - startTime: v.StartTime, - expiryTime: v.ExpiryTime, - permissions: v.Permissions, - ipRange: v.IPRange, - - // Account-specific SAS parameters - services: v.Services, - resourceTypes: v.ResourceTypes, - - // Calculated SAS signature - signature: signature, - } - - return p, nil -} - -// AccountSASPermissions type simplifies creating the permissions string for an Azure Storage Account SAS. -// Initialize an instance of this type and then call its String method to set AccountSASSignatureValues's Permissions field. -type AccountSASPermissions struct { - Read, Write, Delete, DeletePreviousVersion, List, Add, Create, Update, Process, Tag, FilterByTags bool -} - -// String produces the SAS permissions string for an Azure Storage account. -// Call this method to set AccountSASSignatureValues's Permissions field. -func (p AccountSASPermissions) String() string { - var buffer bytes.Buffer - if p.Read { - buffer.WriteRune('r') - } - if p.Write { - buffer.WriteRune('w') - } - if p.Delete { - buffer.WriteRune('d') - } - if p.DeletePreviousVersion { - buffer.WriteRune('x') - } - if p.List { - buffer.WriteRune('l') - } - if p.Add { - buffer.WriteRune('a') - } - if p.Create { - buffer.WriteRune('c') - } - if p.Update { - buffer.WriteRune('u') - } - if p.Process { - buffer.WriteRune('p') - } - if p.Tag { - buffer.WriteRune('t') - } - if p.FilterByTags { - buffer.WriteRune('f') - } - return buffer.String() -} - -// Parse initializes the AccountSASPermissions's fields from a string. -func (p *AccountSASPermissions) Parse(s string) error { - *p = AccountSASPermissions{} // Clear out the flags - for _, r := range s { - switch r { - case 'r': - p.Read = true - case 'w': - p.Write = true - case 'd': - p.Delete = true - case 'l': - p.List = true - case 'a': - p.Add = true - case 'c': - p.Create = true - case 'u': - p.Update = true - case 'p': - p.Process = true - case 'x': - p.Process = true - case 't': - p.Tag = true - case 'f': - p.FilterByTags = true - default: - return fmt.Errorf("invalid permission character: '%v'", r) - } - } - return nil -} - -// AccountSASServices type simplifies creating the services string for an Azure Storage Account SAS. -// Initialize an instance of this type and then call its String method to set AccountSASSignatureValues's Services field. -type AccountSASServices struct { - Blob, Queue, File bool -} - -// String produces the SAS services string for an Azure Storage account. -// Call this method to set AccountSASSignatureValues's Services field. -func (s AccountSASServices) String() string { - var buffer bytes.Buffer - if s.Blob { - buffer.WriteRune('b') - } - if s.Queue { - buffer.WriteRune('q') - } - if s.File { - buffer.WriteRune('f') - } - return buffer.String() -} - -// Parse initializes the AccountSASServices' fields from a string. -func (s *AccountSASServices) Parse(str string) error { - *s = AccountSASServices{} // Clear out the flags - for _, r := range str { - switch r { - case 'b': - s.Blob = true - case 'q': - s.Queue = true - case 'f': - s.File = true - default: - return fmt.Errorf("invalid service character: '%v'", r) - } - } - return nil -} - -// AccountSASResourceTypes type simplifies creating the resource types string for an Azure Storage Account SAS. -// Initialize an instance of this type and then call its String method to set AccountSASSignatureValues's ResourceTypes field. -type AccountSASResourceTypes struct { - Service, Container, Object bool -} - -// String produces the SAS resource types string for an Azure Storage account. -// Call this method to set AccountSASSignatureValues's ResourceTypes field. -func (rt AccountSASResourceTypes) String() string { - var buffer bytes.Buffer - if rt.Service { - buffer.WriteRune('s') - } - if rt.Container { - buffer.WriteRune('c') - } - if rt.Object { - buffer.WriteRune('o') - } - return buffer.String() -} - -// Parse initializes the AccountSASResourceType's fields from a string. -func (rt *AccountSASResourceTypes) Parse(s string) error { - *rt = AccountSASResourceTypes{} // Clear out the flags - for _, r := range s { - switch r { - case 's': - rt.Service = true - case 'c': - rt.Container = true - case 'o': - rt.Object = true - default: - return fmt.Errorf("invalid resource type: '%v'", r) - } - } - return nil -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_sas_query_params.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_sas_query_params.go deleted file mode 100644 index 7efbec9b8cf3..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_sas_query_params.go +++ /dev/null @@ -1,427 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azblob - -import ( - "errors" - "net" - "net/url" - "strings" - "time" -) - -// SASProtocol indicates the http/https. -type SASProtocol string - -const ( - // SASProtocolHTTPS can be specified for a SAS protocol - SASProtocolHTTPS SASProtocol = "https" - - // SASProtocolHTTPSandHTTP can be specified for a SAS protocol - //SASProtocolHTTPSandHTTP SASProtocol = "https,http" -) - -// FormatTimesForSASSigning converts a time.Time to a snapshotTimeFormat string suitable for a -// SASField's StartTime or ExpiryTime fields. Returns "" if value.IsZero(). -func FormatTimesForSASSigning(startTime, expiryTime, snapshotTime time.Time) (string, string, string) { - ss := "" - if !startTime.IsZero() { - ss = formatSASTimeWithDefaultFormat(&startTime) - } - se := "" - if !expiryTime.IsZero() { - se = formatSASTimeWithDefaultFormat(&expiryTime) - } - sh := "" - if !snapshotTime.IsZero() { - sh = snapshotTime.Format(SnapshotTimeFormat) - } - return ss, se, sh -} - -// SASTimeFormat represents the format of a SAS start or expiry time. Use it when formatting/parsing a time.Time. -const SASTimeFormat = "2006-01-02T15:04:05Z" //"2017-07-27T00:00:00Z" // ISO 8601 -var SASTimeFormats = []string{"2006-01-02T15:04:05.0000000Z", SASTimeFormat, "2006-01-02T15:04Z", "2006-01-02"} // ISO 8601 formats, please refer to https://docs.microsoft.com/en-us/rest/api/storageservices/constructing-a-service-sas for more details. - -// formatSASTimeWithDefaultFormat format time with ISO 8601 in "yyyy-MM-ddTHH:mm:ssZ". -func formatSASTimeWithDefaultFormat(t *time.Time) string { - return formatSASTime(t, SASTimeFormat) // By default, "yyyy-MM-ddTHH:mm:ssZ" is used -} - -// formatSASTime format time with given format, use ISO 8601 in "yyyy-MM-ddTHH:mm:ssZ" by default. -func formatSASTime(t *time.Time, format string) string { - if format != "" { - return t.Format(format) - } - return t.Format(SASTimeFormat) // By default, "yyyy-MM-ddTHH:mm:ssZ" is used -} - -// parseSASTimeString try to parse sas time string. -func parseSASTimeString(val string) (t time.Time, timeFormat string, err error) { - for _, sasTimeFormat := range SASTimeFormats { - t, err = time.Parse(sasTimeFormat, val) - if err == nil { - timeFormat = sasTimeFormat - break - } - } - - if err != nil { - err = errors.New("fail to parse time with IOS 8601 formats, please refer to https://docs.microsoft.com/en-us/rest/api/storageservices/constructing-a-service-sas for more details") - } - - return -} - -// https://docs.microsoft.com/en-us/rest/api/storageservices/constructing-a-service-sas - -// SASQueryParameters object represents the components that make up an Azure Storage SAS' query parameters. -// You parse a map of query parameters into its fields by calling NewSASQueryParameters(). You add the components -// to a query parameter map by calling AddToValues(). -// NOTE: Changing any field requires computing a new SAS signature using a XxxSASSignatureValues type. -// This type defines the components used by all Azure Storage resources (Containers, Blobs, Files, & Queues). -type SASQueryParameters struct { - // All members are immutable or values so copies of this struct are goroutine-safe. - version string `param:"sv"` - services string `param:"ss"` - resourceTypes string `param:"srt"` - protocol SASProtocol `param:"spr"` - startTime time.Time `param:"st"` - expiryTime time.Time `param:"se"` - snapshotTime time.Time `param:"snapshot"` - ipRange IPRange `param:"sip"` - identifier string `param:"si"` - resource string `param:"sr"` - permissions string `param:"sp"` - signature string `param:"sig"` - cacheControl string `param:"rscc"` - contentDisposition string `param:"rscd"` - contentEncoding string `param:"rsce"` - contentLanguage string `param:"rscl"` - contentType string `param:"rsct"` - signedOid string `param:"skoid"` - signedTid string `param:"sktid"` - signedStart time.Time `param:"skt"` - signedService string `param:"sks"` - signedExpiry time.Time `param:"ske"` - signedVersion string `param:"skv"` - signedDirectoryDepth string `param:"sdd"` - preauthorizedAgentObjectId string `param:"saoid"` - agentObjectId string `param:"suoid"` - correlationId string `param:"scid"` - // private member used for startTime and expiryTime formatting. - stTimeFormat string - seTimeFormat string -} - -// PreauthorizedAgentObjectId returns preauthorizedAgentObjectId -func (p *SASQueryParameters) PreauthorizedAgentObjectId() string { - return p.preauthorizedAgentObjectId -} - -// AgentObjectId returns agentObjectId -func (p *SASQueryParameters) AgentObjectId() string { - return p.agentObjectId -} - -// SignedCorrelationId returns signedCorrelationId -func (p *SASQueryParameters) SignedCorrelationId() string { - return p.correlationId -} - -// SignedTid returns aignedTid -func (p *SASQueryParameters) SignedTid() string { - return p.signedTid -} - -// SignedStart returns signedStart -func (p *SASQueryParameters) SignedStart() time.Time { - return p.signedStart -} - -// SignedExpiry returns signedExpiry -func (p *SASQueryParameters) SignedExpiry() time.Time { - return p.signedExpiry -} - -// SignedService returns signedService -func (p *SASQueryParameters) SignedService() string { - return p.signedService -} - -// SignedVersion returns signedVersion -func (p *SASQueryParameters) SignedVersion() string { - return p.signedVersion -} - -// SnapshotTime returns snapshotTime -func (p *SASQueryParameters) SnapshotTime() time.Time { - return p.snapshotTime -} - -// Version returns version -func (p *SASQueryParameters) Version() string { - return p.version -} - -// Services returns services -func (p *SASQueryParameters) Services() string { - return p.services -} - -// ResourceTypes returns resourceTypes -func (p *SASQueryParameters) ResourceTypes() string { - return p.resourceTypes -} - -// Protocol returns protocol -func (p *SASQueryParameters) Protocol() SASProtocol { - return p.protocol -} - -// StartTime returns startTime -func (p *SASQueryParameters) StartTime() time.Time { - return p.startTime -} - -// ExpiryTime returns expiryTime -func (p *SASQueryParameters) ExpiryTime() time.Time { - return p.expiryTime -} - -// IPRange returns ipRange -func (p *SASQueryParameters) IPRange() IPRange { - return p.ipRange -} - -// Identifier returns identifier -func (p *SASQueryParameters) Identifier() string { - return p.identifier -} - -// Resource returns resource -func (p *SASQueryParameters) Resource() string { - return p.resource -} - -// Permissions returns permissions -func (p *SASQueryParameters) Permissions() string { - return p.permissions -} - -// Signature returns signature -func (p *SASQueryParameters) Signature() string { - return p.signature -} - -// CacheControl returns cacheControl -func (p *SASQueryParameters) CacheControl() string { - return p.cacheControl -} - -// ContentDisposition returns contentDisposition -func (p *SASQueryParameters) ContentDisposition() string { - return p.contentDisposition -} - -// ContentEncoding returns contentEncoding -func (p *SASQueryParameters) ContentEncoding() string { - return p.contentEncoding -} - -// ContentLanguage returns contentLanguage -func (p *SASQueryParameters) ContentLanguage() string { - return p.contentLanguage -} - -// ContentType returns sontentType -func (p *SASQueryParameters) ContentType() string { - return p.contentType -} - -// SignedDirectoryDepth returns signedDirectoryDepth -func (p *SASQueryParameters) SignedDirectoryDepth() string { - return p.signedDirectoryDepth -} - -// IPRange represents a SAS IP range's start IP and (optionally) end IP. -type IPRange struct { - Start net.IP // Not specified if length = 0 - End net.IP // Not specified if length = 0 -} - -// String returns a string representation of an IPRange. -func (ipr *IPRange) String() string { - if len(ipr.Start) == 0 { - return "" - } - start := ipr.Start.String() - if len(ipr.End) == 0 { - return start - } - return start + "-" + ipr.End.String() -} - -// NewSASQueryParameters creates and initializes a SASQueryParameters object based on the -// query parameter map's passed-in values. If deleteSASParametersFromValues is true, -// all SAS-related query parameters are removed from the passed-in map. If -// deleteSASParametersFromValues is false, the map passed-in map is unaltered. -func newSASQueryParameters(values url.Values, deleteSASParametersFromValues bool) SASQueryParameters { - p := SASQueryParameters{} - for k, v := range values { - val := v[0] - isSASKey := true - switch strings.ToLower(k) { - case "sv": - p.version = val - case "ss": - p.services = val - case "srt": - p.resourceTypes = val - case "spr": - p.protocol = SASProtocol(val) - case "snapshot": - p.snapshotTime, _ = time.Parse(SnapshotTimeFormat, val) - case "st": - p.startTime, p.stTimeFormat, _ = parseSASTimeString(val) - case "se": - p.expiryTime, p.seTimeFormat, _ = parseSASTimeString(val) - case "sip": - dashIndex := strings.Index(val, "-") - if dashIndex == -1 { - p.ipRange.Start = net.ParseIP(val) - } else { - p.ipRange.Start = net.ParseIP(val[:dashIndex]) - p.ipRange.End = net.ParseIP(val[dashIndex+1:]) - } - case "si": - p.identifier = val - case "sr": - p.resource = val - case "sp": - p.permissions = val - case "sig": - p.signature = val - case "rscc": - p.cacheControl = val - case "rscd": - p.contentDisposition = val - case "rsce": - p.contentEncoding = val - case "rscl": - p.contentLanguage = val - case "rsct": - p.contentType = val - case "skoid": - p.signedOid = val - case "sktid": - p.signedTid = val - case "skt": - p.signedStart, _ = time.Parse(SASTimeFormat, val) - case "ske": - p.signedExpiry, _ = time.Parse(SASTimeFormat, val) - case "sks": - p.signedService = val - case "skv": - p.signedVersion = val - case "sdd": - p.signedDirectoryDepth = val - case "saoid": - p.preauthorizedAgentObjectId = val - case "suoid": - p.agentObjectId = val - case "scid": - p.correlationId = val - default: - isSASKey = false // We didn't recognize the query parameter - } - if isSASKey && deleteSASParametersFromValues { - delete(values, k) - } - } - return p -} - -// AddToValues adds the SAS components to the specified query parameters map. -func (p *SASQueryParameters) addToValues(v url.Values) url.Values { - if p.version != "" { - v.Add("sv", p.version) - } - if p.services != "" { - v.Add("ss", p.services) - } - if p.resourceTypes != "" { - v.Add("srt", p.resourceTypes) - } - if p.protocol != "" { - v.Add("spr", string(p.protocol)) - } - if !p.startTime.IsZero() { - v.Add("st", formatSASTime(&(p.startTime), p.stTimeFormat)) - } - if !p.expiryTime.IsZero() { - v.Add("se", formatSASTime(&(p.expiryTime), p.seTimeFormat)) - } - if len(p.ipRange.Start) > 0 { - v.Add("sip", p.ipRange.String()) - } - if p.identifier != "" { - v.Add("si", p.identifier) - } - if p.resource != "" { - v.Add("sr", p.resource) - } - if p.permissions != "" { - v.Add("sp", p.permissions) - } - if p.signedOid != "" { - v.Add("skoid", p.signedOid) - v.Add("sktid", p.signedTid) - v.Add("skt", p.signedStart.Format(SASTimeFormat)) - v.Add("ske", p.signedExpiry.Format(SASTimeFormat)) - v.Add("sks", p.signedService) - v.Add("skv", p.signedVersion) - } - if p.signature != "" { - v.Add("sig", p.signature) - } - if p.cacheControl != "" { - v.Add("rscc", p.cacheControl) - } - if p.contentDisposition != "" { - v.Add("rscd", p.contentDisposition) - } - if p.contentEncoding != "" { - v.Add("rsce", p.contentEncoding) - } - if p.contentLanguage != "" { - v.Add("rscl", p.contentLanguage) - } - if p.contentType != "" { - v.Add("rsct", p.contentType) - } - if p.signedDirectoryDepth != "" { - v.Add("sdd", p.signedDirectoryDepth) - } - if p.preauthorizedAgentObjectId != "" { - v.Add("saoid", p.preauthorizedAgentObjectId) - } - if p.agentObjectId != "" { - v.Add("suoid", p.agentObjectId) - } - if p.correlationId != "" { - v.Add("scid", p.correlationId) - } - return v -} - -// Encode encodes the SAS query parameters into URL encoded form sorted by key. -func (p *SASQueryParameters) Encode() string { - v := url.Values{} - p.addToValues(v) - return v.Encode() -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_sas_service.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_sas_service.go deleted file mode 100644 index 488baed8c0c3..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_sas_service.go +++ /dev/null @@ -1,365 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azblob - -import ( - "bytes" - "fmt" - "strings" - "time" -) - -// BlobSASSignatureValues is used to generate a Shared Access Signature (SAS) for an Azure Storage container or blob. -// For more information, see https://docs.microsoft.com/rest/api/storageservices/constructing-a-service-sas -type BlobSASSignatureValues struct { - Version string `param:"sv"` // If not specified, this defaults to SASVersion - Protocol SASProtocol `param:"spr"` // See the SASProtocol* constants - StartTime time.Time `param:"st"` // Not specified if IsZero - ExpiryTime time.Time `param:"se"` // Not specified if IsZero - SnapshotTime time.Time - Permissions string `param:"sp"` // Create by initializing a ContainerSASPermissions or BlobSASPermissions and then call String() - IPRange IPRange `param:"sip"` - Identifier string `param:"si"` - ContainerName string - BlobName string // Use "" to create a Container SAS - Directory string // Not nil for a directory SAS (ie sr=d) - CacheControl string // rscc - ContentDisposition string // rscd - ContentEncoding string // rsce - ContentLanguage string // rscl - ContentType string // rsct - BlobVersion string // sr=bv - PreauthorizedAgentObjectId string - AgentObjectId string - CorrelationId string -} - -func getDirectoryDepth(path string) string { - if path == "" { - return "" - } - return fmt.Sprint(strings.Count(path, "/") + 1) -} - -// NewSASQueryParameters uses an account's StorageAccountCredential to sign this signature values to produce -// the proper SAS query parameters. -// See: StorageAccountCredential. Compatible with both UserDelegationCredential and SharedKeyCredential -func (v BlobSASSignatureValues) NewSASQueryParameters(sharedKeyCredential *SharedKeyCredential) (SASQueryParameters, error) { - resource := "c" - if sharedKeyCredential == nil { - return SASQueryParameters{}, fmt.Errorf("cannot sign SAS query without Shared Key Credential") - } - - if !v.SnapshotTime.IsZero() { - resource = "bs" - //Make sure the permission characters are in the correct order - perms := &BlobSASPermissions{} - if err := perms.Parse(v.Permissions); err != nil { - return SASQueryParameters{}, err - } - v.Permissions = perms.String() - } else if v.BlobVersion != "" { - resource = "bv" - //Make sure the permission characters are in the correct order - perms := &BlobSASPermissions{} - if err := perms.Parse(v.Permissions); err != nil { - return SASQueryParameters{}, err - } - v.Permissions = perms.String() - } else if v.Directory != "" { - resource = "d" - v.BlobName = "" - perms := &BlobSASPermissions{} - if err := perms.Parse(v.Permissions); err != nil { - return SASQueryParameters{}, err - } - v.Permissions = perms.String() - } else if v.BlobName == "" { - // Make sure the permission characters are in the correct order - perms := &ContainerSASPermissions{} - if err := perms.Parse(v.Permissions); err != nil { - return SASQueryParameters{}, err - } - v.Permissions = perms.String() - } else { - resource = "b" - // Make sure the permission characters are in the correct order - perms := &BlobSASPermissions{} - if err := perms.Parse(v.Permissions); err != nil { - return SASQueryParameters{}, err - } - v.Permissions = perms.String() - } - if v.Version == "" { - v.Version = SASVersion - } - startTime, expiryTime, snapshotTime := FormatTimesForSASSigning(v.StartTime, v.ExpiryTime, v.SnapshotTime) - - signedIdentifier := v.Identifier - - //udk := sharedKeyCredential.getUDKParams() - // - //if udk != nil { - // udkStart, udkExpiry, _ := FormatTimesForSASSigning(udk.SignedStart, udk.SignedExpiry, time.Time{}) - // //I don't like this answer to combining the functions - // //But because signedIdentifier and the user delegation key strings share a place, this is an _OK_ way to do it. - // signedIdentifier = strings.Join([]string{ - // udk.SignedOid, - // udk.SignedTid, - // udkStart, - // udkExpiry, - // udk.SignedService, - // udk.SignedVersion, - // v.PreauthorizedAgentObjectId, - // v.AgentObjectId, - // v.CorrelationId, - // }, "\n") - //} - - // String to sign: http://msdn.microsoft.com/en-us/library/azure/dn140255.aspx - stringToSign := strings.Join([]string{ - v.Permissions, - startTime, - expiryTime, - getCanonicalName(sharedKeyCredential.AccountName(), v.ContainerName, v.BlobName, v.Directory), - signedIdentifier, - v.IPRange.String(), - string(v.Protocol), - v.Version, - resource, - snapshotTime, // signed timestamp - v.CacheControl, // rscc - v.ContentDisposition, // rscd - v.ContentEncoding, // rsce - v.ContentLanguage, // rscl - v.ContentType}, // rsct - "\n") - - signature := "" - signature, err := sharedKeyCredential.ComputeHMACSHA256(stringToSign) - if err != nil { - return SASQueryParameters{}, err - } - - p := SASQueryParameters{ - // Common SAS parameters - version: v.Version, - protocol: v.Protocol, - startTime: v.StartTime, - expiryTime: v.ExpiryTime, - permissions: v.Permissions, - ipRange: v.IPRange, - - // Container/Blob-specific SAS parameters - resource: resource, - identifier: v.Identifier, - cacheControl: v.CacheControl, - contentDisposition: v.ContentDisposition, - contentEncoding: v.ContentEncoding, - contentLanguage: v.ContentLanguage, - contentType: v.ContentType, - snapshotTime: v.SnapshotTime, - signedDirectoryDepth: getDirectoryDepth(v.Directory), - preauthorizedAgentObjectId: v.PreauthorizedAgentObjectId, - agentObjectId: v.AgentObjectId, - correlationId: v.CorrelationId, - // Calculated SAS signature - signature: signature, - } - - ////User delegation SAS specific parameters - //if udk != nil { - // p.signedOid = udk.SignedOid - // p.signedTid = udk.SignedTid - // p.signedStart = udk.SignedStart - // p.signedExpiry = udk.SignedExpiry - // p.signedService = udk.SignedService - // p.signedVersion = udk.SignedVersion - //} - - return p, nil -} - -// getCanonicalName computes the canonical name for a container or blob resource for SAS signing. -func getCanonicalName(account string, containerName string, blobName string, directoryName string) string { - // Container: "/blob/account/containername" - // Blob: "/blob/account/containername/blobname" - elements := []string{"/blob/", account, "/", containerName} - if blobName != "" { - elements = append(elements, "/", strings.Replace(blobName, "\\", "/", -1)) - } else if directoryName != "" { - elements = append(elements, "/", directoryName) - } - return strings.Join(elements, "") -} - -// ContainerSASPermissions type simplifies creating the permissions string for an Azure Storage container SAS. -// Initialize an instance of this type and then call its String method to set BlobSASSignatureValues's Permissions field. -// All permissions descriptions can be found here: https://docs.microsoft.com/en-us/rest/api/storageservices/create-service-sas#permissions-for-a-directory-container-or-blob -type ContainerSASPermissions struct { - Read, Add, Create, Write, Delete, DeletePreviousVersion, List, Tag bool - Execute, ModifyOwnership, ModifyPermissions bool // Hierarchical Namespace only -} - -// String produces the SAS permissions string for an Azure Storage container. -// Call this method to set BlobSASSignatureValues's Permissions field. -func (p ContainerSASPermissions) String() string { - var b bytes.Buffer - if p.Read { - b.WriteRune('r') - } - if p.Add { - b.WriteRune('a') - } - if p.Create { - b.WriteRune('c') - } - if p.Write { - b.WriteRune('w') - } - if p.Delete { - b.WriteRune('d') - } - if p.DeletePreviousVersion { - b.WriteRune('x') - } - if p.List { - b.WriteRune('l') - } - if p.Tag { - b.WriteRune('t') - } - if p.Execute { - b.WriteRune('e') - } - if p.ModifyOwnership { - b.WriteRune('o') - } - if p.ModifyPermissions { - b.WriteRune('p') - } - return b.String() -} - -// Parse initializes the ContainerSASPermissions's fields from a string. -func (p *ContainerSASPermissions) Parse(s string) error { - *p = ContainerSASPermissions{} // Clear the flags - for _, r := range s { - switch r { - case 'r': - p.Read = true - case 'a': - p.Add = true - case 'c': - p.Create = true - case 'w': - p.Write = true - case 'd': - p.Delete = true - case 'x': - p.DeletePreviousVersion = true - case 'l': - p.List = true - case 't': - p.Tag = true - case 'e': - p.Execute = true - case 'o': - p.ModifyOwnership = true - case 'p': - p.ModifyPermissions = true - default: - return fmt.Errorf("invalid permission: '%v'", r) - } - } - return nil -} - -// BlobSASPermissions type simplifies creating the permissions string for an Azure Storage blob SAS. -// Initialize an instance of this type and then call its String method to set BlobSASSignatureValues's Permissions field. -type BlobSASPermissions struct { - Read, Add, Create, Write, Delete, DeletePreviousVersion, Tag, List, Move, Execute, Ownership, Permissions bool -} - -// String produces the SAS permissions string for an Azure Storage blob. -// Call this method to set BlobSASSignatureValues's Permissions field. -func (p BlobSASPermissions) String() string { - var b bytes.Buffer - if p.Read { - b.WriteRune('r') - } - if p.Add { - b.WriteRune('a') - } - if p.Create { - b.WriteRune('c') - } - if p.Write { - b.WriteRune('w') - } - if p.Delete { - b.WriteRune('d') - } - if p.DeletePreviousVersion { - b.WriteRune('x') - } - if p.Tag { - b.WriteRune('t') - } - if p.List { - b.WriteRune('l') - } - if p.Move { - b.WriteRune('m') - } - if p.Execute { - b.WriteRune('e') - } - if p.Ownership { - b.WriteRune('o') - } - if p.Permissions { - b.WriteRune('p') - } - return b.String() -} - -// Parse initializes the BlobSASPermissions's fields from a string. -func (p *BlobSASPermissions) Parse(s string) error { - *p = BlobSASPermissions{} // Clear the flags - for _, r := range s { - switch r { - case 'r': - p.Read = true - case 'a': - p.Add = true - case 'c': - p.Create = true - case 'w': - p.Write = true - case 'd': - p.Delete = true - case 'x': - p.DeletePreviousVersion = true - case 't': - p.Tag = true - case 'l': - p.List = true - case 'm': - p.Move = true - case 'e': - p.Execute = true - case 'o': - p.Ownership = true - case 'p': - p.Permissions = true - default: - return fmt.Errorf("invalid permission: '%v'", r) - } - } - return nil -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_service_client.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_service_client.go deleted file mode 100644 index e75dd10b31e7..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_service_client.go +++ /dev/null @@ -1,266 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azblob - -import ( - "context" - "errors" - "net/url" - "strings" - "time" - - "github.com/Azure/azure-sdk-for-go/sdk/azcore" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime" -) - -//nolint -const ( - // ContainerNameRoot is the special Azure Storage name used to identify a storage account's root container. - ContainerNameRoot = "$root" - - // ContainerNameLogs is the special Azure Storage name used to identify a storage account's logs container. - ContainerNameLogs = "$logs" -) - -// ServiceClient represents a URL to the Azure Blob Storage service allowing you to manipulate blob containers. -type ServiceClient struct { - client *serviceClient - sharedKey *SharedKeyCredential -} - -// URL returns the URL endpoint used by the ServiceClient object. -func (s ServiceClient) URL() string { - return s.client.endpoint -} - -// NewServiceClient creates a ServiceClient object using the specified URL, Azure AD credential, and options. -// Example of serviceURL: https://.blob.core.windows.net -func NewServiceClient(serviceURL string, cred azcore.TokenCredential, options *ClientOptions) (*ServiceClient, error) { - authPolicy := runtime.NewBearerTokenPolicy(cred, []string{tokenScope}, nil) - conOptions := getConnectionOptions(options) - conOptions.PerRetryPolicies = append(conOptions.PerRetryPolicies, authPolicy) - conn := newConnection(serviceURL, conOptions) - - return &ServiceClient{ - client: newServiceClient(conn.Endpoint(), conn.Pipeline()), - }, nil -} - -// NewServiceClientWithNoCredential creates a ServiceClient object using the specified URL and options. -// Example of serviceURL: https://.blob.core.windows.net? -func NewServiceClientWithNoCredential(serviceURL string, options *ClientOptions) (*ServiceClient, error) { - conOptions := getConnectionOptions(options) - conn := newConnection(serviceURL, conOptions) - - return &ServiceClient{ - client: newServiceClient(conn.Endpoint(), conn.Pipeline()), - }, nil -} - -// NewServiceClientWithSharedKey creates a ServiceClient object using the specified URL, shared key, and options. -// Example of serviceURL: https://.blob.core.windows.net -func NewServiceClientWithSharedKey(serviceURL string, cred *SharedKeyCredential, options *ClientOptions) (*ServiceClient, error) { - authPolicy := newSharedKeyCredPolicy(cred) - conOptions := getConnectionOptions(options) - conOptions.PerRetryPolicies = append(conOptions.PerRetryPolicies, authPolicy) - conn := newConnection(serviceURL, conOptions) - - return &ServiceClient{ - client: newServiceClient(conn.Endpoint(), conn.Pipeline()), - sharedKey: cred, - }, nil -} - -// NewServiceClientFromConnectionString creates a service client from the given connection string. -//nolint -func NewServiceClientFromConnectionString(connectionString string, options *ClientOptions) (*ServiceClient, error) { - endpoint, credential, err := parseConnectionString(connectionString) - if err != nil { - return nil, err - } - return NewServiceClientWithSharedKey(endpoint, credential, options) -} - -// NewContainerClient creates a new ContainerClient object by concatenating containerName to the end of -// ServiceClient's URL. The new ContainerClient uses the same request policy pipeline as the ServiceClient. -// To change the pipeline, create the ContainerClient and then call its WithPipeline method passing in the -// desired pipeline object. Or, call this package's NewContainerClient instead of calling this object's -// NewContainerClient method. -func (s *ServiceClient) NewContainerClient(containerName string) (*ContainerClient, error) { - containerURL := appendToURLPath(s.client.endpoint, containerName) - return &ContainerClient{ - client: newContainerClient(containerURL, s.client.pl), - sharedKey: s.sharedKey, - }, nil -} - -// CreateContainer is a lifecycle method to creates a new container under the specified account. -// If the container with the same name already exists, a ResourceExistsError will be raised. -// This method returns a client with which to interact with the newly created container. -func (s *ServiceClient) CreateContainer(ctx context.Context, containerName string, options *ContainerCreateOptions) (ContainerCreateResponse, error) { - containerClient, err := s.NewContainerClient(containerName) - if err != nil { - return ContainerCreateResponse{}, err - } - containerCreateResp, err := containerClient.Create(ctx, options) - return containerCreateResp, err -} - -// DeleteContainer is a lifecycle method that marks the specified container for deletion. -// The container and any blobs contained within it are later deleted during garbage collection. -// If the container is not found, a ResourceNotFoundError will be raised. -func (s *ServiceClient) DeleteContainer(ctx context.Context, containerName string, options *ContainerDeleteOptions) (ContainerDeleteResponse, error) { - containerClient, _ := s.NewContainerClient(containerName) - containerDeleteResp, err := containerClient.Delete(ctx, options) - return containerDeleteResp, err -} - -// appendToURLPath appends a string to the end of a URL's path (prefixing the string with a '/' if required) -func appendToURLPath(u string, name string) string { - // e.g. "https://ms.com/a/b/?k1=v1&k2=v2#f" - // When you call url.Parse() this is what you'll get: - // Scheme: "https" - // Opaque: "" - // User: nil - // Host: "ms.com" - // Path: "/a/b/" This should start with a / and it might or might not have a trailing slash - // RawPath: "" - // ForceQuery: false - // RawQuery: "k1=v1&k2=v2" - // Fragment: "f" - uri, _ := url.Parse(u) - - if len(uri.Path) == 0 || uri.Path[len(uri.Path)-1] != '/' { - uri.Path += "/" // Append "/" to end before appending name - } - uri.Path += name - return uri.String() -} - -// GetAccountInfo provides account level information -func (s *ServiceClient) GetAccountInfo(ctx context.Context, o *ServiceGetAccountInfoOptions) (ServiceGetAccountInfoResponse, error) { - getAccountInfoOptions := o.format() - resp, err := s.client.GetAccountInfo(ctx, getAccountInfoOptions) - return toServiceGetAccountInfoResponse(resp), handleError(err) -} - -// ListContainers operation returns a pager of the containers under the specified account. -// Use an empty Marker to start enumeration from the beginning. Container names are returned in lexicographic order. -// For more information, see https://docs.microsoft.com/rest/api/storageservices/list-containers2. -func (s *ServiceClient) ListContainers(o *ListContainersOptions) *ServiceListContainersSegmentPager { - listOptions := o.format() - pager := s.client.ListContainersSegment(listOptions) - //TODO: .Err()? - //// override the generated advancer, which is incorrect - //if pager.Err() != nil { - // return pager - //} - - pager.advancer = func(ctx context.Context, response serviceClientListContainersSegmentResponse) (*policy.Request, error) { - if response.ListContainersSegmentResponse.NextMarker == nil { - return nil, handleError(errors.New("unexpected missing NextMarker")) - } - req, err := s.client.listContainersSegmentCreateRequest(ctx, listOptions) - if err != nil { - return nil, handleError(err) - } - queryValues, _ := url.ParseQuery(req.Raw().URL.RawQuery) - queryValues.Set("marker", *response.ListContainersSegmentResponse.NextMarker) - - req.Raw().URL.RawQuery = queryValues.Encode() - return req, nil - } - - return toServiceListContainersSegmentPager(*pager) -} - -// GetProperties - gets the properties of a storage account's Blob service, including properties for Storage Analytics -// and CORS (Cross-Origin Resource Sharing) rules. -func (s *ServiceClient) GetProperties(ctx context.Context, o *ServiceGetPropertiesOptions) (ServiceGetPropertiesResponse, error) { - getPropertiesOptions := o.format() - resp, err := s.client.GetProperties(ctx, getPropertiesOptions) - - return toServiceGetPropertiesResponse(resp), handleError(err) -} - -// SetProperties Sets the properties of a storage account's Blob service, including Azure Storage Analytics. -// If an element (e.g. analytics_logging) is left as None, the existing settings on the service for that functionality are preserved. -func (s *ServiceClient) SetProperties(ctx context.Context, o *ServiceSetPropertiesOptions) (ServiceSetPropertiesResponse, error) { - properties, setPropertiesOptions := o.format() - resp, err := s.client.SetProperties(ctx, properties, setPropertiesOptions) - - return toServiceSetPropertiesResponse(resp), handleError(err) -} - -// GetStatistics Retrieves statistics related to replication for the Blob service. -// It is only available when read-access geo-redundant replication is enabled for the storage account. -// With geo-redundant replication, Azure Storage maintains your data durable -// in two locations. In both locations, Azure Storage constantly maintains -// multiple healthy replicas of your data. The location where you read, -// create, update, or delete data is the primary storage account location. -// The primary location exists in the region you choose at the time you -// create an account via the Azure Management Azure classic portal, for -// example, North Central US. The location to which your data is replicated -// is the secondary location. The secondary location is automatically -// determined based on the location of the primary; it is in a second data -// center that resides in the same region as the primary location. Read-only -// access is available from the secondary location, if read-access geo-redundant -// replication is enabled for your storage account. -func (s *ServiceClient) GetStatistics(ctx context.Context, o *ServiceGetStatisticsOptions) (ServiceGetStatisticsResponse, error) { - getStatisticsOptions := o.format() - resp, err := s.client.GetStatistics(ctx, getStatisticsOptions) - - return toServiceGetStatisticsResponse(resp), handleError(err) -} - -// CanGetAccountSASToken checks if shared key in ServiceClient is nil -func (s *ServiceClient) CanGetAccountSASToken() bool { - return s.sharedKey != nil -} - -// GetSASURL is a convenience method for generating a SAS token for the currently pointed at account. -// It can only be used if the credential supplied during creation was a SharedKeyCredential. -// This validity can be checked with CanGetAccountSASToken(). -func (s *ServiceClient) GetSASURL(resources AccountSASResourceTypes, permissions AccountSASPermissions, start time.Time, expiry time.Time) (string, error) { - if s.sharedKey == nil { - return "", errors.New("SAS can only be signed with a SharedKeyCredential") - } - - qps, err := AccountSASSignatureValues{ - Version: SASVersion, - Protocol: SASProtocolHTTPS, - Permissions: permissions.String(), - Services: "b", - ResourceTypes: resources.String(), - StartTime: start.UTC(), - ExpiryTime: expiry.UTC(), - }.Sign(s.sharedKey) - if err != nil { - return "", err - } - - endpoint := s.URL() - if !strings.HasSuffix(endpoint, "/") { - endpoint += "/" - } - endpoint += "?" + qps.Encode() - - return endpoint, nil -} - -// FindBlobsByTags operation finds all blobs in the storage account whose tags match a given search expression. -// Filter blobs searches across all containers within a storage account but can be scoped within the expression to a single container. -// https://docs.microsoft.com/en-us/rest/api/storageservices/find-blobs-by-tags -// eg. "dog='germanshepherd' and penguin='emperorpenguin'" -// To specify a container, eg. "@container=’containerName’ and Name = ‘C’" -func (s *ServiceClient) FindBlobsByTags(ctx context.Context, o *ServiceFilterBlobsOptions) (ServiceFilterBlobsResponse, error) { - // TODO: Use pager here? Missing support from zz_generated_pagers.go - serviceFilterBlobsOptions := o.pointer() - resp, err := s.client.FilterBlobs(ctx, serviceFilterBlobsOptions) - return toServiceFilterBlobsResponse(resp), err -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_shared_policy_shared_key_credential.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_shared_policy_shared_key_credential.go deleted file mode 100644 index 60b1e5a76b6f..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_shared_policy_shared_key_credential.go +++ /dev/null @@ -1,197 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azblob - -import ( - "bytes" - "crypto/hmac" - "crypto/sha256" - "encoding/base64" - "fmt" - "net/http" - "net/url" - "sort" - "strings" - "sync/atomic" - "time" - - azlog "github.com/Azure/azure-sdk-for-go/sdk/azcore/log" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" - "github.com/Azure/azure-sdk-for-go/sdk/internal/log" -) - -// NewSharedKeyCredential creates an immutable SharedKeyCredential containing the -// storage account's name and either its primary or secondary key. -func NewSharedKeyCredential(accountName string, accountKey string) (*SharedKeyCredential, error) { - c := SharedKeyCredential{accountName: accountName} - if err := c.SetAccountKey(accountKey); err != nil { - return nil, err - } - return &c, nil -} - -// SharedKeyCredential contains an account's name and its primary or secondary key. -// It is immutable making it shareable and goroutine-safe. -type SharedKeyCredential struct { - // Only the NewSharedKeyCredential method should set these; all other methods should treat them as read-only - accountName string - accountKey atomic.Value // []byte -} - -// AccountName returns the Storage account's name. -func (c *SharedKeyCredential) AccountName() string { - return c.accountName -} - -// SetAccountKey replaces the existing account key with the specified account key. -func (c *SharedKeyCredential) SetAccountKey(accountKey string) error { - _bytes, err := base64.StdEncoding.DecodeString(accountKey) - if err != nil { - return fmt.Errorf("decode account key: %w", err) - } - c.accountKey.Store(_bytes) - return nil -} - -// ComputeHMACSHA256 generates a hash signature for an HTTP request or for a SAS. -func (c *SharedKeyCredential) ComputeHMACSHA256(message string) (string, error) { - h := hmac.New(sha256.New, c.accountKey.Load().([]byte)) - _, err := h.Write([]byte(message)) - return base64.StdEncoding.EncodeToString(h.Sum(nil)), err -} - -func (c *SharedKeyCredential) buildStringToSign(req *http.Request) (string, error) { - // https://docs.microsoft.com/en-us/rest/api/storageservices/authentication-for-the-azure-storage-services - headers := req.Header - contentLength := headers.Get(headerContentLength) - if contentLength == "0" { - contentLength = "" - } - - canonicalizedResource, err := c.buildCanonicalizedResource(req.URL) - if err != nil { - return "", err - } - - stringToSign := strings.Join([]string{ - req.Method, - headers.Get(headerContentEncoding), - headers.Get(headerContentLanguage), - contentLength, - headers.Get(headerContentMD5), - headers.Get(headerContentType), - "", // Empty date because x-ms-date is expected (as per web page above) - headers.Get(headerIfModifiedSince), - headers.Get(headerIfMatch), - headers.Get(headerIfNoneMatch), - headers.Get(headerIfUnmodifiedSince), - headers.Get(headerRange), - c.buildCanonicalizedHeader(headers), - canonicalizedResource, - }, "\n") - return stringToSign, nil -} - -func (c *SharedKeyCredential) buildCanonicalizedHeader(headers http.Header) string { - cm := map[string][]string{} - for k, v := range headers { - headerName := strings.TrimSpace(strings.ToLower(k)) - if strings.HasPrefix(headerName, "x-ms-") { - cm[headerName] = v // NOTE: the value must not have any whitespace around it. - } - } - if len(cm) == 0 { - return "" - } - - keys := make([]string, 0, len(cm)) - for key := range cm { - keys = append(keys, key) - } - sort.Strings(keys) - ch := bytes.NewBufferString("") - for i, key := range keys { - if i > 0 { - ch.WriteRune('\n') - } - ch.WriteString(key) - ch.WriteRune(':') - ch.WriteString(strings.Join(cm[key], ",")) - } - return ch.String() -} - -func (c *SharedKeyCredential) buildCanonicalizedResource(u *url.URL) (string, error) { - // https://docs.microsoft.com/en-us/rest/api/storageservices/authentication-for-the-azure-storage-services - cr := bytes.NewBufferString("/") - cr.WriteString(c.accountName) - - if len(u.Path) > 0 { - // Any portion of the CanonicalizedResource string that is derived from - // the resource's URI should be encoded exactly as it is in the URI. - // -- https://msdn.microsoft.com/en-gb/library/azure/dd179428.aspx - cr.WriteString(u.EscapedPath()) - } else { - // a slash is required to indicate the root path - cr.WriteString("/") - } - - // params is a map[string][]string; param name is key; params values is []string - params, err := url.ParseQuery(u.RawQuery) // Returns URL decoded values - if err != nil { - return "", fmt.Errorf("failed to parse query params: %w", err) - } - - if len(params) > 0 { // There is at least 1 query parameter - var paramNames []string // We use this to sort the parameter key names - for paramName := range params { - paramNames = append(paramNames, paramName) // paramNames must be lowercase - } - sort.Strings(paramNames) - - for _, paramName := range paramNames { - paramValues := params[paramName] - sort.Strings(paramValues) - - // Join the sorted key values separated by ',' - // Then prepend "keyName:"; then add this string to the buffer - cr.WriteString("\n" + paramName + ":" + strings.Join(paramValues, ",")) - } - } - return cr.String(), nil -} - -type sharedKeyCredPolicy struct { - cred *SharedKeyCredential -} - -func newSharedKeyCredPolicy(cred *SharedKeyCredential) *sharedKeyCredPolicy { - return &sharedKeyCredPolicy{cred: cred} -} - -func (s *sharedKeyCredPolicy) Do(req *policy.Request) (*http.Response, error) { - if d := req.Raw().Header.Get(headerXmsDate); d == "" { - req.Raw().Header.Set(headerXmsDate, time.Now().UTC().Format(http.TimeFormat)) - } - stringToSign, err := s.cred.buildStringToSign(req.Raw()) - if err != nil { - return nil, err - } - signature, err := s.cred.ComputeHMACSHA256(stringToSign) - if err != nil { - return nil, err - } - authHeader := strings.Join([]string{"SharedKey ", s.cred.AccountName(), ":", signature}, "") - req.Raw().Header.Set(headerAuthorization, authHeader) - - response, err := req.Next() - if err != nil && response != nil && response.StatusCode == http.StatusForbidden { - // Service failed to authenticate request, log it - log.Write(azlog.EventResponse, "===== HTTP Forbidden status, String-to-NewSASQueryParameters:\n"+stringToSign+"\n===============================\n") - } - return response, err -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_storage_error.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_storage_error.go deleted file mode 100644 index 08c9c8730909..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_storage_error.go +++ /dev/null @@ -1,236 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azblob - -import ( - "bytes" - "encoding/xml" - "errors" - "fmt" - "net/http" - "sort" - "strings" - - "github.com/Azure/azure-sdk-for-go/sdk/azcore" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime" -) - -// InternalError is an internal error type that all errors get wrapped in. -type InternalError struct { - cause error -} - -// Error checks if InternalError can be cast as StorageError -func (e *InternalError) Error() string { - if (errors.Is(e.cause, StorageError{})) { - return e.cause.Error() - } - - return fmt.Sprintf("===== INTERNAL ERROR =====\n%s", e.cause.Error()) -} - -// Is casts err into InternalError -func (e *InternalError) Is(err error) bool { - _, ok := err.(*InternalError) - - return ok -} - -// As casts target interface into InternalError -func (e *InternalError) As(target interface{}) bool { - nt, ok := target.(**InternalError) - - if ok { - *nt = e - return ok - } - - //goland:noinspection GoErrorsAs - return errors.As(e.cause, target) -} - -// StorageError is the internal struct that replaces the generated StorageError. -// TL;DR: This implements xml.Unmarshaler, and when the original StorageError is substituted, this unmarshaler kicks in. -// This handles the description and details. defunkifyStorageError handles the response, cause, and service code. -type StorageError struct { - response *http.Response - description string - - ErrorCode StorageErrorCode - details map[string]string -} - -func handleError(err error) error { - if err == nil { - return nil - } - var respErr *azcore.ResponseError - if errors.As(err, &respErr) { - return &InternalError{responseErrorToStorageError(respErr)} - } - - if err != nil { - return &InternalError{err} - } - - return nil -} - -// converts an *azcore.ResponseError to a *StorageError, or if that fails, a *InternalError -func responseErrorToStorageError(responseError *azcore.ResponseError) error { - var storageError StorageError - body, err := runtime.Payload(responseError.RawResponse) - if err != nil { - goto Default - } - if len(body) > 0 { - if err := xml.Unmarshal(body, &storageError); err != nil { - goto Default - } - } - - storageError.response = responseError.RawResponse - - storageError.ErrorCode = StorageErrorCode(responseError.RawResponse.Header.Get("x-ms-error-code")) - - if code, ok := storageError.details["Code"]; ok { - storageError.ErrorCode = StorageErrorCode(code) - delete(storageError.details, "Code") - } - - return &storageError - -Default: - return &InternalError{ - cause: responseError, - } -} - -// StatusCode returns service-error information. The caller may examine these values but should not modify any of them. -func (e *StorageError) StatusCode() int { - return e.response.StatusCode -} - -// Error implements the error interface's Error method to return a string representation of the error. -func (e StorageError) Error() string { - b := &bytes.Buffer{} - - if e.response != nil { - _, _ = fmt.Fprintf(b, "===== RESPONSE ERROR (ErrorCode=%s) =====\n", e.ErrorCode) - _, _ = fmt.Fprintf(b, "Description=%s, Details: ", e.description) - if len(e.details) == 0 { - b.WriteString("(none)\n") - } else { - b.WriteRune('\n') - keys := make([]string, 0, len(e.details)) - // Alphabetize the details - for k := range e.details { - keys = append(keys, k) - } - sort.Strings(keys) - for _, k := range keys { - _, _ = fmt.Fprintf(b, " %s: %+v\n", k, e.details[k]) - } - } - // req := azcore.Request{Request: e.response.Request}.Copy() // Make a copy of the response's request - // TODO: Come Here Mohit Adele - //writeRequestWithResponse(b, &azcore.Request{Request: e.response.Request}, e.response) - } - - return b.String() - ///azcore.writeRequestWithResponse(b, prepareRequestForLogging(req), e.response, nil) - // return e.ErrorNode.Error(b.String()) -} - -// Is checks if err can be cast as StorageError -func (e StorageError) Is(err error) bool { - _, ok := err.(StorageError) - _, ok2 := err.(*StorageError) - - return ok || ok2 -} - -// Response returns StorageError.response -func (e StorageError) Response() *http.Response { - return e.response -} - -//nolint -func writeRequestWithResponse(b *bytes.Buffer, request *policy.Request, response *http.Response) { - // Write the request into the buffer. - _, _ = fmt.Fprint(b, " "+request.Raw().Method+" "+request.Raw().URL.String()+"\n") - writeHeader(b, request.Raw().Header) - if response != nil { - _, _ = fmt.Fprintln(b, " --------------------------------------------------------------------------------") - _, _ = fmt.Fprint(b, " RESPONSE Status: "+response.Status+"\n") - writeHeader(b, response.Header) - } -} - -// formatHeaders appends an HTTP request's or response's header into a Buffer. -//nolint -func writeHeader(b *bytes.Buffer, header map[string][]string) { - if len(header) == 0 { - b.WriteString(" (no headers)\n") - return - } - keys := make([]string, 0, len(header)) - // Alphabetize the headers - for k := range header { - keys = append(keys, k) - } - sort.Strings(keys) - for _, k := range keys { - // Redact the value of any Authorization header to prevent security information from persisting in logs - value := interface{}("REDACTED") - if !strings.EqualFold(k, "Authorization") { - value = header[k] - } - _, _ = fmt.Fprintf(b, " %s: %+v\n", k, value) - } -} - -// Temporary returns true if the error occurred due to a temporary condition (including an HTTP status of 500 or 503). -func (e *StorageError) Temporary() bool { - if e.response != nil { - if (e.response.StatusCode == http.StatusInternalServerError) || (e.response.StatusCode == http.StatusServiceUnavailable) || (e.response.StatusCode == http.StatusBadGateway) { - return true - } - } - - return false -} - -// UnmarshalXML performs custom unmarshalling of XML-formatted Azure storage request errors. -//nolint -func (e *StorageError) UnmarshalXML(d *xml.Decoder, start xml.StartElement) (err error) { - tokName := "" - var t xml.Token - for t, err = d.Token(); err == nil; t, err = d.Token() { - switch tt := t.(type) { - case xml.StartElement: - tokName = tt.Name.Local - case xml.EndElement: - tokName = "" - case xml.CharData: - switch tokName { - case "": - continue - case "Message": - e.description = string(tt) - default: - if e.details == nil { - e.details = map[string]string{} - } - e.details[tokName] = string(tt) - } - } - } - - return nil -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_validators.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_validators.go deleted file mode 100644 index 341858f1ad8a..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zc_validators.go +++ /dev/null @@ -1,107 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azblob - -import ( - "errors" - "fmt" - "io" - "strconv" -) - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -// Raw converts PageRange into primitive start, end integers of type int64 -func (pr *PageRange) Raw() (start, end int64) { - if pr.Start != nil { - start = *pr.Start - } - if pr.End != nil { - end = *pr.End - } - - return -} - -// HttpRange defines a range of bytes within an HTTP resource, starting at offset and -// ending at offset+count. A zero-value HttpRange indicates the entire resource. An HttpRange -// which has an offset but na zero value count indicates from the offset to the resource's end. -type HttpRange struct { - Offset int64 - Count int64 -} - -func NewHttpRange(offset, count int64) *HttpRange { - return &HttpRange{Offset: offset, Count: count} -} - -func (r *HttpRange) format() *string { - if r == nil || (r.Offset == 0 && r.Count == 0) { // Do common case first for performance - return nil // No specified range - } - endOffset := "" // if count == CountToEnd (0) - if r.Count > 0 { - endOffset = strconv.FormatInt((r.Offset+r.Count)-1, 10) - } - dataRange := fmt.Sprintf("bytes=%v-%s", r.Offset, endOffset) - return &dataRange -} - -func getSourceRange(offset, count *int64) *string { - if offset == nil && count == nil { - return nil - } - newOffset := int64(0) - newCount := int64(CountToEnd) - - if offset != nil { - newOffset = *offset - } - - if count != nil { - newCount = *count - } - - return (&HttpRange{Offset: newOffset, Count: newCount}).format() -} - -func validateSeekableStreamAt0AndGetCount(body io.ReadSeeker) (int64, error) { - if body == nil { // nil body's are "logically" seekable to 0 and are 0 bytes long - return 0, nil - } - - err := validateSeekableStreamAt0(body) - if err != nil { - return 0, err - } - - count, err := body.Seek(0, io.SeekEnd) - if err != nil { - return 0, errors.New("body stream must be seekable") - } - - _, err = body.Seek(0, io.SeekStart) - if err != nil { - return 0, err - } - return count, nil -} - -// return an error if body is not a valid seekable stream at 0 -func validateSeekableStreamAt0(body io.ReadSeeker) error { - if body == nil { // nil body's are "logically" seekable to 0 - return nil - } - if pos, err := body.Seek(0, io.SeekCurrent); pos != 0 || err != nil { - // Help detect programmer error - if err != nil { - return errors.New("body stream must be seekable") - } - return errors.New("body stream must be set to position 0") - } - return nil -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zm_access_conditions.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zm_access_conditions.go deleted file mode 100644 index 93a2b1a70077..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zm_access_conditions.go +++ /dev/null @@ -1,43 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azblob - -const ( - // ETagNone represents an empty entity tag. - ETagNone = "" - - // ETagAny matches any entity tag. - ETagAny = "*" -) - -// ContainerAccessConditions identifies container-specific access conditions which you optionally set. -type ContainerAccessConditions struct { - ModifiedAccessConditions *ModifiedAccessConditions - LeaseAccessConditions *LeaseAccessConditions -} - -func (ac *ContainerAccessConditions) format() (*ModifiedAccessConditions, *LeaseAccessConditions) { - if ac == nil { - return nil, nil - } - - return ac.ModifiedAccessConditions, ac.LeaseAccessConditions -} - -// BlobAccessConditions identifies blob-specific access conditions which you optionally set. -type BlobAccessConditions struct { - LeaseAccessConditions *LeaseAccessConditions - ModifiedAccessConditions *ModifiedAccessConditions -} - -func (ac *BlobAccessConditions) format() (*LeaseAccessConditions, *ModifiedAccessConditions) { - if ac == nil { - return nil, nil - } - - return ac.LeaseAccessConditions, ac.ModifiedAccessConditions -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zm_append_blob_client_util.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zm_append_blob_client_util.go deleted file mode 100644 index 19c3fef66a91..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zm_append_blob_client_util.go +++ /dev/null @@ -1,184 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azblob - -import "time" - -// --------------------------------------------------------------------------------------------------------------------- - -// AppendBlobCreateOptions provides set of configurations for Create Append Blob operation -type AppendBlobCreateOptions struct { - // Specifies the date time when the blobs immutability policy is set to expire. - ImmutabilityPolicyExpiry *time.Time - // Specifies the immutability policy mode to set on the blob. - ImmutabilityPolicyMode *BlobImmutabilityPolicyMode - // Specified if a legal hold should be set on the blob. - LegalHold *bool - - BlobAccessConditions *BlobAccessConditions - - HTTPHeaders *BlobHTTPHeaders - - CpkInfo *CpkInfo - - CpkScopeInfo *CpkScopeInfo - // Optional. Used to set blob tags in various blob operations. - TagsMap map[string]string - // Optional. Specifies a user-defined name-value pair associated with the blob. If no name-value pairs are specified, the - // operation will copy the metadata from the source blob or file to the destination blob. If one or more name-value pairs - // are specified, the destination blob is created with the specified metadata, and metadata is not copied from the source - // blob or file. Note that beginning with version 2009-09-19, metadata names must adhere to the naming rules for C# identifiers. - // See Naming and Referencing Containers, Blobs, and Metadata for more information. - Metadata map[string]string -} - -func (o *AppendBlobCreateOptions) format() (*appendBlobClientCreateOptions, *BlobHTTPHeaders, *LeaseAccessConditions, - *CpkInfo, *CpkScopeInfo, *ModifiedAccessConditions) { - - if o == nil { - return nil, nil, nil, nil, nil, nil - } - - options := appendBlobClientCreateOptions{ - BlobTagsString: serializeBlobTagsToStrPtr(o.TagsMap), - Metadata: o.Metadata, - ImmutabilityPolicyExpiry: o.ImmutabilityPolicyExpiry, - ImmutabilityPolicyMode: o.ImmutabilityPolicyMode, - LegalHold: o.LegalHold, - } - - leaseAccessConditions, modifiedAccessConditions := o.BlobAccessConditions.format() - return &options, o.HTTPHeaders, leaseAccessConditions, o.CpkInfo, o.CpkScopeInfo, modifiedAccessConditions -} - -// AppendBlobCreateResponse contains the response from method AppendBlobClient.Create. -type AppendBlobCreateResponse struct { - appendBlobClientCreateResponse -} - -func toAppendBlobCreateResponse(resp appendBlobClientCreateResponse) AppendBlobCreateResponse { - return AppendBlobCreateResponse{resp} -} - -// --------------------------------------------------------------------------------------------------------------------- - -// AppendBlobAppendBlockOptions provides set of configurations for AppendBlock operation -type AppendBlobAppendBlockOptions struct { - // Specify the transactional crc64 for the body, to be validated by the service. - TransactionalContentCRC64 []byte - // Specify the transactional md5 for the body, to be validated by the service. - TransactionalContentMD5 []byte - - AppendPositionAccessConditions *AppendPositionAccessConditions - - CpkInfo *CpkInfo - - CpkScopeInfo *CpkScopeInfo - - BlobAccessConditions *BlobAccessConditions -} - -func (o *AppendBlobAppendBlockOptions) format() (*appendBlobClientAppendBlockOptions, *AppendPositionAccessConditions, *CpkInfo, *CpkScopeInfo, *ModifiedAccessConditions, *LeaseAccessConditions) { - if o == nil { - return nil, nil, nil, nil, nil, nil - } - - options := &appendBlobClientAppendBlockOptions{ - TransactionalContentCRC64: o.TransactionalContentCRC64, - TransactionalContentMD5: o.TransactionalContentMD5, - } - leaseAccessConditions, modifiedAccessConditions := o.BlobAccessConditions.format() - return options, o.AppendPositionAccessConditions, o.CpkInfo, o.CpkScopeInfo, modifiedAccessConditions, leaseAccessConditions -} - -// AppendBlobAppendBlockResponse contains the response from method AppendBlobClient.AppendBlock. -type AppendBlobAppendBlockResponse struct { - appendBlobClientAppendBlockResponse -} - -func toAppendBlobAppendBlockResponse(resp appendBlobClientAppendBlockResponse) AppendBlobAppendBlockResponse { - return AppendBlobAppendBlockResponse{resp} -} - -// --------------------------------------------------------------------------------------------------------------------- - -// AppendBlobAppendBlockFromURLOptions provides set of configurations for AppendBlockFromURL operation -type AppendBlobAppendBlockFromURLOptions struct { - // Specify the md5 calculated for the range of bytes that must be read from the copy source. - SourceContentMD5 []byte - // Specify the crc64 calculated for the range of bytes that must be read from the copy source. - SourceContentCRC64 []byte - // Specify the transactional md5 for the body, to be validated by the service. - TransactionalContentMD5 []byte - - AppendPositionAccessConditions *AppendPositionAccessConditions - - CpkInfo *CpkInfo - - CpkScopeInfo *CpkScopeInfo - - SourceModifiedAccessConditions *SourceModifiedAccessConditions - - BlobAccessConditions *BlobAccessConditions - // Optional, you can specify whether a particular range of the blob is read - Offset *int64 - - Count *int64 -} - -func (o *AppendBlobAppendBlockFromURLOptions) format() (*appendBlobClientAppendBlockFromURLOptions, *CpkInfo, *CpkScopeInfo, *LeaseAccessConditions, *AppendPositionAccessConditions, *ModifiedAccessConditions, *SourceModifiedAccessConditions) { - if o == nil { - return nil, nil, nil, nil, nil, nil, nil - } - - options := &appendBlobClientAppendBlockFromURLOptions{ - SourceRange: getSourceRange(o.Offset, o.Count), - SourceContentMD5: o.SourceContentMD5, - SourceContentcrc64: o.SourceContentCRC64, - TransactionalContentMD5: o.TransactionalContentMD5, - } - - leaseAccessConditions, modifiedAccessConditions := o.BlobAccessConditions.format() - return options, o.CpkInfo, o.CpkScopeInfo, leaseAccessConditions, o.AppendPositionAccessConditions, modifiedAccessConditions, o.SourceModifiedAccessConditions -} - -// AppendBlobAppendBlockFromURLResponse contains the response from method AppendBlobClient.AppendBlockFromURL. -type AppendBlobAppendBlockFromURLResponse struct { - appendBlobClientAppendBlockFromURLResponse -} - -func toAppendBlobAppendBlockFromURLResponse(resp appendBlobClientAppendBlockFromURLResponse) AppendBlobAppendBlockFromURLResponse { - return AppendBlobAppendBlockFromURLResponse{resp} -} - -// --------------------------------------------------------------------------------------------------------------------- - -// AppendBlobSealOptions provides set of configurations for SealAppendBlob operation -type AppendBlobSealOptions struct { - BlobAccessConditions *BlobAccessConditions - AppendPositionAccessConditions *AppendPositionAccessConditions -} - -func (o *AppendBlobSealOptions) format() (leaseAccessConditions *LeaseAccessConditions, - modifiedAccessConditions *ModifiedAccessConditions, appendPositionAccessConditions *AppendPositionAccessConditions) { - if o == nil { - return nil, nil, nil - } - - return -} - -// AppendBlobSealResponse contains the response from method AppendBlobClient.Seal. -type AppendBlobSealResponse struct { - appendBlobClientSealResponse -} - -func toAppendBlobSealResponse(resp appendBlobClientSealResponse) AppendBlobSealResponse { - return AppendBlobSealResponse{resp} -} - -// --------------------------------------------------------------------------------------------------------------------- diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zm_blob_client_util.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zm_blob_client_util.go deleted file mode 100644 index f4425b18c828..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zm_blob_client_util.go +++ /dev/null @@ -1,478 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azblob - -import ( - "context" - "io" - "net/http" - "time" -) - -// --------------------------------------------------------------------------------------------------------------------- - -// BlobDownloadOptions provides set of configurations for Download blob operation -type BlobDownloadOptions struct { - // When set to true and specified together with the Range, the service returns the MD5 hash for the range, as long as the - // range is less than or equal to 4 MB in size. - RangeGetContentMD5 *bool - - // Optional, you can specify whether a particular range of the blob is read - Offset *int64 - Count *int64 - - BlobAccessConditions *BlobAccessConditions - CpkInfo *CpkInfo - CpkScopeInfo *CpkScopeInfo -} - -func (o *BlobDownloadOptions) format() (*blobClientDownloadOptions, *LeaseAccessConditions, *CpkInfo, *ModifiedAccessConditions) { - if o == nil { - return nil, nil, nil, nil - } - - offset := int64(0) - count := int64(CountToEnd) - - if o.Offset != nil { - offset = *o.Offset - } - - if o.Count != nil { - count = *o.Count - } - - basics := blobClientDownloadOptions{ - RangeGetContentMD5: o.RangeGetContentMD5, - Range: (&HttpRange{Offset: offset, Count: count}).format(), - } - - leaseAccessConditions, modifiedAccessConditions := o.BlobAccessConditions.format() - return &basics, leaseAccessConditions, o.CpkInfo, modifiedAccessConditions -} - -// BlobDownloadResponse wraps AutoRest generated BlobDownloadResponse and helps to provide info for retry. -type BlobDownloadResponse struct { - blobClientDownloadResponse - ctx context.Context - b *BlobClient - getInfo HTTPGetterInfo - ObjectReplicationRules []ObjectReplicationPolicy -} - -// Body constructs new RetryReader stream for reading data. If a connection fails -// while reading, it will make additional requests to reestablish a connection and -// continue reading. Specifying a RetryReaderOption's with MaxRetryRequests set to 0 -// (the default), returns the original response body and no retries will be performed. -// Pass in nil for options to accept the default options. -func (r *BlobDownloadResponse) Body(options *RetryReaderOptions) io.ReadCloser { - if options == nil { - options = &RetryReaderOptions{} - } - - if options.MaxRetryRequests == 0 { // No additional retries - return r.RawResponse.Body - } - return NewRetryReader(r.ctx, r.RawResponse, r.getInfo, *options, - func(ctx context.Context, getInfo HTTPGetterInfo) (*http.Response, error) { - accessConditions := &BlobAccessConditions{ - ModifiedAccessConditions: &ModifiedAccessConditions{IfMatch: &getInfo.ETag}, - } - options := BlobDownloadOptions{ - Offset: &getInfo.Offset, - Count: &getInfo.Count, - BlobAccessConditions: accessConditions, - CpkInfo: options.CpkInfo, - //CpkScopeInfo: o.CpkScopeInfo, - } - resp, err := r.b.Download(ctx, &options) - if err != nil { - return nil, err - } - return resp.RawResponse, err - }, - ) -} - -// --------------------------------------------------------------------------------------------------------------------- - -// BlobDeleteOptions provides set of configurations for Delete blob operation -type BlobDeleteOptions struct { - // Required if the blob has associated snapshots. Specify one of the following two options: include: Delete the base blob - // and all of its snapshots. only: Delete only the blob's snapshots and not the blob itself - DeleteSnapshots *DeleteSnapshotsOptionType - BlobAccessConditions *BlobAccessConditions -} - -func (o *BlobDeleteOptions) format() (*blobClientDeleteOptions, *LeaseAccessConditions, *ModifiedAccessConditions) { - if o == nil { - return nil, nil, nil - } - - basics := blobClientDeleteOptions{ - DeleteSnapshots: o.DeleteSnapshots, - } - - if o.BlobAccessConditions == nil { - return &basics, nil, nil - } - - return &basics, o.BlobAccessConditions.LeaseAccessConditions, o.BlobAccessConditions.ModifiedAccessConditions -} - -// BlobDeleteResponse contains the response from method BlobClient.Delete. -type BlobDeleteResponse struct { - blobClientDeleteResponse -} - -func toBlobDeleteResponse(resp blobClientDeleteResponse) BlobDeleteResponse { - return BlobDeleteResponse{resp} -} - -// --------------------------------------------------------------------------------------------------------------------- - -// BlobUndeleteOptions provides set of configurations for Blob Undelete operation -type BlobUndeleteOptions struct { -} - -func (o *BlobUndeleteOptions) format() *blobClientUndeleteOptions { - return nil -} - -// BlobUndeleteResponse contains the response from method BlobClient.Undelete. -type BlobUndeleteResponse struct { - blobClientUndeleteResponse -} - -func toBlobUndeleteResponse(resp blobClientUndeleteResponse) BlobUndeleteResponse { - return BlobUndeleteResponse{resp} -} - -// --------------------------------------------------------------------------------------------------------------------- - -// BlobSetTierOptions provides set of configurations for SetTier on blob operation -type BlobSetTierOptions struct { - // Optional: Indicates the priority with which to rehydrate an archived blob. - RehydratePriority *RehydratePriority - - LeaseAccessConditions *LeaseAccessConditions - ModifiedAccessConditions *ModifiedAccessConditions -} - -func (o *BlobSetTierOptions) format() (*blobClientSetTierOptions, *LeaseAccessConditions, *ModifiedAccessConditions) { - if o == nil { - return nil, nil, nil - } - - basics := blobClientSetTierOptions{RehydratePriority: o.RehydratePriority} - return &basics, o.LeaseAccessConditions, o.ModifiedAccessConditions -} - -// BlobSetTierResponse contains the response from method BlobClient.SetTier. -type BlobSetTierResponse struct { - blobClientSetTierResponse -} - -func toBlobSetTierResponse(resp blobClientSetTierResponse) BlobSetTierResponse { - return BlobSetTierResponse{resp} -} - -// --------------------------------------------------------------------------------------------------------------------- - -// BlobGetPropertiesOptions provides set of configurations for GetProperties blob operation -type BlobGetPropertiesOptions struct { - BlobAccessConditions *BlobAccessConditions - CpkInfo *CpkInfo -} - -func (o *BlobGetPropertiesOptions) format() (blobClientGetPropertiesOptions *blobClientGetPropertiesOptions, - leaseAccessConditions *LeaseAccessConditions, cpkInfo *CpkInfo, modifiedAccessConditions *ModifiedAccessConditions) { - if o == nil { - return nil, nil, nil, nil - } - - leaseAccessConditions, modifiedAccessConditions = o.BlobAccessConditions.format() - return nil, leaseAccessConditions, o.CpkInfo, modifiedAccessConditions -} - -// ObjectReplicationRules struct -type ObjectReplicationRules struct { - RuleId string - Status string -} - -// ObjectReplicationPolicy are deserialized attributes -type ObjectReplicationPolicy struct { - PolicyId *string - Rules *[]ObjectReplicationRules -} - -// BlobGetPropertiesResponse reformat the GetPropertiesResponse object for easy consumption -type BlobGetPropertiesResponse struct { - blobClientGetPropertiesResponse - - // deserialized attributes - ObjectReplicationRules []ObjectReplicationPolicy -} - -func toGetBlobPropertiesResponse(resp blobClientGetPropertiesResponse) BlobGetPropertiesResponse { - getResp := BlobGetPropertiesResponse{ - blobClientGetPropertiesResponse: resp, - ObjectReplicationRules: deserializeORSPolicies(resp.ObjectReplicationRules), - } - return getResp -} - -// --------------------------------------------------------------------------------------------------------------------- - -// BlobSetHTTPHeadersOptions provides set of configurations for SetHTTPHeaders on blob operation -type BlobSetHTTPHeadersOptions struct { - LeaseAccessConditions *LeaseAccessConditions - ModifiedAccessConditions *ModifiedAccessConditions -} - -func (o *BlobSetHTTPHeadersOptions) format() (*blobClientSetHTTPHeadersOptions, *LeaseAccessConditions, *ModifiedAccessConditions) { - if o == nil { - return nil, nil, nil - } - - return nil, o.LeaseAccessConditions, o.ModifiedAccessConditions -} - -// BlobSetHTTPHeadersResponse contains the response from method BlobClient.SetHTTPHeaders. -type BlobSetHTTPHeadersResponse struct { - blobClientSetHTTPHeadersResponse -} - -func toBlobSetHTTPHeadersResponse(resp blobClientSetHTTPHeadersResponse) BlobSetHTTPHeadersResponse { - return BlobSetHTTPHeadersResponse{resp} -} - -// --------------------------------------------------------------------------------------------------------------------- - -// BlobSetMetadataOptions provides set of configurations for Set Metadata on blob operation -type BlobSetMetadataOptions struct { - LeaseAccessConditions *LeaseAccessConditions - CpkInfo *CpkInfo - CpkScopeInfo *CpkScopeInfo - ModifiedAccessConditions *ModifiedAccessConditions -} - -func (o *BlobSetMetadataOptions) format() (leaseAccessConditions *LeaseAccessConditions, cpkInfo *CpkInfo, - cpkScopeInfo *CpkScopeInfo, modifiedAccessConditions *ModifiedAccessConditions) { - if o == nil { - return nil, nil, nil, nil - } - - return o.LeaseAccessConditions, o.CpkInfo, o.CpkScopeInfo, o.ModifiedAccessConditions -} - -// BlobSetMetadataResponse contains the response from method BlobClient.SetMetadata. -type BlobSetMetadataResponse struct { - blobClientSetMetadataResponse -} - -func toBlobSetMetadataResponse(resp blobClientSetMetadataResponse) BlobSetMetadataResponse { - return BlobSetMetadataResponse{resp} -} - -// --------------------------------------------------------------------------------------------------------------------- - -// BlobCreateSnapshotOptions provides set of configurations for CreateSnapshot of blob operation -type BlobCreateSnapshotOptions struct { - Metadata map[string]string - LeaseAccessConditions *LeaseAccessConditions - CpkInfo *CpkInfo - CpkScopeInfo *CpkScopeInfo - ModifiedAccessConditions *ModifiedAccessConditions -} - -func (o *BlobCreateSnapshotOptions) format() (blobSetMetadataOptions *blobClientCreateSnapshotOptions, cpkInfo *CpkInfo, - cpkScopeInfo *CpkScopeInfo, modifiedAccessConditions *ModifiedAccessConditions, leaseAccessConditions *LeaseAccessConditions) { - if o == nil { - return nil, nil, nil, nil, nil - } - - basics := blobClientCreateSnapshotOptions{ - Metadata: o.Metadata, - } - - return &basics, o.CpkInfo, o.CpkScopeInfo, o.ModifiedAccessConditions, o.LeaseAccessConditions -} - -// BlobCreateSnapshotResponse contains the response from method BlobClient.CreateSnapshot -type BlobCreateSnapshotResponse struct { - blobClientCreateSnapshotResponse -} - -func toBlobCreateSnapshotResponse(resp blobClientCreateSnapshotResponse) BlobCreateSnapshotResponse { - return BlobCreateSnapshotResponse{resp} -} - -// --------------------------------------------------------------------------------------------------------------------- - -// BlobStartCopyOptions provides set of configurations for StartCopyFromURL blob operation -type BlobStartCopyOptions struct { - // Specifies the date time when the blobs immutability policy is set to expire. - ImmutabilityPolicyExpiry *time.Time - // Specifies the immutability policy mode to set on the blob. - ImmutabilityPolicyMode *BlobImmutabilityPolicyMode - // Specified if a legal hold should be set on the blob. - LegalHold *bool - // Optional. Used to set blob tags in various blob operations. - TagsMap map[string]string - // Optional. Specifies a user-defined name-value pair associated with the blob. If no name-value pairs are specified, the - // operation will copy the metadata from the source blob or file to the destination blob. If one or more name-value pairs - // are specified, the destination blob is created with the specified metadata, and metadata is not copied from the source - // blob or file. Note that beginning with version 2009-09-19, metadata names must adhere to the naming rules for C# identifiers. - // See Naming and Referencing Containers, Blobs, and Metadata for more information. - Metadata map[string]string - // Optional: Indicates the priority with which to rehydrate an archived blob. - RehydratePriority *RehydratePriority - // Overrides the sealed state of the destination blob. Service version 2019-12-12 and newer. - SealBlob *bool - // Optional. Indicates the tier to be set on the blob. - Tier *AccessTier - - SourceModifiedAccessConditions *SourceModifiedAccessConditions - - ModifiedAccessConditions *ModifiedAccessConditions - - LeaseAccessConditions *LeaseAccessConditions -} - -func (o *BlobStartCopyOptions) format() (blobStartCopyFromUrlOptions *blobClientStartCopyFromURLOptions, - sourceModifiedAccessConditions *SourceModifiedAccessConditions, modifiedAccessConditions *ModifiedAccessConditions, leaseAccessConditions *LeaseAccessConditions) { - if o == nil { - return nil, nil, nil, nil - } - - basics := blobClientStartCopyFromURLOptions{ - BlobTagsString: serializeBlobTagsToStrPtr(o.TagsMap), - Metadata: o.Metadata, - RehydratePriority: o.RehydratePriority, - SealBlob: o.SealBlob, - Tier: o.Tier, - ImmutabilityPolicyExpiry: o.ImmutabilityPolicyExpiry, - ImmutabilityPolicyMode: o.ImmutabilityPolicyMode, - LegalHold: o.LegalHold, - } - - return &basics, o.SourceModifiedAccessConditions, o.ModifiedAccessConditions, o.LeaseAccessConditions -} - -// BlobStartCopyFromURLResponse contains the response from method BlobClient.StartCopyFromURL. -type BlobStartCopyFromURLResponse struct { - blobClientStartCopyFromURLResponse -} - -func toBlobStartCopyFromURLResponse(resp blobClientStartCopyFromURLResponse) BlobStartCopyFromURLResponse { - return BlobStartCopyFromURLResponse{resp} -} - -// --------------------------------------------------------------------------------------------------------------------- - -// BlobAbortCopyOptions provides set of configurations for AbortCopyFromURL operation -type BlobAbortCopyOptions struct { - LeaseAccessConditions *LeaseAccessConditions -} - -func (o *BlobAbortCopyOptions) format() (blobAbortCopyFromUrlOptions *blobClientAbortCopyFromURLOptions, - leaseAccessConditions *LeaseAccessConditions) { - if o == nil { - return nil, nil - } - return nil, o.LeaseAccessConditions -} - -// BlobAbortCopyFromURLResponse contains the response from method BlobClient.AbortCopyFromURL -type BlobAbortCopyFromURLResponse struct { - blobClientAbortCopyFromURLResponse -} - -func toBlobAbortCopyFromURLResponse(resp blobClientAbortCopyFromURLResponse) BlobAbortCopyFromURLResponse { - return BlobAbortCopyFromURLResponse{resp} -} - -// --------------------------------------------------------------------------------------------------------------------- - -// BlobSetTagsOptions provides set of configurations for SetTags operation -type BlobSetTagsOptions struct { - // The version id parameter is an opaque DateTime value that, when present, - // specifies the version of the blob to operate on. It's for service version 2019-10-10 and newer. - VersionID *string - // Optional header, Specifies the transactional crc64 for the body, to be validated by the service. - TransactionalContentCRC64 []byte - // Optional header, Specifies the transactional md5 for the body, to be validated by the service. - TransactionalContentMD5 []byte - - TagsMap map[string]string - - ModifiedAccessConditions *ModifiedAccessConditions - LeaseAccessConditions *LeaseAccessConditions -} - -func (o *BlobSetTagsOptions) format() (*blobClientSetTagsOptions, *ModifiedAccessConditions, *LeaseAccessConditions) { - if o == nil { - return nil, nil, nil - } - - options := &blobClientSetTagsOptions{ - Tags: serializeBlobTags(o.TagsMap), - TransactionalContentMD5: o.TransactionalContentMD5, - TransactionalContentCRC64: o.TransactionalContentCRC64, - VersionID: o.VersionID, - } - - return options, o.ModifiedAccessConditions, o.LeaseAccessConditions -} - -// BlobSetTagsResponse contains the response from method BlobClient.SetTags -type BlobSetTagsResponse struct { - blobClientSetTagsResponse -} - -func toBlobSetTagsResponse(resp blobClientSetTagsResponse) BlobSetTagsResponse { - return BlobSetTagsResponse{resp} -} - -// --------------------------------------------------------------------------------------------------------------------- - -// BlobGetTagsOptions provides set of configurations for GetTags operation -type BlobGetTagsOptions struct { - // The snapshot parameter is an opaque DateTime value that, when present, specifies the blob snapshot to retrieve. - Snapshot *string - // The version id parameter is an opaque DateTime value that, when present, specifies the version of the blob to operate on. - // It's for service version 2019-10-10 and newer. - VersionID *string - - BlobAccessConditions *BlobAccessConditions -} - -func (o *BlobGetTagsOptions) format() (*blobClientGetTagsOptions, *ModifiedAccessConditions, *LeaseAccessConditions) { - if o == nil { - return nil, nil, nil - } - - options := &blobClientGetTagsOptions{ - Snapshot: o.Snapshot, - VersionID: o.VersionID, - } - - leaseAccessConditions, modifiedAccessConditions := o.BlobAccessConditions.format() - - return options, modifiedAccessConditions, leaseAccessConditions -} - -// BlobGetTagsResponse contains the response from method BlobClient.GetTags -type BlobGetTagsResponse struct { - blobClientGetTagsResponse -} - -func toBlobGetTagsResponse(resp blobClientGetTagsResponse) BlobGetTagsResponse { - return BlobGetTagsResponse{resp} -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zm_blob_lease_client_util.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zm_blob_lease_client_util.go deleted file mode 100644 index 4e574622cca7..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zm_blob_lease_client_util.go +++ /dev/null @@ -1,160 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azblob - -import ( - "github.com/Azure/azure-sdk-for-go/sdk/azcore/to" - "github.com/Azure/azure-sdk-for-go/sdk/internal/uuid" -) - -// --------------------------------------------------------------------------------------------------------------------- - -// BlobAcquireLeaseOptions provides set of configurations for AcquireLeaseBlob operation -type BlobAcquireLeaseOptions struct { - // Specifies the Duration of the lease, in seconds, or negative one (-1) for a lease that never expires. A non-infinite lease - // can be between 15 and 60 seconds. A lease Duration cannot be changed using renew or change. - Duration *int32 - - ModifiedAccessConditions *ModifiedAccessConditions -} - -func (o *BlobAcquireLeaseOptions) format() (blobClientAcquireLeaseOptions, *ModifiedAccessConditions) { - if o == nil { - return blobClientAcquireLeaseOptions{}, nil - } - return blobClientAcquireLeaseOptions{ - Duration: o.Duration, - }, o.ModifiedAccessConditions -} - -// BlobAcquireLeaseResponse contains the response from method BlobLeaseClient.AcquireLease. -type BlobAcquireLeaseResponse struct { - blobClientAcquireLeaseResponse -} - -func toBlobAcquireLeaseResponse(resp blobClientAcquireLeaseResponse) BlobAcquireLeaseResponse { - return BlobAcquireLeaseResponse{resp} -} - -// --------------------------------------------------------------------------------------------------------------------- - -// BlobBreakLeaseOptions provides set of configurations for BreakLeaseBlob operation -type BlobBreakLeaseOptions struct { - // For a break operation, proposed Duration the lease should continue before it is broken, in seconds, between 0 and 60. This - // break period is only used if it is shorter than the time remaining on the lease. If longer, the time remaining on the lease - // is used. A new lease will not be available before the break period has expired, but the lease may be held for longer than - // the break period. If this header does not appear with a break operation, a fixed-Duration lease breaks after the remaining - // lease period elapses, and an infinite lease breaks immediately. - BreakPeriod *int32 - ModifiedAccessConditions *ModifiedAccessConditions -} - -func (o *BlobBreakLeaseOptions) format() (*blobClientBreakLeaseOptions, *ModifiedAccessConditions) { - if o == nil { - return nil, nil - } - - if o.BreakPeriod != nil { - period := leasePeriodPointer(*o.BreakPeriod) - return &blobClientBreakLeaseOptions{ - BreakPeriod: period, - }, o.ModifiedAccessConditions - } - - return nil, o.ModifiedAccessConditions -} - -// BlobBreakLeaseResponse contains the response from method BlobLeaseClient.BreakLease. -type BlobBreakLeaseResponse struct { - blobClientBreakLeaseResponse -} - -func toBlobBreakLeaseResponse(resp blobClientBreakLeaseResponse) BlobBreakLeaseResponse { - return BlobBreakLeaseResponse{resp} -} - -// --------------------------------------------------------------------------------------------------------------------- - -// BlobChangeLeaseOptions provides set of configurations for ChangeLeaseBlob operation -type BlobChangeLeaseOptions struct { - ProposedLeaseID *string - ModifiedAccessConditions *ModifiedAccessConditions -} - -func (o *BlobChangeLeaseOptions) format() (*string, *blobClientChangeLeaseOptions, *ModifiedAccessConditions, error) { - generatedUuid, err := uuid.New() - if err != nil { - return nil, nil, nil, err - } - leaseID := to.Ptr(generatedUuid.String()) - if o == nil { - return leaseID, nil, nil, nil - } - - if o.ProposedLeaseID == nil { - o.ProposedLeaseID = leaseID - } - - return o.ProposedLeaseID, nil, o.ModifiedAccessConditions, nil -} - -// BlobChangeLeaseResponse contains the response from method BlobLeaseClient.ChangeLease -type BlobChangeLeaseResponse struct { - blobClientChangeLeaseResponse -} - -func toBlobChangeLeaseResponse(resp blobClientChangeLeaseResponse) BlobChangeLeaseResponse { - return BlobChangeLeaseResponse{resp} -} - -// --------------------------------------------------------------------------------------------------------------------- - -// BlobRenewLeaseOptions provides set of configurations for RenewLeaseBlob operation -type BlobRenewLeaseOptions struct { - ModifiedAccessConditions *ModifiedAccessConditions -} - -func (o *BlobRenewLeaseOptions) format() (*blobClientRenewLeaseOptions, *ModifiedAccessConditions) { - if o == nil { - return nil, nil - } - - return nil, o.ModifiedAccessConditions -} - -// BlobRenewLeaseResponse contains the response from method BlobClient.RenewLease. -type BlobRenewLeaseResponse struct { - blobClientRenewLeaseResponse -} - -func toBlobRenewLeaseResponse(resp blobClientRenewLeaseResponse) BlobRenewLeaseResponse { - return BlobRenewLeaseResponse{resp} -} - -// --------------------------------------------------------------------------------------------------------------------- - -// ReleaseLeaseBlobOptions provides set of configurations for ReleaseLeaseBlob operation -type ReleaseLeaseBlobOptions struct { - ModifiedAccessConditions *ModifiedAccessConditions -} - -func (o *ReleaseLeaseBlobOptions) format() (*blobClientReleaseLeaseOptions, *ModifiedAccessConditions) { - if o == nil { - return nil, nil - } - - return nil, o.ModifiedAccessConditions -} - -// BlobReleaseLeaseResponse contains the response from method BlobClient.ReleaseLease. -type BlobReleaseLeaseResponse struct { - blobClientReleaseLeaseResponse -} - -func toBlobReleaseLeaseResponse(resp blobClientReleaseLeaseResponse) BlobReleaseLeaseResponse { - return BlobReleaseLeaseResponse{resp} -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zm_block_blob_client_util.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zm_block_blob_client_util.go deleted file mode 100644 index 06d4368557ac..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zm_block_blob_client_util.go +++ /dev/null @@ -1,272 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azblob - -import "time" - -// --------------------------------------------------------------------------------------------------------------------- - -// BlockBlobUploadOptions provides set of configurations for UploadBlockBlob operation -type BlockBlobUploadOptions struct { - // Optional. Used to set blob tags in various blob operations. - TagsMap map[string]string - - // Optional. Specifies a user-defined name-value pair associated with the blob. - Metadata map[string]string - - // Optional. Indicates the tier to be set on the blob. - Tier *AccessTier - - // Specify the transactional md5 for the body, to be validated by the service. - TransactionalContentMD5 []byte - - HTTPHeaders *BlobHTTPHeaders - CpkInfo *CpkInfo - CpkScopeInfo *CpkScopeInfo - BlobAccessConditions *BlobAccessConditions -} - -func (o *BlockBlobUploadOptions) format() (*blockBlobClientUploadOptions, *BlobHTTPHeaders, *LeaseAccessConditions, - *CpkInfo, *CpkScopeInfo, *ModifiedAccessConditions) { - if o == nil { - return nil, nil, nil, nil, nil, nil - } - - basics := blockBlobClientUploadOptions{ - BlobTagsString: serializeBlobTagsToStrPtr(o.TagsMap), - Metadata: o.Metadata, - Tier: o.Tier, - TransactionalContentMD5: o.TransactionalContentMD5, - } - - leaseAccessConditions, modifiedAccessConditions := o.BlobAccessConditions.format() - return &basics, o.HTTPHeaders, leaseAccessConditions, o.CpkInfo, o.CpkScopeInfo, modifiedAccessConditions -} - -// BlockBlobUploadResponse contains the response from method BlockBlobClient.Upload. -type BlockBlobUploadResponse struct { - blockBlobClientUploadResponse -} - -func toBlockBlobUploadResponse(resp blockBlobClientUploadResponse) BlockBlobUploadResponse { - return BlockBlobUploadResponse{resp} -} - -// --------------------------------------------------------------------------------------------------------------------- - -// BlockBlobStageBlockOptions provides set of configurations for StageBlock operation -type BlockBlobStageBlockOptions struct { - CpkInfo *CpkInfo - - CpkScopeInfo *CpkScopeInfo - - LeaseAccessConditions *LeaseAccessConditions - // Specify the transactional crc64 for the body, to be validated by the service. - TransactionalContentCRC64 []byte - // Specify the transactional md5 for the body, to be validated by the service. - TransactionalContentMD5 []byte -} - -func (o *BlockBlobStageBlockOptions) format() (*blockBlobClientStageBlockOptions, *LeaseAccessConditions, *CpkInfo, *CpkScopeInfo) { - if o == nil { - return nil, nil, nil, nil - } - - return &blockBlobClientStageBlockOptions{ - TransactionalContentCRC64: o.TransactionalContentCRC64, - TransactionalContentMD5: o.TransactionalContentMD5, - }, o.LeaseAccessConditions, o.CpkInfo, o.CpkScopeInfo -} - -// BlockBlobStageBlockResponse contains the response from method BlockBlobClient.StageBlock. -type BlockBlobStageBlockResponse struct { - blockBlobClientStageBlockResponse -} - -func toBlockBlobStageBlockResponse(resp blockBlobClientStageBlockResponse) BlockBlobStageBlockResponse { - return BlockBlobStageBlockResponse{resp} -} - -// --------------------------------------------------------------------------------------------------------------------- - -// BlockBlobStageBlockFromURLOptions provides set of configurations for StageBlockFromURL operation -type BlockBlobStageBlockFromURLOptions struct { - // Only Bearer type is supported. Credentials should be a valid OAuth access token to copy source. - CopySourceAuthorization *string - - LeaseAccessConditions *LeaseAccessConditions - - SourceModifiedAccessConditions *SourceModifiedAccessConditions - // Specify the md5 calculated for the range of bytes that must be read from the copy source. - SourceContentMD5 []byte - // Specify the crc64 calculated for the range of bytes that must be read from the copy source. - SourceContentCRC64 []byte - - Offset *int64 - - Count *int64 - - CpkInfo *CpkInfo - - CpkScopeInfo *CpkScopeInfo -} - -func (o *BlockBlobStageBlockFromURLOptions) format() (*blockBlobClientStageBlockFromURLOptions, *CpkInfo, *CpkScopeInfo, *LeaseAccessConditions, *SourceModifiedAccessConditions) { - if o == nil { - return nil, nil, nil, nil, nil - } - - options := &blockBlobClientStageBlockFromURLOptions{ - CopySourceAuthorization: o.CopySourceAuthorization, - SourceContentMD5: o.SourceContentMD5, - SourceContentcrc64: o.SourceContentCRC64, - SourceRange: getSourceRange(o.Offset, o.Count), - } - - return options, o.CpkInfo, o.CpkScopeInfo, o.LeaseAccessConditions, o.SourceModifiedAccessConditions -} - -// BlockBlobStageBlockFromURLResponse contains the response from method BlockBlobClient.StageBlockFromURL. -type BlockBlobStageBlockFromURLResponse struct { - blockBlobClientStageBlockFromURLResponse -} - -func toBlockBlobStageBlockFromURLResponse(resp blockBlobClientStageBlockFromURLResponse) BlockBlobStageBlockFromURLResponse { - return BlockBlobStageBlockFromURLResponse{resp} -} - -// --------------------------------------------------------------------------------------------------------------------- - -// BlockBlobCommitBlockListOptions provides set of configurations for CommitBlockList operation -type BlockBlobCommitBlockListOptions struct { - BlobTagsMap map[string]string - Metadata map[string]string - RequestID *string - Tier *AccessTier - Timeout *int32 - TransactionalContentCRC64 []byte - TransactionalContentMD5 []byte - BlobHTTPHeaders *BlobHTTPHeaders - CpkInfo *CpkInfo - CpkScopeInfo *CpkScopeInfo - BlobAccessConditions *BlobAccessConditions -} - -func (o *BlockBlobCommitBlockListOptions) format() (*blockBlobClientCommitBlockListOptions, *BlobHTTPHeaders, *LeaseAccessConditions, *CpkInfo, *CpkScopeInfo, *ModifiedAccessConditions) { - if o == nil { - return nil, nil, nil, nil, nil, nil - } - - options := &blockBlobClientCommitBlockListOptions{ - BlobTagsString: serializeBlobTagsToStrPtr(o.BlobTagsMap), - Metadata: o.Metadata, - RequestID: o.RequestID, - Tier: o.Tier, - Timeout: o.Timeout, - TransactionalContentCRC64: o.TransactionalContentCRC64, - TransactionalContentMD5: o.TransactionalContentMD5, - } - leaseAccessConditions, modifiedAccessConditions := o.BlobAccessConditions.format() - return options, o.BlobHTTPHeaders, leaseAccessConditions, o.CpkInfo, o.CpkScopeInfo, modifiedAccessConditions -} - -// BlockBlobCommitBlockListResponse contains the response from method BlockBlobClient.CommitBlockList. -type BlockBlobCommitBlockListResponse struct { - blockBlobClientCommitBlockListResponse -} - -func toBlockBlobCommitBlockListResponse(resp blockBlobClientCommitBlockListResponse) BlockBlobCommitBlockListResponse { - return BlockBlobCommitBlockListResponse{resp} -} - -// --------------------------------------------------------------------------------------------------------------------- - -// BlockBlobGetBlockListOptions provides set of configurations for GetBlockList operation -type BlockBlobGetBlockListOptions struct { - Snapshot *string - BlobAccessConditions *BlobAccessConditions -} - -func (o *BlockBlobGetBlockListOptions) format() (*blockBlobClientGetBlockListOptions, *LeaseAccessConditions, *ModifiedAccessConditions) { - if o == nil { - return nil, nil, nil - } - - leaseAccessConditions, modifiedAccessConditions := o.BlobAccessConditions.format() - return &blockBlobClientGetBlockListOptions{Snapshot: o.Snapshot}, leaseAccessConditions, modifiedAccessConditions -} - -// BlockBlobGetBlockListResponse contains the response from method BlockBlobClient.GetBlockList. -type BlockBlobGetBlockListResponse struct { - blockBlobClientGetBlockListResponse -} - -func toBlockBlobGetBlockListResponse(resp blockBlobClientGetBlockListResponse) BlockBlobGetBlockListResponse { - return BlockBlobGetBlockListResponse{resp} -} - -// --------------------------------------------------------------------------------------------------------------------- - -// BlockBlobCopyFromURLOptions provides set of configurations for CopyBlockBlobFromURL operation -type BlockBlobCopyFromURLOptions struct { - // Optional. Used to set blob tags in various blob operations. - BlobTagsMap map[string]string - // Only Bearer type is supported. Credentials should be a valid OAuth access token to copy source. - CopySourceAuthorization *string - // Specifies the date time when the blobs immutability policy is set to expire. - ImmutabilityPolicyExpiry *time.Time - // Specifies the immutability policy mode to set on the blob. - ImmutabilityPolicyMode *BlobImmutabilityPolicyMode - // Specified if a legal hold should be set on the blob. - LegalHold *bool - // Optional. Specifies a user-defined name-value pair associated with the blob. If no name-value pairs are specified, the - // operation will copy the metadata from the source blob or file to the destination - // blob. If one or more name-value pairs are specified, the destination blob is created with the specified metadata, and metadata - // is not copied from the source blob or file. Note that beginning with - // version 2009-09-19, metadata names must adhere to the naming rules for C# identifiers. See Naming and Referencing Containers, - // Blobs, and Metadata for more information. - Metadata map[string]string - // Specify the md5 calculated for the range of bytes that must be read from the copy source. - SourceContentMD5 []byte - // Optional. Indicates the tier to be set on the blob. - Tier *AccessTier - - SourceModifiedAccessConditions *SourceModifiedAccessConditions - - BlobAccessConditions *BlobAccessConditions -} - -func (o *BlockBlobCopyFromURLOptions) format() (*blobClientCopyFromURLOptions, *SourceModifiedAccessConditions, *ModifiedAccessConditions, *LeaseAccessConditions) { - if o == nil { - return nil, nil, nil, nil - } - - options := &blobClientCopyFromURLOptions{ - BlobTagsString: serializeBlobTagsToStrPtr(o.BlobTagsMap), - CopySourceAuthorization: o.CopySourceAuthorization, - ImmutabilityPolicyExpiry: o.ImmutabilityPolicyExpiry, - ImmutabilityPolicyMode: o.ImmutabilityPolicyMode, - LegalHold: o.LegalHold, - Metadata: o.Metadata, - SourceContentMD5: o.SourceContentMD5, - Tier: o.Tier, - } - - leaseAccessConditions, modifiedAccessConditions := o.BlobAccessConditions.format() - return options, o.SourceModifiedAccessConditions, modifiedAccessConditions, leaseAccessConditions -} - -// BlockBlobCopyFromURLResponse contains the response from method BlockBlobClient.CopyFromURL. -type BlockBlobCopyFromURLResponse struct { - blobClientCopyFromURLResponse -} - -func toBlockBlobCopyFromURLResponse(resp blobClientCopyFromURLResponse) BlockBlobCopyFromURLResponse { - return BlockBlobCopyFromURLResponse{resp} -} - -// --------------------------------------------------------------------------------------------------------------------- diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zm_client_util.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zm_client_util.go deleted file mode 100644 index 657a767dd546..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zm_client_util.go +++ /dev/null @@ -1,55 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azblob - -import ( - "github.com/Azure/azure-sdk-for-go/sdk/azcore" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" -) - -// ClientOptions adds additional client options while constructing connection -type ClientOptions struct { - // Logging configures the built-in logging policy. - Logging policy.LogOptions - - // Retry configures the built-in retry policy. - Retry policy.RetryOptions - - // Telemetry configures the built-in telemetry policy. - Telemetry policy.TelemetryOptions - - // Transport sets the transport for HTTP requests. - Transport policy.Transporter - - // PerCallPolicies contains custom policies to inject into the pipeline. - // Each policy is executed once per request. - PerCallPolicies []policy.Policy - - // PerRetryPolicies contains custom policies to inject into the pipeline. - // Each policy is executed once per request, and for each retry of that request. - PerRetryPolicies []policy.Policy -} - -func (c *ClientOptions) toPolicyOptions() *azcore.ClientOptions { - return &azcore.ClientOptions{ - Logging: c.Logging, - Retry: c.Retry, - Telemetry: c.Telemetry, - Transport: c.Transport, - PerCallPolicies: c.PerCallPolicies, - PerRetryPolicies: c.PerRetryPolicies, - } -} - -// --------------------------------------------------------------------------------------------------------------------- - -func getConnectionOptions(options *ClientOptions) *policy.ClientOptions { - if options == nil { - options = &ClientOptions{} - } - return options.toPolicyOptions() -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zm_container_client_util.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zm_container_client_util.go deleted file mode 100644 index a33103e4b77c..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zm_container_client_util.go +++ /dev/null @@ -1,271 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azblob - -// --------------------------------------------------------------------------------------------------------------------- - -// ContainerCreateOptions provides set of configurations for CreateContainer operation -type ContainerCreateOptions struct { - // Specifies whether data in the container may be accessed publicly and the level of access - Access *PublicAccessType - - // Optional. Specifies a user-defined name-value pair associated with the blob. - Metadata map[string]string - - // Optional. Specifies the encryption scope settings to set on the container. - CpkScope *ContainerCpkScopeInfo -} - -func (o *ContainerCreateOptions) format() (*containerClientCreateOptions, *ContainerCpkScopeInfo) { - if o == nil { - return nil, nil - } - - basicOptions := containerClientCreateOptions{ - Access: o.Access, - Metadata: o.Metadata, - } - - return &basicOptions, o.CpkScope -} - -// ContainerCreateResponse is wrapper around containerClientCreateResponse -type ContainerCreateResponse struct { - containerClientCreateResponse -} - -func toContainerCreateResponse(resp containerClientCreateResponse) ContainerCreateResponse { - return ContainerCreateResponse{resp} -} - -// --------------------------------------------------------------------------------------------------------------------- - -// ContainerDeleteOptions provides set of configurations for DeleteContainer operation -type ContainerDeleteOptions struct { - LeaseAccessConditions *LeaseAccessConditions - ModifiedAccessConditions *ModifiedAccessConditions -} - -func (o *ContainerDeleteOptions) format() (*containerClientDeleteOptions, *LeaseAccessConditions, *ModifiedAccessConditions) { - if o == nil { - return nil, nil, nil - } - - return nil, o.LeaseAccessConditions, o.ModifiedAccessConditions -} - -// ContainerDeleteResponse contains the response from method ContainerClient.Delete. -type ContainerDeleteResponse struct { - containerClientDeleteResponse -} - -func toContainerDeleteResponse(resp containerClientDeleteResponse) ContainerDeleteResponse { - return ContainerDeleteResponse{resp} -} - -// --------------------------------------------------------------------------------------------------------------------- - -// ContainerGetPropertiesOptions provides set of configurations for GetPropertiesContainer operation -type ContainerGetPropertiesOptions struct { - LeaseAccessConditions *LeaseAccessConditions -} - -func (o *ContainerGetPropertiesOptions) format() (*containerClientGetPropertiesOptions, *LeaseAccessConditions) { - if o == nil { - return nil, nil - } - - return nil, o.LeaseAccessConditions -} - -// ContainerGetPropertiesResponse contains the response from method ContainerClient.GetProperties -type ContainerGetPropertiesResponse struct { - containerClientGetPropertiesResponse -} - -func toContainerGetPropertiesResponse(resp containerClientGetPropertiesResponse) ContainerGetPropertiesResponse { - return ContainerGetPropertiesResponse{resp} -} - -// --------------------------------------------------------------------------------------------------------------------- - -// ContainerSetMetadataOptions provides set of configurations for SetMetadataContainer operation -type ContainerSetMetadataOptions struct { - Metadata map[string]string - LeaseAccessConditions *LeaseAccessConditions - ModifiedAccessConditions *ModifiedAccessConditions -} - -func (o *ContainerSetMetadataOptions) format() (*containerClientSetMetadataOptions, *LeaseAccessConditions, *ModifiedAccessConditions) { - if o == nil { - return nil, nil, nil - } - - return &containerClientSetMetadataOptions{Metadata: o.Metadata}, o.LeaseAccessConditions, o.ModifiedAccessConditions -} - -// ContainerSetMetadataResponse contains the response from method containerClient.SetMetadata -type ContainerSetMetadataResponse struct { - containerClientSetMetadataResponse -} - -func toContainerSetMetadataResponse(resp containerClientSetMetadataResponse) ContainerSetMetadataResponse { - return ContainerSetMetadataResponse{resp} -} - -// --------------------------------------------------------------------------------------------------------------------- - -// ContainerGetAccessPolicyOptions provides set of configurations for GetAccessPolicy operation -type ContainerGetAccessPolicyOptions struct { - LeaseAccessConditions *LeaseAccessConditions -} - -func (o *ContainerGetAccessPolicyOptions) format() (*containerClientGetAccessPolicyOptions, *LeaseAccessConditions) { - if o == nil { - return nil, nil - } - - return nil, o.LeaseAccessConditions -} - -// ContainerGetAccessPolicyResponse contains the response from method ContainerClient.GetAccessPolicy. -type ContainerGetAccessPolicyResponse struct { - containerClientGetAccessPolicyResponse -} - -func toContainerGetAccessPolicyResponse(resp containerClientGetAccessPolicyResponse) ContainerGetAccessPolicyResponse { - return ContainerGetAccessPolicyResponse{resp} -} - -// --------------------------------------------------------------------------------------------------------------------- - -// ContainerSetAccessPolicyOptions provides set of configurations for ContainerClient.SetAccessPolicy operation -type ContainerSetAccessPolicyOptions struct { - AccessConditions *ContainerAccessConditions - // Specifies whether data in the container may be accessed publicly and the level of access - Access *PublicAccessType - // the acls for the container - ContainerACL []*SignedIdentifier - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 -} - -func (o *ContainerSetAccessPolicyOptions) format() (*containerClientSetAccessPolicyOptions, *LeaseAccessConditions, *ModifiedAccessConditions) { - if o == nil { - return nil, nil, nil - } - mac, lac := o.AccessConditions.format() - return &containerClientSetAccessPolicyOptions{ - Access: o.Access, - ContainerACL: o.ContainerACL, - RequestID: o.RequestID, - }, lac, mac -} - -// ContainerSetAccessPolicyResponse contains the response from method ContainerClient.SetAccessPolicy -type ContainerSetAccessPolicyResponse struct { - containerClientSetAccessPolicyResponse -} - -func toContainerSetAccessPolicyResponse(resp containerClientSetAccessPolicyResponse) ContainerSetAccessPolicyResponse { - return ContainerSetAccessPolicyResponse{resp} -} - -// --------------------------------------------------------------------------------------------------------------------- - -// ContainerListBlobsFlatOptions provides set of configurations for SetAccessPolicy operation -type ContainerListBlobsFlatOptions struct { - // Include this parameter to specify one or more datasets to include in the response. - Include []ListBlobsIncludeItem - // A string value that identifies the portion of the list of containers to be returned with the next listing operation. The - // operation returns the NextMarker value within the response body if the listing - // operation did not return all containers remaining to be listed with the current page. The NextMarker value can be used - // as the value for the marker parameter in a subsequent call to request the next - // page of list items. The marker value is opaque to the client. - Marker *string - // Specifies the maximum number of containers to return. If the request does not specify maxresults, or specifies a value - // greater than 5000, the server will return up to 5000 items. Note that if the - // listing operation crosses a partition boundary, then the service will return a continuation token for retrieving the remainder - // of the results. For this reason, it is possible that the service will - // return fewer results than specified by maxresults, or than the default of 5000. - MaxResults *int32 - // Filters the results to return only containers whose name begins with the specified prefix. - Prefix *string -} - -func (o *ContainerListBlobsFlatOptions) format() *containerClientListBlobFlatSegmentOptions { - if o == nil { - return nil - } - - return &containerClientListBlobFlatSegmentOptions{ - Include: o.Include, - Marker: o.Marker, - Maxresults: o.MaxResults, - Prefix: o.Prefix, - } -} - -// ContainerListBlobFlatPager provides operations for iterating over paged responses -type ContainerListBlobFlatPager struct { - *containerClientListBlobFlatSegmentPager -} - -func toContainerListBlobFlatSegmentPager(resp *containerClientListBlobFlatSegmentPager) *ContainerListBlobFlatPager { - return &ContainerListBlobFlatPager{resp} -} - -// --------------------------------------------------------------------------------------------------------------------- - -//ContainerListBlobsHierarchyOptions provides set of configurations for ContainerClient.ListBlobsHierarchy -type ContainerListBlobsHierarchyOptions struct { - // Include this parameter to specify one or more datasets to include in the response. - Include []ListBlobsIncludeItem - // A string value that identifies the portion of the list of containers to be returned with the next listing operation. The - // operation returns the NextMarker value within the response body if the listing - // operation did not return all containers remaining to be listed with the current page. The NextMarker value can be used - // as the value for the marker parameter in a subsequent call to request the next - // page of list items. The marker value is opaque to the client. - Marker *string - // Specifies the maximum number of containers to return. If the request does not specify maxresults, or specifies a value - // greater than 5000, the server will return up to 5000 items. Note that if the - // listing operation crosses a partition boundary, then the service will return a continuation token for retrieving the remainder - // of the results. For this reason, it is possible that the service will - // return fewer results than specified by maxresults, or than the default of 5000. - MaxResults *int32 - // Filters the results to return only containers whose name begins with the specified prefix. - Prefix *string -} - -func (o *ContainerListBlobsHierarchyOptions) format() *containerClientListBlobHierarchySegmentOptions { - if o == nil { - return nil - } - - return &containerClientListBlobHierarchySegmentOptions{ - Include: o.Include, - Marker: o.Marker, - Maxresults: o.MaxResults, - Prefix: o.Prefix, - } -} - -// ContainerListBlobHierarchyPager provides operations for iterating over paged responses. -type ContainerListBlobHierarchyPager struct { - containerClientListBlobHierarchySegmentPager -} - -func toContainerListBlobHierarchySegmentPager(resp *containerClientListBlobHierarchySegmentPager) *ContainerListBlobHierarchyPager { - if resp == nil { - return nil - } - return &ContainerListBlobHierarchyPager{*resp} -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zm_container_lease_client_util.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zm_container_lease_client_util.go deleted file mode 100644 index 87572e9178f6..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zm_container_lease_client_util.go +++ /dev/null @@ -1,166 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azblob - -import ( - "github.com/Azure/azure-sdk-for-go/sdk/azcore/to" - "github.com/Azure/azure-sdk-for-go/sdk/internal/uuid" -) - -// --------------------------------------------------------------------------------------------------------------------- - -// LeaseBreakNaturally tells ContainerClient's or BlobClient's BreakLease method to break the lease using service semantics. -const LeaseBreakNaturally = -1 - -func leasePeriodPointer(period int32) *int32 { - if period != LeaseBreakNaturally { - return &period - } else { - return nil - } -} - -// --------------------------------------------------------------------------------------------------------------------- - -// ContainerAcquireLeaseOptions provides set of configurations for AcquireLeaseContainer operation -type ContainerAcquireLeaseOptions struct { - Duration *int32 - ModifiedAccessConditions *ModifiedAccessConditions -} - -func (o *ContainerAcquireLeaseOptions) format() (containerClientAcquireLeaseOptions, *ModifiedAccessConditions) { - if o == nil { - return containerClientAcquireLeaseOptions{}, nil - } - containerAcquireLeaseOptions := containerClientAcquireLeaseOptions{ - Duration: o.Duration, - } - - return containerAcquireLeaseOptions, o.ModifiedAccessConditions -} - -// ContainerAcquireLeaseResponse contains the response from method ContainerLeaseClient.AcquireLease. -type ContainerAcquireLeaseResponse struct { - containerClientAcquireLeaseResponse -} - -func toContainerAcquireLeaseResponse(resp containerClientAcquireLeaseResponse) ContainerAcquireLeaseResponse { - return ContainerAcquireLeaseResponse{resp} -} - -// --------------------------------------------------------------------------------------------------------------------- - -// ContainerBreakLeaseOptions provides set of configurations for BreakLeaseContainer operation -type ContainerBreakLeaseOptions struct { - BreakPeriod *int32 - ModifiedAccessConditions *ModifiedAccessConditions -} - -func (o *ContainerBreakLeaseOptions) format() (*containerClientBreakLeaseOptions, *ModifiedAccessConditions) { - if o == nil { - return nil, nil - } - - containerBreakLeaseOptions := &containerClientBreakLeaseOptions{ - BreakPeriod: o.BreakPeriod, - } - - return containerBreakLeaseOptions, o.ModifiedAccessConditions -} - -// ContainerBreakLeaseResponse contains the response from method ContainerLeaseClient.BreakLease. -type ContainerBreakLeaseResponse struct { - containerClientBreakLeaseResponse -} - -func toContainerBreakLeaseResponse(resp containerClientBreakLeaseResponse) ContainerBreakLeaseResponse { - return ContainerBreakLeaseResponse{resp} -} - -// --------------------------------------------------------------------------------------------------------------------- - -// ContainerChangeLeaseOptions provides set of configurations for ChangeLeaseContainer operation -type ContainerChangeLeaseOptions struct { - ProposedLeaseID *string - ModifiedAccessConditions *ModifiedAccessConditions -} - -func (o *ContainerChangeLeaseOptions) format() (*string, *containerClientChangeLeaseOptions, *ModifiedAccessConditions, error) { - generatedUuid, err := uuid.New() - if err != nil { - return nil, nil, nil, err - } - leaseID := to.Ptr(generatedUuid.String()) - if o == nil { - return leaseID, nil, nil, err - } - - if o.ProposedLeaseID == nil { - o.ProposedLeaseID = leaseID - } - - return o.ProposedLeaseID, nil, o.ModifiedAccessConditions, err -} - -// ContainerChangeLeaseResponse contains the response from method ContainerLeaseClient.ChangeLease. -type ContainerChangeLeaseResponse struct { - containerClientChangeLeaseResponse -} - -func toContainerChangeLeaseResponse(resp containerClientChangeLeaseResponse) ContainerChangeLeaseResponse { - return ContainerChangeLeaseResponse{resp} -} - -// --------------------------------------------------------------------------------------------------------------------- - -// ContainerReleaseLeaseOptions provides set of configurations for ReleaseLeaseContainer operation -type ContainerReleaseLeaseOptions struct { - ModifiedAccessConditions *ModifiedAccessConditions -} - -func (o *ContainerReleaseLeaseOptions) format() (*containerClientReleaseLeaseOptions, *ModifiedAccessConditions) { - if o == nil { - return nil, nil - } - - return nil, o.ModifiedAccessConditions -} - -// ContainerReleaseLeaseResponse contains the response from method ContainerLeaseClient.ReleaseLease. -type ContainerReleaseLeaseResponse struct { - containerClientReleaseLeaseResponse -} - -func toContainerReleaseLeaseResponse(resp containerClientReleaseLeaseResponse) ContainerReleaseLeaseResponse { - return ContainerReleaseLeaseResponse{resp} -} - -// --------------------------------------------------------------------------------------------------------------------- - -// ContainerRenewLeaseOptions provides set of configurations for RenewLeaseContainer operation -type ContainerRenewLeaseOptions struct { - ModifiedAccessConditions *ModifiedAccessConditions -} - -func (o *ContainerRenewLeaseOptions) format() (*containerClientRenewLeaseOptions, *ModifiedAccessConditions) { - if o == nil { - return nil, nil - } - - return nil, o.ModifiedAccessConditions -} - -// ContainerRenewLeaseResponse contains the response from method ContainerLeaseClient.RenewLease. -type ContainerRenewLeaseResponse struct { - containerClientRenewLeaseResponse -} - -func toContainerRenewLeaseResponse(resp containerClientRenewLeaseResponse) ContainerRenewLeaseResponse { - return ContainerRenewLeaseResponse{resp} -} - -// --------------------------------------------------------------------------------------------------------------------- diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zm_highlevel_util.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zm_highlevel_util.go deleted file mode 100644 index c7a67abe7746..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zm_highlevel_util.go +++ /dev/null @@ -1,201 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azblob - -import ( - "context" - "fmt" -) - -const _1MiB = 1024 * 1024 - -// UploadOption identifies options used by the UploadBuffer and UploadFile functions. -type UploadOption struct { - // BlockSize specifies the block size to use; the default (and maximum size) is BlockBlobMaxStageBlockBytes. - BlockSize int64 - - // Progress is a function that is invoked periodically as bytes are sent to the BlockBlobClient. - // Note that the progress reporting is not always increasing; it can go down when retrying a request. - Progress func(bytesTransferred int64) - - // HTTPHeaders indicates the HTTP headers to be associated with the blob. - HTTPHeaders *BlobHTTPHeaders - - // Metadata indicates the metadata to be associated with the blob when PutBlockList is called. - Metadata map[string]string - - // BlobAccessConditions indicates the access conditions for the block blob. - BlobAccessConditions *BlobAccessConditions - - // AccessTier indicates the tier of blob - AccessTier *AccessTier - - // TagsMap - TagsMap map[string]string - - // ClientProvidedKeyOptions indicates the client provided key by name and/or by value to encrypt/decrypt data. - CpkInfo *CpkInfo - CpkScopeInfo *CpkScopeInfo - - // Parallelism indicates the maximum number of blocks to upload in parallel (0=default) - Parallelism uint16 - // Optional header, Specifies the transactional crc64 for the body, to be validated by the service. - TransactionalContentCRC64 *[]byte - // Specify the transactional md5 for the body, to be validated by the service. - TransactionalContentMD5 *[]byte -} - -func (o *UploadOption) getStageBlockOptions() *BlockBlobStageBlockOptions { - leaseAccessConditions, _ := o.BlobAccessConditions.format() - return &BlockBlobStageBlockOptions{ - CpkInfo: o.CpkInfo, - CpkScopeInfo: o.CpkScopeInfo, - LeaseAccessConditions: leaseAccessConditions, - } -} - -func (o *UploadOption) getUploadBlockBlobOptions() *BlockBlobUploadOptions { - return &BlockBlobUploadOptions{ - TagsMap: o.TagsMap, - Metadata: o.Metadata, - Tier: o.AccessTier, - HTTPHeaders: o.HTTPHeaders, - BlobAccessConditions: o.BlobAccessConditions, - CpkInfo: o.CpkInfo, - CpkScopeInfo: o.CpkScopeInfo, - } -} - -func (o *UploadOption) getCommitBlockListOptions() *BlockBlobCommitBlockListOptions { - return &BlockBlobCommitBlockListOptions{ - BlobTagsMap: o.TagsMap, - Metadata: o.Metadata, - Tier: o.AccessTier, - BlobHTTPHeaders: o.HTTPHeaders, - CpkInfo: o.CpkInfo, - CpkScopeInfo: o.CpkScopeInfo, - } -} - -// --------------------------------------------------------------------------------------------------------------------- - -// UploadStreamOptions provides set of configurations for UploadStream operation -type UploadStreamOptions struct { - // TransferManager provides a TransferManager that controls buffer allocation/reuse and - // concurrency. This overrides BufferSize and MaxBuffers if set. - TransferManager TransferManager - transferMangerNotSet bool - // BufferSize sizes the buffer used to read data from source. If < 1 MiB, defaults to 1 MiB. - BufferSize int - // MaxBuffers defines the number of simultaneous uploads will be performed to upload the file. - MaxBuffers int - HTTPHeaders *BlobHTTPHeaders - Metadata map[string]string - BlobAccessConditions *BlobAccessConditions - AccessTier *AccessTier - BlobTagsMap map[string]string - CpkInfo *CpkInfo - CpkScopeInfo *CpkScopeInfo -} - -func (u *UploadStreamOptions) defaults() error { - if u.TransferManager != nil { - return nil - } - - if u.MaxBuffers == 0 { - u.MaxBuffers = 1 - } - - if u.BufferSize < _1MiB { - u.BufferSize = _1MiB - } - - var err error - u.TransferManager, err = NewStaticBuffer(u.BufferSize, u.MaxBuffers) - if err != nil { - return fmt.Errorf("bug: default transfer manager could not be created: %s", err) - } - u.transferMangerNotSet = true - return nil -} - -func (u *UploadStreamOptions) getStageBlockOptions() *BlockBlobStageBlockOptions { - leaseAccessConditions, _ := u.BlobAccessConditions.format() - return &BlockBlobStageBlockOptions{ - CpkInfo: u.CpkInfo, - CpkScopeInfo: u.CpkScopeInfo, - LeaseAccessConditions: leaseAccessConditions, - } -} - -func (u *UploadStreamOptions) getCommitBlockListOptions() *BlockBlobCommitBlockListOptions { - options := &BlockBlobCommitBlockListOptions{ - BlobTagsMap: u.BlobTagsMap, - Metadata: u.Metadata, - Tier: u.AccessTier, - BlobHTTPHeaders: u.HTTPHeaders, - CpkInfo: u.CpkInfo, - CpkScopeInfo: u.CpkScopeInfo, - BlobAccessConditions: u.BlobAccessConditions, - } - - return options -} - -// --------------------------------------------------------------------------------------------------------------------- - -// DownloadOptions identifies options used by the DownloadToBuffer and DownloadToFile functions. -type DownloadOptions struct { - // BlockSize specifies the block size to use for each parallel download; the default size is BlobDefaultDownloadBlockSize. - BlockSize int64 - - // Progress is a function that is invoked periodically as bytes are received. - Progress func(bytesTransferred int64) - - // BlobAccessConditions indicates the access conditions used when making HTTP GET requests against the blob. - BlobAccessConditions *BlobAccessConditions - - // ClientProvidedKeyOptions indicates the client provided key by name and/or by value to encrypt/decrypt data. - CpkInfo *CpkInfo - CpkScopeInfo *CpkScopeInfo - - // Parallelism indicates the maximum number of blocks to download in parallel (0=default) - Parallelism uint16 - - // RetryReaderOptionsPerBlock is used when downloading each block. - RetryReaderOptionsPerBlock RetryReaderOptions -} - -func (o *DownloadOptions) getBlobPropertiesOptions() *BlobGetPropertiesOptions { - return &BlobGetPropertiesOptions{ - BlobAccessConditions: o.BlobAccessConditions, - CpkInfo: o.CpkInfo, - } -} - -func (o *DownloadOptions) getDownloadBlobOptions(offSet, count int64, rangeGetContentMD5 *bool) *BlobDownloadOptions { - return &BlobDownloadOptions{ - BlobAccessConditions: o.BlobAccessConditions, - CpkInfo: o.CpkInfo, - CpkScopeInfo: o.CpkScopeInfo, - Offset: &offSet, - Count: &count, - RangeGetContentMD5: rangeGetContentMD5, - } -} - -// --------------------------------------------------------------------------------------------------------------------- - -// BatchTransferOptions identifies options used by DoBatchTransfer. -type BatchTransferOptions struct { - TransferSize int64 - ChunkSize int64 - Parallelism uint16 - Operation func(offset int64, chunkSize int64, ctx context.Context) error - OperationName string -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zm_page_blob_client_util.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zm_page_blob_client_util.go deleted file mode 100644 index 2be2758736a1..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zm_page_blob_client_util.go +++ /dev/null @@ -1,402 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azblob - -import ( - "strconv" - "time" -) - -// --------------------------------------------------------------------------------------------------------------------- - -func rangeToString(offset, count int64) string { - return "bytes=" + strconv.FormatInt(offset, 10) + "-" + strconv.FormatInt(offset+count-1, 10) -} - -// --------------------------------------------------------------------------------------------------------------------- - -// PageBlobCreateOptions provides set of configurations for CreatePageBlob operation -type PageBlobCreateOptions struct { - // Set for page blobs only. The sequence number is a user-controlled value that you can use to track requests. The value of - // the sequence number must be between 0 and 2^63 - 1. - BlobSequenceNumber *int64 - // Optional. Used to set blob tags in various blob operations. - BlobTagsMap map[string]string - // Optional. Specifies a user-defined name-value pair associated with the blob. If no name-value pairs are specified, the - // operation will copy the metadata from the source blob or file to the destination blob. If one or more name-value pairs - // are specified, the destination blob is created with the specified metadata, and metadata is not copied from the source - // blob or file. Note that beginning with version 2009-09-19, metadata names must adhere to the naming rules for C# identifiers. - // See Naming and Referencing Containers, Blobs, and Metadata for more information. - Metadata map[string]string - // Optional. Indicates the tier to be set on the page blob. - Tier *PremiumPageBlobAccessTier - - HTTPHeaders *BlobHTTPHeaders - - CpkInfo *CpkInfo - - CpkScopeInfo *CpkScopeInfo - - BlobAccessConditions *BlobAccessConditions - // Specifies the date time when the blobs immutability policy is set to expire. - ImmutabilityPolicyExpiry *time.Time - // Specifies the immutability policy mode to set on the blob. - ImmutabilityPolicyMode *BlobImmutabilityPolicyMode - // Specified if a legal hold should be set on the blob. - LegalHold *bool -} - -func (o *PageBlobCreateOptions) format() (*pageBlobClientCreateOptions, *BlobHTTPHeaders, *LeaseAccessConditions, *CpkInfo, *CpkScopeInfo, *ModifiedAccessConditions) { - if o == nil { - return nil, nil, nil, nil, nil, nil - } - - options := &pageBlobClientCreateOptions{ - BlobSequenceNumber: o.BlobSequenceNumber, - BlobTagsString: serializeBlobTagsToStrPtr(o.BlobTagsMap), - Metadata: o.Metadata, - Tier: o.Tier, - } - leaseAccessConditions, modifiedAccessConditions := o.BlobAccessConditions.format() - return options, o.HTTPHeaders, leaseAccessConditions, o.CpkInfo, o.CpkScopeInfo, modifiedAccessConditions -} - -// PageBlobCreateResponse contains the response from method PageBlobClient.Create. -type PageBlobCreateResponse struct { - pageBlobClientCreateResponse -} - -func toPageBlobCreateResponse(resp pageBlobClientCreateResponse) PageBlobCreateResponse { - return PageBlobCreateResponse{resp} -} - -// --------------------------------------------------------------------------------------------------------------------- - -// PageBlobUploadPagesOptions provides set of configurations for UploadPages operation -type PageBlobUploadPagesOptions struct { - // Specify the transactional crc64 for the body, to be validated by the service. - PageRange *HttpRange - TransactionalContentCRC64 []byte - // Specify the transactional md5 for the body, to be validated by the service. - TransactionalContentMD5 []byte - - CpkInfo *CpkInfo - CpkScopeInfo *CpkScopeInfo - SequenceNumberAccessConditions *SequenceNumberAccessConditions - BlobAccessConditions *BlobAccessConditions -} - -func (o *PageBlobUploadPagesOptions) format() (*pageBlobClientUploadPagesOptions, *LeaseAccessConditions, - *CpkInfo, *CpkScopeInfo, *SequenceNumberAccessConditions, *ModifiedAccessConditions) { - if o == nil { - return nil, nil, nil, nil, nil, nil - } - - options := &pageBlobClientUploadPagesOptions{ - TransactionalContentCRC64: o.TransactionalContentCRC64, - TransactionalContentMD5: o.TransactionalContentMD5, - } - - if o.PageRange != nil { - options.Range = o.PageRange.format() - } - - leaseAccessConditions, modifiedAccessConditions := o.BlobAccessConditions.format() - return options, leaseAccessConditions, o.CpkInfo, o.CpkScopeInfo, o.SequenceNumberAccessConditions, modifiedAccessConditions -} - -// PageBlobUploadPagesResponse contains the response from method PageBlobClient.UploadPages. -type PageBlobUploadPagesResponse struct { - pageBlobClientUploadPagesResponse -} - -func toPageBlobUploadPagesResponse(resp pageBlobClientUploadPagesResponse) PageBlobUploadPagesResponse { - return PageBlobUploadPagesResponse{resp} -} - -// --------------------------------------------------------------------------------------------------------------------- - -// PageBlobUploadPagesFromURLOptions provides set of configurations for UploadPagesFromURL operation -type PageBlobUploadPagesFromURLOptions struct { - // Only Bearer type is supported. Credentials should be a valid OAuth access token to copy source. - CopySourceAuthorization *string - // Specify the md5 calculated for the range of bytes that must be read from the copy source. - SourceContentMD5 []byte - // Specify the crc64 calculated for the range of bytes that must be read from the copy source. - SourceContentCRC64 []byte - - CpkInfo *CpkInfo - - CpkScopeInfo *CpkScopeInfo - - SequenceNumberAccessConditions *SequenceNumberAccessConditions - - SourceModifiedAccessConditions *SourceModifiedAccessConditions - - BlobAccessConditions *BlobAccessConditions -} - -func (o *PageBlobUploadPagesFromURLOptions) format() (*pageBlobClientUploadPagesFromURLOptions, *CpkInfo, *CpkScopeInfo, - *LeaseAccessConditions, *SequenceNumberAccessConditions, *ModifiedAccessConditions, *SourceModifiedAccessConditions) { - if o == nil { - return nil, nil, nil, nil, nil, nil, nil - } - - options := &pageBlobClientUploadPagesFromURLOptions{ - SourceContentMD5: o.SourceContentMD5, - SourceContentcrc64: o.SourceContentCRC64, - CopySourceAuthorization: o.CopySourceAuthorization, - } - - leaseAccessConditions, modifiedAccessConditions := o.BlobAccessConditions.format() - return options, o.CpkInfo, o.CpkScopeInfo, leaseAccessConditions, o.SequenceNumberAccessConditions, modifiedAccessConditions, o.SourceModifiedAccessConditions -} - -// PageBlobUploadPagesFromURLResponse contains the response from method PageBlobClient.UploadPagesFromURL -type PageBlobUploadPagesFromURLResponse struct { - pageBlobClientUploadPagesFromURLResponse -} - -func toPageBlobUploadPagesFromURLResponse(resp pageBlobClientUploadPagesFromURLResponse) PageBlobUploadPagesFromURLResponse { - return PageBlobUploadPagesFromURLResponse{resp} -} - -// --------------------------------------------------------------------------------------------------------------------- - -// PageBlobClearPagesOptions provides set of configurations for PageBlobClient.ClearPages operation -type PageBlobClearPagesOptions struct { - CpkInfo *CpkInfo - CpkScopeInfo *CpkScopeInfo - SequenceNumberAccessConditions *SequenceNumberAccessConditions - BlobAccessConditions *BlobAccessConditions -} - -func (o *PageBlobClearPagesOptions) format() (*LeaseAccessConditions, *CpkInfo, - *CpkScopeInfo, *SequenceNumberAccessConditions, *ModifiedAccessConditions) { - if o == nil { - return nil, nil, nil, nil, nil - } - - leaseAccessConditions, modifiedAccessConditions := o.BlobAccessConditions.format() - return leaseAccessConditions, o.CpkInfo, o.CpkScopeInfo, o.SequenceNumberAccessConditions, modifiedAccessConditions -} - -// PageBlobClearPagesResponse contains the response from method PageBlobClient.ClearPages -type PageBlobClearPagesResponse struct { - pageBlobClientClearPagesResponse -} - -func toPageBlobClearPagesResponse(resp pageBlobClientClearPagesResponse) PageBlobClearPagesResponse { - return PageBlobClearPagesResponse{resp} -} - -// --------------------------------------------------------------------------------------------------------------------- - -// PageBlobGetPageRangesOptions provides set of configurations for GetPageRanges operation -type PageBlobGetPageRangesOptions struct { - Marker *string - // Specifies the maximum number of containers to return. If the request does not specify maxresults, or specifies a value - // greater than 5000, the server will return up to 5000 items. Note that if the - // listing operation crosses a partition boundary, then the service will return a continuation token for retrieving the remainder - // of the results. For this reason, it is possible that the service will - // return fewer results than specified by maxresults, or than the default of 5000. - MaxResults *int32 - // Optional. This header is only supported in service versions 2019-04-19 and after and specifies the URL of a previous snapshot - // of the target blob. The response will only contain pages that were changed - // between the target blob and its previous snapshot. - PrevSnapshotURL *string - // Optional in version 2015-07-08 and newer. The prevsnapshot parameter is a DateTime value that specifies that the response - // will contain only pages that were changed between target blob and previous - // snapshot. Changed pages include both updated and cleared pages. The target blob may be a snapshot, as long as the snapshot - // specified by prevsnapshot is the older of the two. Note that incremental - // snapshots are currently supported only for blobs created on or after January 1, 2016. - PrevSnapshot *string - // Optional, you can specify whether a particular range of the blob is read - PageRange *HttpRange - // The snapshot parameter is an opaque DateTime value that, when present, specifies the blob snapshot to retrieve. For more - // information on working with blob snapshots, see Creating a Snapshot of a Blob. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/creating-a-snapshot-of-a-blob] - Snapshot *string - - BlobAccessConditions *BlobAccessConditions -} - -func (o *PageBlobGetPageRangesOptions) format() (*pageBlobClientGetPageRangesOptions, *LeaseAccessConditions, *ModifiedAccessConditions) { - if o == nil { - return nil, nil, nil - } - - leaseAccessConditions, modifiedAccessConditions := o.BlobAccessConditions.format() - return &pageBlobClientGetPageRangesOptions{ - Marker: o.Marker, - Maxresults: o.MaxResults, - Range: o.PageRange.format(), - Snapshot: o.Snapshot, - }, leaseAccessConditions, modifiedAccessConditions -} - -// PageBlobGetPageRangesPager provides operations for iterating over paged responses -type PageBlobGetPageRangesPager struct { - *pageBlobClientGetPageRangesPager -} - -func toPageBlobGetPageRangesPager(resp *pageBlobClientGetPageRangesPager) *PageBlobGetPageRangesPager { - return &PageBlobGetPageRangesPager{resp} -} - -// --------------------------------------------------------------------------------------------------------------------- - -// PageBlobGetPageRangesDiffOptions provides set of configurations for PageBlobClient.GetPageRangesDiff operation -type PageBlobGetPageRangesDiffOptions struct { - // A string value that identifies the portion of the list of containers to be returned with the next listing operation. The - // operation returns the NextMarker value within the response body if the listing - // operation did not return all containers remaining to be listed with the current page. The NextMarker value can be used - // as the value for the marker parameter in a subsequent call to request the next - // page of list items. The marker value is opaque to the client. - Marker *string - // Specifies the maximum number of containers to return. If the request does not specify maxresults, or specifies a value - // greater than 5000, the server will return up to 5000 items. Note that if the - // listing operation crosses a partition boundary, then the service will return a continuation token for retrieving the remainder - // of the results. For this reason, it is possible that the service will - // return fewer results than specified by maxresults, or than the default of 5000. - MaxResults *int32 - // Optional. This header is only supported in service versions 2019-04-19 and after and specifies the URL of a previous snapshot - // of the target blob. The response will only contain pages that were changed - // between the target blob and its previous snapshot. - PrevSnapshotURL *string - // Optional in version 2015-07-08 and newer. The prevsnapshot parameter is a DateTime value that specifies that the response - // will contain only pages that were changed between target blob and previous - // snapshot. Changed pages include both updated and cleared pages. The target blob may be a snapshot, as long as the snapshot - // specified by prevsnapshot is the older of the two. Note that incremental - // snapshots are currently supported only for blobs created on or after January 1, 2016. - PrevSnapshot *string - // Optional, you can specify whether a particular range of the blob is read - PageRange *HttpRange - - // The snapshot parameter is an opaque DateTime value that, when present, specifies the blob snapshot to retrieve. For more - // information on working with blob snapshots, see Creating a Snapshot of a Blob. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/creating-a-snapshot-of-a-blob] - Snapshot *string - - BlobAccessConditions *BlobAccessConditions -} - -func (o *PageBlobGetPageRangesDiffOptions) format() (*pageBlobClientGetPageRangesDiffOptions, *LeaseAccessConditions, *ModifiedAccessConditions) { - if o == nil { - return nil, nil, nil - } - - leaseAccessConditions, modifiedAccessConditions := o.BlobAccessConditions.format() - return &pageBlobClientGetPageRangesDiffOptions{ - Marker: o.Marker, - Maxresults: o.MaxResults, - PrevSnapshotURL: o.PrevSnapshotURL, - Prevsnapshot: o.PrevSnapshot, - Range: o.PageRange.format(), - Snapshot: o.Snapshot, - }, leaseAccessConditions, modifiedAccessConditions - -} - -// PageBlobGetPageRangesDiffPager provides operations for iterating over paged responses -type PageBlobGetPageRangesDiffPager struct { - *pageBlobClientGetPageRangesDiffPager -} - -func toPageBlobGetPageRangesDiffPager(resp *pageBlobClientGetPageRangesDiffPager) *PageBlobGetPageRangesDiffPager { - return &PageBlobGetPageRangesDiffPager{resp} -} - -// --------------------------------------------------------------------------------------------------------------------- - -// PageBlobResizeOptions provides set of configurations for PageBlobClient.Resize operation -type PageBlobResizeOptions struct { - CpkInfo *CpkInfo - CpkScopeInfo *CpkScopeInfo - BlobAccessConditions *BlobAccessConditions -} - -func (o *PageBlobResizeOptions) format() (*pageBlobClientResizeOptions, *LeaseAccessConditions, *CpkInfo, *CpkScopeInfo, *ModifiedAccessConditions) { - if o == nil { - return nil, nil, nil, nil, nil - } - - leaseAccessConditions, modifiedAccessConditions := o.BlobAccessConditions.format() - return nil, leaseAccessConditions, o.CpkInfo, o.CpkScopeInfo, modifiedAccessConditions -} - -// PageBlobResizeResponse contains the response from method PageBlobClient.Resize -type PageBlobResizeResponse struct { - pageBlobClientResizeResponse -} - -func toPageBlobResizeResponse(resp pageBlobClientResizeResponse) PageBlobResizeResponse { - return PageBlobResizeResponse{resp} -} - -// --------------------------------------------------------------------------------------------------------------------- - -// PageBlobUpdateSequenceNumberOptions provides set of configurations for PageBlobClient.UpdateSequenceNumber operation -type PageBlobUpdateSequenceNumberOptions struct { - ActionType *SequenceNumberActionType - - BlobSequenceNumber *int64 - - BlobAccessConditions *BlobAccessConditions -} - -func (o *PageBlobUpdateSequenceNumberOptions) format() (*SequenceNumberActionType, *pageBlobClientUpdateSequenceNumberOptions, *LeaseAccessConditions, *ModifiedAccessConditions) { - if o == nil { - return nil, nil, nil, nil - } - - options := &pageBlobClientUpdateSequenceNumberOptions{ - BlobSequenceNumber: o.BlobSequenceNumber, - } - - if *o.ActionType == SequenceNumberActionTypeIncrement { - options.BlobSequenceNumber = nil - } - - leaseAccessConditions, modifiedAccessConditions := o.BlobAccessConditions.format() - return o.ActionType, options, leaseAccessConditions, modifiedAccessConditions -} - -// PageBlobUpdateSequenceNumberResponse contains the response from method PageBlobClient.UpdateSequenceNumber -type PageBlobUpdateSequenceNumberResponse struct { - pageBlobClientUpdateSequenceNumberResponse -} - -func toPageBlobUpdateSequenceNumberResponse(resp pageBlobClientUpdateSequenceNumberResponse) PageBlobUpdateSequenceNumberResponse { - return PageBlobUpdateSequenceNumberResponse{resp} -} - -// --------------------------------------------------------------------------------------------------------------------- - -// PageBlobCopyIncrementalOptions provides set of configurations for PageBlobClient.StartCopyIncremental operation -type PageBlobCopyIncrementalOptions struct { - ModifiedAccessConditions *ModifiedAccessConditions -} - -func (o *PageBlobCopyIncrementalOptions) format() (*pageBlobClientCopyIncrementalOptions, *ModifiedAccessConditions) { - if o == nil { - return nil, nil - } - - return nil, o.ModifiedAccessConditions -} - -// PageBlobCopyIncrementalResponse contains the response from method PageBlobClient.StartCopyIncremental -type PageBlobCopyIncrementalResponse struct { - pageBlobClientCopyIncrementalResponse -} - -func toPageBlobCopyIncrementalResponse(resp pageBlobClientCopyIncrementalResponse) PageBlobCopyIncrementalResponse { - return PageBlobCopyIncrementalResponse{resp} -} - -// --------------------------------------------------------------------------------------------------------------------- diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zm_serialize_and_desearilize_util.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zm_serialize_and_desearilize_util.go deleted file mode 100644 index 3cf85ca43b1a..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zm_serialize_and_desearilize_util.go +++ /dev/null @@ -1,68 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azblob - -import ( - "net/url" - "strings" -) - -func serializeBlobTagsToStrPtr(tagsMap map[string]string) *string { - if tagsMap == nil { - return nil - } - tags := make([]string, 0) - for key, val := range tagsMap { - tags = append(tags, url.QueryEscape(key)+"="+url.QueryEscape(val)) - } - //tags = tags[:len(tags)-1] - blobTagsString := strings.Join(tags, "&") - return &blobTagsString -} - -func serializeBlobTags(tagsMap map[string]string) *BlobTags { - if tagsMap == nil { - return nil - } - blobTagSet := make([]*BlobTag, 0) - for key, val := range tagsMap { - newKey, newVal := key, val - blobTagSet = append(blobTagSet, &BlobTag{Key: &newKey, Value: &newVal}) - } - return &BlobTags{BlobTagSet: blobTagSet} -} - -func deserializeORSPolicies(policies map[string]string) (objectReplicationPolicies []ObjectReplicationPolicy) { - if policies == nil { - return nil - } - // For source blobs (blobs that have policy ids and rule ids applied to them), - // the header will be formatted as "x-ms-or-_: {Complete, Failed}". - // The value of this header is the status of the replication. - orPolicyStatusHeader := make(map[string]string) - for key, value := range policies { - if strings.Contains(key, "or-") && key != "x-ms-or-policy-id" { - orPolicyStatusHeader[key] = value - } - } - - parsedResult := make(map[string][]ObjectReplicationRules) - for key, value := range orPolicyStatusHeader { - policyAndRuleIDs := strings.Split(strings.Split(key, "or-")[1], "_") - policyId, ruleId := policyAndRuleIDs[0], policyAndRuleIDs[1] - - parsedResult[policyId] = append(parsedResult[policyId], ObjectReplicationRules{RuleId: ruleId, Status: value}) - } - - for policyId, rules := range parsedResult { - objectReplicationPolicies = append(objectReplicationPolicies, ObjectReplicationPolicy{ - PolicyId: &policyId, - Rules: &rules, - }) - } - return -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zm_service_client_util.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zm_service_client_util.go deleted file mode 100644 index 747a94ee2451..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zm_service_client_util.go +++ /dev/null @@ -1,226 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azblob - -// --------------------------------------------------------------------------------------------------------------------- - -// ServiceGetAccountInfoOptions provides set of options for ServiceClient.GetAccountInfo -type ServiceGetAccountInfoOptions struct { - // placeholder for future options -} - -func (o *ServiceGetAccountInfoOptions) format() *serviceClientGetAccountInfoOptions { - return nil -} - -// ServiceGetAccountInfoResponse contains the response from ServiceClient.GetAccountInfo -type ServiceGetAccountInfoResponse struct { - serviceClientGetAccountInfoResponse -} - -func toServiceGetAccountInfoResponse(resp serviceClientGetAccountInfoResponse) ServiceGetAccountInfoResponse { - return ServiceGetAccountInfoResponse{resp} -} - -// --------------------------------------------------------------------------------------------------------------------- - -// ListContainersDetail indicates what additional information the service should return with each container. -type ListContainersDetail struct { - // Tells the service whether to return metadata for each container. - Metadata bool - - // Tells the service whether to return soft-deleted containers. - Deleted bool -} - -// string produces the `Include` query parameter's value. -func (o *ListContainersDetail) format() []ListContainersIncludeType { - if !o.Metadata && !o.Deleted { - return nil - } - - items := make([]ListContainersIncludeType, 0, 2) - // NOTE: Multiple strings MUST be appended in alphabetic order or signing the string for authentication fails! - if o.Deleted { - items = append(items, ListContainersIncludeTypeDeleted) - } - if o.Metadata { - items = append(items, ListContainersIncludeTypeMetadata) - } - return items -} - -// ListContainersOptions provides set of configurations for ListContainers operation -type ListContainersOptions struct { - Include ListContainersDetail - - // A string value that identifies the portion of the list of containers to be returned with the next listing operation. The - // operation returns the NextMarker value within the response body if the listing operation did not return all containers - // remaining to be listed with the current page. The NextMarker value can be used as the value for the marker parameter in - // a subsequent call to request the next page of list items. The marker value is opaque to the client. - Marker *string - - // Specifies the maximum number of containers to return. If the request does not specify max results, or specifies a value - // greater than 5000, the server will return up to 5000 items. Note that if the listing operation crosses a partition boundary, - // then the service will return a continuation token for retrieving the remainder of the results. For this reason, it is possible - // that the service will return fewer results than specified by max results, or than the default of 5000. - MaxResults *int32 - - // Filters the results to return only containers whose name begins with the specified prefix. - Prefix *string -} - -func (o *ListContainersOptions) format() *serviceClientListContainersSegmentOptions { - if o == nil { - return nil - } - - return &serviceClientListContainersSegmentOptions{ - Include: o.Include.format(), - Marker: o.Marker, - Maxresults: o.MaxResults, - Prefix: o.Prefix, - } -} - -// ServiceListContainersSegmentPager provides operations for iterating over paged responses. -type ServiceListContainersSegmentPager struct { - serviceClientListContainersSegmentPager -} - -func toServiceListContainersSegmentPager(resp serviceClientListContainersSegmentPager) *ServiceListContainersSegmentPager { - return &ServiceListContainersSegmentPager{resp} -} - -// --------------------------------------------------------------------------------------------------------------------- - -// ServiceGetPropertiesOptions provides set of options for ServiceClient.GetProperties -type ServiceGetPropertiesOptions struct { - // placeholder for future options -} - -func (o *ServiceGetPropertiesOptions) format() *serviceClientGetPropertiesOptions { - return nil -} - -// ServiceGetPropertiesResponse contains the response from ServiceClient.GetProperties -type ServiceGetPropertiesResponse struct { - serviceClientGetPropertiesResponse -} - -func toServiceGetPropertiesResponse(resp serviceClientGetPropertiesResponse) ServiceGetPropertiesResponse { - return ServiceGetPropertiesResponse{resp} -} - -// --------------------------------------------------------------------------------------------------------------------- - -// ServiceSetPropertiesOptions provides set of options for ServiceClient.SetProperties -type ServiceSetPropertiesOptions struct { - // The set of CORS rules. - Cors []*CorsRule - - // The default version to use for requests to the Blob service if an incoming request's version is not specified. Possible - // values include version 2008-10-27 and all more recent versions - DefaultServiceVersion *string - - // the retention policy which determines how long the associated data should persist - DeleteRetentionPolicy *RetentionPolicy - - // a summary of request statistics grouped by API in hour or minute aggregates for blobs - HourMetrics *Metrics - - // Azure Analytics Logging settings. - Logging *Logging - - // a summary of request statistics grouped by API in hour or minute aggregates for blobs - MinuteMetrics *Metrics - - // The properties that enable an account to host a static website - StaticWebsite *StaticWebsite -} - -func (o *ServiceSetPropertiesOptions) format() (StorageServiceProperties, *serviceClientSetPropertiesOptions) { - if o == nil { - return StorageServiceProperties{}, nil - } - - return StorageServiceProperties{ - Cors: o.Cors, - DefaultServiceVersion: o.DefaultServiceVersion, - DeleteRetentionPolicy: o.DeleteRetentionPolicy, - HourMetrics: o.HourMetrics, - Logging: o.Logging, - MinuteMetrics: o.MinuteMetrics, - StaticWebsite: o.StaticWebsite, - }, nil -} - -// ServiceSetPropertiesResponse contains the response from ServiceClient.SetProperties -type ServiceSetPropertiesResponse struct { - serviceClientSetPropertiesResponse -} - -func toServiceSetPropertiesResponse(resp serviceClientSetPropertiesResponse) ServiceSetPropertiesResponse { - return ServiceSetPropertiesResponse{resp} -} - -// --------------------------------------------------------------------------------------------------------------------- - -// ServiceGetStatisticsOptions provides set of options for ServiceClient.GetStatistics -type ServiceGetStatisticsOptions struct { - // placeholder for future options -} - -func (o *ServiceGetStatisticsOptions) format() *serviceClientGetStatisticsOptions { - return nil -} - -// ServiceGetStatisticsResponse contains the response from ServiceClient.GetStatistics. -type ServiceGetStatisticsResponse struct { - serviceClientGetStatisticsResponse -} - -func toServiceGetStatisticsResponse(resp serviceClientGetStatisticsResponse) ServiceGetStatisticsResponse { - return ServiceGetStatisticsResponse{resp} -} - -// --------------------------------------------------------------------------------------------------------------------- - -// ServiceFilterBlobsOptions provides set of configurations for ServiceClient.FindBlobsByTags -type ServiceFilterBlobsOptions struct { - // A string value that identifies the portion of the list of containers to be returned with the next listing operation. The operation returns the NextMarker - // value within the response body if the listing operation did not return all containers remaining to be listed with the current page. The NextMarker value - // can be used as the value for the marker parameter in a subsequent call to request the next page of list items. The marker value is opaque to the client. - Marker *string - // Specifies the maximum number of containers to return. If the request does not specify maxresults, or specifies a value greater than 5000, the server - // will return up to 5000 items. Note that if the listing operation crosses a partition boundary, then the service will return a continuation token for - // retrieving the remainder of the results. For this reason, it is possible that the service will return fewer results than specified by maxresults, or - // than the default of 5000. - MaxResults *int32 - // Filters the results to return only to return only blobs whose tags match the specified expression. - Where *string -} - -func (o *ServiceFilterBlobsOptions) pointer() *serviceClientFilterBlobsOptions { - if o == nil { - return nil - } - return &serviceClientFilterBlobsOptions{ - Marker: o.Marker, - Maxresults: o.MaxResults, - Where: o.Where, - } -} - -// ServiceFilterBlobsResponse contains the response from ServiceClient.FindBlobsByTags -type ServiceFilterBlobsResponse struct { - serviceClientFilterBlobsResponse -} - -func toServiceFilterBlobsResponse(resp serviceClientFilterBlobsResponse) ServiceFilterBlobsResponse { - return ServiceFilterBlobsResponse{resp} -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zz_generated_appendblob_client.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zz_generated_appendblob_client.go deleted file mode 100644 index ca5aac8cd746..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zz_generated_appendblob_client.go +++ /dev/null @@ -1,648 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -package azblob - -import ( - "context" - "encoding/base64" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime" - "io" - "net/http" - "strconv" - "time" -) - -type appendBlobClient struct { - endpoint string - pl runtime.Pipeline -} - -// newAppendBlobClient creates a new instance of appendBlobClient with the specified values. -// endpoint - The URL of the service account, container, or blob that is the target of the desired operation. -// pl - the pipeline used for sending requests and handling responses. -func newAppendBlobClient(endpoint string, pl runtime.Pipeline) *appendBlobClient { - client := &appendBlobClient{ - endpoint: endpoint, - pl: pl, - } - return client -} - -// AppendBlock - The Append Block operation commits a new block of data to the end of an existing append blob. The Append -// Block operation is permitted only if the blob was created with x-ms-blob-type set to -// AppendBlob. Append Block is supported only on version 2015-02-21 version or later. -// If the operation fails it returns an *azcore.ResponseError type. -// contentLength - The length of the request. -// body - Initial data -// appendBlobClientAppendBlockOptions - appendBlobClientAppendBlockOptions contains the optional parameters for the appendBlobClient.AppendBlock -// method. -// LeaseAccessConditions - LeaseAccessConditions contains a group of parameters for the containerClient.GetProperties method. -// AppendPositionAccessConditions - AppendPositionAccessConditions contains a group of parameters for the appendBlobClient.AppendBlock -// method. -// CpkInfo - CpkInfo contains a group of parameters for the blobClient.Download method. -// CpkScopeInfo - CpkScopeInfo contains a group of parameters for the blobClient.SetMetadata method. -// ModifiedAccessConditions - ModifiedAccessConditions contains a group of parameters for the containerClient.Delete method. -func (client *appendBlobClient) AppendBlock(ctx context.Context, contentLength int64, body io.ReadSeekCloser, appendBlobClientAppendBlockOptions *appendBlobClientAppendBlockOptions, leaseAccessConditions *LeaseAccessConditions, appendPositionAccessConditions *AppendPositionAccessConditions, cpkInfo *CpkInfo, cpkScopeInfo *CpkScopeInfo, modifiedAccessConditions *ModifiedAccessConditions) (appendBlobClientAppendBlockResponse, error) { - req, err := client.appendBlockCreateRequest(ctx, contentLength, body, appendBlobClientAppendBlockOptions, leaseAccessConditions, appendPositionAccessConditions, cpkInfo, cpkScopeInfo, modifiedAccessConditions) - if err != nil { - return appendBlobClientAppendBlockResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return appendBlobClientAppendBlockResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusCreated) { - return appendBlobClientAppendBlockResponse{}, runtime.NewResponseError(resp) - } - return client.appendBlockHandleResponse(resp) -} - -// appendBlockCreateRequest creates the AppendBlock request. -func (client *appendBlobClient) appendBlockCreateRequest(ctx context.Context, contentLength int64, body io.ReadSeekCloser, appendBlobClientAppendBlockOptions *appendBlobClientAppendBlockOptions, leaseAccessConditions *LeaseAccessConditions, appendPositionAccessConditions *AppendPositionAccessConditions, cpkInfo *CpkInfo, cpkScopeInfo *CpkScopeInfo, modifiedAccessConditions *ModifiedAccessConditions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodPut, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - reqQP.Set("comp", "appendblock") - if appendBlobClientAppendBlockOptions != nil && appendBlobClientAppendBlockOptions.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*appendBlobClientAppendBlockOptions.Timeout), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - req.Raw().Header.Set("Content-Length", strconv.FormatInt(contentLength, 10)) - if appendBlobClientAppendBlockOptions != nil && appendBlobClientAppendBlockOptions.TransactionalContentMD5 != nil { - req.Raw().Header.Set("Content-MD5", base64.StdEncoding.EncodeToString(appendBlobClientAppendBlockOptions.TransactionalContentMD5)) - } - if appendBlobClientAppendBlockOptions != nil && appendBlobClientAppendBlockOptions.TransactionalContentCRC64 != nil { - req.Raw().Header.Set("x-ms-content-crc64", base64.StdEncoding.EncodeToString(appendBlobClientAppendBlockOptions.TransactionalContentCRC64)) - } - if leaseAccessConditions != nil && leaseAccessConditions.LeaseID != nil { - req.Raw().Header.Set("x-ms-lease-id", *leaseAccessConditions.LeaseID) - } - if appendPositionAccessConditions != nil && appendPositionAccessConditions.MaxSize != nil { - req.Raw().Header.Set("x-ms-blob-condition-maxsize", strconv.FormatInt(*appendPositionAccessConditions.MaxSize, 10)) - } - if appendPositionAccessConditions != nil && appendPositionAccessConditions.AppendPosition != nil { - req.Raw().Header.Set("x-ms-blob-condition-appendpos", strconv.FormatInt(*appendPositionAccessConditions.AppendPosition, 10)) - } - if cpkInfo != nil && cpkInfo.EncryptionKey != nil { - req.Raw().Header.Set("x-ms-encryption-key", *cpkInfo.EncryptionKey) - } - if cpkInfo != nil && cpkInfo.EncryptionKeySHA256 != nil { - req.Raw().Header.Set("x-ms-encryption-key-sha256", *cpkInfo.EncryptionKeySHA256) - } - if cpkInfo != nil && cpkInfo.EncryptionAlgorithm != nil { - req.Raw().Header.Set("x-ms-encryption-algorithm", string(*cpkInfo.EncryptionAlgorithm)) - } - if cpkScopeInfo != nil && cpkScopeInfo.EncryptionScope != nil { - req.Raw().Header.Set("x-ms-encryption-scope", *cpkScopeInfo.EncryptionScope) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfModifiedSince != nil { - req.Raw().Header.Set("If-Modified-Since", modifiedAccessConditions.IfModifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfUnmodifiedSince != nil { - req.Raw().Header.Set("If-Unmodified-Since", modifiedAccessConditions.IfUnmodifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfMatch != nil { - req.Raw().Header.Set("If-Match", *modifiedAccessConditions.IfMatch) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfNoneMatch != nil { - req.Raw().Header.Set("If-None-Match", *modifiedAccessConditions.IfNoneMatch) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfTags != nil { - req.Raw().Header.Set("x-ms-if-tags", *modifiedAccessConditions.IfTags) - } - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if appendBlobClientAppendBlockOptions != nil && appendBlobClientAppendBlockOptions.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *appendBlobClientAppendBlockOptions.RequestID) - } - req.Raw().Header.Set("Accept", "application/xml") - return req, req.SetBody(body, "application/octet-stream") -} - -// appendBlockHandleResponse handles the AppendBlock response. -func (client *appendBlobClient) appendBlockHandleResponse(resp *http.Response) (appendBlobClientAppendBlockResponse, error) { - result := appendBlobClientAppendBlockResponse{RawResponse: resp} - if val := resp.Header.Get("ETag"); val != "" { - result.ETag = &val - } - if val := resp.Header.Get("Last-Modified"); val != "" { - lastModified, err := time.Parse(time.RFC1123, val) - if err != nil { - return appendBlobClientAppendBlockResponse{}, err - } - result.LastModified = &lastModified - } - if val := resp.Header.Get("Content-MD5"); val != "" { - contentMD5, err := base64.StdEncoding.DecodeString(val) - if err != nil { - return appendBlobClientAppendBlockResponse{}, err - } - result.ContentMD5 = contentMD5 - } - if val := resp.Header.Get("x-ms-content-crc64"); val != "" { - xMSContentCRC64, err := base64.StdEncoding.DecodeString(val) - if err != nil { - return appendBlobClientAppendBlockResponse{}, err - } - result.XMSContentCRC64 = xMSContentCRC64 - } - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return appendBlobClientAppendBlockResponse{}, err - } - result.Date = &date - } - if val := resp.Header.Get("x-ms-blob-append-offset"); val != "" { - result.BlobAppendOffset = &val - } - if val := resp.Header.Get("x-ms-blob-committed-block-count"); val != "" { - blobCommittedBlockCount32, err := strconv.ParseInt(val, 10, 32) - blobCommittedBlockCount := int32(blobCommittedBlockCount32) - if err != nil { - return appendBlobClientAppendBlockResponse{}, err - } - result.BlobCommittedBlockCount = &blobCommittedBlockCount - } - if val := resp.Header.Get("x-ms-request-server-encrypted"); val != "" { - isServerEncrypted, err := strconv.ParseBool(val) - if err != nil { - return appendBlobClientAppendBlockResponse{}, err - } - result.IsServerEncrypted = &isServerEncrypted - } - if val := resp.Header.Get("x-ms-encryption-key-sha256"); val != "" { - result.EncryptionKeySHA256 = &val - } - if val := resp.Header.Get("x-ms-encryption-scope"); val != "" { - result.EncryptionScope = &val - } - return result, nil -} - -// AppendBlockFromURL - The Append Block operation commits a new block of data to the end of an existing append blob where -// the contents are read from a source url. The Append Block operation is permitted only if the blob was -// created with x-ms-blob-type set to AppendBlob. Append Block is supported only on version 2015-02-21 version or later. -// If the operation fails it returns an *azcore.ResponseError type. -// sourceURL - Specify a URL to the copy source. -// contentLength - The length of the request. -// appendBlobClientAppendBlockFromURLOptions - appendBlobClientAppendBlockFromURLOptions contains the optional parameters -// for the appendBlobClient.AppendBlockFromURL method. -// CpkInfo - CpkInfo contains a group of parameters for the blobClient.Download method. -// CpkScopeInfo - CpkScopeInfo contains a group of parameters for the blobClient.SetMetadata method. -// LeaseAccessConditions - LeaseAccessConditions contains a group of parameters for the containerClient.GetProperties method. -// AppendPositionAccessConditions - AppendPositionAccessConditions contains a group of parameters for the appendBlobClient.AppendBlock -// method. -// ModifiedAccessConditions - ModifiedAccessConditions contains a group of parameters for the containerClient.Delete method. -// SourceModifiedAccessConditions - SourceModifiedAccessConditions contains a group of parameters for the blobClient.StartCopyFromURL -// method. -func (client *appendBlobClient) AppendBlockFromURL(ctx context.Context, sourceURL string, contentLength int64, appendBlobClientAppendBlockFromURLOptions *appendBlobClientAppendBlockFromURLOptions, cpkInfo *CpkInfo, cpkScopeInfo *CpkScopeInfo, leaseAccessConditions *LeaseAccessConditions, appendPositionAccessConditions *AppendPositionAccessConditions, modifiedAccessConditions *ModifiedAccessConditions, sourceModifiedAccessConditions *SourceModifiedAccessConditions) (appendBlobClientAppendBlockFromURLResponse, error) { - req, err := client.appendBlockFromURLCreateRequest(ctx, sourceURL, contentLength, appendBlobClientAppendBlockFromURLOptions, cpkInfo, cpkScopeInfo, leaseAccessConditions, appendPositionAccessConditions, modifiedAccessConditions, sourceModifiedAccessConditions) - if err != nil { - return appendBlobClientAppendBlockFromURLResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return appendBlobClientAppendBlockFromURLResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusCreated) { - return appendBlobClientAppendBlockFromURLResponse{}, runtime.NewResponseError(resp) - } - return client.appendBlockFromURLHandleResponse(resp) -} - -// appendBlockFromURLCreateRequest creates the AppendBlockFromURL request. -func (client *appendBlobClient) appendBlockFromURLCreateRequest(ctx context.Context, sourceURL string, contentLength int64, appendBlobClientAppendBlockFromURLOptions *appendBlobClientAppendBlockFromURLOptions, cpkInfo *CpkInfo, cpkScopeInfo *CpkScopeInfo, leaseAccessConditions *LeaseAccessConditions, appendPositionAccessConditions *AppendPositionAccessConditions, modifiedAccessConditions *ModifiedAccessConditions, sourceModifiedAccessConditions *SourceModifiedAccessConditions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodPut, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - reqQP.Set("comp", "appendblock") - if appendBlobClientAppendBlockFromURLOptions != nil && appendBlobClientAppendBlockFromURLOptions.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*appendBlobClientAppendBlockFromURLOptions.Timeout), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - req.Raw().Header.Set("x-ms-copy-source", sourceURL) - if appendBlobClientAppendBlockFromURLOptions != nil && appendBlobClientAppendBlockFromURLOptions.SourceRange != nil { - req.Raw().Header.Set("x-ms-source-range", *appendBlobClientAppendBlockFromURLOptions.SourceRange) - } - if appendBlobClientAppendBlockFromURLOptions != nil && appendBlobClientAppendBlockFromURLOptions.SourceContentMD5 != nil { - req.Raw().Header.Set("x-ms-source-content-md5", base64.StdEncoding.EncodeToString(appendBlobClientAppendBlockFromURLOptions.SourceContentMD5)) - } - if appendBlobClientAppendBlockFromURLOptions != nil && appendBlobClientAppendBlockFromURLOptions.SourceContentcrc64 != nil { - req.Raw().Header.Set("x-ms-source-content-crc64", base64.StdEncoding.EncodeToString(appendBlobClientAppendBlockFromURLOptions.SourceContentcrc64)) - } - req.Raw().Header.Set("Content-Length", strconv.FormatInt(contentLength, 10)) - if appendBlobClientAppendBlockFromURLOptions != nil && appendBlobClientAppendBlockFromURLOptions.TransactionalContentMD5 != nil { - req.Raw().Header.Set("Content-MD5", base64.StdEncoding.EncodeToString(appendBlobClientAppendBlockFromURLOptions.TransactionalContentMD5)) - } - if cpkInfo != nil && cpkInfo.EncryptionKey != nil { - req.Raw().Header.Set("x-ms-encryption-key", *cpkInfo.EncryptionKey) - } - if cpkInfo != nil && cpkInfo.EncryptionKeySHA256 != nil { - req.Raw().Header.Set("x-ms-encryption-key-sha256", *cpkInfo.EncryptionKeySHA256) - } - if cpkInfo != nil && cpkInfo.EncryptionAlgorithm != nil { - req.Raw().Header.Set("x-ms-encryption-algorithm", string(*cpkInfo.EncryptionAlgorithm)) - } - if cpkScopeInfo != nil && cpkScopeInfo.EncryptionScope != nil { - req.Raw().Header.Set("x-ms-encryption-scope", *cpkScopeInfo.EncryptionScope) - } - if leaseAccessConditions != nil && leaseAccessConditions.LeaseID != nil { - req.Raw().Header.Set("x-ms-lease-id", *leaseAccessConditions.LeaseID) - } - if appendPositionAccessConditions != nil && appendPositionAccessConditions.MaxSize != nil { - req.Raw().Header.Set("x-ms-blob-condition-maxsize", strconv.FormatInt(*appendPositionAccessConditions.MaxSize, 10)) - } - if appendPositionAccessConditions != nil && appendPositionAccessConditions.AppendPosition != nil { - req.Raw().Header.Set("x-ms-blob-condition-appendpos", strconv.FormatInt(*appendPositionAccessConditions.AppendPosition, 10)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfModifiedSince != nil { - req.Raw().Header.Set("If-Modified-Since", modifiedAccessConditions.IfModifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfUnmodifiedSince != nil { - req.Raw().Header.Set("If-Unmodified-Since", modifiedAccessConditions.IfUnmodifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfMatch != nil { - req.Raw().Header.Set("If-Match", *modifiedAccessConditions.IfMatch) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfNoneMatch != nil { - req.Raw().Header.Set("If-None-Match", *modifiedAccessConditions.IfNoneMatch) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfTags != nil { - req.Raw().Header.Set("x-ms-if-tags", *modifiedAccessConditions.IfTags) - } - if sourceModifiedAccessConditions != nil && sourceModifiedAccessConditions.SourceIfModifiedSince != nil { - req.Raw().Header.Set("x-ms-source-if-modified-since", sourceModifiedAccessConditions.SourceIfModifiedSince.Format(time.RFC1123)) - } - if sourceModifiedAccessConditions != nil && sourceModifiedAccessConditions.SourceIfUnmodifiedSince != nil { - req.Raw().Header.Set("x-ms-source-if-unmodified-since", sourceModifiedAccessConditions.SourceIfUnmodifiedSince.Format(time.RFC1123)) - } - if sourceModifiedAccessConditions != nil && sourceModifiedAccessConditions.SourceIfMatch != nil { - req.Raw().Header.Set("x-ms-source-if-match", *sourceModifiedAccessConditions.SourceIfMatch) - } - if sourceModifiedAccessConditions != nil && sourceModifiedAccessConditions.SourceIfNoneMatch != nil { - req.Raw().Header.Set("x-ms-source-if-none-match", *sourceModifiedAccessConditions.SourceIfNoneMatch) - } - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if appendBlobClientAppendBlockFromURLOptions != nil && appendBlobClientAppendBlockFromURLOptions.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *appendBlobClientAppendBlockFromURLOptions.RequestID) - } - if appendBlobClientAppendBlockFromURLOptions != nil && appendBlobClientAppendBlockFromURLOptions.CopySourceAuthorization != nil { - req.Raw().Header.Set("x-ms-copy-source-authorization", *appendBlobClientAppendBlockFromURLOptions.CopySourceAuthorization) - } - req.Raw().Header.Set("Accept", "application/xml") - return req, nil -} - -// appendBlockFromURLHandleResponse handles the AppendBlockFromURL response. -func (client *appendBlobClient) appendBlockFromURLHandleResponse(resp *http.Response) (appendBlobClientAppendBlockFromURLResponse, error) { - result := appendBlobClientAppendBlockFromURLResponse{RawResponse: resp} - if val := resp.Header.Get("ETag"); val != "" { - result.ETag = &val - } - if val := resp.Header.Get("Last-Modified"); val != "" { - lastModified, err := time.Parse(time.RFC1123, val) - if err != nil { - return appendBlobClientAppendBlockFromURLResponse{}, err - } - result.LastModified = &lastModified - } - if val := resp.Header.Get("Content-MD5"); val != "" { - contentMD5, err := base64.StdEncoding.DecodeString(val) - if err != nil { - return appendBlobClientAppendBlockFromURLResponse{}, err - } - result.ContentMD5 = contentMD5 - } - if val := resp.Header.Get("x-ms-content-crc64"); val != "" { - xMSContentCRC64, err := base64.StdEncoding.DecodeString(val) - if err != nil { - return appendBlobClientAppendBlockFromURLResponse{}, err - } - result.XMSContentCRC64 = xMSContentCRC64 - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return appendBlobClientAppendBlockFromURLResponse{}, err - } - result.Date = &date - } - if val := resp.Header.Get("x-ms-blob-append-offset"); val != "" { - result.BlobAppendOffset = &val - } - if val := resp.Header.Get("x-ms-blob-committed-block-count"); val != "" { - blobCommittedBlockCount32, err := strconv.ParseInt(val, 10, 32) - blobCommittedBlockCount := int32(blobCommittedBlockCount32) - if err != nil { - return appendBlobClientAppendBlockFromURLResponse{}, err - } - result.BlobCommittedBlockCount = &blobCommittedBlockCount - } - if val := resp.Header.Get("x-ms-encryption-key-sha256"); val != "" { - result.EncryptionKeySHA256 = &val - } - if val := resp.Header.Get("x-ms-encryption-scope"); val != "" { - result.EncryptionScope = &val - } - if val := resp.Header.Get("x-ms-request-server-encrypted"); val != "" { - isServerEncrypted, err := strconv.ParseBool(val) - if err != nil { - return appendBlobClientAppendBlockFromURLResponse{}, err - } - result.IsServerEncrypted = &isServerEncrypted - } - return result, nil -} - -// Create - The Create Append Blob operation creates a new append blob. -// If the operation fails it returns an *azcore.ResponseError type. -// contentLength - The length of the request. -// appendBlobClientCreateOptions - appendBlobClientCreateOptions contains the optional parameters for the appendBlobClient.Create -// method. -// BlobHTTPHeaders - BlobHTTPHeaders contains a group of parameters for the blobClient.SetHTTPHeaders method. -// LeaseAccessConditions - LeaseAccessConditions contains a group of parameters for the containerClient.GetProperties method. -// CpkInfo - CpkInfo contains a group of parameters for the blobClient.Download method. -// CpkScopeInfo - CpkScopeInfo contains a group of parameters for the blobClient.SetMetadata method. -// ModifiedAccessConditions - ModifiedAccessConditions contains a group of parameters for the containerClient.Delete method. -func (client *appendBlobClient) Create(ctx context.Context, contentLength int64, appendBlobClientCreateOptions *appendBlobClientCreateOptions, blobHTTPHeaders *BlobHTTPHeaders, leaseAccessConditions *LeaseAccessConditions, cpkInfo *CpkInfo, cpkScopeInfo *CpkScopeInfo, modifiedAccessConditions *ModifiedAccessConditions) (appendBlobClientCreateResponse, error) { - req, err := client.createCreateRequest(ctx, contentLength, appendBlobClientCreateOptions, blobHTTPHeaders, leaseAccessConditions, cpkInfo, cpkScopeInfo, modifiedAccessConditions) - if err != nil { - return appendBlobClientCreateResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return appendBlobClientCreateResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusCreated) { - return appendBlobClientCreateResponse{}, runtime.NewResponseError(resp) - } - return client.createHandleResponse(resp) -} - -// createCreateRequest creates the Create request. -func (client *appendBlobClient) createCreateRequest(ctx context.Context, contentLength int64, appendBlobClientCreateOptions *appendBlobClientCreateOptions, blobHTTPHeaders *BlobHTTPHeaders, leaseAccessConditions *LeaseAccessConditions, cpkInfo *CpkInfo, cpkScopeInfo *CpkScopeInfo, modifiedAccessConditions *ModifiedAccessConditions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodPut, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - if appendBlobClientCreateOptions != nil && appendBlobClientCreateOptions.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*appendBlobClientCreateOptions.Timeout), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - req.Raw().Header.Set("x-ms-blob-type", "AppendBlob") - req.Raw().Header.Set("Content-Length", strconv.FormatInt(contentLength, 10)) - if blobHTTPHeaders != nil && blobHTTPHeaders.BlobContentType != nil { - req.Raw().Header.Set("x-ms-blob-content-type", *blobHTTPHeaders.BlobContentType) - } - if blobHTTPHeaders != nil && blobHTTPHeaders.BlobContentEncoding != nil { - req.Raw().Header.Set("x-ms-blob-content-encoding", *blobHTTPHeaders.BlobContentEncoding) - } - if blobHTTPHeaders != nil && blobHTTPHeaders.BlobContentLanguage != nil { - req.Raw().Header.Set("x-ms-blob-content-language", *blobHTTPHeaders.BlobContentLanguage) - } - if blobHTTPHeaders != nil && blobHTTPHeaders.BlobContentMD5 != nil { - req.Raw().Header.Set("x-ms-blob-content-md5", base64.StdEncoding.EncodeToString(blobHTTPHeaders.BlobContentMD5)) - } - if blobHTTPHeaders != nil && blobHTTPHeaders.BlobCacheControl != nil { - req.Raw().Header.Set("x-ms-blob-cache-control", *blobHTTPHeaders.BlobCacheControl) - } - if appendBlobClientCreateOptions != nil && appendBlobClientCreateOptions.Metadata != nil { - for k, v := range appendBlobClientCreateOptions.Metadata { - req.Raw().Header.Set("x-ms-meta-"+k, v) - } - } - if leaseAccessConditions != nil && leaseAccessConditions.LeaseID != nil { - req.Raw().Header.Set("x-ms-lease-id", *leaseAccessConditions.LeaseID) - } - if blobHTTPHeaders != nil && blobHTTPHeaders.BlobContentDisposition != nil { - req.Raw().Header.Set("x-ms-blob-content-disposition", *blobHTTPHeaders.BlobContentDisposition) - } - if cpkInfo != nil && cpkInfo.EncryptionKey != nil { - req.Raw().Header.Set("x-ms-encryption-key", *cpkInfo.EncryptionKey) - } - if cpkInfo != nil && cpkInfo.EncryptionKeySHA256 != nil { - req.Raw().Header.Set("x-ms-encryption-key-sha256", *cpkInfo.EncryptionKeySHA256) - } - if cpkInfo != nil && cpkInfo.EncryptionAlgorithm != nil { - req.Raw().Header.Set("x-ms-encryption-algorithm", string(*cpkInfo.EncryptionAlgorithm)) - } - if cpkScopeInfo != nil && cpkScopeInfo.EncryptionScope != nil { - req.Raw().Header.Set("x-ms-encryption-scope", *cpkScopeInfo.EncryptionScope) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfModifiedSince != nil { - req.Raw().Header.Set("If-Modified-Since", modifiedAccessConditions.IfModifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfUnmodifiedSince != nil { - req.Raw().Header.Set("If-Unmodified-Since", modifiedAccessConditions.IfUnmodifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfMatch != nil { - req.Raw().Header.Set("If-Match", *modifiedAccessConditions.IfMatch) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfNoneMatch != nil { - req.Raw().Header.Set("If-None-Match", *modifiedAccessConditions.IfNoneMatch) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfTags != nil { - req.Raw().Header.Set("x-ms-if-tags", *modifiedAccessConditions.IfTags) - } - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if appendBlobClientCreateOptions != nil && appendBlobClientCreateOptions.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *appendBlobClientCreateOptions.RequestID) - } - if appendBlobClientCreateOptions != nil && appendBlobClientCreateOptions.BlobTagsString != nil { - req.Raw().Header.Set("x-ms-tags", *appendBlobClientCreateOptions.BlobTagsString) - } - if appendBlobClientCreateOptions != nil && appendBlobClientCreateOptions.ImmutabilityPolicyExpiry != nil { - req.Raw().Header.Set("x-ms-immutability-policy-until-date", appendBlobClientCreateOptions.ImmutabilityPolicyExpiry.Format(time.RFC1123)) - } - if appendBlobClientCreateOptions != nil && appendBlobClientCreateOptions.ImmutabilityPolicyMode != nil { - req.Raw().Header.Set("x-ms-immutability-policy-mode", string(*appendBlobClientCreateOptions.ImmutabilityPolicyMode)) - } - if appendBlobClientCreateOptions != nil && appendBlobClientCreateOptions.LegalHold != nil { - req.Raw().Header.Set("x-ms-legal-hold", strconv.FormatBool(*appendBlobClientCreateOptions.LegalHold)) - } - req.Raw().Header.Set("Accept", "application/xml") - return req, nil -} - -// createHandleResponse handles the Create response. -func (client *appendBlobClient) createHandleResponse(resp *http.Response) (appendBlobClientCreateResponse, error) { - result := appendBlobClientCreateResponse{RawResponse: resp} - if val := resp.Header.Get("ETag"); val != "" { - result.ETag = &val - } - if val := resp.Header.Get("Last-Modified"); val != "" { - lastModified, err := time.Parse(time.RFC1123, val) - if err != nil { - return appendBlobClientCreateResponse{}, err - } - result.LastModified = &lastModified - } - if val := resp.Header.Get("Content-MD5"); val != "" { - contentMD5, err := base64.StdEncoding.DecodeString(val) - if err != nil { - return appendBlobClientCreateResponse{}, err - } - result.ContentMD5 = contentMD5 - } - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("x-ms-version-id"); val != "" { - result.VersionID = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return appendBlobClientCreateResponse{}, err - } - result.Date = &date - } - if val := resp.Header.Get("x-ms-request-server-encrypted"); val != "" { - isServerEncrypted, err := strconv.ParseBool(val) - if err != nil { - return appendBlobClientCreateResponse{}, err - } - result.IsServerEncrypted = &isServerEncrypted - } - if val := resp.Header.Get("x-ms-encryption-key-sha256"); val != "" { - result.EncryptionKeySHA256 = &val - } - if val := resp.Header.Get("x-ms-encryption-scope"); val != "" { - result.EncryptionScope = &val - } - return result, nil -} - -// Seal - The Seal operation seals the Append Blob to make it read-only. Seal is supported only on version 2019-12-12 version -// or later. -// If the operation fails it returns an *azcore.ResponseError type. -// appendBlobClientSealOptions - appendBlobClientSealOptions contains the optional parameters for the appendBlobClient.Seal -// method. -// LeaseAccessConditions - LeaseAccessConditions contains a group of parameters for the containerClient.GetProperties method. -// ModifiedAccessConditions - ModifiedAccessConditions contains a group of parameters for the containerClient.Delete method. -// AppendPositionAccessConditions - AppendPositionAccessConditions contains a group of parameters for the appendBlobClient.AppendBlock -// method. -func (client *appendBlobClient) Seal(ctx context.Context, appendBlobClientSealOptions *appendBlobClientSealOptions, leaseAccessConditions *LeaseAccessConditions, modifiedAccessConditions *ModifiedAccessConditions, appendPositionAccessConditions *AppendPositionAccessConditions) (appendBlobClientSealResponse, error) { - req, err := client.sealCreateRequest(ctx, appendBlobClientSealOptions, leaseAccessConditions, modifiedAccessConditions, appendPositionAccessConditions) - if err != nil { - return appendBlobClientSealResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return appendBlobClientSealResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusOK) { - return appendBlobClientSealResponse{}, runtime.NewResponseError(resp) - } - return client.sealHandleResponse(resp) -} - -// sealCreateRequest creates the Seal request. -func (client *appendBlobClient) sealCreateRequest(ctx context.Context, appendBlobClientSealOptions *appendBlobClientSealOptions, leaseAccessConditions *LeaseAccessConditions, modifiedAccessConditions *ModifiedAccessConditions, appendPositionAccessConditions *AppendPositionAccessConditions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodPut, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - reqQP.Set("comp", "seal") - if appendBlobClientSealOptions != nil && appendBlobClientSealOptions.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*appendBlobClientSealOptions.Timeout), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if appendBlobClientSealOptions != nil && appendBlobClientSealOptions.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *appendBlobClientSealOptions.RequestID) - } - if leaseAccessConditions != nil && leaseAccessConditions.LeaseID != nil { - req.Raw().Header.Set("x-ms-lease-id", *leaseAccessConditions.LeaseID) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfModifiedSince != nil { - req.Raw().Header.Set("If-Modified-Since", modifiedAccessConditions.IfModifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfUnmodifiedSince != nil { - req.Raw().Header.Set("If-Unmodified-Since", modifiedAccessConditions.IfUnmodifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfMatch != nil { - req.Raw().Header.Set("If-Match", *modifiedAccessConditions.IfMatch) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfNoneMatch != nil { - req.Raw().Header.Set("If-None-Match", *modifiedAccessConditions.IfNoneMatch) - } - if appendPositionAccessConditions != nil && appendPositionAccessConditions.AppendPosition != nil { - req.Raw().Header.Set("x-ms-blob-condition-appendpos", strconv.FormatInt(*appendPositionAccessConditions.AppendPosition, 10)) - } - req.Raw().Header.Set("Accept", "application/xml") - return req, nil -} - -// sealHandleResponse handles the Seal response. -func (client *appendBlobClient) sealHandleResponse(resp *http.Response) (appendBlobClientSealResponse, error) { - result := appendBlobClientSealResponse{RawResponse: resp} - if val := resp.Header.Get("ETag"); val != "" { - result.ETag = &val - } - if val := resp.Header.Get("Last-Modified"); val != "" { - lastModified, err := time.Parse(time.RFC1123, val) - if err != nil { - return appendBlobClientSealResponse{}, err - } - result.LastModified = &lastModified - } - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return appendBlobClientSealResponse{}, err - } - result.Date = &date - } - if val := resp.Header.Get("x-ms-blob-sealed"); val != "" { - isSealed, err := strconv.ParseBool(val) - if err != nil { - return appendBlobClientSealResponse{}, err - } - result.IsSealed = &isSealed - } - return result, nil -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zz_generated_blob_client.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zz_generated_blob_client.go deleted file mode 100644 index 607c6a714dc9..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zz_generated_blob_client.go +++ /dev/null @@ -1,2831 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -package azblob - -import ( - "context" - "encoding/base64" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime" - "net/http" - "strconv" - "strings" - "time" -) - -type blobClient struct { - endpoint string - pl runtime.Pipeline -} - -// newBlobClient creates a new instance of blobClient with the specified values. -// endpoint - The URL of the service account, container, or blob that is the target of the desired operation. -// pl - the pipeline used for sending requests and handling responses. -func newBlobClient(endpoint string, pl runtime.Pipeline) *blobClient { - client := &blobClient{ - endpoint: endpoint, - pl: pl, - } - return client -} - -// AbortCopyFromURL - The Abort Copy From URL operation aborts a pending Copy From URL operation, and leaves a destination -// blob with zero length and full metadata. -// If the operation fails it returns an *azcore.ResponseError type. -// copyID - The copy identifier provided in the x-ms-copy-id header of the original Copy Blob operation. -// blobClientAbortCopyFromURLOptions - blobClientAbortCopyFromURLOptions contains the optional parameters for the blobClient.AbortCopyFromURL -// method. -// LeaseAccessConditions - LeaseAccessConditions contains a group of parameters for the containerClient.GetProperties method. -func (client *blobClient) AbortCopyFromURL(ctx context.Context, copyID string, blobClientAbortCopyFromURLOptions *blobClientAbortCopyFromURLOptions, leaseAccessConditions *LeaseAccessConditions) (blobClientAbortCopyFromURLResponse, error) { - req, err := client.abortCopyFromURLCreateRequest(ctx, copyID, blobClientAbortCopyFromURLOptions, leaseAccessConditions) - if err != nil { - return blobClientAbortCopyFromURLResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return blobClientAbortCopyFromURLResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusNoContent) { - return blobClientAbortCopyFromURLResponse{}, runtime.NewResponseError(resp) - } - return client.abortCopyFromURLHandleResponse(resp) -} - -// abortCopyFromURLCreateRequest creates the AbortCopyFromURL request. -func (client *blobClient) abortCopyFromURLCreateRequest(ctx context.Context, copyID string, blobClientAbortCopyFromURLOptions *blobClientAbortCopyFromURLOptions, leaseAccessConditions *LeaseAccessConditions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodPut, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - reqQP.Set("comp", "copy") - reqQP.Set("copyid", copyID) - if blobClientAbortCopyFromURLOptions != nil && blobClientAbortCopyFromURLOptions.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*blobClientAbortCopyFromURLOptions.Timeout), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - req.Raw().Header.Set("x-ms-copy-action", "abort") - if leaseAccessConditions != nil && leaseAccessConditions.LeaseID != nil { - req.Raw().Header.Set("x-ms-lease-id", *leaseAccessConditions.LeaseID) - } - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if blobClientAbortCopyFromURLOptions != nil && blobClientAbortCopyFromURLOptions.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *blobClientAbortCopyFromURLOptions.RequestID) - } - req.Raw().Header.Set("Accept", "application/xml") - return req, nil -} - -// abortCopyFromURLHandleResponse handles the AbortCopyFromURL response. -func (client *blobClient) abortCopyFromURLHandleResponse(resp *http.Response) (blobClientAbortCopyFromURLResponse, error) { - result := blobClientAbortCopyFromURLResponse{RawResponse: resp} - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return blobClientAbortCopyFromURLResponse{}, err - } - result.Date = &date - } - return result, nil -} - -// AcquireLease - [Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete operations -// If the operation fails it returns an *azcore.ResponseError type. -// blobClientAcquireLeaseOptions - blobClientAcquireLeaseOptions contains the optional parameters for the blobClient.AcquireLease -// method. -// ModifiedAccessConditions - ModifiedAccessConditions contains a group of parameters for the containerClient.Delete method. -func (client *blobClient) AcquireLease(ctx context.Context, blobClientAcquireLeaseOptions *blobClientAcquireLeaseOptions, modifiedAccessConditions *ModifiedAccessConditions) (blobClientAcquireLeaseResponse, error) { - req, err := client.acquireLeaseCreateRequest(ctx, blobClientAcquireLeaseOptions, modifiedAccessConditions) - if err != nil { - return blobClientAcquireLeaseResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return blobClientAcquireLeaseResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusCreated) { - return blobClientAcquireLeaseResponse{}, runtime.NewResponseError(resp) - } - return client.acquireLeaseHandleResponse(resp) -} - -// acquireLeaseCreateRequest creates the AcquireLease request. -func (client *blobClient) acquireLeaseCreateRequest(ctx context.Context, blobClientAcquireLeaseOptions *blobClientAcquireLeaseOptions, modifiedAccessConditions *ModifiedAccessConditions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodPut, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - reqQP.Set("comp", "lease") - if blobClientAcquireLeaseOptions != nil && blobClientAcquireLeaseOptions.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*blobClientAcquireLeaseOptions.Timeout), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - req.Raw().Header.Set("x-ms-lease-action", "acquire") - if blobClientAcquireLeaseOptions != nil && blobClientAcquireLeaseOptions.Duration != nil { - req.Raw().Header.Set("x-ms-lease-duration", strconv.FormatInt(int64(*blobClientAcquireLeaseOptions.Duration), 10)) - } - if blobClientAcquireLeaseOptions != nil && blobClientAcquireLeaseOptions.ProposedLeaseID != nil { - req.Raw().Header.Set("x-ms-proposed-lease-id", *blobClientAcquireLeaseOptions.ProposedLeaseID) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfModifiedSince != nil { - req.Raw().Header.Set("If-Modified-Since", modifiedAccessConditions.IfModifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfUnmodifiedSince != nil { - req.Raw().Header.Set("If-Unmodified-Since", modifiedAccessConditions.IfUnmodifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfMatch != nil { - req.Raw().Header.Set("If-Match", *modifiedAccessConditions.IfMatch) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfNoneMatch != nil { - req.Raw().Header.Set("If-None-Match", *modifiedAccessConditions.IfNoneMatch) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfTags != nil { - req.Raw().Header.Set("x-ms-if-tags", *modifiedAccessConditions.IfTags) - } - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if blobClientAcquireLeaseOptions != nil && blobClientAcquireLeaseOptions.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *blobClientAcquireLeaseOptions.RequestID) - } - req.Raw().Header.Set("Accept", "application/xml") - return req, nil -} - -// acquireLeaseHandleResponse handles the AcquireLease response. -func (client *blobClient) acquireLeaseHandleResponse(resp *http.Response) (blobClientAcquireLeaseResponse, error) { - result := blobClientAcquireLeaseResponse{RawResponse: resp} - if val := resp.Header.Get("ETag"); val != "" { - result.ETag = &val - } - if val := resp.Header.Get("Last-Modified"); val != "" { - lastModified, err := time.Parse(time.RFC1123, val) - if err != nil { - return blobClientAcquireLeaseResponse{}, err - } - result.LastModified = &lastModified - } - if val := resp.Header.Get("x-ms-lease-id"); val != "" { - result.LeaseID = &val - } - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return blobClientAcquireLeaseResponse{}, err - } - result.Date = &date - } - return result, nil -} - -// BreakLease - [Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete operations -// If the operation fails it returns an *azcore.ResponseError type. -// blobClientBreakLeaseOptions - blobClientBreakLeaseOptions contains the optional parameters for the blobClient.BreakLease -// method. -// ModifiedAccessConditions - ModifiedAccessConditions contains a group of parameters for the containerClient.Delete method. -func (client *blobClient) BreakLease(ctx context.Context, blobClientBreakLeaseOptions *blobClientBreakLeaseOptions, modifiedAccessConditions *ModifiedAccessConditions) (blobClientBreakLeaseResponse, error) { - req, err := client.breakLeaseCreateRequest(ctx, blobClientBreakLeaseOptions, modifiedAccessConditions) - if err != nil { - return blobClientBreakLeaseResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return blobClientBreakLeaseResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusAccepted) { - return blobClientBreakLeaseResponse{}, runtime.NewResponseError(resp) - } - return client.breakLeaseHandleResponse(resp) -} - -// breakLeaseCreateRequest creates the BreakLease request. -func (client *blobClient) breakLeaseCreateRequest(ctx context.Context, blobClientBreakLeaseOptions *blobClientBreakLeaseOptions, modifiedAccessConditions *ModifiedAccessConditions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodPut, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - reqQP.Set("comp", "lease") - if blobClientBreakLeaseOptions != nil && blobClientBreakLeaseOptions.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*blobClientBreakLeaseOptions.Timeout), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - req.Raw().Header.Set("x-ms-lease-action", "break") - if blobClientBreakLeaseOptions != nil && blobClientBreakLeaseOptions.BreakPeriod != nil { - req.Raw().Header.Set("x-ms-lease-break-period", strconv.FormatInt(int64(*blobClientBreakLeaseOptions.BreakPeriod), 10)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfModifiedSince != nil { - req.Raw().Header.Set("If-Modified-Since", modifiedAccessConditions.IfModifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfUnmodifiedSince != nil { - req.Raw().Header.Set("If-Unmodified-Since", modifiedAccessConditions.IfUnmodifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfMatch != nil { - req.Raw().Header.Set("If-Match", *modifiedAccessConditions.IfMatch) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfNoneMatch != nil { - req.Raw().Header.Set("If-None-Match", *modifiedAccessConditions.IfNoneMatch) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfTags != nil { - req.Raw().Header.Set("x-ms-if-tags", *modifiedAccessConditions.IfTags) - } - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if blobClientBreakLeaseOptions != nil && blobClientBreakLeaseOptions.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *blobClientBreakLeaseOptions.RequestID) - } - req.Raw().Header.Set("Accept", "application/xml") - return req, nil -} - -// breakLeaseHandleResponse handles the BreakLease response. -func (client *blobClient) breakLeaseHandleResponse(resp *http.Response) (blobClientBreakLeaseResponse, error) { - result := blobClientBreakLeaseResponse{RawResponse: resp} - if val := resp.Header.Get("ETag"); val != "" { - result.ETag = &val - } - if val := resp.Header.Get("Last-Modified"); val != "" { - lastModified, err := time.Parse(time.RFC1123, val) - if err != nil { - return blobClientBreakLeaseResponse{}, err - } - result.LastModified = &lastModified - } - if val := resp.Header.Get("x-ms-lease-time"); val != "" { - leaseTime32, err := strconv.ParseInt(val, 10, 32) - leaseTime := int32(leaseTime32) - if err != nil { - return blobClientBreakLeaseResponse{}, err - } - result.LeaseTime = &leaseTime - } - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return blobClientBreakLeaseResponse{}, err - } - result.Date = &date - } - return result, nil -} - -// ChangeLease - [Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete operations -// If the operation fails it returns an *azcore.ResponseError type. -// leaseID - Specifies the current lease ID on the resource. -// proposedLeaseID - Proposed lease ID, in a GUID string format. The Blob service returns 400 (Invalid request) if the proposed -// lease ID is not in the correct format. See Guid Constructor (String) for a list of valid GUID -// string formats. -// blobClientChangeLeaseOptions - blobClientChangeLeaseOptions contains the optional parameters for the blobClient.ChangeLease -// method. -// ModifiedAccessConditions - ModifiedAccessConditions contains a group of parameters for the containerClient.Delete method. -func (client *blobClient) ChangeLease(ctx context.Context, leaseID string, proposedLeaseID string, blobClientChangeLeaseOptions *blobClientChangeLeaseOptions, modifiedAccessConditions *ModifiedAccessConditions) (blobClientChangeLeaseResponse, error) { - req, err := client.changeLeaseCreateRequest(ctx, leaseID, proposedLeaseID, blobClientChangeLeaseOptions, modifiedAccessConditions) - if err != nil { - return blobClientChangeLeaseResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return blobClientChangeLeaseResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusOK) { - return blobClientChangeLeaseResponse{}, runtime.NewResponseError(resp) - } - return client.changeLeaseHandleResponse(resp) -} - -// changeLeaseCreateRequest creates the ChangeLease request. -func (client *blobClient) changeLeaseCreateRequest(ctx context.Context, leaseID string, proposedLeaseID string, blobClientChangeLeaseOptions *blobClientChangeLeaseOptions, modifiedAccessConditions *ModifiedAccessConditions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodPut, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - reqQP.Set("comp", "lease") - if blobClientChangeLeaseOptions != nil && blobClientChangeLeaseOptions.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*blobClientChangeLeaseOptions.Timeout), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - req.Raw().Header.Set("x-ms-lease-action", "change") - req.Raw().Header.Set("x-ms-lease-id", leaseID) - req.Raw().Header.Set("x-ms-proposed-lease-id", proposedLeaseID) - if modifiedAccessConditions != nil && modifiedAccessConditions.IfModifiedSince != nil { - req.Raw().Header.Set("If-Modified-Since", modifiedAccessConditions.IfModifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfUnmodifiedSince != nil { - req.Raw().Header.Set("If-Unmodified-Since", modifiedAccessConditions.IfUnmodifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfMatch != nil { - req.Raw().Header.Set("If-Match", *modifiedAccessConditions.IfMatch) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfNoneMatch != nil { - req.Raw().Header.Set("If-None-Match", *modifiedAccessConditions.IfNoneMatch) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfTags != nil { - req.Raw().Header.Set("x-ms-if-tags", *modifiedAccessConditions.IfTags) - } - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if blobClientChangeLeaseOptions != nil && blobClientChangeLeaseOptions.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *blobClientChangeLeaseOptions.RequestID) - } - req.Raw().Header.Set("Accept", "application/xml") - return req, nil -} - -// changeLeaseHandleResponse handles the ChangeLease response. -func (client *blobClient) changeLeaseHandleResponse(resp *http.Response) (blobClientChangeLeaseResponse, error) { - result := blobClientChangeLeaseResponse{RawResponse: resp} - if val := resp.Header.Get("ETag"); val != "" { - result.ETag = &val - } - if val := resp.Header.Get("Last-Modified"); val != "" { - lastModified, err := time.Parse(time.RFC1123, val) - if err != nil { - return blobClientChangeLeaseResponse{}, err - } - result.LastModified = &lastModified - } - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-lease-id"); val != "" { - result.LeaseID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return blobClientChangeLeaseResponse{}, err - } - result.Date = &date - } - return result, nil -} - -// CopyFromURL - The Copy From URL operation copies a blob or an internet resource to a new blob. It will not return a response -// until the copy is complete. -// If the operation fails it returns an *azcore.ResponseError type. -// copySource - Specifies the name of the source page blob snapshot. This value is a URL of up to 2 KB in length that specifies -// a page blob snapshot. The value should be URL-encoded as it would appear in a request -// URI. The source blob must either be public or must be authenticated via a shared access signature. -// blobClientCopyFromURLOptions - blobClientCopyFromURLOptions contains the optional parameters for the blobClient.CopyFromURL -// method. -// SourceModifiedAccessConditions - SourceModifiedAccessConditions contains a group of parameters for the blobClient.StartCopyFromURL -// method. -// ModifiedAccessConditions - ModifiedAccessConditions contains a group of parameters for the containerClient.Delete method. -// LeaseAccessConditions - LeaseAccessConditions contains a group of parameters for the containerClient.GetProperties method. -func (client *blobClient) CopyFromURL(ctx context.Context, copySource string, blobClientCopyFromURLOptions *blobClientCopyFromURLOptions, sourceModifiedAccessConditions *SourceModifiedAccessConditions, modifiedAccessConditions *ModifiedAccessConditions, leaseAccessConditions *LeaseAccessConditions) (blobClientCopyFromURLResponse, error) { - req, err := client.copyFromURLCreateRequest(ctx, copySource, blobClientCopyFromURLOptions, sourceModifiedAccessConditions, modifiedAccessConditions, leaseAccessConditions) - if err != nil { - return blobClientCopyFromURLResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return blobClientCopyFromURLResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusAccepted) { - return blobClientCopyFromURLResponse{}, runtime.NewResponseError(resp) - } - return client.copyFromURLHandleResponse(resp) -} - -// copyFromURLCreateRequest creates the CopyFromURL request. -func (client *blobClient) copyFromURLCreateRequest(ctx context.Context, copySource string, blobClientCopyFromURLOptions *blobClientCopyFromURLOptions, sourceModifiedAccessConditions *SourceModifiedAccessConditions, modifiedAccessConditions *ModifiedAccessConditions, leaseAccessConditions *LeaseAccessConditions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodPut, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - if blobClientCopyFromURLOptions != nil && blobClientCopyFromURLOptions.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*blobClientCopyFromURLOptions.Timeout), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - req.Raw().Header.Set("x-ms-requires-sync", "true") - if blobClientCopyFromURLOptions != nil && blobClientCopyFromURLOptions.Metadata != nil { - for k, v := range blobClientCopyFromURLOptions.Metadata { - req.Raw().Header.Set("x-ms-meta-"+k, v) - } - } - if blobClientCopyFromURLOptions != nil && blobClientCopyFromURLOptions.Tier != nil { - req.Raw().Header.Set("x-ms-access-tier", string(*blobClientCopyFromURLOptions.Tier)) - } - if sourceModifiedAccessConditions != nil && sourceModifiedAccessConditions.SourceIfModifiedSince != nil { - req.Raw().Header.Set("x-ms-source-if-modified-since", sourceModifiedAccessConditions.SourceIfModifiedSince.Format(time.RFC1123)) - } - if sourceModifiedAccessConditions != nil && sourceModifiedAccessConditions.SourceIfUnmodifiedSince != nil { - req.Raw().Header.Set("x-ms-source-if-unmodified-since", sourceModifiedAccessConditions.SourceIfUnmodifiedSince.Format(time.RFC1123)) - } - if sourceModifiedAccessConditions != nil && sourceModifiedAccessConditions.SourceIfMatch != nil { - req.Raw().Header.Set("x-ms-source-if-match", *sourceModifiedAccessConditions.SourceIfMatch) - } - if sourceModifiedAccessConditions != nil && sourceModifiedAccessConditions.SourceIfNoneMatch != nil { - req.Raw().Header.Set("x-ms-source-if-none-match", *sourceModifiedAccessConditions.SourceIfNoneMatch) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfModifiedSince != nil { - req.Raw().Header.Set("If-Modified-Since", modifiedAccessConditions.IfModifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfUnmodifiedSince != nil { - req.Raw().Header.Set("If-Unmodified-Since", modifiedAccessConditions.IfUnmodifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfMatch != nil { - req.Raw().Header.Set("If-Match", *modifiedAccessConditions.IfMatch) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfNoneMatch != nil { - req.Raw().Header.Set("If-None-Match", *modifiedAccessConditions.IfNoneMatch) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfTags != nil { - req.Raw().Header.Set("x-ms-if-tags", *modifiedAccessConditions.IfTags) - } - req.Raw().Header.Set("x-ms-copy-source", copySource) - if leaseAccessConditions != nil && leaseAccessConditions.LeaseID != nil { - req.Raw().Header.Set("x-ms-lease-id", *leaseAccessConditions.LeaseID) - } - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if blobClientCopyFromURLOptions != nil && blobClientCopyFromURLOptions.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *blobClientCopyFromURLOptions.RequestID) - } - if blobClientCopyFromURLOptions != nil && blobClientCopyFromURLOptions.SourceContentMD5 != nil { - req.Raw().Header.Set("x-ms-source-content-md5", base64.StdEncoding.EncodeToString(blobClientCopyFromURLOptions.SourceContentMD5)) - } - if blobClientCopyFromURLOptions != nil && blobClientCopyFromURLOptions.BlobTagsString != nil { - req.Raw().Header.Set("x-ms-tags", *blobClientCopyFromURLOptions.BlobTagsString) - } - if blobClientCopyFromURLOptions != nil && blobClientCopyFromURLOptions.ImmutabilityPolicyExpiry != nil { - req.Raw().Header.Set("x-ms-immutability-policy-until-date", blobClientCopyFromURLOptions.ImmutabilityPolicyExpiry.Format(time.RFC1123)) - } - if blobClientCopyFromURLOptions != nil && blobClientCopyFromURLOptions.ImmutabilityPolicyMode != nil { - req.Raw().Header.Set("x-ms-immutability-policy-mode", string(*blobClientCopyFromURLOptions.ImmutabilityPolicyMode)) - } - if blobClientCopyFromURLOptions != nil && blobClientCopyFromURLOptions.LegalHold != nil { - req.Raw().Header.Set("x-ms-legal-hold", strconv.FormatBool(*blobClientCopyFromURLOptions.LegalHold)) - } - if blobClientCopyFromURLOptions != nil && blobClientCopyFromURLOptions.CopySourceAuthorization != nil { - req.Raw().Header.Set("x-ms-copy-source-authorization", *blobClientCopyFromURLOptions.CopySourceAuthorization) - } - req.Raw().Header.Set("Accept", "application/xml") - return req, nil -} - -// copyFromURLHandleResponse handles the CopyFromURL response. -func (client *blobClient) copyFromURLHandleResponse(resp *http.Response) (blobClientCopyFromURLResponse, error) { - result := blobClientCopyFromURLResponse{RawResponse: resp} - if val := resp.Header.Get("ETag"); val != "" { - result.ETag = &val - } - if val := resp.Header.Get("Last-Modified"); val != "" { - lastModified, err := time.Parse(time.RFC1123, val) - if err != nil { - return blobClientCopyFromURLResponse{}, err - } - result.LastModified = &lastModified - } - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("x-ms-version-id"); val != "" { - result.VersionID = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return blobClientCopyFromURLResponse{}, err - } - result.Date = &date - } - if val := resp.Header.Get("x-ms-copy-id"); val != "" { - result.CopyID = &val - } - if val := resp.Header.Get("x-ms-copy-status"); val != "" { - result.CopyStatus = &val - } - if val := resp.Header.Get("Content-MD5"); val != "" { - contentMD5, err := base64.StdEncoding.DecodeString(val) - if err != nil { - return blobClientCopyFromURLResponse{}, err - } - result.ContentMD5 = contentMD5 - } - if val := resp.Header.Get("x-ms-content-crc64"); val != "" { - xMSContentCRC64, err := base64.StdEncoding.DecodeString(val) - if err != nil { - return blobClientCopyFromURLResponse{}, err - } - result.XMSContentCRC64 = xMSContentCRC64 - } - return result, nil -} - -// CreateSnapshot - The Create Snapshot operation creates a read-only snapshot of a blob -// If the operation fails it returns an *azcore.ResponseError type. -// blobClientCreateSnapshotOptions - blobClientCreateSnapshotOptions contains the optional parameters for the blobClient.CreateSnapshot -// method. -// CpkInfo - CpkInfo contains a group of parameters for the blobClient.Download method. -// CpkScopeInfo - CpkScopeInfo contains a group of parameters for the blobClient.SetMetadata method. -// ModifiedAccessConditions - ModifiedAccessConditions contains a group of parameters for the containerClient.Delete method. -// LeaseAccessConditions - LeaseAccessConditions contains a group of parameters for the containerClient.GetProperties method. -func (client *blobClient) CreateSnapshot(ctx context.Context, blobClientCreateSnapshotOptions *blobClientCreateSnapshotOptions, cpkInfo *CpkInfo, cpkScopeInfo *CpkScopeInfo, modifiedAccessConditions *ModifiedAccessConditions, leaseAccessConditions *LeaseAccessConditions) (blobClientCreateSnapshotResponse, error) { - req, err := client.createSnapshotCreateRequest(ctx, blobClientCreateSnapshotOptions, cpkInfo, cpkScopeInfo, modifiedAccessConditions, leaseAccessConditions) - if err != nil { - return blobClientCreateSnapshotResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return blobClientCreateSnapshotResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusCreated) { - return blobClientCreateSnapshotResponse{}, runtime.NewResponseError(resp) - } - return client.createSnapshotHandleResponse(resp) -} - -// createSnapshotCreateRequest creates the CreateSnapshot request. -func (client *blobClient) createSnapshotCreateRequest(ctx context.Context, blobClientCreateSnapshotOptions *blobClientCreateSnapshotOptions, cpkInfo *CpkInfo, cpkScopeInfo *CpkScopeInfo, modifiedAccessConditions *ModifiedAccessConditions, leaseAccessConditions *LeaseAccessConditions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodPut, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - reqQP.Set("comp", "snapshot") - if blobClientCreateSnapshotOptions != nil && blobClientCreateSnapshotOptions.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*blobClientCreateSnapshotOptions.Timeout), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - if blobClientCreateSnapshotOptions != nil && blobClientCreateSnapshotOptions.Metadata != nil { - for k, v := range blobClientCreateSnapshotOptions.Metadata { - req.Raw().Header.Set("x-ms-meta-"+k, v) - } - } - if cpkInfo != nil && cpkInfo.EncryptionKey != nil { - req.Raw().Header.Set("x-ms-encryption-key", *cpkInfo.EncryptionKey) - } - if cpkInfo != nil && cpkInfo.EncryptionKeySHA256 != nil { - req.Raw().Header.Set("x-ms-encryption-key-sha256", *cpkInfo.EncryptionKeySHA256) - } - if cpkInfo != nil && cpkInfo.EncryptionAlgorithm != nil { - req.Raw().Header.Set("x-ms-encryption-algorithm", string(*cpkInfo.EncryptionAlgorithm)) - } - if cpkScopeInfo != nil && cpkScopeInfo.EncryptionScope != nil { - req.Raw().Header.Set("x-ms-encryption-scope", *cpkScopeInfo.EncryptionScope) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfModifiedSince != nil { - req.Raw().Header.Set("If-Modified-Since", modifiedAccessConditions.IfModifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfUnmodifiedSince != nil { - req.Raw().Header.Set("If-Unmodified-Since", modifiedAccessConditions.IfUnmodifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfMatch != nil { - req.Raw().Header.Set("If-Match", *modifiedAccessConditions.IfMatch) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfNoneMatch != nil { - req.Raw().Header.Set("If-None-Match", *modifiedAccessConditions.IfNoneMatch) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfTags != nil { - req.Raw().Header.Set("x-ms-if-tags", *modifiedAccessConditions.IfTags) - } - if leaseAccessConditions != nil && leaseAccessConditions.LeaseID != nil { - req.Raw().Header.Set("x-ms-lease-id", *leaseAccessConditions.LeaseID) - } - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if blobClientCreateSnapshotOptions != nil && blobClientCreateSnapshotOptions.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *blobClientCreateSnapshotOptions.RequestID) - } - req.Raw().Header.Set("Accept", "application/xml") - return req, nil -} - -// createSnapshotHandleResponse handles the CreateSnapshot response. -func (client *blobClient) createSnapshotHandleResponse(resp *http.Response) (blobClientCreateSnapshotResponse, error) { - result := blobClientCreateSnapshotResponse{RawResponse: resp} - if val := resp.Header.Get("x-ms-snapshot"); val != "" { - result.Snapshot = &val - } - if val := resp.Header.Get("ETag"); val != "" { - result.ETag = &val - } - if val := resp.Header.Get("Last-Modified"); val != "" { - lastModified, err := time.Parse(time.RFC1123, val) - if err != nil { - return blobClientCreateSnapshotResponse{}, err - } - result.LastModified = &lastModified - } - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("x-ms-version-id"); val != "" { - result.VersionID = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return blobClientCreateSnapshotResponse{}, err - } - result.Date = &date - } - if val := resp.Header.Get("x-ms-request-server-encrypted"); val != "" { - isServerEncrypted, err := strconv.ParseBool(val) - if err != nil { - return blobClientCreateSnapshotResponse{}, err - } - result.IsServerEncrypted = &isServerEncrypted - } - return result, nil -} - -// Delete - If the storage account's soft delete feature is disabled then, when a blob is deleted, it is permanently removed -// from the storage account. If the storage account's soft delete feature is enabled, -// then, when a blob is deleted, it is marked for deletion and becomes inaccessible immediately. However, the blob service -// retains the blob or snapshot for the number of days specified by the -// DeleteRetentionPolicy section of Storage service properties [Set-Blob-Service-Properties.md]. After the specified number -// of days has passed, the blob's data is permanently removed from the storage -// account. Note that you continue to be charged for the soft-deleted blob's storage until it is permanently removed. Use -// the List Blobs API and specify the "include=deleted" query parameter to discover -// which blobs and snapshots have been soft deleted. You can then use the Undelete Blob API to restore a soft-deleted blob. -// All other operations on a soft-deleted blob or snapshot causes the service to -// return an HTTP status code of 404 (ResourceNotFound). -// If the operation fails it returns an *azcore.ResponseError type. -// blobClientDeleteOptions - blobClientDeleteOptions contains the optional parameters for the blobClient.Delete method. -// LeaseAccessConditions - LeaseAccessConditions contains a group of parameters for the containerClient.GetProperties method. -// ModifiedAccessConditions - ModifiedAccessConditions contains a group of parameters for the containerClient.Delete method. -func (client *blobClient) Delete(ctx context.Context, blobClientDeleteOptions *blobClientDeleteOptions, leaseAccessConditions *LeaseAccessConditions, modifiedAccessConditions *ModifiedAccessConditions) (blobClientDeleteResponse, error) { - req, err := client.deleteCreateRequest(ctx, blobClientDeleteOptions, leaseAccessConditions, modifiedAccessConditions) - if err != nil { - return blobClientDeleteResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return blobClientDeleteResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusAccepted) { - return blobClientDeleteResponse{}, runtime.NewResponseError(resp) - } - return client.deleteHandleResponse(resp) -} - -// deleteCreateRequest creates the Delete request. -func (client *blobClient) deleteCreateRequest(ctx context.Context, blobClientDeleteOptions *blobClientDeleteOptions, leaseAccessConditions *LeaseAccessConditions, modifiedAccessConditions *ModifiedAccessConditions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodDelete, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - if blobClientDeleteOptions != nil && blobClientDeleteOptions.Snapshot != nil { - reqQP.Set("snapshot", *blobClientDeleteOptions.Snapshot) - } - if blobClientDeleteOptions != nil && blobClientDeleteOptions.VersionID != nil { - reqQP.Set("versionid", *blobClientDeleteOptions.VersionID) - } - if blobClientDeleteOptions != nil && blobClientDeleteOptions.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*blobClientDeleteOptions.Timeout), 10)) - } - if blobClientDeleteOptions != nil && blobClientDeleteOptions.BlobDeleteType != nil { - reqQP.Set("deletetype", string(*blobClientDeleteOptions.BlobDeleteType)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - if leaseAccessConditions != nil && leaseAccessConditions.LeaseID != nil { - req.Raw().Header.Set("x-ms-lease-id", *leaseAccessConditions.LeaseID) - } - if blobClientDeleteOptions != nil && blobClientDeleteOptions.DeleteSnapshots != nil { - req.Raw().Header.Set("x-ms-delete-snapshots", string(*blobClientDeleteOptions.DeleteSnapshots)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfModifiedSince != nil { - req.Raw().Header.Set("If-Modified-Since", modifiedAccessConditions.IfModifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfUnmodifiedSince != nil { - req.Raw().Header.Set("If-Unmodified-Since", modifiedAccessConditions.IfUnmodifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfMatch != nil { - req.Raw().Header.Set("If-Match", *modifiedAccessConditions.IfMatch) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfNoneMatch != nil { - req.Raw().Header.Set("If-None-Match", *modifiedAccessConditions.IfNoneMatch) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfTags != nil { - req.Raw().Header.Set("x-ms-if-tags", *modifiedAccessConditions.IfTags) - } - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if blobClientDeleteOptions != nil && blobClientDeleteOptions.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *blobClientDeleteOptions.RequestID) - } - req.Raw().Header.Set("Accept", "application/xml") - return req, nil -} - -// deleteHandleResponse handles the Delete response. -func (client *blobClient) deleteHandleResponse(resp *http.Response) (blobClientDeleteResponse, error) { - result := blobClientDeleteResponse{RawResponse: resp} - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return blobClientDeleteResponse{}, err - } - result.Date = &date - } - return result, nil -} - -// DeleteImmutabilityPolicy - The Delete Immutability Policy operation deletes the immutability policy on the blob -// If the operation fails it returns an *azcore.ResponseError type. -// options - blobClientDeleteImmutabilityPolicyOptions contains the optional parameters for the blobClient.DeleteImmutabilityPolicy -// method. -func (client *blobClient) DeleteImmutabilityPolicy(ctx context.Context, options *blobClientDeleteImmutabilityPolicyOptions) (blobClientDeleteImmutabilityPolicyResponse, error) { - req, err := client.deleteImmutabilityPolicyCreateRequest(ctx, options) - if err != nil { - return blobClientDeleteImmutabilityPolicyResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return blobClientDeleteImmutabilityPolicyResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusOK) { - return blobClientDeleteImmutabilityPolicyResponse{}, runtime.NewResponseError(resp) - } - return client.deleteImmutabilityPolicyHandleResponse(resp) -} - -// deleteImmutabilityPolicyCreateRequest creates the DeleteImmutabilityPolicy request. -func (client *blobClient) deleteImmutabilityPolicyCreateRequest(ctx context.Context, options *blobClientDeleteImmutabilityPolicyOptions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodDelete, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - reqQP.Set("comp", "immutabilityPolicies") - if options != nil && options.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*options.Timeout), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if options != nil && options.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *options.RequestID) - } - req.Raw().Header.Set("Accept", "application/xml") - return req, nil -} - -// deleteImmutabilityPolicyHandleResponse handles the DeleteImmutabilityPolicy response. -func (client *blobClient) deleteImmutabilityPolicyHandleResponse(resp *http.Response) (blobClientDeleteImmutabilityPolicyResponse, error) { - result := blobClientDeleteImmutabilityPolicyResponse{RawResponse: resp} - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return blobClientDeleteImmutabilityPolicyResponse{}, err - } - result.Date = &date - } - return result, nil -} - -// Download - The Download operation reads or downloads a blob from the system, including its metadata and properties. You -// can also call Download to read a snapshot. -// If the operation fails it returns an *azcore.ResponseError type. -// blobClientDownloadOptions - blobClientDownloadOptions contains the optional parameters for the blobClient.Download method. -// LeaseAccessConditions - LeaseAccessConditions contains a group of parameters for the containerClient.GetProperties method. -// CpkInfo - CpkInfo contains a group of parameters for the blobClient.Download method. -// ModifiedAccessConditions - ModifiedAccessConditions contains a group of parameters for the containerClient.Delete method. -func (client *blobClient) Download(ctx context.Context, blobClientDownloadOptions *blobClientDownloadOptions, leaseAccessConditions *LeaseAccessConditions, cpkInfo *CpkInfo, modifiedAccessConditions *ModifiedAccessConditions) (blobClientDownloadResponse, error) { - req, err := client.downloadCreateRequest(ctx, blobClientDownloadOptions, leaseAccessConditions, cpkInfo, modifiedAccessConditions) - if err != nil { - return blobClientDownloadResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return blobClientDownloadResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusOK, http.StatusPartialContent, http.StatusNotModified) { - return blobClientDownloadResponse{}, runtime.NewResponseError(resp) - } - return client.downloadHandleResponse(resp) -} - -// downloadCreateRequest creates the Download request. -func (client *blobClient) downloadCreateRequest(ctx context.Context, blobClientDownloadOptions *blobClientDownloadOptions, leaseAccessConditions *LeaseAccessConditions, cpkInfo *CpkInfo, modifiedAccessConditions *ModifiedAccessConditions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodGet, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - if blobClientDownloadOptions != nil && blobClientDownloadOptions.Snapshot != nil { - reqQP.Set("snapshot", *blobClientDownloadOptions.Snapshot) - } - if blobClientDownloadOptions != nil && blobClientDownloadOptions.VersionID != nil { - reqQP.Set("versionid", *blobClientDownloadOptions.VersionID) - } - if blobClientDownloadOptions != nil && blobClientDownloadOptions.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*blobClientDownloadOptions.Timeout), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - runtime.SkipBodyDownload(req) - if blobClientDownloadOptions != nil && blobClientDownloadOptions.Range != nil { - req.Raw().Header.Set("x-ms-range", *blobClientDownloadOptions.Range) - } - if leaseAccessConditions != nil && leaseAccessConditions.LeaseID != nil { - req.Raw().Header.Set("x-ms-lease-id", *leaseAccessConditions.LeaseID) - } - if blobClientDownloadOptions != nil && blobClientDownloadOptions.RangeGetContentMD5 != nil { - req.Raw().Header.Set("x-ms-range-get-content-md5", strconv.FormatBool(*blobClientDownloadOptions.RangeGetContentMD5)) - } - if blobClientDownloadOptions != nil && blobClientDownloadOptions.RangeGetContentCRC64 != nil { - req.Raw().Header.Set("x-ms-range-get-content-crc64", strconv.FormatBool(*blobClientDownloadOptions.RangeGetContentCRC64)) - } - if cpkInfo != nil && cpkInfo.EncryptionKey != nil { - req.Raw().Header.Set("x-ms-encryption-key", *cpkInfo.EncryptionKey) - } - if cpkInfo != nil && cpkInfo.EncryptionKeySHA256 != nil { - req.Raw().Header.Set("x-ms-encryption-key-sha256", *cpkInfo.EncryptionKeySHA256) - } - if cpkInfo != nil && cpkInfo.EncryptionAlgorithm != nil { - req.Raw().Header.Set("x-ms-encryption-algorithm", string(*cpkInfo.EncryptionAlgorithm)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfModifiedSince != nil { - req.Raw().Header.Set("If-Modified-Since", modifiedAccessConditions.IfModifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfUnmodifiedSince != nil { - req.Raw().Header.Set("If-Unmodified-Since", modifiedAccessConditions.IfUnmodifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfMatch != nil { - req.Raw().Header.Set("If-Match", *modifiedAccessConditions.IfMatch) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfNoneMatch != nil { - req.Raw().Header.Set("If-None-Match", *modifiedAccessConditions.IfNoneMatch) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfTags != nil { - req.Raw().Header.Set("x-ms-if-tags", *modifiedAccessConditions.IfTags) - } - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if blobClientDownloadOptions != nil && blobClientDownloadOptions.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *blobClientDownloadOptions.RequestID) - } - req.Raw().Header.Set("Accept", "application/xml") - return req, nil -} - -// downloadHandleResponse handles the Download response. -func (client *blobClient) downloadHandleResponse(resp *http.Response) (blobClientDownloadResponse, error) { - result := blobClientDownloadResponse{RawResponse: resp} - if val := resp.Header.Get("Last-Modified"); val != "" { - lastModified, err := time.Parse(time.RFC1123, val) - if err != nil { - return blobClientDownloadResponse{}, err - } - result.LastModified = &lastModified - } - for hh := range resp.Header { - if len(hh) > len("x-ms-meta-") && strings.EqualFold(hh[:len("x-ms-meta-")], "x-ms-meta-") { - if result.Metadata == nil { - result.Metadata = map[string]string{} - } - result.Metadata[hh[len("x-ms-meta-"):]] = resp.Header.Get(hh) - } - } - if val := resp.Header.Get("x-ms-or-policy-id"); val != "" { - result.ObjectReplicationPolicyID = &val - } - for hh := range resp.Header { - if len(hh) > len("x-ms-or-") && strings.EqualFold(hh[:len("x-ms-or-")], "x-ms-or-") { - if result.Metadata == nil { - result.Metadata = map[string]string{} - } - result.Metadata[hh[len("x-ms-or-"):]] = resp.Header.Get(hh) - } - } - if val := resp.Header.Get("Content-Length"); val != "" { - contentLength, err := strconv.ParseInt(val, 10, 64) - if err != nil { - return blobClientDownloadResponse{}, err - } - result.ContentLength = &contentLength - } - if val := resp.Header.Get("Content-Type"); val != "" { - result.ContentType = &val - } - if val := resp.Header.Get("Content-Range"); val != "" { - result.ContentRange = &val - } - if val := resp.Header.Get("ETag"); val != "" { - result.ETag = &val - } - if val := resp.Header.Get("Content-MD5"); val != "" { - contentMD5, err := base64.StdEncoding.DecodeString(val) - if err != nil { - return blobClientDownloadResponse{}, err - } - result.ContentMD5 = contentMD5 - } - if val := resp.Header.Get("Content-Encoding"); val != "" { - result.ContentEncoding = &val - } - if val := resp.Header.Get("Cache-Control"); val != "" { - result.CacheControl = &val - } - if val := resp.Header.Get("Content-Disposition"); val != "" { - result.ContentDisposition = &val - } - if val := resp.Header.Get("Content-Language"); val != "" { - result.ContentLanguage = &val - } - if val := resp.Header.Get("x-ms-blob-sequence-number"); val != "" { - blobSequenceNumber, err := strconv.ParseInt(val, 10, 64) - if err != nil { - return blobClientDownloadResponse{}, err - } - result.BlobSequenceNumber = &blobSequenceNumber - } - if val := resp.Header.Get("x-ms-blob-type"); val != "" { - result.BlobType = (*BlobType)(&val) - } - if val := resp.Header.Get("x-ms-copy-completion-time"); val != "" { - copyCompletionTime, err := time.Parse(time.RFC1123, val) - if err != nil { - return blobClientDownloadResponse{}, err - } - result.CopyCompletionTime = ©CompletionTime - } - if val := resp.Header.Get("x-ms-copy-status-description"); val != "" { - result.CopyStatusDescription = &val - } - if val := resp.Header.Get("x-ms-copy-id"); val != "" { - result.CopyID = &val - } - if val := resp.Header.Get("x-ms-copy-progress"); val != "" { - result.CopyProgress = &val - } - if val := resp.Header.Get("x-ms-copy-source"); val != "" { - result.CopySource = &val - } - if val := resp.Header.Get("x-ms-copy-status"); val != "" { - result.CopyStatus = (*CopyStatusType)(&val) - } - if val := resp.Header.Get("x-ms-lease-duration"); val != "" { - result.LeaseDuration = (*LeaseDurationType)(&val) - } - if val := resp.Header.Get("x-ms-lease-state"); val != "" { - result.LeaseState = (*LeaseStateType)(&val) - } - if val := resp.Header.Get("x-ms-lease-status"); val != "" { - result.LeaseStatus = (*LeaseStatusType)(&val) - } - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("x-ms-version-id"); val != "" { - result.VersionID = &val - } - if val := resp.Header.Get("x-ms-is-current-version"); val != "" { - isCurrentVersion, err := strconv.ParseBool(val) - if err != nil { - return blobClientDownloadResponse{}, err - } - result.IsCurrentVersion = &isCurrentVersion - } - if val := resp.Header.Get("Accept-Ranges"); val != "" { - result.AcceptRanges = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return blobClientDownloadResponse{}, err - } - result.Date = &date - } - if val := resp.Header.Get("x-ms-blob-committed-block-count"); val != "" { - blobCommittedBlockCount32, err := strconv.ParseInt(val, 10, 32) - blobCommittedBlockCount := int32(blobCommittedBlockCount32) - if err != nil { - return blobClientDownloadResponse{}, err - } - result.BlobCommittedBlockCount = &blobCommittedBlockCount - } - if val := resp.Header.Get("x-ms-server-encrypted"); val != "" { - isServerEncrypted, err := strconv.ParseBool(val) - if err != nil { - return blobClientDownloadResponse{}, err - } - result.IsServerEncrypted = &isServerEncrypted - } - if val := resp.Header.Get("x-ms-encryption-key-sha256"); val != "" { - result.EncryptionKeySHA256 = &val - } - if val := resp.Header.Get("x-ms-encryption-scope"); val != "" { - result.EncryptionScope = &val - } - if val := resp.Header.Get("x-ms-blob-content-md5"); val != "" { - blobContentMD5, err := base64.StdEncoding.DecodeString(val) - if err != nil { - return blobClientDownloadResponse{}, err - } - result.BlobContentMD5 = blobContentMD5 - } - if val := resp.Header.Get("x-ms-tag-count"); val != "" { - tagCount, err := strconv.ParseInt(val, 10, 64) - if err != nil { - return blobClientDownloadResponse{}, err - } - result.TagCount = &tagCount - } - if val := resp.Header.Get("x-ms-blob-sealed"); val != "" { - isSealed, err := strconv.ParseBool(val) - if err != nil { - return blobClientDownloadResponse{}, err - } - result.IsSealed = &isSealed - } - if val := resp.Header.Get("x-ms-last-access-time"); val != "" { - lastAccessed, err := time.Parse(time.RFC1123, val) - if err != nil { - return blobClientDownloadResponse{}, err - } - result.LastAccessed = &lastAccessed - } - if val := resp.Header.Get("x-ms-immutability-policy-until-date"); val != "" { - immutabilityPolicyExpiresOn, err := time.Parse(time.RFC1123, val) - if err != nil { - return blobClientDownloadResponse{}, err - } - result.ImmutabilityPolicyExpiresOn = &immutabilityPolicyExpiresOn - } - if val := resp.Header.Get("x-ms-immutability-policy-mode"); val != "" { - result.ImmutabilityPolicyMode = (*BlobImmutabilityPolicyMode)(&val) - } - if val := resp.Header.Get("x-ms-legal-hold"); val != "" { - legalHold, err := strconv.ParseBool(val) - if err != nil { - return blobClientDownloadResponse{}, err - } - result.LegalHold = &legalHold - } - if val := resp.Header.Get("x-ms-content-crc64"); val != "" { - contentCRC64, err := base64.StdEncoding.DecodeString(val) - if err != nil { - return blobClientDownloadResponse{}, err - } - result.ContentCRC64 = contentCRC64 - } - if val := resp.Header.Get("x-ms-error-code"); val != "" { - result.ErrorCode = &val - } - return result, nil -} - -// GetAccountInfo - Returns the sku name and account kind -// If the operation fails it returns an *azcore.ResponseError type. -// options - blobClientGetAccountInfoOptions contains the optional parameters for the blobClient.GetAccountInfo method. -func (client *blobClient) GetAccountInfo(ctx context.Context, options *blobClientGetAccountInfoOptions) (blobClientGetAccountInfoResponse, error) { - req, err := client.getAccountInfoCreateRequest(ctx, options) - if err != nil { - return blobClientGetAccountInfoResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return blobClientGetAccountInfoResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusOK) { - return blobClientGetAccountInfoResponse{}, runtime.NewResponseError(resp) - } - return client.getAccountInfoHandleResponse(resp) -} - -// getAccountInfoCreateRequest creates the GetAccountInfo request. -func (client *blobClient) getAccountInfoCreateRequest(ctx context.Context, options *blobClientGetAccountInfoOptions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodGet, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - reqQP.Set("restype", "account") - reqQP.Set("comp", "properties") - req.Raw().URL.RawQuery = reqQP.Encode() - req.Raw().Header.Set("x-ms-version", "2020-10-02") - req.Raw().Header.Set("Accept", "application/xml") - return req, nil -} - -// getAccountInfoHandleResponse handles the GetAccountInfo response. -func (client *blobClient) getAccountInfoHandleResponse(resp *http.Response) (blobClientGetAccountInfoResponse, error) { - result := blobClientGetAccountInfoResponse{RawResponse: resp} - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return blobClientGetAccountInfoResponse{}, err - } - result.Date = &date - } - if val := resp.Header.Get("x-ms-sku-name"); val != "" { - result.SKUName = (*SKUName)(&val) - } - if val := resp.Header.Get("x-ms-account-kind"); val != "" { - result.AccountKind = (*AccountKind)(&val) - } - return result, nil -} - -// GetProperties - The Get Properties operation returns all user-defined metadata, standard HTTP properties, and system properties -// for the blob. It does not return the content of the blob. -// If the operation fails it returns an *azcore.ResponseError type. -// blobClientGetPropertiesOptions - blobClientGetPropertiesOptions contains the optional parameters for the blobClient.GetProperties -// method. -// LeaseAccessConditions - LeaseAccessConditions contains a group of parameters for the containerClient.GetProperties method. -// CpkInfo - CpkInfo contains a group of parameters for the blobClient.Download method. -// ModifiedAccessConditions - ModifiedAccessConditions contains a group of parameters for the containerClient.Delete method. -func (client *blobClient) GetProperties(ctx context.Context, blobClientGetPropertiesOptions *blobClientGetPropertiesOptions, leaseAccessConditions *LeaseAccessConditions, cpkInfo *CpkInfo, modifiedAccessConditions *ModifiedAccessConditions) (blobClientGetPropertiesResponse, error) { - req, err := client.getPropertiesCreateRequest(ctx, blobClientGetPropertiesOptions, leaseAccessConditions, cpkInfo, modifiedAccessConditions) - if err != nil { - return blobClientGetPropertiesResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return blobClientGetPropertiesResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusOK) { - return blobClientGetPropertiesResponse{}, runtime.NewResponseError(resp) - } - return client.getPropertiesHandleResponse(resp) -} - -// getPropertiesCreateRequest creates the GetProperties request. -func (client *blobClient) getPropertiesCreateRequest(ctx context.Context, blobClientGetPropertiesOptions *blobClientGetPropertiesOptions, leaseAccessConditions *LeaseAccessConditions, cpkInfo *CpkInfo, modifiedAccessConditions *ModifiedAccessConditions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodHead, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - if blobClientGetPropertiesOptions != nil && blobClientGetPropertiesOptions.Snapshot != nil { - reqQP.Set("snapshot", *blobClientGetPropertiesOptions.Snapshot) - } - if blobClientGetPropertiesOptions != nil && blobClientGetPropertiesOptions.VersionID != nil { - reqQP.Set("versionid", *blobClientGetPropertiesOptions.VersionID) - } - if blobClientGetPropertiesOptions != nil && blobClientGetPropertiesOptions.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*blobClientGetPropertiesOptions.Timeout), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - if leaseAccessConditions != nil && leaseAccessConditions.LeaseID != nil { - req.Raw().Header.Set("x-ms-lease-id", *leaseAccessConditions.LeaseID) - } - if cpkInfo != nil && cpkInfo.EncryptionKey != nil { - req.Raw().Header.Set("x-ms-encryption-key", *cpkInfo.EncryptionKey) - } - if cpkInfo != nil && cpkInfo.EncryptionKeySHA256 != nil { - req.Raw().Header.Set("x-ms-encryption-key-sha256", *cpkInfo.EncryptionKeySHA256) - } - if cpkInfo != nil && cpkInfo.EncryptionAlgorithm != nil { - req.Raw().Header.Set("x-ms-encryption-algorithm", string(*cpkInfo.EncryptionAlgorithm)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfModifiedSince != nil { - req.Raw().Header.Set("If-Modified-Since", modifiedAccessConditions.IfModifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfUnmodifiedSince != nil { - req.Raw().Header.Set("If-Unmodified-Since", modifiedAccessConditions.IfUnmodifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfMatch != nil { - req.Raw().Header.Set("If-Match", *modifiedAccessConditions.IfMatch) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfNoneMatch != nil { - req.Raw().Header.Set("If-None-Match", *modifiedAccessConditions.IfNoneMatch) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfTags != nil { - req.Raw().Header.Set("x-ms-if-tags", *modifiedAccessConditions.IfTags) - } - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if blobClientGetPropertiesOptions != nil && blobClientGetPropertiesOptions.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *blobClientGetPropertiesOptions.RequestID) - } - req.Raw().Header.Set("Accept", "application/xml") - return req, nil -} - -// getPropertiesHandleResponse handles the GetProperties response. -func (client *blobClient) getPropertiesHandleResponse(resp *http.Response) (blobClientGetPropertiesResponse, error) { - result := blobClientGetPropertiesResponse{RawResponse: resp} - if val := resp.Header.Get("Last-Modified"); val != "" { - lastModified, err := time.Parse(time.RFC1123, val) - if err != nil { - return blobClientGetPropertiesResponse{}, err - } - result.LastModified = &lastModified - } - if val := resp.Header.Get("x-ms-creation-time"); val != "" { - creationTime, err := time.Parse(time.RFC1123, val) - if err != nil { - return blobClientGetPropertiesResponse{}, err - } - result.CreationTime = &creationTime - } - for hh := range resp.Header { - if len(hh) > len("x-ms-meta-") && strings.EqualFold(hh[:len("x-ms-meta-")], "x-ms-meta-") { - if result.Metadata == nil { - result.Metadata = map[string]string{} - } - result.Metadata[hh[len("x-ms-meta-"):]] = resp.Header.Get(hh) - } - } - if val := resp.Header.Get("x-ms-or-policy-id"); val != "" { - result.ObjectReplicationPolicyID = &val - } - for hh := range resp.Header { - if len(hh) > len("x-ms-or-") && strings.EqualFold(hh[:len("x-ms-or-")], "x-ms-or-") { - if result.Metadata == nil { - result.Metadata = map[string]string{} - } - result.Metadata[hh[len("x-ms-or-"):]] = resp.Header.Get(hh) - } - } - if val := resp.Header.Get("x-ms-blob-type"); val != "" { - result.BlobType = (*BlobType)(&val) - } - if val := resp.Header.Get("x-ms-copy-completion-time"); val != "" { - copyCompletionTime, err := time.Parse(time.RFC1123, val) - if err != nil { - return blobClientGetPropertiesResponse{}, err - } - result.CopyCompletionTime = ©CompletionTime - } - if val := resp.Header.Get("x-ms-copy-status-description"); val != "" { - result.CopyStatusDescription = &val - } - if val := resp.Header.Get("x-ms-copy-id"); val != "" { - result.CopyID = &val - } - if val := resp.Header.Get("x-ms-copy-progress"); val != "" { - result.CopyProgress = &val - } - if val := resp.Header.Get("x-ms-copy-source"); val != "" { - result.CopySource = &val - } - if val := resp.Header.Get("x-ms-copy-status"); val != "" { - result.CopyStatus = (*CopyStatusType)(&val) - } - if val := resp.Header.Get("x-ms-incremental-copy"); val != "" { - isIncrementalCopy, err := strconv.ParseBool(val) - if err != nil { - return blobClientGetPropertiesResponse{}, err - } - result.IsIncrementalCopy = &isIncrementalCopy - } - if val := resp.Header.Get("x-ms-copy-destination-snapshot"); val != "" { - result.DestinationSnapshot = &val - } - if val := resp.Header.Get("x-ms-lease-duration"); val != "" { - result.LeaseDuration = (*LeaseDurationType)(&val) - } - if val := resp.Header.Get("x-ms-lease-state"); val != "" { - result.LeaseState = (*LeaseStateType)(&val) - } - if val := resp.Header.Get("x-ms-lease-status"); val != "" { - result.LeaseStatus = (*LeaseStatusType)(&val) - } - if val := resp.Header.Get("Content-Length"); val != "" { - contentLength, err := strconv.ParseInt(val, 10, 64) - if err != nil { - return blobClientGetPropertiesResponse{}, err - } - result.ContentLength = &contentLength - } - if val := resp.Header.Get("Content-Type"); val != "" { - result.ContentType = &val - } - if val := resp.Header.Get("ETag"); val != "" { - result.ETag = &val - } - if val := resp.Header.Get("Content-MD5"); val != "" { - contentMD5, err := base64.StdEncoding.DecodeString(val) - if err != nil { - return blobClientGetPropertiesResponse{}, err - } - result.ContentMD5 = contentMD5 - } - if val := resp.Header.Get("Content-Encoding"); val != "" { - result.ContentEncoding = &val - } - if val := resp.Header.Get("Content-Disposition"); val != "" { - result.ContentDisposition = &val - } - if val := resp.Header.Get("Content-Language"); val != "" { - result.ContentLanguage = &val - } - if val := resp.Header.Get("Cache-Control"); val != "" { - result.CacheControl = &val - } - if val := resp.Header.Get("x-ms-blob-sequence-number"); val != "" { - blobSequenceNumber, err := strconv.ParseInt(val, 10, 64) - if err != nil { - return blobClientGetPropertiesResponse{}, err - } - result.BlobSequenceNumber = &blobSequenceNumber - } - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return blobClientGetPropertiesResponse{}, err - } - result.Date = &date - } - if val := resp.Header.Get("Accept-Ranges"); val != "" { - result.AcceptRanges = &val - } - if val := resp.Header.Get("x-ms-blob-committed-block-count"); val != "" { - blobCommittedBlockCount32, err := strconv.ParseInt(val, 10, 32) - blobCommittedBlockCount := int32(blobCommittedBlockCount32) - if err != nil { - return blobClientGetPropertiesResponse{}, err - } - result.BlobCommittedBlockCount = &blobCommittedBlockCount - } - if val := resp.Header.Get("x-ms-server-encrypted"); val != "" { - isServerEncrypted, err := strconv.ParseBool(val) - if err != nil { - return blobClientGetPropertiesResponse{}, err - } - result.IsServerEncrypted = &isServerEncrypted - } - if val := resp.Header.Get("x-ms-encryption-key-sha256"); val != "" { - result.EncryptionKeySHA256 = &val - } - if val := resp.Header.Get("x-ms-encryption-scope"); val != "" { - result.EncryptionScope = &val - } - if val := resp.Header.Get("x-ms-access-tier"); val != "" { - result.AccessTier = &val - } - if val := resp.Header.Get("x-ms-access-tier-inferred"); val != "" { - accessTierInferred, err := strconv.ParseBool(val) - if err != nil { - return blobClientGetPropertiesResponse{}, err - } - result.AccessTierInferred = &accessTierInferred - } - if val := resp.Header.Get("x-ms-archive-status"); val != "" { - result.ArchiveStatus = &val - } - if val := resp.Header.Get("x-ms-access-tier-change-time"); val != "" { - accessTierChangeTime, err := time.Parse(time.RFC1123, val) - if err != nil { - return blobClientGetPropertiesResponse{}, err - } - result.AccessTierChangeTime = &accessTierChangeTime - } - if val := resp.Header.Get("x-ms-version-id"); val != "" { - result.VersionID = &val - } - if val := resp.Header.Get("x-ms-is-current-version"); val != "" { - isCurrentVersion, err := strconv.ParseBool(val) - if err != nil { - return blobClientGetPropertiesResponse{}, err - } - result.IsCurrentVersion = &isCurrentVersion - } - if val := resp.Header.Get("x-ms-tag-count"); val != "" { - tagCount, err := strconv.ParseInt(val, 10, 64) - if err != nil { - return blobClientGetPropertiesResponse{}, err - } - result.TagCount = &tagCount - } - if val := resp.Header.Get("x-ms-expiry-time"); val != "" { - expiresOn, err := time.Parse(time.RFC1123, val) - if err != nil { - return blobClientGetPropertiesResponse{}, err - } - result.ExpiresOn = &expiresOn - } - if val := resp.Header.Get("x-ms-blob-sealed"); val != "" { - isSealed, err := strconv.ParseBool(val) - if err != nil { - return blobClientGetPropertiesResponse{}, err - } - result.IsSealed = &isSealed - } - if val := resp.Header.Get("x-ms-rehydrate-priority"); val != "" { - result.RehydratePriority = &val - } - if val := resp.Header.Get("x-ms-last-access-time"); val != "" { - lastAccessed, err := time.Parse(time.RFC1123, val) - if err != nil { - return blobClientGetPropertiesResponse{}, err - } - result.LastAccessed = &lastAccessed - } - if val := resp.Header.Get("x-ms-immutability-policy-until-date"); val != "" { - immutabilityPolicyExpiresOn, err := time.Parse(time.RFC1123, val) - if err != nil { - return blobClientGetPropertiesResponse{}, err - } - result.ImmutabilityPolicyExpiresOn = &immutabilityPolicyExpiresOn - } - if val := resp.Header.Get("x-ms-immutability-policy-mode"); val != "" { - result.ImmutabilityPolicyMode = (*BlobImmutabilityPolicyMode)(&val) - } - if val := resp.Header.Get("x-ms-legal-hold"); val != "" { - legalHold, err := strconv.ParseBool(val) - if err != nil { - return blobClientGetPropertiesResponse{}, err - } - result.LegalHold = &legalHold - } - return result, nil -} - -// GetTags - The Get Tags operation enables users to get the tags associated with a blob. -// If the operation fails it returns an *azcore.ResponseError type. -// blobClientGetTagsOptions - blobClientGetTagsOptions contains the optional parameters for the blobClient.GetTags method. -// ModifiedAccessConditions - ModifiedAccessConditions contains a group of parameters for the containerClient.Delete method. -// LeaseAccessConditions - LeaseAccessConditions contains a group of parameters for the containerClient.GetProperties method. -func (client *blobClient) GetTags(ctx context.Context, blobClientGetTagsOptions *blobClientGetTagsOptions, modifiedAccessConditions *ModifiedAccessConditions, leaseAccessConditions *LeaseAccessConditions) (blobClientGetTagsResponse, error) { - req, err := client.getTagsCreateRequest(ctx, blobClientGetTagsOptions, modifiedAccessConditions, leaseAccessConditions) - if err != nil { - return blobClientGetTagsResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return blobClientGetTagsResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusOK) { - return blobClientGetTagsResponse{}, runtime.NewResponseError(resp) - } - return client.getTagsHandleResponse(resp) -} - -// getTagsCreateRequest creates the GetTags request. -func (client *blobClient) getTagsCreateRequest(ctx context.Context, blobClientGetTagsOptions *blobClientGetTagsOptions, modifiedAccessConditions *ModifiedAccessConditions, leaseAccessConditions *LeaseAccessConditions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodGet, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - reqQP.Set("comp", "tags") - if blobClientGetTagsOptions != nil && blobClientGetTagsOptions.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*blobClientGetTagsOptions.Timeout), 10)) - } - if blobClientGetTagsOptions != nil && blobClientGetTagsOptions.Snapshot != nil { - reqQP.Set("snapshot", *blobClientGetTagsOptions.Snapshot) - } - if blobClientGetTagsOptions != nil && blobClientGetTagsOptions.VersionID != nil { - reqQP.Set("versionid", *blobClientGetTagsOptions.VersionID) - } - req.Raw().URL.RawQuery = reqQP.Encode() - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if blobClientGetTagsOptions != nil && blobClientGetTagsOptions.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *blobClientGetTagsOptions.RequestID) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfTags != nil { - req.Raw().Header.Set("x-ms-if-tags", *modifiedAccessConditions.IfTags) - } - if leaseAccessConditions != nil && leaseAccessConditions.LeaseID != nil { - req.Raw().Header.Set("x-ms-lease-id", *leaseAccessConditions.LeaseID) - } - req.Raw().Header.Set("Accept", "application/xml") - return req, nil -} - -// getTagsHandleResponse handles the GetTags response. -func (client *blobClient) getTagsHandleResponse(resp *http.Response) (blobClientGetTagsResponse, error) { - result := blobClientGetTagsResponse{RawResponse: resp} - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return blobClientGetTagsResponse{}, err - } - result.Date = &date - } - if err := runtime.UnmarshalAsXML(resp, &result.BlobTags); err != nil { - return blobClientGetTagsResponse{}, err - } - return result, nil -} - -// Query - The Query operation enables users to select/project on blob data by providing simple query expressions. -// If the operation fails it returns an *azcore.ResponseError type. -// blobClientQueryOptions - blobClientQueryOptions contains the optional parameters for the blobClient.Query method. -// LeaseAccessConditions - LeaseAccessConditions contains a group of parameters for the containerClient.GetProperties method. -// CpkInfo - CpkInfo contains a group of parameters for the blobClient.Download method. -// ModifiedAccessConditions - ModifiedAccessConditions contains a group of parameters for the containerClient.Delete method. -func (client *blobClient) Query(ctx context.Context, blobClientQueryOptions *blobClientQueryOptions, leaseAccessConditions *LeaseAccessConditions, cpkInfo *CpkInfo, modifiedAccessConditions *ModifiedAccessConditions) (blobClientQueryResponse, error) { - req, err := client.queryCreateRequest(ctx, blobClientQueryOptions, leaseAccessConditions, cpkInfo, modifiedAccessConditions) - if err != nil { - return blobClientQueryResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return blobClientQueryResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusOK, http.StatusPartialContent) { - return blobClientQueryResponse{}, runtime.NewResponseError(resp) - } - return client.queryHandleResponse(resp) -} - -// queryCreateRequest creates the Query request. -func (client *blobClient) queryCreateRequest(ctx context.Context, blobClientQueryOptions *blobClientQueryOptions, leaseAccessConditions *LeaseAccessConditions, cpkInfo *CpkInfo, modifiedAccessConditions *ModifiedAccessConditions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodPost, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - reqQP.Set("comp", "query") - if blobClientQueryOptions != nil && blobClientQueryOptions.Snapshot != nil { - reqQP.Set("snapshot", *blobClientQueryOptions.Snapshot) - } - if blobClientQueryOptions != nil && blobClientQueryOptions.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*blobClientQueryOptions.Timeout), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - runtime.SkipBodyDownload(req) - if leaseAccessConditions != nil && leaseAccessConditions.LeaseID != nil { - req.Raw().Header.Set("x-ms-lease-id", *leaseAccessConditions.LeaseID) - } - if cpkInfo != nil && cpkInfo.EncryptionKey != nil { - req.Raw().Header.Set("x-ms-encryption-key", *cpkInfo.EncryptionKey) - } - if cpkInfo != nil && cpkInfo.EncryptionKeySHA256 != nil { - req.Raw().Header.Set("x-ms-encryption-key-sha256", *cpkInfo.EncryptionKeySHA256) - } - if cpkInfo != nil && cpkInfo.EncryptionAlgorithm != nil { - req.Raw().Header.Set("x-ms-encryption-algorithm", string(*cpkInfo.EncryptionAlgorithm)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfModifiedSince != nil { - req.Raw().Header.Set("If-Modified-Since", modifiedAccessConditions.IfModifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfUnmodifiedSince != nil { - req.Raw().Header.Set("If-Unmodified-Since", modifiedAccessConditions.IfUnmodifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfMatch != nil { - req.Raw().Header.Set("If-Match", *modifiedAccessConditions.IfMatch) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfNoneMatch != nil { - req.Raw().Header.Set("If-None-Match", *modifiedAccessConditions.IfNoneMatch) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfTags != nil { - req.Raw().Header.Set("x-ms-if-tags", *modifiedAccessConditions.IfTags) - } - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if blobClientQueryOptions != nil && blobClientQueryOptions.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *blobClientQueryOptions.RequestID) - } - req.Raw().Header.Set("Accept", "application/xml") - if blobClientQueryOptions != nil && blobClientQueryOptions.QueryRequest != nil { - return req, runtime.MarshalAsXML(req, *blobClientQueryOptions.QueryRequest) - } - return req, nil -} - -// queryHandleResponse handles the Query response. -func (client *blobClient) queryHandleResponse(resp *http.Response) (blobClientQueryResponse, error) { - result := blobClientQueryResponse{RawResponse: resp} - if val := resp.Header.Get("Last-Modified"); val != "" { - lastModified, err := time.Parse(time.RFC1123, val) - if err != nil { - return blobClientQueryResponse{}, err - } - result.LastModified = &lastModified - } - for hh := range resp.Header { - if len(hh) > len("x-ms-meta-") && strings.EqualFold(hh[:len("x-ms-meta-")], "x-ms-meta-") { - if result.Metadata == nil { - result.Metadata = map[string]string{} - } - result.Metadata[hh[len("x-ms-meta-"):]] = resp.Header.Get(hh) - } - } - if val := resp.Header.Get("Content-Length"); val != "" { - contentLength, err := strconv.ParseInt(val, 10, 64) - if err != nil { - return blobClientQueryResponse{}, err - } - result.ContentLength = &contentLength - } - if val := resp.Header.Get("Content-Type"); val != "" { - result.ContentType = &val - } - if val := resp.Header.Get("Content-Range"); val != "" { - result.ContentRange = &val - } - if val := resp.Header.Get("ETag"); val != "" { - result.ETag = &val - } - if val := resp.Header.Get("Content-MD5"); val != "" { - contentMD5, err := base64.StdEncoding.DecodeString(val) - if err != nil { - return blobClientQueryResponse{}, err - } - result.ContentMD5 = contentMD5 - } - if val := resp.Header.Get("Content-Encoding"); val != "" { - result.ContentEncoding = &val - } - if val := resp.Header.Get("Cache-Control"); val != "" { - result.CacheControl = &val - } - if val := resp.Header.Get("Content-Disposition"); val != "" { - result.ContentDisposition = &val - } - if val := resp.Header.Get("Content-Language"); val != "" { - result.ContentLanguage = &val - } - if val := resp.Header.Get("x-ms-blob-sequence-number"); val != "" { - blobSequenceNumber, err := strconv.ParseInt(val, 10, 64) - if err != nil { - return blobClientQueryResponse{}, err - } - result.BlobSequenceNumber = &blobSequenceNumber - } - if val := resp.Header.Get("x-ms-blob-type"); val != "" { - result.BlobType = (*BlobType)(&val) - } - if val := resp.Header.Get("x-ms-copy-completion-time"); val != "" { - copyCompletionTime, err := time.Parse(time.RFC1123, val) - if err != nil { - return blobClientQueryResponse{}, err - } - result.CopyCompletionTime = ©CompletionTime - } - if val := resp.Header.Get("x-ms-copy-status-description"); val != "" { - result.CopyStatusDescription = &val - } - if val := resp.Header.Get("x-ms-copy-id"); val != "" { - result.CopyID = &val - } - if val := resp.Header.Get("x-ms-copy-progress"); val != "" { - result.CopyProgress = &val - } - if val := resp.Header.Get("x-ms-copy-source"); val != "" { - result.CopySource = &val - } - if val := resp.Header.Get("x-ms-copy-status"); val != "" { - result.CopyStatus = (*CopyStatusType)(&val) - } - if val := resp.Header.Get("x-ms-lease-duration"); val != "" { - result.LeaseDuration = (*LeaseDurationType)(&val) - } - if val := resp.Header.Get("x-ms-lease-state"); val != "" { - result.LeaseState = (*LeaseStateType)(&val) - } - if val := resp.Header.Get("x-ms-lease-status"); val != "" { - result.LeaseStatus = (*LeaseStatusType)(&val) - } - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("Accept-Ranges"); val != "" { - result.AcceptRanges = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return blobClientQueryResponse{}, err - } - result.Date = &date - } - if val := resp.Header.Get("x-ms-blob-committed-block-count"); val != "" { - blobCommittedBlockCount32, err := strconv.ParseInt(val, 10, 32) - blobCommittedBlockCount := int32(blobCommittedBlockCount32) - if err != nil { - return blobClientQueryResponse{}, err - } - result.BlobCommittedBlockCount = &blobCommittedBlockCount - } - if val := resp.Header.Get("x-ms-server-encrypted"); val != "" { - isServerEncrypted, err := strconv.ParseBool(val) - if err != nil { - return blobClientQueryResponse{}, err - } - result.IsServerEncrypted = &isServerEncrypted - } - if val := resp.Header.Get("x-ms-encryption-key-sha256"); val != "" { - result.EncryptionKeySHA256 = &val - } - if val := resp.Header.Get("x-ms-encryption-scope"); val != "" { - result.EncryptionScope = &val - } - if val := resp.Header.Get("x-ms-blob-content-md5"); val != "" { - blobContentMD5, err := base64.StdEncoding.DecodeString(val) - if err != nil { - return blobClientQueryResponse{}, err - } - result.BlobContentMD5 = blobContentMD5 - } - if val := resp.Header.Get("x-ms-content-crc64"); val != "" { - contentCRC64, err := base64.StdEncoding.DecodeString(val) - if err != nil { - return blobClientQueryResponse{}, err - } - result.ContentCRC64 = contentCRC64 - } - return result, nil -} - -// ReleaseLease - [Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete operations -// If the operation fails it returns an *azcore.ResponseError type. -// leaseID - Specifies the current lease ID on the resource. -// blobClientReleaseLeaseOptions - blobClientReleaseLeaseOptions contains the optional parameters for the blobClient.ReleaseLease -// method. -// ModifiedAccessConditions - ModifiedAccessConditions contains a group of parameters for the containerClient.Delete method. -func (client *blobClient) ReleaseLease(ctx context.Context, leaseID string, blobClientReleaseLeaseOptions *blobClientReleaseLeaseOptions, modifiedAccessConditions *ModifiedAccessConditions) (blobClientReleaseLeaseResponse, error) { - req, err := client.releaseLeaseCreateRequest(ctx, leaseID, blobClientReleaseLeaseOptions, modifiedAccessConditions) - if err != nil { - return blobClientReleaseLeaseResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return blobClientReleaseLeaseResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusOK) { - return blobClientReleaseLeaseResponse{}, runtime.NewResponseError(resp) - } - return client.releaseLeaseHandleResponse(resp) -} - -// releaseLeaseCreateRequest creates the ReleaseLease request. -func (client *blobClient) releaseLeaseCreateRequest(ctx context.Context, leaseID string, blobClientReleaseLeaseOptions *blobClientReleaseLeaseOptions, modifiedAccessConditions *ModifiedAccessConditions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodPut, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - reqQP.Set("comp", "lease") - if blobClientReleaseLeaseOptions != nil && blobClientReleaseLeaseOptions.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*blobClientReleaseLeaseOptions.Timeout), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - req.Raw().Header.Set("x-ms-lease-action", "release") - req.Raw().Header.Set("x-ms-lease-id", leaseID) - if modifiedAccessConditions != nil && modifiedAccessConditions.IfModifiedSince != nil { - req.Raw().Header.Set("If-Modified-Since", modifiedAccessConditions.IfModifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfUnmodifiedSince != nil { - req.Raw().Header.Set("If-Unmodified-Since", modifiedAccessConditions.IfUnmodifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfMatch != nil { - req.Raw().Header.Set("If-Match", *modifiedAccessConditions.IfMatch) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfNoneMatch != nil { - req.Raw().Header.Set("If-None-Match", *modifiedAccessConditions.IfNoneMatch) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfTags != nil { - req.Raw().Header.Set("x-ms-if-tags", *modifiedAccessConditions.IfTags) - } - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if blobClientReleaseLeaseOptions != nil && blobClientReleaseLeaseOptions.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *blobClientReleaseLeaseOptions.RequestID) - } - req.Raw().Header.Set("Accept", "application/xml") - return req, nil -} - -// releaseLeaseHandleResponse handles the ReleaseLease response. -func (client *blobClient) releaseLeaseHandleResponse(resp *http.Response) (blobClientReleaseLeaseResponse, error) { - result := blobClientReleaseLeaseResponse{RawResponse: resp} - if val := resp.Header.Get("ETag"); val != "" { - result.ETag = &val - } - if val := resp.Header.Get("Last-Modified"); val != "" { - lastModified, err := time.Parse(time.RFC1123, val) - if err != nil { - return blobClientReleaseLeaseResponse{}, err - } - result.LastModified = &lastModified - } - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return blobClientReleaseLeaseResponse{}, err - } - result.Date = &date - } - return result, nil -} - -// RenewLease - [Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete operations -// If the operation fails it returns an *azcore.ResponseError type. -// leaseID - Specifies the current lease ID on the resource. -// blobClientRenewLeaseOptions - blobClientRenewLeaseOptions contains the optional parameters for the blobClient.RenewLease -// method. -// ModifiedAccessConditions - ModifiedAccessConditions contains a group of parameters for the containerClient.Delete method. -func (client *blobClient) RenewLease(ctx context.Context, leaseID string, blobClientRenewLeaseOptions *blobClientRenewLeaseOptions, modifiedAccessConditions *ModifiedAccessConditions) (blobClientRenewLeaseResponse, error) { - req, err := client.renewLeaseCreateRequest(ctx, leaseID, blobClientRenewLeaseOptions, modifiedAccessConditions) - if err != nil { - return blobClientRenewLeaseResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return blobClientRenewLeaseResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusOK) { - return blobClientRenewLeaseResponse{}, runtime.NewResponseError(resp) - } - return client.renewLeaseHandleResponse(resp) -} - -// renewLeaseCreateRequest creates the RenewLease request. -func (client *blobClient) renewLeaseCreateRequest(ctx context.Context, leaseID string, blobClientRenewLeaseOptions *blobClientRenewLeaseOptions, modifiedAccessConditions *ModifiedAccessConditions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodPut, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - reqQP.Set("comp", "lease") - if blobClientRenewLeaseOptions != nil && blobClientRenewLeaseOptions.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*blobClientRenewLeaseOptions.Timeout), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - req.Raw().Header.Set("x-ms-lease-action", "renew") - req.Raw().Header.Set("x-ms-lease-id", leaseID) - if modifiedAccessConditions != nil && modifiedAccessConditions.IfModifiedSince != nil { - req.Raw().Header.Set("If-Modified-Since", modifiedAccessConditions.IfModifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfUnmodifiedSince != nil { - req.Raw().Header.Set("If-Unmodified-Since", modifiedAccessConditions.IfUnmodifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfMatch != nil { - req.Raw().Header.Set("If-Match", *modifiedAccessConditions.IfMatch) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfNoneMatch != nil { - req.Raw().Header.Set("If-None-Match", *modifiedAccessConditions.IfNoneMatch) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfTags != nil { - req.Raw().Header.Set("x-ms-if-tags", *modifiedAccessConditions.IfTags) - } - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if blobClientRenewLeaseOptions != nil && blobClientRenewLeaseOptions.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *blobClientRenewLeaseOptions.RequestID) - } - req.Raw().Header.Set("Accept", "application/xml") - return req, nil -} - -// renewLeaseHandleResponse handles the RenewLease response. -func (client *blobClient) renewLeaseHandleResponse(resp *http.Response) (blobClientRenewLeaseResponse, error) { - result := blobClientRenewLeaseResponse{RawResponse: resp} - if val := resp.Header.Get("ETag"); val != "" { - result.ETag = &val - } - if val := resp.Header.Get("Last-Modified"); val != "" { - lastModified, err := time.Parse(time.RFC1123, val) - if err != nil { - return blobClientRenewLeaseResponse{}, err - } - result.LastModified = &lastModified - } - if val := resp.Header.Get("x-ms-lease-id"); val != "" { - result.LeaseID = &val - } - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return blobClientRenewLeaseResponse{}, err - } - result.Date = &date - } - return result, nil -} - -// SetExpiry - Sets the time a blob will expire and be deleted. -// If the operation fails it returns an *azcore.ResponseError type. -// expiryOptions - Required. Indicates mode of the expiry time -// options - blobClientSetExpiryOptions contains the optional parameters for the blobClient.SetExpiry method. -func (client *blobClient) SetExpiry(ctx context.Context, expiryOptions BlobExpiryOptions, options *blobClientSetExpiryOptions) (blobClientSetExpiryResponse, error) { - req, err := client.setExpiryCreateRequest(ctx, expiryOptions, options) - if err != nil { - return blobClientSetExpiryResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return blobClientSetExpiryResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusOK) { - return blobClientSetExpiryResponse{}, runtime.NewResponseError(resp) - } - return client.setExpiryHandleResponse(resp) -} - -// setExpiryCreateRequest creates the SetExpiry request. -func (client *blobClient) setExpiryCreateRequest(ctx context.Context, expiryOptions BlobExpiryOptions, options *blobClientSetExpiryOptions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodPut, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - reqQP.Set("comp", "expiry") - if options != nil && options.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*options.Timeout), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if options != nil && options.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *options.RequestID) - } - req.Raw().Header.Set("x-ms-expiry-option", string(expiryOptions)) - if options != nil && options.ExpiresOn != nil { - req.Raw().Header.Set("x-ms-expiry-time", *options.ExpiresOn) - } - req.Raw().Header.Set("Accept", "application/xml") - return req, nil -} - -// setExpiryHandleResponse handles the SetExpiry response. -func (client *blobClient) setExpiryHandleResponse(resp *http.Response) (blobClientSetExpiryResponse, error) { - result := blobClientSetExpiryResponse{RawResponse: resp} - if val := resp.Header.Get("ETag"); val != "" { - result.ETag = &val - } - if val := resp.Header.Get("Last-Modified"); val != "" { - lastModified, err := time.Parse(time.RFC1123, val) - if err != nil { - return blobClientSetExpiryResponse{}, err - } - result.LastModified = &lastModified - } - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return blobClientSetExpiryResponse{}, err - } - result.Date = &date - } - return result, nil -} - -// SetHTTPHeaders - The Set HTTP Headers operation sets system properties on the blob -// If the operation fails it returns an *azcore.ResponseError type. -// blobClientSetHTTPHeadersOptions - blobClientSetHTTPHeadersOptions contains the optional parameters for the blobClient.SetHTTPHeaders -// method. -// BlobHTTPHeaders - BlobHTTPHeaders contains a group of parameters for the blobClient.SetHTTPHeaders method. -// LeaseAccessConditions - LeaseAccessConditions contains a group of parameters for the containerClient.GetProperties method. -// ModifiedAccessConditions - ModifiedAccessConditions contains a group of parameters for the containerClient.Delete method. -func (client *blobClient) SetHTTPHeaders(ctx context.Context, blobClientSetHTTPHeadersOptions *blobClientSetHTTPHeadersOptions, blobHTTPHeaders *BlobHTTPHeaders, leaseAccessConditions *LeaseAccessConditions, modifiedAccessConditions *ModifiedAccessConditions) (blobClientSetHTTPHeadersResponse, error) { - req, err := client.setHTTPHeadersCreateRequest(ctx, blobClientSetHTTPHeadersOptions, blobHTTPHeaders, leaseAccessConditions, modifiedAccessConditions) - if err != nil { - return blobClientSetHTTPHeadersResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return blobClientSetHTTPHeadersResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusOK) { - return blobClientSetHTTPHeadersResponse{}, runtime.NewResponseError(resp) - } - return client.setHTTPHeadersHandleResponse(resp) -} - -// setHTTPHeadersCreateRequest creates the SetHTTPHeaders request. -func (client *blobClient) setHTTPHeadersCreateRequest(ctx context.Context, blobClientSetHTTPHeadersOptions *blobClientSetHTTPHeadersOptions, blobHTTPHeaders *BlobHTTPHeaders, leaseAccessConditions *LeaseAccessConditions, modifiedAccessConditions *ModifiedAccessConditions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodPut, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - reqQP.Set("comp", "properties") - if blobClientSetHTTPHeadersOptions != nil && blobClientSetHTTPHeadersOptions.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*blobClientSetHTTPHeadersOptions.Timeout), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - if blobHTTPHeaders != nil && blobHTTPHeaders.BlobCacheControl != nil { - req.Raw().Header.Set("x-ms-blob-cache-control", *blobHTTPHeaders.BlobCacheControl) - } - if blobHTTPHeaders != nil && blobHTTPHeaders.BlobContentType != nil { - req.Raw().Header.Set("x-ms-blob-content-type", *blobHTTPHeaders.BlobContentType) - } - if blobHTTPHeaders != nil && blobHTTPHeaders.BlobContentMD5 != nil { - req.Raw().Header.Set("x-ms-blob-content-md5", base64.StdEncoding.EncodeToString(blobHTTPHeaders.BlobContentMD5)) - } - if blobHTTPHeaders != nil && blobHTTPHeaders.BlobContentEncoding != nil { - req.Raw().Header.Set("x-ms-blob-content-encoding", *blobHTTPHeaders.BlobContentEncoding) - } - if blobHTTPHeaders != nil && blobHTTPHeaders.BlobContentLanguage != nil { - req.Raw().Header.Set("x-ms-blob-content-language", *blobHTTPHeaders.BlobContentLanguage) - } - if leaseAccessConditions != nil && leaseAccessConditions.LeaseID != nil { - req.Raw().Header.Set("x-ms-lease-id", *leaseAccessConditions.LeaseID) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfModifiedSince != nil { - req.Raw().Header.Set("If-Modified-Since", modifiedAccessConditions.IfModifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfUnmodifiedSince != nil { - req.Raw().Header.Set("If-Unmodified-Since", modifiedAccessConditions.IfUnmodifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfMatch != nil { - req.Raw().Header.Set("If-Match", *modifiedAccessConditions.IfMatch) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfNoneMatch != nil { - req.Raw().Header.Set("If-None-Match", *modifiedAccessConditions.IfNoneMatch) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfTags != nil { - req.Raw().Header.Set("x-ms-if-tags", *modifiedAccessConditions.IfTags) - } - if blobHTTPHeaders != nil && blobHTTPHeaders.BlobContentDisposition != nil { - req.Raw().Header.Set("x-ms-blob-content-disposition", *blobHTTPHeaders.BlobContentDisposition) - } - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if blobClientSetHTTPHeadersOptions != nil && blobClientSetHTTPHeadersOptions.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *blobClientSetHTTPHeadersOptions.RequestID) - } - req.Raw().Header.Set("Accept", "application/xml") - return req, nil -} - -// setHTTPHeadersHandleResponse handles the SetHTTPHeaders response. -func (client *blobClient) setHTTPHeadersHandleResponse(resp *http.Response) (blobClientSetHTTPHeadersResponse, error) { - result := blobClientSetHTTPHeadersResponse{RawResponse: resp} - if val := resp.Header.Get("ETag"); val != "" { - result.ETag = &val - } - if val := resp.Header.Get("Last-Modified"); val != "" { - lastModified, err := time.Parse(time.RFC1123, val) - if err != nil { - return blobClientSetHTTPHeadersResponse{}, err - } - result.LastModified = &lastModified - } - if val := resp.Header.Get("x-ms-blob-sequence-number"); val != "" { - blobSequenceNumber, err := strconv.ParseInt(val, 10, 64) - if err != nil { - return blobClientSetHTTPHeadersResponse{}, err - } - result.BlobSequenceNumber = &blobSequenceNumber - } - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return blobClientSetHTTPHeadersResponse{}, err - } - result.Date = &date - } - return result, nil -} - -// SetImmutabilityPolicy - The Set Immutability Policy operation sets the immutability policy on the blob -// If the operation fails it returns an *azcore.ResponseError type. -// blobClientSetImmutabilityPolicyOptions - blobClientSetImmutabilityPolicyOptions contains the optional parameters for the -// blobClient.SetImmutabilityPolicy method. -// ModifiedAccessConditions - ModifiedAccessConditions contains a group of parameters for the containerClient.Delete method. -func (client *blobClient) SetImmutabilityPolicy(ctx context.Context, blobClientSetImmutabilityPolicyOptions *blobClientSetImmutabilityPolicyOptions, modifiedAccessConditions *ModifiedAccessConditions) (blobClientSetImmutabilityPolicyResponse, error) { - req, err := client.setImmutabilityPolicyCreateRequest(ctx, blobClientSetImmutabilityPolicyOptions, modifiedAccessConditions) - if err != nil { - return blobClientSetImmutabilityPolicyResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return blobClientSetImmutabilityPolicyResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusOK) { - return blobClientSetImmutabilityPolicyResponse{}, runtime.NewResponseError(resp) - } - return client.setImmutabilityPolicyHandleResponse(resp) -} - -// setImmutabilityPolicyCreateRequest creates the SetImmutabilityPolicy request. -func (client *blobClient) setImmutabilityPolicyCreateRequest(ctx context.Context, blobClientSetImmutabilityPolicyOptions *blobClientSetImmutabilityPolicyOptions, modifiedAccessConditions *ModifiedAccessConditions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodPut, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - reqQP.Set("comp", "immutabilityPolicies") - if blobClientSetImmutabilityPolicyOptions != nil && blobClientSetImmutabilityPolicyOptions.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*blobClientSetImmutabilityPolicyOptions.Timeout), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if blobClientSetImmutabilityPolicyOptions != nil && blobClientSetImmutabilityPolicyOptions.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *blobClientSetImmutabilityPolicyOptions.RequestID) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfUnmodifiedSince != nil { - req.Raw().Header.Set("If-Unmodified-Since", modifiedAccessConditions.IfUnmodifiedSince.Format(time.RFC1123)) - } - if blobClientSetImmutabilityPolicyOptions != nil && blobClientSetImmutabilityPolicyOptions.ImmutabilityPolicyExpiry != nil { - req.Raw().Header.Set("x-ms-immutability-policy-until-date", blobClientSetImmutabilityPolicyOptions.ImmutabilityPolicyExpiry.Format(time.RFC1123)) - } - if blobClientSetImmutabilityPolicyOptions != nil && blobClientSetImmutabilityPolicyOptions.ImmutabilityPolicyMode != nil { - req.Raw().Header.Set("x-ms-immutability-policy-mode", string(*blobClientSetImmutabilityPolicyOptions.ImmutabilityPolicyMode)) - } - req.Raw().Header.Set("Accept", "application/xml") - return req, nil -} - -// setImmutabilityPolicyHandleResponse handles the SetImmutabilityPolicy response. -func (client *blobClient) setImmutabilityPolicyHandleResponse(resp *http.Response) (blobClientSetImmutabilityPolicyResponse, error) { - result := blobClientSetImmutabilityPolicyResponse{RawResponse: resp} - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return blobClientSetImmutabilityPolicyResponse{}, err - } - result.Date = &date - } - if val := resp.Header.Get("x-ms-immutability-policy-until-date"); val != "" { - immutabilityPolicyExpiry, err := time.Parse(time.RFC1123, val) - if err != nil { - return blobClientSetImmutabilityPolicyResponse{}, err - } - result.ImmutabilityPolicyExpiry = &immutabilityPolicyExpiry - } - if val := resp.Header.Get("x-ms-immutability-policy-mode"); val != "" { - result.ImmutabilityPolicyMode = (*BlobImmutabilityPolicyMode)(&val) - } - return result, nil -} - -// SetLegalHold - The Set Legal Hold operation sets a legal hold on the blob. -// If the operation fails it returns an *azcore.ResponseError type. -// legalHold - Specified if a legal hold should be set on the blob. -// options - blobClientSetLegalHoldOptions contains the optional parameters for the blobClient.SetLegalHold method. -func (client *blobClient) SetLegalHold(ctx context.Context, legalHold bool, options *blobClientSetLegalHoldOptions) (blobClientSetLegalHoldResponse, error) { - req, err := client.setLegalHoldCreateRequest(ctx, legalHold, options) - if err != nil { - return blobClientSetLegalHoldResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return blobClientSetLegalHoldResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusOK) { - return blobClientSetLegalHoldResponse{}, runtime.NewResponseError(resp) - } - return client.setLegalHoldHandleResponse(resp) -} - -// setLegalHoldCreateRequest creates the SetLegalHold request. -func (client *blobClient) setLegalHoldCreateRequest(ctx context.Context, legalHold bool, options *blobClientSetLegalHoldOptions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodPut, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - reqQP.Set("comp", "legalhold") - if options != nil && options.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*options.Timeout), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if options != nil && options.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *options.RequestID) - } - req.Raw().Header.Set("x-ms-legal-hold", strconv.FormatBool(legalHold)) - req.Raw().Header.Set("Accept", "application/xml") - return req, nil -} - -// setLegalHoldHandleResponse handles the SetLegalHold response. -func (client *blobClient) setLegalHoldHandleResponse(resp *http.Response) (blobClientSetLegalHoldResponse, error) { - result := blobClientSetLegalHoldResponse{RawResponse: resp} - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return blobClientSetLegalHoldResponse{}, err - } - result.Date = &date - } - if val := resp.Header.Get("x-ms-legal-hold"); val != "" { - legalHold, err := strconv.ParseBool(val) - if err != nil { - return blobClientSetLegalHoldResponse{}, err - } - result.LegalHold = &legalHold - } - return result, nil -} - -// SetMetadata - The Set Blob Metadata operation sets user-defined metadata for the specified blob as one or more name-value -// pairs -// If the operation fails it returns an *azcore.ResponseError type. -// blobClientSetMetadataOptions - blobClientSetMetadataOptions contains the optional parameters for the blobClient.SetMetadata -// method. -// LeaseAccessConditions - LeaseAccessConditions contains a group of parameters for the containerClient.GetProperties method. -// CpkInfo - CpkInfo contains a group of parameters for the blobClient.Download method. -// CpkScopeInfo - CpkScopeInfo contains a group of parameters for the blobClient.SetMetadata method. -// ModifiedAccessConditions - ModifiedAccessConditions contains a group of parameters for the containerClient.Delete method. -func (client *blobClient) SetMetadata(ctx context.Context, blobClientSetMetadataOptions *blobClientSetMetadataOptions, leaseAccessConditions *LeaseAccessConditions, cpkInfo *CpkInfo, cpkScopeInfo *CpkScopeInfo, modifiedAccessConditions *ModifiedAccessConditions) (blobClientSetMetadataResponse, error) { - req, err := client.setMetadataCreateRequest(ctx, blobClientSetMetadataOptions, leaseAccessConditions, cpkInfo, cpkScopeInfo, modifiedAccessConditions) - if err != nil { - return blobClientSetMetadataResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return blobClientSetMetadataResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusOK) { - return blobClientSetMetadataResponse{}, runtime.NewResponseError(resp) - } - return client.setMetadataHandleResponse(resp) -} - -// setMetadataCreateRequest creates the SetMetadata request. -func (client *blobClient) setMetadataCreateRequest(ctx context.Context, blobClientSetMetadataOptions *blobClientSetMetadataOptions, leaseAccessConditions *LeaseAccessConditions, cpkInfo *CpkInfo, cpkScopeInfo *CpkScopeInfo, modifiedAccessConditions *ModifiedAccessConditions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodPut, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - reqQP.Set("comp", "metadata") - if blobClientSetMetadataOptions != nil && blobClientSetMetadataOptions.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*blobClientSetMetadataOptions.Timeout), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - if blobClientSetMetadataOptions != nil && blobClientSetMetadataOptions.Metadata != nil { - for k, v := range blobClientSetMetadataOptions.Metadata { - req.Raw().Header.Set("x-ms-meta-"+k, v) - } - } - if leaseAccessConditions != nil && leaseAccessConditions.LeaseID != nil { - req.Raw().Header.Set("x-ms-lease-id", *leaseAccessConditions.LeaseID) - } - if cpkInfo != nil && cpkInfo.EncryptionKey != nil { - req.Raw().Header.Set("x-ms-encryption-key", *cpkInfo.EncryptionKey) - } - if cpkInfo != nil && cpkInfo.EncryptionKeySHA256 != nil { - req.Raw().Header.Set("x-ms-encryption-key-sha256", *cpkInfo.EncryptionKeySHA256) - } - if cpkInfo != nil && cpkInfo.EncryptionAlgorithm != nil { - req.Raw().Header.Set("x-ms-encryption-algorithm", string(*cpkInfo.EncryptionAlgorithm)) - } - if cpkScopeInfo != nil && cpkScopeInfo.EncryptionScope != nil { - req.Raw().Header.Set("x-ms-encryption-scope", *cpkScopeInfo.EncryptionScope) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfModifiedSince != nil { - req.Raw().Header.Set("If-Modified-Since", modifiedAccessConditions.IfModifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfUnmodifiedSince != nil { - req.Raw().Header.Set("If-Unmodified-Since", modifiedAccessConditions.IfUnmodifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfMatch != nil { - req.Raw().Header.Set("If-Match", *modifiedAccessConditions.IfMatch) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfNoneMatch != nil { - req.Raw().Header.Set("If-None-Match", *modifiedAccessConditions.IfNoneMatch) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfTags != nil { - req.Raw().Header.Set("x-ms-if-tags", *modifiedAccessConditions.IfTags) - } - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if blobClientSetMetadataOptions != nil && blobClientSetMetadataOptions.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *blobClientSetMetadataOptions.RequestID) - } - req.Raw().Header.Set("Accept", "application/xml") - return req, nil -} - -// setMetadataHandleResponse handles the SetMetadata response. -func (client *blobClient) setMetadataHandleResponse(resp *http.Response) (blobClientSetMetadataResponse, error) { - result := blobClientSetMetadataResponse{RawResponse: resp} - if val := resp.Header.Get("ETag"); val != "" { - result.ETag = &val - } - if val := resp.Header.Get("Last-Modified"); val != "" { - lastModified, err := time.Parse(time.RFC1123, val) - if err != nil { - return blobClientSetMetadataResponse{}, err - } - result.LastModified = &lastModified - } - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("x-ms-version-id"); val != "" { - result.VersionID = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return blobClientSetMetadataResponse{}, err - } - result.Date = &date - } - if val := resp.Header.Get("x-ms-request-server-encrypted"); val != "" { - isServerEncrypted, err := strconv.ParseBool(val) - if err != nil { - return blobClientSetMetadataResponse{}, err - } - result.IsServerEncrypted = &isServerEncrypted - } - if val := resp.Header.Get("x-ms-encryption-key-sha256"); val != "" { - result.EncryptionKeySHA256 = &val - } - if val := resp.Header.Get("x-ms-encryption-scope"); val != "" { - result.EncryptionScope = &val - } - return result, nil -} - -// SetTags - The Set Tags operation enables users to set tags on a blob. -// If the operation fails it returns an *azcore.ResponseError type. -// blobClientSetTagsOptions - blobClientSetTagsOptions contains the optional parameters for the blobClient.SetTags method. -// ModifiedAccessConditions - ModifiedAccessConditions contains a group of parameters for the containerClient.Delete method. -// LeaseAccessConditions - LeaseAccessConditions contains a group of parameters for the containerClient.GetProperties method. -func (client *blobClient) SetTags(ctx context.Context, blobClientSetTagsOptions *blobClientSetTagsOptions, modifiedAccessConditions *ModifiedAccessConditions, leaseAccessConditions *LeaseAccessConditions) (blobClientSetTagsResponse, error) { - req, err := client.setTagsCreateRequest(ctx, blobClientSetTagsOptions, modifiedAccessConditions, leaseAccessConditions) - if err != nil { - return blobClientSetTagsResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return blobClientSetTagsResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusNoContent) { - return blobClientSetTagsResponse{}, runtime.NewResponseError(resp) - } - return client.setTagsHandleResponse(resp) -} - -// setTagsCreateRequest creates the SetTags request. -func (client *blobClient) setTagsCreateRequest(ctx context.Context, blobClientSetTagsOptions *blobClientSetTagsOptions, modifiedAccessConditions *ModifiedAccessConditions, leaseAccessConditions *LeaseAccessConditions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodPut, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - reqQP.Set("comp", "tags") - if blobClientSetTagsOptions != nil && blobClientSetTagsOptions.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*blobClientSetTagsOptions.Timeout), 10)) - } - if blobClientSetTagsOptions != nil && blobClientSetTagsOptions.VersionID != nil { - reqQP.Set("versionid", *blobClientSetTagsOptions.VersionID) - } - req.Raw().URL.RawQuery = reqQP.Encode() - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if blobClientSetTagsOptions != nil && blobClientSetTagsOptions.TransactionalContentMD5 != nil { - req.Raw().Header.Set("Content-MD5", base64.StdEncoding.EncodeToString(blobClientSetTagsOptions.TransactionalContentMD5)) - } - if blobClientSetTagsOptions != nil && blobClientSetTagsOptions.TransactionalContentCRC64 != nil { - req.Raw().Header.Set("x-ms-content-crc64", base64.StdEncoding.EncodeToString(blobClientSetTagsOptions.TransactionalContentCRC64)) - } - if blobClientSetTagsOptions != nil && blobClientSetTagsOptions.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *blobClientSetTagsOptions.RequestID) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfTags != nil { - req.Raw().Header.Set("x-ms-if-tags", *modifiedAccessConditions.IfTags) - } - if leaseAccessConditions != nil && leaseAccessConditions.LeaseID != nil { - req.Raw().Header.Set("x-ms-lease-id", *leaseAccessConditions.LeaseID) - } - req.Raw().Header.Set("Accept", "application/xml") - if blobClientSetTagsOptions != nil && blobClientSetTagsOptions.Tags != nil { - return req, runtime.MarshalAsXML(req, *blobClientSetTagsOptions.Tags) - } - return req, nil -} - -// setTagsHandleResponse handles the SetTags response. -func (client *blobClient) setTagsHandleResponse(resp *http.Response) (blobClientSetTagsResponse, error) { - result := blobClientSetTagsResponse{RawResponse: resp} - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return blobClientSetTagsResponse{}, err - } - result.Date = &date - } - return result, nil -} - -// SetTier - The Set Tier operation sets the tier on a blob. The operation is allowed on a page blob in a premium storage -// account and on a block blob in a blob storage account (locally redundant storage only). A -// premium page blob's tier determines the allowed size, IOPS, and bandwidth of the blob. A block blob's tier determines Hot/Cool/Archive -// storage type. This operation does not update the blob's ETag. -// If the operation fails it returns an *azcore.ResponseError type. -// tier - Indicates the tier to be set on the blob. -// blobClientSetTierOptions - blobClientSetTierOptions contains the optional parameters for the blobClient.SetTier method. -// LeaseAccessConditions - LeaseAccessConditions contains a group of parameters for the containerClient.GetProperties method. -// ModifiedAccessConditions - ModifiedAccessConditions contains a group of parameters for the containerClient.Delete method. -func (client *blobClient) SetTier(ctx context.Context, tier AccessTier, blobClientSetTierOptions *blobClientSetTierOptions, leaseAccessConditions *LeaseAccessConditions, modifiedAccessConditions *ModifiedAccessConditions) (blobClientSetTierResponse, error) { - req, err := client.setTierCreateRequest(ctx, tier, blobClientSetTierOptions, leaseAccessConditions, modifiedAccessConditions) - if err != nil { - return blobClientSetTierResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return blobClientSetTierResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusOK, http.StatusAccepted) { - return blobClientSetTierResponse{}, runtime.NewResponseError(resp) - } - return client.setTierHandleResponse(resp) -} - -// setTierCreateRequest creates the SetTier request. -func (client *blobClient) setTierCreateRequest(ctx context.Context, tier AccessTier, blobClientSetTierOptions *blobClientSetTierOptions, leaseAccessConditions *LeaseAccessConditions, modifiedAccessConditions *ModifiedAccessConditions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodPut, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - reqQP.Set("comp", "tier") - if blobClientSetTierOptions != nil && blobClientSetTierOptions.Snapshot != nil { - reqQP.Set("snapshot", *blobClientSetTierOptions.Snapshot) - } - if blobClientSetTierOptions != nil && blobClientSetTierOptions.VersionID != nil { - reqQP.Set("versionid", *blobClientSetTierOptions.VersionID) - } - if blobClientSetTierOptions != nil && blobClientSetTierOptions.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*blobClientSetTierOptions.Timeout), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - req.Raw().Header.Set("x-ms-access-tier", string(tier)) - if blobClientSetTierOptions != nil && blobClientSetTierOptions.RehydratePriority != nil { - req.Raw().Header.Set("x-ms-rehydrate-priority", string(*blobClientSetTierOptions.RehydratePriority)) - } - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if blobClientSetTierOptions != nil && blobClientSetTierOptions.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *blobClientSetTierOptions.RequestID) - } - if leaseAccessConditions != nil && leaseAccessConditions.LeaseID != nil { - req.Raw().Header.Set("x-ms-lease-id", *leaseAccessConditions.LeaseID) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfTags != nil { - req.Raw().Header.Set("x-ms-if-tags", *modifiedAccessConditions.IfTags) - } - req.Raw().Header.Set("Accept", "application/xml") - return req, nil -} - -// setTierHandleResponse handles the SetTier response. -func (client *blobClient) setTierHandleResponse(resp *http.Response) (blobClientSetTierResponse, error) { - result := blobClientSetTierResponse{RawResponse: resp} - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - return result, nil -} - -// StartCopyFromURL - The Start Copy From URL operation copies a blob or an internet resource to a new blob. -// If the operation fails it returns an *azcore.ResponseError type. -// copySource - Specifies the name of the source page blob snapshot. This value is a URL of up to 2 KB in length that specifies -// a page blob snapshot. The value should be URL-encoded as it would appear in a request -// URI. The source blob must either be public or must be authenticated via a shared access signature. -// blobClientStartCopyFromURLOptions - blobClientStartCopyFromURLOptions contains the optional parameters for the blobClient.StartCopyFromURL -// method. -// SourceModifiedAccessConditions - SourceModifiedAccessConditions contains a group of parameters for the blobClient.StartCopyFromURL -// method. -// ModifiedAccessConditions - ModifiedAccessConditions contains a group of parameters for the containerClient.Delete method. -// LeaseAccessConditions - LeaseAccessConditions contains a group of parameters for the containerClient.GetProperties method. -func (client *blobClient) StartCopyFromURL(ctx context.Context, copySource string, blobClientStartCopyFromURLOptions *blobClientStartCopyFromURLOptions, sourceModifiedAccessConditions *SourceModifiedAccessConditions, modifiedAccessConditions *ModifiedAccessConditions, leaseAccessConditions *LeaseAccessConditions) (blobClientStartCopyFromURLResponse, error) { - req, err := client.startCopyFromURLCreateRequest(ctx, copySource, blobClientStartCopyFromURLOptions, sourceModifiedAccessConditions, modifiedAccessConditions, leaseAccessConditions) - if err != nil { - return blobClientStartCopyFromURLResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return blobClientStartCopyFromURLResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusAccepted) { - return blobClientStartCopyFromURLResponse{}, runtime.NewResponseError(resp) - } - return client.startCopyFromURLHandleResponse(resp) -} - -// startCopyFromURLCreateRequest creates the StartCopyFromURL request. -func (client *blobClient) startCopyFromURLCreateRequest(ctx context.Context, copySource string, blobClientStartCopyFromURLOptions *blobClientStartCopyFromURLOptions, sourceModifiedAccessConditions *SourceModifiedAccessConditions, modifiedAccessConditions *ModifiedAccessConditions, leaseAccessConditions *LeaseAccessConditions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodPut, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - if blobClientStartCopyFromURLOptions != nil && blobClientStartCopyFromURLOptions.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*blobClientStartCopyFromURLOptions.Timeout), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - if blobClientStartCopyFromURLOptions != nil && blobClientStartCopyFromURLOptions.Metadata != nil { - for k, v := range blobClientStartCopyFromURLOptions.Metadata { - req.Raw().Header.Set("x-ms-meta-"+k, v) - } - } - if blobClientStartCopyFromURLOptions != nil && blobClientStartCopyFromURLOptions.Tier != nil { - req.Raw().Header.Set("x-ms-access-tier", string(*blobClientStartCopyFromURLOptions.Tier)) - } - if blobClientStartCopyFromURLOptions != nil && blobClientStartCopyFromURLOptions.RehydratePriority != nil { - req.Raw().Header.Set("x-ms-rehydrate-priority", string(*blobClientStartCopyFromURLOptions.RehydratePriority)) - } - if sourceModifiedAccessConditions != nil && sourceModifiedAccessConditions.SourceIfModifiedSince != nil { - req.Raw().Header.Set("x-ms-source-if-modified-since", sourceModifiedAccessConditions.SourceIfModifiedSince.Format(time.RFC1123)) - } - if sourceModifiedAccessConditions != nil && sourceModifiedAccessConditions.SourceIfUnmodifiedSince != nil { - req.Raw().Header.Set("x-ms-source-if-unmodified-since", sourceModifiedAccessConditions.SourceIfUnmodifiedSince.Format(time.RFC1123)) - } - if sourceModifiedAccessConditions != nil && sourceModifiedAccessConditions.SourceIfMatch != nil { - req.Raw().Header.Set("x-ms-source-if-match", *sourceModifiedAccessConditions.SourceIfMatch) - } - if sourceModifiedAccessConditions != nil && sourceModifiedAccessConditions.SourceIfNoneMatch != nil { - req.Raw().Header.Set("x-ms-source-if-none-match", *sourceModifiedAccessConditions.SourceIfNoneMatch) - } - if sourceModifiedAccessConditions != nil && sourceModifiedAccessConditions.SourceIfTags != nil { - req.Raw().Header.Set("x-ms-source-if-tags", *sourceModifiedAccessConditions.SourceIfTags) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfModifiedSince != nil { - req.Raw().Header.Set("If-Modified-Since", modifiedAccessConditions.IfModifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfUnmodifiedSince != nil { - req.Raw().Header.Set("If-Unmodified-Since", modifiedAccessConditions.IfUnmodifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfMatch != nil { - req.Raw().Header.Set("If-Match", *modifiedAccessConditions.IfMatch) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfNoneMatch != nil { - req.Raw().Header.Set("If-None-Match", *modifiedAccessConditions.IfNoneMatch) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfTags != nil { - req.Raw().Header.Set("x-ms-if-tags", *modifiedAccessConditions.IfTags) - } - req.Raw().Header.Set("x-ms-copy-source", copySource) - if leaseAccessConditions != nil && leaseAccessConditions.LeaseID != nil { - req.Raw().Header.Set("x-ms-lease-id", *leaseAccessConditions.LeaseID) - } - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if blobClientStartCopyFromURLOptions != nil && blobClientStartCopyFromURLOptions.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *blobClientStartCopyFromURLOptions.RequestID) - } - if blobClientStartCopyFromURLOptions != nil && blobClientStartCopyFromURLOptions.BlobTagsString != nil { - req.Raw().Header.Set("x-ms-tags", *blobClientStartCopyFromURLOptions.BlobTagsString) - } - if blobClientStartCopyFromURLOptions != nil && blobClientStartCopyFromURLOptions.SealBlob != nil { - req.Raw().Header.Set("x-ms-seal-blob", strconv.FormatBool(*blobClientStartCopyFromURLOptions.SealBlob)) - } - if blobClientStartCopyFromURLOptions != nil && blobClientStartCopyFromURLOptions.ImmutabilityPolicyExpiry != nil { - req.Raw().Header.Set("x-ms-immutability-policy-until-date", blobClientStartCopyFromURLOptions.ImmutabilityPolicyExpiry.Format(time.RFC1123)) - } - if blobClientStartCopyFromURLOptions != nil && blobClientStartCopyFromURLOptions.ImmutabilityPolicyMode != nil { - req.Raw().Header.Set("x-ms-immutability-policy-mode", string(*blobClientStartCopyFromURLOptions.ImmutabilityPolicyMode)) - } - if blobClientStartCopyFromURLOptions != nil && blobClientStartCopyFromURLOptions.LegalHold != nil { - req.Raw().Header.Set("x-ms-legal-hold", strconv.FormatBool(*blobClientStartCopyFromURLOptions.LegalHold)) - } - req.Raw().Header.Set("Accept", "application/xml") - return req, nil -} - -// startCopyFromURLHandleResponse handles the StartCopyFromURL response. -func (client *blobClient) startCopyFromURLHandleResponse(resp *http.Response) (blobClientStartCopyFromURLResponse, error) { - result := blobClientStartCopyFromURLResponse{RawResponse: resp} - if val := resp.Header.Get("ETag"); val != "" { - result.ETag = &val - } - if val := resp.Header.Get("Last-Modified"); val != "" { - lastModified, err := time.Parse(time.RFC1123, val) - if err != nil { - return blobClientStartCopyFromURLResponse{}, err - } - result.LastModified = &lastModified - } - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("x-ms-version-id"); val != "" { - result.VersionID = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return blobClientStartCopyFromURLResponse{}, err - } - result.Date = &date - } - if val := resp.Header.Get("x-ms-copy-id"); val != "" { - result.CopyID = &val - } - if val := resp.Header.Get("x-ms-copy-status"); val != "" { - result.CopyStatus = (*CopyStatusType)(&val) - } - return result, nil -} - -// Undelete - Undelete a blob that was previously soft deleted -// If the operation fails it returns an *azcore.ResponseError type. -// options - blobClientUndeleteOptions contains the optional parameters for the blobClient.Undelete method. -func (client *blobClient) Undelete(ctx context.Context, options *blobClientUndeleteOptions) (blobClientUndeleteResponse, error) { - req, err := client.undeleteCreateRequest(ctx, options) - if err != nil { - return blobClientUndeleteResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return blobClientUndeleteResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusOK) { - return blobClientUndeleteResponse{}, runtime.NewResponseError(resp) - } - return client.undeleteHandleResponse(resp) -} - -// undeleteCreateRequest creates the Undelete request. -func (client *blobClient) undeleteCreateRequest(ctx context.Context, options *blobClientUndeleteOptions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodPut, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - reqQP.Set("comp", "undelete") - if options != nil && options.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*options.Timeout), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if options != nil && options.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *options.RequestID) - } - req.Raw().Header.Set("Accept", "application/xml") - return req, nil -} - -// undeleteHandleResponse handles the Undelete response. -func (client *blobClient) undeleteHandleResponse(resp *http.Response) (blobClientUndeleteResponse, error) { - result := blobClientUndeleteResponse{RawResponse: resp} - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return blobClientUndeleteResponse{}, err - } - result.Date = &date - } - return result, nil -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zz_generated_blockblob_client.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zz_generated_blockblob_client.go deleted file mode 100644 index 3f78a28aa406..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zz_generated_blockblob_client.go +++ /dev/null @@ -1,953 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -package azblob - -import ( - "context" - "encoding/base64" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime" - "io" - "net/http" - "strconv" - "time" -) - -type blockBlobClient struct { - endpoint string - pl runtime.Pipeline -} - -// newBlockBlobClient creates a new instance of blockBlobClient with the specified values. -// endpoint - The URL of the service account, container, or blob that is the target of the desired operation. -// pl - the pipeline used for sending requests and handling responses. -func newBlockBlobClient(endpoint string, pl runtime.Pipeline) *blockBlobClient { - client := &blockBlobClient{ - endpoint: endpoint, - pl: pl, - } - return client -} - -// CommitBlockList - The Commit Block List operation writes a blob by specifying the list of block IDs that make up the blob. -// In order to be written as part of a blob, a block must have been successfully written to the -// server in a prior Put Block operation. You can call Put Block List to update a blob by uploading only those blocks that -// have changed, then committing the new and existing blocks together. You can do -// this by specifying whether to commit a block from the committed block list or from the uncommitted block list, or to commit -// the most recently uploaded version of the block, whichever list it may -// belong to. -// If the operation fails it returns an *azcore.ResponseError type. -// blocks - Blob Blocks. -// blockBlobClientCommitBlockListOptions - blockBlobClientCommitBlockListOptions contains the optional parameters for the -// blockBlobClient.CommitBlockList method. -// BlobHTTPHeaders - BlobHTTPHeaders contains a group of parameters for the blobClient.SetHTTPHeaders method. -// LeaseAccessConditions - LeaseAccessConditions contains a group of parameters for the containerClient.GetProperties method. -// CpkInfo - CpkInfo contains a group of parameters for the blobClient.Download method. -// CpkScopeInfo - CpkScopeInfo contains a group of parameters for the blobClient.SetMetadata method. -// ModifiedAccessConditions - ModifiedAccessConditions contains a group of parameters for the containerClient.Delete method. -func (client *blockBlobClient) CommitBlockList(ctx context.Context, blocks BlockLookupList, blockBlobClientCommitBlockListOptions *blockBlobClientCommitBlockListOptions, blobHTTPHeaders *BlobHTTPHeaders, leaseAccessConditions *LeaseAccessConditions, cpkInfo *CpkInfo, cpkScopeInfo *CpkScopeInfo, modifiedAccessConditions *ModifiedAccessConditions) (blockBlobClientCommitBlockListResponse, error) { - req, err := client.commitBlockListCreateRequest(ctx, blocks, blockBlobClientCommitBlockListOptions, blobHTTPHeaders, leaseAccessConditions, cpkInfo, cpkScopeInfo, modifiedAccessConditions) - if err != nil { - return blockBlobClientCommitBlockListResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return blockBlobClientCommitBlockListResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusCreated) { - return blockBlobClientCommitBlockListResponse{}, runtime.NewResponseError(resp) - } - return client.commitBlockListHandleResponse(resp) -} - -// commitBlockListCreateRequest creates the CommitBlockList request. -func (client *blockBlobClient) commitBlockListCreateRequest(ctx context.Context, blocks BlockLookupList, blockBlobClientCommitBlockListOptions *blockBlobClientCommitBlockListOptions, blobHTTPHeaders *BlobHTTPHeaders, leaseAccessConditions *LeaseAccessConditions, cpkInfo *CpkInfo, cpkScopeInfo *CpkScopeInfo, modifiedAccessConditions *ModifiedAccessConditions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodPut, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - reqQP.Set("comp", "blocklist") - if blockBlobClientCommitBlockListOptions != nil && blockBlobClientCommitBlockListOptions.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*blockBlobClientCommitBlockListOptions.Timeout), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - if blobHTTPHeaders != nil && blobHTTPHeaders.BlobCacheControl != nil { - req.Raw().Header.Set("x-ms-blob-cache-control", *blobHTTPHeaders.BlobCacheControl) - } - if blobHTTPHeaders != nil && blobHTTPHeaders.BlobContentType != nil { - req.Raw().Header.Set("x-ms-blob-content-type", *blobHTTPHeaders.BlobContentType) - } - if blobHTTPHeaders != nil && blobHTTPHeaders.BlobContentEncoding != nil { - req.Raw().Header.Set("x-ms-blob-content-encoding", *blobHTTPHeaders.BlobContentEncoding) - } - if blobHTTPHeaders != nil && blobHTTPHeaders.BlobContentLanguage != nil { - req.Raw().Header.Set("x-ms-blob-content-language", *blobHTTPHeaders.BlobContentLanguage) - } - if blobHTTPHeaders != nil && blobHTTPHeaders.BlobContentMD5 != nil { - req.Raw().Header.Set("x-ms-blob-content-md5", base64.StdEncoding.EncodeToString(blobHTTPHeaders.BlobContentMD5)) - } - if blockBlobClientCommitBlockListOptions != nil && blockBlobClientCommitBlockListOptions.TransactionalContentMD5 != nil { - req.Raw().Header.Set("Content-MD5", base64.StdEncoding.EncodeToString(blockBlobClientCommitBlockListOptions.TransactionalContentMD5)) - } - if blockBlobClientCommitBlockListOptions != nil && blockBlobClientCommitBlockListOptions.TransactionalContentCRC64 != nil { - req.Raw().Header.Set("x-ms-content-crc64", base64.StdEncoding.EncodeToString(blockBlobClientCommitBlockListOptions.TransactionalContentCRC64)) - } - if blockBlobClientCommitBlockListOptions != nil && blockBlobClientCommitBlockListOptions.Metadata != nil { - for k, v := range blockBlobClientCommitBlockListOptions.Metadata { - req.Raw().Header.Set("x-ms-meta-"+k, v) - } - } - if leaseAccessConditions != nil && leaseAccessConditions.LeaseID != nil { - req.Raw().Header.Set("x-ms-lease-id", *leaseAccessConditions.LeaseID) - } - if blobHTTPHeaders != nil && blobHTTPHeaders.BlobContentDisposition != nil { - req.Raw().Header.Set("x-ms-blob-content-disposition", *blobHTTPHeaders.BlobContentDisposition) - } - if cpkInfo != nil && cpkInfo.EncryptionKey != nil { - req.Raw().Header.Set("x-ms-encryption-key", *cpkInfo.EncryptionKey) - } - if cpkInfo != nil && cpkInfo.EncryptionKeySHA256 != nil { - req.Raw().Header.Set("x-ms-encryption-key-sha256", *cpkInfo.EncryptionKeySHA256) - } - if cpkInfo != nil && cpkInfo.EncryptionAlgorithm != nil { - req.Raw().Header.Set("x-ms-encryption-algorithm", string(*cpkInfo.EncryptionAlgorithm)) - } - if cpkScopeInfo != nil && cpkScopeInfo.EncryptionScope != nil { - req.Raw().Header.Set("x-ms-encryption-scope", *cpkScopeInfo.EncryptionScope) - } - if blockBlobClientCommitBlockListOptions != nil && blockBlobClientCommitBlockListOptions.Tier != nil { - req.Raw().Header.Set("x-ms-access-tier", string(*blockBlobClientCommitBlockListOptions.Tier)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfModifiedSince != nil { - req.Raw().Header.Set("If-Modified-Since", modifiedAccessConditions.IfModifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfUnmodifiedSince != nil { - req.Raw().Header.Set("If-Unmodified-Since", modifiedAccessConditions.IfUnmodifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfMatch != nil { - req.Raw().Header.Set("If-Match", *modifiedAccessConditions.IfMatch) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfNoneMatch != nil { - req.Raw().Header.Set("If-None-Match", *modifiedAccessConditions.IfNoneMatch) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfTags != nil { - req.Raw().Header.Set("x-ms-if-tags", *modifiedAccessConditions.IfTags) - } - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if blockBlobClientCommitBlockListOptions != nil && blockBlobClientCommitBlockListOptions.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *blockBlobClientCommitBlockListOptions.RequestID) - } - if blockBlobClientCommitBlockListOptions != nil && blockBlobClientCommitBlockListOptions.BlobTagsString != nil { - req.Raw().Header.Set("x-ms-tags", *blockBlobClientCommitBlockListOptions.BlobTagsString) - } - if blockBlobClientCommitBlockListOptions != nil && blockBlobClientCommitBlockListOptions.ImmutabilityPolicyExpiry != nil { - req.Raw().Header.Set("x-ms-immutability-policy-until-date", blockBlobClientCommitBlockListOptions.ImmutabilityPolicyExpiry.Format(time.RFC1123)) - } - if blockBlobClientCommitBlockListOptions != nil && blockBlobClientCommitBlockListOptions.ImmutabilityPolicyMode != nil { - req.Raw().Header.Set("x-ms-immutability-policy-mode", string(*blockBlobClientCommitBlockListOptions.ImmutabilityPolicyMode)) - } - if blockBlobClientCommitBlockListOptions != nil && blockBlobClientCommitBlockListOptions.LegalHold != nil { - req.Raw().Header.Set("x-ms-legal-hold", strconv.FormatBool(*blockBlobClientCommitBlockListOptions.LegalHold)) - } - req.Raw().Header.Set("Accept", "application/xml") - return req, runtime.MarshalAsXML(req, blocks) -} - -// commitBlockListHandleResponse handles the CommitBlockList response. -func (client *blockBlobClient) commitBlockListHandleResponse(resp *http.Response) (blockBlobClientCommitBlockListResponse, error) { - result := blockBlobClientCommitBlockListResponse{RawResponse: resp} - if val := resp.Header.Get("ETag"); val != "" { - result.ETag = &val - } - if val := resp.Header.Get("Last-Modified"); val != "" { - lastModified, err := time.Parse(time.RFC1123, val) - if err != nil { - return blockBlobClientCommitBlockListResponse{}, err - } - result.LastModified = &lastModified - } - if val := resp.Header.Get("Content-MD5"); val != "" { - contentMD5, err := base64.StdEncoding.DecodeString(val) - if err != nil { - return blockBlobClientCommitBlockListResponse{}, err - } - result.ContentMD5 = contentMD5 - } - if val := resp.Header.Get("x-ms-content-crc64"); val != "" { - xMSContentCRC64, err := base64.StdEncoding.DecodeString(val) - if err != nil { - return blockBlobClientCommitBlockListResponse{}, err - } - result.XMSContentCRC64 = xMSContentCRC64 - } - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("x-ms-version-id"); val != "" { - result.VersionID = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return blockBlobClientCommitBlockListResponse{}, err - } - result.Date = &date - } - if val := resp.Header.Get("x-ms-request-server-encrypted"); val != "" { - isServerEncrypted, err := strconv.ParseBool(val) - if err != nil { - return blockBlobClientCommitBlockListResponse{}, err - } - result.IsServerEncrypted = &isServerEncrypted - } - if val := resp.Header.Get("x-ms-encryption-key-sha256"); val != "" { - result.EncryptionKeySHA256 = &val - } - if val := resp.Header.Get("x-ms-encryption-scope"); val != "" { - result.EncryptionScope = &val - } - return result, nil -} - -// GetBlockList - The Get Block List operation retrieves the list of blocks that have been uploaded as part of a block blob -// If the operation fails it returns an *azcore.ResponseError type. -// listType - Specifies whether to return the list of committed blocks, the list of uncommitted blocks, or both lists together. -// blockBlobClientGetBlockListOptions - blockBlobClientGetBlockListOptions contains the optional parameters for the blockBlobClient.GetBlockList -// method. -// LeaseAccessConditions - LeaseAccessConditions contains a group of parameters for the containerClient.GetProperties method. -// ModifiedAccessConditions - ModifiedAccessConditions contains a group of parameters for the containerClient.Delete method. -func (client *blockBlobClient) GetBlockList(ctx context.Context, listType BlockListType, blockBlobClientGetBlockListOptions *blockBlobClientGetBlockListOptions, leaseAccessConditions *LeaseAccessConditions, modifiedAccessConditions *ModifiedAccessConditions) (blockBlobClientGetBlockListResponse, error) { - req, err := client.getBlockListCreateRequest(ctx, listType, blockBlobClientGetBlockListOptions, leaseAccessConditions, modifiedAccessConditions) - if err != nil { - return blockBlobClientGetBlockListResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return blockBlobClientGetBlockListResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusOK) { - return blockBlobClientGetBlockListResponse{}, runtime.NewResponseError(resp) - } - return client.getBlockListHandleResponse(resp) -} - -// getBlockListCreateRequest creates the GetBlockList request. -func (client *blockBlobClient) getBlockListCreateRequest(ctx context.Context, listType BlockListType, blockBlobClientGetBlockListOptions *blockBlobClientGetBlockListOptions, leaseAccessConditions *LeaseAccessConditions, modifiedAccessConditions *ModifiedAccessConditions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodGet, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - reqQP.Set("comp", "blocklist") - if blockBlobClientGetBlockListOptions != nil && blockBlobClientGetBlockListOptions.Snapshot != nil { - reqQP.Set("snapshot", *blockBlobClientGetBlockListOptions.Snapshot) - } - reqQP.Set("blocklisttype", string(listType)) - if blockBlobClientGetBlockListOptions != nil && blockBlobClientGetBlockListOptions.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*blockBlobClientGetBlockListOptions.Timeout), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - if leaseAccessConditions != nil && leaseAccessConditions.LeaseID != nil { - req.Raw().Header.Set("x-ms-lease-id", *leaseAccessConditions.LeaseID) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfTags != nil { - req.Raw().Header.Set("x-ms-if-tags", *modifiedAccessConditions.IfTags) - } - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if blockBlobClientGetBlockListOptions != nil && blockBlobClientGetBlockListOptions.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *blockBlobClientGetBlockListOptions.RequestID) - } - req.Raw().Header.Set("Accept", "application/xml") - return req, nil -} - -// getBlockListHandleResponse handles the GetBlockList response. -func (client *blockBlobClient) getBlockListHandleResponse(resp *http.Response) (blockBlobClientGetBlockListResponse, error) { - result := blockBlobClientGetBlockListResponse{RawResponse: resp} - if val := resp.Header.Get("Last-Modified"); val != "" { - lastModified, err := time.Parse(time.RFC1123, val) - if err != nil { - return blockBlobClientGetBlockListResponse{}, err - } - result.LastModified = &lastModified - } - if val := resp.Header.Get("ETag"); val != "" { - result.ETag = &val - } - if val := resp.Header.Get("Content-Type"); val != "" { - result.ContentType = &val - } - if val := resp.Header.Get("x-ms-blob-content-length"); val != "" { - blobContentLength, err := strconv.ParseInt(val, 10, 64) - if err != nil { - return blockBlobClientGetBlockListResponse{}, err - } - result.BlobContentLength = &blobContentLength - } - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return blockBlobClientGetBlockListResponse{}, err - } - result.Date = &date - } - if err := runtime.UnmarshalAsXML(resp, &result.BlockList); err != nil { - return blockBlobClientGetBlockListResponse{}, err - } - return result, nil -} - -// PutBlobFromURL - The Put Blob from URL operation creates a new Block Blob where the contents of the blob are read from -// a given URL. This API is supported beginning with the 2020-04-08 version. Partial updates are not -// supported with Put Blob from URL; the content of an existing blob is overwritten with the content of the new blob. To perform -// partial updates to a block blob’s contents using a source URL, use the Put -// Block from URL API in conjunction with Put Block List. -// If the operation fails it returns an *azcore.ResponseError type. -// contentLength - The length of the request. -// copySource - Specifies the name of the source page blob snapshot. This value is a URL of up to 2 KB in length that specifies -// a page blob snapshot. The value should be URL-encoded as it would appear in a request -// URI. The source blob must either be public or must be authenticated via a shared access signature. -// blockBlobClientPutBlobFromURLOptions - blockBlobClientPutBlobFromURLOptions contains the optional parameters for the blockBlobClient.PutBlobFromURL -// method. -// BlobHTTPHeaders - BlobHTTPHeaders contains a group of parameters for the blobClient.SetHTTPHeaders method. -// LeaseAccessConditions - LeaseAccessConditions contains a group of parameters for the containerClient.GetProperties method. -// CpkInfo - CpkInfo contains a group of parameters for the blobClient.Download method. -// CpkScopeInfo - CpkScopeInfo contains a group of parameters for the blobClient.SetMetadata method. -// ModifiedAccessConditions - ModifiedAccessConditions contains a group of parameters for the containerClient.Delete method. -// SourceModifiedAccessConditions - SourceModifiedAccessConditions contains a group of parameters for the blobClient.StartCopyFromURL -// method. -func (client *blockBlobClient) PutBlobFromURL(ctx context.Context, contentLength int64, copySource string, blockBlobClientPutBlobFromURLOptions *blockBlobClientPutBlobFromURLOptions, blobHTTPHeaders *BlobHTTPHeaders, leaseAccessConditions *LeaseAccessConditions, cpkInfo *CpkInfo, cpkScopeInfo *CpkScopeInfo, modifiedAccessConditions *ModifiedAccessConditions, sourceModifiedAccessConditions *SourceModifiedAccessConditions) (blockBlobClientPutBlobFromURLResponse, error) { - req, err := client.putBlobFromURLCreateRequest(ctx, contentLength, copySource, blockBlobClientPutBlobFromURLOptions, blobHTTPHeaders, leaseAccessConditions, cpkInfo, cpkScopeInfo, modifiedAccessConditions, sourceModifiedAccessConditions) - if err != nil { - return blockBlobClientPutBlobFromURLResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return blockBlobClientPutBlobFromURLResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusCreated) { - return blockBlobClientPutBlobFromURLResponse{}, runtime.NewResponseError(resp) - } - return client.putBlobFromURLHandleResponse(resp) -} - -// putBlobFromURLCreateRequest creates the PutBlobFromURL request. -func (client *blockBlobClient) putBlobFromURLCreateRequest(ctx context.Context, contentLength int64, copySource string, blockBlobClientPutBlobFromURLOptions *blockBlobClientPutBlobFromURLOptions, blobHTTPHeaders *BlobHTTPHeaders, leaseAccessConditions *LeaseAccessConditions, cpkInfo *CpkInfo, cpkScopeInfo *CpkScopeInfo, modifiedAccessConditions *ModifiedAccessConditions, sourceModifiedAccessConditions *SourceModifiedAccessConditions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodPut, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - if blockBlobClientPutBlobFromURLOptions != nil && blockBlobClientPutBlobFromURLOptions.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*blockBlobClientPutBlobFromURLOptions.Timeout), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - req.Raw().Header.Set("x-ms-blob-type", "BlockBlob") - if blockBlobClientPutBlobFromURLOptions != nil && blockBlobClientPutBlobFromURLOptions.TransactionalContentMD5 != nil { - req.Raw().Header.Set("Content-MD5", base64.StdEncoding.EncodeToString(blockBlobClientPutBlobFromURLOptions.TransactionalContentMD5)) - } - req.Raw().Header.Set("Content-Length", strconv.FormatInt(contentLength, 10)) - if blobHTTPHeaders != nil && blobHTTPHeaders.BlobContentType != nil { - req.Raw().Header.Set("x-ms-blob-content-type", *blobHTTPHeaders.BlobContentType) - } - if blobHTTPHeaders != nil && blobHTTPHeaders.BlobContentEncoding != nil { - req.Raw().Header.Set("x-ms-blob-content-encoding", *blobHTTPHeaders.BlobContentEncoding) - } - if blobHTTPHeaders != nil && blobHTTPHeaders.BlobContentLanguage != nil { - req.Raw().Header.Set("x-ms-blob-content-language", *blobHTTPHeaders.BlobContentLanguage) - } - if blobHTTPHeaders != nil && blobHTTPHeaders.BlobContentMD5 != nil { - req.Raw().Header.Set("x-ms-blob-content-md5", base64.StdEncoding.EncodeToString(blobHTTPHeaders.BlobContentMD5)) - } - if blobHTTPHeaders != nil && blobHTTPHeaders.BlobCacheControl != nil { - req.Raw().Header.Set("x-ms-blob-cache-control", *blobHTTPHeaders.BlobCacheControl) - } - if blockBlobClientPutBlobFromURLOptions != nil && blockBlobClientPutBlobFromURLOptions.Metadata != nil { - for k, v := range blockBlobClientPutBlobFromURLOptions.Metadata { - req.Raw().Header.Set("x-ms-meta-"+k, v) - } - } - if leaseAccessConditions != nil && leaseAccessConditions.LeaseID != nil { - req.Raw().Header.Set("x-ms-lease-id", *leaseAccessConditions.LeaseID) - } - if blobHTTPHeaders != nil && blobHTTPHeaders.BlobContentDisposition != nil { - req.Raw().Header.Set("x-ms-blob-content-disposition", *blobHTTPHeaders.BlobContentDisposition) - } - if cpkInfo != nil && cpkInfo.EncryptionKey != nil { - req.Raw().Header.Set("x-ms-encryption-key", *cpkInfo.EncryptionKey) - } - if cpkInfo != nil && cpkInfo.EncryptionKeySHA256 != nil { - req.Raw().Header.Set("x-ms-encryption-key-sha256", *cpkInfo.EncryptionKeySHA256) - } - if cpkInfo != nil && cpkInfo.EncryptionAlgorithm != nil { - req.Raw().Header.Set("x-ms-encryption-algorithm", string(*cpkInfo.EncryptionAlgorithm)) - } - if cpkScopeInfo != nil && cpkScopeInfo.EncryptionScope != nil { - req.Raw().Header.Set("x-ms-encryption-scope", *cpkScopeInfo.EncryptionScope) - } - if blockBlobClientPutBlobFromURLOptions != nil && blockBlobClientPutBlobFromURLOptions.Tier != nil { - req.Raw().Header.Set("x-ms-access-tier", string(*blockBlobClientPutBlobFromURLOptions.Tier)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfModifiedSince != nil { - req.Raw().Header.Set("If-Modified-Since", modifiedAccessConditions.IfModifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfUnmodifiedSince != nil { - req.Raw().Header.Set("If-Unmodified-Since", modifiedAccessConditions.IfUnmodifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfMatch != nil { - req.Raw().Header.Set("If-Match", *modifiedAccessConditions.IfMatch) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfNoneMatch != nil { - req.Raw().Header.Set("If-None-Match", *modifiedAccessConditions.IfNoneMatch) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfTags != nil { - req.Raw().Header.Set("x-ms-if-tags", *modifiedAccessConditions.IfTags) - } - if sourceModifiedAccessConditions != nil && sourceModifiedAccessConditions.SourceIfModifiedSince != nil { - req.Raw().Header.Set("x-ms-source-if-modified-since", sourceModifiedAccessConditions.SourceIfModifiedSince.Format(time.RFC1123)) - } - if sourceModifiedAccessConditions != nil && sourceModifiedAccessConditions.SourceIfUnmodifiedSince != nil { - req.Raw().Header.Set("x-ms-source-if-unmodified-since", sourceModifiedAccessConditions.SourceIfUnmodifiedSince.Format(time.RFC1123)) - } - if sourceModifiedAccessConditions != nil && sourceModifiedAccessConditions.SourceIfMatch != nil { - req.Raw().Header.Set("x-ms-source-if-match", *sourceModifiedAccessConditions.SourceIfMatch) - } - if sourceModifiedAccessConditions != nil && sourceModifiedAccessConditions.SourceIfNoneMatch != nil { - req.Raw().Header.Set("x-ms-source-if-none-match", *sourceModifiedAccessConditions.SourceIfNoneMatch) - } - if sourceModifiedAccessConditions != nil && sourceModifiedAccessConditions.SourceIfTags != nil { - req.Raw().Header.Set("x-ms-source-if-tags", *sourceModifiedAccessConditions.SourceIfTags) - } - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if blockBlobClientPutBlobFromURLOptions != nil && blockBlobClientPutBlobFromURLOptions.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *blockBlobClientPutBlobFromURLOptions.RequestID) - } - if blockBlobClientPutBlobFromURLOptions != nil && blockBlobClientPutBlobFromURLOptions.SourceContentMD5 != nil { - req.Raw().Header.Set("x-ms-source-content-md5", base64.StdEncoding.EncodeToString(blockBlobClientPutBlobFromURLOptions.SourceContentMD5)) - } - if blockBlobClientPutBlobFromURLOptions != nil && blockBlobClientPutBlobFromURLOptions.BlobTagsString != nil { - req.Raw().Header.Set("x-ms-tags", *blockBlobClientPutBlobFromURLOptions.BlobTagsString) - } - req.Raw().Header.Set("x-ms-copy-source", copySource) - if blockBlobClientPutBlobFromURLOptions != nil && blockBlobClientPutBlobFromURLOptions.CopySourceBlobProperties != nil { - req.Raw().Header.Set("x-ms-copy-source-blob-properties", strconv.FormatBool(*blockBlobClientPutBlobFromURLOptions.CopySourceBlobProperties)) - } - if blockBlobClientPutBlobFromURLOptions != nil && blockBlobClientPutBlobFromURLOptions.CopySourceAuthorization != nil { - req.Raw().Header.Set("x-ms-copy-source-authorization", *blockBlobClientPutBlobFromURLOptions.CopySourceAuthorization) - } - req.Raw().Header.Set("Accept", "application/xml") - return req, nil -} - -// putBlobFromURLHandleResponse handles the PutBlobFromURL response. -func (client *blockBlobClient) putBlobFromURLHandleResponse(resp *http.Response) (blockBlobClientPutBlobFromURLResponse, error) { - result := blockBlobClientPutBlobFromURLResponse{RawResponse: resp} - if val := resp.Header.Get("ETag"); val != "" { - result.ETag = &val - } - if val := resp.Header.Get("Last-Modified"); val != "" { - lastModified, err := time.Parse(time.RFC1123, val) - if err != nil { - return blockBlobClientPutBlobFromURLResponse{}, err - } - result.LastModified = &lastModified - } - if val := resp.Header.Get("Content-MD5"); val != "" { - contentMD5, err := base64.StdEncoding.DecodeString(val) - if err != nil { - return blockBlobClientPutBlobFromURLResponse{}, err - } - result.ContentMD5 = contentMD5 - } - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("x-ms-version-id"); val != "" { - result.VersionID = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return blockBlobClientPutBlobFromURLResponse{}, err - } - result.Date = &date - } - if val := resp.Header.Get("x-ms-request-server-encrypted"); val != "" { - isServerEncrypted, err := strconv.ParseBool(val) - if err != nil { - return blockBlobClientPutBlobFromURLResponse{}, err - } - result.IsServerEncrypted = &isServerEncrypted - } - if val := resp.Header.Get("x-ms-encryption-key-sha256"); val != "" { - result.EncryptionKeySHA256 = &val - } - if val := resp.Header.Get("x-ms-encryption-scope"); val != "" { - result.EncryptionScope = &val - } - return result, nil -} - -// StageBlock - The Stage Block operation creates a new block to be committed as part of a blob -// If the operation fails it returns an *azcore.ResponseError type. -// blockID - A valid Base64 string value that identifies the block. Prior to encoding, the string must be less than or equal -// to 64 bytes in size. For a given blob, the length of the value specified for the blockid -// parameter must be the same size for each block. -// contentLength - The length of the request. -// body - Initial data -// blockBlobClientStageBlockOptions - blockBlobClientStageBlockOptions contains the optional parameters for the blockBlobClient.StageBlock -// method. -// LeaseAccessConditions - LeaseAccessConditions contains a group of parameters for the containerClient.GetProperties method. -// CpkInfo - CpkInfo contains a group of parameters for the blobClient.Download method. -// CpkScopeInfo - CpkScopeInfo contains a group of parameters for the blobClient.SetMetadata method. -func (client *blockBlobClient) StageBlock(ctx context.Context, blockID string, contentLength int64, body io.ReadSeekCloser, blockBlobClientStageBlockOptions *blockBlobClientStageBlockOptions, leaseAccessConditions *LeaseAccessConditions, cpkInfo *CpkInfo, cpkScopeInfo *CpkScopeInfo) (blockBlobClientStageBlockResponse, error) { - req, err := client.stageBlockCreateRequest(ctx, blockID, contentLength, body, blockBlobClientStageBlockOptions, leaseAccessConditions, cpkInfo, cpkScopeInfo) - if err != nil { - return blockBlobClientStageBlockResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return blockBlobClientStageBlockResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusCreated) { - return blockBlobClientStageBlockResponse{}, runtime.NewResponseError(resp) - } - return client.stageBlockHandleResponse(resp) -} - -// stageBlockCreateRequest creates the StageBlock request. -func (client *blockBlobClient) stageBlockCreateRequest(ctx context.Context, blockID string, contentLength int64, body io.ReadSeekCloser, blockBlobClientStageBlockOptions *blockBlobClientStageBlockOptions, leaseAccessConditions *LeaseAccessConditions, cpkInfo *CpkInfo, cpkScopeInfo *CpkScopeInfo) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodPut, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - reqQP.Set("comp", "block") - reqQP.Set("blockid", blockID) - if blockBlobClientStageBlockOptions != nil && blockBlobClientStageBlockOptions.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*blockBlobClientStageBlockOptions.Timeout), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - req.Raw().Header.Set("Content-Length", strconv.FormatInt(contentLength, 10)) - if blockBlobClientStageBlockOptions != nil && blockBlobClientStageBlockOptions.TransactionalContentMD5 != nil { - req.Raw().Header.Set("Content-MD5", base64.StdEncoding.EncodeToString(blockBlobClientStageBlockOptions.TransactionalContentMD5)) - } - if blockBlobClientStageBlockOptions != nil && blockBlobClientStageBlockOptions.TransactionalContentCRC64 != nil { - req.Raw().Header.Set("x-ms-content-crc64", base64.StdEncoding.EncodeToString(blockBlobClientStageBlockOptions.TransactionalContentCRC64)) - } - if leaseAccessConditions != nil && leaseAccessConditions.LeaseID != nil { - req.Raw().Header.Set("x-ms-lease-id", *leaseAccessConditions.LeaseID) - } - if cpkInfo != nil && cpkInfo.EncryptionKey != nil { - req.Raw().Header.Set("x-ms-encryption-key", *cpkInfo.EncryptionKey) - } - if cpkInfo != nil && cpkInfo.EncryptionKeySHA256 != nil { - req.Raw().Header.Set("x-ms-encryption-key-sha256", *cpkInfo.EncryptionKeySHA256) - } - if cpkInfo != nil && cpkInfo.EncryptionAlgorithm != nil { - req.Raw().Header.Set("x-ms-encryption-algorithm", string(*cpkInfo.EncryptionAlgorithm)) - } - if cpkScopeInfo != nil && cpkScopeInfo.EncryptionScope != nil { - req.Raw().Header.Set("x-ms-encryption-scope", *cpkScopeInfo.EncryptionScope) - } - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if blockBlobClientStageBlockOptions != nil && blockBlobClientStageBlockOptions.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *blockBlobClientStageBlockOptions.RequestID) - } - req.Raw().Header.Set("Accept", "application/xml") - return req, req.SetBody(body, "application/octet-stream") -} - -// stageBlockHandleResponse handles the StageBlock response. -func (client *blockBlobClient) stageBlockHandleResponse(resp *http.Response) (blockBlobClientStageBlockResponse, error) { - result := blockBlobClientStageBlockResponse{RawResponse: resp} - if val := resp.Header.Get("Content-MD5"); val != "" { - contentMD5, err := base64.StdEncoding.DecodeString(val) - if err != nil { - return blockBlobClientStageBlockResponse{}, err - } - result.ContentMD5 = contentMD5 - } - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return blockBlobClientStageBlockResponse{}, err - } - result.Date = &date - } - if val := resp.Header.Get("x-ms-content-crc64"); val != "" { - xMSContentCRC64, err := base64.StdEncoding.DecodeString(val) - if err != nil { - return blockBlobClientStageBlockResponse{}, err - } - result.XMSContentCRC64 = xMSContentCRC64 - } - if val := resp.Header.Get("x-ms-request-server-encrypted"); val != "" { - isServerEncrypted, err := strconv.ParseBool(val) - if err != nil { - return blockBlobClientStageBlockResponse{}, err - } - result.IsServerEncrypted = &isServerEncrypted - } - if val := resp.Header.Get("x-ms-encryption-key-sha256"); val != "" { - result.EncryptionKeySHA256 = &val - } - if val := resp.Header.Get("x-ms-encryption-scope"); val != "" { - result.EncryptionScope = &val - } - return result, nil -} - -// StageBlockFromURL - The Stage Block operation creates a new block to be committed as part of a blob where the contents -// are read from a URL. -// If the operation fails it returns an *azcore.ResponseError type. -// blockID - A valid Base64 string value that identifies the block. Prior to encoding, the string must be less than or equal -// to 64 bytes in size. For a given blob, the length of the value specified for the blockid -// parameter must be the same size for each block. -// contentLength - The length of the request. -// sourceURL - Specify a URL to the copy source. -// blockBlobClientStageBlockFromURLOptions - blockBlobClientStageBlockFromURLOptions contains the optional parameters for -// the blockBlobClient.StageBlockFromURL method. -// CpkInfo - CpkInfo contains a group of parameters for the blobClient.Download method. -// CpkScopeInfo - CpkScopeInfo contains a group of parameters for the blobClient.SetMetadata method. -// LeaseAccessConditions - LeaseAccessConditions contains a group of parameters for the containerClient.GetProperties method. -// SourceModifiedAccessConditions - SourceModifiedAccessConditions contains a group of parameters for the blobClient.StartCopyFromURL -// method. -func (client *blockBlobClient) StageBlockFromURL(ctx context.Context, blockID string, contentLength int64, sourceURL string, blockBlobClientStageBlockFromURLOptions *blockBlobClientStageBlockFromURLOptions, cpkInfo *CpkInfo, cpkScopeInfo *CpkScopeInfo, leaseAccessConditions *LeaseAccessConditions, sourceModifiedAccessConditions *SourceModifiedAccessConditions) (blockBlobClientStageBlockFromURLResponse, error) { - req, err := client.stageBlockFromURLCreateRequest(ctx, blockID, contentLength, sourceURL, blockBlobClientStageBlockFromURLOptions, cpkInfo, cpkScopeInfo, leaseAccessConditions, sourceModifiedAccessConditions) - if err != nil { - return blockBlobClientStageBlockFromURLResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return blockBlobClientStageBlockFromURLResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusCreated) { - return blockBlobClientStageBlockFromURLResponse{}, runtime.NewResponseError(resp) - } - return client.stageBlockFromURLHandleResponse(resp) -} - -// stageBlockFromURLCreateRequest creates the StageBlockFromURL request. -func (client *blockBlobClient) stageBlockFromURLCreateRequest(ctx context.Context, blockID string, contentLength int64, sourceURL string, blockBlobClientStageBlockFromURLOptions *blockBlobClientStageBlockFromURLOptions, cpkInfo *CpkInfo, cpkScopeInfo *CpkScopeInfo, leaseAccessConditions *LeaseAccessConditions, sourceModifiedAccessConditions *SourceModifiedAccessConditions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodPut, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - reqQP.Set("comp", "block") - reqQP.Set("blockid", blockID) - if blockBlobClientStageBlockFromURLOptions != nil && blockBlobClientStageBlockFromURLOptions.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*blockBlobClientStageBlockFromURLOptions.Timeout), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - req.Raw().Header.Set("Content-Length", strconv.FormatInt(contentLength, 10)) - req.Raw().Header.Set("x-ms-copy-source", sourceURL) - if blockBlobClientStageBlockFromURLOptions != nil && blockBlobClientStageBlockFromURLOptions.SourceRange != nil { - req.Raw().Header.Set("x-ms-source-range", *blockBlobClientStageBlockFromURLOptions.SourceRange) - } - if blockBlobClientStageBlockFromURLOptions != nil && blockBlobClientStageBlockFromURLOptions.SourceContentMD5 != nil { - req.Raw().Header.Set("x-ms-source-content-md5", base64.StdEncoding.EncodeToString(blockBlobClientStageBlockFromURLOptions.SourceContentMD5)) - } - if blockBlobClientStageBlockFromURLOptions != nil && blockBlobClientStageBlockFromURLOptions.SourceContentcrc64 != nil { - req.Raw().Header.Set("x-ms-source-content-crc64", base64.StdEncoding.EncodeToString(blockBlobClientStageBlockFromURLOptions.SourceContentcrc64)) - } - if cpkInfo != nil && cpkInfo.EncryptionKey != nil { - req.Raw().Header.Set("x-ms-encryption-key", *cpkInfo.EncryptionKey) - } - if cpkInfo != nil && cpkInfo.EncryptionKeySHA256 != nil { - req.Raw().Header.Set("x-ms-encryption-key-sha256", *cpkInfo.EncryptionKeySHA256) - } - if cpkInfo != nil && cpkInfo.EncryptionAlgorithm != nil { - req.Raw().Header.Set("x-ms-encryption-algorithm", string(*cpkInfo.EncryptionAlgorithm)) - } - if cpkScopeInfo != nil && cpkScopeInfo.EncryptionScope != nil { - req.Raw().Header.Set("x-ms-encryption-scope", *cpkScopeInfo.EncryptionScope) - } - if leaseAccessConditions != nil && leaseAccessConditions.LeaseID != nil { - req.Raw().Header.Set("x-ms-lease-id", *leaseAccessConditions.LeaseID) - } - if sourceModifiedAccessConditions != nil && sourceModifiedAccessConditions.SourceIfModifiedSince != nil { - req.Raw().Header.Set("x-ms-source-if-modified-since", sourceModifiedAccessConditions.SourceIfModifiedSince.Format(time.RFC1123)) - } - if sourceModifiedAccessConditions != nil && sourceModifiedAccessConditions.SourceIfUnmodifiedSince != nil { - req.Raw().Header.Set("x-ms-source-if-unmodified-since", sourceModifiedAccessConditions.SourceIfUnmodifiedSince.Format(time.RFC1123)) - } - if sourceModifiedAccessConditions != nil && sourceModifiedAccessConditions.SourceIfMatch != nil { - req.Raw().Header.Set("x-ms-source-if-match", *sourceModifiedAccessConditions.SourceIfMatch) - } - if sourceModifiedAccessConditions != nil && sourceModifiedAccessConditions.SourceIfNoneMatch != nil { - req.Raw().Header.Set("x-ms-source-if-none-match", *sourceModifiedAccessConditions.SourceIfNoneMatch) - } - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if blockBlobClientStageBlockFromURLOptions != nil && blockBlobClientStageBlockFromURLOptions.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *blockBlobClientStageBlockFromURLOptions.RequestID) - } - if blockBlobClientStageBlockFromURLOptions != nil && blockBlobClientStageBlockFromURLOptions.CopySourceAuthorization != nil { - req.Raw().Header.Set("x-ms-copy-source-authorization", *blockBlobClientStageBlockFromURLOptions.CopySourceAuthorization) - } - req.Raw().Header.Set("Accept", "application/xml") - return req, nil -} - -// stageBlockFromURLHandleResponse handles the StageBlockFromURL response. -func (client *blockBlobClient) stageBlockFromURLHandleResponse(resp *http.Response) (blockBlobClientStageBlockFromURLResponse, error) { - result := blockBlobClientStageBlockFromURLResponse{RawResponse: resp} - if val := resp.Header.Get("Content-MD5"); val != "" { - contentMD5, err := base64.StdEncoding.DecodeString(val) - if err != nil { - return blockBlobClientStageBlockFromURLResponse{}, err - } - result.ContentMD5 = contentMD5 - } - if val := resp.Header.Get("x-ms-content-crc64"); val != "" { - xMSContentCRC64, err := base64.StdEncoding.DecodeString(val) - if err != nil { - return blockBlobClientStageBlockFromURLResponse{}, err - } - result.XMSContentCRC64 = xMSContentCRC64 - } - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return blockBlobClientStageBlockFromURLResponse{}, err - } - result.Date = &date - } - if val := resp.Header.Get("x-ms-request-server-encrypted"); val != "" { - isServerEncrypted, err := strconv.ParseBool(val) - if err != nil { - return blockBlobClientStageBlockFromURLResponse{}, err - } - result.IsServerEncrypted = &isServerEncrypted - } - if val := resp.Header.Get("x-ms-encryption-key-sha256"); val != "" { - result.EncryptionKeySHA256 = &val - } - if val := resp.Header.Get("x-ms-encryption-scope"); val != "" { - result.EncryptionScope = &val - } - return result, nil -} - -// Upload - The Upload Block Blob operation updates the content of an existing block blob. Updating an existing block blob -// overwrites any existing metadata on the blob. Partial updates are not supported with Put -// Blob; the content of the existing blob is overwritten with the content of the new blob. To perform a partial update of -// the content of a block blob, use the Put Block List operation. -// If the operation fails it returns an *azcore.ResponseError type. -// contentLength - The length of the request. -// body - Initial data -// blockBlobClientUploadOptions - blockBlobClientUploadOptions contains the optional parameters for the blockBlobClient.Upload -// method. -// BlobHTTPHeaders - BlobHTTPHeaders contains a group of parameters for the blobClient.SetHTTPHeaders method. -// LeaseAccessConditions - LeaseAccessConditions contains a group of parameters for the containerClient.GetProperties method. -// CpkInfo - CpkInfo contains a group of parameters for the blobClient.Download method. -// CpkScopeInfo - CpkScopeInfo contains a group of parameters for the blobClient.SetMetadata method. -// ModifiedAccessConditions - ModifiedAccessConditions contains a group of parameters for the containerClient.Delete method. -func (client *blockBlobClient) Upload(ctx context.Context, contentLength int64, body io.ReadSeekCloser, blockBlobClientUploadOptions *blockBlobClientUploadOptions, blobHTTPHeaders *BlobHTTPHeaders, leaseAccessConditions *LeaseAccessConditions, cpkInfo *CpkInfo, cpkScopeInfo *CpkScopeInfo, modifiedAccessConditions *ModifiedAccessConditions) (blockBlobClientUploadResponse, error) { - req, err := client.uploadCreateRequest(ctx, contentLength, body, blockBlobClientUploadOptions, blobHTTPHeaders, leaseAccessConditions, cpkInfo, cpkScopeInfo, modifiedAccessConditions) - if err != nil { - return blockBlobClientUploadResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return blockBlobClientUploadResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusCreated) { - return blockBlobClientUploadResponse{}, runtime.NewResponseError(resp) - } - return client.uploadHandleResponse(resp) -} - -// uploadCreateRequest creates the Upload request. -func (client *blockBlobClient) uploadCreateRequest(ctx context.Context, contentLength int64, body io.ReadSeekCloser, blockBlobClientUploadOptions *blockBlobClientUploadOptions, blobHTTPHeaders *BlobHTTPHeaders, leaseAccessConditions *LeaseAccessConditions, cpkInfo *CpkInfo, cpkScopeInfo *CpkScopeInfo, modifiedAccessConditions *ModifiedAccessConditions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodPut, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - if blockBlobClientUploadOptions != nil && blockBlobClientUploadOptions.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*blockBlobClientUploadOptions.Timeout), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - req.Raw().Header.Set("x-ms-blob-type", "BlockBlob") - if blockBlobClientUploadOptions != nil && blockBlobClientUploadOptions.TransactionalContentMD5 != nil { - req.Raw().Header.Set("Content-MD5", base64.StdEncoding.EncodeToString(blockBlobClientUploadOptions.TransactionalContentMD5)) - } - req.Raw().Header.Set("Content-Length", strconv.FormatInt(contentLength, 10)) - if blobHTTPHeaders != nil && blobHTTPHeaders.BlobContentType != nil { - req.Raw().Header.Set("x-ms-blob-content-type", *blobHTTPHeaders.BlobContentType) - } - if blobHTTPHeaders != nil && blobHTTPHeaders.BlobContentEncoding != nil { - req.Raw().Header.Set("x-ms-blob-content-encoding", *blobHTTPHeaders.BlobContentEncoding) - } - if blobHTTPHeaders != nil && blobHTTPHeaders.BlobContentLanguage != nil { - req.Raw().Header.Set("x-ms-blob-content-language", *blobHTTPHeaders.BlobContentLanguage) - } - if blobHTTPHeaders != nil && blobHTTPHeaders.BlobContentMD5 != nil { - req.Raw().Header.Set("x-ms-blob-content-md5", base64.StdEncoding.EncodeToString(blobHTTPHeaders.BlobContentMD5)) - } - if blobHTTPHeaders != nil && blobHTTPHeaders.BlobCacheControl != nil { - req.Raw().Header.Set("x-ms-blob-cache-control", *blobHTTPHeaders.BlobCacheControl) - } - if blockBlobClientUploadOptions != nil && blockBlobClientUploadOptions.Metadata != nil { - for k, v := range blockBlobClientUploadOptions.Metadata { - req.Raw().Header.Set("x-ms-meta-"+k, v) - } - } - if leaseAccessConditions != nil && leaseAccessConditions.LeaseID != nil { - req.Raw().Header.Set("x-ms-lease-id", *leaseAccessConditions.LeaseID) - } - if blobHTTPHeaders != nil && blobHTTPHeaders.BlobContentDisposition != nil { - req.Raw().Header.Set("x-ms-blob-content-disposition", *blobHTTPHeaders.BlobContentDisposition) - } - if cpkInfo != nil && cpkInfo.EncryptionKey != nil { - req.Raw().Header.Set("x-ms-encryption-key", *cpkInfo.EncryptionKey) - } - if cpkInfo != nil && cpkInfo.EncryptionKeySHA256 != nil { - req.Raw().Header.Set("x-ms-encryption-key-sha256", *cpkInfo.EncryptionKeySHA256) - } - if cpkInfo != nil && cpkInfo.EncryptionAlgorithm != nil { - req.Raw().Header.Set("x-ms-encryption-algorithm", string(*cpkInfo.EncryptionAlgorithm)) - } - if cpkScopeInfo != nil && cpkScopeInfo.EncryptionScope != nil { - req.Raw().Header.Set("x-ms-encryption-scope", *cpkScopeInfo.EncryptionScope) - } - if blockBlobClientUploadOptions != nil && blockBlobClientUploadOptions.Tier != nil { - req.Raw().Header.Set("x-ms-access-tier", string(*blockBlobClientUploadOptions.Tier)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfModifiedSince != nil { - req.Raw().Header.Set("If-Modified-Since", modifiedAccessConditions.IfModifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfUnmodifiedSince != nil { - req.Raw().Header.Set("If-Unmodified-Since", modifiedAccessConditions.IfUnmodifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfMatch != nil { - req.Raw().Header.Set("If-Match", *modifiedAccessConditions.IfMatch) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfNoneMatch != nil { - req.Raw().Header.Set("If-None-Match", *modifiedAccessConditions.IfNoneMatch) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfTags != nil { - req.Raw().Header.Set("x-ms-if-tags", *modifiedAccessConditions.IfTags) - } - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if blockBlobClientUploadOptions != nil && blockBlobClientUploadOptions.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *blockBlobClientUploadOptions.RequestID) - } - if blockBlobClientUploadOptions != nil && blockBlobClientUploadOptions.BlobTagsString != nil { - req.Raw().Header.Set("x-ms-tags", *blockBlobClientUploadOptions.BlobTagsString) - } - if blockBlobClientUploadOptions != nil && blockBlobClientUploadOptions.ImmutabilityPolicyExpiry != nil { - req.Raw().Header.Set("x-ms-immutability-policy-until-date", blockBlobClientUploadOptions.ImmutabilityPolicyExpiry.Format(time.RFC1123)) - } - if blockBlobClientUploadOptions != nil && blockBlobClientUploadOptions.ImmutabilityPolicyMode != nil { - req.Raw().Header.Set("x-ms-immutability-policy-mode", string(*blockBlobClientUploadOptions.ImmutabilityPolicyMode)) - } - if blockBlobClientUploadOptions != nil && blockBlobClientUploadOptions.LegalHold != nil { - req.Raw().Header.Set("x-ms-legal-hold", strconv.FormatBool(*blockBlobClientUploadOptions.LegalHold)) - } - req.Raw().Header.Set("Accept", "application/xml") - return req, req.SetBody(body, "application/octet-stream") -} - -// uploadHandleResponse handles the Upload response. -func (client *blockBlobClient) uploadHandleResponse(resp *http.Response) (blockBlobClientUploadResponse, error) { - result := blockBlobClientUploadResponse{RawResponse: resp} - if val := resp.Header.Get("ETag"); val != "" { - result.ETag = &val - } - if val := resp.Header.Get("Last-Modified"); val != "" { - lastModified, err := time.Parse(time.RFC1123, val) - if err != nil { - return blockBlobClientUploadResponse{}, err - } - result.LastModified = &lastModified - } - if val := resp.Header.Get("Content-MD5"); val != "" { - contentMD5, err := base64.StdEncoding.DecodeString(val) - if err != nil { - return blockBlobClientUploadResponse{}, err - } - result.ContentMD5 = contentMD5 - } - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("x-ms-version-id"); val != "" { - result.VersionID = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return blockBlobClientUploadResponse{}, err - } - result.Date = &date - } - if val := resp.Header.Get("x-ms-request-server-encrypted"); val != "" { - isServerEncrypted, err := strconv.ParseBool(val) - if err != nil { - return blockBlobClientUploadResponse{}, err - } - result.IsServerEncrypted = &isServerEncrypted - } - if val := resp.Header.Get("x-ms-encryption-key-sha256"); val != "" { - result.EncryptionKeySHA256 = &val - } - if val := resp.Header.Get("x-ms-encryption-scope"); val != "" { - result.EncryptionScope = &val - } - return result, nil -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zz_generated_constants.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zz_generated_constants.go deleted file mode 100644 index 2348df04a43a..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zz_generated_constants.go +++ /dev/null @@ -1,841 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -package azblob - -const ( - moduleName = "azblob" - moduleVersion = "v0.4.1" -) - -// AccessTier enum -type AccessTier string - -const ( - AccessTierArchive AccessTier = "Archive" - AccessTierCool AccessTier = "Cool" - AccessTierHot AccessTier = "Hot" - AccessTierP10 AccessTier = "P10" - AccessTierP15 AccessTier = "P15" - AccessTierP20 AccessTier = "P20" - AccessTierP30 AccessTier = "P30" - AccessTierP4 AccessTier = "P4" - AccessTierP40 AccessTier = "P40" - AccessTierP50 AccessTier = "P50" - AccessTierP6 AccessTier = "P6" - AccessTierP60 AccessTier = "P60" - AccessTierP70 AccessTier = "P70" - AccessTierP80 AccessTier = "P80" -) - -// PossibleAccessTierValues returns the possible values for the AccessTier const type. -func PossibleAccessTierValues() []AccessTier { - return []AccessTier{ - AccessTierArchive, - AccessTierCool, - AccessTierHot, - AccessTierP10, - AccessTierP15, - AccessTierP20, - AccessTierP30, - AccessTierP4, - AccessTierP40, - AccessTierP50, - AccessTierP6, - AccessTierP60, - AccessTierP70, - AccessTierP80, - } -} - -// ToPtr returns a *AccessTier pointing to the current value. -func (c AccessTier) ToPtr() *AccessTier { - return &c -} - -// AccountKind enum -type AccountKind string - -const ( - AccountKindStorage AccountKind = "Storage" - AccountKindBlobStorage AccountKind = "BlobStorage" - AccountKindStorageV2 AccountKind = "StorageV2" - AccountKindFileStorage AccountKind = "FileStorage" - AccountKindBlockBlobStorage AccountKind = "BlockBlobStorage" -) - -// PossibleAccountKindValues returns the possible values for the AccountKind const type. -func PossibleAccountKindValues() []AccountKind { - return []AccountKind{ - AccountKindStorage, - AccountKindBlobStorage, - AccountKindStorageV2, - AccountKindFileStorage, - AccountKindBlockBlobStorage, - } -} - -// ToPtr returns a *AccountKind pointing to the current value. -func (c AccountKind) ToPtr() *AccountKind { - return &c -} - -// ArchiveStatus enum -type ArchiveStatus string - -const ( - ArchiveStatusRehydratePendingToCool ArchiveStatus = "rehydrate-pending-to-cool" - ArchiveStatusRehydratePendingToHot ArchiveStatus = "rehydrate-pending-to-hot" -) - -// PossibleArchiveStatusValues returns the possible values for the ArchiveStatus const type. -func PossibleArchiveStatusValues() []ArchiveStatus { - return []ArchiveStatus{ - ArchiveStatusRehydratePendingToCool, - ArchiveStatusRehydratePendingToHot, - } -} - -// ToPtr returns a *ArchiveStatus pointing to the current value. -func (c ArchiveStatus) ToPtr() *ArchiveStatus { - return &c -} - -// BlobExpiryOptions enum -type BlobExpiryOptions string - -const ( - BlobExpiryOptionsAbsolute BlobExpiryOptions = "Absolute" - BlobExpiryOptionsNeverExpire BlobExpiryOptions = "NeverExpire" - BlobExpiryOptionsRelativeToCreation BlobExpiryOptions = "RelativeToCreation" - BlobExpiryOptionsRelativeToNow BlobExpiryOptions = "RelativeToNow" -) - -// PossibleBlobExpiryOptionsValues returns the possible values for the BlobExpiryOptions const type. -func PossibleBlobExpiryOptionsValues() []BlobExpiryOptions { - return []BlobExpiryOptions{ - BlobExpiryOptionsAbsolute, - BlobExpiryOptionsNeverExpire, - BlobExpiryOptionsRelativeToCreation, - BlobExpiryOptionsRelativeToNow, - } -} - -// ToPtr returns a *BlobExpiryOptions pointing to the current value. -func (c BlobExpiryOptions) ToPtr() *BlobExpiryOptions { - return &c -} - -// BlobGeoReplicationStatus - The status of the secondary location -type BlobGeoReplicationStatus string - -const ( - BlobGeoReplicationStatusLive BlobGeoReplicationStatus = "live" - BlobGeoReplicationStatusBootstrap BlobGeoReplicationStatus = "bootstrap" - BlobGeoReplicationStatusUnavailable BlobGeoReplicationStatus = "unavailable" -) - -// PossibleBlobGeoReplicationStatusValues returns the possible values for the BlobGeoReplicationStatus const type. -func PossibleBlobGeoReplicationStatusValues() []BlobGeoReplicationStatus { - return []BlobGeoReplicationStatus{ - BlobGeoReplicationStatusLive, - BlobGeoReplicationStatusBootstrap, - BlobGeoReplicationStatusUnavailable, - } -} - -// ToPtr returns a *BlobGeoReplicationStatus pointing to the current value. -func (c BlobGeoReplicationStatus) ToPtr() *BlobGeoReplicationStatus { - return &c -} - -// BlobImmutabilityPolicyMode enum -type BlobImmutabilityPolicyMode string - -const ( - BlobImmutabilityPolicyModeMutable BlobImmutabilityPolicyMode = "Mutable" - BlobImmutabilityPolicyModeUnlocked BlobImmutabilityPolicyMode = "Unlocked" - BlobImmutabilityPolicyModeLocked BlobImmutabilityPolicyMode = "Locked" -) - -// PossibleBlobImmutabilityPolicyModeValues returns the possible values for the BlobImmutabilityPolicyMode const type. -func PossibleBlobImmutabilityPolicyModeValues() []BlobImmutabilityPolicyMode { - return []BlobImmutabilityPolicyMode{ - BlobImmutabilityPolicyModeMutable, - BlobImmutabilityPolicyModeUnlocked, - BlobImmutabilityPolicyModeLocked, - } -} - -// ToPtr returns a *BlobImmutabilityPolicyMode pointing to the current value. -func (c BlobImmutabilityPolicyMode) ToPtr() *BlobImmutabilityPolicyMode { - return &c -} - -// BlobType enum -type BlobType string - -const ( - BlobTypeBlockBlob BlobType = "BlockBlob" - BlobTypePageBlob BlobType = "PageBlob" - BlobTypeAppendBlob BlobType = "AppendBlob" -) - -// PossibleBlobTypeValues returns the possible values for the BlobType const type. -func PossibleBlobTypeValues() []BlobType { - return []BlobType{ - BlobTypeBlockBlob, - BlobTypePageBlob, - BlobTypeAppendBlob, - } -} - -// ToPtr returns a *BlobType pointing to the current value. -func (c BlobType) ToPtr() *BlobType { - return &c -} - -// BlockListType enum -type BlockListType string - -const ( - BlockListTypeCommitted BlockListType = "committed" - BlockListTypeUncommitted BlockListType = "uncommitted" - BlockListTypeAll BlockListType = "all" -) - -// PossibleBlockListTypeValues returns the possible values for the BlockListType const type. -func PossibleBlockListTypeValues() []BlockListType { - return []BlockListType{ - BlockListTypeCommitted, - BlockListTypeUncommitted, - BlockListTypeAll, - } -} - -// ToPtr returns a *BlockListType pointing to the current value. -func (c BlockListType) ToPtr() *BlockListType { - return &c -} - -// CopyStatusType enum -type CopyStatusType string - -const ( - CopyStatusTypePending CopyStatusType = "pending" - CopyStatusTypeSuccess CopyStatusType = "success" - CopyStatusTypeAborted CopyStatusType = "aborted" - CopyStatusTypeFailed CopyStatusType = "failed" -) - -// PossibleCopyStatusTypeValues returns the possible values for the CopyStatusType const type. -func PossibleCopyStatusTypeValues() []CopyStatusType { - return []CopyStatusType{ - CopyStatusTypePending, - CopyStatusTypeSuccess, - CopyStatusTypeAborted, - CopyStatusTypeFailed, - } -} - -// ToPtr returns a *CopyStatusType pointing to the current value. -func (c CopyStatusType) ToPtr() *CopyStatusType { - return &c -} - -// DeleteSnapshotsOptionType enum -type DeleteSnapshotsOptionType string - -const ( - DeleteSnapshotsOptionTypeInclude DeleteSnapshotsOptionType = "include" - DeleteSnapshotsOptionTypeOnly DeleteSnapshotsOptionType = "only" -) - -// PossibleDeleteSnapshotsOptionTypeValues returns the possible values for the DeleteSnapshotsOptionType const type. -func PossibleDeleteSnapshotsOptionTypeValues() []DeleteSnapshotsOptionType { - return []DeleteSnapshotsOptionType{ - DeleteSnapshotsOptionTypeInclude, - DeleteSnapshotsOptionTypeOnly, - } -} - -// ToPtr returns a *DeleteSnapshotsOptionType pointing to the current value. -func (c DeleteSnapshotsOptionType) ToPtr() *DeleteSnapshotsOptionType { - return &c -} - -// EncryptionAlgorithmType enum -type EncryptionAlgorithmType string - -const ( - EncryptionAlgorithmTypeNone EncryptionAlgorithmType = "None" - EncryptionAlgorithmTypeAES256 EncryptionAlgorithmType = "AES256" -) - -// PossibleEncryptionAlgorithmTypeValues returns the possible values for the EncryptionAlgorithmType const type. -func PossibleEncryptionAlgorithmTypeValues() []EncryptionAlgorithmType { - return []EncryptionAlgorithmType{ - EncryptionAlgorithmTypeNone, - EncryptionAlgorithmTypeAES256, - } -} - -// ToPtr returns a *EncryptionAlgorithmType pointing to the current value. -func (c EncryptionAlgorithmType) ToPtr() *EncryptionAlgorithmType { - return &c -} - -// LeaseDurationType enum -type LeaseDurationType string - -const ( - LeaseDurationTypeInfinite LeaseDurationType = "infinite" - LeaseDurationTypeFixed LeaseDurationType = "fixed" -) - -// PossibleLeaseDurationTypeValues returns the possible values for the LeaseDurationType const type. -func PossibleLeaseDurationTypeValues() []LeaseDurationType { - return []LeaseDurationType{ - LeaseDurationTypeInfinite, - LeaseDurationTypeFixed, - } -} - -// ToPtr returns a *LeaseDurationType pointing to the current value. -func (c LeaseDurationType) ToPtr() *LeaseDurationType { - return &c -} - -// LeaseStateType enum -type LeaseStateType string - -const ( - LeaseStateTypeAvailable LeaseStateType = "available" - LeaseStateTypeLeased LeaseStateType = "leased" - LeaseStateTypeExpired LeaseStateType = "expired" - LeaseStateTypeBreaking LeaseStateType = "breaking" - LeaseStateTypeBroken LeaseStateType = "broken" -) - -// PossibleLeaseStateTypeValues returns the possible values for the LeaseStateType const type. -func PossibleLeaseStateTypeValues() []LeaseStateType { - return []LeaseStateType{ - LeaseStateTypeAvailable, - LeaseStateTypeLeased, - LeaseStateTypeExpired, - LeaseStateTypeBreaking, - LeaseStateTypeBroken, - } -} - -// ToPtr returns a *LeaseStateType pointing to the current value. -func (c LeaseStateType) ToPtr() *LeaseStateType { - return &c -} - -// LeaseStatusType enum -type LeaseStatusType string - -const ( - LeaseStatusTypeLocked LeaseStatusType = "locked" - LeaseStatusTypeUnlocked LeaseStatusType = "unlocked" -) - -// PossibleLeaseStatusTypeValues returns the possible values for the LeaseStatusType const type. -func PossibleLeaseStatusTypeValues() []LeaseStatusType { - return []LeaseStatusType{ - LeaseStatusTypeLocked, - LeaseStatusTypeUnlocked, - } -} - -// ToPtr returns a *LeaseStatusType pointing to the current value. -func (c LeaseStatusType) ToPtr() *LeaseStatusType { - return &c -} - -// ListBlobsIncludeItem enum -type ListBlobsIncludeItem string - -const ( - ListBlobsIncludeItemCopy ListBlobsIncludeItem = "copy" - ListBlobsIncludeItemDeleted ListBlobsIncludeItem = "deleted" - ListBlobsIncludeItemMetadata ListBlobsIncludeItem = "metadata" - ListBlobsIncludeItemSnapshots ListBlobsIncludeItem = "snapshots" - ListBlobsIncludeItemUncommittedblobs ListBlobsIncludeItem = "uncommittedblobs" - ListBlobsIncludeItemVersions ListBlobsIncludeItem = "versions" - ListBlobsIncludeItemTags ListBlobsIncludeItem = "tags" - ListBlobsIncludeItemImmutabilitypolicy ListBlobsIncludeItem = "immutabilitypolicy" - ListBlobsIncludeItemLegalhold ListBlobsIncludeItem = "legalhold" - ListBlobsIncludeItemDeletedwithversions ListBlobsIncludeItem = "deletedwithversions" -) - -// PossibleListBlobsIncludeItemValues returns the possible values for the ListBlobsIncludeItem const type. -func PossibleListBlobsIncludeItemValues() []ListBlobsIncludeItem { - return []ListBlobsIncludeItem{ - ListBlobsIncludeItemCopy, - ListBlobsIncludeItemDeleted, - ListBlobsIncludeItemMetadata, - ListBlobsIncludeItemSnapshots, - ListBlobsIncludeItemUncommittedblobs, - ListBlobsIncludeItemVersions, - ListBlobsIncludeItemTags, - ListBlobsIncludeItemImmutabilitypolicy, - ListBlobsIncludeItemLegalhold, - ListBlobsIncludeItemDeletedwithversions, - } -} - -// ToPtr returns a *ListBlobsIncludeItem pointing to the current value. -func (c ListBlobsIncludeItem) ToPtr() *ListBlobsIncludeItem { - return &c -} - -// ListContainersIncludeType enum -type ListContainersIncludeType string - -const ( - ListContainersIncludeTypeMetadata ListContainersIncludeType = "metadata" - ListContainersIncludeTypeDeleted ListContainersIncludeType = "deleted" - ListContainersIncludeTypeSystem ListContainersIncludeType = "system" -) - -// PossibleListContainersIncludeTypeValues returns the possible values for the ListContainersIncludeType const type. -func PossibleListContainersIncludeTypeValues() []ListContainersIncludeType { - return []ListContainersIncludeType{ - ListContainersIncludeTypeMetadata, - ListContainersIncludeTypeDeleted, - ListContainersIncludeTypeSystem, - } -} - -// ToPtr returns a *ListContainersIncludeType pointing to the current value. -func (c ListContainersIncludeType) ToPtr() *ListContainersIncludeType { - return &c -} - -// PremiumPageBlobAccessTier enum -type PremiumPageBlobAccessTier string - -const ( - PremiumPageBlobAccessTierP10 PremiumPageBlobAccessTier = "P10" - PremiumPageBlobAccessTierP15 PremiumPageBlobAccessTier = "P15" - PremiumPageBlobAccessTierP20 PremiumPageBlobAccessTier = "P20" - PremiumPageBlobAccessTierP30 PremiumPageBlobAccessTier = "P30" - PremiumPageBlobAccessTierP4 PremiumPageBlobAccessTier = "P4" - PremiumPageBlobAccessTierP40 PremiumPageBlobAccessTier = "P40" - PremiumPageBlobAccessTierP50 PremiumPageBlobAccessTier = "P50" - PremiumPageBlobAccessTierP6 PremiumPageBlobAccessTier = "P6" - PremiumPageBlobAccessTierP60 PremiumPageBlobAccessTier = "P60" - PremiumPageBlobAccessTierP70 PremiumPageBlobAccessTier = "P70" - PremiumPageBlobAccessTierP80 PremiumPageBlobAccessTier = "P80" -) - -// PossiblePremiumPageBlobAccessTierValues returns the possible values for the PremiumPageBlobAccessTier const type. -func PossiblePremiumPageBlobAccessTierValues() []PremiumPageBlobAccessTier { - return []PremiumPageBlobAccessTier{ - PremiumPageBlobAccessTierP10, - PremiumPageBlobAccessTierP15, - PremiumPageBlobAccessTierP20, - PremiumPageBlobAccessTierP30, - PremiumPageBlobAccessTierP4, - PremiumPageBlobAccessTierP40, - PremiumPageBlobAccessTierP50, - PremiumPageBlobAccessTierP6, - PremiumPageBlobAccessTierP60, - PremiumPageBlobAccessTierP70, - PremiumPageBlobAccessTierP80, - } -} - -// ToPtr returns a *PremiumPageBlobAccessTier pointing to the current value. -func (c PremiumPageBlobAccessTier) ToPtr() *PremiumPageBlobAccessTier { - return &c -} - -// PublicAccessType enum -type PublicAccessType string - -const ( - PublicAccessTypeBlob PublicAccessType = "blob" - PublicAccessTypeContainer PublicAccessType = "container" -) - -// PossiblePublicAccessTypeValues returns the possible values for the PublicAccessType const type. -func PossiblePublicAccessTypeValues() []PublicAccessType { - return []PublicAccessType{ - PublicAccessTypeBlob, - PublicAccessTypeContainer, - } -} - -// ToPtr returns a *PublicAccessType pointing to the current value. -func (c PublicAccessType) ToPtr() *PublicAccessType { - return &c -} - -// QueryFormatType - The quick query format type. -type QueryFormatType string - -const ( - QueryFormatTypeDelimited QueryFormatType = "delimited" - QueryFormatTypeJSON QueryFormatType = "json" - QueryFormatTypeArrow QueryFormatType = "arrow" - QueryFormatTypeParquet QueryFormatType = "parquet" -) - -// PossibleQueryFormatTypeValues returns the possible values for the QueryFormatType const type. -func PossibleQueryFormatTypeValues() []QueryFormatType { - return []QueryFormatType{ - QueryFormatTypeDelimited, - QueryFormatTypeJSON, - QueryFormatTypeArrow, - QueryFormatTypeParquet, - } -} - -// ToPtr returns a *QueryFormatType pointing to the current value. -func (c QueryFormatType) ToPtr() *QueryFormatType { - return &c -} - -// RehydratePriority - If an object is in rehydrate pending state then this header is returned with priority of rehydrate. -// Valid values are High and Standard. -type RehydratePriority string - -const ( - RehydratePriorityHigh RehydratePriority = "High" - RehydratePriorityStandard RehydratePriority = "Standard" -) - -// PossibleRehydratePriorityValues returns the possible values for the RehydratePriority const type. -func PossibleRehydratePriorityValues() []RehydratePriority { - return []RehydratePriority{ - RehydratePriorityHigh, - RehydratePriorityStandard, - } -} - -// ToPtr returns a *RehydratePriority pointing to the current value. -func (c RehydratePriority) ToPtr() *RehydratePriority { - return &c -} - -// SKUName enum -type SKUName string - -const ( - SKUNameStandardLRS SKUName = "Standard_LRS" - SKUNameStandardGRS SKUName = "Standard_GRS" - SKUNameStandardRAGRS SKUName = "Standard_RAGRS" - SKUNameStandardZRS SKUName = "Standard_ZRS" - SKUNamePremiumLRS SKUName = "Premium_LRS" -) - -// PossibleSKUNameValues returns the possible values for the SKUName const type. -func PossibleSKUNameValues() []SKUName { - return []SKUName{ - SKUNameStandardLRS, - SKUNameStandardGRS, - SKUNameStandardRAGRS, - SKUNameStandardZRS, - SKUNamePremiumLRS, - } -} - -// ToPtr returns a *SKUName pointing to the current value. -func (c SKUName) ToPtr() *SKUName { - return &c -} - -// SequenceNumberActionType enum -type SequenceNumberActionType string - -const ( - SequenceNumberActionTypeMax SequenceNumberActionType = "max" - SequenceNumberActionTypeUpdate SequenceNumberActionType = "update" - SequenceNumberActionTypeIncrement SequenceNumberActionType = "increment" -) - -// PossibleSequenceNumberActionTypeValues returns the possible values for the SequenceNumberActionType const type. -func PossibleSequenceNumberActionTypeValues() []SequenceNumberActionType { - return []SequenceNumberActionType{ - SequenceNumberActionTypeMax, - SequenceNumberActionTypeUpdate, - SequenceNumberActionTypeIncrement, - } -} - -// ToPtr returns a *SequenceNumberActionType pointing to the current value. -func (c SequenceNumberActionType) ToPtr() *SequenceNumberActionType { - return &c -} - -// StorageErrorCode - Error codes returned by the service -type StorageErrorCode string - -const ( - StorageErrorCodeAccountAlreadyExists StorageErrorCode = "AccountAlreadyExists" - StorageErrorCodeAccountBeingCreated StorageErrorCode = "AccountBeingCreated" - StorageErrorCodeAccountIsDisabled StorageErrorCode = "AccountIsDisabled" - StorageErrorCodeAppendPositionConditionNotMet StorageErrorCode = "AppendPositionConditionNotMet" - StorageErrorCodeAuthenticationFailed StorageErrorCode = "AuthenticationFailed" - StorageErrorCodeAuthorizationFailure StorageErrorCode = "AuthorizationFailure" - StorageErrorCodeAuthorizationPermissionMismatch StorageErrorCode = "AuthorizationPermissionMismatch" - StorageErrorCodeAuthorizationProtocolMismatch StorageErrorCode = "AuthorizationProtocolMismatch" - StorageErrorCodeAuthorizationResourceTypeMismatch StorageErrorCode = "AuthorizationResourceTypeMismatch" - StorageErrorCodeAuthorizationServiceMismatch StorageErrorCode = "AuthorizationServiceMismatch" - StorageErrorCodeAuthorizationSourceIPMismatch StorageErrorCode = "AuthorizationSourceIPMismatch" - StorageErrorCodeBlobAlreadyExists StorageErrorCode = "BlobAlreadyExists" - StorageErrorCodeBlobArchived StorageErrorCode = "BlobArchived" - StorageErrorCodeBlobBeingRehydrated StorageErrorCode = "BlobBeingRehydrated" - StorageErrorCodeBlobImmutableDueToPolicy StorageErrorCode = "BlobImmutableDueToPolicy" - StorageErrorCodeBlobNotArchived StorageErrorCode = "BlobNotArchived" - StorageErrorCodeBlobNotFound StorageErrorCode = "BlobNotFound" - StorageErrorCodeBlobOverwritten StorageErrorCode = "BlobOverwritten" - StorageErrorCodeBlobTierInadequateForContentLength StorageErrorCode = "BlobTierInadequateForContentLength" - StorageErrorCodeBlobUsesCustomerSpecifiedEncryption StorageErrorCode = "BlobUsesCustomerSpecifiedEncryption" - StorageErrorCodeBlockCountExceedsLimit StorageErrorCode = "BlockCountExceedsLimit" - StorageErrorCodeBlockListTooLong StorageErrorCode = "BlockListTooLong" - StorageErrorCodeCannotChangeToLowerTier StorageErrorCode = "CannotChangeToLowerTier" - StorageErrorCodeCannotVerifyCopySource StorageErrorCode = "CannotVerifyCopySource" - StorageErrorCodeConditionHeadersNotSupported StorageErrorCode = "ConditionHeadersNotSupported" - StorageErrorCodeConditionNotMet StorageErrorCode = "ConditionNotMet" - StorageErrorCodeContainerAlreadyExists StorageErrorCode = "ContainerAlreadyExists" - StorageErrorCodeContainerBeingDeleted StorageErrorCode = "ContainerBeingDeleted" - StorageErrorCodeContainerDisabled StorageErrorCode = "ContainerDisabled" - StorageErrorCodeContainerNotFound StorageErrorCode = "ContainerNotFound" - StorageErrorCodeContentLengthLargerThanTierLimit StorageErrorCode = "ContentLengthLargerThanTierLimit" - StorageErrorCodeCopyAcrossAccountsNotSupported StorageErrorCode = "CopyAcrossAccountsNotSupported" - StorageErrorCodeCopyIDMismatch StorageErrorCode = "CopyIdMismatch" - StorageErrorCodeEmptyMetadataKey StorageErrorCode = "EmptyMetadataKey" - StorageErrorCodeFeatureVersionMismatch StorageErrorCode = "FeatureVersionMismatch" - StorageErrorCodeIncrementalCopyBlobMismatch StorageErrorCode = "IncrementalCopyBlobMismatch" - StorageErrorCodeIncrementalCopyOfEralierVersionSnapshotNotAllowed StorageErrorCode = "IncrementalCopyOfEralierVersionSnapshotNotAllowed" - StorageErrorCodeIncrementalCopySourceMustBeSnapshot StorageErrorCode = "IncrementalCopySourceMustBeSnapshot" - StorageErrorCodeInfiniteLeaseDurationRequired StorageErrorCode = "InfiniteLeaseDurationRequired" - StorageErrorCodeInsufficientAccountPermissions StorageErrorCode = "InsufficientAccountPermissions" - StorageErrorCodeInternalError StorageErrorCode = "InternalError" - StorageErrorCodeInvalidAuthenticationInfo StorageErrorCode = "InvalidAuthenticationInfo" - StorageErrorCodeInvalidBlobOrBlock StorageErrorCode = "InvalidBlobOrBlock" - StorageErrorCodeInvalidBlobTier StorageErrorCode = "InvalidBlobTier" - StorageErrorCodeInvalidBlobType StorageErrorCode = "InvalidBlobType" - StorageErrorCodeInvalidBlockID StorageErrorCode = "InvalidBlockId" - StorageErrorCodeInvalidBlockList StorageErrorCode = "InvalidBlockList" - StorageErrorCodeInvalidHTTPVerb StorageErrorCode = "InvalidHttpVerb" - StorageErrorCodeInvalidHeaderValue StorageErrorCode = "InvalidHeaderValue" - StorageErrorCodeInvalidInput StorageErrorCode = "InvalidInput" - StorageErrorCodeInvalidMD5 StorageErrorCode = "InvalidMd5" - StorageErrorCodeInvalidMetadata StorageErrorCode = "InvalidMetadata" - StorageErrorCodeInvalidOperation StorageErrorCode = "InvalidOperation" - StorageErrorCodeInvalidPageRange StorageErrorCode = "InvalidPageRange" - StorageErrorCodeInvalidQueryParameterValue StorageErrorCode = "InvalidQueryParameterValue" - StorageErrorCodeInvalidRange StorageErrorCode = "InvalidRange" - StorageErrorCodeInvalidResourceName StorageErrorCode = "InvalidResourceName" - StorageErrorCodeInvalidSourceBlobType StorageErrorCode = "InvalidSourceBlobType" - StorageErrorCodeInvalidSourceBlobURL StorageErrorCode = "InvalidSourceBlobUrl" - StorageErrorCodeInvalidURI StorageErrorCode = "InvalidUri" - StorageErrorCodeInvalidVersionForPageBlobOperation StorageErrorCode = "InvalidVersionForPageBlobOperation" - StorageErrorCodeInvalidXMLDocument StorageErrorCode = "InvalidXmlDocument" - StorageErrorCodeInvalidXMLNodeValue StorageErrorCode = "InvalidXmlNodeValue" - StorageErrorCodeLeaseAlreadyBroken StorageErrorCode = "LeaseAlreadyBroken" - StorageErrorCodeLeaseAlreadyPresent StorageErrorCode = "LeaseAlreadyPresent" - StorageErrorCodeLeaseIDMismatchWithBlobOperation StorageErrorCode = "LeaseIdMismatchWithBlobOperation" - StorageErrorCodeLeaseIDMismatchWithContainerOperation StorageErrorCode = "LeaseIdMismatchWithContainerOperation" - StorageErrorCodeLeaseIDMismatchWithLeaseOperation StorageErrorCode = "LeaseIdMismatchWithLeaseOperation" - StorageErrorCodeLeaseIDMissing StorageErrorCode = "LeaseIdMissing" - StorageErrorCodeLeaseIsBreakingAndCannotBeAcquired StorageErrorCode = "LeaseIsBreakingAndCannotBeAcquired" - StorageErrorCodeLeaseIsBreakingAndCannotBeChanged StorageErrorCode = "LeaseIsBreakingAndCannotBeChanged" - StorageErrorCodeLeaseIsBrokenAndCannotBeRenewed StorageErrorCode = "LeaseIsBrokenAndCannotBeRenewed" - StorageErrorCodeLeaseLost StorageErrorCode = "LeaseLost" - StorageErrorCodeLeaseNotPresentWithBlobOperation StorageErrorCode = "LeaseNotPresentWithBlobOperation" - StorageErrorCodeLeaseNotPresentWithContainerOperation StorageErrorCode = "LeaseNotPresentWithContainerOperation" - StorageErrorCodeLeaseNotPresentWithLeaseOperation StorageErrorCode = "LeaseNotPresentWithLeaseOperation" - StorageErrorCodeMD5Mismatch StorageErrorCode = "Md5Mismatch" - StorageErrorCodeMaxBlobSizeConditionNotMet StorageErrorCode = "MaxBlobSizeConditionNotMet" - StorageErrorCodeMetadataTooLarge StorageErrorCode = "MetadataTooLarge" - StorageErrorCodeMissingContentLengthHeader StorageErrorCode = "MissingContentLengthHeader" - StorageErrorCodeMissingRequiredHeader StorageErrorCode = "MissingRequiredHeader" - StorageErrorCodeMissingRequiredQueryParameter StorageErrorCode = "MissingRequiredQueryParameter" - StorageErrorCodeMissingRequiredXMLNode StorageErrorCode = "MissingRequiredXmlNode" - StorageErrorCodeMultipleConditionHeadersNotSupported StorageErrorCode = "MultipleConditionHeadersNotSupported" - StorageErrorCodeNoAuthenticationInformation StorageErrorCode = "NoAuthenticationInformation" - StorageErrorCodeNoPendingCopyOperation StorageErrorCode = "NoPendingCopyOperation" - StorageErrorCodeOperationNotAllowedOnIncrementalCopyBlob StorageErrorCode = "OperationNotAllowedOnIncrementalCopyBlob" - StorageErrorCodeOperationTimedOut StorageErrorCode = "OperationTimedOut" - StorageErrorCodeOutOfRangeInput StorageErrorCode = "OutOfRangeInput" - StorageErrorCodeOutOfRangeQueryParameterValue StorageErrorCode = "OutOfRangeQueryParameterValue" - StorageErrorCodePendingCopyOperation StorageErrorCode = "PendingCopyOperation" - StorageErrorCodePreviousSnapshotCannotBeNewer StorageErrorCode = "PreviousSnapshotCannotBeNewer" - StorageErrorCodePreviousSnapshotNotFound StorageErrorCode = "PreviousSnapshotNotFound" - StorageErrorCodePreviousSnapshotOperationNotSupported StorageErrorCode = "PreviousSnapshotOperationNotSupported" - StorageErrorCodeRequestBodyTooLarge StorageErrorCode = "RequestBodyTooLarge" - StorageErrorCodeRequestURLFailedToParse StorageErrorCode = "RequestUrlFailedToParse" - StorageErrorCodeResourceAlreadyExists StorageErrorCode = "ResourceAlreadyExists" - StorageErrorCodeResourceNotFound StorageErrorCode = "ResourceNotFound" - StorageErrorCodeResourceTypeMismatch StorageErrorCode = "ResourceTypeMismatch" - StorageErrorCodeSequenceNumberConditionNotMet StorageErrorCode = "SequenceNumberConditionNotMet" - StorageErrorCodeSequenceNumberIncrementTooLarge StorageErrorCode = "SequenceNumberIncrementTooLarge" - StorageErrorCodeServerBusy StorageErrorCode = "ServerBusy" - StorageErrorCodeSnapshotCountExceeded StorageErrorCode = "SnapshotCountExceeded" - StorageErrorCodeSnapshotOperationRateExceeded StorageErrorCode = "SnapshotOperationRateExceeded" - StorageErrorCodeSnapshotsPresent StorageErrorCode = "SnapshotsPresent" - StorageErrorCodeSourceConditionNotMet StorageErrorCode = "SourceConditionNotMet" - StorageErrorCodeSystemInUse StorageErrorCode = "SystemInUse" - StorageErrorCodeTargetConditionNotMet StorageErrorCode = "TargetConditionNotMet" - StorageErrorCodeUnauthorizedBlobOverwrite StorageErrorCode = "UnauthorizedBlobOverwrite" - StorageErrorCodeUnsupportedHTTPVerb StorageErrorCode = "UnsupportedHttpVerb" - StorageErrorCodeUnsupportedHeader StorageErrorCode = "UnsupportedHeader" - StorageErrorCodeUnsupportedQueryParameter StorageErrorCode = "UnsupportedQueryParameter" - StorageErrorCodeUnsupportedXMLNode StorageErrorCode = "UnsupportedXmlNode" -) - -// PossibleStorageErrorCodeValues returns the possible values for the StorageErrorCode const type. -func PossibleStorageErrorCodeValues() []StorageErrorCode { - return []StorageErrorCode{ - StorageErrorCodeAccountAlreadyExists, - StorageErrorCodeAccountBeingCreated, - StorageErrorCodeAccountIsDisabled, - StorageErrorCodeAppendPositionConditionNotMet, - StorageErrorCodeAuthenticationFailed, - StorageErrorCodeAuthorizationFailure, - StorageErrorCodeAuthorizationPermissionMismatch, - StorageErrorCodeAuthorizationProtocolMismatch, - StorageErrorCodeAuthorizationResourceTypeMismatch, - StorageErrorCodeAuthorizationServiceMismatch, - StorageErrorCodeAuthorizationSourceIPMismatch, - StorageErrorCodeBlobAlreadyExists, - StorageErrorCodeBlobArchived, - StorageErrorCodeBlobBeingRehydrated, - StorageErrorCodeBlobImmutableDueToPolicy, - StorageErrorCodeBlobNotArchived, - StorageErrorCodeBlobNotFound, - StorageErrorCodeBlobOverwritten, - StorageErrorCodeBlobTierInadequateForContentLength, - StorageErrorCodeBlobUsesCustomerSpecifiedEncryption, - StorageErrorCodeBlockCountExceedsLimit, - StorageErrorCodeBlockListTooLong, - StorageErrorCodeCannotChangeToLowerTier, - StorageErrorCodeCannotVerifyCopySource, - StorageErrorCodeConditionHeadersNotSupported, - StorageErrorCodeConditionNotMet, - StorageErrorCodeContainerAlreadyExists, - StorageErrorCodeContainerBeingDeleted, - StorageErrorCodeContainerDisabled, - StorageErrorCodeContainerNotFound, - StorageErrorCodeContentLengthLargerThanTierLimit, - StorageErrorCodeCopyAcrossAccountsNotSupported, - StorageErrorCodeCopyIDMismatch, - StorageErrorCodeEmptyMetadataKey, - StorageErrorCodeFeatureVersionMismatch, - StorageErrorCodeIncrementalCopyBlobMismatch, - StorageErrorCodeIncrementalCopyOfEralierVersionSnapshotNotAllowed, - StorageErrorCodeIncrementalCopySourceMustBeSnapshot, - StorageErrorCodeInfiniteLeaseDurationRequired, - StorageErrorCodeInsufficientAccountPermissions, - StorageErrorCodeInternalError, - StorageErrorCodeInvalidAuthenticationInfo, - StorageErrorCodeInvalidBlobOrBlock, - StorageErrorCodeInvalidBlobTier, - StorageErrorCodeInvalidBlobType, - StorageErrorCodeInvalidBlockID, - StorageErrorCodeInvalidBlockList, - StorageErrorCodeInvalidHTTPVerb, - StorageErrorCodeInvalidHeaderValue, - StorageErrorCodeInvalidInput, - StorageErrorCodeInvalidMD5, - StorageErrorCodeInvalidMetadata, - StorageErrorCodeInvalidOperation, - StorageErrorCodeInvalidPageRange, - StorageErrorCodeInvalidQueryParameterValue, - StorageErrorCodeInvalidRange, - StorageErrorCodeInvalidResourceName, - StorageErrorCodeInvalidSourceBlobType, - StorageErrorCodeInvalidSourceBlobURL, - StorageErrorCodeInvalidURI, - StorageErrorCodeInvalidVersionForPageBlobOperation, - StorageErrorCodeInvalidXMLDocument, - StorageErrorCodeInvalidXMLNodeValue, - StorageErrorCodeLeaseAlreadyBroken, - StorageErrorCodeLeaseAlreadyPresent, - StorageErrorCodeLeaseIDMismatchWithBlobOperation, - StorageErrorCodeLeaseIDMismatchWithContainerOperation, - StorageErrorCodeLeaseIDMismatchWithLeaseOperation, - StorageErrorCodeLeaseIDMissing, - StorageErrorCodeLeaseIsBreakingAndCannotBeAcquired, - StorageErrorCodeLeaseIsBreakingAndCannotBeChanged, - StorageErrorCodeLeaseIsBrokenAndCannotBeRenewed, - StorageErrorCodeLeaseLost, - StorageErrorCodeLeaseNotPresentWithBlobOperation, - StorageErrorCodeLeaseNotPresentWithContainerOperation, - StorageErrorCodeLeaseNotPresentWithLeaseOperation, - StorageErrorCodeMD5Mismatch, - StorageErrorCodeMaxBlobSizeConditionNotMet, - StorageErrorCodeMetadataTooLarge, - StorageErrorCodeMissingContentLengthHeader, - StorageErrorCodeMissingRequiredHeader, - StorageErrorCodeMissingRequiredQueryParameter, - StorageErrorCodeMissingRequiredXMLNode, - StorageErrorCodeMultipleConditionHeadersNotSupported, - StorageErrorCodeNoAuthenticationInformation, - StorageErrorCodeNoPendingCopyOperation, - StorageErrorCodeOperationNotAllowedOnIncrementalCopyBlob, - StorageErrorCodeOperationTimedOut, - StorageErrorCodeOutOfRangeInput, - StorageErrorCodeOutOfRangeQueryParameterValue, - StorageErrorCodePendingCopyOperation, - StorageErrorCodePreviousSnapshotCannotBeNewer, - StorageErrorCodePreviousSnapshotNotFound, - StorageErrorCodePreviousSnapshotOperationNotSupported, - StorageErrorCodeRequestBodyTooLarge, - StorageErrorCodeRequestURLFailedToParse, - StorageErrorCodeResourceAlreadyExists, - StorageErrorCodeResourceNotFound, - StorageErrorCodeResourceTypeMismatch, - StorageErrorCodeSequenceNumberConditionNotMet, - StorageErrorCodeSequenceNumberIncrementTooLarge, - StorageErrorCodeServerBusy, - StorageErrorCodeSnapshotCountExceeded, - StorageErrorCodeSnapshotOperationRateExceeded, - StorageErrorCodeSnapshotsPresent, - StorageErrorCodeSourceConditionNotMet, - StorageErrorCodeSystemInUse, - StorageErrorCodeTargetConditionNotMet, - StorageErrorCodeUnauthorizedBlobOverwrite, - StorageErrorCodeUnsupportedHTTPVerb, - StorageErrorCodeUnsupportedHeader, - StorageErrorCodeUnsupportedQueryParameter, - StorageErrorCodeUnsupportedXMLNode, - } -} - -// ToPtr returns a *StorageErrorCode pointing to the current value. -func (c StorageErrorCode) ToPtr() *StorageErrorCode { - return &c -} - -// BlobDeleteType enum -type BlobDeleteType string - -const ( - BlobDeleteTypeNone BlobDeleteType = "None" - BlobDeleteTypePermanent BlobDeleteType = "Permanent" -) - -// PossibleBlobDeleteTypeValues returns the possible values for the BlobDeleteType const type. -func PossibleBlobDeleteTypeValues() []BlobDeleteType { - return []BlobDeleteType{ - BlobDeleteTypeNone, - BlobDeleteTypePermanent, - } -} - -// ToPtr returns a *BlobDeleteType pointing to the current value. -func (c BlobDeleteType) ToPtr() *BlobDeleteType { - return &c -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zz_generated_container_client.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zz_generated_container_client.go deleted file mode 100644 index c9245ce10d43..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zz_generated_container_client.go +++ /dev/null @@ -1,1442 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -package azblob - -import ( - "context" - "encoding/xml" - "fmt" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime" - "io" - "net/http" - "strconv" - "strings" - "time" -) - -type containerClient struct { - endpoint string - pl runtime.Pipeline -} - -// newContainerClient creates a new instance of containerClient with the specified values. -// endpoint - The URL of the service account, container, or blob that is the target of the desired operation. -// pl - the pipeline used for sending requests and handling responses. -func newContainerClient(endpoint string, pl runtime.Pipeline) *containerClient { - client := &containerClient{ - endpoint: endpoint, - pl: pl, - } - return client -} - -// AcquireLease - [Update] establishes and manages a lock on a container for delete operations. The lock duration can be 15 -// to 60 seconds, or can be infinite -// If the operation fails it returns an *azcore.ResponseError type. -// containerClientAcquireLeaseOptions - containerClientAcquireLeaseOptions contains the optional parameters for the containerClient.AcquireLease -// method. -// ModifiedAccessConditions - ModifiedAccessConditions contains a group of parameters for the containerClient.Delete method. -func (client *containerClient) AcquireLease(ctx context.Context, containerClientAcquireLeaseOptions *containerClientAcquireLeaseOptions, modifiedAccessConditions *ModifiedAccessConditions) (containerClientAcquireLeaseResponse, error) { - req, err := client.acquireLeaseCreateRequest(ctx, containerClientAcquireLeaseOptions, modifiedAccessConditions) - if err != nil { - return containerClientAcquireLeaseResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return containerClientAcquireLeaseResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusCreated) { - return containerClientAcquireLeaseResponse{}, runtime.NewResponseError(resp) - } - return client.acquireLeaseHandleResponse(resp) -} - -// acquireLeaseCreateRequest creates the AcquireLease request. -func (client *containerClient) acquireLeaseCreateRequest(ctx context.Context, containerClientAcquireLeaseOptions *containerClientAcquireLeaseOptions, modifiedAccessConditions *ModifiedAccessConditions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodPut, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - reqQP.Set("comp", "lease") - reqQP.Set("restype", "container") - if containerClientAcquireLeaseOptions != nil && containerClientAcquireLeaseOptions.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*containerClientAcquireLeaseOptions.Timeout), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - req.Raw().Header.Set("x-ms-lease-action", "acquire") - if containerClientAcquireLeaseOptions != nil && containerClientAcquireLeaseOptions.Duration != nil { - req.Raw().Header.Set("x-ms-lease-duration", strconv.FormatInt(int64(*containerClientAcquireLeaseOptions.Duration), 10)) - } - if containerClientAcquireLeaseOptions != nil && containerClientAcquireLeaseOptions.ProposedLeaseID != nil { - req.Raw().Header.Set("x-ms-proposed-lease-id", *containerClientAcquireLeaseOptions.ProposedLeaseID) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfModifiedSince != nil { - req.Raw().Header.Set("If-Modified-Since", modifiedAccessConditions.IfModifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfUnmodifiedSince != nil { - req.Raw().Header.Set("If-Unmodified-Since", modifiedAccessConditions.IfUnmodifiedSince.Format(time.RFC1123)) - } - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if containerClientAcquireLeaseOptions != nil && containerClientAcquireLeaseOptions.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *containerClientAcquireLeaseOptions.RequestID) - } - req.Raw().Header.Set("Accept", "application/xml") - return req, nil -} - -// acquireLeaseHandleResponse handles the AcquireLease response. -func (client *containerClient) acquireLeaseHandleResponse(resp *http.Response) (containerClientAcquireLeaseResponse, error) { - result := containerClientAcquireLeaseResponse{RawResponse: resp} - if val := resp.Header.Get("ETag"); val != "" { - result.ETag = &val - } - if val := resp.Header.Get("Last-Modified"); val != "" { - lastModified, err := time.Parse(time.RFC1123, val) - if err != nil { - return containerClientAcquireLeaseResponse{}, err - } - result.LastModified = &lastModified - } - if val := resp.Header.Get("x-ms-lease-id"); val != "" { - result.LeaseID = &val - } - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return containerClientAcquireLeaseResponse{}, err - } - result.Date = &date - } - return result, nil -} - -// BreakLease - [Update] establishes and manages a lock on a container for delete operations. The lock duration can be 15 -// to 60 seconds, or can be infinite -// If the operation fails it returns an *azcore.ResponseError type. -// containerClientBreakLeaseOptions - containerClientBreakLeaseOptions contains the optional parameters for the containerClient.BreakLease -// method. -// ModifiedAccessConditions - ModifiedAccessConditions contains a group of parameters for the containerClient.Delete method. -func (client *containerClient) BreakLease(ctx context.Context, containerClientBreakLeaseOptions *containerClientBreakLeaseOptions, modifiedAccessConditions *ModifiedAccessConditions) (containerClientBreakLeaseResponse, error) { - req, err := client.breakLeaseCreateRequest(ctx, containerClientBreakLeaseOptions, modifiedAccessConditions) - if err != nil { - return containerClientBreakLeaseResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return containerClientBreakLeaseResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusAccepted) { - return containerClientBreakLeaseResponse{}, runtime.NewResponseError(resp) - } - return client.breakLeaseHandleResponse(resp) -} - -// breakLeaseCreateRequest creates the BreakLease request. -func (client *containerClient) breakLeaseCreateRequest(ctx context.Context, containerClientBreakLeaseOptions *containerClientBreakLeaseOptions, modifiedAccessConditions *ModifiedAccessConditions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodPut, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - reqQP.Set("comp", "lease") - reqQP.Set("restype", "container") - if containerClientBreakLeaseOptions != nil && containerClientBreakLeaseOptions.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*containerClientBreakLeaseOptions.Timeout), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - req.Raw().Header.Set("x-ms-lease-action", "break") - if containerClientBreakLeaseOptions != nil && containerClientBreakLeaseOptions.BreakPeriod != nil { - req.Raw().Header.Set("x-ms-lease-break-period", strconv.FormatInt(int64(*containerClientBreakLeaseOptions.BreakPeriod), 10)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfModifiedSince != nil { - req.Raw().Header.Set("If-Modified-Since", modifiedAccessConditions.IfModifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfUnmodifiedSince != nil { - req.Raw().Header.Set("If-Unmodified-Since", modifiedAccessConditions.IfUnmodifiedSince.Format(time.RFC1123)) - } - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if containerClientBreakLeaseOptions != nil && containerClientBreakLeaseOptions.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *containerClientBreakLeaseOptions.RequestID) - } - req.Raw().Header.Set("Accept", "application/xml") - return req, nil -} - -// breakLeaseHandleResponse handles the BreakLease response. -func (client *containerClient) breakLeaseHandleResponse(resp *http.Response) (containerClientBreakLeaseResponse, error) { - result := containerClientBreakLeaseResponse{RawResponse: resp} - if val := resp.Header.Get("ETag"); val != "" { - result.ETag = &val - } - if val := resp.Header.Get("Last-Modified"); val != "" { - lastModified, err := time.Parse(time.RFC1123, val) - if err != nil { - return containerClientBreakLeaseResponse{}, err - } - result.LastModified = &lastModified - } - if val := resp.Header.Get("x-ms-lease-time"); val != "" { - leaseTime32, err := strconv.ParseInt(val, 10, 32) - leaseTime := int32(leaseTime32) - if err != nil { - return containerClientBreakLeaseResponse{}, err - } - result.LeaseTime = &leaseTime - } - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return containerClientBreakLeaseResponse{}, err - } - result.Date = &date - } - return result, nil -} - -// ChangeLease - [Update] establishes and manages a lock on a container for delete operations. The lock duration can be 15 -// to 60 seconds, or can be infinite -// If the operation fails it returns an *azcore.ResponseError type. -// leaseID - Specifies the current lease ID on the resource. -// proposedLeaseID - Proposed lease ID, in a GUID string format. The Blob service returns 400 (Invalid request) if the proposed -// lease ID is not in the correct format. See Guid Constructor (String) for a list of valid GUID -// string formats. -// containerClientChangeLeaseOptions - containerClientChangeLeaseOptions contains the optional parameters for the containerClient.ChangeLease -// method. -// ModifiedAccessConditions - ModifiedAccessConditions contains a group of parameters for the containerClient.Delete method. -func (client *containerClient) ChangeLease(ctx context.Context, leaseID string, proposedLeaseID string, containerClientChangeLeaseOptions *containerClientChangeLeaseOptions, modifiedAccessConditions *ModifiedAccessConditions) (containerClientChangeLeaseResponse, error) { - req, err := client.changeLeaseCreateRequest(ctx, leaseID, proposedLeaseID, containerClientChangeLeaseOptions, modifiedAccessConditions) - if err != nil { - return containerClientChangeLeaseResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return containerClientChangeLeaseResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusOK) { - return containerClientChangeLeaseResponse{}, runtime.NewResponseError(resp) - } - return client.changeLeaseHandleResponse(resp) -} - -// changeLeaseCreateRequest creates the ChangeLease request. -func (client *containerClient) changeLeaseCreateRequest(ctx context.Context, leaseID string, proposedLeaseID string, containerClientChangeLeaseOptions *containerClientChangeLeaseOptions, modifiedAccessConditions *ModifiedAccessConditions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodPut, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - reqQP.Set("comp", "lease") - reqQP.Set("restype", "container") - if containerClientChangeLeaseOptions != nil && containerClientChangeLeaseOptions.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*containerClientChangeLeaseOptions.Timeout), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - req.Raw().Header.Set("x-ms-lease-action", "change") - req.Raw().Header.Set("x-ms-lease-id", leaseID) - req.Raw().Header.Set("x-ms-proposed-lease-id", proposedLeaseID) - if modifiedAccessConditions != nil && modifiedAccessConditions.IfModifiedSince != nil { - req.Raw().Header.Set("If-Modified-Since", modifiedAccessConditions.IfModifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfUnmodifiedSince != nil { - req.Raw().Header.Set("If-Unmodified-Since", modifiedAccessConditions.IfUnmodifiedSince.Format(time.RFC1123)) - } - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if containerClientChangeLeaseOptions != nil && containerClientChangeLeaseOptions.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *containerClientChangeLeaseOptions.RequestID) - } - req.Raw().Header.Set("Accept", "application/xml") - return req, nil -} - -// changeLeaseHandleResponse handles the ChangeLease response. -func (client *containerClient) changeLeaseHandleResponse(resp *http.Response) (containerClientChangeLeaseResponse, error) { - result := containerClientChangeLeaseResponse{RawResponse: resp} - if val := resp.Header.Get("ETag"); val != "" { - result.ETag = &val - } - if val := resp.Header.Get("Last-Modified"); val != "" { - lastModified, err := time.Parse(time.RFC1123, val) - if err != nil { - return containerClientChangeLeaseResponse{}, err - } - result.LastModified = &lastModified - } - if val := resp.Header.Get("x-ms-lease-id"); val != "" { - result.LeaseID = &val - } - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return containerClientChangeLeaseResponse{}, err - } - result.Date = &date - } - return result, nil -} - -// Create - creates a new container under the specified account. If the container with the same name already exists, the operation -// fails -// If the operation fails it returns an *azcore.ResponseError type. -// containerClientCreateOptions - containerClientCreateOptions contains the optional parameters for the containerClient.Create -// method. -// ContainerCpkScopeInfo - ContainerCpkScopeInfo contains a group of parameters for the containerClient.Create method. -func (client *containerClient) Create(ctx context.Context, containerClientCreateOptions *containerClientCreateOptions, containerCpkScopeInfo *ContainerCpkScopeInfo) (containerClientCreateResponse, error) { - req, err := client.createCreateRequest(ctx, containerClientCreateOptions, containerCpkScopeInfo) - if err != nil { - return containerClientCreateResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return containerClientCreateResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusCreated) { - return containerClientCreateResponse{}, runtime.NewResponseError(resp) - } - return client.createHandleResponse(resp) -} - -// createCreateRequest creates the Create request. -func (client *containerClient) createCreateRequest(ctx context.Context, containerClientCreateOptions *containerClientCreateOptions, containerCpkScopeInfo *ContainerCpkScopeInfo) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodPut, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - reqQP.Set("restype", "container") - if containerClientCreateOptions != nil && containerClientCreateOptions.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*containerClientCreateOptions.Timeout), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - if containerClientCreateOptions != nil && containerClientCreateOptions.Metadata != nil { - for k, v := range containerClientCreateOptions.Metadata { - req.Raw().Header.Set("x-ms-meta-"+k, v) - } - } - if containerClientCreateOptions != nil && containerClientCreateOptions.Access != nil { - req.Raw().Header.Set("x-ms-blob-public-access", string(*containerClientCreateOptions.Access)) - } - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if containerClientCreateOptions != nil && containerClientCreateOptions.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *containerClientCreateOptions.RequestID) - } - if containerCpkScopeInfo != nil && containerCpkScopeInfo.DefaultEncryptionScope != nil { - req.Raw().Header.Set("x-ms-default-encryption-scope", *containerCpkScopeInfo.DefaultEncryptionScope) - } - if containerCpkScopeInfo != nil && containerCpkScopeInfo.PreventEncryptionScopeOverride != nil { - req.Raw().Header.Set("x-ms-deny-encryption-scope-override", strconv.FormatBool(*containerCpkScopeInfo.PreventEncryptionScopeOverride)) - } - req.Raw().Header.Set("Accept", "application/xml") - return req, nil -} - -// createHandleResponse handles the Create response. -func (client *containerClient) createHandleResponse(resp *http.Response) (containerClientCreateResponse, error) { - result := containerClientCreateResponse{RawResponse: resp} - if val := resp.Header.Get("ETag"); val != "" { - result.ETag = &val - } - if val := resp.Header.Get("Last-Modified"); val != "" { - lastModified, err := time.Parse(time.RFC1123, val) - if err != nil { - return containerClientCreateResponse{}, err - } - result.LastModified = &lastModified - } - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return containerClientCreateResponse{}, err - } - result.Date = &date - } - return result, nil -} - -// Delete - operation marks the specified container for deletion. The container and any blobs contained within it are later -// deleted during garbage collection -// If the operation fails it returns an *azcore.ResponseError type. -// containerClientDeleteOptions - containerClientDeleteOptions contains the optional parameters for the containerClient.Delete -// method. -// LeaseAccessConditions - LeaseAccessConditions contains a group of parameters for the containerClient.GetProperties method. -// ModifiedAccessConditions - ModifiedAccessConditions contains a group of parameters for the containerClient.Delete method. -func (client *containerClient) Delete(ctx context.Context, containerClientDeleteOptions *containerClientDeleteOptions, leaseAccessConditions *LeaseAccessConditions, modifiedAccessConditions *ModifiedAccessConditions) (containerClientDeleteResponse, error) { - req, err := client.deleteCreateRequest(ctx, containerClientDeleteOptions, leaseAccessConditions, modifiedAccessConditions) - if err != nil { - return containerClientDeleteResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return containerClientDeleteResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusAccepted) { - return containerClientDeleteResponse{}, runtime.NewResponseError(resp) - } - return client.deleteHandleResponse(resp) -} - -// deleteCreateRequest creates the Delete request. -func (client *containerClient) deleteCreateRequest(ctx context.Context, containerClientDeleteOptions *containerClientDeleteOptions, leaseAccessConditions *LeaseAccessConditions, modifiedAccessConditions *ModifiedAccessConditions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodDelete, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - reqQP.Set("restype", "container") - if containerClientDeleteOptions != nil && containerClientDeleteOptions.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*containerClientDeleteOptions.Timeout), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - if leaseAccessConditions != nil && leaseAccessConditions.LeaseID != nil { - req.Raw().Header.Set("x-ms-lease-id", *leaseAccessConditions.LeaseID) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfModifiedSince != nil { - req.Raw().Header.Set("If-Modified-Since", modifiedAccessConditions.IfModifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfUnmodifiedSince != nil { - req.Raw().Header.Set("If-Unmodified-Since", modifiedAccessConditions.IfUnmodifiedSince.Format(time.RFC1123)) - } - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if containerClientDeleteOptions != nil && containerClientDeleteOptions.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *containerClientDeleteOptions.RequestID) - } - req.Raw().Header.Set("Accept", "application/xml") - return req, nil -} - -// deleteHandleResponse handles the Delete response. -func (client *containerClient) deleteHandleResponse(resp *http.Response) (containerClientDeleteResponse, error) { - result := containerClientDeleteResponse{RawResponse: resp} - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return containerClientDeleteResponse{}, err - } - result.Date = &date - } - return result, nil -} - -// GetAccessPolicy - gets the permissions for the specified container. The permissions indicate whether container data may -// be accessed publicly. -// If the operation fails it returns an *azcore.ResponseError type. -// containerClientGetAccessPolicyOptions - containerClientGetAccessPolicyOptions contains the optional parameters for the -// containerClient.GetAccessPolicy method. -// LeaseAccessConditions - LeaseAccessConditions contains a group of parameters for the containerClient.GetProperties method. -func (client *containerClient) GetAccessPolicy(ctx context.Context, containerClientGetAccessPolicyOptions *containerClientGetAccessPolicyOptions, leaseAccessConditions *LeaseAccessConditions) (containerClientGetAccessPolicyResponse, error) { - req, err := client.getAccessPolicyCreateRequest(ctx, containerClientGetAccessPolicyOptions, leaseAccessConditions) - if err != nil { - return containerClientGetAccessPolicyResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return containerClientGetAccessPolicyResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusOK) { - return containerClientGetAccessPolicyResponse{}, runtime.NewResponseError(resp) - } - return client.getAccessPolicyHandleResponse(resp) -} - -// getAccessPolicyCreateRequest creates the GetAccessPolicy request. -func (client *containerClient) getAccessPolicyCreateRequest(ctx context.Context, containerClientGetAccessPolicyOptions *containerClientGetAccessPolicyOptions, leaseAccessConditions *LeaseAccessConditions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodGet, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - reqQP.Set("restype", "container") - reqQP.Set("comp", "acl") - if containerClientGetAccessPolicyOptions != nil && containerClientGetAccessPolicyOptions.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*containerClientGetAccessPolicyOptions.Timeout), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - if leaseAccessConditions != nil && leaseAccessConditions.LeaseID != nil { - req.Raw().Header.Set("x-ms-lease-id", *leaseAccessConditions.LeaseID) - } - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if containerClientGetAccessPolicyOptions != nil && containerClientGetAccessPolicyOptions.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *containerClientGetAccessPolicyOptions.RequestID) - } - req.Raw().Header.Set("Accept", "application/xml") - return req, nil -} - -// getAccessPolicyHandleResponse handles the GetAccessPolicy response. -func (client *containerClient) getAccessPolicyHandleResponse(resp *http.Response) (containerClientGetAccessPolicyResponse, error) { - result := containerClientGetAccessPolicyResponse{RawResponse: resp} - if val := resp.Header.Get("x-ms-blob-public-access"); val != "" { - result.BlobPublicAccess = (*PublicAccessType)(&val) - } - if val := resp.Header.Get("ETag"); val != "" { - result.ETag = &val - } - if val := resp.Header.Get("Last-Modified"); val != "" { - lastModified, err := time.Parse(time.RFC1123, val) - if err != nil { - return containerClientGetAccessPolicyResponse{}, err - } - result.LastModified = &lastModified - } - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return containerClientGetAccessPolicyResponse{}, err - } - result.Date = &date - } - if err := runtime.UnmarshalAsXML(resp, &result); err != nil { - return containerClientGetAccessPolicyResponse{}, err - } - return result, nil -} - -// GetAccountInfo - Returns the sku name and account kind -// If the operation fails it returns an *azcore.ResponseError type. -// options - containerClientGetAccountInfoOptions contains the optional parameters for the containerClient.GetAccountInfo -// method. -func (client *containerClient) GetAccountInfo(ctx context.Context, options *containerClientGetAccountInfoOptions) (containerClientGetAccountInfoResponse, error) { - req, err := client.getAccountInfoCreateRequest(ctx, options) - if err != nil { - return containerClientGetAccountInfoResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return containerClientGetAccountInfoResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusOK) { - return containerClientGetAccountInfoResponse{}, runtime.NewResponseError(resp) - } - return client.getAccountInfoHandleResponse(resp) -} - -// getAccountInfoCreateRequest creates the GetAccountInfo request. -func (client *containerClient) getAccountInfoCreateRequest(ctx context.Context, options *containerClientGetAccountInfoOptions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodGet, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - reqQP.Set("restype", "account") - reqQP.Set("comp", "properties") - req.Raw().URL.RawQuery = reqQP.Encode() - req.Raw().Header.Set("x-ms-version", "2020-10-02") - req.Raw().Header.Set("Accept", "application/xml") - return req, nil -} - -// getAccountInfoHandleResponse handles the GetAccountInfo response. -func (client *containerClient) getAccountInfoHandleResponse(resp *http.Response) (containerClientGetAccountInfoResponse, error) { - result := containerClientGetAccountInfoResponse{RawResponse: resp} - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return containerClientGetAccountInfoResponse{}, err - } - result.Date = &date - } - if val := resp.Header.Get("x-ms-sku-name"); val != "" { - result.SKUName = (*SKUName)(&val) - } - if val := resp.Header.Get("x-ms-account-kind"); val != "" { - result.AccountKind = (*AccountKind)(&val) - } - return result, nil -} - -// GetProperties - returns all user-defined metadata and system properties for the specified container. The data returned -// does not include the container's list of blobs -// If the operation fails it returns an *azcore.ResponseError type. -// containerClientGetPropertiesOptions - containerClientGetPropertiesOptions contains the optional parameters for the containerClient.GetProperties -// method. -// LeaseAccessConditions - LeaseAccessConditions contains a group of parameters for the containerClient.GetProperties method. -func (client *containerClient) GetProperties(ctx context.Context, containerClientGetPropertiesOptions *containerClientGetPropertiesOptions, leaseAccessConditions *LeaseAccessConditions) (containerClientGetPropertiesResponse, error) { - req, err := client.getPropertiesCreateRequest(ctx, containerClientGetPropertiesOptions, leaseAccessConditions) - if err != nil { - return containerClientGetPropertiesResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return containerClientGetPropertiesResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusOK) { - return containerClientGetPropertiesResponse{}, runtime.NewResponseError(resp) - } - return client.getPropertiesHandleResponse(resp) -} - -// getPropertiesCreateRequest creates the GetProperties request. -func (client *containerClient) getPropertiesCreateRequest(ctx context.Context, containerClientGetPropertiesOptions *containerClientGetPropertiesOptions, leaseAccessConditions *LeaseAccessConditions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodGet, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - reqQP.Set("restype", "container") - if containerClientGetPropertiesOptions != nil && containerClientGetPropertiesOptions.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*containerClientGetPropertiesOptions.Timeout), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - if leaseAccessConditions != nil && leaseAccessConditions.LeaseID != nil { - req.Raw().Header.Set("x-ms-lease-id", *leaseAccessConditions.LeaseID) - } - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if containerClientGetPropertiesOptions != nil && containerClientGetPropertiesOptions.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *containerClientGetPropertiesOptions.RequestID) - } - req.Raw().Header.Set("Accept", "application/xml") - return req, nil -} - -// getPropertiesHandleResponse handles the GetProperties response. -func (client *containerClient) getPropertiesHandleResponse(resp *http.Response) (containerClientGetPropertiesResponse, error) { - result := containerClientGetPropertiesResponse{RawResponse: resp} - for hh := range resp.Header { - if len(hh) > len("x-ms-meta-") && strings.EqualFold(hh[:len("x-ms-meta-")], "x-ms-meta-") { - if result.Metadata == nil { - result.Metadata = map[string]string{} - } - result.Metadata[hh[len("x-ms-meta-"):]] = resp.Header.Get(hh) - } - } - if val := resp.Header.Get("ETag"); val != "" { - result.ETag = &val - } - if val := resp.Header.Get("Last-Modified"); val != "" { - lastModified, err := time.Parse(time.RFC1123, val) - if err != nil { - return containerClientGetPropertiesResponse{}, err - } - result.LastModified = &lastModified - } - if val := resp.Header.Get("x-ms-lease-duration"); val != "" { - result.LeaseDuration = (*LeaseDurationType)(&val) - } - if val := resp.Header.Get("x-ms-lease-state"); val != "" { - result.LeaseState = (*LeaseStateType)(&val) - } - if val := resp.Header.Get("x-ms-lease-status"); val != "" { - result.LeaseStatus = (*LeaseStatusType)(&val) - } - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return containerClientGetPropertiesResponse{}, err - } - result.Date = &date - } - if val := resp.Header.Get("x-ms-blob-public-access"); val != "" { - result.BlobPublicAccess = (*PublicAccessType)(&val) - } - if val := resp.Header.Get("x-ms-has-immutability-policy"); val != "" { - hasImmutabilityPolicy, err := strconv.ParseBool(val) - if err != nil { - return containerClientGetPropertiesResponse{}, err - } - result.HasImmutabilityPolicy = &hasImmutabilityPolicy - } - if val := resp.Header.Get("x-ms-has-legal-hold"); val != "" { - hasLegalHold, err := strconv.ParseBool(val) - if err != nil { - return containerClientGetPropertiesResponse{}, err - } - result.HasLegalHold = &hasLegalHold - } - if val := resp.Header.Get("x-ms-default-encryption-scope"); val != "" { - result.DefaultEncryptionScope = &val - } - if val := resp.Header.Get("x-ms-deny-encryption-scope-override"); val != "" { - denyEncryptionScopeOverride, err := strconv.ParseBool(val) - if err != nil { - return containerClientGetPropertiesResponse{}, err - } - result.DenyEncryptionScopeOverride = &denyEncryptionScopeOverride - } - if val := resp.Header.Get("x-ms-immutable-storage-with-versioning-enabled"); val != "" { - isImmutableStorageWithVersioningEnabled, err := strconv.ParseBool(val) - if err != nil { - return containerClientGetPropertiesResponse{}, err - } - result.IsImmutableStorageWithVersioningEnabled = &isImmutableStorageWithVersioningEnabled - } - return result, nil -} - -// ListBlobFlatSegment - [Update] The List Blobs operation returns a list of the blobs under the specified container -// If the operation fails it returns an *azcore.ResponseError type. -// options - containerClientListBlobFlatSegmentOptions contains the optional parameters for the containerClient.ListBlobFlatSegment -// method. -func (client *containerClient) ListBlobFlatSegment(options *containerClientListBlobFlatSegmentOptions) *containerClientListBlobFlatSegmentPager { - return &containerClientListBlobFlatSegmentPager{ - client: client, - requester: func(ctx context.Context) (*policy.Request, error) { - return client.listBlobFlatSegmentCreateRequest(ctx, options) - }, - advancer: func(ctx context.Context, resp containerClientListBlobFlatSegmentResponse) (*policy.Request, error) { - return runtime.NewRequest(ctx, http.MethodGet, *resp.ListBlobsFlatSegmentResponse.NextMarker) - }, - } -} - -// listBlobFlatSegmentCreateRequest creates the ListBlobFlatSegment request. -func (client *containerClient) listBlobFlatSegmentCreateRequest(ctx context.Context, options *containerClientListBlobFlatSegmentOptions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodGet, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - reqQP.Set("restype", "container") - reqQP.Set("comp", "list") - if options != nil && options.Prefix != nil { - reqQP.Set("prefix", *options.Prefix) - } - if options != nil && options.Marker != nil { - reqQP.Set("marker", *options.Marker) - } - if options != nil && options.Maxresults != nil { - reqQP.Set("maxresults", strconv.FormatInt(int64(*options.Maxresults), 10)) - } - if options != nil && options.Include != nil { - reqQP.Set("include", strings.Join(strings.Fields(strings.Trim(fmt.Sprint(options.Include), "[]")), ",")) - } - if options != nil && options.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*options.Timeout), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if options != nil && options.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *options.RequestID) - } - req.Raw().Header.Set("Accept", "application/xml") - return req, nil -} - -// listBlobFlatSegmentHandleResponse handles the ListBlobFlatSegment response. -func (client *containerClient) listBlobFlatSegmentHandleResponse(resp *http.Response) (containerClientListBlobFlatSegmentResponse, error) { - result := containerClientListBlobFlatSegmentResponse{RawResponse: resp} - if val := resp.Header.Get("Content-Type"); val != "" { - result.ContentType = &val - } - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return containerClientListBlobFlatSegmentResponse{}, err - } - result.Date = &date - } - if err := runtime.UnmarshalAsXML(resp, &result.ListBlobsFlatSegmentResponse); err != nil { - return containerClientListBlobFlatSegmentResponse{}, err - } - return result, nil -} - -// ListBlobHierarchySegment - [Update] The List Blobs operation returns a list of the blobs under the specified container -// If the operation fails it returns an *azcore.ResponseError type. -// delimiter - When the request includes this parameter, the operation returns a BlobPrefix element in the response body that -// acts as a placeholder for all blobs whose names begin with the same substring up to the -// appearance of the delimiter character. The delimiter may be a single character or a string. -// options - containerClientListBlobHierarchySegmentOptions contains the optional parameters for the containerClient.ListBlobHierarchySegment -// method. -func (client *containerClient) ListBlobHierarchySegment(delimiter string, options *containerClientListBlobHierarchySegmentOptions) *containerClientListBlobHierarchySegmentPager { - return &containerClientListBlobHierarchySegmentPager{ - client: client, - requester: func(ctx context.Context) (*policy.Request, error) { - return client.listBlobHierarchySegmentCreateRequest(ctx, delimiter, options) - }, - advancer: func(ctx context.Context, resp containerClientListBlobHierarchySegmentResponse) (*policy.Request, error) { - return runtime.NewRequest(ctx, http.MethodGet, *resp.ListBlobsHierarchySegmentResponse.NextMarker) - }, - } -} - -// listBlobHierarchySegmentCreateRequest creates the ListBlobHierarchySegment request. -func (client *containerClient) listBlobHierarchySegmentCreateRequest(ctx context.Context, delimiter string, options *containerClientListBlobHierarchySegmentOptions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodGet, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - reqQP.Set("restype", "container") - reqQP.Set("comp", "list") - if options != nil && options.Prefix != nil { - reqQP.Set("prefix", *options.Prefix) - } - reqQP.Set("delimiter", delimiter) - if options != nil && options.Marker != nil { - reqQP.Set("marker", *options.Marker) - } - if options != nil && options.Maxresults != nil { - reqQP.Set("maxresults", strconv.FormatInt(int64(*options.Maxresults), 10)) - } - if options != nil && options.Include != nil { - reqQP.Set("include", strings.Join(strings.Fields(strings.Trim(fmt.Sprint(options.Include), "[]")), ",")) - } - if options != nil && options.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*options.Timeout), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if options != nil && options.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *options.RequestID) - } - req.Raw().Header.Set("Accept", "application/xml") - return req, nil -} - -// listBlobHierarchySegmentHandleResponse handles the ListBlobHierarchySegment response. -func (client *containerClient) listBlobHierarchySegmentHandleResponse(resp *http.Response) (containerClientListBlobHierarchySegmentResponse, error) { - result := containerClientListBlobHierarchySegmentResponse{RawResponse: resp} - if val := resp.Header.Get("Content-Type"); val != "" { - result.ContentType = &val - } - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return containerClientListBlobHierarchySegmentResponse{}, err - } - result.Date = &date - } - if err := runtime.UnmarshalAsXML(resp, &result.ListBlobsHierarchySegmentResponse); err != nil { - return containerClientListBlobHierarchySegmentResponse{}, err - } - return result, nil -} - -// ReleaseLease - [Update] establishes and manages a lock on a container for delete operations. The lock duration can be 15 -// to 60 seconds, or can be infinite -// If the operation fails it returns an *azcore.ResponseError type. -// leaseID - Specifies the current lease ID on the resource. -// containerClientReleaseLeaseOptions - containerClientReleaseLeaseOptions contains the optional parameters for the containerClient.ReleaseLease -// method. -// ModifiedAccessConditions - ModifiedAccessConditions contains a group of parameters for the containerClient.Delete method. -func (client *containerClient) ReleaseLease(ctx context.Context, leaseID string, containerClientReleaseLeaseOptions *containerClientReleaseLeaseOptions, modifiedAccessConditions *ModifiedAccessConditions) (containerClientReleaseLeaseResponse, error) { - req, err := client.releaseLeaseCreateRequest(ctx, leaseID, containerClientReleaseLeaseOptions, modifiedAccessConditions) - if err != nil { - return containerClientReleaseLeaseResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return containerClientReleaseLeaseResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusOK) { - return containerClientReleaseLeaseResponse{}, runtime.NewResponseError(resp) - } - return client.releaseLeaseHandleResponse(resp) -} - -// releaseLeaseCreateRequest creates the ReleaseLease request. -func (client *containerClient) releaseLeaseCreateRequest(ctx context.Context, leaseID string, containerClientReleaseLeaseOptions *containerClientReleaseLeaseOptions, modifiedAccessConditions *ModifiedAccessConditions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodPut, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - reqQP.Set("comp", "lease") - reqQP.Set("restype", "container") - if containerClientReleaseLeaseOptions != nil && containerClientReleaseLeaseOptions.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*containerClientReleaseLeaseOptions.Timeout), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - req.Raw().Header.Set("x-ms-lease-action", "release") - req.Raw().Header.Set("x-ms-lease-id", leaseID) - if modifiedAccessConditions != nil && modifiedAccessConditions.IfModifiedSince != nil { - req.Raw().Header.Set("If-Modified-Since", modifiedAccessConditions.IfModifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfUnmodifiedSince != nil { - req.Raw().Header.Set("If-Unmodified-Since", modifiedAccessConditions.IfUnmodifiedSince.Format(time.RFC1123)) - } - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if containerClientReleaseLeaseOptions != nil && containerClientReleaseLeaseOptions.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *containerClientReleaseLeaseOptions.RequestID) - } - req.Raw().Header.Set("Accept", "application/xml") - return req, nil -} - -// releaseLeaseHandleResponse handles the ReleaseLease response. -func (client *containerClient) releaseLeaseHandleResponse(resp *http.Response) (containerClientReleaseLeaseResponse, error) { - result := containerClientReleaseLeaseResponse{RawResponse: resp} - if val := resp.Header.Get("ETag"); val != "" { - result.ETag = &val - } - if val := resp.Header.Get("Last-Modified"); val != "" { - lastModified, err := time.Parse(time.RFC1123, val) - if err != nil { - return containerClientReleaseLeaseResponse{}, err - } - result.LastModified = &lastModified - } - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return containerClientReleaseLeaseResponse{}, err - } - result.Date = &date - } - return result, nil -} - -// Rename - Renames an existing container. -// If the operation fails it returns an *azcore.ResponseError type. -// sourceContainerName - Required. Specifies the name of the container to rename. -// options - containerClientRenameOptions contains the optional parameters for the containerClient.Rename method. -func (client *containerClient) Rename(ctx context.Context, sourceContainerName string, options *containerClientRenameOptions) (containerClientRenameResponse, error) { - req, err := client.renameCreateRequest(ctx, sourceContainerName, options) - if err != nil { - return containerClientRenameResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return containerClientRenameResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusOK) { - return containerClientRenameResponse{}, runtime.NewResponseError(resp) - } - return client.renameHandleResponse(resp) -} - -// renameCreateRequest creates the Rename request. -func (client *containerClient) renameCreateRequest(ctx context.Context, sourceContainerName string, options *containerClientRenameOptions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodPut, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - reqQP.Set("restype", "container") - reqQP.Set("comp", "rename") - if options != nil && options.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*options.Timeout), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if options != nil && options.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *options.RequestID) - } - req.Raw().Header.Set("x-ms-source-container-name", sourceContainerName) - if options != nil && options.SourceLeaseID != nil { - req.Raw().Header.Set("x-ms-source-lease-id", *options.SourceLeaseID) - } - req.Raw().Header.Set("Accept", "application/xml") - return req, nil -} - -// renameHandleResponse handles the Rename response. -func (client *containerClient) renameHandleResponse(resp *http.Response) (containerClientRenameResponse, error) { - result := containerClientRenameResponse{RawResponse: resp} - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return containerClientRenameResponse{}, err - } - result.Date = &date - } - return result, nil -} - -// RenewLease - [Update] establishes and manages a lock on a container for delete operations. The lock duration can be 15 -// to 60 seconds, or can be infinite -// If the operation fails it returns an *azcore.ResponseError type. -// leaseID - Specifies the current lease ID on the resource. -// containerClientRenewLeaseOptions - containerClientRenewLeaseOptions contains the optional parameters for the containerClient.RenewLease -// method. -// ModifiedAccessConditions - ModifiedAccessConditions contains a group of parameters for the containerClient.Delete method. -func (client *containerClient) RenewLease(ctx context.Context, leaseID string, containerClientRenewLeaseOptions *containerClientRenewLeaseOptions, modifiedAccessConditions *ModifiedAccessConditions) (containerClientRenewLeaseResponse, error) { - req, err := client.renewLeaseCreateRequest(ctx, leaseID, containerClientRenewLeaseOptions, modifiedAccessConditions) - if err != nil { - return containerClientRenewLeaseResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return containerClientRenewLeaseResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusOK) { - return containerClientRenewLeaseResponse{}, runtime.NewResponseError(resp) - } - return client.renewLeaseHandleResponse(resp) -} - -// renewLeaseCreateRequest creates the RenewLease request. -func (client *containerClient) renewLeaseCreateRequest(ctx context.Context, leaseID string, containerClientRenewLeaseOptions *containerClientRenewLeaseOptions, modifiedAccessConditions *ModifiedAccessConditions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodPut, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - reqQP.Set("comp", "lease") - reqQP.Set("restype", "container") - if containerClientRenewLeaseOptions != nil && containerClientRenewLeaseOptions.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*containerClientRenewLeaseOptions.Timeout), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - req.Raw().Header.Set("x-ms-lease-action", "renew") - req.Raw().Header.Set("x-ms-lease-id", leaseID) - if modifiedAccessConditions != nil && modifiedAccessConditions.IfModifiedSince != nil { - req.Raw().Header.Set("If-Modified-Since", modifiedAccessConditions.IfModifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfUnmodifiedSince != nil { - req.Raw().Header.Set("If-Unmodified-Since", modifiedAccessConditions.IfUnmodifiedSince.Format(time.RFC1123)) - } - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if containerClientRenewLeaseOptions != nil && containerClientRenewLeaseOptions.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *containerClientRenewLeaseOptions.RequestID) - } - req.Raw().Header.Set("Accept", "application/xml") - return req, nil -} - -// renewLeaseHandleResponse handles the RenewLease response. -func (client *containerClient) renewLeaseHandleResponse(resp *http.Response) (containerClientRenewLeaseResponse, error) { - result := containerClientRenewLeaseResponse{RawResponse: resp} - if val := resp.Header.Get("ETag"); val != "" { - result.ETag = &val - } - if val := resp.Header.Get("Last-Modified"); val != "" { - lastModified, err := time.Parse(time.RFC1123, val) - if err != nil { - return containerClientRenewLeaseResponse{}, err - } - result.LastModified = &lastModified - } - if val := resp.Header.Get("x-ms-lease-id"); val != "" { - result.LeaseID = &val - } - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return containerClientRenewLeaseResponse{}, err - } - result.Date = &date - } - return result, nil -} - -// Restore - Restores a previously-deleted container. -// If the operation fails it returns an *azcore.ResponseError type. -// options - containerClientRestoreOptions contains the optional parameters for the containerClient.Restore method. -func (client *containerClient) Restore(ctx context.Context, options *containerClientRestoreOptions) (containerClientRestoreResponse, error) { - req, err := client.restoreCreateRequest(ctx, options) - if err != nil { - return containerClientRestoreResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return containerClientRestoreResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusCreated) { - return containerClientRestoreResponse{}, runtime.NewResponseError(resp) - } - return client.restoreHandleResponse(resp) -} - -// restoreCreateRequest creates the Restore request. -func (client *containerClient) restoreCreateRequest(ctx context.Context, options *containerClientRestoreOptions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodPut, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - reqQP.Set("restype", "container") - reqQP.Set("comp", "undelete") - if options != nil && options.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*options.Timeout), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if options != nil && options.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *options.RequestID) - } - if options != nil && options.DeletedContainerName != nil { - req.Raw().Header.Set("x-ms-deleted-container-name", *options.DeletedContainerName) - } - if options != nil && options.DeletedContainerVersion != nil { - req.Raw().Header.Set("x-ms-deleted-container-version", *options.DeletedContainerVersion) - } - req.Raw().Header.Set("Accept", "application/xml") - return req, nil -} - -// restoreHandleResponse handles the Restore response. -func (client *containerClient) restoreHandleResponse(resp *http.Response) (containerClientRestoreResponse, error) { - result := containerClientRestoreResponse{RawResponse: resp} - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return containerClientRestoreResponse{}, err - } - result.Date = &date - } - return result, nil -} - -// SetAccessPolicy - sets the permissions for the specified container. The permissions indicate whether blobs in a container -// may be accessed publicly. -// If the operation fails it returns an *azcore.ResponseError type. -// containerClientSetAccessPolicyOptions - containerClientSetAccessPolicyOptions contains the optional parameters for the -// containerClient.SetAccessPolicy method. -// LeaseAccessConditions - LeaseAccessConditions contains a group of parameters for the containerClient.GetProperties method. -// ModifiedAccessConditions - ModifiedAccessConditions contains a group of parameters for the containerClient.Delete method. -func (client *containerClient) SetAccessPolicy(ctx context.Context, containerClientSetAccessPolicyOptions *containerClientSetAccessPolicyOptions, leaseAccessConditions *LeaseAccessConditions, modifiedAccessConditions *ModifiedAccessConditions) (containerClientSetAccessPolicyResponse, error) { - req, err := client.setAccessPolicyCreateRequest(ctx, containerClientSetAccessPolicyOptions, leaseAccessConditions, modifiedAccessConditions) - if err != nil { - return containerClientSetAccessPolicyResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return containerClientSetAccessPolicyResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusOK) { - return containerClientSetAccessPolicyResponse{}, runtime.NewResponseError(resp) - } - return client.setAccessPolicyHandleResponse(resp) -} - -// setAccessPolicyCreateRequest creates the SetAccessPolicy request. -func (client *containerClient) setAccessPolicyCreateRequest(ctx context.Context, containerClientSetAccessPolicyOptions *containerClientSetAccessPolicyOptions, leaseAccessConditions *LeaseAccessConditions, modifiedAccessConditions *ModifiedAccessConditions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodPut, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - reqQP.Set("restype", "container") - reqQP.Set("comp", "acl") - if containerClientSetAccessPolicyOptions != nil && containerClientSetAccessPolicyOptions.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*containerClientSetAccessPolicyOptions.Timeout), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - if leaseAccessConditions != nil && leaseAccessConditions.LeaseID != nil { - req.Raw().Header.Set("x-ms-lease-id", *leaseAccessConditions.LeaseID) - } - if containerClientSetAccessPolicyOptions != nil && containerClientSetAccessPolicyOptions.Access != nil { - req.Raw().Header.Set("x-ms-blob-public-access", string(*containerClientSetAccessPolicyOptions.Access)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfModifiedSince != nil { - req.Raw().Header.Set("If-Modified-Since", modifiedAccessConditions.IfModifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfUnmodifiedSince != nil { - req.Raw().Header.Set("If-Unmodified-Since", modifiedAccessConditions.IfUnmodifiedSince.Format(time.RFC1123)) - } - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if containerClientSetAccessPolicyOptions != nil && containerClientSetAccessPolicyOptions.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *containerClientSetAccessPolicyOptions.RequestID) - } - req.Raw().Header.Set("Accept", "application/xml") - type wrapper struct { - XMLName xml.Name `xml:"SignedIdentifiers"` - ContainerACL *[]*SignedIdentifier `xml:"SignedIdentifier"` - } - if containerClientSetAccessPolicyOptions != nil && containerClientSetAccessPolicyOptions.ContainerACL != nil { - return req, runtime.MarshalAsXML(req, wrapper{ContainerACL: &containerClientSetAccessPolicyOptions.ContainerACL}) - } - return req, nil -} - -// setAccessPolicyHandleResponse handles the SetAccessPolicy response. -func (client *containerClient) setAccessPolicyHandleResponse(resp *http.Response) (containerClientSetAccessPolicyResponse, error) { - result := containerClientSetAccessPolicyResponse{RawResponse: resp} - if val := resp.Header.Get("ETag"); val != "" { - result.ETag = &val - } - if val := resp.Header.Get("Last-Modified"); val != "" { - lastModified, err := time.Parse(time.RFC1123, val) - if err != nil { - return containerClientSetAccessPolicyResponse{}, err - } - result.LastModified = &lastModified - } - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return containerClientSetAccessPolicyResponse{}, err - } - result.Date = &date - } - return result, nil -} - -// SetMetadata - operation sets one or more user-defined name-value pairs for the specified container. -// If the operation fails it returns an *azcore.ResponseError type. -// containerClientSetMetadataOptions - containerClientSetMetadataOptions contains the optional parameters for the containerClient.SetMetadata -// method. -// LeaseAccessConditions - LeaseAccessConditions contains a group of parameters for the containerClient.GetProperties method. -// ModifiedAccessConditions - ModifiedAccessConditions contains a group of parameters for the containerClient.Delete method. -func (client *containerClient) SetMetadata(ctx context.Context, containerClientSetMetadataOptions *containerClientSetMetadataOptions, leaseAccessConditions *LeaseAccessConditions, modifiedAccessConditions *ModifiedAccessConditions) (containerClientSetMetadataResponse, error) { - req, err := client.setMetadataCreateRequest(ctx, containerClientSetMetadataOptions, leaseAccessConditions, modifiedAccessConditions) - if err != nil { - return containerClientSetMetadataResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return containerClientSetMetadataResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusOK) { - return containerClientSetMetadataResponse{}, runtime.NewResponseError(resp) - } - return client.setMetadataHandleResponse(resp) -} - -// setMetadataCreateRequest creates the SetMetadata request. -func (client *containerClient) setMetadataCreateRequest(ctx context.Context, containerClientSetMetadataOptions *containerClientSetMetadataOptions, leaseAccessConditions *LeaseAccessConditions, modifiedAccessConditions *ModifiedAccessConditions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodPut, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - reqQP.Set("restype", "container") - reqQP.Set("comp", "metadata") - if containerClientSetMetadataOptions != nil && containerClientSetMetadataOptions.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*containerClientSetMetadataOptions.Timeout), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - if leaseAccessConditions != nil && leaseAccessConditions.LeaseID != nil { - req.Raw().Header.Set("x-ms-lease-id", *leaseAccessConditions.LeaseID) - } - if containerClientSetMetadataOptions != nil && containerClientSetMetadataOptions.Metadata != nil { - for k, v := range containerClientSetMetadataOptions.Metadata { - req.Raw().Header.Set("x-ms-meta-"+k, v) - } - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfModifiedSince != nil { - req.Raw().Header.Set("If-Modified-Since", modifiedAccessConditions.IfModifiedSince.Format(time.RFC1123)) - } - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if containerClientSetMetadataOptions != nil && containerClientSetMetadataOptions.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *containerClientSetMetadataOptions.RequestID) - } - req.Raw().Header.Set("Accept", "application/xml") - return req, nil -} - -// setMetadataHandleResponse handles the SetMetadata response. -func (client *containerClient) setMetadataHandleResponse(resp *http.Response) (containerClientSetMetadataResponse, error) { - result := containerClientSetMetadataResponse{RawResponse: resp} - if val := resp.Header.Get("ETag"); val != "" { - result.ETag = &val - } - if val := resp.Header.Get("Last-Modified"); val != "" { - lastModified, err := time.Parse(time.RFC1123, val) - if err != nil { - return containerClientSetMetadataResponse{}, err - } - result.LastModified = &lastModified - } - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return containerClientSetMetadataResponse{}, err - } - result.Date = &date - } - return result, nil -} - -// SubmitBatch - The Batch operation allows multiple API calls to be embedded into a single HTTP request. -// If the operation fails it returns an *azcore.ResponseError type. -// contentLength - The length of the request. -// multipartContentType - Required. The value of this header must be multipart/mixed with a batch boundary. Example header -// value: multipart/mixed; boundary=batch_ -// body - Initial data -// options - containerClientSubmitBatchOptions contains the optional parameters for the containerClient.SubmitBatch method. -func (client *containerClient) SubmitBatch(ctx context.Context, contentLength int64, multipartContentType string, body io.ReadSeekCloser, options *containerClientSubmitBatchOptions) (containerClientSubmitBatchResponse, error) { - req, err := client.submitBatchCreateRequest(ctx, contentLength, multipartContentType, body, options) - if err != nil { - return containerClientSubmitBatchResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return containerClientSubmitBatchResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusAccepted) { - return containerClientSubmitBatchResponse{}, runtime.NewResponseError(resp) - } - return client.submitBatchHandleResponse(resp) -} - -// submitBatchCreateRequest creates the SubmitBatch request. -func (client *containerClient) submitBatchCreateRequest(ctx context.Context, contentLength int64, multipartContentType string, body io.ReadSeekCloser, options *containerClientSubmitBatchOptions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodPost, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - reqQP.Set("restype", "container") - reqQP.Set("comp", "batch") - if options != nil && options.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*options.Timeout), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - runtime.SkipBodyDownload(req) - req.Raw().Header.Set("Content-Length", strconv.FormatInt(contentLength, 10)) - req.Raw().Header.Set("Content-Type", multipartContentType) - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if options != nil && options.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *options.RequestID) - } - req.Raw().Header.Set("Accept", "application/xml") - return req, runtime.MarshalAsXML(req, body) -} - -// submitBatchHandleResponse handles the SubmitBatch response. -func (client *containerClient) submitBatchHandleResponse(resp *http.Response) (containerClientSubmitBatchResponse, error) { - result := containerClientSubmitBatchResponse{RawResponse: resp} - if val := resp.Header.Get("Content-Type"); val != "" { - result.ContentType = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - return result, nil -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zz_generated_models.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zz_generated_models.go deleted file mode 100644 index d40d63b1b0d4..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zz_generated_models.go +++ /dev/null @@ -1,2158 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -package azblob - -import ( - "encoding/xml" - "time" -) - -// AccessPolicy - An Access policy -type AccessPolicy struct { - // the date-time the policy expires - Expiry *time.Time `xml:"Expiry"` - - // the permissions for the acl policy - Permission *string `xml:"Permission"` - - // the date-time the policy is active - Start *time.Time `xml:"Start"` -} - -// MarshalXML implements the xml.Marshaller interface for type AccessPolicy. -func (a AccessPolicy) MarshalXML(e *xml.Encoder, start xml.StartElement) error { - type alias AccessPolicy - aux := &struct { - *alias - Expiry *timeRFC3339 `xml:"Expiry"` - Start *timeRFC3339 `xml:"Start"` - }{ - alias: (*alias)(&a), - Expiry: (*timeRFC3339)(a.Expiry), - Start: (*timeRFC3339)(a.Start), - } - return e.EncodeElement(aux, start) -} - -// UnmarshalXML implements the xml.Unmarshaller interface for type AccessPolicy. -func (a *AccessPolicy) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { - type alias AccessPolicy - aux := &struct { - *alias - Expiry *timeRFC3339 `xml:"Expiry"` - Start *timeRFC3339 `xml:"Start"` - }{ - alias: (*alias)(a), - } - if err := d.DecodeElement(aux, &start); err != nil { - return err - } - a.Expiry = (*time.Time)(aux.Expiry) - a.Start = (*time.Time)(aux.Start) - return nil -} - -// AppendPositionAccessConditions contains a group of parameters for the appendBlobClient.AppendBlock method. -type AppendPositionAccessConditions struct { - // Optional conditional header, used only for the Append Block operation. A number indicating the byte offset to compare. - // Append Block will succeed only if the append position is equal to this number. If - // it is not, the request will fail with the AppendPositionConditionNotMet error (HTTP status code 412 - Precondition Failed). - AppendPosition *int64 - // Optional conditional header. The max length in bytes permitted for the append blob. If the Append Block operation would - // cause the blob to exceed that limit or if the blob size is already greater than - // the value specified in this header, the request will fail with MaxBlobSizeConditionNotMet error (HTTP status code 412 - - // Precondition Failed). - MaxSize *int64 -} - -// ArrowConfiguration - Groups the settings used for formatting the response if the response should be Arrow formatted. -type ArrowConfiguration struct { - // REQUIRED - Schema []*ArrowField `xml:"Schema>Field"` -} - -// MarshalXML implements the xml.Marshaller interface for type ArrowConfiguration. -func (a ArrowConfiguration) MarshalXML(e *xml.Encoder, start xml.StartElement) error { - type alias ArrowConfiguration - aux := &struct { - *alias - Schema *[]*ArrowField `xml:"Schema>Field"` - }{ - alias: (*alias)(&a), - } - if a.Schema != nil { - aux.Schema = &a.Schema - } - return e.EncodeElement(aux, start) -} - -// ArrowField - Groups settings regarding specific field of an arrow schema -type ArrowField struct { - // REQUIRED - Type *string `xml:"Type"` - Name *string `xml:"Name"` - Precision *int32 `xml:"Precision"` - Scale *int32 `xml:"Scale"` -} - -// BlobFlatListSegment struct -type BlobFlatListSegment struct { - // REQUIRED - BlobItems []*BlobItemInternal `xml:"Blob"` -} - -// MarshalXML implements the xml.Marshaller interface for type BlobFlatListSegment. -func (b BlobFlatListSegment) MarshalXML(e *xml.Encoder, start xml.StartElement) error { - type alias BlobFlatListSegment - aux := &struct { - *alias - BlobItems *[]*BlobItemInternal `xml:"Blob"` - }{ - alias: (*alias)(&b), - } - if b.BlobItems != nil { - aux.BlobItems = &b.BlobItems - } - return e.EncodeElement(aux, start) -} - -// BlobHTTPHeaders contains a group of parameters for the blobClient.SetHTTPHeaders method. -type BlobHTTPHeaders struct { - // Optional. Sets the blob's cache control. If specified, this property is stored with the blob and returned with a read request. - BlobCacheControl *string - // Optional. Sets the blob's Content-Disposition header. - BlobContentDisposition *string - // Optional. Sets the blob's content encoding. If specified, this property is stored with the blob and returned with a read - // request. - BlobContentEncoding *string - // Optional. Set the blob's content language. If specified, this property is stored with the blob and returned with a read - // request. - BlobContentLanguage *string - // Optional. An MD5 hash of the blob content. Note that this hash is not validated, as the hashes for the individual blocks - // were validated when each was uploaded. - BlobContentMD5 []byte - // Optional. Sets the blob's content type. If specified, this property is stored with the blob and returned with a read request. - BlobContentType *string -} - -// BlobHierarchyListSegment struct -type BlobHierarchyListSegment struct { - // REQUIRED - BlobItems []*BlobItemInternal `xml:"Blob"` - BlobPrefixes []*BlobPrefix `xml:"BlobPrefix"` -} - -// MarshalXML implements the xml.Marshaller interface for type BlobHierarchyListSegment. -func (b BlobHierarchyListSegment) MarshalXML(e *xml.Encoder, start xml.StartElement) error { - type alias BlobHierarchyListSegment - aux := &struct { - *alias - BlobItems *[]*BlobItemInternal `xml:"Blob"` - BlobPrefixes *[]*BlobPrefix `xml:"BlobPrefix"` - }{ - alias: (*alias)(&b), - } - if b.BlobItems != nil { - aux.BlobItems = &b.BlobItems - } - if b.BlobPrefixes != nil { - aux.BlobPrefixes = &b.BlobPrefixes - } - return e.EncodeElement(aux, start) -} - -// BlobItemInternal - An Azure Storage blob -type BlobItemInternal struct { - // REQUIRED - Deleted *bool `xml:"Deleted"` - - // REQUIRED - Name *string `xml:"Name"` - - // REQUIRED; Properties of a blob - Properties *BlobPropertiesInternal `xml:"Properties"` - - // REQUIRED - Snapshot *string `xml:"Snapshot"` - - // Blob tags - BlobTags *BlobTags `xml:"Tags"` - HasVersionsOnly *bool `xml:"HasVersionsOnly"` - IsCurrentVersion *bool `xml:"IsCurrentVersion"` - - // Dictionary of - Metadata map[string]*string `xml:"Metadata"` - - // Dictionary of - OrMetadata map[string]*string `xml:"OrMetadata"` - VersionID *string `xml:"VersionId"` -} - -// UnmarshalXML implements the xml.Unmarshaller interface for type BlobItemInternal. -func (b *BlobItemInternal) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { - type alias BlobItemInternal - aux := &struct { - *alias - Metadata additionalProperties `xml:"Metadata"` - OrMetadata additionalProperties `xml:"OrMetadata"` - }{ - alias: (*alias)(b), - } - if err := d.DecodeElement(aux, &start); err != nil { - return err - } - b.Metadata = (map[string]*string)(aux.Metadata) - b.OrMetadata = (map[string]*string)(aux.OrMetadata) - return nil -} - -// BlobPrefix struct -type BlobPrefix struct { - // REQUIRED - Name *string `xml:"Name"` -} - -// BlobPropertiesInternal - Properties of a blob -type BlobPropertiesInternal struct { - // REQUIRED - Etag *string `xml:"Etag"` - - // REQUIRED - LastModified *time.Time `xml:"Last-Modified"` - AccessTier *AccessTier `xml:"AccessTier"` - AccessTierChangeTime *time.Time `xml:"AccessTierChangeTime"` - AccessTierInferred *bool `xml:"AccessTierInferred"` - ArchiveStatus *ArchiveStatus `xml:"ArchiveStatus"` - BlobSequenceNumber *int64 `xml:"x-ms-blob-sequence-number"` - BlobType *BlobType `xml:"BlobType"` - CacheControl *string `xml:"Cache-Control"` - ContentDisposition *string `xml:"Content-Disposition"` - ContentEncoding *string `xml:"Content-Encoding"` - ContentLanguage *string `xml:"Content-Language"` - - // Size in bytes - ContentLength *int64 `xml:"Content-Length"` - ContentMD5 []byte `xml:"Content-MD5"` - ContentType *string `xml:"Content-Type"` - CopyCompletionTime *time.Time `xml:"CopyCompletionTime"` - CopyID *string `xml:"CopyId"` - CopyProgress *string `xml:"CopyProgress"` - CopySource *string `xml:"CopySource"` - CopyStatus *CopyStatusType `xml:"CopyStatus"` - CopyStatusDescription *string `xml:"CopyStatusDescription"` - CreationTime *time.Time `xml:"Creation-Time"` - CustomerProvidedKeySHA256 *string `xml:"CustomerProvidedKeySha256"` - DeletedTime *time.Time `xml:"DeletedTime"` - DestinationSnapshot *string `xml:"DestinationSnapshot"` - - // The name of the encryption scope under which the blob is encrypted. - EncryptionScope *string `xml:"EncryptionScope"` - ExpiresOn *time.Time `xml:"Expiry-Time"` - ImmutabilityPolicyExpiresOn *time.Time `xml:"ImmutabilityPolicyUntilDate"` - ImmutabilityPolicyMode *BlobImmutabilityPolicyMode `xml:"ImmutabilityPolicyMode"` - IncrementalCopy *bool `xml:"IncrementalCopy"` - IsSealed *bool `xml:"Sealed"` - LastAccessedOn *time.Time `xml:"LastAccessTime"` - LeaseDuration *LeaseDurationType `xml:"LeaseDuration"` - LeaseState *LeaseStateType `xml:"LeaseState"` - LeaseStatus *LeaseStatusType `xml:"LeaseStatus"` - LegalHold *bool `xml:"LegalHold"` - - // If an object is in rehydrate pending state then this header is returned with priority of rehydrate. Valid values are High - // and Standard. - RehydratePriority *RehydratePriority `xml:"RehydratePriority"` - RemainingRetentionDays *int32 `xml:"RemainingRetentionDays"` - ServerEncrypted *bool `xml:"ServerEncrypted"` - TagCount *int32 `xml:"TagCount"` -} - -// MarshalXML implements the xml.Marshaller interface for type BlobPropertiesInternal. -func (b BlobPropertiesInternal) MarshalXML(e *xml.Encoder, start xml.StartElement) error { - type alias BlobPropertiesInternal - aux := &struct { - *alias - AccessTierChangeTime *timeRFC1123 `xml:"AccessTierChangeTime"` - ContentMD5 *[]byte `xml:"Content-MD5"` - CopyCompletionTime *timeRFC1123 `xml:"CopyCompletionTime"` - CreationTime *timeRFC1123 `xml:"Creation-Time"` - DeletedTime *timeRFC1123 `xml:"DeletedTime"` - ExpiresOn *timeRFC1123 `xml:"Expiry-Time"` - ImmutabilityPolicyExpiresOn *timeRFC1123 `xml:"ImmutabilityPolicyUntilDate"` - LastAccessedOn *timeRFC1123 `xml:"LastAccessTime"` - LastModified *timeRFC1123 `xml:"Last-Modified"` - }{ - alias: (*alias)(&b), - AccessTierChangeTime: (*timeRFC1123)(b.AccessTierChangeTime), - CopyCompletionTime: (*timeRFC1123)(b.CopyCompletionTime), - CreationTime: (*timeRFC1123)(b.CreationTime), - DeletedTime: (*timeRFC1123)(b.DeletedTime), - ExpiresOn: (*timeRFC1123)(b.ExpiresOn), - ImmutabilityPolicyExpiresOn: (*timeRFC1123)(b.ImmutabilityPolicyExpiresOn), - LastAccessedOn: (*timeRFC1123)(b.LastAccessedOn), - LastModified: (*timeRFC1123)(b.LastModified), - } - if b.ContentMD5 != nil { - aux.ContentMD5 = &b.ContentMD5 - } - return e.EncodeElement(aux, start) -} - -// UnmarshalXML implements the xml.Unmarshaller interface for type BlobPropertiesInternal. -func (b *BlobPropertiesInternal) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { - type alias BlobPropertiesInternal - aux := &struct { - *alias - AccessTierChangeTime *timeRFC1123 `xml:"AccessTierChangeTime"` - ContentMD5 *[]byte `xml:"Content-MD5"` - CopyCompletionTime *timeRFC1123 `xml:"CopyCompletionTime"` - CreationTime *timeRFC1123 `xml:"Creation-Time"` - DeletedTime *timeRFC1123 `xml:"DeletedTime"` - ExpiresOn *timeRFC1123 `xml:"Expiry-Time"` - ImmutabilityPolicyExpiresOn *timeRFC1123 `xml:"ImmutabilityPolicyUntilDate"` - LastAccessedOn *timeRFC1123 `xml:"LastAccessTime"` - LastModified *timeRFC1123 `xml:"Last-Modified"` - }{ - alias: (*alias)(b), - } - if err := d.DecodeElement(aux, &start); err != nil { - return err - } - b.AccessTierChangeTime = (*time.Time)(aux.AccessTierChangeTime) - b.CopyCompletionTime = (*time.Time)(aux.CopyCompletionTime) - b.CreationTime = (*time.Time)(aux.CreationTime) - b.DeletedTime = (*time.Time)(aux.DeletedTime) - b.ExpiresOn = (*time.Time)(aux.ExpiresOn) - b.ImmutabilityPolicyExpiresOn = (*time.Time)(aux.ImmutabilityPolicyExpiresOn) - b.LastAccessedOn = (*time.Time)(aux.LastAccessedOn) - b.LastModified = (*time.Time)(aux.LastModified) - return nil -} - -// BlobTag struct -type BlobTag struct { - // REQUIRED - Key *string `xml:"Key"` - - // REQUIRED - Value *string `xml:"Value"` -} - -// BlobTags - Blob tags -type BlobTags struct { - // REQUIRED - BlobTagSet []*BlobTag `xml:"TagSet>Tag"` -} - -// MarshalXML implements the xml.Marshaller interface for type BlobTags. -func (b BlobTags) MarshalXML(e *xml.Encoder, start xml.StartElement) error { - start.Name.Local = "Tags" - type alias BlobTags - aux := &struct { - *alias - BlobTagSet *[]*BlobTag `xml:"TagSet>Tag"` - }{ - alias: (*alias)(&b), - } - if b.BlobTagSet != nil { - aux.BlobTagSet = &b.BlobTagSet - } - return e.EncodeElement(aux, start) -} - -// Block - Represents a single block in a block blob. It describes the block's ID and size. -type Block struct { - // REQUIRED; The base64 encoded block ID. - Name *string `xml:"Name"` - - // REQUIRED; The block size in bytes. - Size *int64 `xml:"Size"` -} - -// BlockList struct -type BlockList struct { - CommittedBlocks []*Block `xml:"CommittedBlocks>Block"` - UncommittedBlocks []*Block `xml:"UncommittedBlocks>Block"` -} - -// MarshalXML implements the xml.Marshaller interface for type BlockList. -func (b BlockList) MarshalXML(e *xml.Encoder, start xml.StartElement) error { - type alias BlockList - aux := &struct { - *alias - CommittedBlocks *[]*Block `xml:"CommittedBlocks>Block"` - UncommittedBlocks *[]*Block `xml:"UncommittedBlocks>Block"` - }{ - alias: (*alias)(&b), - } - if b.CommittedBlocks != nil { - aux.CommittedBlocks = &b.CommittedBlocks - } - if b.UncommittedBlocks != nil { - aux.UncommittedBlocks = &b.UncommittedBlocks - } - return e.EncodeElement(aux, start) -} - -// BlockLookupList struct -type BlockLookupList struct { - Committed []*string `xml:"Committed"` - Latest []*string `xml:"Latest"` - Uncommitted []*string `xml:"Uncommitted"` -} - -// MarshalXML implements the xml.Marshaller interface for type BlockLookupList. -func (b BlockLookupList) MarshalXML(e *xml.Encoder, start xml.StartElement) error { - start.Name.Local = "BlockList" - type alias BlockLookupList - aux := &struct { - *alias - Committed *[]*string `xml:"Committed"` - Latest *[]*string `xml:"Latest"` - Uncommitted *[]*string `xml:"Uncommitted"` - }{ - alias: (*alias)(&b), - } - if b.Committed != nil { - aux.Committed = &b.Committed - } - if b.Latest != nil { - aux.Latest = &b.Latest - } - if b.Uncommitted != nil { - aux.Uncommitted = &b.Uncommitted - } - return e.EncodeElement(aux, start) -} - -// ClearRange enum -type ClearRange struct { - // REQUIRED - End *int64 `xml:"End"` - - // REQUIRED - Start *int64 `xml:"Start"` -} - -// ContainerCpkScopeInfo contains a group of parameters for the containerClient.Create method. -type ContainerCpkScopeInfo struct { - // Optional. Version 2019-07-07 and later. Specifies the default encryption scope to set on the container and use for all - // future writes. - DefaultEncryptionScope *string - // Optional. Version 2019-07-07 and newer. If true, prevents any request from specifying a different encryption scope than - // the scope set on the container. - PreventEncryptionScopeOverride *bool -} - -// ContainerItem - An Azure Storage container -type ContainerItem struct { - // REQUIRED - Name *string `xml:"Name"` - - // REQUIRED; Properties of a container - Properties *ContainerProperties `xml:"Properties"` - Deleted *bool `xml:"Deleted"` - - // Dictionary of - Metadata map[string]*string `xml:"Metadata"` - Version *string `xml:"Version"` -} - -// UnmarshalXML implements the xml.Unmarshaller interface for type ContainerItem. -func (c *ContainerItem) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { - type alias ContainerItem - aux := &struct { - *alias - Metadata additionalProperties `xml:"Metadata"` - }{ - alias: (*alias)(c), - } - if err := d.DecodeElement(aux, &start); err != nil { - return err - } - c.Metadata = (map[string]*string)(aux.Metadata) - return nil -} - -// ContainerProperties - Properties of a container -type ContainerProperties struct { - // REQUIRED - Etag *string `xml:"Etag"` - - // REQUIRED - LastModified *time.Time `xml:"Last-Modified"` - DefaultEncryptionScope *string `xml:"DefaultEncryptionScope"` - DeletedTime *time.Time `xml:"DeletedTime"` - HasImmutabilityPolicy *bool `xml:"HasImmutabilityPolicy"` - HasLegalHold *bool `xml:"HasLegalHold"` - - // Indicates if version level worm is enabled on this container. - IsImmutableStorageWithVersioningEnabled *bool `xml:"ImmutableStorageWithVersioningEnabled"` - LeaseDuration *LeaseDurationType `xml:"LeaseDuration"` - LeaseState *LeaseStateType `xml:"LeaseState"` - LeaseStatus *LeaseStatusType `xml:"LeaseStatus"` - PreventEncryptionScopeOverride *bool `xml:"DenyEncryptionScopeOverride"` - PublicAccess *PublicAccessType `xml:"PublicAccess"` - RemainingRetentionDays *int32 `xml:"RemainingRetentionDays"` -} - -// MarshalXML implements the xml.Marshaller interface for type ContainerProperties. -func (c ContainerProperties) MarshalXML(e *xml.Encoder, start xml.StartElement) error { - type alias ContainerProperties - aux := &struct { - *alias - DeletedTime *timeRFC1123 `xml:"DeletedTime"` - LastModified *timeRFC1123 `xml:"Last-Modified"` - }{ - alias: (*alias)(&c), - DeletedTime: (*timeRFC1123)(c.DeletedTime), - LastModified: (*timeRFC1123)(c.LastModified), - } - return e.EncodeElement(aux, start) -} - -// UnmarshalXML implements the xml.Unmarshaller interface for type ContainerProperties. -func (c *ContainerProperties) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { - type alias ContainerProperties - aux := &struct { - *alias - DeletedTime *timeRFC1123 `xml:"DeletedTime"` - LastModified *timeRFC1123 `xml:"Last-Modified"` - }{ - alias: (*alias)(c), - } - if err := d.DecodeElement(aux, &start); err != nil { - return err - } - c.DeletedTime = (*time.Time)(aux.DeletedTime) - c.LastModified = (*time.Time)(aux.LastModified) - return nil -} - -// CorsRule - CORS is an HTTP feature that enables a web application running under one domain to access resources in another -// domain. Web browsers implement a security restriction known as same-origin policy that -// prevents a web page from calling APIs in a different domain; CORS provides a secure way to allow one domain (the origin -// domain) to call APIs in another domain -type CorsRule struct { - // REQUIRED; the request headers that the origin domain may specify on the CORS request. - AllowedHeaders *string `xml:"AllowedHeaders"` - - // REQUIRED; The methods (HTTP request verbs) that the origin domain may use for a CORS request. (comma separated) - AllowedMethods *string `xml:"AllowedMethods"` - - // REQUIRED; The origin domains that are permitted to make a request against the storage service via CORS. The origin domain - // is the domain from which the request originates. Note that the origin must be an exact - // case-sensitive match with the origin that the user age sends to the service. You can also use the wildcard character '*' - // to allow all origin domains to make requests via CORS. - AllowedOrigins *string `xml:"AllowedOrigins"` - - // REQUIRED; The response headers that may be sent in the response to the CORS request and exposed by the browser to the request - // issuer - ExposedHeaders *string `xml:"ExposedHeaders"` - - // REQUIRED; The maximum amount time that a browser should cache the preflight OPTIONS request. - MaxAgeInSeconds *int32 `xml:"MaxAgeInSeconds"` -} - -// CpkInfo contains a group of parameters for the blobClient.Download method. -type CpkInfo struct { - // The algorithm used to produce the encryption key hash. Currently, the only accepted value is "AES256". Must be provided - // if the x-ms-encryption-key header is provided. - EncryptionAlgorithm *EncryptionAlgorithmType - // Optional. Specifies the encryption key to use to encrypt the data provided in the request. If not specified, encryption - // is performed with the root account encryption key. For more information, see - // Encryption at Rest for Azure Storage Services. - EncryptionKey *string - // The SHA-256 hash of the provided encryption key. Must be provided if the x-ms-encryption-key header is provided. - EncryptionKeySHA256 *string -} - -// CpkScopeInfo contains a group of parameters for the blobClient.SetMetadata method. -type CpkScopeInfo struct { - // Optional. Version 2019-07-07 and later. Specifies the name of the encryption scope to use to encrypt the data provided - // in the request. If not specified, encryption is performed with the default - // account encryption scope. For more information, see Encryption at Rest for Azure Storage Services. - EncryptionScope *string -} - -// DelimitedTextConfiguration - Groups the settings used for interpreting the blob data if the blob is delimited text formatted. -type DelimitedTextConfiguration struct { - // The string used to separate columns. - ColumnSeparator *string `xml:"ColumnSeparator"` - - // The string used as an escape character. - EscapeChar *string `xml:"EscapeChar"` - - // The string used to quote a specific field. - FieldQuote *string `xml:"FieldQuote"` - - // Represents whether the data has headers. - HeadersPresent *bool `xml:"HasHeaders"` - - // The string used to separate records. - RecordSeparator *string `xml:"RecordSeparator"` -} - -// FilterBlobItem - Blob info from a Filter Blobs API call -type FilterBlobItem struct { - // REQUIRED - ContainerName *string `xml:"ContainerName"` - - // REQUIRED - Name *string `xml:"Name"` - - // Blob tags - Tags *BlobTags `xml:"Tags"` -} - -// FilterBlobSegment - The result of a Filter Blobs API call -type FilterBlobSegment struct { - // REQUIRED - Blobs []*FilterBlobItem `xml:"Blobs>Blob"` - - // REQUIRED - ServiceEndpoint *string `xml:"ServiceEndpoint,attr"` - - // REQUIRED - Where *string `xml:"Where"` - NextMarker *string `xml:"NextMarker"` -} - -// MarshalXML implements the xml.Marshaller interface for type FilterBlobSegment. -func (f FilterBlobSegment) MarshalXML(e *xml.Encoder, start xml.StartElement) error { - type alias FilterBlobSegment - aux := &struct { - *alias - Blobs *[]*FilterBlobItem `xml:"Blobs>Blob"` - }{ - alias: (*alias)(&f), - } - if f.Blobs != nil { - aux.Blobs = &f.Blobs - } - return e.EncodeElement(aux, start) -} - -// GeoReplication - Geo-Replication information for the Secondary Storage Service -type GeoReplication struct { - // REQUIRED; A GMT date/time value, to the second. All primary writes preceding this value are guaranteed to be available - // for read operations at the secondary. Primary writes after this point in time may or may - // not be available for reads. - LastSyncTime *time.Time `xml:"LastSyncTime"` - - // REQUIRED; The status of the secondary location - Status *BlobGeoReplicationStatus `xml:"Status"` -} - -// MarshalXML implements the xml.Marshaller interface for type GeoReplication. -func (g GeoReplication) MarshalXML(e *xml.Encoder, start xml.StartElement) error { - type alias GeoReplication - aux := &struct { - *alias - LastSyncTime *timeRFC1123 `xml:"LastSyncTime"` - }{ - alias: (*alias)(&g), - LastSyncTime: (*timeRFC1123)(g.LastSyncTime), - } - return e.EncodeElement(aux, start) -} - -// UnmarshalXML implements the xml.Unmarshaller interface for type GeoReplication. -func (g *GeoReplication) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { - type alias GeoReplication - aux := &struct { - *alias - LastSyncTime *timeRFC1123 `xml:"LastSyncTime"` - }{ - alias: (*alias)(g), - } - if err := d.DecodeElement(aux, &start); err != nil { - return err - } - g.LastSyncTime = (*time.Time)(aux.LastSyncTime) - return nil -} - -// JSONTextConfiguration - json text configuration -type JSONTextConfiguration struct { - // The string used to separate records. - RecordSeparator *string `xml:"RecordSeparator"` -} - -// KeyInfo - Key information -type KeyInfo struct { - // REQUIRED; The date-time the key expires in ISO 8601 UTC time - Expiry *string `xml:"Expiry"` - - // REQUIRED; The date-time the key is active in ISO 8601 UTC time - Start *string `xml:"Start"` -} - -// LeaseAccessConditions contains a group of parameters for the containerClient.GetProperties method. -type LeaseAccessConditions struct { - // If specified, the operation only succeeds if the resource's lease is active and matches this ID. - LeaseID *string -} - -// ListBlobsFlatSegmentResponse - An enumeration of blobs -type ListBlobsFlatSegmentResponse struct { - // REQUIRED - ContainerName *string `xml:"ContainerName,attr"` - - // REQUIRED - Segment *BlobFlatListSegment `xml:"Blobs"` - - // REQUIRED - ServiceEndpoint *string `xml:"ServiceEndpoint,attr"` - Marker *string `xml:"Marker"` - MaxResults *int32 `xml:"MaxResults"` - NextMarker *string `xml:"NextMarker"` - Prefix *string `xml:"Prefix"` -} - -// ListBlobsHierarchySegmentResponse - An enumeration of blobs -type ListBlobsHierarchySegmentResponse struct { - // REQUIRED - ContainerName *string `xml:"ContainerName,attr"` - - // REQUIRED - Segment *BlobHierarchyListSegment `xml:"Blobs"` - - // REQUIRED - ServiceEndpoint *string `xml:"ServiceEndpoint,attr"` - Delimiter *string `xml:"Delimiter"` - Marker *string `xml:"Marker"` - MaxResults *int32 `xml:"MaxResults"` - NextMarker *string `xml:"NextMarker"` - Prefix *string `xml:"Prefix"` -} - -// ListContainersSegmentResponse - An enumeration of containers -type ListContainersSegmentResponse struct { - // REQUIRED - ContainerItems []*ContainerItem `xml:"Containers>Container"` - - // REQUIRED - ServiceEndpoint *string `xml:"ServiceEndpoint,attr"` - Marker *string `xml:"Marker"` - MaxResults *int32 `xml:"MaxResults"` - NextMarker *string `xml:"NextMarker"` - Prefix *string `xml:"Prefix"` -} - -// MarshalXML implements the xml.Marshaller interface for type ListContainersSegmentResponse. -func (l ListContainersSegmentResponse) MarshalXML(e *xml.Encoder, start xml.StartElement) error { - type alias ListContainersSegmentResponse - aux := &struct { - *alias - ContainerItems *[]*ContainerItem `xml:"Containers>Container"` - }{ - alias: (*alias)(&l), - } - if l.ContainerItems != nil { - aux.ContainerItems = &l.ContainerItems - } - return e.EncodeElement(aux, start) -} - -// Logging - Azure Analytics Logging settings. -type Logging struct { - // REQUIRED; Indicates whether all delete requests should be logged. - Delete *bool `xml:"Delete"` - - // REQUIRED; Indicates whether all read requests should be logged. - Read *bool `xml:"Read"` - - // REQUIRED; the retention policy which determines how long the associated data should persist - RetentionPolicy *RetentionPolicy `xml:"RetentionPolicy"` - - // REQUIRED; The version of Storage Analytics to configure. - Version *string `xml:"Version"` - - // REQUIRED; Indicates whether all write requests should be logged. - Write *bool `xml:"Write"` -} - -// Metrics - a summary of request statistics grouped by API in hour or minute aggregates for blobs -type Metrics struct { - // REQUIRED; Indicates whether metrics are enabled for the Blob service. - Enabled *bool `xml:"Enabled"` - - // Indicates whether metrics should generate summary statistics for called API operations. - IncludeAPIs *bool `xml:"IncludeAPIs"` - - // the retention policy which determines how long the associated data should persist - RetentionPolicy *RetentionPolicy `xml:"RetentionPolicy"` - - // The version of Storage Analytics to configure. - Version *string `xml:"Version"` -} - -// ModifiedAccessConditions contains a group of parameters for the containerClient.Delete method. -type ModifiedAccessConditions struct { - // Specify an ETag value to operate only on blobs with a matching value. - IfMatch *string - // Specify this header value to operate only on a blob if it has been modified since the specified date/time. - IfModifiedSince *time.Time - // Specify an ETag value to operate only on blobs without a matching value. - IfNoneMatch *string - // Specify a SQL where clause on blob tags to operate only on blobs with a matching value. - IfTags *string - // Specify this header value to operate only on a blob if it has not been modified since the specified date/time. - IfUnmodifiedSince *time.Time -} - -// PageList - the list of pages -type PageList struct { - ClearRange []*ClearRange `xml:"ClearRange"` - NextMarker *string `xml:"NextMarker"` - PageRange []*PageRange `xml:"PageRange"` -} - -// MarshalXML implements the xml.Marshaller interface for type PageList. -func (p PageList) MarshalXML(e *xml.Encoder, start xml.StartElement) error { - type alias PageList - aux := &struct { - *alias - ClearRange *[]*ClearRange `xml:"ClearRange"` - PageRange *[]*PageRange `xml:"PageRange"` - }{ - alias: (*alias)(&p), - } - if p.ClearRange != nil { - aux.ClearRange = &p.ClearRange - } - if p.PageRange != nil { - aux.PageRange = &p.PageRange - } - return e.EncodeElement(aux, start) -} - -// PageRange struct -type PageRange struct { - // REQUIRED - End *int64 `xml:"End"` - - // REQUIRED - Start *int64 `xml:"Start"` -} - -// QueryFormat struct -type QueryFormat struct { - // REQUIRED; The quick query format type. - Type *QueryFormatType `xml:"Type"` - - // Groups the settings used for formatting the response if the response should be Arrow formatted. - ArrowConfiguration *ArrowConfiguration `xml:"ArrowConfiguration"` - - // Groups the settings used for interpreting the blob data if the blob is delimited text formatted. - DelimitedTextConfiguration *DelimitedTextConfiguration `xml:"DelimitedTextConfiguration"` - - // json text configuration - JSONTextConfiguration *JSONTextConfiguration `xml:"JsonTextConfiguration"` - - // Anything - ParquetTextConfiguration interface{} `xml:"ParquetTextConfiguration"` -} - -// QueryRequest - Groups the set of query request settings. -type QueryRequest struct { - // REQUIRED; The query expression in SQL. The maximum size of the query expression is 256KiB. - Expression *string `xml:"Expression"` - - // REQUIRED; Required. The type of the provided query expression. - QueryType *string `xml:"QueryType"` - InputSerialization *QuerySerialization `xml:"InputSerialization"` - OutputSerialization *QuerySerialization `xml:"OutputSerialization"` -} - -// MarshalXML implements the xml.Marshaller interface for type QueryRequest. -func (q QueryRequest) MarshalXML(e *xml.Encoder, start xml.StartElement) error { - start.Name.Local = "QueryRequest" - type alias QueryRequest - aux := &struct { - *alias - }{ - alias: (*alias)(&q), - } - return e.EncodeElement(aux, start) -} - -//QuerySerialization struct -type QuerySerialization struct { - // REQUIRED - Format *QueryFormat `xml:"Format"` -} - -// RetentionPolicy - the retention policy which determines how long the associated data should persist -type RetentionPolicy struct { - // REQUIRED; Indicates whether a retention policy is enabled for the storage service - Enabled *bool `xml:"Enabled"` - - // Indicates whether permanent delete is allowed on this storage account. - AllowPermanentDelete *bool `xml:"AllowPermanentDelete"` - - // Indicates the number of days that metrics or logging or soft-deleted data should be retained. All data older than this - // value will be deleted - Days *int32 `xml:"Days"` -} - -// SequenceNumberAccessConditions contains a group of parameters for the pageBlobClient.UploadPages method. -type SequenceNumberAccessConditions struct { - // Specify this header value to operate only on a blob if it has the specified sequence number. - IfSequenceNumberEqualTo *int64 - // Specify this header value to operate only on a blob if it has a sequence number less than the specified. - IfSequenceNumberLessThan *int64 - // Specify this header value to operate only on a blob if it has a sequence number less than or equal to the specified. - IfSequenceNumberLessThanOrEqualTo *int64 -} - -// SignedIdentifier - signed identifier -type SignedIdentifier struct { - // REQUIRED; An Access policy - AccessPolicy *AccessPolicy `xml:"AccessPolicy"` - - // REQUIRED; a unique id - ID *string `xml:"Id"` -} - -// SourceModifiedAccessConditions contains a group of parameters for the blobClient.StartCopyFromURL method. -type SourceModifiedAccessConditions struct { - // Specify an ETag value to operate only on blobs with a matching value. - SourceIfMatch *string - // Specify this header value to operate only on a blob if it has been modified since the specified date/time. - SourceIfModifiedSince *time.Time - // Specify an ETag value to operate only on blobs without a matching value. - SourceIfNoneMatch *string - // Specify a SQL where clause on blob tags to operate only on blobs with a matching value. - SourceIfTags *string - // Specify this header value to operate only on a blob if it has not been modified since the specified date/time. - SourceIfUnmodifiedSince *time.Time -} - -// StaticWebsite - The properties that enable an account to host a static website -type StaticWebsite struct { - // REQUIRED; Indicates whether this account is hosting a static website - Enabled *bool `xml:"Enabled"` - - // Absolute path of the default index page - DefaultIndexDocumentPath *string `xml:"DefaultIndexDocumentPath"` - - // The absolute path of the custom 404 page - ErrorDocument404Path *string `xml:"ErrorDocument404Path"` - - // The default name of the index page under each directory - IndexDocument *string `xml:"IndexDocument"` -} - -// StorageServiceProperties - Storage Service Properties. -type StorageServiceProperties struct { - // The set of CORS rules. - Cors []*CorsRule `xml:"Cors>CorsRule"` - - // The default version to use for requests to the Blob service if an incoming request's version is not specified. Possible - // values include version 2008-10-27 and all more recent versions - DefaultServiceVersion *string `xml:"DefaultServiceVersion"` - - // the retention policy which determines how long the associated data should persist - DeleteRetentionPolicy *RetentionPolicy `xml:"DeleteRetentionPolicy"` - - // a summary of request statistics grouped by API in hour or minute aggregates for blobs - HourMetrics *Metrics `xml:"HourMetrics"` - - // Azure Analytics Logging settings. - Logging *Logging `xml:"Logging"` - - // a summary of request statistics grouped by API in hour or minute aggregates for blobs - MinuteMetrics *Metrics `xml:"MinuteMetrics"` - - // The properties that enable an account to host a static website - StaticWebsite *StaticWebsite `xml:"StaticWebsite"` -} - -// MarshalXML implements the xml.Marshaller interface for type StorageServiceProperties. -func (s StorageServiceProperties) MarshalXML(e *xml.Encoder, start xml.StartElement) error { - type alias StorageServiceProperties - aux := &struct { - *alias - Cors *[]*CorsRule `xml:"Cors>CorsRule"` - }{ - alias: (*alias)(&s), - } - if s.Cors != nil { - aux.Cors = &s.Cors - } - return e.EncodeElement(aux, start) -} - -// StorageServiceStats - Stats for the storage service. -type StorageServiceStats struct { - // Geo-Replication information for the Secondary Storage Service - GeoReplication *GeoReplication `xml:"GeoReplication"` -} - -// UserDelegationKey - A user delegation key -type UserDelegationKey struct { - // REQUIRED; The date-time the key expires - SignedExpiry *time.Time `xml:"SignedExpiry"` - - // REQUIRED; The Azure Active Directory object ID in GUID format. - SignedOid *string `xml:"SignedOid"` - - // REQUIRED; Abbreviation of the Azure Storage service that accepts the key - SignedService *string `xml:"SignedService"` - - // REQUIRED; The date-time the key is active - SignedStart *time.Time `xml:"SignedStart"` - - // REQUIRED; The Azure Active Directory tenant ID in GUID format - SignedTid *string `xml:"SignedTid"` - - // REQUIRED; The service version that created the key - SignedVersion *string `xml:"SignedVersion"` - - // REQUIRED; The key as a base64 string - Value *string `xml:"Value"` -} - -// MarshalXML implements the xml.Marshaller interface for type UserDelegationKey. -func (u UserDelegationKey) MarshalXML(e *xml.Encoder, start xml.StartElement) error { - type alias UserDelegationKey - aux := &struct { - *alias - SignedExpiry *timeRFC3339 `xml:"SignedExpiry"` - SignedStart *timeRFC3339 `xml:"SignedStart"` - }{ - alias: (*alias)(&u), - SignedExpiry: (*timeRFC3339)(u.SignedExpiry), - SignedStart: (*timeRFC3339)(u.SignedStart), - } - return e.EncodeElement(aux, start) -} - -// UnmarshalXML implements the xml.Unmarshaller interface for type UserDelegationKey. -func (u *UserDelegationKey) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { - type alias UserDelegationKey - aux := &struct { - *alias - SignedExpiry *timeRFC3339 `xml:"SignedExpiry"` - SignedStart *timeRFC3339 `xml:"SignedStart"` - }{ - alias: (*alias)(u), - } - if err := d.DecodeElement(aux, &start); err != nil { - return err - } - u.SignedExpiry = (*time.Time)(aux.SignedExpiry) - u.SignedStart = (*time.Time)(aux.SignedStart) - return nil -} - -// appendBlobClientAppendBlockFromURLOptions contains the optional parameters for the appendBlobClient.AppendBlockFromURL -// method. -type appendBlobClientAppendBlockFromURLOptions struct { - // Only Bearer type is supported. Credentials should be a valid OAuth access token to copy source. - CopySourceAuthorization *string - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // Specify the md5 calculated for the range of bytes that must be read from the copy source. - SourceContentMD5 []byte - // Specify the crc64 calculated for the range of bytes that must be read from the copy source. - SourceContentcrc64 []byte - // Bytes of source data in the specified range. - SourceRange *string - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 - // Specify the transactional md5 for the body, to be validated by the service. - TransactionalContentMD5 []byte -} - -// appendBlobClientAppendBlockOptions contains the optional parameters for the appendBlobClient.AppendBlock method. -type appendBlobClientAppendBlockOptions struct { - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 - // Specify the transactional crc64 for the body, to be validated by the service. - TransactionalContentCRC64 []byte - // Specify the transactional md5 for the body, to be validated by the service. - TransactionalContentMD5 []byte -} - -// appendBlobClientCreateOptions contains the optional parameters for the appendBlobClient.Create method. -type appendBlobClientCreateOptions struct { - // Optional. Used to set blob tags in various blob operations. - BlobTagsString *string - // Specifies the date time when the blobs immutability policy is set to expire. - ImmutabilityPolicyExpiry *time.Time - // Specifies the immutability policy mode to set on the blob. - ImmutabilityPolicyMode *BlobImmutabilityPolicyMode - // Specified if a legal hold should be set on the blob. - LegalHold *bool - // Optional. Specifies a user-defined name-value pair associated with the blob. If no name-value pairs are specified, the - // operation will copy the metadata from the source blob or file to the destination - // blob. If one or more name-value pairs are specified, the destination blob is created with the specified metadata, and metadata - // is not copied from the source blob or file. Note that beginning with - // version 2009-09-19, metadata names must adhere to the naming rules for C# identifiers. See Naming and Referencing Containers, - // Blobs, and Metadata for more information. - Metadata map[string]string - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 -} - -// appendBlobClientSealOptions contains the optional parameters for the appendBlobClient.Seal method. -type appendBlobClientSealOptions struct { - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 -} - -// blobClientAbortCopyFromURLOptions contains the optional parameters for the blobClient.AbortCopyFromURL method. -type blobClientAbortCopyFromURLOptions struct { - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 -} - -// blobClientAcquireLeaseOptions contains the optional parameters for the blobClient.AcquireLease method. -type blobClientAcquireLeaseOptions struct { - // Specifies the duration of the lease, in seconds, or negative one (-1) for a lease that never expires. A non-infinite lease - // can be between 15 and 60 seconds. A lease duration cannot be changed using - // renew or change. - Duration *int32 - // Proposed lease ID, in a GUID string format. The Blob service returns 400 (Invalid request) if the proposed lease ID is - // not in the correct format. See Guid Constructor (String) for a list of valid GUID - // string formats. - ProposedLeaseID *string - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 -} - -// blobClientBreakLeaseOptions contains the optional parameters for the blobClient.BreakLease method. -type blobClientBreakLeaseOptions struct { - // For a break operation, proposed duration the lease should continue before it is broken, in seconds, between 0 and 60. This - // break period is only used if it is shorter than the time remaining on the - // lease. If longer, the time remaining on the lease is used. A new lease will not be available before the break period has - // expired, but the lease may be held for longer than the break period. If this - // header does not appear with a break operation, a fixed-duration lease breaks after the remaining lease period elapses, - // and an infinite lease breaks immediately. - BreakPeriod *int32 - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 -} - -// blobClientChangeLeaseOptions contains the optional parameters for the blobClient.ChangeLease method. -type blobClientChangeLeaseOptions struct { - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 -} - -// blobClientCopyFromURLOptions contains the optional parameters for the blobClient.CopyFromURL method. -type blobClientCopyFromURLOptions struct { - // Optional. Used to set blob tags in various blob operations. - BlobTagsString *string - // Only Bearer type is supported. Credentials should be a valid OAuth access token to copy source. - CopySourceAuthorization *string - // Specifies the date time when the blobs immutability policy is set to expire. - ImmutabilityPolicyExpiry *time.Time - // Specifies the immutability policy mode to set on the blob. - ImmutabilityPolicyMode *BlobImmutabilityPolicyMode - // Specified if a legal hold should be set on the blob. - LegalHold *bool - // Optional. Specifies a user-defined name-value pair associated with the blob. If no name-value pairs are specified, the - // operation will copy the metadata from the source blob or file to the destination - // blob. If one or more name-value pairs are specified, the destination blob is created with the specified metadata, and metadata - // is not copied from the source blob or file. Note that beginning with - // version 2009-09-19, metadata names must adhere to the naming rules for C# identifiers. See Naming and Referencing Containers, - // Blobs, and Metadata for more information. - Metadata map[string]string - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // Specify the md5 calculated for the range of bytes that must be read from the copy source. - SourceContentMD5 []byte - // Optional. Indicates the tier to be set on the blob. - Tier *AccessTier - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 -} - -// blobClientCreateSnapshotOptions contains the optional parameters for the blobClient.CreateSnapshot method. -type blobClientCreateSnapshotOptions struct { - // Optional. Specifies a user-defined name-value pair associated with the blob. If no name-value pairs are specified, the - // operation will copy the metadata from the source blob or file to the destination - // blob. If one or more name-value pairs are specified, the destination blob is created with the specified metadata, and metadata - // is not copied from the source blob or file. Note that beginning with - // version 2009-09-19, metadata names must adhere to the naming rules for C# identifiers. See Naming and Referencing Containers, - // Blobs, and Metadata for more information. - Metadata map[string]string - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 -} - -// blobClientDeleteImmutabilityPolicyOptions contains the optional parameters for the blobClient.DeleteImmutabilityPolicy -// method. -type blobClientDeleteImmutabilityPolicyOptions struct { - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 -} - -// blobClientDeleteOptions contains the optional parameters for the blobClient.Delete method. -type blobClientDeleteOptions struct { - // Optional. Only possible value is 'permanent', which specifies to permanently delete a blob if blob soft delete is enabled. - BlobDeleteType *BlobDeleteType - // Required if the blob has associated snapshots. Specify one of the following two options: include: Delete the base blob - // and all of its snapshots. only: Delete only the blob's snapshots and not the blob - // itself - DeleteSnapshots *DeleteSnapshotsOptionType - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // The snapshot parameter is an opaque DateTime value that, when present, specifies the blob snapshot to retrieve. For more - // information on working with blob snapshots, see Creating a Snapshot of a Blob. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/creating-a-snapshot-of-a-blob] - Snapshot *string - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 - // The version id parameter is an opaque DateTime value that, when present, specifies the version of the blob to operate on. - // It's for service version 2019-10-10 and newer. - VersionID *string -} - -// blobClientDownloadOptions contains the optional parameters for the blobClient.Download method. -type blobClientDownloadOptions struct { - // Return only the bytes of the blob in the specified range. - Range *string - // When set to true and specified together with the Range, the service returns the CRC64 hash for the range, as long as the - // range is less than or equal to 4 MB in size. - RangeGetContentCRC64 *bool - // When set to true and specified together with the Range, the service returns the MD5 hash for the range, as long as the - // range is less than or equal to 4 MB in size. - RangeGetContentMD5 *bool - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // The snapshot parameter is an opaque DateTime value that, when present, specifies the blob snapshot to retrieve. For more - // information on working with blob snapshots, see Creating a Snapshot of a Blob. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/creating-a-snapshot-of-a-blob] - Snapshot *string - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 - // The version id parameter is an opaque DateTime value that, when present, specifies the version of the blob to operate on. - // It's for service version 2019-10-10 and newer. - VersionID *string -} - -// blobClientGetAccountInfoOptions contains the optional parameters for the blobClient.GetAccountInfo method. -type blobClientGetAccountInfoOptions struct { - // placeholder for future optional parameters -} - -// blobClientGetPropertiesOptions contains the optional parameters for the blobClient.GetProperties method. -type blobClientGetPropertiesOptions struct { - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // The snapshot parameter is an opaque DateTime value that, when present, specifies the blob snapshot to retrieve. For more - // information on working with blob snapshots, see Creating a Snapshot of a Blob. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/creating-a-snapshot-of-a-blob] - Snapshot *string - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 - // The version id parameter is an opaque DateTime value that, when present, specifies the version of the blob to operate on. - // It's for service version 2019-10-10 and newer. - VersionID *string -} - -// blobClientGetTagsOptions contains the optional parameters for the blobClient.GetTags method. -type blobClientGetTagsOptions struct { - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // The snapshot parameter is an opaque DateTime value that, when present, specifies the blob snapshot to retrieve. For more - // information on working with blob snapshots, see Creating a Snapshot of a Blob. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/creating-a-snapshot-of-a-blob] - Snapshot *string - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 - // The version id parameter is an opaque DateTime value that, when present, specifies the version of the blob to operate on. - // It's for service version 2019-10-10 and newer. - VersionID *string -} - -// blobClientQueryOptions contains the optional parameters for the blobClient.Query method. -type blobClientQueryOptions struct { - // the query request - QueryRequest *QueryRequest - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // The snapshot parameter is an opaque DateTime value that, when present, specifies the blob snapshot to retrieve. For more - // information on working with blob snapshots, see Creating a Snapshot of a Blob. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/creating-a-snapshot-of-a-blob] - Snapshot *string - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 -} - -// blobClientReleaseLeaseOptions contains the optional parameters for the blobClient.ReleaseLease method. -type blobClientReleaseLeaseOptions struct { - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 -} - -// blobClientRenewLeaseOptions contains the optional parameters for the blobClient.RenewLease method. -type blobClientRenewLeaseOptions struct { - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 -} - -// blobClientSetExpiryOptions contains the optional parameters for the blobClient.SetExpiry method. -type blobClientSetExpiryOptions struct { - // The time to set the blob to expiry - ExpiresOn *string - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 -} - -// blobClientSetHTTPHeadersOptions contains the optional parameters for the blobClient.SetHTTPHeaders method. -type blobClientSetHTTPHeadersOptions struct { - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 -} - -// blobClientSetImmutabilityPolicyOptions contains the optional parameters for the blobClient.SetImmutabilityPolicy method. -type blobClientSetImmutabilityPolicyOptions struct { - // Specifies the date time when the blobs immutability policy is set to expire. - ImmutabilityPolicyExpiry *time.Time - // Specifies the immutability policy mode to set on the blob. - ImmutabilityPolicyMode *BlobImmutabilityPolicyMode - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 -} - -// blobClientSetLegalHoldOptions contains the optional parameters for the blobClient.SetLegalHold method. -type blobClientSetLegalHoldOptions struct { - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 -} - -// blobClientSetMetadataOptions contains the optional parameters for the blobClient.SetMetadata method. -type blobClientSetMetadataOptions struct { - // Optional. Specifies a user-defined name-value pair associated with the blob. If no name-value pairs are specified, the - // operation will copy the metadata from the source blob or file to the destination - // blob. If one or more name-value pairs are specified, the destination blob is created with the specified metadata, and metadata - // is not copied from the source blob or file. Note that beginning with - // version 2009-09-19, metadata names must adhere to the naming rules for C# identifiers. See Naming and Referencing Containers, - // Blobs, and Metadata for more information. - Metadata map[string]string - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 -} - -// blobClientSetTagsOptions contains the optional parameters for the blobClient.SetTags method. -type blobClientSetTagsOptions struct { - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // Blob tags - Tags *BlobTags - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 - // Specify the transactional crc64 for the body, to be validated by the service. - TransactionalContentCRC64 []byte - // Specify the transactional md5 for the body, to be validated by the service. - TransactionalContentMD5 []byte - // The version id parameter is an opaque DateTime value that, when present, specifies the version of the blob to operate on. - // It's for service version 2019-10-10 and newer. - VersionID *string -} - -// blobClientSetTierOptions contains the optional parameters for the blobClient.SetTier method. -type blobClientSetTierOptions struct { - // Optional: Indicates the priority with which to rehydrate an archived blob. - RehydratePriority *RehydratePriority - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // The snapshot parameter is an opaque DateTime value that, when present, specifies the blob snapshot to retrieve. For more - // information on working with blob snapshots, see Creating a Snapshot of a Blob. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/creating-a-snapshot-of-a-blob] - Snapshot *string - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 - // The version id parameter is an opaque DateTime value that, when present, specifies the version of the blob to operate on. - // It's for service version 2019-10-10 and newer. - VersionID *string -} - -// blobClientStartCopyFromURLOptions contains the optional parameters for the blobClient.StartCopyFromURL method. -type blobClientStartCopyFromURLOptions struct { - // Optional. Used to set blob tags in various blob operations. - BlobTagsString *string - // Specifies the date time when the blobs immutability policy is set to expire. - ImmutabilityPolicyExpiry *time.Time - // Specifies the immutability policy mode to set on the blob. - ImmutabilityPolicyMode *BlobImmutabilityPolicyMode - // Specified if a legal hold should be set on the blob. - LegalHold *bool - // Optional. Specifies a user-defined name-value pair associated with the blob. If no name-value pairs are specified, the - // operation will copy the metadata from the source blob or file to the destination - // blob. If one or more name-value pairs are specified, the destination blob is created with the specified metadata, and metadata - // is not copied from the source blob or file. Note that beginning with - // version 2009-09-19, metadata names must adhere to the naming rules for C# identifiers. See Naming and Referencing Containers, - // Blobs, and Metadata for more information. - Metadata map[string]string - // Optional: Indicates the priority with which to rehydrate an archived blob. - RehydratePriority *RehydratePriority - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // Overrides the sealed state of the destination blob. Service version 2019-12-12 and newer. - SealBlob *bool - // Optional. Indicates the tier to be set on the blob. - Tier *AccessTier - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 -} - -// blobClientUndeleteOptions contains the optional parameters for the blobClient.Undelete method. -type blobClientUndeleteOptions struct { - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 -} - -// blockBlobClientCommitBlockListOptions contains the optional parameters for the blockBlobClient.CommitBlockList method. -type blockBlobClientCommitBlockListOptions struct { - // Optional. Used to set blob tags in various blob operations. - BlobTagsString *string - // Specifies the date time when the blobs immutability policy is set to expire. - ImmutabilityPolicyExpiry *time.Time - // Specifies the immutability policy mode to set on the blob. - ImmutabilityPolicyMode *BlobImmutabilityPolicyMode - // Specified if a legal hold should be set on the blob. - LegalHold *bool - // Optional. Specifies a user-defined name-value pair associated with the blob. If no name-value pairs are specified, the - // operation will copy the metadata from the source blob or file to the destination - // blob. If one or more name-value pairs are specified, the destination blob is created with the specified metadata, and metadata - // is not copied from the source blob or file. Note that beginning with - // version 2009-09-19, metadata names must adhere to the naming rules for C# identifiers. See Naming and Referencing Containers, - // Blobs, and Metadata for more information. - Metadata map[string]string - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // Optional. Indicates the tier to be set on the blob. - Tier *AccessTier - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 - // Specify the transactional crc64 for the body, to be validated by the service. - TransactionalContentCRC64 []byte - // Specify the transactional md5 for the body, to be validated by the service. - TransactionalContentMD5 []byte -} - -// blockBlobClientGetBlockListOptions contains the optional parameters for the blockBlobClient.GetBlockList method. -type blockBlobClientGetBlockListOptions struct { - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // The snapshot parameter is an opaque DateTime value that, when present, specifies the blob snapshot to retrieve. For more - // information on working with blob snapshots, see Creating a Snapshot of a Blob. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/creating-a-snapshot-of-a-blob] - Snapshot *string - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 -} - -// blockBlobClientPutBlobFromURLOptions contains the optional parameters for the blockBlobClient.PutBlobFromURL method. -type blockBlobClientPutBlobFromURLOptions struct { - // Optional. Used to set blob tags in various blob operations. - BlobTagsString *string - // Only Bearer type is supported. Credentials should be a valid OAuth access token to copy source. - CopySourceAuthorization *string - // Optional, default is true. Indicates if properties from the source blob should be copied. - CopySourceBlobProperties *bool - // Optional. Specifies a user-defined name-value pair associated with the blob. If no name-value pairs are specified, the - // operation will copy the metadata from the source blob or file to the destination - // blob. If one or more name-value pairs are specified, the destination blob is created with the specified metadata, and metadata - // is not copied from the source blob or file. Note that beginning with - // version 2009-09-19, metadata names must adhere to the naming rules for C# identifiers. See Naming and Referencing Containers, - // Blobs, and Metadata for more information. - Metadata map[string]string - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // Specify the md5 calculated for the range of bytes that must be read from the copy source. - SourceContentMD5 []byte - // Optional. Indicates the tier to be set on the blob. - Tier *AccessTier - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 - // Specify the transactional md5 for the body, to be validated by the service. - TransactionalContentMD5 []byte -} - -// blockBlobClientStageBlockFromURLOptions contains the optional parameters for the blockBlobClient.StageBlockFromURL method. -type blockBlobClientStageBlockFromURLOptions struct { - // Only Bearer type is supported. Credentials should be a valid OAuth access token to copy source. - CopySourceAuthorization *string - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // Specify the md5 calculated for the range of bytes that must be read from the copy source. - SourceContentMD5 []byte - // Specify the crc64 calculated for the range of bytes that must be read from the copy source. - SourceContentcrc64 []byte - // Bytes of source data in the specified range. - SourceRange *string - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 -} - -// blockBlobClientStageBlockOptions contains the optional parameters for the blockBlobClient.StageBlock method. -type blockBlobClientStageBlockOptions struct { - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 - // Specify the transactional crc64 for the body, to be validated by the service. - TransactionalContentCRC64 []byte - // Specify the transactional md5 for the body, to be validated by the service. - TransactionalContentMD5 []byte -} - -// blockBlobClientUploadOptions contains the optional parameters for the blockBlobClient.Upload method. -type blockBlobClientUploadOptions struct { - // Optional. Used to set blob tags in various blob operations. - BlobTagsString *string - // Specifies the date time when the blobs immutability policy is set to expire. - ImmutabilityPolicyExpiry *time.Time - // Specifies the immutability policy mode to set on the blob. - ImmutabilityPolicyMode *BlobImmutabilityPolicyMode - // Specified if a legal hold should be set on the blob. - LegalHold *bool - // Optional. Specifies a user-defined name-value pair associated with the blob. If no name-value pairs are specified, the - // operation will copy the metadata from the source blob or file to the destination - // blob. If one or more name-value pairs are specified, the destination blob is created with the specified metadata, and metadata - // is not copied from the source blob or file. Note that beginning with - // version 2009-09-19, metadata names must adhere to the naming rules for C# identifiers. See Naming and Referencing Containers, - // Blobs, and Metadata for more information. - Metadata map[string]string - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // Optional. Indicates the tier to be set on the blob. - Tier *AccessTier - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 - // Specify the transactional md5 for the body, to be validated by the service. - TransactionalContentMD5 []byte -} - -// containerClientAcquireLeaseOptions contains the optional parameters for the containerClient.AcquireLease method. -type containerClientAcquireLeaseOptions struct { - // Specifies the duration of the lease, in seconds, or negative one (-1) for a lease that never expires. A non-infinite lease - // can be between 15 and 60 seconds. A lease duration cannot be changed using - // renew or change. - Duration *int32 - // Proposed lease ID, in a GUID string format. The Blob service returns 400 (Invalid request) if the proposed lease ID is - // not in the correct format. See Guid Constructor (String) for a list of valid GUID - // string formats. - ProposedLeaseID *string - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 -} - -// containerClientBreakLeaseOptions contains the optional parameters for the containerClient.BreakLease method. -type containerClientBreakLeaseOptions struct { - // For a break operation, proposed duration the lease should continue before it is broken, in seconds, between 0 and 60. This - // break period is only used if it is shorter than the time remaining on the - // lease. If longer, the time remaining on the lease is used. A new lease will not be available before the break period has - // expired, but the lease may be held for longer than the break period. If this - // header does not appear with a break operation, a fixed-duration lease breaks after the remaining lease period elapses, - // and an infinite lease breaks immediately. - BreakPeriod *int32 - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 -} - -// containerClientChangeLeaseOptions contains the optional parameters for the containerClient.ChangeLease method. -type containerClientChangeLeaseOptions struct { - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 -} - -// containerClientCreateOptions contains the optional parameters for the containerClient.Create method. -type containerClientCreateOptions struct { - // Specifies whether data in the container may be accessed publicly and the level of access - Access *PublicAccessType - // Optional. Specifies a user-defined name-value pair associated with the blob. If no name-value pairs are specified, the - // operation will copy the metadata from the source blob or file to the destination - // blob. If one or more name-value pairs are specified, the destination blob is created with the specified metadata, and metadata - // is not copied from the source blob or file. Note that beginning with - // version 2009-09-19, metadata names must adhere to the naming rules for C# identifiers. See Naming and Referencing Containers, - // Blobs, and Metadata for more information. - Metadata map[string]string - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 -} - -// containerClientDeleteOptions contains the optional parameters for the containerClient.Delete method. -type containerClientDeleteOptions struct { - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 -} - -// containerClientGetAccessPolicyOptions contains the optional parameters for the containerClient.GetAccessPolicy method. -type containerClientGetAccessPolicyOptions struct { - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 -} - -// containerClientGetAccountInfoOptions contains the optional parameters for the containerClient.GetAccountInfo method. -type containerClientGetAccountInfoOptions struct { - // placeholder for future optional parameters -} - -// containerClientGetPropertiesOptions contains the optional parameters for the containerClient.GetProperties method. -type containerClientGetPropertiesOptions struct { - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 -} - -// containerClientListBlobFlatSegmentOptions contains the optional parameters for the containerClient.ListBlobFlatSegment -// method. -type containerClientListBlobFlatSegmentOptions struct { - // Include this parameter to specify one or more datasets to include in the response. - Include []ListBlobsIncludeItem - // A string value that identifies the portion of the list of containers to be returned with the next listing operation. The - // operation returns the NextMarker value within the response body if the listing - // operation did not return all containers remaining to be listed with the current page. The NextMarker value can be used - // as the value for the marker parameter in a subsequent call to request the next - // page of list items. The marker value is opaque to the client. - Marker *string - // Specifies the maximum number of containers to return. If the request does not specify maxresults, or specifies a value - // greater than 5000, the server will return up to 5000 items. Note that if the - // listing operation crosses a partition boundary, then the service will return a continuation token for retrieving the remainder - // of the results. For this reason, it is possible that the service will - // return fewer results than specified by maxresults, or than the default of 5000. - Maxresults *int32 - // Filters the results to return only containers whose name begins with the specified prefix. - Prefix *string - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 -} - -// containerClientListBlobHierarchySegmentOptions contains the optional parameters for the containerClient.ListBlobHierarchySegment -// method. -type containerClientListBlobHierarchySegmentOptions struct { - // Include this parameter to specify one or more datasets to include in the response. - Include []ListBlobsIncludeItem - // A string value that identifies the portion of the list of containers to be returned with the next listing operation. The - // operation returns the NextMarker value within the response body if the listing - // operation did not return all containers remaining to be listed with the current page. The NextMarker value can be used - // as the value for the marker parameter in a subsequent call to request the next - // page of list items. The marker value is opaque to the client. - Marker *string - // Specifies the maximum number of containers to return. If the request does not specify maxresults, or specifies a value - // greater than 5000, the server will return up to 5000 items. Note that if the - // listing operation crosses a partition boundary, then the service will return a continuation token for retrieving the remainder - // of the results. For this reason, it is possible that the service will - // return fewer results than specified by maxresults, or than the default of 5000. - Maxresults *int32 - // Filters the results to return only containers whose name begins with the specified prefix. - Prefix *string - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 -} - -// containerClientReleaseLeaseOptions contains the optional parameters for the containerClient.ReleaseLease method. -type containerClientReleaseLeaseOptions struct { - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 -} - -// containerClientRenameOptions contains the optional parameters for the containerClient.Rename method. -type containerClientRenameOptions struct { - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // A lease ID for the source path. If specified, the source path must have an active lease and the lease ID must match. - SourceLeaseID *string - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 -} - -// containerClientRenewLeaseOptions contains the optional parameters for the containerClient.RenewLease method. -type containerClientRenewLeaseOptions struct { - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 -} - -// containerClientRestoreOptions contains the optional parameters for the containerClient.Restore method. -type containerClientRestoreOptions struct { - // Optional. Version 2019-12-12 and later. Specifies the name of the deleted container to restore. - DeletedContainerName *string - // Optional. Version 2019-12-12 and later. Specifies the version of the deleted container to restore. - DeletedContainerVersion *string - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 -} - -// containerClientSetAccessPolicyOptions contains the optional parameters for the containerClient.SetAccessPolicy method. -type containerClientSetAccessPolicyOptions struct { - // Specifies whether data in the container may be accessed publicly and the level of access - Access *PublicAccessType - // the acls for the container - ContainerACL []*SignedIdentifier - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 -} - -// containerClientSetMetadataOptions contains the optional parameters for the containerClient.SetMetadata method. -type containerClientSetMetadataOptions struct { - // Optional. Specifies a user-defined name-value pair associated with the blob. If no name-value pairs are specified, the - // operation will copy the metadata from the source blob or file to the destination - // blob. If one or more name-value pairs are specified, the destination blob is created with the specified metadata, and metadata - // is not copied from the source blob or file. Note that beginning with - // version 2009-09-19, metadata names must adhere to the naming rules for C# identifiers. See Naming and Referencing Containers, - // Blobs, and Metadata for more information. - Metadata map[string]string - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 -} - -// containerClientSubmitBatchOptions contains the optional parameters for the containerClient.SubmitBatch method. -type containerClientSubmitBatchOptions struct { - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 -} - -// pageBlobClientClearPagesOptions contains the optional parameters for the pageBlobClient.ClearPages method. -type pageBlobClientClearPagesOptions struct { - // Return only the bytes of the blob in the specified range. - Range *string - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 -} - -// pageBlobClientCopyIncrementalOptions contains the optional parameters for the pageBlobClient.CopyIncremental method. -type pageBlobClientCopyIncrementalOptions struct { - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 -} - -// pageBlobClientCreateOptions contains the optional parameters for the pageBlobClient.Create method. -type pageBlobClientCreateOptions struct { - // Set for page blobs only. The sequence number is a user-controlled value that you can use to track requests. The value of - // the sequence number must be between 0 and 2^63 - 1. - BlobSequenceNumber *int64 - // Optional. Used to set blob tags in various blob operations. - BlobTagsString *string - // Specifies the date time when the blobs immutability policy is set to expire. - ImmutabilityPolicyExpiry *time.Time - // Specifies the immutability policy mode to set on the blob. - ImmutabilityPolicyMode *BlobImmutabilityPolicyMode - // Specified if a legal hold should be set on the blob. - LegalHold *bool - // Optional. Specifies a user-defined name-value pair associated with the blob. If no name-value pairs are specified, the - // operation will copy the metadata from the source blob or file to the destination - // blob. If one or more name-value pairs are specified, the destination blob is created with the specified metadata, and metadata - // is not copied from the source blob or file. Note that beginning with - // version 2009-09-19, metadata names must adhere to the naming rules for C# identifiers. See Naming and Referencing Containers, - // Blobs, and Metadata for more information. - Metadata map[string]string - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // Optional. Indicates the tier to be set on the page blob. - Tier *PremiumPageBlobAccessTier - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 -} - -// pageBlobClientGetPageRangesDiffOptions contains the optional parameters for the pageBlobClient.GetPageRangesDiff method. -type pageBlobClientGetPageRangesDiffOptions struct { - // A string value that identifies the portion of the list of containers to be returned with the next listing operation. The - // operation returns the NextMarker value within the response body if the listing - // operation did not return all containers remaining to be listed with the current page. The NextMarker value can be used - // as the value for the marker parameter in a subsequent call to request the next - // page of list items. The marker value is opaque to the client. - Marker *string - // Specifies the maximum number of containers to return. If the request does not specify maxresults, or specifies a value - // greater than 5000, the server will return up to 5000 items. Note that if the - // listing operation crosses a partition boundary, then the service will return a continuation token for retrieving the remainder - // of the results. For this reason, it is possible that the service will - // return fewer results than specified by maxresults, or than the default of 5000. - Maxresults *int32 - // Optional. This header is only supported in service versions 2019-04-19 and after and specifies the URL of a previous snapshot - // of the target blob. The response will only contain pages that were changed - // between the target blob and its previous snapshot. - PrevSnapshotURL *string - // Optional in version 2015-07-08 and newer. The prevsnapshot parameter is a DateTime value that specifies that the response - // will contain only pages that were changed between target blob and previous - // snapshot. Changed pages include both updated and cleared pages. The target blob may be a snapshot, as long as the snapshot - // specified by prevsnapshot is the older of the two. Note that incremental - // snapshots are currently supported only for blobs created on or after January 1, 2016. - Prevsnapshot *string - // Return only the bytes of the blob in the specified range. - Range *string - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // The snapshot parameter is an opaque DateTime value that, when present, specifies the blob snapshot to retrieve. For more - // information on working with blob snapshots, see Creating a Snapshot of a Blob. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/creating-a-snapshot-of-a-blob] - Snapshot *string - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 -} - -// pageBlobClientGetPageRangesOptions contains the optional parameters for the pageBlobClient.GetPageRanges method. -type pageBlobClientGetPageRangesOptions struct { - // A string value that identifies the portion of the list of containers to be returned with the next listing operation. The - // operation returns the NextMarker value within the response body if the listing - // operation did not return all containers remaining to be listed with the current page. The NextMarker value can be used - // as the value for the marker parameter in a subsequent call to request the next - // page of list items. The marker value is opaque to the client. - Marker *string - // Specifies the maximum number of containers to return. If the request does not specify maxresults, or specifies a value - // greater than 5000, the server will return up to 5000 items. Note that if the - // listing operation crosses a partition boundary, then the service will return a continuation token for retrieving the remainder - // of the results. For this reason, it is possible that the service will - // return fewer results than specified by maxresults, or than the default of 5000. - Maxresults *int32 - // Return only the bytes of the blob in the specified range. - Range *string - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // The snapshot parameter is an opaque DateTime value that, when present, specifies the blob snapshot to retrieve. For more - // information on working with blob snapshots, see Creating a Snapshot of a Blob. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/creating-a-snapshot-of-a-blob] - Snapshot *string - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 -} - -// pageBlobClientResizeOptions contains the optional parameters for the pageBlobClient.Resize method. -type pageBlobClientResizeOptions struct { - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 -} - -// pageBlobClientUpdateSequenceNumberOptions contains the optional parameters for the pageBlobClient.UpdateSequenceNumber -// method. -type pageBlobClientUpdateSequenceNumberOptions struct { - // Set for page blobs only. The sequence number is a user-controlled value that you can use to track requests. The value of - // the sequence number must be between 0 and 2^63 - 1. - BlobSequenceNumber *int64 - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 -} - -// pageBlobClientUploadPagesFromURLOptions contains the optional parameters for the pageBlobClient.UploadPagesFromURL method. -type pageBlobClientUploadPagesFromURLOptions struct { - // Only Bearer type is supported. Credentials should be a valid OAuth access token to copy source. - CopySourceAuthorization *string - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // Specify the md5 calculated for the range of bytes that must be read from the copy source. - SourceContentMD5 []byte - // Specify the crc64 calculated for the range of bytes that must be read from the copy source. - SourceContentcrc64 []byte - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 -} - -// pageBlobClientUploadPagesOptions contains the optional parameters for the pageBlobClient.UploadPages method. -type pageBlobClientUploadPagesOptions struct { - // Return only the bytes of the blob in the specified range. - Range *string - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 - // Specify the transactional crc64 for the body, to be validated by the service. - TransactionalContentCRC64 []byte - // Specify the transactional md5 for the body, to be validated by the service. - TransactionalContentMD5 []byte -} - -// serviceClientFilterBlobsOptions contains the optional parameters for the serviceClient.FilterBlobs method. -type serviceClientFilterBlobsOptions struct { - // A string value that identifies the portion of the list of containers to be returned with the next listing operation. The - // operation returns the NextMarker value within the response body if the listing - // operation did not return all containers remaining to be listed with the current page. The NextMarker value can be used - // as the value for the marker parameter in a subsequent call to request the next - // page of list items. The marker value is opaque to the client. - Marker *string - // Specifies the maximum number of containers to return. If the request does not specify maxresults, or specifies a value - // greater than 5000, the server will return up to 5000 items. Note that if the - // listing operation crosses a partition boundary, then the service will return a continuation token for retrieving the remainder - // of the results. For this reason, it is possible that the service will - // return fewer results than specified by maxresults, or than the default of 5000. - Maxresults *int32 - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 - // Filters the results to return only to return only blobs whose tags match the specified expression. - Where *string -} - -// serviceClientGetAccountInfoOptions contains the optional parameters for the serviceClient.GetAccountInfo method. -type serviceClientGetAccountInfoOptions struct { - // placeholder for future optional parameters -} - -// serviceClientGetPropertiesOptions contains the optional parameters for the serviceClient.GetProperties method. -type serviceClientGetPropertiesOptions struct { - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 -} - -// serviceClientGetStatisticsOptions contains the optional parameters for the serviceClient.GetStatistics method. -type serviceClientGetStatisticsOptions struct { - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 -} - -// serviceClientGetUserDelegationKeyOptions contains the optional parameters for the serviceClient.GetUserDelegationKey method. -type serviceClientGetUserDelegationKeyOptions struct { - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 -} - -// serviceClientListContainersSegmentOptions contains the optional parameters for the serviceClient.ListContainersSegment -// method. -type serviceClientListContainersSegmentOptions struct { - // Include this parameter to specify that the container's metadata be returned as part of the response body. - Include []ListContainersIncludeType - // A string value that identifies the portion of the list of containers to be returned with the next listing operation. The - // operation returns the NextMarker value within the response body if the listing - // operation did not return all containers remaining to be listed with the current page. The NextMarker value can be used - // as the value for the marker parameter in a subsequent call to request the next - // page of list items. The marker value is opaque to the client. - Marker *string - // Specifies the maximum number of containers to return. If the request does not specify maxresults, or specifies a value - // greater than 5000, the server will return up to 5000 items. Note that if the - // listing operation crosses a partition boundary, then the service will return a continuation token for retrieving the remainder - // of the results. For this reason, it is possible that the service will - // return fewer results than specified by maxresults, or than the default of 5000. - Maxresults *int32 - // Filters the results to return only containers whose name begins with the specified prefix. - Prefix *string - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 -} - -// serviceClientSetPropertiesOptions contains the optional parameters for the serviceClient.SetProperties method. -type serviceClientSetPropertiesOptions struct { - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 -} - -// serviceClientSubmitBatchOptions contains the optional parameters for the serviceClient.SubmitBatch method. -type serviceClientSubmitBatchOptions struct { - // Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage - // analytics logging is enabled. - RequestID *string - // The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations. - // [https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations] - Timeout *int32 -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zz_generated_pageblob_client.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zz_generated_pageblob_client.go deleted file mode 100644 index bad81201ba2d..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zz_generated_pageblob_client.go +++ /dev/null @@ -1,1247 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -package azblob - -import ( - "context" - "encoding/base64" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime" - "io" - "net/http" - "strconv" - "time" -) - -type pageBlobClient struct { - endpoint string - pl runtime.Pipeline -} - -// newPageBlobClient creates a new instance of pageBlobClient with the specified values. -// endpoint - The URL of the service account, container, or blob that is the target of the desired operation. -// pl - the pipeline used for sending requests and handling responses. -func newPageBlobClient(endpoint string, pl runtime.Pipeline) *pageBlobClient { - client := &pageBlobClient{ - endpoint: endpoint, - pl: pl, - } - return client -} - -// ClearPages - The Clear Pages operation clears a set of pages from a page blob -// If the operation fails it returns an *azcore.ResponseError type. -// contentLength - The length of the request. -// pageBlobClientClearPagesOptions - pageBlobClientClearPagesOptions contains the optional parameters for the pageBlobClient.ClearPages -// method. -// LeaseAccessConditions - LeaseAccessConditions contains a group of parameters for the containerClient.GetProperties method. -// CpkInfo - CpkInfo contains a group of parameters for the blobClient.Download method. -// CpkScopeInfo - CpkScopeInfo contains a group of parameters for the blobClient.SetMetadata method. -// SequenceNumberAccessConditions - SequenceNumberAccessConditions contains a group of parameters for the pageBlobClient.UploadPages -// method. -// ModifiedAccessConditions - ModifiedAccessConditions contains a group of parameters for the containerClient.Delete method. -func (client *pageBlobClient) ClearPages(ctx context.Context, contentLength int64, pageBlobClientClearPagesOptions *pageBlobClientClearPagesOptions, leaseAccessConditions *LeaseAccessConditions, cpkInfo *CpkInfo, cpkScopeInfo *CpkScopeInfo, sequenceNumberAccessConditions *SequenceNumberAccessConditions, modifiedAccessConditions *ModifiedAccessConditions) (pageBlobClientClearPagesResponse, error) { - req, err := client.clearPagesCreateRequest(ctx, contentLength, pageBlobClientClearPagesOptions, leaseAccessConditions, cpkInfo, cpkScopeInfo, sequenceNumberAccessConditions, modifiedAccessConditions) - if err != nil { - return pageBlobClientClearPagesResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return pageBlobClientClearPagesResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusCreated) { - return pageBlobClientClearPagesResponse{}, runtime.NewResponseError(resp) - } - return client.clearPagesHandleResponse(resp) -} - -// clearPagesCreateRequest creates the ClearPages request. -func (client *pageBlobClient) clearPagesCreateRequest(ctx context.Context, contentLength int64, pageBlobClientClearPagesOptions *pageBlobClientClearPagesOptions, leaseAccessConditions *LeaseAccessConditions, cpkInfo *CpkInfo, cpkScopeInfo *CpkScopeInfo, sequenceNumberAccessConditions *SequenceNumberAccessConditions, modifiedAccessConditions *ModifiedAccessConditions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodPut, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - reqQP.Set("comp", "page") - if pageBlobClientClearPagesOptions != nil && pageBlobClientClearPagesOptions.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*pageBlobClientClearPagesOptions.Timeout), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - req.Raw().Header.Set("x-ms-page-write", "clear") - req.Raw().Header.Set("Content-Length", strconv.FormatInt(contentLength, 10)) - if pageBlobClientClearPagesOptions != nil && pageBlobClientClearPagesOptions.Range != nil { - req.Raw().Header.Set("x-ms-range", *pageBlobClientClearPagesOptions.Range) - } - if leaseAccessConditions != nil && leaseAccessConditions.LeaseID != nil { - req.Raw().Header.Set("x-ms-lease-id", *leaseAccessConditions.LeaseID) - } - if cpkInfo != nil && cpkInfo.EncryptionKey != nil { - req.Raw().Header.Set("x-ms-encryption-key", *cpkInfo.EncryptionKey) - } - if cpkInfo != nil && cpkInfo.EncryptionKeySHA256 != nil { - req.Raw().Header.Set("x-ms-encryption-key-sha256", *cpkInfo.EncryptionKeySHA256) - } - if cpkInfo != nil && cpkInfo.EncryptionAlgorithm != nil { - req.Raw().Header.Set("x-ms-encryption-algorithm", string(*cpkInfo.EncryptionAlgorithm)) - } - if cpkScopeInfo != nil && cpkScopeInfo.EncryptionScope != nil { - req.Raw().Header.Set("x-ms-encryption-scope", *cpkScopeInfo.EncryptionScope) - } - if sequenceNumberAccessConditions != nil && sequenceNumberAccessConditions.IfSequenceNumberLessThanOrEqualTo != nil { - req.Raw().Header.Set("x-ms-if-sequence-number-le", strconv.FormatInt(*sequenceNumberAccessConditions.IfSequenceNumberLessThanOrEqualTo, 10)) - } - if sequenceNumberAccessConditions != nil && sequenceNumberAccessConditions.IfSequenceNumberLessThan != nil { - req.Raw().Header.Set("x-ms-if-sequence-number-lt", strconv.FormatInt(*sequenceNumberAccessConditions.IfSequenceNumberLessThan, 10)) - } - if sequenceNumberAccessConditions != nil && sequenceNumberAccessConditions.IfSequenceNumberEqualTo != nil { - req.Raw().Header.Set("x-ms-if-sequence-number-eq", strconv.FormatInt(*sequenceNumberAccessConditions.IfSequenceNumberEqualTo, 10)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfModifiedSince != nil { - req.Raw().Header.Set("If-Modified-Since", modifiedAccessConditions.IfModifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfUnmodifiedSince != nil { - req.Raw().Header.Set("If-Unmodified-Since", modifiedAccessConditions.IfUnmodifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfMatch != nil { - req.Raw().Header.Set("If-Match", *modifiedAccessConditions.IfMatch) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfNoneMatch != nil { - req.Raw().Header.Set("If-None-Match", *modifiedAccessConditions.IfNoneMatch) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfTags != nil { - req.Raw().Header.Set("x-ms-if-tags", *modifiedAccessConditions.IfTags) - } - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if pageBlobClientClearPagesOptions != nil && pageBlobClientClearPagesOptions.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *pageBlobClientClearPagesOptions.RequestID) - } - req.Raw().Header.Set("Accept", "application/xml") - return req, nil -} - -// clearPagesHandleResponse handles the ClearPages response. -func (client *pageBlobClient) clearPagesHandleResponse(resp *http.Response) (pageBlobClientClearPagesResponse, error) { - result := pageBlobClientClearPagesResponse{RawResponse: resp} - if val := resp.Header.Get("ETag"); val != "" { - result.ETag = &val - } - if val := resp.Header.Get("Last-Modified"); val != "" { - lastModified, err := time.Parse(time.RFC1123, val) - if err != nil { - return pageBlobClientClearPagesResponse{}, err - } - result.LastModified = &lastModified - } - if val := resp.Header.Get("Content-MD5"); val != "" { - contentMD5, err := base64.StdEncoding.DecodeString(val) - if err != nil { - return pageBlobClientClearPagesResponse{}, err - } - result.ContentMD5 = contentMD5 - } - if val := resp.Header.Get("x-ms-content-crc64"); val != "" { - xMSContentCRC64, err := base64.StdEncoding.DecodeString(val) - if err != nil { - return pageBlobClientClearPagesResponse{}, err - } - result.XMSContentCRC64 = xMSContentCRC64 - } - if val := resp.Header.Get("x-ms-blob-sequence-number"); val != "" { - blobSequenceNumber, err := strconv.ParseInt(val, 10, 64) - if err != nil { - return pageBlobClientClearPagesResponse{}, err - } - result.BlobSequenceNumber = &blobSequenceNumber - } - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return pageBlobClientClearPagesResponse{}, err - } - result.Date = &date - } - return result, nil -} - -// CopyIncremental - The Copy Incremental operation copies a snapshot of the source page blob to a destination page blob. -// The snapshot is copied such that only the differential changes between the previously copied -// snapshot are transferred to the destination. The copied snapshots are complete copies of the original snapshot and can -// be read or copied from as usual. This API is supported since REST version -// 2016-05-31. -// If the operation fails it returns an *azcore.ResponseError type. -// copySource - Specifies the name of the source page blob snapshot. This value is a URL of up to 2 KB in length that specifies -// a page blob snapshot. The value should be URL-encoded as it would appear in a request -// URI. The source blob must either be public or must be authenticated via a shared access signature. -// pageBlobClientCopyIncrementalOptions - pageBlobClientCopyIncrementalOptions contains the optional parameters for the pageBlobClient.CopyIncremental -// method. -// ModifiedAccessConditions - ModifiedAccessConditions contains a group of parameters for the containerClient.Delete method. -func (client *pageBlobClient) CopyIncremental(ctx context.Context, copySource string, pageBlobClientCopyIncrementalOptions *pageBlobClientCopyIncrementalOptions, modifiedAccessConditions *ModifiedAccessConditions) (pageBlobClientCopyIncrementalResponse, error) { - req, err := client.copyIncrementalCreateRequest(ctx, copySource, pageBlobClientCopyIncrementalOptions, modifiedAccessConditions) - if err != nil { - return pageBlobClientCopyIncrementalResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return pageBlobClientCopyIncrementalResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusAccepted) { - return pageBlobClientCopyIncrementalResponse{}, runtime.NewResponseError(resp) - } - return client.copyIncrementalHandleResponse(resp) -} - -// copyIncrementalCreateRequest creates the CopyIncremental request. -func (client *pageBlobClient) copyIncrementalCreateRequest(ctx context.Context, copySource string, pageBlobClientCopyIncrementalOptions *pageBlobClientCopyIncrementalOptions, modifiedAccessConditions *ModifiedAccessConditions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodPut, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - reqQP.Set("comp", "incrementalcopy") - if pageBlobClientCopyIncrementalOptions != nil && pageBlobClientCopyIncrementalOptions.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*pageBlobClientCopyIncrementalOptions.Timeout), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - if modifiedAccessConditions != nil && modifiedAccessConditions.IfModifiedSince != nil { - req.Raw().Header.Set("If-Modified-Since", modifiedAccessConditions.IfModifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfUnmodifiedSince != nil { - req.Raw().Header.Set("If-Unmodified-Since", modifiedAccessConditions.IfUnmodifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfMatch != nil { - req.Raw().Header.Set("If-Match", *modifiedAccessConditions.IfMatch) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfNoneMatch != nil { - req.Raw().Header.Set("If-None-Match", *modifiedAccessConditions.IfNoneMatch) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfTags != nil { - req.Raw().Header.Set("x-ms-if-tags", *modifiedAccessConditions.IfTags) - } - req.Raw().Header.Set("x-ms-copy-source", copySource) - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if pageBlobClientCopyIncrementalOptions != nil && pageBlobClientCopyIncrementalOptions.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *pageBlobClientCopyIncrementalOptions.RequestID) - } - req.Raw().Header.Set("Accept", "application/xml") - return req, nil -} - -// copyIncrementalHandleResponse handles the CopyIncremental response. -func (client *pageBlobClient) copyIncrementalHandleResponse(resp *http.Response) (pageBlobClientCopyIncrementalResponse, error) { - result := pageBlobClientCopyIncrementalResponse{RawResponse: resp} - if val := resp.Header.Get("ETag"); val != "" { - result.ETag = &val - } - if val := resp.Header.Get("Last-Modified"); val != "" { - lastModified, err := time.Parse(time.RFC1123, val) - if err != nil { - return pageBlobClientCopyIncrementalResponse{}, err - } - result.LastModified = &lastModified - } - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return pageBlobClientCopyIncrementalResponse{}, err - } - result.Date = &date - } - if val := resp.Header.Get("x-ms-copy-id"); val != "" { - result.CopyID = &val - } - if val := resp.Header.Get("x-ms-copy-status"); val != "" { - result.CopyStatus = (*CopyStatusType)(&val) - } - return result, nil -} - -// Create - The Create operation creates a new page blob. -// If the operation fails it returns an *azcore.ResponseError type. -// contentLength - The length of the request. -// blobContentLength - This header specifies the maximum size for the page blob, up to 1 TB. The page blob size must be aligned -// to a 512-byte boundary. -// pageBlobClientCreateOptions - pageBlobClientCreateOptions contains the optional parameters for the pageBlobClient.Create -// method. -// BlobHTTPHeaders - BlobHTTPHeaders contains a group of parameters for the blobClient.SetHTTPHeaders method. -// LeaseAccessConditions - LeaseAccessConditions contains a group of parameters for the containerClient.GetProperties method. -// CpkInfo - CpkInfo contains a group of parameters for the blobClient.Download method. -// CpkScopeInfo - CpkScopeInfo contains a group of parameters for the blobClient.SetMetadata method. -// ModifiedAccessConditions - ModifiedAccessConditions contains a group of parameters for the containerClient.Delete method. -func (client *pageBlobClient) Create(ctx context.Context, contentLength int64, blobContentLength int64, pageBlobClientCreateOptions *pageBlobClientCreateOptions, blobHTTPHeaders *BlobHTTPHeaders, leaseAccessConditions *LeaseAccessConditions, cpkInfo *CpkInfo, cpkScopeInfo *CpkScopeInfo, modifiedAccessConditions *ModifiedAccessConditions) (pageBlobClientCreateResponse, error) { - req, err := client.createCreateRequest(ctx, contentLength, blobContentLength, pageBlobClientCreateOptions, blobHTTPHeaders, leaseAccessConditions, cpkInfo, cpkScopeInfo, modifiedAccessConditions) - if err != nil { - return pageBlobClientCreateResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return pageBlobClientCreateResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusCreated) { - return pageBlobClientCreateResponse{}, runtime.NewResponseError(resp) - } - return client.createHandleResponse(resp) -} - -// createCreateRequest creates the Create request. -func (client *pageBlobClient) createCreateRequest(ctx context.Context, contentLength int64, blobContentLength int64, pageBlobClientCreateOptions *pageBlobClientCreateOptions, blobHTTPHeaders *BlobHTTPHeaders, leaseAccessConditions *LeaseAccessConditions, cpkInfo *CpkInfo, cpkScopeInfo *CpkScopeInfo, modifiedAccessConditions *ModifiedAccessConditions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodPut, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - if pageBlobClientCreateOptions != nil && pageBlobClientCreateOptions.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*pageBlobClientCreateOptions.Timeout), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - req.Raw().Header.Set("x-ms-blob-type", "PageBlob") - req.Raw().Header.Set("Content-Length", strconv.FormatInt(contentLength, 10)) - if pageBlobClientCreateOptions != nil && pageBlobClientCreateOptions.Tier != nil { - req.Raw().Header.Set("x-ms-access-tier", string(*pageBlobClientCreateOptions.Tier)) - } - if blobHTTPHeaders != nil && blobHTTPHeaders.BlobContentType != nil { - req.Raw().Header.Set("x-ms-blob-content-type", *blobHTTPHeaders.BlobContentType) - } - if blobHTTPHeaders != nil && blobHTTPHeaders.BlobContentEncoding != nil { - req.Raw().Header.Set("x-ms-blob-content-encoding", *blobHTTPHeaders.BlobContentEncoding) - } - if blobHTTPHeaders != nil && blobHTTPHeaders.BlobContentLanguage != nil { - req.Raw().Header.Set("x-ms-blob-content-language", *blobHTTPHeaders.BlobContentLanguage) - } - if blobHTTPHeaders != nil && blobHTTPHeaders.BlobContentMD5 != nil { - req.Raw().Header.Set("x-ms-blob-content-md5", base64.StdEncoding.EncodeToString(blobHTTPHeaders.BlobContentMD5)) - } - if blobHTTPHeaders != nil && blobHTTPHeaders.BlobCacheControl != nil { - req.Raw().Header.Set("x-ms-blob-cache-control", *blobHTTPHeaders.BlobCacheControl) - } - if pageBlobClientCreateOptions != nil && pageBlobClientCreateOptions.Metadata != nil { - for k, v := range pageBlobClientCreateOptions.Metadata { - req.Raw().Header.Set("x-ms-meta-"+k, v) - } - } - if leaseAccessConditions != nil && leaseAccessConditions.LeaseID != nil { - req.Raw().Header.Set("x-ms-lease-id", *leaseAccessConditions.LeaseID) - } - if blobHTTPHeaders != nil && blobHTTPHeaders.BlobContentDisposition != nil { - req.Raw().Header.Set("x-ms-blob-content-disposition", *blobHTTPHeaders.BlobContentDisposition) - } - if cpkInfo != nil && cpkInfo.EncryptionKey != nil { - req.Raw().Header.Set("x-ms-encryption-key", *cpkInfo.EncryptionKey) - } - if cpkInfo != nil && cpkInfo.EncryptionKeySHA256 != nil { - req.Raw().Header.Set("x-ms-encryption-key-sha256", *cpkInfo.EncryptionKeySHA256) - } - if cpkInfo != nil && cpkInfo.EncryptionAlgorithm != nil { - req.Raw().Header.Set("x-ms-encryption-algorithm", string(*cpkInfo.EncryptionAlgorithm)) - } - if cpkScopeInfo != nil && cpkScopeInfo.EncryptionScope != nil { - req.Raw().Header.Set("x-ms-encryption-scope", *cpkScopeInfo.EncryptionScope) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfModifiedSince != nil { - req.Raw().Header.Set("If-Modified-Since", modifiedAccessConditions.IfModifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfUnmodifiedSince != nil { - req.Raw().Header.Set("If-Unmodified-Since", modifiedAccessConditions.IfUnmodifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfMatch != nil { - req.Raw().Header.Set("If-Match", *modifiedAccessConditions.IfMatch) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfNoneMatch != nil { - req.Raw().Header.Set("If-None-Match", *modifiedAccessConditions.IfNoneMatch) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfTags != nil { - req.Raw().Header.Set("x-ms-if-tags", *modifiedAccessConditions.IfTags) - } - req.Raw().Header.Set("x-ms-blob-content-length", strconv.FormatInt(blobContentLength, 10)) - if pageBlobClientCreateOptions != nil && pageBlobClientCreateOptions.BlobSequenceNumber != nil { - req.Raw().Header.Set("x-ms-blob-sequence-number", strconv.FormatInt(*pageBlobClientCreateOptions.BlobSequenceNumber, 10)) - } - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if pageBlobClientCreateOptions != nil && pageBlobClientCreateOptions.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *pageBlobClientCreateOptions.RequestID) - } - if pageBlobClientCreateOptions != nil && pageBlobClientCreateOptions.BlobTagsString != nil { - req.Raw().Header.Set("x-ms-tags", *pageBlobClientCreateOptions.BlobTagsString) - } - if pageBlobClientCreateOptions != nil && pageBlobClientCreateOptions.ImmutabilityPolicyExpiry != nil { - req.Raw().Header.Set("x-ms-immutability-policy-until-date", pageBlobClientCreateOptions.ImmutabilityPolicyExpiry.Format(time.RFC1123)) - } - if pageBlobClientCreateOptions != nil && pageBlobClientCreateOptions.ImmutabilityPolicyMode != nil { - req.Raw().Header.Set("x-ms-immutability-policy-mode", string(*pageBlobClientCreateOptions.ImmutabilityPolicyMode)) - } - if pageBlobClientCreateOptions != nil && pageBlobClientCreateOptions.LegalHold != nil { - req.Raw().Header.Set("x-ms-legal-hold", strconv.FormatBool(*pageBlobClientCreateOptions.LegalHold)) - } - req.Raw().Header.Set("Accept", "application/xml") - return req, nil -} - -// createHandleResponse handles the Create response. -func (client *pageBlobClient) createHandleResponse(resp *http.Response) (pageBlobClientCreateResponse, error) { - result := pageBlobClientCreateResponse{RawResponse: resp} - if val := resp.Header.Get("ETag"); val != "" { - result.ETag = &val - } - if val := resp.Header.Get("Last-Modified"); val != "" { - lastModified, err := time.Parse(time.RFC1123, val) - if err != nil { - return pageBlobClientCreateResponse{}, err - } - result.LastModified = &lastModified - } - if val := resp.Header.Get("Content-MD5"); val != "" { - contentMD5, err := base64.StdEncoding.DecodeString(val) - if err != nil { - return pageBlobClientCreateResponse{}, err - } - result.ContentMD5 = contentMD5 - } - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("x-ms-version-id"); val != "" { - result.VersionID = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return pageBlobClientCreateResponse{}, err - } - result.Date = &date - } - if val := resp.Header.Get("x-ms-request-server-encrypted"); val != "" { - isServerEncrypted, err := strconv.ParseBool(val) - if err != nil { - return pageBlobClientCreateResponse{}, err - } - result.IsServerEncrypted = &isServerEncrypted - } - if val := resp.Header.Get("x-ms-encryption-key-sha256"); val != "" { - result.EncryptionKeySHA256 = &val - } - if val := resp.Header.Get("x-ms-encryption-scope"); val != "" { - result.EncryptionScope = &val - } - return result, nil -} - -// GetPageRanges - The Get Page Ranges operation returns the list of valid page ranges for a page blob or snapshot of a page -// blob -// If the operation fails it returns an *azcore.ResponseError type. -// pageBlobClientGetPageRangesOptions - pageBlobClientGetPageRangesOptions contains the optional parameters for the pageBlobClient.GetPageRanges -// method. -// LeaseAccessConditions - LeaseAccessConditions contains a group of parameters for the containerClient.GetProperties method. -// ModifiedAccessConditions - ModifiedAccessConditions contains a group of parameters for the containerClient.Delete method. -func (client *pageBlobClient) GetPageRanges(pageBlobClientGetPageRangesOptions *pageBlobClientGetPageRangesOptions, leaseAccessConditions *LeaseAccessConditions, modifiedAccessConditions *ModifiedAccessConditions) *pageBlobClientGetPageRangesPager { - return &pageBlobClientGetPageRangesPager{ - client: client, - requester: func(ctx context.Context) (*policy.Request, error) { - return client.getPageRangesCreateRequest(ctx, pageBlobClientGetPageRangesOptions, leaseAccessConditions, modifiedAccessConditions) - }, - advancer: func(ctx context.Context, resp pageBlobClientGetPageRangesResponse) (*policy.Request, error) { - return runtime.NewRequest(ctx, http.MethodGet, *resp.PageList.NextMarker) - }, - } -} - -// getPageRangesCreateRequest creates the GetPageRanges request. -func (client *pageBlobClient) getPageRangesCreateRequest(ctx context.Context, pageBlobClientGetPageRangesOptions *pageBlobClientGetPageRangesOptions, leaseAccessConditions *LeaseAccessConditions, modifiedAccessConditions *ModifiedAccessConditions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodGet, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - reqQP.Set("comp", "pagelist") - if pageBlobClientGetPageRangesOptions != nil && pageBlobClientGetPageRangesOptions.Snapshot != nil { - reqQP.Set("snapshot", *pageBlobClientGetPageRangesOptions.Snapshot) - } - if pageBlobClientGetPageRangesOptions != nil && pageBlobClientGetPageRangesOptions.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*pageBlobClientGetPageRangesOptions.Timeout), 10)) - } - if pageBlobClientGetPageRangesOptions != nil && pageBlobClientGetPageRangesOptions.Marker != nil { - reqQP.Set("marker", *pageBlobClientGetPageRangesOptions.Marker) - } - if pageBlobClientGetPageRangesOptions != nil && pageBlobClientGetPageRangesOptions.Maxresults != nil { - reqQP.Set("maxresults", strconv.FormatInt(int64(*pageBlobClientGetPageRangesOptions.Maxresults), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - if pageBlobClientGetPageRangesOptions != nil && pageBlobClientGetPageRangesOptions.Range != nil { - req.Raw().Header.Set("x-ms-range", *pageBlobClientGetPageRangesOptions.Range) - } - if leaseAccessConditions != nil && leaseAccessConditions.LeaseID != nil { - req.Raw().Header.Set("x-ms-lease-id", *leaseAccessConditions.LeaseID) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfModifiedSince != nil { - req.Raw().Header.Set("If-Modified-Since", modifiedAccessConditions.IfModifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfUnmodifiedSince != nil { - req.Raw().Header.Set("If-Unmodified-Since", modifiedAccessConditions.IfUnmodifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfMatch != nil { - req.Raw().Header.Set("If-Match", *modifiedAccessConditions.IfMatch) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfNoneMatch != nil { - req.Raw().Header.Set("If-None-Match", *modifiedAccessConditions.IfNoneMatch) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfTags != nil { - req.Raw().Header.Set("x-ms-if-tags", *modifiedAccessConditions.IfTags) - } - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if pageBlobClientGetPageRangesOptions != nil && pageBlobClientGetPageRangesOptions.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *pageBlobClientGetPageRangesOptions.RequestID) - } - req.Raw().Header.Set("Accept", "application/xml") - return req, nil -} - -// getPageRangesHandleResponse handles the GetPageRanges response. -func (client *pageBlobClient) getPageRangesHandleResponse(resp *http.Response) (pageBlobClientGetPageRangesResponse, error) { - result := pageBlobClientGetPageRangesResponse{RawResponse: resp} - if val := resp.Header.Get("Last-Modified"); val != "" { - lastModified, err := time.Parse(time.RFC1123, val) - if err != nil { - return pageBlobClientGetPageRangesResponse{}, err - } - result.LastModified = &lastModified - } - if val := resp.Header.Get("ETag"); val != "" { - result.ETag = &val - } - if val := resp.Header.Get("x-ms-blob-content-length"); val != "" { - blobContentLength, err := strconv.ParseInt(val, 10, 64) - if err != nil { - return pageBlobClientGetPageRangesResponse{}, err - } - result.BlobContentLength = &blobContentLength - } - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return pageBlobClientGetPageRangesResponse{}, err - } - result.Date = &date - } - if err := runtime.UnmarshalAsXML(resp, &result.PageList); err != nil { - return pageBlobClientGetPageRangesResponse{}, err - } - return result, nil -} - -// GetPageRangesDiff - The Get Page Ranges Diff operation returns the list of valid page ranges for a page blob that were -// changed between target blob and previous snapshot. -// If the operation fails it returns an *azcore.ResponseError type. -// pageBlobClientGetPageRangesDiffOptions - pageBlobClientGetPageRangesDiffOptions contains the optional parameters for the -// pageBlobClient.GetPageRangesDiff method. -// LeaseAccessConditions - LeaseAccessConditions contains a group of parameters for the containerClient.GetProperties method. -// ModifiedAccessConditions - ModifiedAccessConditions contains a group of parameters for the containerClient.Delete method. -func (client *pageBlobClient) GetPageRangesDiff(pageBlobClientGetPageRangesDiffOptions *pageBlobClientGetPageRangesDiffOptions, leaseAccessConditions *LeaseAccessConditions, modifiedAccessConditions *ModifiedAccessConditions) *pageBlobClientGetPageRangesDiffPager { - return &pageBlobClientGetPageRangesDiffPager{ - client: client, - requester: func(ctx context.Context) (*policy.Request, error) { - return client.getPageRangesDiffCreateRequest(ctx, pageBlobClientGetPageRangesDiffOptions, leaseAccessConditions, modifiedAccessConditions) - }, - advancer: func(ctx context.Context, resp pageBlobClientGetPageRangesDiffResponse) (*policy.Request, error) { - return runtime.NewRequest(ctx, http.MethodGet, *resp.PageList.NextMarker) - }, - } -} - -// getPageRangesDiffCreateRequest creates the GetPageRangesDiff request. -func (client *pageBlobClient) getPageRangesDiffCreateRequest(ctx context.Context, pageBlobClientGetPageRangesDiffOptions *pageBlobClientGetPageRangesDiffOptions, leaseAccessConditions *LeaseAccessConditions, modifiedAccessConditions *ModifiedAccessConditions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodGet, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - reqQP.Set("comp", "pagelist") - if pageBlobClientGetPageRangesDiffOptions != nil && pageBlobClientGetPageRangesDiffOptions.Snapshot != nil { - reqQP.Set("snapshot", *pageBlobClientGetPageRangesDiffOptions.Snapshot) - } - if pageBlobClientGetPageRangesDiffOptions != nil && pageBlobClientGetPageRangesDiffOptions.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*pageBlobClientGetPageRangesDiffOptions.Timeout), 10)) - } - if pageBlobClientGetPageRangesDiffOptions != nil && pageBlobClientGetPageRangesDiffOptions.Prevsnapshot != nil { - reqQP.Set("prevsnapshot", *pageBlobClientGetPageRangesDiffOptions.Prevsnapshot) - } - if pageBlobClientGetPageRangesDiffOptions != nil && pageBlobClientGetPageRangesDiffOptions.Marker != nil { - reqQP.Set("marker", *pageBlobClientGetPageRangesDiffOptions.Marker) - } - if pageBlobClientGetPageRangesDiffOptions != nil && pageBlobClientGetPageRangesDiffOptions.Maxresults != nil { - reqQP.Set("maxresults", strconv.FormatInt(int64(*pageBlobClientGetPageRangesDiffOptions.Maxresults), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - if pageBlobClientGetPageRangesDiffOptions != nil && pageBlobClientGetPageRangesDiffOptions.PrevSnapshotURL != nil { - req.Raw().Header.Set("x-ms-previous-snapshot-url", *pageBlobClientGetPageRangesDiffOptions.PrevSnapshotURL) - } - if pageBlobClientGetPageRangesDiffOptions != nil && pageBlobClientGetPageRangesDiffOptions.Range != nil { - req.Raw().Header.Set("x-ms-range", *pageBlobClientGetPageRangesDiffOptions.Range) - } - if leaseAccessConditions != nil && leaseAccessConditions.LeaseID != nil { - req.Raw().Header.Set("x-ms-lease-id", *leaseAccessConditions.LeaseID) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfModifiedSince != nil { - req.Raw().Header.Set("If-Modified-Since", modifiedAccessConditions.IfModifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfUnmodifiedSince != nil { - req.Raw().Header.Set("If-Unmodified-Since", modifiedAccessConditions.IfUnmodifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfMatch != nil { - req.Raw().Header.Set("If-Match", *modifiedAccessConditions.IfMatch) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfNoneMatch != nil { - req.Raw().Header.Set("If-None-Match", *modifiedAccessConditions.IfNoneMatch) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfTags != nil { - req.Raw().Header.Set("x-ms-if-tags", *modifiedAccessConditions.IfTags) - } - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if pageBlobClientGetPageRangesDiffOptions != nil && pageBlobClientGetPageRangesDiffOptions.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *pageBlobClientGetPageRangesDiffOptions.RequestID) - } - req.Raw().Header.Set("Accept", "application/xml") - return req, nil -} - -// getPageRangesDiffHandleResponse handles the GetPageRangesDiff response. -func (client *pageBlobClient) getPageRangesDiffHandleResponse(resp *http.Response) (pageBlobClientGetPageRangesDiffResponse, error) { - result := pageBlobClientGetPageRangesDiffResponse{RawResponse: resp} - if val := resp.Header.Get("Last-Modified"); val != "" { - lastModified, err := time.Parse(time.RFC1123, val) - if err != nil { - return pageBlobClientGetPageRangesDiffResponse{}, err - } - result.LastModified = &lastModified - } - if val := resp.Header.Get("ETag"); val != "" { - result.ETag = &val - } - if val := resp.Header.Get("x-ms-blob-content-length"); val != "" { - blobContentLength, err := strconv.ParseInt(val, 10, 64) - if err != nil { - return pageBlobClientGetPageRangesDiffResponse{}, err - } - result.BlobContentLength = &blobContentLength - } - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return pageBlobClientGetPageRangesDiffResponse{}, err - } - result.Date = &date - } - if err := runtime.UnmarshalAsXML(resp, &result.PageList); err != nil { - return pageBlobClientGetPageRangesDiffResponse{}, err - } - return result, nil -} - -// Resize - Resize the Blob -// If the operation fails it returns an *azcore.ResponseError type. -// blobContentLength - This header specifies the maximum size for the page blob, up to 1 TB. The page blob size must be aligned -// to a 512-byte boundary. -// pageBlobClientResizeOptions - pageBlobClientResizeOptions contains the optional parameters for the pageBlobClient.Resize -// method. -// LeaseAccessConditions - LeaseAccessConditions contains a group of parameters for the containerClient.GetProperties method. -// CpkInfo - CpkInfo contains a group of parameters for the blobClient.Download method. -// CpkScopeInfo - CpkScopeInfo contains a group of parameters for the blobClient.SetMetadata method. -// ModifiedAccessConditions - ModifiedAccessConditions contains a group of parameters for the containerClient.Delete method. -func (client *pageBlobClient) Resize(ctx context.Context, blobContentLength int64, pageBlobClientResizeOptions *pageBlobClientResizeOptions, leaseAccessConditions *LeaseAccessConditions, cpkInfo *CpkInfo, cpkScopeInfo *CpkScopeInfo, modifiedAccessConditions *ModifiedAccessConditions) (pageBlobClientResizeResponse, error) { - req, err := client.resizeCreateRequest(ctx, blobContentLength, pageBlobClientResizeOptions, leaseAccessConditions, cpkInfo, cpkScopeInfo, modifiedAccessConditions) - if err != nil { - return pageBlobClientResizeResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return pageBlobClientResizeResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusOK) { - return pageBlobClientResizeResponse{}, runtime.NewResponseError(resp) - } - return client.resizeHandleResponse(resp) -} - -// resizeCreateRequest creates the Resize request. -func (client *pageBlobClient) resizeCreateRequest(ctx context.Context, blobContentLength int64, pageBlobClientResizeOptions *pageBlobClientResizeOptions, leaseAccessConditions *LeaseAccessConditions, cpkInfo *CpkInfo, cpkScopeInfo *CpkScopeInfo, modifiedAccessConditions *ModifiedAccessConditions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodPut, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - reqQP.Set("comp", "properties") - if pageBlobClientResizeOptions != nil && pageBlobClientResizeOptions.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*pageBlobClientResizeOptions.Timeout), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - if leaseAccessConditions != nil && leaseAccessConditions.LeaseID != nil { - req.Raw().Header.Set("x-ms-lease-id", *leaseAccessConditions.LeaseID) - } - if cpkInfo != nil && cpkInfo.EncryptionKey != nil { - req.Raw().Header.Set("x-ms-encryption-key", *cpkInfo.EncryptionKey) - } - if cpkInfo != nil && cpkInfo.EncryptionKeySHA256 != nil { - req.Raw().Header.Set("x-ms-encryption-key-sha256", *cpkInfo.EncryptionKeySHA256) - } - if cpkInfo != nil && cpkInfo.EncryptionAlgorithm != nil { - req.Raw().Header.Set("x-ms-encryption-algorithm", string(*cpkInfo.EncryptionAlgorithm)) - } - if cpkScopeInfo != nil && cpkScopeInfo.EncryptionScope != nil { - req.Raw().Header.Set("x-ms-encryption-scope", *cpkScopeInfo.EncryptionScope) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfModifiedSince != nil { - req.Raw().Header.Set("If-Modified-Since", modifiedAccessConditions.IfModifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfUnmodifiedSince != nil { - req.Raw().Header.Set("If-Unmodified-Since", modifiedAccessConditions.IfUnmodifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfMatch != nil { - req.Raw().Header.Set("If-Match", *modifiedAccessConditions.IfMatch) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfNoneMatch != nil { - req.Raw().Header.Set("If-None-Match", *modifiedAccessConditions.IfNoneMatch) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfTags != nil { - req.Raw().Header.Set("x-ms-if-tags", *modifiedAccessConditions.IfTags) - } - req.Raw().Header.Set("x-ms-blob-content-length", strconv.FormatInt(blobContentLength, 10)) - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if pageBlobClientResizeOptions != nil && pageBlobClientResizeOptions.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *pageBlobClientResizeOptions.RequestID) - } - req.Raw().Header.Set("Accept", "application/xml") - return req, nil -} - -// resizeHandleResponse handles the Resize response. -func (client *pageBlobClient) resizeHandleResponse(resp *http.Response) (pageBlobClientResizeResponse, error) { - result := pageBlobClientResizeResponse{RawResponse: resp} - if val := resp.Header.Get("ETag"); val != "" { - result.ETag = &val - } - if val := resp.Header.Get("Last-Modified"); val != "" { - lastModified, err := time.Parse(time.RFC1123, val) - if err != nil { - return pageBlobClientResizeResponse{}, err - } - result.LastModified = &lastModified - } - if val := resp.Header.Get("x-ms-blob-sequence-number"); val != "" { - blobSequenceNumber, err := strconv.ParseInt(val, 10, 64) - if err != nil { - return pageBlobClientResizeResponse{}, err - } - result.BlobSequenceNumber = &blobSequenceNumber - } - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return pageBlobClientResizeResponse{}, err - } - result.Date = &date - } - return result, nil -} - -// UpdateSequenceNumber - Update the sequence number of the blob -// If the operation fails it returns an *azcore.ResponseError type. -// sequenceNumberAction - Required if the x-ms-blob-sequence-number header is set for the request. This property applies to -// page blobs only. This property indicates how the service should modify the blob's sequence number -// pageBlobClientUpdateSequenceNumberOptions - pageBlobClientUpdateSequenceNumberOptions contains the optional parameters -// for the pageBlobClient.UpdateSequenceNumber method. -// LeaseAccessConditions - LeaseAccessConditions contains a group of parameters for the containerClient.GetProperties method. -// ModifiedAccessConditions - ModifiedAccessConditions contains a group of parameters for the containerClient.Delete method. -func (client *pageBlobClient) UpdateSequenceNumber(ctx context.Context, sequenceNumberAction SequenceNumberActionType, pageBlobClientUpdateSequenceNumberOptions *pageBlobClientUpdateSequenceNumberOptions, leaseAccessConditions *LeaseAccessConditions, modifiedAccessConditions *ModifiedAccessConditions) (pageBlobClientUpdateSequenceNumberResponse, error) { - req, err := client.updateSequenceNumberCreateRequest(ctx, sequenceNumberAction, pageBlobClientUpdateSequenceNumberOptions, leaseAccessConditions, modifiedAccessConditions) - if err != nil { - return pageBlobClientUpdateSequenceNumberResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return pageBlobClientUpdateSequenceNumberResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusOK) { - return pageBlobClientUpdateSequenceNumberResponse{}, runtime.NewResponseError(resp) - } - return client.updateSequenceNumberHandleResponse(resp) -} - -// updateSequenceNumberCreateRequest creates the UpdateSequenceNumber request. -func (client *pageBlobClient) updateSequenceNumberCreateRequest(ctx context.Context, sequenceNumberAction SequenceNumberActionType, pageBlobClientUpdateSequenceNumberOptions *pageBlobClientUpdateSequenceNumberOptions, leaseAccessConditions *LeaseAccessConditions, modifiedAccessConditions *ModifiedAccessConditions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodPut, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - reqQP.Set("comp", "properties") - if pageBlobClientUpdateSequenceNumberOptions != nil && pageBlobClientUpdateSequenceNumberOptions.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*pageBlobClientUpdateSequenceNumberOptions.Timeout), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - if leaseAccessConditions != nil && leaseAccessConditions.LeaseID != nil { - req.Raw().Header.Set("x-ms-lease-id", *leaseAccessConditions.LeaseID) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfModifiedSince != nil { - req.Raw().Header.Set("If-Modified-Since", modifiedAccessConditions.IfModifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfUnmodifiedSince != nil { - req.Raw().Header.Set("If-Unmodified-Since", modifiedAccessConditions.IfUnmodifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfMatch != nil { - req.Raw().Header.Set("If-Match", *modifiedAccessConditions.IfMatch) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfNoneMatch != nil { - req.Raw().Header.Set("If-None-Match", *modifiedAccessConditions.IfNoneMatch) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfTags != nil { - req.Raw().Header.Set("x-ms-if-tags", *modifiedAccessConditions.IfTags) - } - req.Raw().Header.Set("x-ms-sequence-number-action", string(sequenceNumberAction)) - if pageBlobClientUpdateSequenceNumberOptions != nil && pageBlobClientUpdateSequenceNumberOptions.BlobSequenceNumber != nil { - req.Raw().Header.Set("x-ms-blob-sequence-number", strconv.FormatInt(*pageBlobClientUpdateSequenceNumberOptions.BlobSequenceNumber, 10)) - } - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if pageBlobClientUpdateSequenceNumberOptions != nil && pageBlobClientUpdateSequenceNumberOptions.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *pageBlobClientUpdateSequenceNumberOptions.RequestID) - } - req.Raw().Header.Set("Accept", "application/xml") - return req, nil -} - -// updateSequenceNumberHandleResponse handles the UpdateSequenceNumber response. -func (client *pageBlobClient) updateSequenceNumberHandleResponse(resp *http.Response) (pageBlobClientUpdateSequenceNumberResponse, error) { - result := pageBlobClientUpdateSequenceNumberResponse{RawResponse: resp} - if val := resp.Header.Get("ETag"); val != "" { - result.ETag = &val - } - if val := resp.Header.Get("Last-Modified"); val != "" { - lastModified, err := time.Parse(time.RFC1123, val) - if err != nil { - return pageBlobClientUpdateSequenceNumberResponse{}, err - } - result.LastModified = &lastModified - } - if val := resp.Header.Get("x-ms-blob-sequence-number"); val != "" { - blobSequenceNumber, err := strconv.ParseInt(val, 10, 64) - if err != nil { - return pageBlobClientUpdateSequenceNumberResponse{}, err - } - result.BlobSequenceNumber = &blobSequenceNumber - } - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return pageBlobClientUpdateSequenceNumberResponse{}, err - } - result.Date = &date - } - return result, nil -} - -// UploadPages - The Upload Pages operation writes a range of pages to a page blob -// If the operation fails it returns an *azcore.ResponseError type. -// contentLength - The length of the request. -// body - Initial data -// pageBlobClientUploadPagesOptions - pageBlobClientUploadPagesOptions contains the optional parameters for the pageBlobClient.UploadPages -// method. -// LeaseAccessConditions - LeaseAccessConditions contains a group of parameters for the containerClient.GetProperties method. -// CpkInfo - CpkInfo contains a group of parameters for the blobClient.Download method. -// CpkScopeInfo - CpkScopeInfo contains a group of parameters for the blobClient.SetMetadata method. -// SequenceNumberAccessConditions - SequenceNumberAccessConditions contains a group of parameters for the pageBlobClient.UploadPages -// method. -// ModifiedAccessConditions - ModifiedAccessConditions contains a group of parameters for the containerClient.Delete method. -func (client *pageBlobClient) UploadPages(ctx context.Context, contentLength int64, body io.ReadSeekCloser, pageBlobClientUploadPagesOptions *pageBlobClientUploadPagesOptions, leaseAccessConditions *LeaseAccessConditions, cpkInfo *CpkInfo, cpkScopeInfo *CpkScopeInfo, sequenceNumberAccessConditions *SequenceNumberAccessConditions, modifiedAccessConditions *ModifiedAccessConditions) (pageBlobClientUploadPagesResponse, error) { - req, err := client.uploadPagesCreateRequest(ctx, contentLength, body, pageBlobClientUploadPagesOptions, leaseAccessConditions, cpkInfo, cpkScopeInfo, sequenceNumberAccessConditions, modifiedAccessConditions) - if err != nil { - return pageBlobClientUploadPagesResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return pageBlobClientUploadPagesResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusCreated) { - return pageBlobClientUploadPagesResponse{}, runtime.NewResponseError(resp) - } - return client.uploadPagesHandleResponse(resp) -} - -// uploadPagesCreateRequest creates the UploadPages request. -func (client *pageBlobClient) uploadPagesCreateRequest(ctx context.Context, contentLength int64, body io.ReadSeekCloser, pageBlobClientUploadPagesOptions *pageBlobClientUploadPagesOptions, leaseAccessConditions *LeaseAccessConditions, cpkInfo *CpkInfo, cpkScopeInfo *CpkScopeInfo, sequenceNumberAccessConditions *SequenceNumberAccessConditions, modifiedAccessConditions *ModifiedAccessConditions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodPut, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - reqQP.Set("comp", "page") - if pageBlobClientUploadPagesOptions != nil && pageBlobClientUploadPagesOptions.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*pageBlobClientUploadPagesOptions.Timeout), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - req.Raw().Header.Set("x-ms-page-write", "update") - req.Raw().Header.Set("Content-Length", strconv.FormatInt(contentLength, 10)) - if pageBlobClientUploadPagesOptions != nil && pageBlobClientUploadPagesOptions.TransactionalContentMD5 != nil { - req.Raw().Header.Set("Content-MD5", base64.StdEncoding.EncodeToString(pageBlobClientUploadPagesOptions.TransactionalContentMD5)) - } - if pageBlobClientUploadPagesOptions != nil && pageBlobClientUploadPagesOptions.TransactionalContentCRC64 != nil { - req.Raw().Header.Set("x-ms-content-crc64", base64.StdEncoding.EncodeToString(pageBlobClientUploadPagesOptions.TransactionalContentCRC64)) - } - if pageBlobClientUploadPagesOptions != nil && pageBlobClientUploadPagesOptions.Range != nil { - req.Raw().Header.Set("x-ms-range", *pageBlobClientUploadPagesOptions.Range) - } - if leaseAccessConditions != nil && leaseAccessConditions.LeaseID != nil { - req.Raw().Header.Set("x-ms-lease-id", *leaseAccessConditions.LeaseID) - } - if cpkInfo != nil && cpkInfo.EncryptionKey != nil { - req.Raw().Header.Set("x-ms-encryption-key", *cpkInfo.EncryptionKey) - } - if cpkInfo != nil && cpkInfo.EncryptionKeySHA256 != nil { - req.Raw().Header.Set("x-ms-encryption-key-sha256", *cpkInfo.EncryptionKeySHA256) - } - if cpkInfo != nil && cpkInfo.EncryptionAlgorithm != nil { - req.Raw().Header.Set("x-ms-encryption-algorithm", string(*cpkInfo.EncryptionAlgorithm)) - } - if cpkScopeInfo != nil && cpkScopeInfo.EncryptionScope != nil { - req.Raw().Header.Set("x-ms-encryption-scope", *cpkScopeInfo.EncryptionScope) - } - if sequenceNumberAccessConditions != nil && sequenceNumberAccessConditions.IfSequenceNumberLessThanOrEqualTo != nil { - req.Raw().Header.Set("x-ms-if-sequence-number-le", strconv.FormatInt(*sequenceNumberAccessConditions.IfSequenceNumberLessThanOrEqualTo, 10)) - } - if sequenceNumberAccessConditions != nil && sequenceNumberAccessConditions.IfSequenceNumberLessThan != nil { - req.Raw().Header.Set("x-ms-if-sequence-number-lt", strconv.FormatInt(*sequenceNumberAccessConditions.IfSequenceNumberLessThan, 10)) - } - if sequenceNumberAccessConditions != nil && sequenceNumberAccessConditions.IfSequenceNumberEqualTo != nil { - req.Raw().Header.Set("x-ms-if-sequence-number-eq", strconv.FormatInt(*sequenceNumberAccessConditions.IfSequenceNumberEqualTo, 10)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfModifiedSince != nil { - req.Raw().Header.Set("If-Modified-Since", modifiedAccessConditions.IfModifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfUnmodifiedSince != nil { - req.Raw().Header.Set("If-Unmodified-Since", modifiedAccessConditions.IfUnmodifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfMatch != nil { - req.Raw().Header.Set("If-Match", *modifiedAccessConditions.IfMatch) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfNoneMatch != nil { - req.Raw().Header.Set("If-None-Match", *modifiedAccessConditions.IfNoneMatch) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfTags != nil { - req.Raw().Header.Set("x-ms-if-tags", *modifiedAccessConditions.IfTags) - } - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if pageBlobClientUploadPagesOptions != nil && pageBlobClientUploadPagesOptions.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *pageBlobClientUploadPagesOptions.RequestID) - } - req.Raw().Header.Set("Accept", "application/xml") - return req, req.SetBody(body, "application/octet-stream") -} - -// uploadPagesHandleResponse handles the UploadPages response. -func (client *pageBlobClient) uploadPagesHandleResponse(resp *http.Response) (pageBlobClientUploadPagesResponse, error) { - result := pageBlobClientUploadPagesResponse{RawResponse: resp} - if val := resp.Header.Get("ETag"); val != "" { - result.ETag = &val - } - if val := resp.Header.Get("Last-Modified"); val != "" { - lastModified, err := time.Parse(time.RFC1123, val) - if err != nil { - return pageBlobClientUploadPagesResponse{}, err - } - result.LastModified = &lastModified - } - if val := resp.Header.Get("Content-MD5"); val != "" { - contentMD5, err := base64.StdEncoding.DecodeString(val) - if err != nil { - return pageBlobClientUploadPagesResponse{}, err - } - result.ContentMD5 = contentMD5 - } - if val := resp.Header.Get("x-ms-content-crc64"); val != "" { - xMSContentCRC64, err := base64.StdEncoding.DecodeString(val) - if err != nil { - return pageBlobClientUploadPagesResponse{}, err - } - result.XMSContentCRC64 = xMSContentCRC64 - } - if val := resp.Header.Get("x-ms-blob-sequence-number"); val != "" { - blobSequenceNumber, err := strconv.ParseInt(val, 10, 64) - if err != nil { - return pageBlobClientUploadPagesResponse{}, err - } - result.BlobSequenceNumber = &blobSequenceNumber - } - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return pageBlobClientUploadPagesResponse{}, err - } - result.Date = &date - } - if val := resp.Header.Get("x-ms-request-server-encrypted"); val != "" { - isServerEncrypted, err := strconv.ParseBool(val) - if err != nil { - return pageBlobClientUploadPagesResponse{}, err - } - result.IsServerEncrypted = &isServerEncrypted - } - if val := resp.Header.Get("x-ms-encryption-key-sha256"); val != "" { - result.EncryptionKeySHA256 = &val - } - if val := resp.Header.Get("x-ms-encryption-scope"); val != "" { - result.EncryptionScope = &val - } - return result, nil -} - -// UploadPagesFromURL - The Upload Pages operation writes a range of pages to a page blob where the contents are read from -// a URL -// If the operation fails it returns an *azcore.ResponseError type. -// sourceURL - Specify a URL to the copy source. -// sourceRange - Bytes of source data in the specified range. The length of this range should match the ContentLength header -// and x-ms-range/Range destination range header. -// contentLength - The length of the request. -// rangeParam - The range of bytes to which the source range would be written. The range should be 512 aligned and range-end -// is required. -// pageBlobClientUploadPagesFromURLOptions - pageBlobClientUploadPagesFromURLOptions contains the optional parameters for -// the pageBlobClient.UploadPagesFromURL method. -// CpkInfo - CpkInfo contains a group of parameters for the blobClient.Download method. -// CpkScopeInfo - CpkScopeInfo contains a group of parameters for the blobClient.SetMetadata method. -// LeaseAccessConditions - LeaseAccessConditions contains a group of parameters for the containerClient.GetProperties method. -// SequenceNumberAccessConditions - SequenceNumberAccessConditions contains a group of parameters for the pageBlobClient.UploadPages -// method. -// ModifiedAccessConditions - ModifiedAccessConditions contains a group of parameters for the containerClient.Delete method. -// SourceModifiedAccessConditions - SourceModifiedAccessConditions contains a group of parameters for the blobClient.StartCopyFromURL -// method. -func (client *pageBlobClient) UploadPagesFromURL(ctx context.Context, sourceURL string, sourceRange string, contentLength int64, rangeParam string, pageBlobClientUploadPagesFromURLOptions *pageBlobClientUploadPagesFromURLOptions, cpkInfo *CpkInfo, cpkScopeInfo *CpkScopeInfo, leaseAccessConditions *LeaseAccessConditions, sequenceNumberAccessConditions *SequenceNumberAccessConditions, modifiedAccessConditions *ModifiedAccessConditions, sourceModifiedAccessConditions *SourceModifiedAccessConditions) (pageBlobClientUploadPagesFromURLResponse, error) { - req, err := client.uploadPagesFromURLCreateRequest(ctx, sourceURL, sourceRange, contentLength, rangeParam, pageBlobClientUploadPagesFromURLOptions, cpkInfo, cpkScopeInfo, leaseAccessConditions, sequenceNumberAccessConditions, modifiedAccessConditions, sourceModifiedAccessConditions) - if err != nil { - return pageBlobClientUploadPagesFromURLResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return pageBlobClientUploadPagesFromURLResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusCreated) { - return pageBlobClientUploadPagesFromURLResponse{}, runtime.NewResponseError(resp) - } - return client.uploadPagesFromURLHandleResponse(resp) -} - -// uploadPagesFromURLCreateRequest creates the UploadPagesFromURL request. -func (client *pageBlobClient) uploadPagesFromURLCreateRequest(ctx context.Context, sourceURL string, sourceRange string, contentLength int64, rangeParam string, pageBlobClientUploadPagesFromURLOptions *pageBlobClientUploadPagesFromURLOptions, cpkInfo *CpkInfo, cpkScopeInfo *CpkScopeInfo, leaseAccessConditions *LeaseAccessConditions, sequenceNumberAccessConditions *SequenceNumberAccessConditions, modifiedAccessConditions *ModifiedAccessConditions, sourceModifiedAccessConditions *SourceModifiedAccessConditions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodPut, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - reqQP.Set("comp", "page") - if pageBlobClientUploadPagesFromURLOptions != nil && pageBlobClientUploadPagesFromURLOptions.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*pageBlobClientUploadPagesFromURLOptions.Timeout), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - req.Raw().Header.Set("x-ms-page-write", "update") - req.Raw().Header.Set("x-ms-copy-source", sourceURL) - req.Raw().Header.Set("x-ms-source-range", sourceRange) - if pageBlobClientUploadPagesFromURLOptions != nil && pageBlobClientUploadPagesFromURLOptions.SourceContentMD5 != nil { - req.Raw().Header.Set("x-ms-source-content-md5", base64.StdEncoding.EncodeToString(pageBlobClientUploadPagesFromURLOptions.SourceContentMD5)) - } - if pageBlobClientUploadPagesFromURLOptions != nil && pageBlobClientUploadPagesFromURLOptions.SourceContentcrc64 != nil { - req.Raw().Header.Set("x-ms-source-content-crc64", base64.StdEncoding.EncodeToString(pageBlobClientUploadPagesFromURLOptions.SourceContentcrc64)) - } - req.Raw().Header.Set("Content-Length", strconv.FormatInt(contentLength, 10)) - req.Raw().Header.Set("x-ms-range", rangeParam) - if cpkInfo != nil && cpkInfo.EncryptionKey != nil { - req.Raw().Header.Set("x-ms-encryption-key", *cpkInfo.EncryptionKey) - } - if cpkInfo != nil && cpkInfo.EncryptionKeySHA256 != nil { - req.Raw().Header.Set("x-ms-encryption-key-sha256", *cpkInfo.EncryptionKeySHA256) - } - if cpkInfo != nil && cpkInfo.EncryptionAlgorithm != nil { - req.Raw().Header.Set("x-ms-encryption-algorithm", string(*cpkInfo.EncryptionAlgorithm)) - } - if cpkScopeInfo != nil && cpkScopeInfo.EncryptionScope != nil { - req.Raw().Header.Set("x-ms-encryption-scope", *cpkScopeInfo.EncryptionScope) - } - if leaseAccessConditions != nil && leaseAccessConditions.LeaseID != nil { - req.Raw().Header.Set("x-ms-lease-id", *leaseAccessConditions.LeaseID) - } - if sequenceNumberAccessConditions != nil && sequenceNumberAccessConditions.IfSequenceNumberLessThanOrEqualTo != nil { - req.Raw().Header.Set("x-ms-if-sequence-number-le", strconv.FormatInt(*sequenceNumberAccessConditions.IfSequenceNumberLessThanOrEqualTo, 10)) - } - if sequenceNumberAccessConditions != nil && sequenceNumberAccessConditions.IfSequenceNumberLessThan != nil { - req.Raw().Header.Set("x-ms-if-sequence-number-lt", strconv.FormatInt(*sequenceNumberAccessConditions.IfSequenceNumberLessThan, 10)) - } - if sequenceNumberAccessConditions != nil && sequenceNumberAccessConditions.IfSequenceNumberEqualTo != nil { - req.Raw().Header.Set("x-ms-if-sequence-number-eq", strconv.FormatInt(*sequenceNumberAccessConditions.IfSequenceNumberEqualTo, 10)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfModifiedSince != nil { - req.Raw().Header.Set("If-Modified-Since", modifiedAccessConditions.IfModifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfUnmodifiedSince != nil { - req.Raw().Header.Set("If-Unmodified-Since", modifiedAccessConditions.IfUnmodifiedSince.Format(time.RFC1123)) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfMatch != nil { - req.Raw().Header.Set("If-Match", *modifiedAccessConditions.IfMatch) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfNoneMatch != nil { - req.Raw().Header.Set("If-None-Match", *modifiedAccessConditions.IfNoneMatch) - } - if modifiedAccessConditions != nil && modifiedAccessConditions.IfTags != nil { - req.Raw().Header.Set("x-ms-if-tags", *modifiedAccessConditions.IfTags) - } - if sourceModifiedAccessConditions != nil && sourceModifiedAccessConditions.SourceIfModifiedSince != nil { - req.Raw().Header.Set("x-ms-source-if-modified-since", sourceModifiedAccessConditions.SourceIfModifiedSince.Format(time.RFC1123)) - } - if sourceModifiedAccessConditions != nil && sourceModifiedAccessConditions.SourceIfUnmodifiedSince != nil { - req.Raw().Header.Set("x-ms-source-if-unmodified-since", sourceModifiedAccessConditions.SourceIfUnmodifiedSince.Format(time.RFC1123)) - } - if sourceModifiedAccessConditions != nil && sourceModifiedAccessConditions.SourceIfMatch != nil { - req.Raw().Header.Set("x-ms-source-if-match", *sourceModifiedAccessConditions.SourceIfMatch) - } - if sourceModifiedAccessConditions != nil && sourceModifiedAccessConditions.SourceIfNoneMatch != nil { - req.Raw().Header.Set("x-ms-source-if-none-match", *sourceModifiedAccessConditions.SourceIfNoneMatch) - } - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if pageBlobClientUploadPagesFromURLOptions != nil && pageBlobClientUploadPagesFromURLOptions.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *pageBlobClientUploadPagesFromURLOptions.RequestID) - } - if pageBlobClientUploadPagesFromURLOptions != nil && pageBlobClientUploadPagesFromURLOptions.CopySourceAuthorization != nil { - req.Raw().Header.Set("x-ms-copy-source-authorization", *pageBlobClientUploadPagesFromURLOptions.CopySourceAuthorization) - } - req.Raw().Header.Set("Accept", "application/xml") - return req, nil -} - -// uploadPagesFromURLHandleResponse handles the UploadPagesFromURL response. -func (client *pageBlobClient) uploadPagesFromURLHandleResponse(resp *http.Response) (pageBlobClientUploadPagesFromURLResponse, error) { - result := pageBlobClientUploadPagesFromURLResponse{RawResponse: resp} - if val := resp.Header.Get("ETag"); val != "" { - result.ETag = &val - } - if val := resp.Header.Get("Last-Modified"); val != "" { - lastModified, err := time.Parse(time.RFC1123, val) - if err != nil { - return pageBlobClientUploadPagesFromURLResponse{}, err - } - result.LastModified = &lastModified - } - if val := resp.Header.Get("Content-MD5"); val != "" { - contentMD5, err := base64.StdEncoding.DecodeString(val) - if err != nil { - return pageBlobClientUploadPagesFromURLResponse{}, err - } - result.ContentMD5 = contentMD5 - } - if val := resp.Header.Get("x-ms-content-crc64"); val != "" { - xMSContentCRC64, err := base64.StdEncoding.DecodeString(val) - if err != nil { - return pageBlobClientUploadPagesFromURLResponse{}, err - } - result.XMSContentCRC64 = xMSContentCRC64 - } - if val := resp.Header.Get("x-ms-blob-sequence-number"); val != "" { - blobSequenceNumber, err := strconv.ParseInt(val, 10, 64) - if err != nil { - return pageBlobClientUploadPagesFromURLResponse{}, err - } - result.BlobSequenceNumber = &blobSequenceNumber - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return pageBlobClientUploadPagesFromURLResponse{}, err - } - result.Date = &date - } - if val := resp.Header.Get("x-ms-request-server-encrypted"); val != "" { - isServerEncrypted, err := strconv.ParseBool(val) - if err != nil { - return pageBlobClientUploadPagesFromURLResponse{}, err - } - result.IsServerEncrypted = &isServerEncrypted - } - if val := resp.Header.Get("x-ms-encryption-key-sha256"); val != "" { - result.EncryptionKeySHA256 = &val - } - if val := resp.Header.Get("x-ms-encryption-scope"); val != "" { - result.EncryptionScope = &val - } - return result, nil -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zz_generated_pagers.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zz_generated_pagers.go deleted file mode 100644 index 9f0cc4629fdd..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zz_generated_pagers.go +++ /dev/null @@ -1,287 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -package azblob - -import ( - "context" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime" - "net/http" - "reflect" -) - -// containerClientListBlobFlatSegmentPager provides operations for iterating over paged responses. -type containerClientListBlobFlatSegmentPager struct { - client *containerClient - current containerClientListBlobFlatSegmentResponse - err error - requester func(context.Context) (*policy.Request, error) - advancer func(context.Context, containerClientListBlobFlatSegmentResponse) (*policy.Request, error) -} - -// Err returns the last error encountered while paging. -func (p *containerClientListBlobFlatSegmentPager) Err() error { - return p.err -} - -// NextPage returns true if the pager advanced to the next page. -// Returns false if there are no more pages or an error occurred. -func (p *containerClientListBlobFlatSegmentPager) NextPage(ctx context.Context) bool { - var req *policy.Request - var err error - if !reflect.ValueOf(p.current).IsZero() { - if p.current.ListBlobsFlatSegmentResponse.NextMarker == nil || len(*p.current.ListBlobsFlatSegmentResponse.NextMarker) == 0 { - return false - } - req, err = p.advancer(ctx, p.current) - } else { - req, err = p.requester(ctx) - } - if err != nil { - p.err = err - return false - } - resp, err := p.client.pl.Do(req) - if err != nil { - p.err = err - return false - } - if !runtime.HasStatusCode(resp, http.StatusOK) { - p.err = runtime.NewResponseError(resp) - return false - } - result, err := p.client.listBlobFlatSegmentHandleResponse(resp) - if err != nil { - p.err = err - return false - } - p.current = result - return true -} - -// PageResponse returns the current containerClientListBlobFlatSegmentResponse page. -func (p *containerClientListBlobFlatSegmentPager) PageResponse() containerClientListBlobFlatSegmentResponse { - return p.current -} - -// containerClientListBlobHierarchySegmentPager provides operations for iterating over paged responses. -type containerClientListBlobHierarchySegmentPager struct { - client *containerClient - current containerClientListBlobHierarchySegmentResponse - err error - requester func(context.Context) (*policy.Request, error) - advancer func(context.Context, containerClientListBlobHierarchySegmentResponse) (*policy.Request, error) -} - -// Err returns the last error encountered while paging. -func (p *containerClientListBlobHierarchySegmentPager) Err() error { - return p.err -} - -// NextPage returns true if the pager advanced to the next page. -// Returns false if there are no more pages or an error occurred. -func (p *containerClientListBlobHierarchySegmentPager) NextPage(ctx context.Context) bool { - var req *policy.Request - var err error - if !reflect.ValueOf(p.current).IsZero() { - if p.current.ListBlobsHierarchySegmentResponse.NextMarker == nil || len(*p.current.ListBlobsHierarchySegmentResponse.NextMarker) == 0 { - return false - } - req, err = p.advancer(ctx, p.current) - } else { - req, err = p.requester(ctx) - } - if err != nil { - p.err = err - return false - } - resp, err := p.client.pl.Do(req) - if err != nil { - p.err = err - return false - } - if !runtime.HasStatusCode(resp, http.StatusOK) { - p.err = runtime.NewResponseError(resp) - return false - } - result, err := p.client.listBlobHierarchySegmentHandleResponse(resp) - if err != nil { - p.err = err - return false - } - p.current = result - return true -} - -// PageResponse returns the current containerClientListBlobHierarchySegmentResponse page. -func (p *containerClientListBlobHierarchySegmentPager) PageResponse() containerClientListBlobHierarchySegmentResponse { - return p.current -} - -// pageBlobClientGetPageRangesDiffPager provides operations for iterating over paged responses. -type pageBlobClientGetPageRangesDiffPager struct { - client *pageBlobClient - current pageBlobClientGetPageRangesDiffResponse - err error - requester func(context.Context) (*policy.Request, error) - advancer func(context.Context, pageBlobClientGetPageRangesDiffResponse) (*policy.Request, error) -} - -// Err returns the last error encountered while paging. -func (p *pageBlobClientGetPageRangesDiffPager) Err() error { - return p.err -} - -// NextPage returns true if the pager advanced to the next page. -// Returns false if there are no more pages or an error occurred. -func (p *pageBlobClientGetPageRangesDiffPager) NextPage(ctx context.Context) bool { - var req *policy.Request - var err error - if !reflect.ValueOf(p.current).IsZero() { - if p.current.PageList.NextMarker == nil || len(*p.current.PageList.NextMarker) == 0 { - return false - } - req, err = p.advancer(ctx, p.current) - } else { - req, err = p.requester(ctx) - } - if err != nil { - p.err = err - return false - } - resp, err := p.client.pl.Do(req) - if err != nil { - p.err = err - return false - } - if !runtime.HasStatusCode(resp, http.StatusOK) { - p.err = runtime.NewResponseError(resp) - return false - } - result, err := p.client.getPageRangesDiffHandleResponse(resp) - if err != nil { - p.err = err - return false - } - p.current = result - return true -} - -// PageResponse returns the current pageBlobClientGetPageRangesDiffResponse page. -func (p *pageBlobClientGetPageRangesDiffPager) PageResponse() pageBlobClientGetPageRangesDiffResponse { - return p.current -} - -// pageBlobClientGetPageRangesPager provides operations for iterating over paged responses. -type pageBlobClientGetPageRangesPager struct { - client *pageBlobClient - current pageBlobClientGetPageRangesResponse - err error - requester func(context.Context) (*policy.Request, error) - advancer func(context.Context, pageBlobClientGetPageRangesResponse) (*policy.Request, error) -} - -// Err returns the last error encountered while paging. -func (p *pageBlobClientGetPageRangesPager) Err() error { - return p.err -} - -// NextPage returns true if the pager advanced to the next page. -// Returns false if there are no more pages or an error occurred. -func (p *pageBlobClientGetPageRangesPager) NextPage(ctx context.Context) bool { - var req *policy.Request - var err error - if !reflect.ValueOf(p.current).IsZero() { - if p.current.PageList.NextMarker == nil || len(*p.current.PageList.NextMarker) == 0 { - return false - } - req, err = p.advancer(ctx, p.current) - } else { - req, err = p.requester(ctx) - } - if err != nil { - p.err = err - return false - } - resp, err := p.client.pl.Do(req) - if err != nil { - p.err = err - return false - } - if !runtime.HasStatusCode(resp, http.StatusOK) { - p.err = runtime.NewResponseError(resp) - return false - } - result, err := p.client.getPageRangesHandleResponse(resp) - if err != nil { - p.err = err - return false - } - p.current = result - return true -} - -// PageResponse returns the current pageBlobClientGetPageRangesResponse page. -func (p *pageBlobClientGetPageRangesPager) PageResponse() pageBlobClientGetPageRangesResponse { - return p.current -} - -// serviceClientListContainersSegmentPager provides operations for iterating over paged responses. -type serviceClientListContainersSegmentPager struct { - client *serviceClient - current serviceClientListContainersSegmentResponse - err error - requester func(context.Context) (*policy.Request, error) - advancer func(context.Context, serviceClientListContainersSegmentResponse) (*policy.Request, error) -} - -// Err returns the last error encountered while paging. -func (p *serviceClientListContainersSegmentPager) Err() error { - return p.err -} - -// NextPage returns true if the pager advanced to the next page. -// Returns false if there are no more pages or an error occurred. -func (p *serviceClientListContainersSegmentPager) NextPage(ctx context.Context) bool { - var req *policy.Request - var err error - if !reflect.ValueOf(p.current).IsZero() { - if p.current.ListContainersSegmentResponse.NextMarker == nil || len(*p.current.ListContainersSegmentResponse.NextMarker) == 0 { - return false - } - req, err = p.advancer(ctx, p.current) - } else { - req, err = p.requester(ctx) - } - if err != nil { - p.err = err - return false - } - resp, err := p.client.pl.Do(req) - if err != nil { - p.err = err - return false - } - if !runtime.HasStatusCode(resp, http.StatusOK) { - p.err = runtime.NewResponseError(resp) - return false - } - result, err := p.client.listContainersSegmentHandleResponse(resp) - if err != nil { - p.err = err - return false - } - p.current = result - return true -} - -// PageResponse returns the current serviceClientListContainersSegmentResponse page. -func (p *serviceClientListContainersSegmentPager) PageResponse() serviceClientListContainersSegmentResponse { - return p.current -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zz_generated_response_types.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zz_generated_response_types.go deleted file mode 100644 index 60c1c0c34ec8..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zz_generated_response_types.go +++ /dev/null @@ -1,2434 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -package azblob - -import ( - "net/http" - "time" -) - -// appendBlobClientAppendBlockFromURLResponse contains the response from method appendBlobClient.AppendBlockFromURL. -type appendBlobClientAppendBlockFromURLResponse struct { - appendBlobClientAppendBlockFromURLResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// appendBlobClientAppendBlockFromURLResult contains the result from method appendBlobClient.AppendBlockFromURL. -type appendBlobClientAppendBlockFromURLResult struct { - // BlobAppendOffset contains the information returned from the x-ms-blob-append-offset header response. - BlobAppendOffset *string - - // BlobCommittedBlockCount contains the information returned from the x-ms-blob-committed-block-count header response. - BlobCommittedBlockCount *int32 - - // ContentMD5 contains the information returned from the Content-MD5 header response. - ContentMD5 []byte - - // Date contains the information returned from the Date header response. - Date *time.Time - - // ETag contains the information returned from the ETag header response. - ETag *string - - // EncryptionKeySHA256 contains the information returned from the x-ms-encryption-key-sha256 header response. - EncryptionKeySHA256 *string - - // EncryptionScope contains the information returned from the x-ms-encryption-scope header response. - EncryptionScope *string - - // IsServerEncrypted contains the information returned from the x-ms-request-server-encrypted header response. - IsServerEncrypted *bool - - // LastModified contains the information returned from the Last-Modified header response. - LastModified *time.Time - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string - - // Version contains the information returned from the x-ms-version header response. - Version *string - - // XMSContentCRC64 contains the information returned from the x-ms-content-crc64 header response. - XMSContentCRC64 []byte -} - -// appendBlobClientAppendBlockResponse contains the response from method appendBlobClient.AppendBlock. -type appendBlobClientAppendBlockResponse struct { - appendBlobClientAppendBlockResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// appendBlobClientAppendBlockResult contains the result from method appendBlobClient.AppendBlock. -type appendBlobClientAppendBlockResult struct { - // BlobAppendOffset contains the information returned from the x-ms-blob-append-offset header response. - BlobAppendOffset *string - - // BlobCommittedBlockCount contains the information returned from the x-ms-blob-committed-block-count header response. - BlobCommittedBlockCount *int32 - - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string - - // ContentMD5 contains the information returned from the Content-MD5 header response. - ContentMD5 []byte - - // Date contains the information returned from the Date header response. - Date *time.Time - - // ETag contains the information returned from the ETag header response. - ETag *string - - // EncryptionKeySHA256 contains the information returned from the x-ms-encryption-key-sha256 header response. - EncryptionKeySHA256 *string - - // EncryptionScope contains the information returned from the x-ms-encryption-scope header response. - EncryptionScope *string - - // IsServerEncrypted contains the information returned from the x-ms-request-server-encrypted header response. - IsServerEncrypted *bool - - // LastModified contains the information returned from the Last-Modified header response. - LastModified *time.Time - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string - - // Version contains the information returned from the x-ms-version header response. - Version *string - - // XMSContentCRC64 contains the information returned from the x-ms-content-crc64 header response. - XMSContentCRC64 []byte -} - -// appendBlobClientCreateResponse contains the response from method appendBlobClient.Create. -type appendBlobClientCreateResponse struct { - appendBlobClientCreateResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// appendBlobClientCreateResult contains the result from method appendBlobClient.Create. -type appendBlobClientCreateResult struct { - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string - - // ContentMD5 contains the information returned from the Content-MD5 header response. - ContentMD5 []byte - - // Date contains the information returned from the Date header response. - Date *time.Time - - // ETag contains the information returned from the ETag header response. - ETag *string - - // EncryptionKeySHA256 contains the information returned from the x-ms-encryption-key-sha256 header response. - EncryptionKeySHA256 *string - - // EncryptionScope contains the information returned from the x-ms-encryption-scope header response. - EncryptionScope *string - - // IsServerEncrypted contains the information returned from the x-ms-request-server-encrypted header response. - IsServerEncrypted *bool - - // LastModified contains the information returned from the Last-Modified header response. - LastModified *time.Time - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string - - // Version contains the information returned from the x-ms-version header response. - Version *string - - // VersionID contains the information returned from the x-ms-version-id header response. - VersionID *string -} - -// appendBlobClientSealResponse contains the response from method appendBlobClient.Seal. -type appendBlobClientSealResponse struct { - appendBlobClientSealResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// appendBlobClientSealResult contains the result from method appendBlobClient.Seal. -type appendBlobClientSealResult struct { - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string - - // Date contains the information returned from the Date header response. - Date *time.Time - - // ETag contains the information returned from the ETag header response. - ETag *string - - // IsSealed contains the information returned from the x-ms-blob-sealed header response. - IsSealed *bool - - // LastModified contains the information returned from the Last-Modified header response. - LastModified *time.Time - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string - - // Version contains the information returned from the x-ms-version header response. - Version *string -} - -// blobClientAbortCopyFromURLResponse contains the response from method blobClient.AbortCopyFromURL. -type blobClientAbortCopyFromURLResponse struct { - blobClientAbortCopyFromURLResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// blobClientAbortCopyFromURLResult contains the result from method blobClient.AbortCopyFromURL. -type blobClientAbortCopyFromURLResult struct { - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string - - // Date contains the information returned from the Date header response. - Date *time.Time - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string - - // Version contains the information returned from the x-ms-version header response. - Version *string -} - -// blobClientAcquireLeaseResponse contains the response from method blobClient.AcquireLease. -type blobClientAcquireLeaseResponse struct { - blobClientAcquireLeaseResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// blobClientAcquireLeaseResult contains the result from method blobClient.AcquireLease. -type blobClientAcquireLeaseResult struct { - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string - - // Date contains the information returned from the Date header response. - Date *time.Time - - // ETag contains the information returned from the ETag header response. - ETag *string - - // LastModified contains the information returned from the Last-Modified header response. - LastModified *time.Time - - // LeaseID contains the information returned from the x-ms-lease-id header response. - LeaseID *string - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string - - // Version contains the information returned from the x-ms-version header response. - Version *string -} - -// blobClientBreakLeaseResponse contains the response from method blobClient.BreakLease. -type blobClientBreakLeaseResponse struct { - blobClientBreakLeaseResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// blobClientBreakLeaseResult contains the result from method blobClient.BreakLease. -type blobClientBreakLeaseResult struct { - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string - - // Date contains the information returned from the Date header response. - Date *time.Time - - // ETag contains the information returned from the ETag header response. - ETag *string - - // LastModified contains the information returned from the Last-Modified header response. - LastModified *time.Time - - // LeaseTime contains the information returned from the x-ms-lease-time header response. - LeaseTime *int32 - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string - - // Version contains the information returned from the x-ms-version header response. - Version *string -} - -// blobClientChangeLeaseResponse contains the response from method blobClient.ChangeLease. -type blobClientChangeLeaseResponse struct { - blobClientChangeLeaseResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// blobClientChangeLeaseResult contains the result from method blobClient.ChangeLease. -type blobClientChangeLeaseResult struct { - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string - - // Date contains the information returned from the Date header response. - Date *time.Time - - // ETag contains the information returned from the ETag header response. - ETag *string - - // LastModified contains the information returned from the Last-Modified header response. - LastModified *time.Time - - // LeaseID contains the information returned from the x-ms-lease-id header response. - LeaseID *string - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string - - // Version contains the information returned from the x-ms-version header response. - Version *string -} - -// blobClientCopyFromURLResponse contains the response from method blobClient.CopyFromURL. -type blobClientCopyFromURLResponse struct { - blobClientCopyFromURLResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// blobClientCopyFromURLResult contains the result from method blobClient.CopyFromURL. -type blobClientCopyFromURLResult struct { - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string - - // ContentMD5 contains the information returned from the Content-MD5 header response. - ContentMD5 []byte - - // CopyID contains the information returned from the x-ms-copy-id header response. - CopyID *string - - // CopyStatus contains the information returned from the x-ms-copy-status header response. - CopyStatus *string - - // Date contains the information returned from the Date header response. - Date *time.Time - - // ETag contains the information returned from the ETag header response. - ETag *string - - // LastModified contains the information returned from the Last-Modified header response. - LastModified *time.Time - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string - - // Version contains the information returned from the x-ms-version header response. - Version *string - - // VersionID contains the information returned from the x-ms-version-id header response. - VersionID *string - - // XMSContentCRC64 contains the information returned from the x-ms-content-crc64 header response. - XMSContentCRC64 []byte -} - -// blobClientCreateSnapshotResponse contains the response from method blobClient.CreateSnapshot. -type blobClientCreateSnapshotResponse struct { - blobClientCreateSnapshotResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// blobClientCreateSnapshotResult contains the result from method blobClient.CreateSnapshot. -type blobClientCreateSnapshotResult struct { - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string - - // Date contains the information returned from the Date header response. - Date *time.Time - - // ETag contains the information returned from the ETag header response. - ETag *string - - // IsServerEncrypted contains the information returned from the x-ms-request-server-encrypted header response. - IsServerEncrypted *bool - - // LastModified contains the information returned from the Last-Modified header response. - LastModified *time.Time - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string - - // Snapshot contains the information returned from the x-ms-snapshot header response. - Snapshot *string - - // Version contains the information returned from the x-ms-version header response. - Version *string - - // VersionID contains the information returned from the x-ms-version-id header response. - VersionID *string -} - -// blobClientDeleteImmutabilityPolicyResponse contains the response from method blobClient.DeleteImmutabilityPolicy. -type blobClientDeleteImmutabilityPolicyResponse struct { - blobClientDeleteImmutabilityPolicyResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// blobClientDeleteImmutabilityPolicyResult contains the result from method blobClient.DeleteImmutabilityPolicy. -type blobClientDeleteImmutabilityPolicyResult struct { - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string - - // Date contains the information returned from the Date header response. - Date *time.Time - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string - - // Version contains the information returned from the x-ms-version header response. - Version *string -} - -// blobClientDeleteResponse contains the response from method blobClient.Delete. -type blobClientDeleteResponse struct { - blobClientDeleteResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// blobClientDeleteResult contains the result from method blobClient.Delete. -type blobClientDeleteResult struct { - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string - - // Date contains the information returned from the Date header response. - Date *time.Time - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string - - // Version contains the information returned from the x-ms-version header response. - Version *string -} - -// blobClientDownloadResponse contains the response from method blobClient.Download. -type blobClientDownloadResponse struct { - blobClientDownloadResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// blobClientDownloadResult contains the result from method blobClient.Download. -type blobClientDownloadResult struct { - // AcceptRanges contains the information returned from the Accept-Ranges header response. - AcceptRanges *string - - // BlobCommittedBlockCount contains the information returned from the x-ms-blob-committed-block-count header response. - BlobCommittedBlockCount *int32 - - // BlobContentMD5 contains the information returned from the x-ms-blob-content-md5 header response. - BlobContentMD5 []byte - - // BlobSequenceNumber contains the information returned from the x-ms-blob-sequence-number header response. - BlobSequenceNumber *int64 - - // BlobType contains the information returned from the x-ms-blob-type header response. - BlobType *BlobType - - // CacheControl contains the information returned from the Cache-Control header response. - CacheControl *string - - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string - - // ContentCRC64 contains the information returned from the x-ms-content-crc64 header response. - ContentCRC64 []byte - - // ContentDisposition contains the information returned from the Content-Disposition header response. - ContentDisposition *string - - // ContentEncoding contains the information returned from the Content-Encoding header response. - ContentEncoding *string - - // ContentLanguage contains the information returned from the Content-Language header response. - ContentLanguage *string - - // ContentLength contains the information returned from the Content-Length header response. - ContentLength *int64 - - // ContentMD5 contains the information returned from the Content-MD5 header response. - ContentMD5 []byte - - // ContentRange contains the information returned from the Content-Range header response. - ContentRange *string - - // ContentType contains the information returned from the Content-Type header response. - ContentType *string - - // CopyCompletionTime contains the information returned from the x-ms-copy-completion-time header response. - CopyCompletionTime *time.Time - - // CopyID contains the information returned from the x-ms-copy-id header response. - CopyID *string - - // CopyProgress contains the information returned from the x-ms-copy-progress header response. - CopyProgress *string - - // CopySource contains the information returned from the x-ms-copy-source header response. - CopySource *string - - // CopyStatus contains the information returned from the x-ms-copy-status header response. - CopyStatus *CopyStatusType - - // CopyStatusDescription contains the information returned from the x-ms-copy-status-description header response. - CopyStatusDescription *string - - // Date contains the information returned from the Date header response. - Date *time.Time - - // ETag contains the information returned from the ETag header response. - ETag *string - - // EncryptionKeySHA256 contains the information returned from the x-ms-encryption-key-sha256 header response. - EncryptionKeySHA256 *string - - // EncryptionScope contains the information returned from the x-ms-encryption-scope header response. - EncryptionScope *string - - // ErrorCode contains the information returned from the x-ms-error-code header response. - ErrorCode *string - - // ImmutabilityPolicyExpiresOn contains the information returned from the x-ms-immutability-policy-until-date header response. - ImmutabilityPolicyExpiresOn *time.Time - - // ImmutabilityPolicyMode contains the information returned from the x-ms-immutability-policy-mode header response. - ImmutabilityPolicyMode *BlobImmutabilityPolicyMode - - // IsCurrentVersion contains the information returned from the x-ms-is-current-version header response. - IsCurrentVersion *bool - - // IsSealed contains the information returned from the x-ms-blob-sealed header response. - IsSealed *bool - - // IsServerEncrypted contains the information returned from the x-ms-server-encrypted header response. - IsServerEncrypted *bool - - // LastAccessed contains the information returned from the x-ms-last-access-time header response. - LastAccessed *time.Time - - // LastModified contains the information returned from the Last-Modified header response. - LastModified *time.Time - - // LeaseDuration contains the information returned from the x-ms-lease-duration header response. - LeaseDuration *LeaseDurationType - - // LeaseState contains the information returned from the x-ms-lease-state header response. - LeaseState *LeaseStateType - - // LeaseStatus contains the information returned from the x-ms-lease-status header response. - LeaseStatus *LeaseStatusType - - // LegalHold contains the information returned from the x-ms-legal-hold header response. - LegalHold *bool - - // Metadata contains the information returned from the x-ms-meta header response. - Metadata map[string]string - - // ObjectReplicationPolicyID contains the information returned from the x-ms-or-policy-id header response. - ObjectReplicationPolicyID *string - - // ObjectReplicationRules contains the information returned from the x-ms-or header response. - ObjectReplicationRules map[string]string - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string - - // TagCount contains the information returned from the x-ms-tag-count header response. - TagCount *int64 - - // Version contains the information returned from the x-ms-version header response. - Version *string - - // VersionID contains the information returned from the x-ms-version-id header response. - VersionID *string -} - -// blobClientGetAccountInfoResponse contains the response from method blobClient.GetAccountInfo. -type blobClientGetAccountInfoResponse struct { - blobClientGetAccountInfoResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// blobClientGetAccountInfoResult contains the result from method blobClient.GetAccountInfo. -type blobClientGetAccountInfoResult struct { - // AccountKind contains the information returned from the x-ms-account-kind header response. - AccountKind *AccountKind - - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string - - // Date contains the information returned from the Date header response. - Date *time.Time - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string - - // SKUName contains the information returned from the x-ms-sku-name header response. - SKUName *SKUName - - // Version contains the information returned from the x-ms-version header response. - Version *string -} - -// blobClientGetPropertiesResponse contains the response from method blobClient.GetProperties. -type blobClientGetPropertiesResponse struct { - blobClientGetPropertiesResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// blobClientGetPropertiesResult contains the result from method blobClient.GetProperties. -type blobClientGetPropertiesResult struct { - // AcceptRanges contains the information returned from the Accept-Ranges header response. - AcceptRanges *string - - // AccessTier contains the information returned from the x-ms-access-tier header response. - AccessTier *string - - // AccessTierChangeTime contains the information returned from the x-ms-access-tier-change-time header response. - AccessTierChangeTime *time.Time - - // AccessTierInferred contains the information returned from the x-ms-access-tier-inferred header response. - AccessTierInferred *bool - - // ArchiveStatus contains the information returned from the x-ms-archive-status header response. - ArchiveStatus *string - - // BlobCommittedBlockCount contains the information returned from the x-ms-blob-committed-block-count header response. - BlobCommittedBlockCount *int32 - - // BlobSequenceNumber contains the information returned from the x-ms-blob-sequence-number header response. - BlobSequenceNumber *int64 - - // BlobType contains the information returned from the x-ms-blob-type header response. - BlobType *BlobType - - // CacheControl contains the information returned from the Cache-Control header response. - CacheControl *string - - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string - - // ContentDisposition contains the information returned from the Content-Disposition header response. - ContentDisposition *string - - // ContentEncoding contains the information returned from the Content-Encoding header response. - ContentEncoding *string - - // ContentLanguage contains the information returned from the Content-Language header response. - ContentLanguage *string - - // ContentLength contains the information returned from the Content-Length header response. - ContentLength *int64 - - // ContentMD5 contains the information returned from the Content-MD5 header response. - ContentMD5 []byte - - // ContentType contains the information returned from the Content-Type header response. - ContentType *string - - // CopyCompletionTime contains the information returned from the x-ms-copy-completion-time header response. - CopyCompletionTime *time.Time - - // CopyID contains the information returned from the x-ms-copy-id header response. - CopyID *string - - // CopyProgress contains the information returned from the x-ms-copy-progress header response. - CopyProgress *string - - // CopySource contains the information returned from the x-ms-copy-source header response. - CopySource *string - - // CopyStatus contains the information returned from the x-ms-copy-status header response. - CopyStatus *CopyStatusType - - // CopyStatusDescription contains the information returned from the x-ms-copy-status-description header response. - CopyStatusDescription *string - - // CreationTime contains the information returned from the x-ms-creation-time header response. - CreationTime *time.Time - - // Date contains the information returned from the Date header response. - Date *time.Time - - // DestinationSnapshot contains the information returned from the x-ms-copy-destination-snapshot header response. - DestinationSnapshot *string - - // ETag contains the information returned from the ETag header response. - ETag *string - - // EncryptionKeySHA256 contains the information returned from the x-ms-encryption-key-sha256 header response. - EncryptionKeySHA256 *string - - // EncryptionScope contains the information returned from the x-ms-encryption-scope header response. - EncryptionScope *string - - // ExpiresOn contains the information returned from the x-ms-expiry-time header response. - ExpiresOn *time.Time - - // ImmutabilityPolicyExpiresOn contains the information returned from the x-ms-immutability-policy-until-date header response. - ImmutabilityPolicyExpiresOn *time.Time - - // ImmutabilityPolicyMode contains the information returned from the x-ms-immutability-policy-mode header response. - ImmutabilityPolicyMode *BlobImmutabilityPolicyMode - - // IsCurrentVersion contains the information returned from the x-ms-is-current-version header response. - IsCurrentVersion *bool - - // IsIncrementalCopy contains the information returned from the x-ms-incremental-copy header response. - IsIncrementalCopy *bool - - // IsSealed contains the information returned from the x-ms-blob-sealed header response. - IsSealed *bool - - // IsServerEncrypted contains the information returned from the x-ms-server-encrypted header response. - IsServerEncrypted *bool - - // LastAccessed contains the information returned from the x-ms-last-access-time header response. - LastAccessed *time.Time - - // LastModified contains the information returned from the Last-Modified header response. - LastModified *time.Time - - // LeaseDuration contains the information returned from the x-ms-lease-duration header response. - LeaseDuration *LeaseDurationType - - // LeaseState contains the information returned from the x-ms-lease-state header response. - LeaseState *LeaseStateType - - // LeaseStatus contains the information returned from the x-ms-lease-status header response. - LeaseStatus *LeaseStatusType - - // LegalHold contains the information returned from the x-ms-legal-hold header response. - LegalHold *bool - - // Metadata contains the information returned from the x-ms-meta header response. - Metadata map[string]string - - // ObjectReplicationPolicyID contains the information returned from the x-ms-or-policy-id header response. - ObjectReplicationPolicyID *string - - // ObjectReplicationRules contains the information returned from the x-ms-or header response. - ObjectReplicationRules map[string]string - - // RehydratePriority contains the information returned from the x-ms-rehydrate-priority header response. - RehydratePriority *string - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string - - // TagCount contains the information returned from the x-ms-tag-count header response. - TagCount *int64 - - // Version contains the information returned from the x-ms-version header response. - Version *string - - // VersionID contains the information returned from the x-ms-version-id header response. - VersionID *string -} - -// blobClientGetTagsResponse contains the response from method blobClient.GetTags. -type blobClientGetTagsResponse struct { - blobClientGetTagsResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// blobClientGetTagsResult contains the result from method blobClient.GetTags. -type blobClientGetTagsResult struct { - BlobTags - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string `xml:"ClientRequestID"` - - // Date contains the information returned from the Date header response. - Date *time.Time `xml:"Date"` - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string `xml:"RequestID"` - - // Version contains the information returned from the x-ms-version header response. - Version *string `xml:"Version"` -} - -// blobClientQueryResponse contains the response from method blobClient.Query. -type blobClientQueryResponse struct { - blobClientQueryResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// blobClientQueryResult contains the result from method blobClient.Query. -type blobClientQueryResult struct { - // AcceptRanges contains the information returned from the Accept-Ranges header response. - AcceptRanges *string - - // BlobCommittedBlockCount contains the information returned from the x-ms-blob-committed-block-count header response. - BlobCommittedBlockCount *int32 - - // BlobContentMD5 contains the information returned from the x-ms-blob-content-md5 header response. - BlobContentMD5 []byte - - // BlobSequenceNumber contains the information returned from the x-ms-blob-sequence-number header response. - BlobSequenceNumber *int64 - - // BlobType contains the information returned from the x-ms-blob-type header response. - BlobType *BlobType - - // CacheControl contains the information returned from the Cache-Control header response. - CacheControl *string - - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string - - // ContentCRC64 contains the information returned from the x-ms-content-crc64 header response. - ContentCRC64 []byte - - // ContentDisposition contains the information returned from the Content-Disposition header response. - ContentDisposition *string - - // ContentEncoding contains the information returned from the Content-Encoding header response. - ContentEncoding *string - - // ContentLanguage contains the information returned from the Content-Language header response. - ContentLanguage *string - - // ContentLength contains the information returned from the Content-Length header response. - ContentLength *int64 - - // ContentMD5 contains the information returned from the Content-MD5 header response. - ContentMD5 []byte - - // ContentRange contains the information returned from the Content-Range header response. - ContentRange *string - - // ContentType contains the information returned from the Content-Type header response. - ContentType *string - - // CopyCompletionTime contains the information returned from the x-ms-copy-completion-time header response. - CopyCompletionTime *time.Time - - // CopyID contains the information returned from the x-ms-copy-id header response. - CopyID *string - - // CopyProgress contains the information returned from the x-ms-copy-progress header response. - CopyProgress *string - - // CopySource contains the information returned from the x-ms-copy-source header response. - CopySource *string - - // CopyStatus contains the information returned from the x-ms-copy-status header response. - CopyStatus *CopyStatusType - - // CopyStatusDescription contains the information returned from the x-ms-copy-status-description header response. - CopyStatusDescription *string - - // Date contains the information returned from the Date header response. - Date *time.Time - - // ETag contains the information returned from the ETag header response. - ETag *string - - // EncryptionKeySHA256 contains the information returned from the x-ms-encryption-key-sha256 header response. - EncryptionKeySHA256 *string - - // EncryptionScope contains the information returned from the x-ms-encryption-scope header response. - EncryptionScope *string - - // IsServerEncrypted contains the information returned from the x-ms-server-encrypted header response. - IsServerEncrypted *bool - - // LastModified contains the information returned from the Last-Modified header response. - LastModified *time.Time - - // LeaseDuration contains the information returned from the x-ms-lease-duration header response. - LeaseDuration *LeaseDurationType - - // LeaseState contains the information returned from the x-ms-lease-state header response. - LeaseState *LeaseStateType - - // LeaseStatus contains the information returned from the x-ms-lease-status header response. - LeaseStatus *LeaseStatusType - - // Metadata contains the information returned from the x-ms-meta header response. - Metadata map[string]string - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string - - // Version contains the information returned from the x-ms-version header response. - Version *string -} - -// blobClientReleaseLeaseResponse contains the response from method blobClient.ReleaseLease. -type blobClientReleaseLeaseResponse struct { - blobClientReleaseLeaseResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// blobClientReleaseLeaseResult contains the result from method blobClient.ReleaseLease. -type blobClientReleaseLeaseResult struct { - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string - - // Date contains the information returned from the Date header response. - Date *time.Time - - // ETag contains the information returned from the ETag header response. - ETag *string - - // LastModified contains the information returned from the Last-Modified header response. - LastModified *time.Time - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string - - // Version contains the information returned from the x-ms-version header response. - Version *string -} - -// blobClientRenewLeaseResponse contains the response from method blobClient.RenewLease. -type blobClientRenewLeaseResponse struct { - blobClientRenewLeaseResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// blobClientRenewLeaseResult contains the result from method blobClient.RenewLease. -type blobClientRenewLeaseResult struct { - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string - - // Date contains the information returned from the Date header response. - Date *time.Time - - // ETag contains the information returned from the ETag header response. - ETag *string - - // LastModified contains the information returned from the Last-Modified header response. - LastModified *time.Time - - // LeaseID contains the information returned from the x-ms-lease-id header response. - LeaseID *string - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string - - // Version contains the information returned from the x-ms-version header response. - Version *string -} - -// blobClientSetExpiryResponse contains the response from method blobClient.SetExpiry. -type blobClientSetExpiryResponse struct { - blobClientSetExpiryResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// blobClientSetExpiryResult contains the result from method blobClient.SetExpiry. -type blobClientSetExpiryResult struct { - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string - - // Date contains the information returned from the Date header response. - Date *time.Time - - // ETag contains the information returned from the ETag header response. - ETag *string - - // LastModified contains the information returned from the Last-Modified header response. - LastModified *time.Time - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string - - // Version contains the information returned from the x-ms-version header response. - Version *string -} - -// blobClientSetHTTPHeadersResponse contains the response from method blobClient.SetHTTPHeaders. -type blobClientSetHTTPHeadersResponse struct { - blobClientSetHTTPHeadersResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// blobClientSetHTTPHeadersResult contains the result from method blobClient.SetHTTPHeaders. -type blobClientSetHTTPHeadersResult struct { - // BlobSequenceNumber contains the information returned from the x-ms-blob-sequence-number header response. - BlobSequenceNumber *int64 - - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string - - // Date contains the information returned from the Date header response. - Date *time.Time - - // ETag contains the information returned from the ETag header response. - ETag *string - - // LastModified contains the information returned from the Last-Modified header response. - LastModified *time.Time - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string - - // Version contains the information returned from the x-ms-version header response. - Version *string -} - -// blobClientSetImmutabilityPolicyResponse contains the response from method blobClient.SetImmutabilityPolicy. -type blobClientSetImmutabilityPolicyResponse struct { - blobClientSetImmutabilityPolicyResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// blobClientSetImmutabilityPolicyResult contains the result from method blobClient.SetImmutabilityPolicy. -type blobClientSetImmutabilityPolicyResult struct { - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string - - // Date contains the information returned from the Date header response. - Date *time.Time - - // ImmutabilityPolicyExpiry contains the information returned from the x-ms-immutability-policy-until-date header response. - ImmutabilityPolicyExpiry *time.Time - - // ImmutabilityPolicyMode contains the information returned from the x-ms-immutability-policy-mode header response. - ImmutabilityPolicyMode *BlobImmutabilityPolicyMode - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string - - // Version contains the information returned from the x-ms-version header response. - Version *string -} - -// blobClientSetLegalHoldResponse contains the response from method blobClient.SetLegalHold. -type blobClientSetLegalHoldResponse struct { - blobClientSetLegalHoldResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// blobClientSetLegalHoldResult contains the result from method blobClient.SetLegalHold. -type blobClientSetLegalHoldResult struct { - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string - - // Date contains the information returned from the Date header response. - Date *time.Time - - // LegalHold contains the information returned from the x-ms-legal-hold header response. - LegalHold *bool - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string - - // Version contains the information returned from the x-ms-version header response. - Version *string -} - -// blobClientSetMetadataResponse contains the response from method blobClient.SetMetadata. -type blobClientSetMetadataResponse struct { - blobClientSetMetadataResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// blobClientSetMetadataResult contains the result from method blobClient.SetMetadata. -type blobClientSetMetadataResult struct { - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string - - // Date contains the information returned from the Date header response. - Date *time.Time - - // ETag contains the information returned from the ETag header response. - ETag *string - - // EncryptionKeySHA256 contains the information returned from the x-ms-encryption-key-sha256 header response. - EncryptionKeySHA256 *string - - // EncryptionScope contains the information returned from the x-ms-encryption-scope header response. - EncryptionScope *string - - // IsServerEncrypted contains the information returned from the x-ms-request-server-encrypted header response. - IsServerEncrypted *bool - - // LastModified contains the information returned from the Last-Modified header response. - LastModified *time.Time - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string - - // Version contains the information returned from the x-ms-version header response. - Version *string - - // VersionID contains the information returned from the x-ms-version-id header response. - VersionID *string -} - -// blobClientSetTagsResponse contains the response from method blobClient.SetTags. -type blobClientSetTagsResponse struct { - blobClientSetTagsResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// blobClientSetTagsResult contains the result from method blobClient.SetTags. -type blobClientSetTagsResult struct { - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string - - // Date contains the information returned from the Date header response. - Date *time.Time - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string - - // Version contains the information returned from the x-ms-version header response. - Version *string -} - -// blobClientSetTierResponse contains the response from method blobClient.SetTier. -type blobClientSetTierResponse struct { - blobClientSetTierResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// blobClientSetTierResult contains the result from method blobClient.SetTier. -type blobClientSetTierResult struct { - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string - - // Version contains the information returned from the x-ms-version header response. - Version *string -} - -// blobClientStartCopyFromURLResponse contains the response from method blobClient.StartCopyFromURL. -type blobClientStartCopyFromURLResponse struct { - blobClientStartCopyFromURLResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// blobClientStartCopyFromURLResult contains the result from method blobClient.StartCopyFromURL. -type blobClientStartCopyFromURLResult struct { - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string - - // CopyID contains the information returned from the x-ms-copy-id header response. - CopyID *string - - // CopyStatus contains the information returned from the x-ms-copy-status header response. - CopyStatus *CopyStatusType - - // Date contains the information returned from the Date header response. - Date *time.Time - - // ETag contains the information returned from the ETag header response. - ETag *string - - // LastModified contains the information returned from the Last-Modified header response. - LastModified *time.Time - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string - - // Version contains the information returned from the x-ms-version header response. - Version *string - - // VersionID contains the information returned from the x-ms-version-id header response. - VersionID *string -} - -// blobClientUndeleteResponse contains the response from method blobClient.Undelete. -type blobClientUndeleteResponse struct { - blobClientUndeleteResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// blobClientUndeleteResult contains the result from method blobClient.Undelete. -type blobClientUndeleteResult struct { - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string - - // Date contains the information returned from the Date header response. - Date *time.Time - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string - - // Version contains the information returned from the x-ms-version header response. - Version *string -} - -// blockBlobClientCommitBlockListResponse contains the response from method blockBlobClient.CommitBlockList. -type blockBlobClientCommitBlockListResponse struct { - blockBlobClientCommitBlockListResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// blockBlobClientCommitBlockListResult contains the result from method blockBlobClient.CommitBlockList. -type blockBlobClientCommitBlockListResult struct { - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string - - // ContentMD5 contains the information returned from the Content-MD5 header response. - ContentMD5 []byte - - // Date contains the information returned from the Date header response. - Date *time.Time - - // ETag contains the information returned from the ETag header response. - ETag *string - - // EncryptionKeySHA256 contains the information returned from the x-ms-encryption-key-sha256 header response. - EncryptionKeySHA256 *string - - // EncryptionScope contains the information returned from the x-ms-encryption-scope header response. - EncryptionScope *string - - // IsServerEncrypted contains the information returned from the x-ms-request-server-encrypted header response. - IsServerEncrypted *bool - - // LastModified contains the information returned from the Last-Modified header response. - LastModified *time.Time - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string - - // Version contains the information returned from the x-ms-version header response. - Version *string - - // VersionID contains the information returned from the x-ms-version-id header response. - VersionID *string - - // XMSContentCRC64 contains the information returned from the x-ms-content-crc64 header response. - XMSContentCRC64 []byte -} - -// blockBlobClientGetBlockListResponse contains the response from method blockBlobClient.GetBlockList. -type blockBlobClientGetBlockListResponse struct { - blockBlobClientGetBlockListResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// blockBlobClientGetBlockListResult contains the result from method blockBlobClient.GetBlockList. -type blockBlobClientGetBlockListResult struct { - BlockList - // BlobContentLength contains the information returned from the x-ms-blob-content-length header response. - BlobContentLength *int64 `xml:"BlobContentLength"` - - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string `xml:"ClientRequestID"` - - // ContentType contains the information returned from the Content-Type header response. - ContentType *string `xml:"ContentType"` - - // Date contains the information returned from the Date header response. - Date *time.Time `xml:"Date"` - - // ETag contains the information returned from the ETag header response. - ETag *string `xml:"ETag"` - - // LastModified contains the information returned from the Last-Modified header response. - LastModified *time.Time `xml:"LastModified"` - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string `xml:"RequestID"` - - // Version contains the information returned from the x-ms-version header response. - Version *string `xml:"Version"` -} - -// blockBlobClientPutBlobFromURLResponse contains the response from method blockBlobClient.PutBlobFromURL. -type blockBlobClientPutBlobFromURLResponse struct { - blockBlobClientPutBlobFromURLResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// blockBlobClientPutBlobFromURLResult contains the result from method blockBlobClient.PutBlobFromURL. -type blockBlobClientPutBlobFromURLResult struct { - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string - - // ContentMD5 contains the information returned from the Content-MD5 header response. - ContentMD5 []byte - - // Date contains the information returned from the Date header response. - Date *time.Time - - // ETag contains the information returned from the ETag header response. - ETag *string - - // EncryptionKeySHA256 contains the information returned from the x-ms-encryption-key-sha256 header response. - EncryptionKeySHA256 *string - - // EncryptionScope contains the information returned from the x-ms-encryption-scope header response. - EncryptionScope *string - - // IsServerEncrypted contains the information returned from the x-ms-request-server-encrypted header response. - IsServerEncrypted *bool - - // LastModified contains the information returned from the Last-Modified header response. - LastModified *time.Time - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string - - // Version contains the information returned from the x-ms-version header response. - Version *string - - // VersionID contains the information returned from the x-ms-version-id header response. - VersionID *string -} - -// blockBlobClientStageBlockFromURLResponse contains the response from method blockBlobClient.StageBlockFromURL. -type blockBlobClientStageBlockFromURLResponse struct { - blockBlobClientStageBlockFromURLResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// blockBlobClientStageBlockFromURLResult contains the result from method blockBlobClient.StageBlockFromURL. -type blockBlobClientStageBlockFromURLResult struct { - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string - - // ContentMD5 contains the information returned from the Content-MD5 header response. - ContentMD5 []byte - - // Date contains the information returned from the Date header response. - Date *time.Time - - // EncryptionKeySHA256 contains the information returned from the x-ms-encryption-key-sha256 header response. - EncryptionKeySHA256 *string - - // EncryptionScope contains the information returned from the x-ms-encryption-scope header response. - EncryptionScope *string - - // IsServerEncrypted contains the information returned from the x-ms-request-server-encrypted header response. - IsServerEncrypted *bool - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string - - // Version contains the information returned from the x-ms-version header response. - Version *string - - // XMSContentCRC64 contains the information returned from the x-ms-content-crc64 header response. - XMSContentCRC64 []byte -} - -// blockBlobClientStageBlockResponse contains the response from method blockBlobClient.StageBlock. -type blockBlobClientStageBlockResponse struct { - blockBlobClientStageBlockResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// blockBlobClientStageBlockResult contains the result from method blockBlobClient.StageBlock. -type blockBlobClientStageBlockResult struct { - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string - - // ContentMD5 contains the information returned from the Content-MD5 header response. - ContentMD5 []byte - - // Date contains the information returned from the Date header response. - Date *time.Time - - // EncryptionKeySHA256 contains the information returned from the x-ms-encryption-key-sha256 header response. - EncryptionKeySHA256 *string - - // EncryptionScope contains the information returned from the x-ms-encryption-scope header response. - EncryptionScope *string - - // IsServerEncrypted contains the information returned from the x-ms-request-server-encrypted header response. - IsServerEncrypted *bool - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string - - // Version contains the information returned from the x-ms-version header response. - Version *string - - // XMSContentCRC64 contains the information returned from the x-ms-content-crc64 header response. - XMSContentCRC64 []byte -} - -// blockBlobClientUploadResponse contains the response from method blockBlobClient.Upload. -type blockBlobClientUploadResponse struct { - blockBlobClientUploadResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// blockBlobClientUploadResult contains the result from method blockBlobClient.Upload. -type blockBlobClientUploadResult struct { - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string - - // ContentMD5 contains the information returned from the Content-MD5 header response. - ContentMD5 []byte - - // Date contains the information returned from the Date header response. - Date *time.Time - - // ETag contains the information returned from the ETag header response. - ETag *string - - // EncryptionKeySHA256 contains the information returned from the x-ms-encryption-key-sha256 header response. - EncryptionKeySHA256 *string - - // EncryptionScope contains the information returned from the x-ms-encryption-scope header response. - EncryptionScope *string - - // IsServerEncrypted contains the information returned from the x-ms-request-server-encrypted header response. - IsServerEncrypted *bool - - // LastModified contains the information returned from the Last-Modified header response. - LastModified *time.Time - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string - - // Version contains the information returned from the x-ms-version header response. - Version *string - - // VersionID contains the information returned from the x-ms-version-id header response. - VersionID *string -} - -// containerClientAcquireLeaseResponse contains the response from method containerClient.AcquireLease. -type containerClientAcquireLeaseResponse struct { - containerClientAcquireLeaseResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// containerClientAcquireLeaseResult contains the result from method containerClient.AcquireLease. -type containerClientAcquireLeaseResult struct { - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string - - // Date contains the information returned from the Date header response. - Date *time.Time - - // ETag contains the information returned from the ETag header response. - ETag *string - - // LastModified contains the information returned from the Last-Modified header response. - LastModified *time.Time - - // LeaseID contains the information returned from the x-ms-lease-id header response. - LeaseID *string - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string - - // Version contains the information returned from the x-ms-version header response. - Version *string -} - -// containerClientBreakLeaseResponse contains the response from method containerClient.BreakLease. -type containerClientBreakLeaseResponse struct { - containerClientBreakLeaseResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// containerClientBreakLeaseResult contains the result from method containerClient.BreakLease. -type containerClientBreakLeaseResult struct { - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string - - // Date contains the information returned from the Date header response. - Date *time.Time - - // ETag contains the information returned from the ETag header response. - ETag *string - - // LastModified contains the information returned from the Last-Modified header response. - LastModified *time.Time - - // LeaseTime contains the information returned from the x-ms-lease-time header response. - LeaseTime *int32 - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string - - // Version contains the information returned from the x-ms-version header response. - Version *string -} - -// containerClientChangeLeaseResponse contains the response from method containerClient.ChangeLease. -type containerClientChangeLeaseResponse struct { - containerClientChangeLeaseResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// containerClientChangeLeaseResult contains the result from method containerClient.ChangeLease. -type containerClientChangeLeaseResult struct { - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string - - // Date contains the information returned from the Date header response. - Date *time.Time - - // ETag contains the information returned from the ETag header response. - ETag *string - - // LastModified contains the information returned from the Last-Modified header response. - LastModified *time.Time - - // LeaseID contains the information returned from the x-ms-lease-id header response. - LeaseID *string - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string - - // Version contains the information returned from the x-ms-version header response. - Version *string -} - -// containerClientCreateResponse contains the response from method containerClient.Create. -type containerClientCreateResponse struct { - containerClientCreateResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// containerClientCreateResult contains the result from method containerClient.Create. -type containerClientCreateResult struct { - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string - - // Date contains the information returned from the Date header response. - Date *time.Time - - // ETag contains the information returned from the ETag header response. - ETag *string - - // LastModified contains the information returned from the Last-Modified header response. - LastModified *time.Time - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string - - // Version contains the information returned from the x-ms-version header response. - Version *string -} - -// containerClientDeleteResponse contains the response from method containerClient.Delete. -type containerClientDeleteResponse struct { - containerClientDeleteResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// containerClientDeleteResult contains the result from method containerClient.Delete. -type containerClientDeleteResult struct { - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string - - // Date contains the information returned from the Date header response. - Date *time.Time - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string - - // Version contains the information returned from the x-ms-version header response. - Version *string -} - -// containerClientGetAccessPolicyResponse contains the response from method containerClient.GetAccessPolicy. -type containerClientGetAccessPolicyResponse struct { - containerClientGetAccessPolicyResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// containerClientGetAccessPolicyResult contains the result from method containerClient.GetAccessPolicy. -type containerClientGetAccessPolicyResult struct { - // BlobPublicAccess contains the information returned from the x-ms-blob-public-access header response. - BlobPublicAccess *PublicAccessType `xml:"BlobPublicAccess"` - - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string `xml:"ClientRequestID"` - - // Date contains the information returned from the Date header response. - Date *time.Time `xml:"Date"` - - // ETag contains the information returned from the ETag header response. - ETag *string `xml:"ETag"` - - // LastModified contains the information returned from the Last-Modified header response. - LastModified *time.Time `xml:"LastModified"` - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string `xml:"RequestID"` - - // a collection of signed identifiers - SignedIdentifiers []*SignedIdentifier `xml:"SignedIdentifier"` - - // Version contains the information returned from the x-ms-version header response. - Version *string `xml:"Version"` -} - -// containerClientGetAccountInfoResponse contains the response from method containerClient.GetAccountInfo. -type containerClientGetAccountInfoResponse struct { - containerClientGetAccountInfoResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// containerClientGetAccountInfoResult contains the result from method containerClient.GetAccountInfo. -type containerClientGetAccountInfoResult struct { - // AccountKind contains the information returned from the x-ms-account-kind header response. - AccountKind *AccountKind - - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string - - // Date contains the information returned from the Date header response. - Date *time.Time - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string - - // SKUName contains the information returned from the x-ms-sku-name header response. - SKUName *SKUName - - // Version contains the information returned from the x-ms-version header response. - Version *string -} - -// containerClientGetPropertiesResponse contains the response from method containerClient.GetProperties. -type containerClientGetPropertiesResponse struct { - containerClientGetPropertiesResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// containerClientGetPropertiesResult contains the result from method containerClient.GetProperties. -type containerClientGetPropertiesResult struct { - // BlobPublicAccess contains the information returned from the x-ms-blob-public-access header response. - BlobPublicAccess *PublicAccessType - - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string - - // Date contains the information returned from the Date header response. - Date *time.Time - - // DefaultEncryptionScope contains the information returned from the x-ms-default-encryption-scope header response. - DefaultEncryptionScope *string - - // DenyEncryptionScopeOverride contains the information returned from the x-ms-deny-encryption-scope-override header response. - DenyEncryptionScopeOverride *bool - - // ETag contains the information returned from the ETag header response. - ETag *string - - // HasImmutabilityPolicy contains the information returned from the x-ms-has-immutability-policy header response. - HasImmutabilityPolicy *bool - - // HasLegalHold contains the information returned from the x-ms-has-legal-hold header response. - HasLegalHold *bool - - // IsImmutableStorageWithVersioningEnabled contains the information returned from the x-ms-immutable-storage-with-versioning-enabled - // header response. - IsImmutableStorageWithVersioningEnabled *bool - - // LastModified contains the information returned from the Last-Modified header response. - LastModified *time.Time - - // LeaseDuration contains the information returned from the x-ms-lease-duration header response. - LeaseDuration *LeaseDurationType - - // LeaseState contains the information returned from the x-ms-lease-state header response. - LeaseState *LeaseStateType - - // LeaseStatus contains the information returned from the x-ms-lease-status header response. - LeaseStatus *LeaseStatusType - - // Metadata contains the information returned from the x-ms-meta header response. - Metadata map[string]string - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string - - // Version contains the information returned from the x-ms-version header response. - Version *string -} - -// containerClientListBlobFlatSegmentResponse contains the response from method containerClient.ListBlobFlatSegment. -type containerClientListBlobFlatSegmentResponse struct { - containerClientListBlobFlatSegmentResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// containerClientListBlobFlatSegmentResult contains the result from method containerClient.ListBlobFlatSegment. -type containerClientListBlobFlatSegmentResult struct { - ListBlobsFlatSegmentResponse - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string `xml:"ClientRequestID"` - - // ContentType contains the information returned from the Content-Type header response. - ContentType *string `xml:"ContentType"` - - // Date contains the information returned from the Date header response. - Date *time.Time `xml:"Date"` - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string `xml:"RequestID"` - - // Version contains the information returned from the x-ms-version header response. - Version *string `xml:"Version"` -} - -// containerClientListBlobHierarchySegmentResponse contains the response from method containerClient.ListBlobHierarchySegment. -type containerClientListBlobHierarchySegmentResponse struct { - containerClientListBlobHierarchySegmentResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// containerClientListBlobHierarchySegmentResult contains the result from method containerClient.ListBlobHierarchySegment. -type containerClientListBlobHierarchySegmentResult struct { - ListBlobsHierarchySegmentResponse - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string `xml:"ClientRequestID"` - - // ContentType contains the information returned from the Content-Type header response. - ContentType *string `xml:"ContentType"` - - // Date contains the information returned from the Date header response. - Date *time.Time `xml:"Date"` - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string `xml:"RequestID"` - - // Version contains the information returned from the x-ms-version header response. - Version *string `xml:"Version"` -} - -// containerClientReleaseLeaseResponse contains the response from method containerClient.ReleaseLease. -type containerClientReleaseLeaseResponse struct { - containerClientReleaseLeaseResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// containerClientReleaseLeaseResult contains the result from method containerClient.ReleaseLease. -type containerClientReleaseLeaseResult struct { - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string - - // Date contains the information returned from the Date header response. - Date *time.Time - - // ETag contains the information returned from the ETag header response. - ETag *string - - // LastModified contains the information returned from the Last-Modified header response. - LastModified *time.Time - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string - - // Version contains the information returned from the x-ms-version header response. - Version *string -} - -// containerClientRenameResponse contains the response from method containerClient.Rename. -type containerClientRenameResponse struct { - containerClientRenameResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// containerClientRenameResult contains the result from method containerClient.Rename. -type containerClientRenameResult struct { - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string - - // Date contains the information returned from the Date header response. - Date *time.Time - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string - - // Version contains the information returned from the x-ms-version header response. - Version *string -} - -// containerClientRenewLeaseResponse contains the response from method containerClient.RenewLease. -type containerClientRenewLeaseResponse struct { - containerClientRenewLeaseResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// containerClientRenewLeaseResult contains the result from method containerClient.RenewLease. -type containerClientRenewLeaseResult struct { - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string - - // Date contains the information returned from the Date header response. - Date *time.Time - - // ETag contains the information returned from the ETag header response. - ETag *string - - // LastModified contains the information returned from the Last-Modified header response. - LastModified *time.Time - - // LeaseID contains the information returned from the x-ms-lease-id header response. - LeaseID *string - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string - - // Version contains the information returned from the x-ms-version header response. - Version *string -} - -// containerClientRestoreResponse contains the response from method containerClient.Restore. -type containerClientRestoreResponse struct { - containerClientRestoreResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// containerClientRestoreResult contains the result from method containerClient.Restore. -type containerClientRestoreResult struct { - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string - - // Date contains the information returned from the Date header response. - Date *time.Time - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string - - // Version contains the information returned from the x-ms-version header response. - Version *string -} - -// containerClientSetAccessPolicyResponse contains the response from method containerClient.SetAccessPolicy. -type containerClientSetAccessPolicyResponse struct { - containerClientSetAccessPolicyResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// containerClientSetAccessPolicyResult contains the result from method containerClient.SetAccessPolicy. -type containerClientSetAccessPolicyResult struct { - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string - - // Date contains the information returned from the Date header response. - Date *time.Time - - // ETag contains the information returned from the ETag header response. - ETag *string - - // LastModified contains the information returned from the Last-Modified header response. - LastModified *time.Time - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string - - // Version contains the information returned from the x-ms-version header response. - Version *string -} - -// containerClientSetMetadataResponse contains the response from method containerClient.SetMetadata. -type containerClientSetMetadataResponse struct { - containerClientSetMetadataResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// containerClientSetMetadataResult contains the result from method containerClient.SetMetadata. -type containerClientSetMetadataResult struct { - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string - - // Date contains the information returned from the Date header response. - Date *time.Time - - // ETag contains the information returned from the ETag header response. - ETag *string - - // LastModified contains the information returned from the Last-Modified header response. - LastModified *time.Time - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string - - // Version contains the information returned from the x-ms-version header response. - Version *string -} - -// containerClientSubmitBatchResponse contains the response from method containerClient.SubmitBatch. -type containerClientSubmitBatchResponse struct { - containerClientSubmitBatchResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// containerClientSubmitBatchResult contains the result from method containerClient.SubmitBatch. -type containerClientSubmitBatchResult struct { - // ContentType contains the information returned from the Content-Type header response. - ContentType *string - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string - - // Version contains the information returned from the x-ms-version header response. - Version *string -} - -// pageBlobClientClearPagesResponse contains the response from method pageBlobClient.ClearPages. -type pageBlobClientClearPagesResponse struct { - pageBlobClientClearPagesResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// pageBlobClientClearPagesResult contains the result from method pageBlobClient.ClearPages. -type pageBlobClientClearPagesResult struct { - // BlobSequenceNumber contains the information returned from the x-ms-blob-sequence-number header response. - BlobSequenceNumber *int64 - - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string - - // ContentMD5 contains the information returned from the Content-MD5 header response. - ContentMD5 []byte - - // Date contains the information returned from the Date header response. - Date *time.Time - - // ETag contains the information returned from the ETag header response. - ETag *string - - // LastModified contains the information returned from the Last-Modified header response. - LastModified *time.Time - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string - - // Version contains the information returned from the x-ms-version header response. - Version *string - - // XMSContentCRC64 contains the information returned from the x-ms-content-crc64 header response. - XMSContentCRC64 []byte -} - -// pageBlobClientCopyIncrementalResponse contains the response from method pageBlobClient.CopyIncremental. -type pageBlobClientCopyIncrementalResponse struct { - pageBlobClientCopyIncrementalResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// pageBlobClientCopyIncrementalResult contains the result from method pageBlobClient.CopyIncremental. -type pageBlobClientCopyIncrementalResult struct { - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string - - // CopyID contains the information returned from the x-ms-copy-id header response. - CopyID *string - - // CopyStatus contains the information returned from the x-ms-copy-status header response. - CopyStatus *CopyStatusType - - // Date contains the information returned from the Date header response. - Date *time.Time - - // ETag contains the information returned from the ETag header response. - ETag *string - - // LastModified contains the information returned from the Last-Modified header response. - LastModified *time.Time - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string - - // Version contains the information returned from the x-ms-version header response. - Version *string -} - -// pageBlobClientCreateResponse contains the response from method pageBlobClient.Create. -type pageBlobClientCreateResponse struct { - pageBlobClientCreateResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// pageBlobClientCreateResult contains the result from method pageBlobClient.Create. -type pageBlobClientCreateResult struct { - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string - - // ContentMD5 contains the information returned from the Content-MD5 header response. - ContentMD5 []byte - - // Date contains the information returned from the Date header response. - Date *time.Time - - // ETag contains the information returned from the ETag header response. - ETag *string - - // EncryptionKeySHA256 contains the information returned from the x-ms-encryption-key-sha256 header response. - EncryptionKeySHA256 *string - - // EncryptionScope contains the information returned from the x-ms-encryption-scope header response. - EncryptionScope *string - - // IsServerEncrypted contains the information returned from the x-ms-request-server-encrypted header response. - IsServerEncrypted *bool - - // LastModified contains the information returned from the Last-Modified header response. - LastModified *time.Time - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string - - // Version contains the information returned from the x-ms-version header response. - Version *string - - // VersionID contains the information returned from the x-ms-version-id header response. - VersionID *string -} - -// pageBlobClientGetPageRangesDiffResponse contains the response from method pageBlobClient.GetPageRangesDiff. -type pageBlobClientGetPageRangesDiffResponse struct { - pageBlobClientGetPageRangesDiffResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// pageBlobClientGetPageRangesDiffResult contains the result from method pageBlobClient.GetPageRangesDiff. -type pageBlobClientGetPageRangesDiffResult struct { - PageList - // BlobContentLength contains the information returned from the x-ms-blob-content-length header response. - BlobContentLength *int64 `xml:"BlobContentLength"` - - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string `xml:"ClientRequestID"` - - // Date contains the information returned from the Date header response. - Date *time.Time `xml:"Date"` - - // ETag contains the information returned from the ETag header response. - ETag *string `xml:"ETag"` - - // LastModified contains the information returned from the Last-Modified header response. - LastModified *time.Time `xml:"LastModified"` - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string `xml:"RequestID"` - - // Version contains the information returned from the x-ms-version header response. - Version *string `xml:"Version"` -} - -// pageBlobClientGetPageRangesResponse contains the response from method pageBlobClient.GetPageRanges. -type pageBlobClientGetPageRangesResponse struct { - pageBlobClientGetPageRangesResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// pageBlobClientGetPageRangesResult contains the result from method pageBlobClient.GetPageRanges. -type pageBlobClientGetPageRangesResult struct { - PageList - // BlobContentLength contains the information returned from the x-ms-blob-content-length header response. - BlobContentLength *int64 `xml:"BlobContentLength"` - - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string `xml:"ClientRequestID"` - - // Date contains the information returned from the Date header response. - Date *time.Time `xml:"Date"` - - // ETag contains the information returned from the ETag header response. - ETag *string `xml:"ETag"` - - // LastModified contains the information returned from the Last-Modified header response. - LastModified *time.Time `xml:"LastModified"` - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string `xml:"RequestID"` - - // Version contains the information returned from the x-ms-version header response. - Version *string `xml:"Version"` -} - -// pageBlobClientResizeResponse contains the response from method pageBlobClient.Resize. -type pageBlobClientResizeResponse struct { - pageBlobClientResizeResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// pageBlobClientResizeResult contains the result from method pageBlobClient.Resize. -type pageBlobClientResizeResult struct { - // BlobSequenceNumber contains the information returned from the x-ms-blob-sequence-number header response. - BlobSequenceNumber *int64 - - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string - - // Date contains the information returned from the Date header response. - Date *time.Time - - // ETag contains the information returned from the ETag header response. - ETag *string - - // LastModified contains the information returned from the Last-Modified header response. - LastModified *time.Time - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string - - // Version contains the information returned from the x-ms-version header response. - Version *string -} - -// pageBlobClientUpdateSequenceNumberResponse contains the response from method pageBlobClient.UpdateSequenceNumber. -type pageBlobClientUpdateSequenceNumberResponse struct { - pageBlobClientUpdateSequenceNumberResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// pageBlobClientUpdateSequenceNumberResult contains the result from method pageBlobClient.UpdateSequenceNumber. -type pageBlobClientUpdateSequenceNumberResult struct { - // BlobSequenceNumber contains the information returned from the x-ms-blob-sequence-number header response. - BlobSequenceNumber *int64 - - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string - - // Date contains the information returned from the Date header response. - Date *time.Time - - // ETag contains the information returned from the ETag header response. - ETag *string - - // LastModified contains the information returned from the Last-Modified header response. - LastModified *time.Time - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string - - // Version contains the information returned from the x-ms-version header response. - Version *string -} - -// pageBlobClientUploadPagesFromURLResponse contains the response from method pageBlobClient.UploadPagesFromURL. -type pageBlobClientUploadPagesFromURLResponse struct { - pageBlobClientUploadPagesFromURLResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// pageBlobClientUploadPagesFromURLResult contains the result from method pageBlobClient.UploadPagesFromURL. -type pageBlobClientUploadPagesFromURLResult struct { - // BlobSequenceNumber contains the information returned from the x-ms-blob-sequence-number header response. - BlobSequenceNumber *int64 - - // ContentMD5 contains the information returned from the Content-MD5 header response. - ContentMD5 []byte - - // Date contains the information returned from the Date header response. - Date *time.Time - - // ETag contains the information returned from the ETag header response. - ETag *string - - // EncryptionKeySHA256 contains the information returned from the x-ms-encryption-key-sha256 header response. - EncryptionKeySHA256 *string - - // EncryptionScope contains the information returned from the x-ms-encryption-scope header response. - EncryptionScope *string - - // IsServerEncrypted contains the information returned from the x-ms-request-server-encrypted header response. - IsServerEncrypted *bool - - // LastModified contains the information returned from the Last-Modified header response. - LastModified *time.Time - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string - - // Version contains the information returned from the x-ms-version header response. - Version *string - - // XMSContentCRC64 contains the information returned from the x-ms-content-crc64 header response. - XMSContentCRC64 []byte -} - -// pageBlobClientUploadPagesResponse contains the response from method pageBlobClient.UploadPages. -type pageBlobClientUploadPagesResponse struct { - pageBlobClientUploadPagesResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// pageBlobClientUploadPagesResult contains the result from method pageBlobClient.UploadPages. -type pageBlobClientUploadPagesResult struct { - // BlobSequenceNumber contains the information returned from the x-ms-blob-sequence-number header response. - BlobSequenceNumber *int64 - - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string - - // ContentMD5 contains the information returned from the Content-MD5 header response. - ContentMD5 []byte - - // Date contains the information returned from the Date header response. - Date *time.Time - - // ETag contains the information returned from the ETag header response. - ETag *string - - // EncryptionKeySHA256 contains the information returned from the x-ms-encryption-key-sha256 header response. - EncryptionKeySHA256 *string - - // EncryptionScope contains the information returned from the x-ms-encryption-scope header response. - EncryptionScope *string - - // IsServerEncrypted contains the information returned from the x-ms-request-server-encrypted header response. - IsServerEncrypted *bool - - // LastModified contains the information returned from the Last-Modified header response. - LastModified *time.Time - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string - - // Version contains the information returned from the x-ms-version header response. - Version *string - - // XMSContentCRC64 contains the information returned from the x-ms-content-crc64 header response. - XMSContentCRC64 []byte -} - -// serviceClientFilterBlobsResponse contains the response from method serviceClient.FilterBlobs. -type serviceClientFilterBlobsResponse struct { - serviceClientFilterBlobsResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// serviceClientFilterBlobsResult contains the result from method serviceClient.FilterBlobs. -type serviceClientFilterBlobsResult struct { - FilterBlobSegment - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string `xml:"ClientRequestID"` - - // Date contains the information returned from the Date header response. - Date *time.Time `xml:"Date"` - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string `xml:"RequestID"` - - // Version contains the information returned from the x-ms-version header response. - Version *string `xml:"Version"` -} - -// serviceClientGetAccountInfoResponse contains the response from method serviceClient.GetAccountInfo. -type serviceClientGetAccountInfoResponse struct { - serviceClientGetAccountInfoResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// serviceClientGetAccountInfoResult contains the result from method serviceClient.GetAccountInfo. -type serviceClientGetAccountInfoResult struct { - // AccountKind contains the information returned from the x-ms-account-kind header response. - AccountKind *AccountKind - - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string - - // Date contains the information returned from the Date header response. - Date *time.Time - - // IsHierarchicalNamespaceEnabled contains the information returned from the x-ms-is-hns-enabled header response. - IsHierarchicalNamespaceEnabled *bool - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string - - // SKUName contains the information returned from the x-ms-sku-name header response. - SKUName *SKUName - - // Version contains the information returned from the x-ms-version header response. - Version *string -} - -// serviceClientGetPropertiesResponse contains the response from method serviceClient.GetProperties. -type serviceClientGetPropertiesResponse struct { - serviceClientGetPropertiesResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// serviceClientGetPropertiesResult contains the result from method serviceClient.GetProperties. -type serviceClientGetPropertiesResult struct { - StorageServiceProperties - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string `xml:"ClientRequestID"` - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string `xml:"RequestID"` - - // Version contains the information returned from the x-ms-version header response. - Version *string `xml:"Version"` -} - -// serviceClientGetStatisticsResponse contains the response from method serviceClient.GetStatistics. -type serviceClientGetStatisticsResponse struct { - serviceClientGetStatisticsResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// serviceClientGetStatisticsResult contains the result from method serviceClient.GetStatistics. -type serviceClientGetStatisticsResult struct { - StorageServiceStats - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string `xml:"ClientRequestID"` - - // Date contains the information returned from the Date header response. - Date *time.Time `xml:"Date"` - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string `xml:"RequestID"` - - // Version contains the information returned from the x-ms-version header response. - Version *string `xml:"Version"` -} - -// serviceClientGetUserDelegationKeyResponse contains the response from method serviceClient.GetUserDelegationKey. -type serviceClientGetUserDelegationKeyResponse struct { - serviceClientGetUserDelegationKeyResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// serviceClientGetUserDelegationKeyResult contains the result from method serviceClient.GetUserDelegationKey. -type serviceClientGetUserDelegationKeyResult struct { - UserDelegationKey - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string `xml:"ClientRequestID"` - - // Date contains the information returned from the Date header response. - Date *time.Time `xml:"Date"` - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string `xml:"RequestID"` - - // Version contains the information returned from the x-ms-version header response. - Version *string `xml:"Version"` -} - -// serviceClientListContainersSegmentResponse contains the response from method serviceClient.ListContainersSegment. -type serviceClientListContainersSegmentResponse struct { - serviceClientListContainersSegmentResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// serviceClientListContainersSegmentResult contains the result from method serviceClient.ListContainersSegment. -type serviceClientListContainersSegmentResult struct { - ListContainersSegmentResponse - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string `xml:"ClientRequestID"` - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string `xml:"RequestID"` - - // Version contains the information returned from the x-ms-version header response. - Version *string `xml:"Version"` -} - -// serviceClientSetPropertiesResponse contains the response from method serviceClient.SetProperties. -type serviceClientSetPropertiesResponse struct { - serviceClientSetPropertiesResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// serviceClientSetPropertiesResult contains the result from method serviceClient.SetProperties. -type serviceClientSetPropertiesResult struct { - // ClientRequestID contains the information returned from the x-ms-client-request-id header response. - ClientRequestID *string - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string - - // Version contains the information returned from the x-ms-version header response. - Version *string -} - -// serviceClientSubmitBatchResponse contains the response from method serviceClient.SubmitBatch. -type serviceClientSubmitBatchResponse struct { - serviceClientSubmitBatchResult - // RawResponse contains the underlying HTTP response. - RawResponse *http.Response -} - -// serviceClientSubmitBatchResult contains the result from method serviceClient.SubmitBatch. -type serviceClientSubmitBatchResult struct { - // ContentType contains the information returned from the Content-Type header response. - ContentType *string - - // RequestID contains the information returned from the x-ms-request-id header response. - RequestID *string - - // Version contains the information returned from the x-ms-version header response. - Version *string -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zz_generated_service_client.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zz_generated_service_client.go deleted file mode 100644 index 7dcf6ef13e3c..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zz_generated_service_client.go +++ /dev/null @@ -1,551 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -package azblob - -import ( - "context" - "fmt" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime" - "io" - "net/http" - "strconv" - "strings" - "time" -) - -type serviceClient struct { - endpoint string - pl runtime.Pipeline -} - -// newServiceClient creates a new instance of serviceClient with the specified values. -// endpoint - The URL of the service account, container, or blob that is the target of the desired operation. -// pl - the pipeline used for sending requests and handling responses. -func newServiceClient(endpoint string, pl runtime.Pipeline) *serviceClient { - client := &serviceClient{ - endpoint: endpoint, - pl: pl, - } - return client -} - -// FilterBlobs - The Filter Blobs operation enables callers to list blobs across all containers whose tags match a given search -// expression. Filter blobs searches across all containers within a storage account but can -// be scoped within the expression to a single container. -// If the operation fails it returns an *azcore.ResponseError type. -// options - serviceClientFilterBlobsOptions contains the optional parameters for the serviceClient.FilterBlobs method. -func (client *serviceClient) FilterBlobs(ctx context.Context, options *serviceClientFilterBlobsOptions) (serviceClientFilterBlobsResponse, error) { - req, err := client.filterBlobsCreateRequest(ctx, options) - if err != nil { - return serviceClientFilterBlobsResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return serviceClientFilterBlobsResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusOK) { - return serviceClientFilterBlobsResponse{}, runtime.NewResponseError(resp) - } - return client.filterBlobsHandleResponse(resp) -} - -// filterBlobsCreateRequest creates the FilterBlobs request. -func (client *serviceClient) filterBlobsCreateRequest(ctx context.Context, options *serviceClientFilterBlobsOptions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodGet, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - reqQP.Set("comp", "blobs") - if options != nil && options.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*options.Timeout), 10)) - } - if options != nil && options.Where != nil { - reqQP.Set("where", *options.Where) - } - if options != nil && options.Marker != nil { - reqQP.Set("marker", *options.Marker) - } - if options != nil && options.Maxresults != nil { - reqQP.Set("maxresults", strconv.FormatInt(int64(*options.Maxresults), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if options != nil && options.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *options.RequestID) - } - req.Raw().Header.Set("Accept", "application/xml") - return req, nil -} - -// filterBlobsHandleResponse handles the FilterBlobs response. -func (client *serviceClient) filterBlobsHandleResponse(resp *http.Response) (serviceClientFilterBlobsResponse, error) { - result := serviceClientFilterBlobsResponse{RawResponse: resp} - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return serviceClientFilterBlobsResponse{}, err - } - result.Date = &date - } - if err := runtime.UnmarshalAsXML(resp, &result.FilterBlobSegment); err != nil { - return serviceClientFilterBlobsResponse{}, err - } - return result, nil -} - -// GetAccountInfo - Returns the sku name and account kind -// If the operation fails it returns an *azcore.ResponseError type. -// options - serviceClientGetAccountInfoOptions contains the optional parameters for the serviceClient.GetAccountInfo method. -func (client *serviceClient) GetAccountInfo(ctx context.Context, options *serviceClientGetAccountInfoOptions) (serviceClientGetAccountInfoResponse, error) { - req, err := client.getAccountInfoCreateRequest(ctx, options) - if err != nil { - return serviceClientGetAccountInfoResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return serviceClientGetAccountInfoResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusOK) { - return serviceClientGetAccountInfoResponse{}, runtime.NewResponseError(resp) - } - return client.getAccountInfoHandleResponse(resp) -} - -// getAccountInfoCreateRequest creates the GetAccountInfo request. -func (client *serviceClient) getAccountInfoCreateRequest(ctx context.Context, options *serviceClientGetAccountInfoOptions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodGet, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - reqQP.Set("restype", "account") - reqQP.Set("comp", "properties") - req.Raw().URL.RawQuery = reqQP.Encode() - req.Raw().Header.Set("x-ms-version", "2020-10-02") - req.Raw().Header.Set("Accept", "application/xml") - return req, nil -} - -// getAccountInfoHandleResponse handles the GetAccountInfo response. -func (client *serviceClient) getAccountInfoHandleResponse(resp *http.Response) (serviceClientGetAccountInfoResponse, error) { - result := serviceClientGetAccountInfoResponse{RawResponse: resp} - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return serviceClientGetAccountInfoResponse{}, err - } - result.Date = &date - } - if val := resp.Header.Get("x-ms-sku-name"); val != "" { - result.SKUName = (*SKUName)(&val) - } - if val := resp.Header.Get("x-ms-account-kind"); val != "" { - result.AccountKind = (*AccountKind)(&val) - } - if val := resp.Header.Get("x-ms-is-hns-enabled"); val != "" { - isHierarchicalNamespaceEnabled, err := strconv.ParseBool(val) - if err != nil { - return serviceClientGetAccountInfoResponse{}, err - } - result.IsHierarchicalNamespaceEnabled = &isHierarchicalNamespaceEnabled - } - return result, nil -} - -// GetProperties - gets the properties of a storage account's Blob service, including properties for Storage Analytics and -// CORS (Cross-Origin Resource Sharing) rules. -// If the operation fails it returns an *azcore.ResponseError type. -// options - serviceClientGetPropertiesOptions contains the optional parameters for the serviceClient.GetProperties method. -func (client *serviceClient) GetProperties(ctx context.Context, options *serviceClientGetPropertiesOptions) (serviceClientGetPropertiesResponse, error) { - req, err := client.getPropertiesCreateRequest(ctx, options) - if err != nil { - return serviceClientGetPropertiesResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return serviceClientGetPropertiesResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusOK) { - return serviceClientGetPropertiesResponse{}, runtime.NewResponseError(resp) - } - return client.getPropertiesHandleResponse(resp) -} - -// getPropertiesCreateRequest creates the GetProperties request. -func (client *serviceClient) getPropertiesCreateRequest(ctx context.Context, options *serviceClientGetPropertiesOptions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodGet, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - reqQP.Set("restype", "service") - reqQP.Set("comp", "properties") - if options != nil && options.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*options.Timeout), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if options != nil && options.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *options.RequestID) - } - req.Raw().Header.Set("Accept", "application/xml") - return req, nil -} - -// getPropertiesHandleResponse handles the GetProperties response. -func (client *serviceClient) getPropertiesHandleResponse(resp *http.Response) (serviceClientGetPropertiesResponse, error) { - result := serviceClientGetPropertiesResponse{RawResponse: resp} - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if err := runtime.UnmarshalAsXML(resp, &result.StorageServiceProperties); err != nil { - return serviceClientGetPropertiesResponse{}, err - } - return result, nil -} - -// GetStatistics - Retrieves statistics related to replication for the Blob service. It is only available on the secondary -// location endpoint when read-access geo-redundant replication is enabled for the storage account. -// If the operation fails it returns an *azcore.ResponseError type. -// options - serviceClientGetStatisticsOptions contains the optional parameters for the serviceClient.GetStatistics method. -func (client *serviceClient) GetStatistics(ctx context.Context, options *serviceClientGetStatisticsOptions) (serviceClientGetStatisticsResponse, error) { - req, err := client.getStatisticsCreateRequest(ctx, options) - if err != nil { - return serviceClientGetStatisticsResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return serviceClientGetStatisticsResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusOK) { - return serviceClientGetStatisticsResponse{}, runtime.NewResponseError(resp) - } - return client.getStatisticsHandleResponse(resp) -} - -// getStatisticsCreateRequest creates the GetStatistics request. -func (client *serviceClient) getStatisticsCreateRequest(ctx context.Context, options *serviceClientGetStatisticsOptions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodGet, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - reqQP.Set("restype", "service") - reqQP.Set("comp", "stats") - if options != nil && options.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*options.Timeout), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if options != nil && options.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *options.RequestID) - } - req.Raw().Header.Set("Accept", "application/xml") - return req, nil -} - -// getStatisticsHandleResponse handles the GetStatistics response. -func (client *serviceClient) getStatisticsHandleResponse(resp *http.Response) (serviceClientGetStatisticsResponse, error) { - result := serviceClientGetStatisticsResponse{RawResponse: resp} - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return serviceClientGetStatisticsResponse{}, err - } - result.Date = &date - } - if err := runtime.UnmarshalAsXML(resp, &result.StorageServiceStats); err != nil { - return serviceClientGetStatisticsResponse{}, err - } - return result, nil -} - -// GetUserDelegationKey - Retrieves a user delegation key for the Blob service. This is only a valid operation when using -// bearer token authentication. -// If the operation fails it returns an *azcore.ResponseError type. -// keyInfo - Key information -// options - serviceClientGetUserDelegationKeyOptions contains the optional parameters for the serviceClient.GetUserDelegationKey -// method. -func (client *serviceClient) GetUserDelegationKey(ctx context.Context, keyInfo KeyInfo, options *serviceClientGetUserDelegationKeyOptions) (serviceClientGetUserDelegationKeyResponse, error) { - req, err := client.getUserDelegationKeyCreateRequest(ctx, keyInfo, options) - if err != nil { - return serviceClientGetUserDelegationKeyResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return serviceClientGetUserDelegationKeyResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusOK) { - return serviceClientGetUserDelegationKeyResponse{}, runtime.NewResponseError(resp) - } - return client.getUserDelegationKeyHandleResponse(resp) -} - -// getUserDelegationKeyCreateRequest creates the GetUserDelegationKey request. -func (client *serviceClient) getUserDelegationKeyCreateRequest(ctx context.Context, keyInfo KeyInfo, options *serviceClientGetUserDelegationKeyOptions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodPost, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - reqQP.Set("restype", "service") - reqQP.Set("comp", "userdelegationkey") - if options != nil && options.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*options.Timeout), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if options != nil && options.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *options.RequestID) - } - req.Raw().Header.Set("Accept", "application/xml") - return req, runtime.MarshalAsXML(req, keyInfo) -} - -// getUserDelegationKeyHandleResponse handles the GetUserDelegationKey response. -func (client *serviceClient) getUserDelegationKeyHandleResponse(resp *http.Response) (serviceClientGetUserDelegationKeyResponse, error) { - result := serviceClientGetUserDelegationKeyResponse{RawResponse: resp} - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if val := resp.Header.Get("Date"); val != "" { - date, err := time.Parse(time.RFC1123, val) - if err != nil { - return serviceClientGetUserDelegationKeyResponse{}, err - } - result.Date = &date - } - if err := runtime.UnmarshalAsXML(resp, &result.UserDelegationKey); err != nil { - return serviceClientGetUserDelegationKeyResponse{}, err - } - return result, nil -} - -// ListContainersSegment - The List Containers Segment operation returns a list of the containers under the specified account -// If the operation fails it returns an *azcore.ResponseError type. -// options - serviceClientListContainersSegmentOptions contains the optional parameters for the serviceClient.ListContainersSegment -// method. -func (client *serviceClient) ListContainersSegment(options *serviceClientListContainersSegmentOptions) *serviceClientListContainersSegmentPager { - return &serviceClientListContainersSegmentPager{ - client: client, - requester: func(ctx context.Context) (*policy.Request, error) { - return client.listContainersSegmentCreateRequest(ctx, options) - }, - advancer: func(ctx context.Context, resp serviceClientListContainersSegmentResponse) (*policy.Request, error) { - return runtime.NewRequest(ctx, http.MethodGet, *resp.ListContainersSegmentResponse.NextMarker) - }, - } -} - -// listContainersSegmentCreateRequest creates the ListContainersSegment request. -func (client *serviceClient) listContainersSegmentCreateRequest(ctx context.Context, options *serviceClientListContainersSegmentOptions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodGet, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - reqQP.Set("comp", "list") - if options != nil && options.Prefix != nil { - reqQP.Set("prefix", *options.Prefix) - } - if options != nil && options.Marker != nil { - reqQP.Set("marker", *options.Marker) - } - if options != nil && options.Maxresults != nil { - reqQP.Set("maxresults", strconv.FormatInt(int64(*options.Maxresults), 10)) - } - if options != nil && options.Include != nil { - reqQP.Set("include", strings.Join(strings.Fields(strings.Trim(fmt.Sprint(options.Include), "[]")), ",")) - } - if options != nil && options.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*options.Timeout), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if options != nil && options.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *options.RequestID) - } - req.Raw().Header.Set("Accept", "application/xml") - return req, nil -} - -// listContainersSegmentHandleResponse handles the ListContainersSegment response. -func (client *serviceClient) listContainersSegmentHandleResponse(resp *http.Response) (serviceClientListContainersSegmentResponse, error) { - result := serviceClientListContainersSegmentResponse{RawResponse: resp} - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - if err := runtime.UnmarshalAsXML(resp, &result.ListContainersSegmentResponse); err != nil { - return serviceClientListContainersSegmentResponse{}, err - } - return result, nil -} - -// SetProperties - Sets properties for a storage account's Blob service endpoint, including properties for Storage Analytics -// and CORS (Cross-Origin Resource Sharing) rules -// If the operation fails it returns an *azcore.ResponseError type. -// storageServiceProperties - The StorageService properties. -// options - serviceClientSetPropertiesOptions contains the optional parameters for the serviceClient.SetProperties method. -func (client *serviceClient) SetProperties(ctx context.Context, storageServiceProperties StorageServiceProperties, options *serviceClientSetPropertiesOptions) (serviceClientSetPropertiesResponse, error) { - req, err := client.setPropertiesCreateRequest(ctx, storageServiceProperties, options) - if err != nil { - return serviceClientSetPropertiesResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return serviceClientSetPropertiesResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusAccepted) { - return serviceClientSetPropertiesResponse{}, runtime.NewResponseError(resp) - } - return client.setPropertiesHandleResponse(resp) -} - -// setPropertiesCreateRequest creates the SetProperties request. -func (client *serviceClient) setPropertiesCreateRequest(ctx context.Context, storageServiceProperties StorageServiceProperties, options *serviceClientSetPropertiesOptions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodPut, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - reqQP.Set("restype", "service") - reqQP.Set("comp", "properties") - if options != nil && options.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*options.Timeout), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if options != nil && options.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *options.RequestID) - } - req.Raw().Header.Set("Accept", "application/xml") - return req, runtime.MarshalAsXML(req, storageServiceProperties) -} - -// setPropertiesHandleResponse handles the SetProperties response. -func (client *serviceClient) setPropertiesHandleResponse(resp *http.Response) (serviceClientSetPropertiesResponse, error) { - result := serviceClientSetPropertiesResponse{RawResponse: resp} - if val := resp.Header.Get("x-ms-client-request-id"); val != "" { - result.ClientRequestID = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - return result, nil -} - -// SubmitBatch - The Batch operation allows multiple API calls to be embedded into a single HTTP request. -// If the operation fails it returns an *azcore.ResponseError type. -// contentLength - The length of the request. -// multipartContentType - Required. The value of this header must be multipart/mixed with a batch boundary. Example header -// value: multipart/mixed; boundary=batch_ -// body - Initial data -// options - serviceClientSubmitBatchOptions contains the optional parameters for the serviceClient.SubmitBatch method. -func (client *serviceClient) SubmitBatch(ctx context.Context, contentLength int64, multipartContentType string, body io.ReadSeekCloser, options *serviceClientSubmitBatchOptions) (serviceClientSubmitBatchResponse, error) { - req, err := client.submitBatchCreateRequest(ctx, contentLength, multipartContentType, body, options) - if err != nil { - return serviceClientSubmitBatchResponse{}, err - } - resp, err := client.pl.Do(req) - if err != nil { - return serviceClientSubmitBatchResponse{}, err - } - if !runtime.HasStatusCode(resp, http.StatusOK) { - return serviceClientSubmitBatchResponse{}, runtime.NewResponseError(resp) - } - return client.submitBatchHandleResponse(resp) -} - -// submitBatchCreateRequest creates the SubmitBatch request. -func (client *serviceClient) submitBatchCreateRequest(ctx context.Context, contentLength int64, multipartContentType string, body io.ReadSeekCloser, options *serviceClientSubmitBatchOptions) (*policy.Request, error) { - req, err := runtime.NewRequest(ctx, http.MethodPost, client.endpoint) - if err != nil { - return nil, err - } - reqQP := req.Raw().URL.Query() - reqQP.Set("comp", "batch") - if options != nil && options.Timeout != nil { - reqQP.Set("timeout", strconv.FormatInt(int64(*options.Timeout), 10)) - } - req.Raw().URL.RawQuery = reqQP.Encode() - runtime.SkipBodyDownload(req) - req.Raw().Header.Set("Content-Length", strconv.FormatInt(contentLength, 10)) - req.Raw().Header.Set("Content-Type", multipartContentType) - req.Raw().Header.Set("x-ms-version", "2020-10-02") - if options != nil && options.RequestID != nil { - req.Raw().Header.Set("x-ms-client-request-id", *options.RequestID) - } - req.Raw().Header.Set("Accept", "application/xml") - return req, runtime.MarshalAsXML(req, body) -} - -// submitBatchHandleResponse handles the SubmitBatch response. -func (client *serviceClient) submitBatchHandleResponse(resp *http.Response) (serviceClientSubmitBatchResponse, error) { - result := serviceClientSubmitBatchResponse{RawResponse: resp} - if val := resp.Header.Get("Content-Type"); val != "" { - result.ContentType = &val - } - if val := resp.Header.Get("x-ms-request-id"); val != "" { - result.RequestID = &val - } - if val := resp.Header.Get("x-ms-version"); val != "" { - result.Version = &val - } - return result, nil -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zz_generated_time_rfc1123.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zz_generated_time_rfc1123.go deleted file mode 100644 index 42726159b6f9..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zz_generated_time_rfc1123.go +++ /dev/null @@ -1,42 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -package azblob - -import ( - "strings" - "time" -) - -const ( - rfc1123JSON = `"` + time.RFC1123 + `"` -) - -type timeRFC1123 time.Time - -func (t timeRFC1123) MarshalJSON() ([]byte, error) { - b := []byte(time.Time(t).Format(rfc1123JSON)) - return b, nil -} - -func (t timeRFC1123) MarshalText() ([]byte, error) { - b := []byte(time.Time(t).Format(time.RFC1123)) - return b, nil -} - -func (t *timeRFC1123) UnmarshalJSON(data []byte) error { - p, err := time.Parse(rfc1123JSON, strings.ToUpper(string(data))) - *t = timeRFC1123(p) - return err -} - -func (t *timeRFC1123) UnmarshalText(data []byte) error { - p, err := time.Parse(time.RFC1123, string(data)) - *t = timeRFC1123(p) - return err -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zz_generated_time_rfc3339.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zz_generated_time_rfc3339.go deleted file mode 100644 index c51d8d78c128..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zz_generated_time_rfc3339.go +++ /dev/null @@ -1,58 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -package azblob - -import ( - "regexp" - "strings" - "time" -) - -const ( - utcLayoutJSON = `"2006-01-02T15:04:05.999999999"` - utcLayout = "2006-01-02T15:04:05.999999999" - rfc3339JSON = `"` + time.RFC3339Nano + `"` -) - -// Azure reports time in UTC but it doesn't include the 'Z' time zone suffix in some cases. -var tzOffsetRegex = regexp.MustCompile(`(Z|z|\+|-)(\d+:\d+)*"*$`) - -type timeRFC3339 time.Time - -func (t timeRFC3339) MarshalJSON() (json []byte, err error) { - tt := time.Time(t) - return tt.MarshalJSON() -} - -func (t timeRFC3339) MarshalText() (text []byte, err error) { - tt := time.Time(t) - return tt.MarshalText() -} - -func (t *timeRFC3339) UnmarshalJSON(data []byte) error { - layout := utcLayoutJSON - if tzOffsetRegex.Match(data) { - layout = rfc3339JSON - } - return t.Parse(layout, string(data)) -} - -func (t *timeRFC3339) UnmarshalText(data []byte) (err error) { - layout := utcLayout - if tzOffsetRegex.Match(data) { - layout = time.RFC3339Nano - } - return t.Parse(layout, string(data)) -} - -func (t *timeRFC3339) Parse(layout, value string) error { - p, err := time.Parse(layout, strings.ToUpper(value)) - *t = timeRFC3339(p) - return err -} diff --git a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zz_generated_xml_helper.go b/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zz_generated_xml_helper.go deleted file mode 100644 index 1cf97387de22..000000000000 --- a/vendor/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/zz_generated_xml_helper.go +++ /dev/null @@ -1,40 +0,0 @@ -//go:build go1.18 -// +build go1.18 - -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -package azblob - -import ( - "encoding/xml" - "strings" -) - -type additionalProperties map[string]*string - -// UnmarshalXML implements the xml.Unmarshaler interface for additionalProperties. -func (ap *additionalProperties) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { - tokName := "" - for t, err := d.Token(); err == nil; t, err = d.Token() { - switch tt := t.(type) { - case xml.StartElement: - tokName = strings.ToLower(tt.Name.Local) - break - case xml.CharData: - if tokName == "" { - continue - } - if *ap == nil { - *ap = additionalProperties{} - } - s := string(tt) - (*ap)[tokName] = &s - tokName = "" - break - } - } - return nil -} diff --git a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/LICENSE b/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/LICENSE deleted file mode 100644 index 3d8b93bc7987..000000000000 --- a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ - MIT License - - Copyright (c) Microsoft Corporation. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE diff --git a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/cache/cache.go b/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/cache/cache.go deleted file mode 100644 index 19210883bac2..000000000000 --- a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/cache/cache.go +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. - -/* -Package cache allows third parties to implement external storage for caching token data -for distributed systems or multiple local applications access. - -The data stored and extracted will represent the entire cache. Therefore it is recommended -one msal instance per user. This data is considered opaque and there are no guarantees to -implementers on the format being passed. -*/ -package cache - -import "context" - -// Marshaler marshals data from an internal cache to bytes that can be stored. -type Marshaler interface { - Marshal() ([]byte, error) -} - -// Unmarshaler unmarshals data from a storage medium into the internal cache, overwriting it. -type Unmarshaler interface { - Unmarshal([]byte) error -} - -// Serializer can serialize the cache to binary or from binary into the cache. -type Serializer interface { - Marshaler - Unmarshaler -} - -// ExportHints are suggestions for storing data. -type ExportHints struct { - // PartitionKey is a suggested key for partitioning the cache - PartitionKey string -} - -// ReplaceHints are suggestions for loading data. -type ReplaceHints struct { - // PartitionKey is a suggested key for partitioning the cache - PartitionKey string -} - -// ExportReplace exports and replaces in-memory cache data. It doesn't support nil Context or -// define the outcome of passing one. A Context without a timeout must receive a default timeout -// specified by the implementor. Retries must be implemented inside the implementation. -type ExportReplace interface { - // Replace replaces the cache with what is in external storage. Implementors should honor - // Context cancellations and return context.Canceled or context.DeadlineExceeded in those cases. - Replace(ctx context.Context, cache Unmarshaler, hints ReplaceHints) error - // Export writes the binary representation of the cache (cache.Marshal()) to external storage. - // This is considered opaque. Context cancellations should be honored as in Replace. - Export(ctx context.Context, cache Marshaler, hints ExportHints) error -} diff --git a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/confidential/confidential.go b/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/confidential/confidential.go deleted file mode 100644 index f86286051def..000000000000 --- a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/confidential/confidential.go +++ /dev/null @@ -1,719 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. - -/* -Package confidential provides a client for authentication of "confidential" applications. -A "confidential" application is defined as an app that run on servers. They are considered -difficult to access and for that reason capable of keeping an application secret. -Confidential clients can hold configuration-time secrets. -*/ -package confidential - -import ( - "context" - "crypto" - "crypto/rsa" - "crypto/x509" - "encoding/base64" - "encoding/pem" - "errors" - "fmt" - - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/cache" - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/base" - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/exported" - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth" - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops" - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/accesstokens" - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/authority" - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/options" - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/shared" -) - -/* -Design note: - -confidential.Client uses base.Client as an embedded type. base.Client statically assigns its attributes -during creation. As it doesn't have any pointers in it, anything borrowed from it, such as -Base.AuthParams is a copy that is free to be manipulated here. - -Duplicate Calls shared between public.Client and this package: -There is some duplicate call options provided here that are the same as in public.Client . This -is a design choices. Go proverb(https://www.youtube.com/watch?v=PAAkCSZUG1c&t=9m28s): -"a little copying is better than a little dependency". Yes, we could have another package with -shared options (fail). That divides like 2 options from all others which makes the user look -through more docs. We can have all clients in one package, but I think separate packages -here makes for better naming (public.Client vs client.PublicClient). So I chose a little -duplication. - -.Net People, Take note on X509: -This uses x509.Certificates and private keys. x509 does not store private keys. .Net -has a x509.Certificate2 abstraction that has private keys, but that just a strange invention. -As such I've put a PEM decoder into here. -*/ - -// TODO(msal): This should have example code for each method on client using Go's example doc framework. -// base usage details should be include in the package documentation. - -// AuthResult contains the results of one token acquisition operation. -// For details see https://aka.ms/msal-net-authenticationresult -type AuthResult = base.AuthResult - -type AuthenticationScheme = authority.AuthenticationScheme - -type Account = shared.Account - -// CertFromPEM converts a PEM file (.pem or .key) for use with [NewCredFromCert]. The file -// must contain the public certificate and the private key. If a PEM block is encrypted and -// password is not an empty string, it attempts to decrypt the PEM blocks using the password. -// Multiple certs are due to certificate chaining for use cases like TLS that sign from root to leaf. -func CertFromPEM(pemData []byte, password string) ([]*x509.Certificate, crypto.PrivateKey, error) { - var certs []*x509.Certificate - var priv crypto.PrivateKey - for { - block, rest := pem.Decode(pemData) - if block == nil { - break - } - - //nolint:staticcheck // x509.IsEncryptedPEMBlock and x509.DecryptPEMBlock are deprecated. They are used here only to support a usecase. - if x509.IsEncryptedPEMBlock(block) { - b, err := x509.DecryptPEMBlock(block, []byte(password)) - if err != nil { - return nil, nil, fmt.Errorf("could not decrypt encrypted PEM block: %v", err) - } - block, _ = pem.Decode(b) - if block == nil { - return nil, nil, fmt.Errorf("encounter encrypted PEM block that did not decode") - } - } - - switch block.Type { - case "CERTIFICATE": - cert, err := x509.ParseCertificate(block.Bytes) - if err != nil { - return nil, nil, fmt.Errorf("block labelled 'CERTIFICATE' could not be parsed by x509: %v", err) - } - certs = append(certs, cert) - case "PRIVATE KEY": - if priv != nil { - return nil, nil, errors.New("found multiple private key blocks") - } - - var err error - priv, err = x509.ParsePKCS8PrivateKey(block.Bytes) - if err != nil { - return nil, nil, fmt.Errorf("could not decode private key: %v", err) - } - case "RSA PRIVATE KEY": - if priv != nil { - return nil, nil, errors.New("found multiple private key blocks") - } - var err error - priv, err = x509.ParsePKCS1PrivateKey(block.Bytes) - if err != nil { - return nil, nil, fmt.Errorf("could not decode private key: %v", err) - } - } - pemData = rest - } - - if len(certs) == 0 { - return nil, nil, fmt.Errorf("no certificates found") - } - - if priv == nil { - return nil, nil, fmt.Errorf("no private key found") - } - - return certs, priv, nil -} - -// AssertionRequestOptions has required information for client assertion claims -type AssertionRequestOptions = exported.AssertionRequestOptions - -// Credential represents the credential used in confidential client flows. -type Credential struct { - secret string - - cert *x509.Certificate - key crypto.PrivateKey - x5c []string - - assertionCallback func(context.Context, AssertionRequestOptions) (string, error) - - tokenProvider func(context.Context, TokenProviderParameters) (TokenProviderResult, error) -} - -// toInternal returns the accesstokens.Credential that is used internally. The current structure of the -// code requires that client.go, requests.go and confidential.go share a credential type without -// having import recursion. That requires the type used between is in a shared package. Therefore -// we have this. -func (c Credential) toInternal() (*accesstokens.Credential, error) { - if c.secret != "" { - return &accesstokens.Credential{Secret: c.secret}, nil - } - if c.cert != nil { - if c.key == nil { - return nil, errors.New("missing private key for certificate") - } - return &accesstokens.Credential{Cert: c.cert, Key: c.key, X5c: c.x5c}, nil - } - if c.key != nil { - return nil, errors.New("missing certificate for private key") - } - if c.assertionCallback != nil { - return &accesstokens.Credential{AssertionCallback: c.assertionCallback}, nil - } - if c.tokenProvider != nil { - return &accesstokens.Credential{TokenProvider: c.tokenProvider}, nil - } - return nil, errors.New("invalid credential") -} - -// NewCredFromSecret creates a Credential from a secret. -func NewCredFromSecret(secret string) (Credential, error) { - if secret == "" { - return Credential{}, errors.New("secret can't be empty string") - } - return Credential{secret: secret}, nil -} - -// NewCredFromAssertionCallback creates a Credential that invokes a callback to get assertions -// authenticating the application. The callback must be thread safe. -func NewCredFromAssertionCallback(callback func(context.Context, AssertionRequestOptions) (string, error)) Credential { - return Credential{assertionCallback: callback} -} - -// NewCredFromCert creates a Credential from a certificate or chain of certificates and an RSA private key -// as returned by [CertFromPEM]. -func NewCredFromCert(certs []*x509.Certificate, key crypto.PrivateKey) (Credential, error) { - cred := Credential{key: key} - k, ok := key.(*rsa.PrivateKey) - if !ok { - return cred, errors.New("key must be an RSA key") - } - for _, cert := range certs { - if cert == nil { - // not returning an error here because certs may still contain a sufficient cert/key pair - continue - } - certKey, ok := cert.PublicKey.(*rsa.PublicKey) - if ok && k.E == certKey.E && k.N.Cmp(certKey.N) == 0 { - // We know this is the signing cert because its public key matches the given private key. - // This cert must be first in x5c. - cred.cert = cert - cred.x5c = append([]string{base64.StdEncoding.EncodeToString(cert.Raw)}, cred.x5c...) - } else { - cred.x5c = append(cred.x5c, base64.StdEncoding.EncodeToString(cert.Raw)) - } - } - if cred.cert == nil { - return cred, errors.New("key doesn't match any certificate") - } - return cred, nil -} - -// TokenProviderParameters is the authentication parameters passed to token providers -type TokenProviderParameters = exported.TokenProviderParameters - -// TokenProviderResult is the authentication result returned by custom token providers -type TokenProviderResult = exported.TokenProviderResult - -// NewCredFromTokenProvider creates a Credential from a function that provides access tokens. The function -// must be concurrency safe. This is intended only to allow the Azure SDK to cache MSI tokens. It isn't -// useful to applications in general because the token provider must implement all authentication logic. -func NewCredFromTokenProvider(provider func(context.Context, TokenProviderParameters) (TokenProviderResult, error)) Credential { - return Credential{tokenProvider: provider} -} - -// AutoDetectRegion instructs MSAL Go to auto detect region for Azure regional token service. -func AutoDetectRegion() string { - return "TryAutoDetect" -} - -// Client is a representation of authentication client for confidential applications as defined in the -// package doc. A new Client should be created PER SERVICE USER. -// For more information, visit https://docs.microsoft.com/azure/active-directory/develop/msal-client-applications -type Client struct { - base base.Client - cred *accesstokens.Credential -} - -// clientOptions are optional settings for New(). These options are set using various functions -// returning Option calls. -type clientOptions struct { - accessor cache.ExportReplace - authority, azureRegion string - capabilities []string - disableInstanceDiscovery, sendX5C bool - httpClient ops.HTTPClient -} - -// Option is an optional argument to New(). -type Option func(o *clientOptions) - -// WithCache provides an accessor that will read and write authentication data to an externally managed cache. -func WithCache(accessor cache.ExportReplace) Option { - return func(o *clientOptions) { - o.accessor = accessor - } -} - -// WithClientCapabilities allows configuring one or more client capabilities such as "CP1" -func WithClientCapabilities(capabilities []string) Option { - return func(o *clientOptions) { - // there's no danger of sharing the slice's underlying memory with the application because - // this slice is simply passed to base.WithClientCapabilities, which copies its data - o.capabilities = capabilities - } -} - -// WithHTTPClient allows for a custom HTTP client to be set. -func WithHTTPClient(httpClient ops.HTTPClient) Option { - return func(o *clientOptions) { - o.httpClient = httpClient - } -} - -// WithX5C specifies if x5c claim(public key of the certificate) should be sent to STS to enable Subject Name Issuer Authentication. -func WithX5C() Option { - return func(o *clientOptions) { - o.sendX5C = true - } -} - -// WithInstanceDiscovery set to false to disable authority validation (to support private cloud scenarios) -func WithInstanceDiscovery(enabled bool) Option { - return func(o *clientOptions) { - o.disableInstanceDiscovery = !enabled - } -} - -// WithAzureRegion sets the region(preferred) or Confidential.AutoDetectRegion() for auto detecting region. -// Region names as per https://azure.microsoft.com/en-ca/global-infrastructure/geographies/. -// See https://aka.ms/region-map for more details on region names. -// The region value should be short region name for the region where the service is deployed. -// For example "centralus" is short name for region Central US. -// Not all auth flows can use the regional token service. -// Service To Service (client credential flow) tokens can be obtained from the regional service. -// Requires configuration at the tenant level. -// Auto-detection works on a limited number of Azure artifacts (VMs, Azure functions). -// If auto-detection fails, the non-regional endpoint will be used. -// If an invalid region name is provided, the non-regional endpoint MIGHT be used or the token request MIGHT fail. -func WithAzureRegion(val string) Option { - return func(o *clientOptions) { - o.azureRegion = val - } -} - -// New is the constructor for Client. authority is the URL of a token authority such as "https://login.microsoftonline.com/". -// If the Client will connect directly to AD FS, use "adfs" for the tenant. clientID is the application's client ID (also called its -// "application ID"). -func New(authority, clientID string, cred Credential, options ...Option) (Client, error) { - internalCred, err := cred.toInternal() - if err != nil { - return Client{}, err - } - - opts := clientOptions{ - authority: authority, - // if the caller specified a token provider, it will handle all details of authentication, using Client only as a token cache - disableInstanceDiscovery: cred.tokenProvider != nil, - httpClient: shared.DefaultClient, - } - for _, o := range options { - o(&opts) - } - baseOpts := []base.Option{ - base.WithCacheAccessor(opts.accessor), - base.WithClientCapabilities(opts.capabilities), - base.WithInstanceDiscovery(!opts.disableInstanceDiscovery), - base.WithRegionDetection(opts.azureRegion), - base.WithX5C(opts.sendX5C), - } - base, err := base.New(clientID, opts.authority, oauth.New(opts.httpClient), baseOpts...) - if err != nil { - return Client{}, err - } - base.AuthParams.IsConfidentialClient = true - - return Client{base: base, cred: internalCred}, nil -} - -// authCodeURLOptions contains options for AuthCodeURL -type authCodeURLOptions struct { - claims, loginHint, tenantID, domainHint string -} - -// AuthCodeURLOption is implemented by options for AuthCodeURL -type AuthCodeURLOption interface { - authCodeURLOption() -} - -// AuthCodeURL creates a URL used to acquire an authorization code. Users need to call CreateAuthorizationCodeURLParameters and pass it in. -// -// Options: [WithClaims], [WithDomainHint], [WithLoginHint], [WithTenantID] -func (cca Client) AuthCodeURL(ctx context.Context, clientID, redirectURI string, scopes []string, opts ...AuthCodeURLOption) (string, error) { - o := authCodeURLOptions{} - if err := options.ApplyOptions(&o, opts); err != nil { - return "", err - } - ap, err := cca.base.AuthParams.WithTenant(o.tenantID) - if err != nil { - return "", err - } - ap.Claims = o.claims - ap.LoginHint = o.loginHint - ap.DomainHint = o.domainHint - return cca.base.AuthCodeURL(ctx, clientID, redirectURI, scopes, ap) -} - -// WithLoginHint pre-populates the login prompt with a username. -func WithLoginHint(username string) interface { - AuthCodeURLOption - options.CallOption -} { - return struct { - AuthCodeURLOption - options.CallOption - }{ - CallOption: options.NewCallOption( - func(a any) error { - switch t := a.(type) { - case *authCodeURLOptions: - t.loginHint = username - default: - return fmt.Errorf("unexpected options type %T", a) - } - return nil - }, - ), - } -} - -// WithDomainHint adds the IdP domain as domain_hint query parameter in the auth url. -func WithDomainHint(domain string) interface { - AuthCodeURLOption - options.CallOption -} { - return struct { - AuthCodeURLOption - options.CallOption - }{ - CallOption: options.NewCallOption( - func(a any) error { - switch t := a.(type) { - case *authCodeURLOptions: - t.domainHint = domain - default: - return fmt.Errorf("unexpected options type %T", a) - } - return nil - }, - ), - } -} - -// WithClaims sets additional claims to request for the token, such as those required by conditional access policies. -// Use this option when Azure AD returned a claims challenge for a prior request. The argument must be decoded. -// This option is valid for any token acquisition method. -func WithClaims(claims string) interface { - AcquireByAuthCodeOption - AcquireByCredentialOption - AcquireOnBehalfOfOption - AcquireSilentOption - AuthCodeURLOption - options.CallOption -} { - return struct { - AcquireByAuthCodeOption - AcquireByCredentialOption - AcquireOnBehalfOfOption - AcquireSilentOption - AuthCodeURLOption - options.CallOption - }{ - CallOption: options.NewCallOption( - func(a any) error { - switch t := a.(type) { - case *acquireTokenByAuthCodeOptions: - t.claims = claims - case *acquireTokenByCredentialOptions: - t.claims = claims - case *acquireTokenOnBehalfOfOptions: - t.claims = claims - case *acquireTokenSilentOptions: - t.claims = claims - case *authCodeURLOptions: - t.claims = claims - default: - return fmt.Errorf("unexpected options type %T", a) - } - return nil - }, - ), - } -} - -// WithAuthenticationScheme is an extensibility mechanism designed to be used only by Azure Arc for proof of possession access tokens. -func WithAuthenticationScheme(authnScheme AuthenticationScheme) interface { - AcquireSilentOption - AcquireByCredentialOption - options.CallOption -} { - return struct { - AcquireSilentOption - AcquireByCredentialOption - options.CallOption - }{ - CallOption: options.NewCallOption( - func(a any) error { - switch t := a.(type) { - case *acquireTokenSilentOptions: - t.authnScheme = authnScheme - case *acquireTokenByCredentialOptions: - t.authnScheme = authnScheme - default: - return fmt.Errorf("unexpected options type %T", a) - } - return nil - }, - ), - } -} - -// WithTenantID specifies a tenant for a single authentication. It may be different than the tenant set in [New]. -// This option is valid for any token acquisition method. -func WithTenantID(tenantID string) interface { - AcquireByAuthCodeOption - AcquireByCredentialOption - AcquireOnBehalfOfOption - AcquireSilentOption - AuthCodeURLOption - options.CallOption -} { - return struct { - AcquireByAuthCodeOption - AcquireByCredentialOption - AcquireOnBehalfOfOption - AcquireSilentOption - AuthCodeURLOption - options.CallOption - }{ - CallOption: options.NewCallOption( - func(a any) error { - switch t := a.(type) { - case *acquireTokenByAuthCodeOptions: - t.tenantID = tenantID - case *acquireTokenByCredentialOptions: - t.tenantID = tenantID - case *acquireTokenOnBehalfOfOptions: - t.tenantID = tenantID - case *acquireTokenSilentOptions: - t.tenantID = tenantID - case *authCodeURLOptions: - t.tenantID = tenantID - default: - return fmt.Errorf("unexpected options type %T", a) - } - return nil - }, - ), - } -} - -// acquireTokenSilentOptions are all the optional settings to an AcquireTokenSilent() call. -// These are set by using various AcquireTokenSilentOption functions. -type acquireTokenSilentOptions struct { - account Account - claims, tenantID string - authnScheme AuthenticationScheme -} - -// AcquireSilentOption is implemented by options for AcquireTokenSilent -type AcquireSilentOption interface { - acquireSilentOption() -} - -// WithSilentAccount uses the passed account during an AcquireTokenSilent() call. -func WithSilentAccount(account Account) interface { - AcquireSilentOption - options.CallOption -} { - return struct { - AcquireSilentOption - options.CallOption - }{ - CallOption: options.NewCallOption( - func(a any) error { - switch t := a.(type) { - case *acquireTokenSilentOptions: - t.account = account - default: - return fmt.Errorf("unexpected options type %T", a) - } - return nil - }, - ), - } -} - -// AcquireTokenSilent acquires a token from either the cache or using a refresh token. -// -// Options: [WithClaims], [WithSilentAccount], [WithTenantID] -func (cca Client) AcquireTokenSilent(ctx context.Context, scopes []string, opts ...AcquireSilentOption) (AuthResult, error) { - o := acquireTokenSilentOptions{} - if err := options.ApplyOptions(&o, opts); err != nil { - return AuthResult{}, err - } - - if o.claims != "" { - return AuthResult{}, errors.New("call another AcquireToken method to request a new token having these claims") - } - - silentParameters := base.AcquireTokenSilentParameters{ - Scopes: scopes, - Account: o.account, - RequestType: accesstokens.ATConfidential, - Credential: cca.cred, - IsAppCache: o.account.IsZero(), - TenantID: o.tenantID, - AuthnScheme: o.authnScheme, - } - - return cca.base.AcquireTokenSilent(ctx, silentParameters) -} - -// acquireTokenByAuthCodeOptions contains the optional parameters used to acquire an access token using the authorization code flow. -type acquireTokenByAuthCodeOptions struct { - challenge, claims, tenantID string -} - -// AcquireByAuthCodeOption is implemented by options for AcquireTokenByAuthCode -type AcquireByAuthCodeOption interface { - acquireByAuthCodeOption() -} - -// WithChallenge allows you to provide a challenge for the .AcquireTokenByAuthCode() call. -func WithChallenge(challenge string) interface { - AcquireByAuthCodeOption - options.CallOption -} { - return struct { - AcquireByAuthCodeOption - options.CallOption - }{ - CallOption: options.NewCallOption( - func(a any) error { - switch t := a.(type) { - case *acquireTokenByAuthCodeOptions: - t.challenge = challenge - default: - return fmt.Errorf("unexpected options type %T", a) - } - return nil - }, - ), - } -} - -// AcquireTokenByAuthCode is a request to acquire a security token from the authority, using an authorization code. -// The specified redirect URI must be the same URI that was used when the authorization code was requested. -// -// Options: [WithChallenge], [WithClaims], [WithTenantID] -func (cca Client) AcquireTokenByAuthCode(ctx context.Context, code string, redirectURI string, scopes []string, opts ...AcquireByAuthCodeOption) (AuthResult, error) { - o := acquireTokenByAuthCodeOptions{} - if err := options.ApplyOptions(&o, opts); err != nil { - return AuthResult{}, err - } - - params := base.AcquireTokenAuthCodeParameters{ - Scopes: scopes, - Code: code, - Challenge: o.challenge, - Claims: o.claims, - AppType: accesstokens.ATConfidential, - Credential: cca.cred, // This setting differs from public.Client.AcquireTokenByAuthCode - RedirectURI: redirectURI, - TenantID: o.tenantID, - } - - return cca.base.AcquireTokenByAuthCode(ctx, params) -} - -// acquireTokenByCredentialOptions contains optional configuration for AcquireTokenByCredential -type acquireTokenByCredentialOptions struct { - claims, tenantID string - authnScheme AuthenticationScheme -} - -// AcquireByCredentialOption is implemented by options for AcquireTokenByCredential -type AcquireByCredentialOption interface { - acquireByCredOption() -} - -// AcquireTokenByCredential acquires a security token from the authority, using the client credentials grant. -// -// Options: [WithClaims], [WithTenantID] -func (cca Client) AcquireTokenByCredential(ctx context.Context, scopes []string, opts ...AcquireByCredentialOption) (AuthResult, error) { - o := acquireTokenByCredentialOptions{} - err := options.ApplyOptions(&o, opts) - if err != nil { - return AuthResult{}, err - } - authParams, err := cca.base.AuthParams.WithTenant(o.tenantID) - if err != nil { - return AuthResult{}, err - } - authParams.Scopes = scopes - authParams.AuthorizationType = authority.ATClientCredentials - authParams.Claims = o.claims - if o.authnScheme != nil { - authParams.AuthnScheme = o.authnScheme - } - token, err := cca.base.Token.Credential(ctx, authParams, cca.cred) - if err != nil { - return AuthResult{}, err - } - return cca.base.AuthResultFromToken(ctx, authParams, token, true) -} - -// acquireTokenOnBehalfOfOptions contains optional configuration for AcquireTokenOnBehalfOf -type acquireTokenOnBehalfOfOptions struct { - claims, tenantID string -} - -// AcquireOnBehalfOfOption is implemented by options for AcquireTokenOnBehalfOf -type AcquireOnBehalfOfOption interface { - acquireOBOOption() -} - -// AcquireTokenOnBehalfOf acquires a security token for an app using middle tier apps access token. -// Refer https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-on-behalf-of-flow. -// -// Options: [WithClaims], [WithTenantID] -func (cca Client) AcquireTokenOnBehalfOf(ctx context.Context, userAssertion string, scopes []string, opts ...AcquireOnBehalfOfOption) (AuthResult, error) { - o := acquireTokenOnBehalfOfOptions{} - if err := options.ApplyOptions(&o, opts); err != nil { - return AuthResult{}, err - } - params := base.AcquireTokenOnBehalfOfParameters{ - Scopes: scopes, - UserAssertion: userAssertion, - Claims: o.claims, - Credential: cca.cred, - TenantID: o.tenantID, - } - return cca.base.AcquireTokenOnBehalfOf(ctx, params) -} - -// Account gets the account in the token cache with the specified homeAccountID. -func (cca Client) Account(ctx context.Context, accountID string) (Account, error) { - return cca.base.Account(ctx, accountID) -} - -// RemoveAccount signs the account out and forgets account from token cache. -func (cca Client) RemoveAccount(ctx context.Context, account Account) error { - return cca.base.RemoveAccount(ctx, account) -} diff --git a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/errors/error_design.md b/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/errors/error_design.md deleted file mode 100644 index 7ef7862fe53c..000000000000 --- a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/errors/error_design.md +++ /dev/null @@ -1,111 +0,0 @@ -# MSAL Error Design - -Author: Abhidnya Patil(abhidnya.patil@microsoft.com) - -Contributors: - -- John Doak(jdoak@microsoft.com) -- Keegan Caruso(Keegan.Caruso@microsoft.com) -- Joel Hendrix(jhendrix@microsoft.com) - -## Background - -Errors in MSAL are intended for app developers to troubleshoot and not for displaying to end-users. - -### Go error handling vs other MSAL languages - -Most modern languages use exception based errors. Simply put, you "throw" an exception and it must be caught at some routine in the upper stack or it will eventually crash the program. - -Go doesn't use exceptions, instead it relies on multiple return values, one of which can be the builtin error interface type. It is up to the user to decide what to do. - -### Go custom error types - -Errors can be created in Go by simply using errors.New() or fmt.Errorf() to create an "error". - -Custom errors can be created in multiple ways. One of the more robust ways is simply to satisfy the error interface: - -```go -type MyCustomErr struct { - Msg string -} -func (m MyCustomErr) Error() string { // This implements "error" - return m.Msg -} -``` - -### MSAL Error Goals - -- Provide diagnostics to the user and for tickets that can be used to track down bugs or client misconfigurations -- Detect errors that are transitory and can be retried -- Allow the user to identify certain errors that the program can respond to, such a informing the user for the need to do an enrollment - -## Implementing Client Side Errors - -Client side errors indicate a misconfiguration or passing of bad arguments that is non-recoverable. Retrying isn't possible. - -These errors can simply be standard Go errors created by errors.New() or fmt.Errorf(). If down the line we need a custom error, we can introduce it, but for now the error messages just need to be clear on what the issue was. - -## Implementing Service Side Errors - -Service side errors occur when an external RPC responds either with an HTTP error code or returns a message that includes an error. - -These errors can be transitory (please slow down) or permanent (HTTP 404). To provide our diagnostic goals, we require the ability to differentiate these errors from other errors. - -The current implementation includes a specialized type that captures any error from the server: - -```go -// CallErr represents an HTTP call error. Has a Verbose() method that allows getting the -// http.Request and Response objects. Implements error. -type CallErr struct { - Req *http.Request - Resp *http.Response - Err error -} - -// Errors implements error.Error(). -func (e CallErr) Error() string { - return e.Err.Error() -} - -// Verbose prints a versbose error message with the request or response. -func (e CallErr) Verbose() string { - e.Resp.Request = nil // This brings in a bunch of TLS stuff we don't need - e.Resp.TLS = nil // Same - return fmt.Sprintf("%s:\nRequest:\n%s\nResponse:\n%s", e.Err, prettyConf.Sprint(e.Req), prettyConf.Sprint(e.Resp)) -} -``` - -A user will always receive the most concise error we provide. They can tell if it is a server side error using Go error package: - -```go -var callErr CallErr -if errors.As(err, &callErr) { - ... -} -``` - -We provide a Verbose() function that can retrieve the most verbose message from any error we provide: - -```go -fmt.Println(errors.Verbose(err)) -``` - -If further differentiation is required, we can add custom errors that use Go error wrapping on top of CallErr to achieve our diagnostic goals (such as detecting when to retry a call due to transient errors). - -CallErr is always thrown from the comm package (which handles all http requests) and looks similar to: - -```go -return nil, errors.CallErr{ - Req: req, - Resp: reply, - Err: fmt.Errorf("http call(%s)(%s) error: reply status code was %d:\n%s", req.URL.String(), req.Method, reply.StatusCode, ErrorResponse), //ErrorResponse is the json body extracted from the http response - } -``` - -## Future Decisions - -The ability to retry calls needs to have centralized responsibility. Either the user is doing it or the client is doing it. - -If the user should be responsible, our errors package will include a CanRetry() function that will inform the user if the error provided to them is retryable. This is based on the http error code and possibly the type of error that was returned. It would also include a sleep time if the server returned an amount of time to wait. - -Otherwise we will do this internally and retries will be left to us. diff --git a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/errors/errors.go b/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/errors/errors.go deleted file mode 100644 index c9b8dbed088d..000000000000 --- a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/errors/errors.go +++ /dev/null @@ -1,89 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. - -package errors - -import ( - "errors" - "fmt" - "io" - "net/http" - "reflect" - "strings" - - "github.com/kylelemons/godebug/pretty" -) - -var prettyConf = &pretty.Config{ - IncludeUnexported: false, - SkipZeroFields: true, - TrackCycles: true, - Formatter: map[reflect.Type]interface{}{ - reflect.TypeOf((*io.Reader)(nil)).Elem(): func(r io.Reader) string { - b, err := io.ReadAll(r) - if err != nil { - return "could not read io.Reader content" - } - return string(b) - }, - }, -} - -type verboser interface { - Verbose() string -} - -// Verbose prints the most verbose error that the error message has. -func Verbose(err error) string { - build := strings.Builder{} - for { - if err == nil { - break - } - if v, ok := err.(verboser); ok { - build.WriteString(v.Verbose()) - } else { - build.WriteString(err.Error()) - } - err = errors.Unwrap(err) - } - return build.String() -} - -// New is equivalent to errors.New(). -func New(text string) error { - return errors.New(text) -} - -// CallErr represents an HTTP call error. Has a Verbose() method that allows getting the -// http.Request and Response objects. Implements error. -type CallErr struct { - Req *http.Request - // Resp contains response body - Resp *http.Response - Err error -} - -// Errors implements error.Error(). -func (e CallErr) Error() string { - return e.Err.Error() -} - -// Verbose prints a versbose error message with the request or response. -func (e CallErr) Verbose() string { - e.Resp.Request = nil // This brings in a bunch of TLS crap we don't need - e.Resp.TLS = nil // Same - return fmt.Sprintf("%s:\nRequest:\n%s\nResponse:\n%s", e.Err, prettyConf.Sprint(e.Req), prettyConf.Sprint(e.Resp)) -} - -// Is reports whether any error in errors chain matches target. -func Is(err, target error) bool { - return errors.Is(err, target) -} - -// As finds the first error in errors chain that matches target, -// and if so, sets target to that error value and returns true. -// Otherwise, it returns false. -func As(err error, target interface{}) bool { - return errors.As(err, target) -} diff --git a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/base/base.go b/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/base/base.go deleted file mode 100644 index 09a0d92f5205..000000000000 --- a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/base/base.go +++ /dev/null @@ -1,477 +0,0 @@ -// Package base contains a "Base" client that is used by the external public.Client and confidential.Client. -// Base holds shared attributes that must be available to both clients and methods that act as -// shared calls. -package base - -import ( - "context" - "errors" - "fmt" - "net/url" - "reflect" - "strings" - "sync" - "time" - - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/cache" - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/base/internal/storage" - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth" - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/accesstokens" - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/authority" - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/shared" -) - -const ( - // AuthorityPublicCloud is the default AAD authority host - AuthorityPublicCloud = "https://login.microsoftonline.com/common" - scopeSeparator = " " -) - -// manager provides an internal cache. It is defined to allow faking the cache in tests. -// In production it's a *storage.Manager or *storage.PartitionedManager. -type manager interface { - cache.Serializer - Read(context.Context, authority.AuthParams) (storage.TokenResponse, error) - Write(authority.AuthParams, accesstokens.TokenResponse) (shared.Account, error) -} - -// accountManager is a manager that also caches accounts. In production it's a *storage.Manager. -type accountManager interface { - manager - AllAccounts() []shared.Account - Account(homeAccountID string) shared.Account - RemoveAccount(account shared.Account, clientID string) -} - -// AcquireTokenSilentParameters contains the parameters to acquire a token silently (from cache). -type AcquireTokenSilentParameters struct { - Scopes []string - Account shared.Account - RequestType accesstokens.AppType - Credential *accesstokens.Credential - IsAppCache bool - TenantID string - UserAssertion string - AuthorizationType authority.AuthorizeType - Claims string - AuthnScheme authority.AuthenticationScheme -} - -// AcquireTokenAuthCodeParameters contains the parameters required to acquire an access token using the auth code flow. -// To use PKCE, set the CodeChallengeParameter. -// Code challenges are used to secure authorization code grants; for more information, visit -// https://tools.ietf.org/html/rfc7636. -type AcquireTokenAuthCodeParameters struct { - Scopes []string - Code string - Challenge string - Claims string - RedirectURI string - AppType accesstokens.AppType - Credential *accesstokens.Credential - TenantID string -} - -type AcquireTokenOnBehalfOfParameters struct { - Scopes []string - Claims string - Credential *accesstokens.Credential - TenantID string - UserAssertion string -} - -// AuthResult contains the results of one token acquisition operation in PublicClientApplication -// or ConfidentialClientApplication. For details see https://aka.ms/msal-net-authenticationresult -type AuthResult struct { - Account shared.Account - IDToken accesstokens.IDToken - AccessToken string - ExpiresOn time.Time - GrantedScopes []string - DeclinedScopes []string -} - -// AuthResultFromStorage creates an AuthResult from a storage token response (which is generated from the cache). -func AuthResultFromStorage(storageTokenResponse storage.TokenResponse) (AuthResult, error) { - if err := storageTokenResponse.AccessToken.Validate(); err != nil { - return AuthResult{}, fmt.Errorf("problem with access token in StorageTokenResponse: %w", err) - } - - account := storageTokenResponse.Account - accessToken := storageTokenResponse.AccessToken.Secret - grantedScopes := strings.Split(storageTokenResponse.AccessToken.Scopes, scopeSeparator) - - // Checking if there was an ID token in the cache; this will throw an error in the case of confidential client applications. - var idToken accesstokens.IDToken - if !storageTokenResponse.IDToken.IsZero() { - err := idToken.UnmarshalJSON([]byte(storageTokenResponse.IDToken.Secret)) - if err != nil { - return AuthResult{}, fmt.Errorf("problem decoding JWT token: %w", err) - } - } - return AuthResult{account, idToken, accessToken, storageTokenResponse.AccessToken.ExpiresOn.T, grantedScopes, nil}, nil -} - -// NewAuthResult creates an AuthResult. -func NewAuthResult(tokenResponse accesstokens.TokenResponse, account shared.Account) (AuthResult, error) { - if len(tokenResponse.DeclinedScopes) > 0 { - return AuthResult{}, fmt.Errorf("token response failed because declined scopes are present: %s", strings.Join(tokenResponse.DeclinedScopes, ",")) - } - return AuthResult{ - Account: account, - IDToken: tokenResponse.IDToken, - AccessToken: tokenResponse.AccessToken, - ExpiresOn: tokenResponse.ExpiresOn.T, - GrantedScopes: tokenResponse.GrantedScopes.Slice, - }, nil -} - -// Client is a base client that provides access to common methods and primatives that -// can be used by multiple clients. -type Client struct { - Token *oauth.Client - manager accountManager // *storage.Manager or fakeManager in tests - // pmanager is a partitioned cache for OBO authentication. *storage.PartitionedManager or fakeManager in tests - pmanager manager - - AuthParams authority.AuthParams // DO NOT EVER MAKE THIS A POINTER! See "Note" in New(). - cacheAccessor cache.ExportReplace - cacheAccessorMu *sync.RWMutex -} - -// Option is an optional argument to the New constructor. -type Option func(c *Client) error - -// WithCacheAccessor allows you to set some type of cache for storing authentication tokens. -func WithCacheAccessor(ca cache.ExportReplace) Option { - return func(c *Client) error { - if ca != nil { - c.cacheAccessor = ca - } - return nil - } -} - -// WithClientCapabilities allows configuring one or more client capabilities such as "CP1" -func WithClientCapabilities(capabilities []string) Option { - return func(c *Client) error { - var err error - if len(capabilities) > 0 { - cc, err := authority.NewClientCapabilities(capabilities) - if err == nil { - c.AuthParams.Capabilities = cc - } - } - return err - } -} - -// WithKnownAuthorityHosts specifies hosts Client shouldn't validate or request metadata for because they're known to the user -func WithKnownAuthorityHosts(hosts []string) Option { - return func(c *Client) error { - cp := make([]string, len(hosts)) - copy(cp, hosts) - c.AuthParams.KnownAuthorityHosts = cp - return nil - } -} - -// WithX5C specifies if x5c claim(public key of the certificate) should be sent to STS to enable Subject Name Issuer Authentication. -func WithX5C(sendX5C bool) Option { - return func(c *Client) error { - c.AuthParams.SendX5C = sendX5C - return nil - } -} - -func WithRegionDetection(region string) Option { - return func(c *Client) error { - c.AuthParams.AuthorityInfo.Region = region - return nil - } -} - -func WithInstanceDiscovery(instanceDiscoveryEnabled bool) Option { - return func(c *Client) error { - c.AuthParams.AuthorityInfo.ValidateAuthority = instanceDiscoveryEnabled - c.AuthParams.AuthorityInfo.InstanceDiscoveryDisabled = !instanceDiscoveryEnabled - return nil - } -} - -// New is the constructor for Base. -func New(clientID string, authorityURI string, token *oauth.Client, options ...Option) (Client, error) { - //By default, validateAuthority is set to true and instanceDiscoveryDisabled is set to false - authInfo, err := authority.NewInfoFromAuthorityURI(authorityURI, true, false) - if err != nil { - return Client{}, err - } - authParams := authority.NewAuthParams(clientID, authInfo) - client := Client{ // Note: Hey, don't even THINK about making Base into *Base. See "design notes" in public.go and confidential.go - Token: token, - AuthParams: authParams, - cacheAccessorMu: &sync.RWMutex{}, - manager: storage.New(token), - pmanager: storage.NewPartitionedManager(token), - } - for _, o := range options { - if err = o(&client); err != nil { - break - } - } - return client, err - -} - -// AuthCodeURL creates a URL used to acquire an authorization code. -func (b Client) AuthCodeURL(ctx context.Context, clientID, redirectURI string, scopes []string, authParams authority.AuthParams) (string, error) { - endpoints, err := b.Token.ResolveEndpoints(ctx, authParams.AuthorityInfo, "") - if err != nil { - return "", err - } - - baseURL, err := url.Parse(endpoints.AuthorizationEndpoint) - if err != nil { - return "", err - } - - claims, err := authParams.MergeCapabilitiesAndClaims() - if err != nil { - return "", err - } - - v := url.Values{} - v.Add("client_id", clientID) - v.Add("response_type", "code") - v.Add("redirect_uri", redirectURI) - v.Add("scope", strings.Join(scopes, scopeSeparator)) - if authParams.State != "" { - v.Add("state", authParams.State) - } - if claims != "" { - v.Add("claims", claims) - } - if authParams.CodeChallenge != "" { - v.Add("code_challenge", authParams.CodeChallenge) - } - if authParams.CodeChallengeMethod != "" { - v.Add("code_challenge_method", authParams.CodeChallengeMethod) - } - if authParams.LoginHint != "" { - v.Add("login_hint", authParams.LoginHint) - } - if authParams.Prompt != "" { - v.Add("prompt", authParams.Prompt) - } - if authParams.DomainHint != "" { - v.Add("domain_hint", authParams.DomainHint) - } - // There were left over from an implementation that didn't use any of these. We may - // need to add them later, but as of now aren't needed. - /* - if p.ResponseMode != "" { - urlParams.Add("response_mode", p.ResponseMode) - } - */ - baseURL.RawQuery = v.Encode() - return baseURL.String(), nil -} - -func (b Client) AcquireTokenSilent(ctx context.Context, silent AcquireTokenSilentParameters) (AuthResult, error) { - ar := AuthResult{} - // when tenant == "", the caller didn't specify a tenant and WithTenant will choose the client's configured tenant - tenant := silent.TenantID - authParams, err := b.AuthParams.WithTenant(tenant) - if err != nil { - return ar, err - } - authParams.Scopes = silent.Scopes - authParams.HomeAccountID = silent.Account.HomeAccountID - authParams.AuthorizationType = silent.AuthorizationType - authParams.Claims = silent.Claims - authParams.UserAssertion = silent.UserAssertion - if silent.AuthnScheme != nil { - authParams.AuthnScheme = silent.AuthnScheme - } - - m := b.pmanager - if authParams.AuthorizationType != authority.ATOnBehalfOf { - authParams.AuthorizationType = authority.ATRefreshToken - m = b.manager - } - if b.cacheAccessor != nil { - key := authParams.CacheKey(silent.IsAppCache) - b.cacheAccessorMu.RLock() - err = b.cacheAccessor.Replace(ctx, m, cache.ReplaceHints{PartitionKey: key}) - b.cacheAccessorMu.RUnlock() - } - if err != nil { - return ar, err - } - storageTokenResponse, err := m.Read(ctx, authParams) - if err != nil { - return ar, err - } - - // ignore cached access tokens when given claims - if silent.Claims == "" { - ar, err = AuthResultFromStorage(storageTokenResponse) - if err == nil { - ar.AccessToken, err = authParams.AuthnScheme.FormatAccessToken(ar.AccessToken) - return ar, err - } - } - - // redeem a cached refresh token, if available - if reflect.ValueOf(storageTokenResponse.RefreshToken).IsZero() { - return ar, errors.New("no token found") - } - var cc *accesstokens.Credential - if silent.RequestType == accesstokens.ATConfidential { - cc = silent.Credential - } - token, err := b.Token.Refresh(ctx, silent.RequestType, authParams, cc, storageTokenResponse.RefreshToken) - if err != nil { - return ar, err - } - return b.AuthResultFromToken(ctx, authParams, token, true) -} - -func (b Client) AcquireTokenByAuthCode(ctx context.Context, authCodeParams AcquireTokenAuthCodeParameters) (AuthResult, error) { - authParams, err := b.AuthParams.WithTenant(authCodeParams.TenantID) - if err != nil { - return AuthResult{}, err - } - authParams.Claims = authCodeParams.Claims - authParams.Scopes = authCodeParams.Scopes - authParams.Redirecturi = authCodeParams.RedirectURI - authParams.AuthorizationType = authority.ATAuthCode - - var cc *accesstokens.Credential - if authCodeParams.AppType == accesstokens.ATConfidential { - cc = authCodeParams.Credential - authParams.IsConfidentialClient = true - } - - req, err := accesstokens.NewCodeChallengeRequest(authParams, authCodeParams.AppType, cc, authCodeParams.Code, authCodeParams.Challenge) - if err != nil { - return AuthResult{}, err - } - - token, err := b.Token.AuthCode(ctx, req) - if err != nil { - return AuthResult{}, err - } - - return b.AuthResultFromToken(ctx, authParams, token, true) -} - -// AcquireTokenOnBehalfOf acquires a security token for an app using middle tier apps access token. -func (b Client) AcquireTokenOnBehalfOf(ctx context.Context, onBehalfOfParams AcquireTokenOnBehalfOfParameters) (AuthResult, error) { - var ar AuthResult - silentParameters := AcquireTokenSilentParameters{ - Scopes: onBehalfOfParams.Scopes, - RequestType: accesstokens.ATConfidential, - Credential: onBehalfOfParams.Credential, - UserAssertion: onBehalfOfParams.UserAssertion, - AuthorizationType: authority.ATOnBehalfOf, - TenantID: onBehalfOfParams.TenantID, - Claims: onBehalfOfParams.Claims, - } - ar, err := b.AcquireTokenSilent(ctx, silentParameters) - if err == nil { - return ar, err - } - authParams, err := b.AuthParams.WithTenant(onBehalfOfParams.TenantID) - if err != nil { - return AuthResult{}, err - } - authParams.AuthorizationType = authority.ATOnBehalfOf - authParams.Claims = onBehalfOfParams.Claims - authParams.Scopes = onBehalfOfParams.Scopes - authParams.UserAssertion = onBehalfOfParams.UserAssertion - token, err := b.Token.OnBehalfOf(ctx, authParams, onBehalfOfParams.Credential) - if err == nil { - ar, err = b.AuthResultFromToken(ctx, authParams, token, true) - } - return ar, err -} - -func (b Client) AuthResultFromToken(ctx context.Context, authParams authority.AuthParams, token accesstokens.TokenResponse, cacheWrite bool) (AuthResult, error) { - if !cacheWrite { - return NewAuthResult(token, shared.Account{}) - } - var m manager = b.manager - if authParams.AuthorizationType == authority.ATOnBehalfOf { - m = b.pmanager - } - key := token.CacheKey(authParams) - if b.cacheAccessor != nil { - b.cacheAccessorMu.Lock() - defer b.cacheAccessorMu.Unlock() - err := b.cacheAccessor.Replace(ctx, m, cache.ReplaceHints{PartitionKey: key}) - if err != nil { - return AuthResult{}, err - } - } - account, err := m.Write(authParams, token) - if err != nil { - return AuthResult{}, err - } - ar, err := NewAuthResult(token, account) - if err == nil && b.cacheAccessor != nil { - err = b.cacheAccessor.Export(ctx, b.manager, cache.ExportHints{PartitionKey: key}) - } - if err != nil { - return AuthResult{}, err - } - - ar.AccessToken, err = authParams.AuthnScheme.FormatAccessToken(ar.AccessToken) - return ar, err -} - -func (b Client) AllAccounts(ctx context.Context) ([]shared.Account, error) { - if b.cacheAccessor != nil { - b.cacheAccessorMu.RLock() - defer b.cacheAccessorMu.RUnlock() - key := b.AuthParams.CacheKey(false) - err := b.cacheAccessor.Replace(ctx, b.manager, cache.ReplaceHints{PartitionKey: key}) - if err != nil { - return nil, err - } - } - return b.manager.AllAccounts(), nil -} - -func (b Client) Account(ctx context.Context, homeAccountID string) (shared.Account, error) { - if b.cacheAccessor != nil { - b.cacheAccessorMu.RLock() - defer b.cacheAccessorMu.RUnlock() - authParams := b.AuthParams // This is a copy, as we don't have a pointer receiver and .AuthParams is not a pointer. - authParams.AuthorizationType = authority.AccountByID - authParams.HomeAccountID = homeAccountID - key := b.AuthParams.CacheKey(false) - err := b.cacheAccessor.Replace(ctx, b.manager, cache.ReplaceHints{PartitionKey: key}) - if err != nil { - return shared.Account{}, err - } - } - return b.manager.Account(homeAccountID), nil -} - -// RemoveAccount removes all the ATs, RTs and IDTs from the cache associated with this account. -func (b Client) RemoveAccount(ctx context.Context, account shared.Account) error { - if b.cacheAccessor == nil { - b.manager.RemoveAccount(account, b.AuthParams.ClientID) - return nil - } - b.cacheAccessorMu.Lock() - defer b.cacheAccessorMu.Unlock() - key := b.AuthParams.CacheKey(false) - err := b.cacheAccessor.Replace(ctx, b.manager, cache.ReplaceHints{PartitionKey: key}) - if err != nil { - return err - } - b.manager.RemoveAccount(account, b.AuthParams.ClientID) - return b.cacheAccessor.Export(ctx, b.manager, cache.ExportHints{PartitionKey: key}) -} diff --git a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/base/internal/storage/items.go b/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/base/internal/storage/items.go deleted file mode 100644 index f9be90276dad..000000000000 --- a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/base/internal/storage/items.go +++ /dev/null @@ -1,213 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. - -package storage - -import ( - "errors" - "fmt" - "reflect" - "strings" - "time" - - internalTime "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/json/types/time" - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/accesstokens" - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/authority" - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/shared" -) - -// Contract is the JSON structure that is written to any storage medium when serializing -// the internal cache. This design is shared between MSAL versions in many languages. -// This cannot be changed without design that includes other SDKs. -type Contract struct { - AccessTokens map[string]AccessToken `json:"AccessToken,omitempty"` - RefreshTokens map[string]accesstokens.RefreshToken `json:"RefreshToken,omitempty"` - IDTokens map[string]IDToken `json:"IdToken,omitempty"` - Accounts map[string]shared.Account `json:"Account,omitempty"` - AppMetaData map[string]AppMetaData `json:"AppMetadata,omitempty"` - - AdditionalFields map[string]interface{} -} - -// Contract is the JSON structure that is written to any storage medium when serializing -// the internal cache. This design is shared between MSAL versions in many languages. -// This cannot be changed without design that includes other SDKs. -type InMemoryContract struct { - AccessTokensPartition map[string]map[string]AccessToken - RefreshTokensPartition map[string]map[string]accesstokens.RefreshToken - IDTokensPartition map[string]map[string]IDToken - AccountsPartition map[string]map[string]shared.Account - AppMetaData map[string]AppMetaData -} - -// NewContract is the constructor for Contract. -func NewInMemoryContract() *InMemoryContract { - return &InMemoryContract{ - AccessTokensPartition: map[string]map[string]AccessToken{}, - RefreshTokensPartition: map[string]map[string]accesstokens.RefreshToken{}, - IDTokensPartition: map[string]map[string]IDToken{}, - AccountsPartition: map[string]map[string]shared.Account{}, - AppMetaData: map[string]AppMetaData{}, - } -} - -// NewContract is the constructor for Contract. -func NewContract() *Contract { - return &Contract{ - AccessTokens: map[string]AccessToken{}, - RefreshTokens: map[string]accesstokens.RefreshToken{}, - IDTokens: map[string]IDToken{}, - Accounts: map[string]shared.Account{}, - AppMetaData: map[string]AppMetaData{}, - AdditionalFields: map[string]interface{}{}, - } -} - -// AccessToken is the JSON representation of a MSAL access token for encoding to storage. -type AccessToken struct { - HomeAccountID string `json:"home_account_id,omitempty"` - Environment string `json:"environment,omitempty"` - Realm string `json:"realm,omitempty"` - CredentialType string `json:"credential_type,omitempty"` - ClientID string `json:"client_id,omitempty"` - Secret string `json:"secret,omitempty"` - Scopes string `json:"target,omitempty"` - ExpiresOn internalTime.Unix `json:"expires_on,omitempty"` - ExtendedExpiresOn internalTime.Unix `json:"extended_expires_on,omitempty"` - CachedAt internalTime.Unix `json:"cached_at,omitempty"` - UserAssertionHash string `json:"user_assertion_hash,omitempty"` - TokenType string `json:"token_type,omitempty"` - AuthnSchemeKeyID string `json:"keyid,omitempty"` - - AdditionalFields map[string]interface{} -} - -// NewAccessToken is the constructor for AccessToken. -func NewAccessToken(homeID, env, realm, clientID string, cachedAt, expiresOn, extendedExpiresOn time.Time, scopes, token, tokenType, authnSchemeKeyID string) AccessToken { - return AccessToken{ - HomeAccountID: homeID, - Environment: env, - Realm: realm, - CredentialType: "AccessToken", - ClientID: clientID, - Secret: token, - Scopes: scopes, - CachedAt: internalTime.Unix{T: cachedAt.UTC()}, - ExpiresOn: internalTime.Unix{T: expiresOn.UTC()}, - ExtendedExpiresOn: internalTime.Unix{T: extendedExpiresOn.UTC()}, - TokenType: tokenType, - AuthnSchemeKeyID: authnSchemeKeyID, - } -} - -// Key outputs the key that can be used to uniquely look up this entry in a map. -func (a AccessToken) Key() string { - key := strings.Join( - []string{a.HomeAccountID, a.Environment, a.CredentialType, a.ClientID, a.Realm, a.Scopes}, - shared.CacheKeySeparator, - ) - // add token type to key for new access tokens types. skip for bearer token type to - // preserve fwd and back compat between a common cache and msal clients - if !strings.EqualFold(a.TokenType, authority.AccessTokenTypeBearer) { - key = strings.Join([]string{key, a.TokenType}, shared.CacheKeySeparator) - } - return strings.ToLower(key) -} - -// FakeValidate enables tests to fake access token validation -var FakeValidate func(AccessToken) error - -// Validate validates that this AccessToken can be used. -func (a AccessToken) Validate() error { - if FakeValidate != nil { - return FakeValidate(a) - } - if a.CachedAt.T.After(time.Now()) { - return errors.New("access token isn't valid, it was cached at a future time") - } - if a.ExpiresOn.T.Before(time.Now().Add(5 * time.Minute)) { - return fmt.Errorf("access token is expired") - } - if a.CachedAt.T.IsZero() { - return fmt.Errorf("access token does not have CachedAt set") - } - return nil -} - -// IDToken is the JSON representation of an MSAL id token for encoding to storage. -type IDToken struct { - HomeAccountID string `json:"home_account_id,omitempty"` - Environment string `json:"environment,omitempty"` - Realm string `json:"realm,omitempty"` - CredentialType string `json:"credential_type,omitempty"` - ClientID string `json:"client_id,omitempty"` - Secret string `json:"secret,omitempty"` - UserAssertionHash string `json:"user_assertion_hash,omitempty"` - AdditionalFields map[string]interface{} -} - -// IsZero determines if IDToken is the zero value. -func (i IDToken) IsZero() bool { - v := reflect.ValueOf(i) - for i := 0; i < v.NumField(); i++ { - field := v.Field(i) - if !field.IsZero() { - switch field.Kind() { - case reflect.Map, reflect.Slice: - if field.Len() == 0 { - continue - } - } - return false - } - } - return true -} - -// NewIDToken is the constructor for IDToken. -func NewIDToken(homeID, env, realm, clientID, idToken string) IDToken { - return IDToken{ - HomeAccountID: homeID, - Environment: env, - Realm: realm, - CredentialType: "IDToken", - ClientID: clientID, - Secret: idToken, - } -} - -// Key outputs the key that can be used to uniquely look up this entry in a map. -func (id IDToken) Key() string { - key := strings.Join( - []string{id.HomeAccountID, id.Environment, id.CredentialType, id.ClientID, id.Realm}, - shared.CacheKeySeparator, - ) - return strings.ToLower(key) -} - -// AppMetaData is the JSON representation of application metadata for encoding to storage. -type AppMetaData struct { - FamilyID string `json:"family_id,omitempty"` - ClientID string `json:"client_id,omitempty"` - Environment string `json:"environment,omitempty"` - - AdditionalFields map[string]interface{} -} - -// NewAppMetaData is the constructor for AppMetaData. -func NewAppMetaData(familyID, clientID, environment string) AppMetaData { - return AppMetaData{ - FamilyID: familyID, - ClientID: clientID, - Environment: environment, - } -} - -// Key outputs the key that can be used to uniquely look up this entry in a map. -func (a AppMetaData) Key() string { - key := strings.Join( - []string{"AppMetaData", a.Environment, a.ClientID}, - shared.CacheKeySeparator, - ) - return strings.ToLower(key) -} diff --git a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/base/internal/storage/partitioned_storage.go b/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/base/internal/storage/partitioned_storage.go deleted file mode 100644 index c0931833064f..000000000000 --- a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/base/internal/storage/partitioned_storage.go +++ /dev/null @@ -1,442 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. - -package storage - -import ( - "context" - "errors" - "fmt" - "strings" - "sync" - "time" - - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/json" - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth" - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/accesstokens" - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/authority" - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/shared" -) - -// PartitionedManager is a partitioned in-memory cache of access tokens, accounts and meta data. -type PartitionedManager struct { - contract *InMemoryContract - contractMu sync.RWMutex - requests aadInstanceDiscoveryer // *oauth.Token - - aadCacheMu sync.RWMutex - aadCache map[string]authority.InstanceDiscoveryMetadata -} - -// NewPartitionedManager is the constructor for PartitionedManager. -func NewPartitionedManager(requests *oauth.Client) *PartitionedManager { - m := &PartitionedManager{requests: requests, aadCache: make(map[string]authority.InstanceDiscoveryMetadata)} - m.contract = NewInMemoryContract() - return m -} - -// Read reads a storage token from the cache if it exists. -func (m *PartitionedManager) Read(ctx context.Context, authParameters authority.AuthParams) (TokenResponse, error) { - tr := TokenResponse{} - realm := authParameters.AuthorityInfo.Tenant - clientID := authParameters.ClientID - scopes := authParameters.Scopes - authnSchemeKeyID := authParameters.AuthnScheme.KeyID() - tokenType := authParameters.AuthnScheme.AccessTokenType() - - // fetch metadata if instanceDiscovery is enabled - aliases := []string{authParameters.AuthorityInfo.Host} - if !authParameters.AuthorityInfo.InstanceDiscoveryDisabled { - metadata, err := m.getMetadataEntry(ctx, authParameters.AuthorityInfo) - if err != nil { - return TokenResponse{}, err - } - aliases = metadata.Aliases - } - - userAssertionHash := authParameters.AssertionHash() - partitionKeyFromRequest := userAssertionHash - - // errors returned by read* methods indicate a cache miss and are therefore non-fatal. We continue populating - // TokenResponse fields so that e.g. lack of an ID token doesn't prevent the caller from receiving a refresh token. - accessToken, err := m.readAccessToken(aliases, realm, clientID, userAssertionHash, scopes, partitionKeyFromRequest, tokenType, authnSchemeKeyID) - if err == nil { - tr.AccessToken = accessToken - } - idToken, err := m.readIDToken(aliases, realm, clientID, userAssertionHash, getPartitionKeyIDTokenRead(accessToken)) - if err == nil { - tr.IDToken = idToken - } - - if appMetadata, err := m.readAppMetaData(aliases, clientID); err == nil { - // we need the family ID to identify the correct refresh token, if any - familyID := appMetadata.FamilyID - refreshToken, err := m.readRefreshToken(aliases, familyID, clientID, userAssertionHash, partitionKeyFromRequest) - if err == nil { - tr.RefreshToken = refreshToken - } - } - - account, err := m.readAccount(aliases, realm, userAssertionHash, idToken.HomeAccountID) - if err == nil { - tr.Account = account - } - return tr, nil -} - -// Write writes a token response to the cache and returns the account information the token is stored with. -func (m *PartitionedManager) Write(authParameters authority.AuthParams, tokenResponse accesstokens.TokenResponse) (shared.Account, error) { - authParameters.HomeAccountID = tokenResponse.HomeAccountID() - homeAccountID := authParameters.HomeAccountID - environment := authParameters.AuthorityInfo.Host - realm := authParameters.AuthorityInfo.Tenant - clientID := authParameters.ClientID - target := strings.Join(tokenResponse.GrantedScopes.Slice, scopeSeparator) - userAssertionHash := authParameters.AssertionHash() - cachedAt := time.Now() - authnSchemeKeyID := authParameters.AuthnScheme.KeyID() - var account shared.Account - - if len(tokenResponse.RefreshToken) > 0 { - refreshToken := accesstokens.NewRefreshToken(homeAccountID, environment, clientID, tokenResponse.RefreshToken, tokenResponse.FamilyID) - if authParameters.AuthorizationType == authority.ATOnBehalfOf { - refreshToken.UserAssertionHash = userAssertionHash - } - if err := m.writeRefreshToken(refreshToken, getPartitionKeyRefreshToken(refreshToken)); err != nil { - return account, err - } - } - - if len(tokenResponse.AccessToken) > 0 { - accessToken := NewAccessToken( - homeAccountID, - environment, - realm, - clientID, - cachedAt, - tokenResponse.ExpiresOn.T, - tokenResponse.ExtExpiresOn.T, - target, - tokenResponse.AccessToken, - tokenResponse.TokenType, - authnSchemeKeyID, - ) - if authParameters.AuthorizationType == authority.ATOnBehalfOf { - accessToken.UserAssertionHash = userAssertionHash // get Hash method on this - } - - // Since we have a valid access token, cache it before moving on. - if err := accessToken.Validate(); err == nil { - if err := m.writeAccessToken(accessToken, getPartitionKeyAccessToken(accessToken)); err != nil { - return account, err - } - } else { - return shared.Account{}, err - } - } - - idTokenJwt := tokenResponse.IDToken - if !idTokenJwt.IsZero() { - idToken := NewIDToken(homeAccountID, environment, realm, clientID, idTokenJwt.RawToken) - if authParameters.AuthorizationType == authority.ATOnBehalfOf { - idToken.UserAssertionHash = userAssertionHash - } - if err := m.writeIDToken(idToken, getPartitionKeyIDToken(idToken)); err != nil { - return shared.Account{}, err - } - - localAccountID := idTokenJwt.LocalAccountID() - authorityType := authParameters.AuthorityInfo.AuthorityType - - preferredUsername := idTokenJwt.UPN - if idTokenJwt.PreferredUsername != "" { - preferredUsername = idTokenJwt.PreferredUsername - } - - account = shared.NewAccount( - homeAccountID, - environment, - realm, - localAccountID, - authorityType, - preferredUsername, - ) - if authParameters.AuthorizationType == authority.ATOnBehalfOf { - account.UserAssertionHash = userAssertionHash - } - if err := m.writeAccount(account, getPartitionKeyAccount(account)); err != nil { - return shared.Account{}, err - } - } - - AppMetaData := NewAppMetaData(tokenResponse.FamilyID, clientID, environment) - - if err := m.writeAppMetaData(AppMetaData); err != nil { - return shared.Account{}, err - } - return account, nil -} - -func (m *PartitionedManager) getMetadataEntry(ctx context.Context, authorityInfo authority.Info) (authority.InstanceDiscoveryMetadata, error) { - md, err := m.aadMetadataFromCache(ctx, authorityInfo) - if err != nil { - // not in the cache, retrieve it - md, err = m.aadMetadata(ctx, authorityInfo) - } - return md, err -} - -func (m *PartitionedManager) aadMetadataFromCache(ctx context.Context, authorityInfo authority.Info) (authority.InstanceDiscoveryMetadata, error) { - m.aadCacheMu.RLock() - defer m.aadCacheMu.RUnlock() - metadata, ok := m.aadCache[authorityInfo.Host] - if ok { - return metadata, nil - } - return metadata, errors.New("not found") -} - -func (m *PartitionedManager) aadMetadata(ctx context.Context, authorityInfo authority.Info) (authority.InstanceDiscoveryMetadata, error) { - discoveryResponse, err := m.requests.AADInstanceDiscovery(ctx, authorityInfo) - if err != nil { - return authority.InstanceDiscoveryMetadata{}, err - } - - m.aadCacheMu.Lock() - defer m.aadCacheMu.Unlock() - - for _, metadataEntry := range discoveryResponse.Metadata { - for _, aliasedAuthority := range metadataEntry.Aliases { - m.aadCache[aliasedAuthority] = metadataEntry - } - } - if _, ok := m.aadCache[authorityInfo.Host]; !ok { - m.aadCache[authorityInfo.Host] = authority.InstanceDiscoveryMetadata{ - PreferredNetwork: authorityInfo.Host, - PreferredCache: authorityInfo.Host, - } - } - return m.aadCache[authorityInfo.Host], nil -} - -func (m *PartitionedManager) readAccessToken(envAliases []string, realm, clientID, userAssertionHash string, scopes []string, partitionKey, tokenType, authnSchemeKeyID string) (AccessToken, error) { - m.contractMu.RLock() - defer m.contractMu.RUnlock() - if accessTokens, ok := m.contract.AccessTokensPartition[partitionKey]; ok { - // TODO: linear search (over a map no less) is slow for a large number (thousands) of tokens. - // this shows up as the dominating node in a profile. for real-world scenarios this likely isn't - // an issue, however if it does become a problem then we know where to look. - for _, at := range accessTokens { - if at.Realm == realm && at.ClientID == clientID && at.UserAssertionHash == userAssertionHash { - if at.TokenType == tokenType && at.AuthnSchemeKeyID == authnSchemeKeyID { - if checkAlias(at.Environment, envAliases) { - if isMatchingScopes(scopes, at.Scopes) { - return at, nil - } - } - } - } - } - } - return AccessToken{}, fmt.Errorf("access token not found") -} - -func (m *PartitionedManager) writeAccessToken(accessToken AccessToken, partitionKey string) error { - m.contractMu.Lock() - defer m.contractMu.Unlock() - key := accessToken.Key() - if m.contract.AccessTokensPartition[partitionKey] == nil { - m.contract.AccessTokensPartition[partitionKey] = make(map[string]AccessToken) - } - m.contract.AccessTokensPartition[partitionKey][key] = accessToken - return nil -} - -func matchFamilyRefreshTokenObo(rt accesstokens.RefreshToken, userAssertionHash string, envAliases []string) bool { - return rt.UserAssertionHash == userAssertionHash && checkAlias(rt.Environment, envAliases) && rt.FamilyID != "" -} - -func matchClientIDRefreshTokenObo(rt accesstokens.RefreshToken, userAssertionHash string, envAliases []string, clientID string) bool { - return rt.UserAssertionHash == userAssertionHash && checkAlias(rt.Environment, envAliases) && rt.ClientID == clientID -} - -func (m *PartitionedManager) readRefreshToken(envAliases []string, familyID, clientID, userAssertionHash, partitionKey string) (accesstokens.RefreshToken, error) { - byFamily := func(rt accesstokens.RefreshToken) bool { - return matchFamilyRefreshTokenObo(rt, userAssertionHash, envAliases) - } - byClient := func(rt accesstokens.RefreshToken) bool { - return matchClientIDRefreshTokenObo(rt, userAssertionHash, envAliases, clientID) - } - - var matchers []func(rt accesstokens.RefreshToken) bool - if familyID == "" { - matchers = []func(rt accesstokens.RefreshToken) bool{ - byClient, byFamily, - } - } else { - matchers = []func(rt accesstokens.RefreshToken) bool{ - byFamily, byClient, - } - } - - // TODO(keegan): All the tests here pass, but Bogdan says this is - // more complicated. I'm opening an issue for this to have him - // review the tests and suggest tests that would break this so - // we can re-write against good tests. His comments as follow: - // The algorithm is a bit more complex than this, I assume there are some tests covering everything. I would keep the order as is. - // The algorithm is: - // If application is NOT part of the family, search by client_ID - // If app is part of the family or if we DO NOT KNOW if it's part of the family, search by family ID, then by client_id (we will know if an app is part of the family after the first token response). - // https://github.com/AzureAD/microsoft-authentication-library-for-dotnet/blob/311fe8b16e7c293462806f397e189a6aa1159769/src/client/Microsoft.Identity.Client/Internal/Requests/Silent/CacheSilentStrategy.cs#L95 - m.contractMu.RLock() - defer m.contractMu.RUnlock() - for _, matcher := range matchers { - for _, rt := range m.contract.RefreshTokensPartition[partitionKey] { - if matcher(rt) { - return rt, nil - } - } - } - - return accesstokens.RefreshToken{}, fmt.Errorf("refresh token not found") -} - -func (m *PartitionedManager) writeRefreshToken(refreshToken accesstokens.RefreshToken, partitionKey string) error { - m.contractMu.Lock() - defer m.contractMu.Unlock() - key := refreshToken.Key() - if m.contract.AccessTokensPartition[partitionKey] == nil { - m.contract.RefreshTokensPartition[partitionKey] = make(map[string]accesstokens.RefreshToken) - } - m.contract.RefreshTokensPartition[partitionKey][key] = refreshToken - return nil -} - -func (m *PartitionedManager) readIDToken(envAliases []string, realm, clientID, userAssertionHash, partitionKey string) (IDToken, error) { - m.contractMu.RLock() - defer m.contractMu.RUnlock() - for _, idt := range m.contract.IDTokensPartition[partitionKey] { - if idt.Realm == realm && idt.ClientID == clientID && idt.UserAssertionHash == userAssertionHash { - if checkAlias(idt.Environment, envAliases) { - return idt, nil - } - } - } - return IDToken{}, fmt.Errorf("token not found") -} - -func (m *PartitionedManager) writeIDToken(idToken IDToken, partitionKey string) error { - key := idToken.Key() - m.contractMu.Lock() - defer m.contractMu.Unlock() - if m.contract.IDTokensPartition[partitionKey] == nil { - m.contract.IDTokensPartition[partitionKey] = make(map[string]IDToken) - } - m.contract.IDTokensPartition[partitionKey][key] = idToken - return nil -} - -func (m *PartitionedManager) readAccount(envAliases []string, realm, UserAssertionHash, partitionKey string) (shared.Account, error) { - m.contractMu.RLock() - defer m.contractMu.RUnlock() - - // You might ask why, if cache.Accounts is a map, we would loop through all of these instead of using a key. - // We only use a map because the storage contract shared between all language implementations says use a map. - // We can't change that. The other is because the keys are made using a specific "env", but here we are allowing - // a match in multiple envs (envAlias). That means we either need to hash each possible keyand do the lookup - // or just statically check. Since the design is to have a storage.Manager per user, the amount of keys stored - // is really low (say 2). Each hash is more expensive than the entire iteration. - for _, acc := range m.contract.AccountsPartition[partitionKey] { - if checkAlias(acc.Environment, envAliases) && acc.UserAssertionHash == UserAssertionHash && acc.Realm == realm { - return acc, nil - } - } - return shared.Account{}, fmt.Errorf("account not found") -} - -func (m *PartitionedManager) writeAccount(account shared.Account, partitionKey string) error { - key := account.Key() - m.contractMu.Lock() - defer m.contractMu.Unlock() - if m.contract.AccountsPartition[partitionKey] == nil { - m.contract.AccountsPartition[partitionKey] = make(map[string]shared.Account) - } - m.contract.AccountsPartition[partitionKey][key] = account - return nil -} - -func (m *PartitionedManager) readAppMetaData(envAliases []string, clientID string) (AppMetaData, error) { - m.contractMu.RLock() - defer m.contractMu.RUnlock() - - for _, app := range m.contract.AppMetaData { - if checkAlias(app.Environment, envAliases) && app.ClientID == clientID { - return app, nil - } - } - return AppMetaData{}, fmt.Errorf("not found") -} - -func (m *PartitionedManager) writeAppMetaData(AppMetaData AppMetaData) error { - key := AppMetaData.Key() - m.contractMu.Lock() - defer m.contractMu.Unlock() - m.contract.AppMetaData[key] = AppMetaData - return nil -} - -// update updates the internal cache object. This is for use in tests, other uses are not -// supported. -func (m *PartitionedManager) update(cache *InMemoryContract) { - m.contractMu.Lock() - defer m.contractMu.Unlock() - m.contract = cache -} - -// Marshal implements cache.Marshaler. -func (m *PartitionedManager) Marshal() ([]byte, error) { - return json.Marshal(m.contract) -} - -// Unmarshal implements cache.Unmarshaler. -func (m *PartitionedManager) Unmarshal(b []byte) error { - m.contractMu.Lock() - defer m.contractMu.Unlock() - - contract := NewInMemoryContract() - - err := json.Unmarshal(b, contract) - if err != nil { - return err - } - - m.contract = contract - - return nil -} - -func getPartitionKeyAccessToken(item AccessToken) string { - if item.UserAssertionHash != "" { - return item.UserAssertionHash - } - return item.HomeAccountID -} - -func getPartitionKeyRefreshToken(item accesstokens.RefreshToken) string { - if item.UserAssertionHash != "" { - return item.UserAssertionHash - } - return item.HomeAccountID -} - -func getPartitionKeyIDToken(item IDToken) string { - return item.HomeAccountID -} - -func getPartitionKeyAccount(item shared.Account) string { - return item.HomeAccountID -} - -func getPartitionKeyIDTokenRead(item AccessToken) string { - return item.HomeAccountID -} diff --git a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/base/internal/storage/storage.go b/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/base/internal/storage/storage.go deleted file mode 100644 index 2221e60c437f..000000000000 --- a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/base/internal/storage/storage.go +++ /dev/null @@ -1,583 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. - -// Package storage holds all cached token information for MSAL. This storage can be -// augmented with third-party extensions to provide persistent storage. In that case, -// reads and writes in upper packages will call Marshal() to take the entire in-memory -// representation and write it to storage and Unmarshal() to update the entire in-memory -// storage with what was in the persistent storage. The persistent storage can only be -// accessed in this way because multiple MSAL clients written in multiple languages can -// access the same storage and must adhere to the same method that was defined -// previously. -package storage - -import ( - "context" - "errors" - "fmt" - "strings" - "sync" - "time" - - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/json" - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth" - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/accesstokens" - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/authority" - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/shared" -) - -// aadInstanceDiscoveryer allows faking in tests. -// It is implemented in production by ops/authority.Client -type aadInstanceDiscoveryer interface { - AADInstanceDiscovery(ctx context.Context, authorityInfo authority.Info) (authority.InstanceDiscoveryResponse, error) -} - -// TokenResponse mimics a token response that was pulled from the cache. -type TokenResponse struct { - RefreshToken accesstokens.RefreshToken - IDToken IDToken // *Credential - AccessToken AccessToken - Account shared.Account -} - -// Manager is an in-memory cache of access tokens, accounts and meta data. This data is -// updated on read/write calls. Unmarshal() replaces all data stored here with whatever -// was given to it on each call. -type Manager struct { - contract *Contract - contractMu sync.RWMutex - requests aadInstanceDiscoveryer // *oauth.Token - - aadCacheMu sync.RWMutex - aadCache map[string]authority.InstanceDiscoveryMetadata -} - -// New is the constructor for Manager. -func New(requests *oauth.Client) *Manager { - m := &Manager{requests: requests, aadCache: make(map[string]authority.InstanceDiscoveryMetadata)} - m.contract = NewContract() - return m -} - -func checkAlias(alias string, aliases []string) bool { - for _, v := range aliases { - if alias == v { - return true - } - } - return false -} - -func isMatchingScopes(scopesOne []string, scopesTwo string) bool { - newScopesTwo := strings.Split(scopesTwo, scopeSeparator) - scopeCounter := 0 - for _, scope := range scopesOne { - for _, otherScope := range newScopesTwo { - if strings.EqualFold(scope, otherScope) { - scopeCounter++ - continue - } - } - } - return scopeCounter == len(scopesOne) -} - -// needsUpgrade returns true if the given key follows the v1.0 schema i.e., -// it contains an uppercase character (v1.1+ keys are all lowercase) -func needsUpgrade(key string) bool { - for _, r := range key { - if 'A' <= r && r <= 'Z' { - return true - } - } - return false -} - -// upgrade a v1.0 cache item by adding a v1.1+ item having the same value and deleting -// the v1.0 item. Callers must hold an exclusive lock on m. -func upgrade[T any](m map[string]T, k string) T { - v1_1Key := strings.ToLower(k) - v, ok := m[k] - if !ok { - // another goroutine did the upgrade while this one was waiting for the write lock - return m[v1_1Key] - } - if v2, ok := m[v1_1Key]; ok { - // cache has an equivalent v1.1+ item, which we prefer because we know it was added - // by a newer version of the module and is therefore more likely to remain valid. - // The v1.0 item may have expired because only v1.0 or earlier would update it. - v = v2 - } else { - // add an equivalent item according to the v1.1 schema - m[v1_1Key] = v - } - delete(m, k) - return v -} - -// Read reads a storage token from the cache if it exists. -func (m *Manager) Read(ctx context.Context, authParameters authority.AuthParams) (TokenResponse, error) { - tr := TokenResponse{} - homeAccountID := authParameters.HomeAccountID - realm := authParameters.AuthorityInfo.Tenant - clientID := authParameters.ClientID - scopes := authParameters.Scopes - authnSchemeKeyID := authParameters.AuthnScheme.KeyID() - tokenType := authParameters.AuthnScheme.AccessTokenType() - - // fetch metadata if instanceDiscovery is enabled - aliases := []string{authParameters.AuthorityInfo.Host} - if !authParameters.AuthorityInfo.InstanceDiscoveryDisabled { - metadata, err := m.getMetadataEntry(ctx, authParameters.AuthorityInfo) - if err != nil { - return TokenResponse{}, err - } - aliases = metadata.Aliases - } - - accessToken := m.readAccessToken(homeAccountID, aliases, realm, clientID, scopes, tokenType, authnSchemeKeyID) - tr.AccessToken = accessToken - - if homeAccountID == "" { - // caller didn't specify a user, so there's no reason to search for an ID or refresh token - return tr, nil - } - // errors returned by read* methods indicate a cache miss and are therefore non-fatal. We continue populating - // TokenResponse fields so that e.g. lack of an ID token doesn't prevent the caller from receiving a refresh token. - idToken, err := m.readIDToken(homeAccountID, aliases, realm, clientID) - if err == nil { - tr.IDToken = idToken - } - - if appMetadata, err := m.readAppMetaData(aliases, clientID); err == nil { - // we need the family ID to identify the correct refresh token, if any - familyID := appMetadata.FamilyID - refreshToken, err := m.readRefreshToken(homeAccountID, aliases, familyID, clientID) - if err == nil { - tr.RefreshToken = refreshToken - } - } - - account, err := m.readAccount(homeAccountID, aliases, realm) - if err == nil { - tr.Account = account - } - return tr, nil -} - -const scopeSeparator = " " - -// Write writes a token response to the cache and returns the account information the token is stored with. -func (m *Manager) Write(authParameters authority.AuthParams, tokenResponse accesstokens.TokenResponse) (shared.Account, error) { - homeAccountID := tokenResponse.HomeAccountID() - environment := authParameters.AuthorityInfo.Host - realm := authParameters.AuthorityInfo.Tenant - clientID := authParameters.ClientID - target := strings.Join(tokenResponse.GrantedScopes.Slice, scopeSeparator) - cachedAt := time.Now() - authnSchemeKeyID := authParameters.AuthnScheme.KeyID() - - var account shared.Account - - if len(tokenResponse.RefreshToken) > 0 { - refreshToken := accesstokens.NewRefreshToken(homeAccountID, environment, clientID, tokenResponse.RefreshToken, tokenResponse.FamilyID) - if err := m.writeRefreshToken(refreshToken); err != nil { - return account, err - } - } - - if len(tokenResponse.AccessToken) > 0 { - accessToken := NewAccessToken( - homeAccountID, - environment, - realm, - clientID, - cachedAt, - tokenResponse.ExpiresOn.T, - tokenResponse.ExtExpiresOn.T, - target, - tokenResponse.AccessToken, - tokenResponse.TokenType, - authnSchemeKeyID, - ) - - // Since we have a valid access token, cache it before moving on. - if err := accessToken.Validate(); err == nil { - if err := m.writeAccessToken(accessToken); err != nil { - return account, err - } - } - } - - idTokenJwt := tokenResponse.IDToken - if !idTokenJwt.IsZero() { - idToken := NewIDToken(homeAccountID, environment, realm, clientID, idTokenJwt.RawToken) - if err := m.writeIDToken(idToken); err != nil { - return shared.Account{}, err - } - - localAccountID := idTokenJwt.LocalAccountID() - authorityType := authParameters.AuthorityInfo.AuthorityType - - preferredUsername := idTokenJwt.UPN - if idTokenJwt.PreferredUsername != "" { - preferredUsername = idTokenJwt.PreferredUsername - } - - account = shared.NewAccount( - homeAccountID, - environment, - realm, - localAccountID, - authorityType, - preferredUsername, - ) - if err := m.writeAccount(account); err != nil { - return shared.Account{}, err - } - } - - AppMetaData := NewAppMetaData(tokenResponse.FamilyID, clientID, environment) - - if err := m.writeAppMetaData(AppMetaData); err != nil { - return shared.Account{}, err - } - return account, nil -} - -func (m *Manager) getMetadataEntry(ctx context.Context, authorityInfo authority.Info) (authority.InstanceDiscoveryMetadata, error) { - md, err := m.aadMetadataFromCache(ctx, authorityInfo) - if err != nil { - // not in the cache, retrieve it - md, err = m.aadMetadata(ctx, authorityInfo) - } - return md, err -} - -func (m *Manager) aadMetadataFromCache(ctx context.Context, authorityInfo authority.Info) (authority.InstanceDiscoveryMetadata, error) { - m.aadCacheMu.RLock() - defer m.aadCacheMu.RUnlock() - metadata, ok := m.aadCache[authorityInfo.Host] - if ok { - return metadata, nil - } - return metadata, errors.New("not found") -} - -func (m *Manager) aadMetadata(ctx context.Context, authorityInfo authority.Info) (authority.InstanceDiscoveryMetadata, error) { - m.aadCacheMu.Lock() - defer m.aadCacheMu.Unlock() - discoveryResponse, err := m.requests.AADInstanceDiscovery(ctx, authorityInfo) - if err != nil { - return authority.InstanceDiscoveryMetadata{}, err - } - - for _, metadataEntry := range discoveryResponse.Metadata { - for _, aliasedAuthority := range metadataEntry.Aliases { - m.aadCache[aliasedAuthority] = metadataEntry - } - } - if _, ok := m.aadCache[authorityInfo.Host]; !ok { - m.aadCache[authorityInfo.Host] = authority.InstanceDiscoveryMetadata{ - PreferredNetwork: authorityInfo.Host, - PreferredCache: authorityInfo.Host, - } - } - return m.aadCache[authorityInfo.Host], nil -} - -func (m *Manager) readAccessToken(homeID string, envAliases []string, realm, clientID string, scopes []string, tokenType, authnSchemeKeyID string) AccessToken { - m.contractMu.RLock() - // TODO: linear search (over a map no less) is slow for a large number (thousands) of tokens. - // this shows up as the dominating node in a profile. for real-world scenarios this likely isn't - // an issue, however if it does become a problem then we know where to look. - for k, at := range m.contract.AccessTokens { - if at.HomeAccountID == homeID && at.Realm == realm && at.ClientID == clientID { - if (strings.EqualFold(at.TokenType, tokenType) && at.AuthnSchemeKeyID == authnSchemeKeyID) || (at.TokenType == "" && (tokenType == "" || tokenType == "Bearer")) { - if checkAlias(at.Environment, envAliases) && isMatchingScopes(scopes, at.Scopes) { - m.contractMu.RUnlock() - if needsUpgrade(k) { - m.contractMu.Lock() - defer m.contractMu.Unlock() - at = upgrade(m.contract.AccessTokens, k) - } - return at - } - } - } - } - m.contractMu.RUnlock() - return AccessToken{} -} - -func (m *Manager) writeAccessToken(accessToken AccessToken) error { - m.contractMu.Lock() - defer m.contractMu.Unlock() - key := accessToken.Key() - m.contract.AccessTokens[key] = accessToken - return nil -} - -func (m *Manager) readRefreshToken(homeID string, envAliases []string, familyID, clientID string) (accesstokens.RefreshToken, error) { - byFamily := func(rt accesstokens.RefreshToken) bool { - return matchFamilyRefreshToken(rt, homeID, envAliases) - } - byClient := func(rt accesstokens.RefreshToken) bool { - return matchClientIDRefreshToken(rt, homeID, envAliases, clientID) - } - - var matchers []func(rt accesstokens.RefreshToken) bool - if familyID == "" { - matchers = []func(rt accesstokens.RefreshToken) bool{ - byClient, byFamily, - } - } else { - matchers = []func(rt accesstokens.RefreshToken) bool{ - byFamily, byClient, - } - } - - // TODO(keegan): All the tests here pass, but Bogdan says this is - // more complicated. I'm opening an issue for this to have him - // review the tests and suggest tests that would break this so - // we can re-write against good tests. His comments as follow: - // The algorithm is a bit more complex than this, I assume there are some tests covering everything. I would keep the order as is. - // The algorithm is: - // If application is NOT part of the family, search by client_ID - // If app is part of the family or if we DO NOT KNOW if it's part of the family, search by family ID, then by client_id (we will know if an app is part of the family after the first token response). - // https://github.com/AzureAD/microsoft-authentication-library-for-dotnet/blob/311fe8b16e7c293462806f397e189a6aa1159769/src/client/Microsoft.Identity.Client/Internal/Requests/Silent/CacheSilentStrategy.cs#L95 - m.contractMu.RLock() - for _, matcher := range matchers { - for k, rt := range m.contract.RefreshTokens { - if matcher(rt) { - m.contractMu.RUnlock() - if needsUpgrade(k) { - m.contractMu.Lock() - defer m.contractMu.Unlock() - rt = upgrade(m.contract.RefreshTokens, k) - } - return rt, nil - } - } - } - - m.contractMu.RUnlock() - return accesstokens.RefreshToken{}, fmt.Errorf("refresh token not found") -} - -func matchFamilyRefreshToken(rt accesstokens.RefreshToken, homeID string, envAliases []string) bool { - return rt.HomeAccountID == homeID && checkAlias(rt.Environment, envAliases) && rt.FamilyID != "" -} - -func matchClientIDRefreshToken(rt accesstokens.RefreshToken, homeID string, envAliases []string, clientID string) bool { - return rt.HomeAccountID == homeID && checkAlias(rt.Environment, envAliases) && rt.ClientID == clientID -} - -func (m *Manager) writeRefreshToken(refreshToken accesstokens.RefreshToken) error { - key := refreshToken.Key() - m.contractMu.Lock() - defer m.contractMu.Unlock() - m.contract.RefreshTokens[key] = refreshToken - return nil -} - -func (m *Manager) readIDToken(homeID string, envAliases []string, realm, clientID string) (IDToken, error) { - m.contractMu.RLock() - for k, idt := range m.contract.IDTokens { - if idt.HomeAccountID == homeID && idt.Realm == realm && idt.ClientID == clientID { - if checkAlias(idt.Environment, envAliases) { - m.contractMu.RUnlock() - if needsUpgrade(k) { - m.contractMu.Lock() - defer m.contractMu.Unlock() - idt = upgrade(m.contract.IDTokens, k) - } - return idt, nil - } - } - } - m.contractMu.RUnlock() - return IDToken{}, fmt.Errorf("token not found") -} - -func (m *Manager) writeIDToken(idToken IDToken) error { - key := idToken.Key() - m.contractMu.Lock() - defer m.contractMu.Unlock() - m.contract.IDTokens[key] = idToken - return nil -} - -func (m *Manager) AllAccounts() []shared.Account { - m.contractMu.RLock() - defer m.contractMu.RUnlock() - - var accounts []shared.Account - for _, v := range m.contract.Accounts { - accounts = append(accounts, v) - } - - return accounts -} - -func (m *Manager) Account(homeAccountID string) shared.Account { - m.contractMu.RLock() - defer m.contractMu.RUnlock() - - for _, v := range m.contract.Accounts { - if v.HomeAccountID == homeAccountID { - return v - } - } - - return shared.Account{} -} - -func (m *Manager) readAccount(homeAccountID string, envAliases []string, realm string) (shared.Account, error) { - m.contractMu.RLock() - - // You might ask why, if cache.Accounts is a map, we would loop through all of these instead of using a key. - // We only use a map because the storage contract shared between all language implementations says use a map. - // We can't change that. The other is because the keys are made using a specific "env", but here we are allowing - // a match in multiple envs (envAlias). That means we either need to hash each possible keyand do the lookup - // or just statically check. Since the design is to have a storage.Manager per user, the amount of keys stored - // is really low (say 2). Each hash is more expensive than the entire iteration. - for k, acc := range m.contract.Accounts { - if acc.HomeAccountID == homeAccountID && checkAlias(acc.Environment, envAliases) && acc.Realm == realm { - m.contractMu.RUnlock() - if needsUpgrade(k) { - m.contractMu.Lock() - defer m.contractMu.Unlock() - acc = upgrade(m.contract.Accounts, k) - } - return acc, nil - } - } - m.contractMu.RUnlock() - return shared.Account{}, fmt.Errorf("account not found") -} - -func (m *Manager) writeAccount(account shared.Account) error { - key := account.Key() - m.contractMu.Lock() - defer m.contractMu.Unlock() - m.contract.Accounts[key] = account - return nil -} - -func (m *Manager) readAppMetaData(envAliases []string, clientID string) (AppMetaData, error) { - m.contractMu.RLock() - for k, app := range m.contract.AppMetaData { - if checkAlias(app.Environment, envAliases) && app.ClientID == clientID { - m.contractMu.RUnlock() - if needsUpgrade(k) { - m.contractMu.Lock() - defer m.contractMu.Unlock() - app = upgrade(m.contract.AppMetaData, k) - } - return app, nil - } - } - m.contractMu.RUnlock() - return AppMetaData{}, fmt.Errorf("not found") -} - -func (m *Manager) writeAppMetaData(AppMetaData AppMetaData) error { - key := AppMetaData.Key() - m.contractMu.Lock() - defer m.contractMu.Unlock() - m.contract.AppMetaData[key] = AppMetaData - return nil -} - -// RemoveAccount removes all the associated ATs, RTs and IDTs from the cache associated with this account. -func (m *Manager) RemoveAccount(account shared.Account, clientID string) { - m.removeRefreshTokens(account.HomeAccountID, account.Environment, clientID) - m.removeAccessTokens(account.HomeAccountID, account.Environment) - m.removeIDTokens(account.HomeAccountID, account.Environment) - m.removeAccounts(account.HomeAccountID, account.Environment) -} - -func (m *Manager) removeRefreshTokens(homeID string, env string, clientID string) { - m.contractMu.Lock() - defer m.contractMu.Unlock() - for key, rt := range m.contract.RefreshTokens { - // Check for RTs associated with the account. - if rt.HomeAccountID == homeID && rt.Environment == env { - // Do RT's app ownership check as a precaution, in case family apps - // and 3rd-party apps share same token cache, although they should not. - if rt.ClientID == clientID || rt.FamilyID != "" { - delete(m.contract.RefreshTokens, key) - } - } - } -} - -func (m *Manager) removeAccessTokens(homeID string, env string) { - m.contractMu.Lock() - defer m.contractMu.Unlock() - for key, at := range m.contract.AccessTokens { - // Remove AT's associated with the account - if at.HomeAccountID == homeID && at.Environment == env { - // # To avoid the complexity of locating sibling family app's AT, we skip AT's app ownership check. - // It means ATs for other apps will also be removed, it is OK because: - // non-family apps are not supposed to share token cache to begin with; - // Even if it happens, we keep other app's RT already, so SSO still works. - delete(m.contract.AccessTokens, key) - } - } -} - -func (m *Manager) removeIDTokens(homeID string, env string) { - m.contractMu.Lock() - defer m.contractMu.Unlock() - for key, idt := range m.contract.IDTokens { - // Remove ID tokens associated with the account. - if idt.HomeAccountID == homeID && idt.Environment == env { - delete(m.contract.IDTokens, key) - } - } -} - -func (m *Manager) removeAccounts(homeID string, env string) { - m.contractMu.Lock() - defer m.contractMu.Unlock() - for key, acc := range m.contract.Accounts { - // Remove the specified account. - if acc.HomeAccountID == homeID && acc.Environment == env { - delete(m.contract.Accounts, key) - } - } -} - -// update updates the internal cache object. This is for use in tests, other uses are not -// supported. -func (m *Manager) update(cache *Contract) { - m.contractMu.Lock() - defer m.contractMu.Unlock() - m.contract = cache -} - -// Marshal implements cache.Marshaler. -func (m *Manager) Marshal() ([]byte, error) { - m.contractMu.RLock() - defer m.contractMu.RUnlock() - return json.Marshal(m.contract) -} - -// Unmarshal implements cache.Unmarshaler. -func (m *Manager) Unmarshal(b []byte) error { - m.contractMu.Lock() - defer m.contractMu.Unlock() - - contract := NewContract() - - err := json.Unmarshal(b, contract) - if err != nil { - return err - } - - m.contract = contract - - return nil -} diff --git a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/exported/exported.go b/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/exported/exported.go deleted file mode 100644 index 7b673e3fe126..000000000000 --- a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/exported/exported.go +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. - -// package exported contains internal types that are re-exported from a public package -package exported - -// AssertionRequestOptions has information required to generate a client assertion -type AssertionRequestOptions struct { - // ClientID identifies the application for which an assertion is requested. Used as the assertion's "iss" and "sub" claims. - ClientID string - - // TokenEndpoint is the intended token endpoint. Used as the assertion's "aud" claim. - TokenEndpoint string -} - -// TokenProviderParameters is the authentication parameters passed to token providers -type TokenProviderParameters struct { - // Claims contains any additional claims requested for the token - Claims string - // CorrelationID of the authentication request - CorrelationID string - // Scopes requested for the token - Scopes []string - // TenantID identifies the tenant in which to authenticate - TenantID string -} - -// TokenProviderResult is the authentication result returned by custom token providers -type TokenProviderResult struct { - // AccessToken is the requested token - AccessToken string - // ExpiresInSeconds is the lifetime of the token in seconds - ExpiresInSeconds int -} diff --git a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/json/design.md b/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/json/design.md deleted file mode 100644 index 09edb01b7e43..000000000000 --- a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/json/design.md +++ /dev/null @@ -1,140 +0,0 @@ -# JSON Package Design -Author: John Doak(jdoak@microsoft.com) - -## Why? - -This project needs a special type of marshal/unmarshal not directly supported -by the encoding/json package. - -The need revolves around a few key wants/needs: -- unmarshal and marshal structs representing JSON messages -- fields in the messgage not in the struct must be maintained when unmarshalled -- those same fields must be marshalled back when encoded again - -The initial version used map[string]interface{} to put in the keys that -were known and then any other keys were put into a field called AdditionalFields. - -This has a few negatives: -- Dual marshaling/unmarshalling is required -- Adding a struct field requires manually adding a key by name to be encoded/decoded from the map (which is a loosely coupled construct), which can lead to bugs that aren't detected or have bad side effects -- Tests can become quickly disconnected if those keys aren't put -in tests as well. So you think you have support working, but you -don't. Existing tests were found that didn't test the marshalling output. -- There is no enforcement that if AdditionalFields is required on one struct, it should be on all containers -that don't have custom marshal/unmarshal. - -This package aims to support our needs by providing custom Marshal()/Unmarshal() functions. - -This prevents all the negatives in the initial solution listed above. However, it does add its own negative: -- Custom encoding/decoding via reflection is messy (as can be seen in encoding/json itself) - -Go proverb: Reflection is never clear -Suggested reading: https://blog.golang.org/laws-of-reflection - -## Important design decisions - -- We don't want to understand all JSON decoding rules -- We don't want to deal with all the quoting, commas, etc on decode -- Need support for json.Marshaler/Unmarshaler, so we can support types like time.Time -- If struct does not implement json.Unmarshaler, it must have AdditionalFields defined -- We only support root level objects that are \*struct or struct - -To faciliate these goals, we will utilize the json.Encoder and json.Decoder. -They provide streaming processing (efficient) and return errors on bad JSON. - -Support for json.Marshaler/Unmarshaler allows for us to use non-basic types -that must be specially encoded/decoded (like time.Time objects). - -We don't support types that can't customer unmarshal or have AdditionalFields -in order to prevent future devs from forgetting that important field and -generating bad return values. - -Support for root level objects of \*struct or struct simply acknowledges the -fact that this is designed only for the purposes listed in the Introduction. -Outside that (like encoding a lone number) should be done with the -regular json package (as it will not have additional fields). - -We don't support a few things on json supported reference types and structs: -- \*map: no need for pointers to maps -- \*slice: no need for pointers to slices -- any further pointers on struct after \*struct - -There should never be a need for this in Go. - -## Design - -## State Machines - -This uses state machine designs that based upon the Rob Pike talk on -lexers and parsers: https://www.youtube.com/watch?v=HxaD_trXwRE - -This is the most common pattern for state machines in Go and -the model to follow closesly when dealing with streaming -processing of textual data. - -Our state machines are based on the type: -```go -type stateFn func() (stateFn, error) -``` - -The state machine itself is simply a struct that has methods that -satisfy stateFn. - -Our state machines have a few standard calls -- run(): runs the state machine -- start(): always the first stateFn to be called - -All state machines have the following logic: -* run() is called -* start() is called and returns the next stateFn or error -* stateFn is called - - If returned stateFn(next state) is non-nil, call it - - If error is non-nil, run() returns the error - - If stateFn == nil and err == nil, run() return err == nil - -## Supporting types - -Marshalling/Unmarshalling must support(within top level struct): -- struct -- \*struct -- []struct -- []\*struct -- []map[string]structContainer -- [][]structContainer - -**Term note:** structContainer == type that has a struct or \*struct inside it - -We specifically do not support []interface or map[string]interface -where the interface value would hold some value with a struct in it. - -Those will still marshal/unmarshal, but without support for -AdditionalFields. - -## Marshalling - -The marshalling design will be based around a statemachine design. - -The basic logic is as follows: - -* If struct has custom marshaller, call it and return -* If struct has field "AdditionalFields", it must be a map[string]interface{} -* If struct does not have "AdditionalFields", give an error -* Get struct tag detailing json names to go names, create mapping -* For each public field name - - Write field name out - - If field value is a struct, recursively call our state machine - - Otherwise, use the json.Encoder to write out the value - -## Unmarshalling - -The unmarshalling desin is also based around a statemachine design. The -basic logic is as follows: - -* If struct has custom marhaller, call it -* If struct has field "AdditionalFields", it must be a map[string]interface{} -* Get struct tag detailing json names to go names, create mapping -* For each key found - - If key exists, - - If value is basic type, extract value into struct field using Decoder - - If value is struct type, recursively call statemachine - - If key doesn't exist, add it to AdditionalFields if it exists using Decoder diff --git a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/json/json.go b/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/json/json.go deleted file mode 100644 index 2238521f5f91..000000000000 --- a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/json/json.go +++ /dev/null @@ -1,184 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. - -// Package json provide functions for marshalling an unmarshalling types to JSON. These functions are meant to -// be utilized inside of structs that implement json.Unmarshaler and json.Marshaler interfaces. -// This package provides the additional functionality of writing fields that are not in the struct when marshalling -// to a field called AdditionalFields if that field exists and is a map[string]interface{}. -// When marshalling, if the struct has all the same prerequisites, it will uses the keys in AdditionalFields as -// extra fields. This package uses encoding/json underneath. -package json - -import ( - "bytes" - "encoding/json" - "fmt" - "reflect" - "strings" -) - -const addField = "AdditionalFields" -const ( - marshalJSON = "MarshalJSON" - unmarshalJSON = "UnmarshalJSON" -) - -var ( - leftBrace = []byte("{")[0] - rightBrace = []byte("}")[0] - comma = []byte(",")[0] - leftParen = []byte("[")[0] - rightParen = []byte("]")[0] -) - -var mapStrInterType = reflect.TypeOf(map[string]interface{}{}) - -// stateFn defines a state machine function. This will be used in all state -// machines in this package. -type stateFn func() (stateFn, error) - -// Marshal is used to marshal a type into its JSON representation. It -// wraps the stdlib calls in order to marshal a struct or *struct so -// that a field called "AdditionalFields" of type map[string]interface{} -// with "-" used inside struct tag `json:"-"` can be marshalled as if -// they were fields within the struct. -func Marshal(i interface{}) ([]byte, error) { - buff := bytes.Buffer{} - enc := json.NewEncoder(&buff) - enc.SetEscapeHTML(false) - enc.SetIndent("", "") - - v := reflect.ValueOf(i) - if v.Kind() != reflect.Ptr && v.CanAddr() { - v = v.Addr() - } - err := marshalStruct(v, &buff, enc) - if err != nil { - return nil, err - } - return buff.Bytes(), nil -} - -// Unmarshal unmarshals a []byte representing JSON into i, which must be a *struct. In addition, if the struct has -// a field called AdditionalFields of type map[string]interface{}, JSON data representing fields not in the struct -// will be written as key/value pairs to AdditionalFields. -func Unmarshal(b []byte, i interface{}) error { - if len(b) == 0 { - return nil - } - - jdec := json.NewDecoder(bytes.NewBuffer(b)) - jdec.UseNumber() - return unmarshalStruct(jdec, i) -} - -// MarshalRaw marshals i into a json.RawMessage. If I cannot be marshalled, -// this will panic. This is exposed to help test AdditionalField values -// which are stored as json.RawMessage. -func MarshalRaw(i interface{}) json.RawMessage { - b, err := json.Marshal(i) - if err != nil { - panic(err) - } - return json.RawMessage(b) -} - -// isDelim simply tests to see if a json.Token is a delimeter. -func isDelim(got json.Token) bool { - switch got.(type) { - case json.Delim: - return true - } - return false -} - -// delimIs tests got to see if it is want. -func delimIs(got json.Token, want rune) bool { - switch v := got.(type) { - case json.Delim: - if v == json.Delim(want) { - return true - } - } - return false -} - -// hasMarshalJSON will determine if the value or a pointer to this value has -// the MarshalJSON method. -func hasMarshalJSON(v reflect.Value) bool { - if method := v.MethodByName(marshalJSON); method.Kind() != reflect.Invalid { - _, ok := v.Interface().(json.Marshaler) - return ok - } - - if v.Kind() == reflect.Ptr { - v = v.Elem() - } else { - if !v.CanAddr() { - return false - } - v = v.Addr() - } - - if method := v.MethodByName(marshalJSON); method.Kind() != reflect.Invalid { - _, ok := v.Interface().(json.Marshaler) - return ok - } - return false -} - -// callMarshalJSON will call MarshalJSON() method on the value or a pointer to this value. -// This will panic if the method is not defined. -func callMarshalJSON(v reflect.Value) ([]byte, error) { - if method := v.MethodByName(marshalJSON); method.Kind() != reflect.Invalid { - marsh := v.Interface().(json.Marshaler) - return marsh.MarshalJSON() - } - - if v.Kind() == reflect.Ptr { - v = v.Elem() - } else { - if v.CanAddr() { - v = v.Addr() - } - } - - if method := v.MethodByName(unmarshalJSON); method.Kind() != reflect.Invalid { - marsh := v.Interface().(json.Marshaler) - return marsh.MarshalJSON() - } - - panic(fmt.Sprintf("callMarshalJSON called on type %T that does not have MarshalJSON defined", v.Interface())) -} - -// hasUnmarshalJSON will determine if the value or a pointer to this value has -// the UnmarshalJSON method. -func hasUnmarshalJSON(v reflect.Value) bool { - // You can't unmarshal on a non-pointer type. - if v.Kind() != reflect.Ptr { - if !v.CanAddr() { - return false - } - v = v.Addr() - } - - if method := v.MethodByName(unmarshalJSON); method.Kind() != reflect.Invalid { - _, ok := v.Interface().(json.Unmarshaler) - return ok - } - - return false -} - -// hasOmitEmpty indicates if the field has instructed us to not output -// the field if omitempty is set on the tag. tag is the string -// returned by reflect.StructField.Tag().Get(). -func hasOmitEmpty(tag string) bool { - sl := strings.Split(tag, ",") - for _, str := range sl { - if str == "omitempty" { - return true - } - } - return false -} diff --git a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/json/mapslice.go b/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/json/mapslice.go deleted file mode 100644 index cef442f25c86..000000000000 --- a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/json/mapslice.go +++ /dev/null @@ -1,333 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. - -package json - -import ( - "encoding/json" - "fmt" - "reflect" -) - -// unmarshalMap unmarshal's a map. -func unmarshalMap(dec *json.Decoder, m reflect.Value) error { - if m.Kind() != reflect.Ptr || m.Elem().Kind() != reflect.Map { - panic("unmarshalMap called on non-*map value") - } - mapValueType := m.Elem().Type().Elem() - walk := mapWalk{dec: dec, m: m, valueType: mapValueType} - if err := walk.run(); err != nil { - return err - } - return nil -} - -type mapWalk struct { - dec *json.Decoder - key string - m reflect.Value - valueType reflect.Type -} - -// run runs our decoder state machine. -func (m *mapWalk) run() error { - var state = m.start - var err error - for { - state, err = state() - if err != nil { - return err - } - if state == nil { - return nil - } - } -} - -func (m *mapWalk) start() (stateFn, error) { - // maps can have custom unmarshaler's. - if hasUnmarshalJSON(m.m) { - err := m.dec.Decode(m.m.Interface()) - if err != nil { - return nil, err - } - return nil, nil - } - - // We only want to use this if the map value is: - // *struct/struct/map/slice - // otherwise use standard decode - t, _ := m.valueBaseType() - switch t.Kind() { - case reflect.Struct, reflect.Map, reflect.Slice: - delim, err := m.dec.Token() - if err != nil { - return nil, err - } - // This indicates the value was set to JSON null. - if delim == nil { - return nil, nil - } - if !delimIs(delim, '{') { - return nil, fmt.Errorf("Unmarshal expected opening {, received %v", delim) - } - return m.next, nil - case reflect.Ptr: - return nil, fmt.Errorf("do not support maps with values of '**type' or '*reference") - } - - // This is a basic map type, so just use Decode(). - if err := m.dec.Decode(m.m.Interface()); err != nil { - return nil, err - } - - return nil, nil -} - -func (m *mapWalk) next() (stateFn, error) { - if m.dec.More() { - key, err := m.dec.Token() - if err != nil { - return nil, err - } - m.key = key.(string) - return m.storeValue, nil - } - // No more entries, so remove final }. - _, err := m.dec.Token() - if err != nil { - return nil, err - } - return nil, nil -} - -func (m *mapWalk) storeValue() (stateFn, error) { - v := m.valueType - for { - switch v.Kind() { - case reflect.Ptr: - v = v.Elem() - continue - case reflect.Struct: - return m.storeStruct, nil - case reflect.Map: - return m.storeMap, nil - case reflect.Slice: - return m.storeSlice, nil - } - return nil, fmt.Errorf("bug: mapWalk.storeValue() called on unsupported type: %v", v.Kind()) - } -} - -func (m *mapWalk) storeStruct() (stateFn, error) { - v := newValue(m.valueType) - if err := unmarshalStruct(m.dec, v.Interface()); err != nil { - return nil, err - } - - if m.valueType.Kind() == reflect.Ptr { - m.m.Elem().SetMapIndex(reflect.ValueOf(m.key), v) - return m.next, nil - } - m.m.Elem().SetMapIndex(reflect.ValueOf(m.key), v.Elem()) - - return m.next, nil -} - -func (m *mapWalk) storeMap() (stateFn, error) { - v := reflect.MakeMap(m.valueType) - ptr := newValue(v.Type()) - ptr.Elem().Set(v) - if err := unmarshalMap(m.dec, ptr); err != nil { - return nil, err - } - - m.m.Elem().SetMapIndex(reflect.ValueOf(m.key), v) - - return m.next, nil -} - -func (m *mapWalk) storeSlice() (stateFn, error) { - v := newValue(m.valueType) - if err := unmarshalSlice(m.dec, v); err != nil { - return nil, err - } - - m.m.Elem().SetMapIndex(reflect.ValueOf(m.key), v.Elem()) - - return m.next, nil -} - -// valueType returns the underlying Type. So a *struct would yield -// struct, etc... -func (m *mapWalk) valueBaseType() (reflect.Type, bool) { - ptr := false - v := m.valueType - if v.Kind() == reflect.Ptr { - ptr = true - v = v.Elem() - } - return v, ptr -} - -// unmarshalSlice unmarshal's the next value, which must be a slice, into -// ptrSlice, which must be a pointer to a slice. newValue() can be use to -// create the slice. -func unmarshalSlice(dec *json.Decoder, ptrSlice reflect.Value) error { - if ptrSlice.Kind() != reflect.Ptr || ptrSlice.Elem().Kind() != reflect.Slice { - panic("unmarshalSlice called on non-*[]slice value") - } - sliceValueType := ptrSlice.Elem().Type().Elem() - walk := sliceWalk{ - dec: dec, - s: ptrSlice, - valueType: sliceValueType, - } - if err := walk.run(); err != nil { - return err - } - - return nil -} - -type sliceWalk struct { - dec *json.Decoder - s reflect.Value // *[]slice - valueType reflect.Type -} - -// run runs our decoder state machine. -func (s *sliceWalk) run() error { - var state = s.start - var err error - for { - state, err = state() - if err != nil { - return err - } - if state == nil { - return nil - } - } -} - -func (s *sliceWalk) start() (stateFn, error) { - // slices can have custom unmarshaler's. - if hasUnmarshalJSON(s.s) { - err := s.dec.Decode(s.s.Interface()) - if err != nil { - return nil, err - } - return nil, nil - } - - // We only want to use this if the slice value is: - // []*struct/[]struct/[]map/[]slice - // otherwise use standard decode - t := s.valueBaseType() - - switch t.Kind() { - case reflect.Ptr: - return nil, fmt.Errorf("cannot unmarshal into a ** or *") - case reflect.Struct, reflect.Map, reflect.Slice: - delim, err := s.dec.Token() - if err != nil { - return nil, err - } - // This indicates the value was set to nil. - if delim == nil { - return nil, nil - } - if !delimIs(delim, '[') { - return nil, fmt.Errorf("Unmarshal expected opening [, received %v", delim) - } - return s.next, nil - } - - if err := s.dec.Decode(s.s.Interface()); err != nil { - return nil, err - } - return nil, nil -} - -func (s *sliceWalk) next() (stateFn, error) { - if s.dec.More() { - return s.storeValue, nil - } - // Nothing left in the slice, remove closing ] - _, err := s.dec.Token() - return nil, err -} - -func (s *sliceWalk) storeValue() (stateFn, error) { - t := s.valueBaseType() - switch t.Kind() { - case reflect.Ptr: - return nil, fmt.Errorf("do not support 'pointer to pointer' or 'pointer to reference' types") - case reflect.Struct: - return s.storeStruct, nil - case reflect.Map: - return s.storeMap, nil - case reflect.Slice: - return s.storeSlice, nil - } - return nil, fmt.Errorf("bug: sliceWalk.storeValue() called on unsupported type: %v", t.Kind()) -} - -func (s *sliceWalk) storeStruct() (stateFn, error) { - v := newValue(s.valueType) - if err := unmarshalStruct(s.dec, v.Interface()); err != nil { - return nil, err - } - - if s.valueType.Kind() == reflect.Ptr { - s.s.Elem().Set(reflect.Append(s.s.Elem(), v)) - return s.next, nil - } - - s.s.Elem().Set(reflect.Append(s.s.Elem(), v.Elem())) - return s.next, nil -} - -func (s *sliceWalk) storeMap() (stateFn, error) { - v := reflect.MakeMap(s.valueType) - ptr := newValue(v.Type()) - ptr.Elem().Set(v) - - if err := unmarshalMap(s.dec, ptr); err != nil { - return nil, err - } - - s.s.Elem().Set(reflect.Append(s.s.Elem(), v)) - - return s.next, nil -} - -func (s *sliceWalk) storeSlice() (stateFn, error) { - v := newValue(s.valueType) - if err := unmarshalSlice(s.dec, v); err != nil { - return nil, err - } - - s.s.Elem().Set(reflect.Append(s.s.Elem(), v.Elem())) - - return s.next, nil -} - -// valueType returns the underlying Type. So a *struct would yield -// struct, etc... -func (s *sliceWalk) valueBaseType() reflect.Type { - v := s.valueType - if v.Kind() == reflect.Ptr { - v = v.Elem() - } - return v -} - -// newValue() returns a new *type that represents type passed. -func newValue(valueType reflect.Type) reflect.Value { - if valueType.Kind() == reflect.Ptr { - return reflect.New(valueType.Elem()) - } - return reflect.New(valueType) -} diff --git a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/json/marshal.go b/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/json/marshal.go deleted file mode 100644 index df5dc6e11b50..000000000000 --- a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/json/marshal.go +++ /dev/null @@ -1,346 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. - -package json - -import ( - "bytes" - "encoding/json" - "fmt" - "reflect" - "unicode" -) - -// marshalStruct takes in i, which must be a *struct or struct and marshals its content -// as JSON into buff (sometimes with writes to buff directly, sometimes via enc). -// This call is recursive for all fields of *struct or struct type. -func marshalStruct(v reflect.Value, buff *bytes.Buffer, enc *json.Encoder) error { - if v.Kind() == reflect.Ptr { - v = v.Elem() - } - // We only care about custom Marshalling a struct. - if v.Kind() != reflect.Struct { - return fmt.Errorf("bug: marshal() received a non *struct or struct, received type %T", v.Interface()) - } - - if hasMarshalJSON(v) { - b, err := callMarshalJSON(v) - if err != nil { - return err - } - buff.Write(b) - return nil - } - - t := v.Type() - - // If it has an AdditionalFields field make sure its the right type. - f := v.FieldByName(addField) - if f.Kind() != reflect.Invalid { - if f.Kind() != reflect.Map { - return fmt.Errorf("type %T has field 'AdditionalFields' that is not a map[string]interface{}", v.Interface()) - } - if !f.Type().AssignableTo(mapStrInterType) { - return fmt.Errorf("type %T has field 'AdditionalFields' that is not a map[string]interface{}", v.Interface()) - } - } - - translator, err := findFields(v) - if err != nil { - return err - } - - buff.WriteByte(leftBrace) - for x := 0; x < v.NumField(); x++ { - field := v.Field(x) - - // We don't access private fields. - if unicode.IsLower(rune(t.Field(x).Name[0])) { - continue - } - - if t.Field(x).Name == addField { - if v.Field(x).Len() > 0 { - if err := writeAddFields(field.Interface(), buff, enc); err != nil { - return err - } - buff.WriteByte(comma) - } - continue - } - - // If they have omitempty set, we don't write out the field if - // it is the zero value. - if hasOmitEmpty(t.Field(x).Tag.Get("json")) { - if v.Field(x).IsZero() { - continue - } - } - - // Write out the field name part. - jsonName := translator.jsonName(t.Field(x).Name) - buff.WriteString(fmt.Sprintf("%q:", jsonName)) - - if field.Kind() == reflect.Ptr { - field = field.Elem() - } - - if err := marshalStructField(field, buff, enc); err != nil { - return err - } - } - - buff.Truncate(buff.Len() - 1) // Remove final comma - buff.WriteByte(rightBrace) - - return nil -} - -func marshalStructField(field reflect.Value, buff *bytes.Buffer, enc *json.Encoder) error { - // Determine if we need a trailing comma. - defer buff.WriteByte(comma) - - switch field.Kind() { - // If it was a *struct or struct, we need to recursively all marshal(). - case reflect.Struct: - if field.CanAddr() { - field = field.Addr() - } - return marshalStruct(field, buff, enc) - case reflect.Map: - return marshalMap(field, buff, enc) - case reflect.Slice: - return marshalSlice(field, buff, enc) - } - - // It is just a basic type, so encode it. - if err := enc.Encode(field.Interface()); err != nil { - return err - } - buff.Truncate(buff.Len() - 1) // Remove Encode() added \n - - return nil -} - -func marshalMap(v reflect.Value, buff *bytes.Buffer, enc *json.Encoder) error { - if v.Kind() != reflect.Map { - return fmt.Errorf("bug: marshalMap() called on %T", v.Interface()) - } - if v.Len() == 0 { - buff.WriteByte(leftBrace) - buff.WriteByte(rightBrace) - return nil - } - encoder := mapEncode{m: v, buff: buff, enc: enc} - return encoder.run() -} - -type mapEncode struct { - m reflect.Value - buff *bytes.Buffer - enc *json.Encoder - - valueBaseType reflect.Type -} - -// run runs our encoder state machine. -func (m *mapEncode) run() error { - var state = m.start - var err error - for { - state, err = state() - if err != nil { - return err - } - if state == nil { - return nil - } - } -} - -func (m *mapEncode) start() (stateFn, error) { - if hasMarshalJSON(m.m) { - b, err := callMarshalJSON(m.m) - if err != nil { - return nil, err - } - m.buff.Write(b) - return nil, nil - } - - valueBaseType := m.m.Type().Elem() - if valueBaseType.Kind() == reflect.Ptr { - valueBaseType = valueBaseType.Elem() - } - m.valueBaseType = valueBaseType - - switch valueBaseType.Kind() { - case reflect.Ptr: - return nil, fmt.Errorf("Marshal does not support ** or *") - case reflect.Struct, reflect.Map, reflect.Slice: - return m.encode, nil - } - - // If the map value doesn't have a struct/map/slice, just Encode() it. - if err := m.enc.Encode(m.m.Interface()); err != nil { - return nil, err - } - m.buff.Truncate(m.buff.Len() - 1) // Remove Encode() added \n - return nil, nil -} - -func (m *mapEncode) encode() (stateFn, error) { - m.buff.WriteByte(leftBrace) - - iter := m.m.MapRange() - for iter.Next() { - // Write the key. - k := iter.Key() - m.buff.WriteString(fmt.Sprintf("%q:", k.String())) - - v := iter.Value() - switch m.valueBaseType.Kind() { - case reflect.Struct: - if v.CanAddr() { - v = v.Addr() - } - if err := marshalStruct(v, m.buff, m.enc); err != nil { - return nil, err - } - case reflect.Map: - if err := marshalMap(v, m.buff, m.enc); err != nil { - return nil, err - } - case reflect.Slice: - if err := marshalSlice(v, m.buff, m.enc); err != nil { - return nil, err - } - default: - panic(fmt.Sprintf("critical bug: mapEncode.encode() called with value base type: %v", m.valueBaseType.Kind())) - } - m.buff.WriteByte(comma) - } - m.buff.Truncate(m.buff.Len() - 1) // Remove final comma - m.buff.WriteByte(rightBrace) - - return nil, nil -} - -func marshalSlice(v reflect.Value, buff *bytes.Buffer, enc *json.Encoder) error { - if v.Kind() != reflect.Slice { - return fmt.Errorf("bug: marshalSlice() called on %T", v.Interface()) - } - if v.Len() == 0 { - buff.WriteByte(leftParen) - buff.WriteByte(rightParen) - return nil - } - encoder := sliceEncode{s: v, buff: buff, enc: enc} - return encoder.run() -} - -type sliceEncode struct { - s reflect.Value - buff *bytes.Buffer - enc *json.Encoder - - valueBaseType reflect.Type -} - -// run runs our encoder state machine. -func (s *sliceEncode) run() error { - var state = s.start - var err error - for { - state, err = state() - if err != nil { - return err - } - if state == nil { - return nil - } - } -} - -func (s *sliceEncode) start() (stateFn, error) { - if hasMarshalJSON(s.s) { - b, err := callMarshalJSON(s.s) - if err != nil { - return nil, err - } - s.buff.Write(b) - return nil, nil - } - - valueBaseType := s.s.Type().Elem() - if valueBaseType.Kind() == reflect.Ptr { - valueBaseType = valueBaseType.Elem() - } - s.valueBaseType = valueBaseType - - switch valueBaseType.Kind() { - case reflect.Ptr: - return nil, fmt.Errorf("Marshal does not support ** or *") - case reflect.Struct, reflect.Map, reflect.Slice: - return s.encode, nil - } - - // If the map value doesn't have a struct/map/slice, just Encode() it. - if err := s.enc.Encode(s.s.Interface()); err != nil { - return nil, err - } - s.buff.Truncate(s.buff.Len() - 1) // Remove Encode added \n - - return nil, nil -} - -func (s *sliceEncode) encode() (stateFn, error) { - s.buff.WriteByte(leftParen) - for i := 0; i < s.s.Len(); i++ { - v := s.s.Index(i) - switch s.valueBaseType.Kind() { - case reflect.Struct: - if v.CanAddr() { - v = v.Addr() - } - if err := marshalStruct(v, s.buff, s.enc); err != nil { - return nil, err - } - case reflect.Map: - if err := marshalMap(v, s.buff, s.enc); err != nil { - return nil, err - } - case reflect.Slice: - if err := marshalSlice(v, s.buff, s.enc); err != nil { - return nil, err - } - default: - panic(fmt.Sprintf("critical bug: mapEncode.encode() called with value base type: %v", s.valueBaseType.Kind())) - } - s.buff.WriteByte(comma) - } - s.buff.Truncate(s.buff.Len() - 1) // Remove final comma - s.buff.WriteByte(rightParen) - return nil, nil -} - -// writeAddFields writes the AdditionalFields struct field out to JSON as field -// values. i must be a map[string]interface{} or this will panic. -func writeAddFields(i interface{}, buff *bytes.Buffer, enc *json.Encoder) error { - m := i.(map[string]interface{}) - - x := 0 - for k, v := range m { - buff.WriteString(fmt.Sprintf("%q:", k)) - if err := enc.Encode(v); err != nil { - return err - } - buff.Truncate(buff.Len() - 1) // Remove Encode() added \n - - if x+1 != len(m) { - buff.WriteByte(comma) - } - x++ - } - return nil -} diff --git a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/json/struct.go b/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/json/struct.go deleted file mode 100644 index 07751544a282..000000000000 --- a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/json/struct.go +++ /dev/null @@ -1,290 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. - -package json - -import ( - "encoding/json" - "fmt" - "reflect" - "strings" -) - -func unmarshalStruct(jdec *json.Decoder, i interface{}) error { - v := reflect.ValueOf(i) - if v.Kind() != reflect.Ptr { - return fmt.Errorf("Unmarshal() received type %T, which is not a *struct", i) - } - v = v.Elem() - if v.Kind() != reflect.Struct { - return fmt.Errorf("Unmarshal() received type %T, which is not a *struct", i) - } - - if hasUnmarshalJSON(v) { - // Indicates that this type has a custom Unmarshaler. - return jdec.Decode(v.Addr().Interface()) - } - - f := v.FieldByName(addField) - if f.Kind() == reflect.Invalid { - return fmt.Errorf("Unmarshal(%T) only supports structs that have the field AdditionalFields or implements json.Unmarshaler", i) - } - - if f.Kind() != reflect.Map || !f.Type().AssignableTo(mapStrInterType) { - return fmt.Errorf("type %T has field 'AdditionalFields' that is not a map[string]interface{}", i) - } - - dec := newDecoder(jdec, v) - return dec.run() -} - -type decoder struct { - dec *json.Decoder - value reflect.Value // This will be a reflect.Struct - translator translateFields - key string -} - -func newDecoder(dec *json.Decoder, value reflect.Value) *decoder { - return &decoder{value: value, dec: dec} -} - -// run runs our decoder state machine. -func (d *decoder) run() error { - var state = d.start - var err error - for { - state, err = state() - if err != nil { - return err - } - if state == nil { - return nil - } - } -} - -// start looks for our opening delimeter '{' and then transitions to looping through our fields. -func (d *decoder) start() (stateFn, error) { - var err error - d.translator, err = findFields(d.value) - if err != nil { - return nil, err - } - - delim, err := d.dec.Token() - if err != nil { - return nil, err - } - if !delimIs(delim, '{') { - return nil, fmt.Errorf("Unmarshal expected opening {, received %v", delim) - } - - return d.next, nil -} - -// next gets the next struct field name from the raw json or stops the machine if we get our closing }. -func (d *decoder) next() (stateFn, error) { - if !d.dec.More() { - // Remove the closing }. - if _, err := d.dec.Token(); err != nil { - return nil, err - } - return nil, nil - } - - key, err := d.dec.Token() - if err != nil { - return nil, err - } - - d.key = key.(string) - return d.storeValue, nil -} - -// storeValue takes the next value and stores it our struct. If the field can't be found -// in the struct, it pushes the operation to storeAdditional(). -func (d *decoder) storeValue() (stateFn, error) { - goName := d.translator.goName(d.key) - if goName == "" { - goName = d.key - } - - // We don't have the field in the struct, so it goes in AdditionalFields. - f := d.value.FieldByName(goName) - if f.Kind() == reflect.Invalid { - return d.storeAdditional, nil - } - - // Indicates that this type has a custom Unmarshaler. - if hasUnmarshalJSON(f) { - err := d.dec.Decode(f.Addr().Interface()) - if err != nil { - return nil, err - } - return d.next, nil - } - - t, isPtr, err := fieldBaseType(d.value, goName) - if err != nil { - return nil, fmt.Errorf("type(%s) had field(%s) %w", d.value.Type().Name(), goName, err) - } - - switch t.Kind() { - // We need to recursively call ourselves on any *struct or struct. - case reflect.Struct: - if isPtr { - if f.IsNil() { - f.Set(reflect.New(t)) - } - } else { - f = f.Addr() - } - if err := unmarshalStruct(d.dec, f.Interface()); err != nil { - return nil, err - } - return d.next, nil - case reflect.Map: - v := reflect.MakeMap(f.Type()) - ptr := newValue(f.Type()) - ptr.Elem().Set(v) - if err := unmarshalMap(d.dec, ptr); err != nil { - return nil, err - } - f.Set(ptr.Elem()) - return d.next, nil - case reflect.Slice: - v := reflect.MakeSlice(f.Type(), 0, 0) - ptr := newValue(f.Type()) - ptr.Elem().Set(v) - if err := unmarshalSlice(d.dec, ptr); err != nil { - return nil, err - } - f.Set(ptr.Elem()) - return d.next, nil - } - - if !isPtr { - f = f.Addr() - } - - // For values that are pointers, we need them to be non-nil in order - // to decode into them. - if f.IsNil() { - f.Set(reflect.New(t)) - } - - if err := d.dec.Decode(f.Interface()); err != nil { - return nil, err - } - - return d.next, nil -} - -// storeAdditional pushes the key/value into our .AdditionalFields map. -func (d *decoder) storeAdditional() (stateFn, error) { - rw := json.RawMessage{} - if err := d.dec.Decode(&rw); err != nil { - return nil, err - } - field := d.value.FieldByName(addField) - if field.IsNil() { - field.Set(reflect.MakeMap(field.Type())) - } - field.SetMapIndex(reflect.ValueOf(d.key), reflect.ValueOf(rw)) - return d.next, nil -} - -func fieldBaseType(v reflect.Value, fieldName string) (t reflect.Type, isPtr bool, err error) { - sf, ok := v.Type().FieldByName(fieldName) - if !ok { - return nil, false, fmt.Errorf("bug: fieldBaseType() lookup of field(%s) on type(%s): do not have field", fieldName, v.Type().Name()) - } - t = sf.Type - if t.Kind() == reflect.Ptr { - t = t.Elem() - isPtr = true - } - if t.Kind() == reflect.Ptr { - return nil, isPtr, fmt.Errorf("received pointer to pointer type, not supported") - } - return t, isPtr, nil -} - -type translateField struct { - jsonName string - goName string -} - -// translateFields is a list of translateFields with a handy lookup method. -type translateFields []translateField - -// goName loops through a list of fields looking for one contaning the jsonName and -// returning the goName. If not found, returns the empty string. -// Note: not a map because at this size slices are faster even in tight loops. -func (t translateFields) goName(jsonName string) string { - for _, entry := range t { - if entry.jsonName == jsonName { - return entry.goName - } - } - return "" -} - -// jsonName loops through a list of fields looking for one contaning the goName and -// returning the jsonName. If not found, returns the empty string. -// Note: not a map because at this size slices are faster even in tight loops. -func (t translateFields) jsonName(goName string) string { - for _, entry := range t { - if entry.goName == goName { - return entry.jsonName - } - } - return "" -} - -var umarshalerType = reflect.TypeOf((*json.Unmarshaler)(nil)).Elem() - -// findFields parses a struct and writes the field tags for lookup. It will return an error -// if any field has a type of *struct or struct that does not implement json.Marshaler. -func findFields(v reflect.Value) (translateFields, error) { - if v.Kind() == reflect.Ptr { - v = v.Elem() - } - if v.Kind() != reflect.Struct { - return nil, fmt.Errorf("findFields received a %s type, expected *struct or struct", v.Type().Name()) - } - tfs := make([]translateField, 0, v.NumField()) - for i := 0; i < v.NumField(); i++ { - tf := translateField{ - goName: v.Type().Field(i).Name, - jsonName: parseTag(v.Type().Field(i).Tag.Get("json")), - } - switch tf.jsonName { - case "", "-": - tf.jsonName = tf.goName - } - tfs = append(tfs, tf) - - f := v.Field(i) - if f.Kind() == reflect.Ptr { - f = f.Elem() - } - if f.Kind() == reflect.Struct { - if f.Type().Implements(umarshalerType) { - return nil, fmt.Errorf("struct type %q which has field %q which "+ - "doesn't implement json.Unmarshaler", v.Type().Name(), v.Type().Field(i).Name) - } - } - } - return tfs, nil -} - -// parseTag just returns the first entry in the tag. tag is the string -// returned by reflect.StructField.Tag().Get(). -func parseTag(tag string) string { - if idx := strings.Index(tag, ","); idx != -1 { - return tag[:idx] - } - return tag -} diff --git a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/json/types/time/time.go b/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/json/types/time/time.go deleted file mode 100644 index a1c99621e9fc..000000000000 --- a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/json/types/time/time.go +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. - -// Package time provides for custom types to translate time from JSON and other formats -// into time.Time objects. -package time - -import ( - "fmt" - "strconv" - "strings" - "time" -) - -// Unix provides a type that can marshal and unmarshal a string representation -// of the unix epoch into a time.Time object. -type Unix struct { - T time.Time -} - -// MarshalJSON implements encoding/json.MarshalJSON(). -func (u Unix) MarshalJSON() ([]byte, error) { - if u.T.IsZero() { - return []byte(""), nil - } - return []byte(fmt.Sprintf("%q", strconv.FormatInt(u.T.Unix(), 10))), nil -} - -// UnmarshalJSON implements encoding/json.UnmarshalJSON(). -func (u *Unix) UnmarshalJSON(b []byte) error { - i, err := strconv.Atoi(strings.Trim(string(b), `"`)) - if err != nil { - return fmt.Errorf("unix time(%s) could not be converted from string to int: %w", string(b), err) - } - u.T = time.Unix(int64(i), 0) - return nil -} - -// DurationTime provides a type that can marshal and unmarshal a string representation -// of a duration from now into a time.Time object. -// Note: I'm not sure this is the best way to do this. What happens is we get a field -// called "expires_in" that represents the seconds from now that this expires. We -// turn that into a time we call .ExpiresOn. But maybe we should be recording -// when the token was received at .TokenRecieved and .ExpiresIn should remain as a duration. -// Then we could have a method called ExpiresOn(). Honestly, the whole thing is -// bad because the server doesn't return a concrete time. I think this is -// cleaner, but its not great either. -type DurationTime struct { - T time.Time -} - -// MarshalJSON implements encoding/json.MarshalJSON(). -func (d DurationTime) MarshalJSON() ([]byte, error) { - if d.T.IsZero() { - return []byte(""), nil - } - - dt := time.Until(d.T) - return []byte(fmt.Sprintf("%d", int64(dt*time.Second))), nil -} - -// UnmarshalJSON implements encoding/json.UnmarshalJSON(). -func (d *DurationTime) UnmarshalJSON(b []byte) error { - i, err := strconv.Atoi(strings.Trim(string(b), `"`)) - if err != nil { - return fmt.Errorf("unix time(%s) could not be converted from string to int: %w", string(b), err) - } - d.T = time.Now().Add(time.Duration(i) * time.Second) - return nil -} diff --git a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/local/server.go b/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/local/server.go deleted file mode 100644 index 04236ff3127a..000000000000 --- a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/local/server.go +++ /dev/null @@ -1,177 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. - -// Package local contains a local HTTP server used with interactive authentication. -package local - -import ( - "context" - "fmt" - "net" - "net/http" - "strconv" - "strings" - "time" -) - -var okPage = []byte(` - - - - - Authentication Complete - - -

      Authentication complete. You can return to the application. Feel free to close this browser tab.

      - - -`) - -const failPage = ` - - - - - Authentication Failed - - -

      Authentication failed. You can return to the application. Feel free to close this browser tab.

      -

      Error details: error %s error_description: %s

      - - -` - -// Result is the result from the redirect. -type Result struct { - // Code is the code sent by the authority server. - Code string - // Err is set if there was an error. - Err error -} - -// Server is an HTTP server. -type Server struct { - // Addr is the address the server is listening on. - Addr string - resultCh chan Result - s *http.Server - reqState string -} - -// New creates a local HTTP server and starts it. -func New(reqState string, port int) (*Server, error) { - var l net.Listener - var err error - var portStr string - if port > 0 { - // use port provided by caller - l, err = net.Listen("tcp", fmt.Sprintf("localhost:%d", port)) - portStr = strconv.FormatInt(int64(port), 10) - } else { - // find a free port - for i := 0; i < 10; i++ { - l, err = net.Listen("tcp", "localhost:0") - if err != nil { - continue - } - addr := l.Addr().String() - portStr = addr[strings.LastIndex(addr, ":")+1:] - break - } - } - if err != nil { - return nil, err - } - - serv := &Server{ - Addr: fmt.Sprintf("http://localhost:%s", portStr), - s: &http.Server{Addr: "localhost:0", ReadHeaderTimeout: time.Second}, - reqState: reqState, - resultCh: make(chan Result, 1), - } - serv.s.Handler = http.HandlerFunc(serv.handler) - - if err := serv.start(l); err != nil { - return nil, err - } - - return serv, nil -} - -func (s *Server) start(l net.Listener) error { - go func() { - err := s.s.Serve(l) - if err != nil { - select { - case s.resultCh <- Result{Err: err}: - default: - } - } - }() - - return nil -} - -// Result gets the result of the redirect operation. Once a single result is returned, the server -// is shutdown. ctx deadline will be honored. -func (s *Server) Result(ctx context.Context) Result { - select { - case <-ctx.Done(): - return Result{Err: ctx.Err()} - case r := <-s.resultCh: - return r - } -} - -// Shutdown shuts down the server. -func (s *Server) Shutdown() { - // Note: You might get clever and think you can do this in handler() as a defer, you can't. - _ = s.s.Shutdown(context.Background()) -} - -func (s *Server) putResult(r Result) { - select { - case s.resultCh <- r: - default: - } -} - -func (s *Server) handler(w http.ResponseWriter, r *http.Request) { - q := r.URL.Query() - - headerErr := q.Get("error") - if headerErr != "" { - desc := q.Get("error_description") - // Note: It is a little weird we handle some errors by not going to the failPage. If they all should, - // change this to s.error() and make s.error() write the failPage instead of an error code. - _, _ = w.Write([]byte(fmt.Sprintf(failPage, headerErr, desc))) - s.putResult(Result{Err: fmt.Errorf(desc)}) - return - } - - respState := q.Get("state") - switch respState { - case s.reqState: - case "": - s.error(w, http.StatusInternalServerError, "server didn't send OAuth state") - return - default: - s.error(w, http.StatusInternalServerError, "mismatched OAuth state, req(%s), resp(%s)", s.reqState, respState) - return - } - - code := q.Get("code") - if code == "" { - s.error(w, http.StatusInternalServerError, "authorization code missing in query string") - return - } - - _, _ = w.Write(okPage) - s.putResult(Result{Code: code}) -} - -func (s *Server) error(w http.ResponseWriter, code int, str string, i ...interface{}) { - err := fmt.Errorf(str, i...) - http.Error(w, err.Error(), code) - s.putResult(Result{Err: err}) -} diff --git a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/oauth.go b/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/oauth.go deleted file mode 100644 index ef8d908a444f..000000000000 --- a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/oauth.go +++ /dev/null @@ -1,354 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. - -package oauth - -import ( - "context" - "encoding/json" - "fmt" - "io" - "time" - - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/errors" - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/exported" - internalTime "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/json/types/time" - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops" - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/accesstokens" - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/authority" - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/wstrust" - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/wstrust/defs" - "github.com/google/uuid" -) - -// ResolveEndpointer contains the methods for resolving authority endpoints. -type ResolveEndpointer interface { - ResolveEndpoints(ctx context.Context, authorityInfo authority.Info, userPrincipalName string) (authority.Endpoints, error) -} - -// AccessTokens contains the methods for fetching tokens from different sources. -type AccessTokens interface { - DeviceCodeResult(ctx context.Context, authParameters authority.AuthParams) (accesstokens.DeviceCodeResult, error) - FromUsernamePassword(ctx context.Context, authParameters authority.AuthParams) (accesstokens.TokenResponse, error) - FromAuthCode(ctx context.Context, req accesstokens.AuthCodeRequest) (accesstokens.TokenResponse, error) - FromRefreshToken(ctx context.Context, appType accesstokens.AppType, authParams authority.AuthParams, cc *accesstokens.Credential, refreshToken string) (accesstokens.TokenResponse, error) - FromClientSecret(ctx context.Context, authParameters authority.AuthParams, clientSecret string) (accesstokens.TokenResponse, error) - FromAssertion(ctx context.Context, authParameters authority.AuthParams, assertion string) (accesstokens.TokenResponse, error) - FromUserAssertionClientSecret(ctx context.Context, authParameters authority.AuthParams, userAssertion string, clientSecret string) (accesstokens.TokenResponse, error) - FromUserAssertionClientCertificate(ctx context.Context, authParameters authority.AuthParams, userAssertion string, assertion string) (accesstokens.TokenResponse, error) - FromDeviceCodeResult(ctx context.Context, authParameters authority.AuthParams, deviceCodeResult accesstokens.DeviceCodeResult) (accesstokens.TokenResponse, error) - FromSamlGrant(ctx context.Context, authParameters authority.AuthParams, samlGrant wstrust.SamlTokenInfo) (accesstokens.TokenResponse, error) -} - -// FetchAuthority will be implemented by authority.Authority. -type FetchAuthority interface { - UserRealm(context.Context, authority.AuthParams) (authority.UserRealm, error) - AADInstanceDiscovery(context.Context, authority.Info) (authority.InstanceDiscoveryResponse, error) -} - -// FetchWSTrust contains the methods for interacting with WSTrust endpoints. -type FetchWSTrust interface { - Mex(ctx context.Context, federationMetadataURL string) (defs.MexDocument, error) - SAMLTokenInfo(ctx context.Context, authParameters authority.AuthParams, cloudAudienceURN string, endpoint defs.Endpoint) (wstrust.SamlTokenInfo, error) -} - -// Client provides tokens for various types of token requests. -type Client struct { - Resolver ResolveEndpointer - AccessTokens AccessTokens - Authority FetchAuthority - WSTrust FetchWSTrust -} - -// New is the constructor for Token. -func New(httpClient ops.HTTPClient) *Client { - r := ops.New(httpClient) - return &Client{ - Resolver: newAuthorityEndpoint(r), - AccessTokens: r.AccessTokens(), - Authority: r.Authority(), - WSTrust: r.WSTrust(), - } -} - -// ResolveEndpoints gets the authorization and token endpoints and creates an AuthorityEndpoints instance. -func (t *Client) ResolveEndpoints(ctx context.Context, authorityInfo authority.Info, userPrincipalName string) (authority.Endpoints, error) { - return t.Resolver.ResolveEndpoints(ctx, authorityInfo, userPrincipalName) -} - -// AADInstanceDiscovery attempts to discover a tenant endpoint (used in OIDC auth with an authorization endpoint). -// This is done by AAD which allows for aliasing of tenants (windows.sts.net is the same as login.windows.com). -func (t *Client) AADInstanceDiscovery(ctx context.Context, authorityInfo authority.Info) (authority.InstanceDiscoveryResponse, error) { - return t.Authority.AADInstanceDiscovery(ctx, authorityInfo) -} - -// AuthCode returns a token based on an authorization code. -func (t *Client) AuthCode(ctx context.Context, req accesstokens.AuthCodeRequest) (accesstokens.TokenResponse, error) { - if err := scopeError(req.AuthParams); err != nil { - return accesstokens.TokenResponse{}, err - } - if err := t.resolveEndpoint(ctx, &req.AuthParams, ""); err != nil { - return accesstokens.TokenResponse{}, err - } - - tResp, err := t.AccessTokens.FromAuthCode(ctx, req) - if err != nil { - return accesstokens.TokenResponse{}, fmt.Errorf("could not retrieve token from auth code: %w", err) - } - return tResp, nil -} - -// Credential acquires a token from the authority using a client credentials grant. -func (t *Client) Credential(ctx context.Context, authParams authority.AuthParams, cred *accesstokens.Credential) (accesstokens.TokenResponse, error) { - if cred.TokenProvider != nil { - now := time.Now() - scopes := make([]string, len(authParams.Scopes)) - copy(scopes, authParams.Scopes) - params := exported.TokenProviderParameters{ - Claims: authParams.Claims, - CorrelationID: uuid.New().String(), - Scopes: scopes, - TenantID: authParams.AuthorityInfo.Tenant, - } - tr, err := cred.TokenProvider(ctx, params) - if err != nil { - if len(scopes) == 0 { - err = fmt.Errorf("token request had an empty authority.AuthParams.Scopes, which may cause the following error: %w", err) - return accesstokens.TokenResponse{}, err - } - return accesstokens.TokenResponse{}, err - } - return accesstokens.TokenResponse{ - TokenType: authParams.AuthnScheme.AccessTokenType(), - AccessToken: tr.AccessToken, - ExpiresOn: internalTime.DurationTime{ - T: now.Add(time.Duration(tr.ExpiresInSeconds) * time.Second), - }, - GrantedScopes: accesstokens.Scopes{Slice: authParams.Scopes}, - }, nil - } - - if err := t.resolveEndpoint(ctx, &authParams, ""); err != nil { - return accesstokens.TokenResponse{}, err - } - - if cred.Secret != "" { - return t.AccessTokens.FromClientSecret(ctx, authParams, cred.Secret) - } - jwt, err := cred.JWT(ctx, authParams) - if err != nil { - return accesstokens.TokenResponse{}, err - } - return t.AccessTokens.FromAssertion(ctx, authParams, jwt) -} - -// Credential acquires a token from the authority using a client credentials grant. -func (t *Client) OnBehalfOf(ctx context.Context, authParams authority.AuthParams, cred *accesstokens.Credential) (accesstokens.TokenResponse, error) { - if err := scopeError(authParams); err != nil { - return accesstokens.TokenResponse{}, err - } - if err := t.resolveEndpoint(ctx, &authParams, ""); err != nil { - return accesstokens.TokenResponse{}, err - } - - if cred.Secret != "" { - return t.AccessTokens.FromUserAssertionClientSecret(ctx, authParams, authParams.UserAssertion, cred.Secret) - } - jwt, err := cred.JWT(ctx, authParams) - if err != nil { - return accesstokens.TokenResponse{}, err - } - tr, err := t.AccessTokens.FromUserAssertionClientCertificate(ctx, authParams, authParams.UserAssertion, jwt) - if err != nil { - return accesstokens.TokenResponse{}, err - } - return tr, nil -} - -func (t *Client) Refresh(ctx context.Context, reqType accesstokens.AppType, authParams authority.AuthParams, cc *accesstokens.Credential, refreshToken accesstokens.RefreshToken) (accesstokens.TokenResponse, error) { - if err := scopeError(authParams); err != nil { - return accesstokens.TokenResponse{}, err - } - if err := t.resolveEndpoint(ctx, &authParams, ""); err != nil { - return accesstokens.TokenResponse{}, err - } - - tr, err := t.AccessTokens.FromRefreshToken(ctx, reqType, authParams, cc, refreshToken.Secret) - if err != nil { - return accesstokens.TokenResponse{}, err - } - return tr, nil -} - -// UsernamePassword retrieves a token where a username and password is used. However, if this is -// a user realm of "Federated", this uses SAML tokens. If "Managed", uses normal username/password. -func (t *Client) UsernamePassword(ctx context.Context, authParams authority.AuthParams) (accesstokens.TokenResponse, error) { - if err := scopeError(authParams); err != nil { - return accesstokens.TokenResponse{}, err - } - - if authParams.AuthorityInfo.AuthorityType == authority.ADFS { - if err := t.resolveEndpoint(ctx, &authParams, authParams.Username); err != nil { - return accesstokens.TokenResponse{}, err - } - return t.AccessTokens.FromUsernamePassword(ctx, authParams) - } - if err := t.resolveEndpoint(ctx, &authParams, ""); err != nil { - return accesstokens.TokenResponse{}, err - } - - userRealm, err := t.Authority.UserRealm(ctx, authParams) - if err != nil { - return accesstokens.TokenResponse{}, fmt.Errorf("problem getting user realm from authority: %w", err) - } - - switch userRealm.AccountType { - case authority.Federated: - mexDoc, err := t.WSTrust.Mex(ctx, userRealm.FederationMetadataURL) - if err != nil { - err = fmt.Errorf("problem getting mex doc from federated url(%s): %w", userRealm.FederationMetadataURL, err) - return accesstokens.TokenResponse{}, err - } - - saml, err := t.WSTrust.SAMLTokenInfo(ctx, authParams, userRealm.CloudAudienceURN, mexDoc.UsernamePasswordEndpoint) - if err != nil { - err = fmt.Errorf("problem getting SAML token info: %w", err) - return accesstokens.TokenResponse{}, err - } - tr, err := t.AccessTokens.FromSamlGrant(ctx, authParams, saml) - if err != nil { - return accesstokens.TokenResponse{}, err - } - return tr, nil - case authority.Managed: - if len(authParams.Scopes) == 0 { - err = fmt.Errorf("token request had an empty authority.AuthParams.Scopes, which may cause the following error: %w", err) - return accesstokens.TokenResponse{}, err - } - return t.AccessTokens.FromUsernamePassword(ctx, authParams) - } - return accesstokens.TokenResponse{}, errors.New("unknown account type") -} - -// DeviceCode is the result of a call to Token.DeviceCode(). -type DeviceCode struct { - // Result is the device code result from the first call in the device code flow. This allows - // the caller to retrieve the displayed code that is used to authorize on the second device. - Result accesstokens.DeviceCodeResult - authParams authority.AuthParams - - accessTokens AccessTokens -} - -// Token returns a token AFTER the user uses the user code on the second device. This will block -// until either: (1) the code is input by the user and the service releases a token, (2) the token -// expires, (3) the Context passed to .DeviceCode() is cancelled or expires, (4) some other service -// error occurs. -func (d DeviceCode) Token(ctx context.Context) (accesstokens.TokenResponse, error) { - if d.accessTokens == nil { - return accesstokens.TokenResponse{}, fmt.Errorf("DeviceCode was either created outside its package or the creating method had an error. DeviceCode is not valid") - } - - var cancel context.CancelFunc - if deadline, ok := ctx.Deadline(); !ok || d.Result.ExpiresOn.Before(deadline) { - ctx, cancel = context.WithDeadline(ctx, d.Result.ExpiresOn) - } else { - ctx, cancel = context.WithCancel(ctx) - } - defer cancel() - - var interval = 50 * time.Millisecond - timer := time.NewTimer(interval) - defer timer.Stop() - - for { - timer.Reset(interval) - select { - case <-ctx.Done(): - return accesstokens.TokenResponse{}, ctx.Err() - case <-timer.C: - interval += interval * 2 - if interval > 5*time.Second { - interval = 5 * time.Second - } - } - - token, err := d.accessTokens.FromDeviceCodeResult(ctx, d.authParams, d.Result) - if err != nil && isWaitDeviceCodeErr(err) { - continue - } - return token, err // This handles if it was a non-wait error or success - } -} - -type deviceCodeError struct { - Error string `json:"error"` -} - -func isWaitDeviceCodeErr(err error) bool { - var c errors.CallErr - if !errors.As(err, &c) { - return false - } - if c.Resp.StatusCode != 400 { - return false - } - var dCErr deviceCodeError - defer c.Resp.Body.Close() - body, err := io.ReadAll(c.Resp.Body) - if err != nil { - return false - } - err = json.Unmarshal(body, &dCErr) - if err != nil { - return false - } - if dCErr.Error == "authorization_pending" || dCErr.Error == "slow_down" { - return true - } - return false -} - -// DeviceCode returns a DeviceCode object that can be used to get the code that must be entered on the second -// device and optionally the token once the code has been entered on the second device. -func (t *Client) DeviceCode(ctx context.Context, authParams authority.AuthParams) (DeviceCode, error) { - if err := scopeError(authParams); err != nil { - return DeviceCode{}, err - } - - if err := t.resolveEndpoint(ctx, &authParams, ""); err != nil { - return DeviceCode{}, err - } - - dcr, err := t.AccessTokens.DeviceCodeResult(ctx, authParams) - if err != nil { - return DeviceCode{}, err - } - - return DeviceCode{Result: dcr, authParams: authParams, accessTokens: t.AccessTokens}, nil -} - -func (t *Client) resolveEndpoint(ctx context.Context, authParams *authority.AuthParams, userPrincipalName string) error { - endpoints, err := t.Resolver.ResolveEndpoints(ctx, authParams.AuthorityInfo, userPrincipalName) - if err != nil { - return fmt.Errorf("unable to resolve an endpoint: %s", err) - } - authParams.Endpoints = endpoints - return nil -} - -// scopeError takes an authority.AuthParams and returns an error -// if len(AuthParams.Scope) == 0. -func scopeError(a authority.AuthParams) error { - // TODO(someone): we could look deeper at the message to determine if - // it's a scope error, but this is a good start. - /* - {error":"invalid_scope","error_description":"AADSTS1002012: The provided value for scope - openid offline_access profile is not valid. Client credential flows must have a scope value - with /.default suffixed to the resource identifier (application ID URI)...} - */ - if len(a.Scopes) == 0 { - return fmt.Errorf("token request had an empty authority.AuthParams.Scopes, which is invalid") - } - return nil -} diff --git a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/accesstokens/accesstokens.go b/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/accesstokens/accesstokens.go deleted file mode 100644 index a7b7b0742d87..000000000000 --- a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/accesstokens/accesstokens.go +++ /dev/null @@ -1,457 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. - -/* -Package accesstokens exposes a REST client for querying backend systems to get various types of -access tokens (oauth) for use in authentication. - -These calls are of type "application/x-www-form-urlencoded". This means we use url.Values to -represent arguments and then encode them into the POST body message. We receive JSON in -return for the requests. The request definition is defined in https://tools.ietf.org/html/rfc7521#section-4.2 . -*/ -package accesstokens - -import ( - "context" - "crypto" - - /* #nosec */ - "crypto/sha1" - "crypto/x509" - "encoding/base64" - "encoding/json" - "fmt" - "net/url" - "strconv" - "strings" - "time" - - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/exported" - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/authority" - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/internal/grant" - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/wstrust" - "github.com/golang-jwt/jwt/v5" - "github.com/google/uuid" -) - -const ( - grantType = "grant_type" - deviceCode = "device_code" - clientID = "client_id" - clientInfo = "client_info" - clientInfoVal = "1" - username = "username" - password = "password" -) - -//go:generate stringer -type=AppType - -// AppType is whether the authorization code flow is for a public or confidential client. -type AppType int8 - -const ( - // ATUnknown is the zero value when the type hasn't been set. - ATUnknown AppType = iota - // ATPublic indicates this if for the Public.Client. - ATPublic - // ATConfidential indicates this if for the Confidential.Client. - ATConfidential -) - -type urlFormCaller interface { - URLFormCall(ctx context.Context, endpoint string, qv url.Values, resp interface{}) error -} - -// DeviceCodeResponse represents the HTTP response received from the device code endpoint -type DeviceCodeResponse struct { - authority.OAuthResponseBase - - UserCode string `json:"user_code"` - DeviceCode string `json:"device_code"` - VerificationURL string `json:"verification_url"` - ExpiresIn int `json:"expires_in"` - Interval int `json:"interval"` - Message string `json:"message"` - - AdditionalFields map[string]interface{} -} - -// Convert converts the DeviceCodeResponse to a DeviceCodeResult -func (dcr DeviceCodeResponse) Convert(clientID string, scopes []string) DeviceCodeResult { - expiresOn := time.Now().UTC().Add(time.Duration(dcr.ExpiresIn) * time.Second) - return NewDeviceCodeResult(dcr.UserCode, dcr.DeviceCode, dcr.VerificationURL, expiresOn, dcr.Interval, dcr.Message, clientID, scopes) -} - -// Credential represents the credential used in confidential client flows. This can be either -// a Secret or Cert/Key. -type Credential struct { - // Secret contains the credential secret if we are doing auth by secret. - Secret string - - // Cert is the public certificate, if we're authenticating by certificate. - Cert *x509.Certificate - // Key is the private key for signing, if we're authenticating by certificate. - Key crypto.PrivateKey - // X5c is the JWT assertion's x5c header value, required for SN/I authentication. - X5c []string - - // AssertionCallback is a function provided by the application, if we're authenticating by assertion. - AssertionCallback func(context.Context, exported.AssertionRequestOptions) (string, error) - - // TokenProvider is a function provided by the application that implements custom authentication - // logic for a confidential client - TokenProvider func(context.Context, exported.TokenProviderParameters) (exported.TokenProviderResult, error) -} - -// JWT gets the jwt assertion when the credential is not using a secret. -func (c *Credential) JWT(ctx context.Context, authParams authority.AuthParams) (string, error) { - if c.AssertionCallback != nil { - options := exported.AssertionRequestOptions{ - ClientID: authParams.ClientID, - TokenEndpoint: authParams.Endpoints.TokenEndpoint, - } - return c.AssertionCallback(ctx, options) - } - - token := jwt.NewWithClaims(jwt.SigningMethodRS256, jwt.MapClaims{ - "aud": authParams.Endpoints.TokenEndpoint, - "exp": json.Number(strconv.FormatInt(time.Now().Add(10*time.Minute).Unix(), 10)), - "iss": authParams.ClientID, - "jti": uuid.New().String(), - "nbf": json.Number(strconv.FormatInt(time.Now().Unix(), 10)), - "sub": authParams.ClientID, - }) - token.Header = map[string]interface{}{ - "alg": "RS256", - "typ": "JWT", - "x5t": base64.StdEncoding.EncodeToString(thumbprint(c.Cert)), - } - - if authParams.SendX5C { - token.Header["x5c"] = c.X5c - } - - assertion, err := token.SignedString(c.Key) - if err != nil { - return "", fmt.Errorf("unable to sign a JWT token using private key: %w", err) - } - return assertion, nil -} - -// thumbprint runs the asn1.Der bytes through sha1 for use in the x5t parameter of JWT. -// https://tools.ietf.org/html/rfc7517#section-4.8 -func thumbprint(cert *x509.Certificate) []byte { - /* #nosec */ - a := sha1.Sum(cert.Raw) - return a[:] -} - -// Client represents the REST calls to get tokens from token generator backends. -type Client struct { - // Comm provides the HTTP transport client. - Comm urlFormCaller - - testing bool -} - -// FromUsernamePassword uses a username and password to get an access token. -func (c Client) FromUsernamePassword(ctx context.Context, authParameters authority.AuthParams) (TokenResponse, error) { - qv := url.Values{} - if err := addClaims(qv, authParameters); err != nil { - return TokenResponse{}, err - } - qv.Set(grantType, grant.Password) - qv.Set(username, authParameters.Username) - qv.Set(password, authParameters.Password) - qv.Set(clientID, authParameters.ClientID) - qv.Set(clientInfo, clientInfoVal) - addScopeQueryParam(qv, authParameters) - - return c.doTokenResp(ctx, authParameters, qv) -} - -// AuthCodeRequest stores the values required to request a token from the authority using an authorization code -type AuthCodeRequest struct { - AuthParams authority.AuthParams - Code string - CodeChallenge string - Credential *Credential - AppType AppType -} - -// NewCodeChallengeRequest returns an AuthCodeRequest that uses a code challenge.. -func NewCodeChallengeRequest(params authority.AuthParams, appType AppType, cc *Credential, code, challenge string) (AuthCodeRequest, error) { - if appType == ATUnknown { - return AuthCodeRequest{}, fmt.Errorf("bug: NewCodeChallengeRequest() called with AppType == ATUnknown") - } - return AuthCodeRequest{ - AuthParams: params, - AppType: appType, - Code: code, - CodeChallenge: challenge, - Credential: cc, - }, nil -} - -// FromAuthCode uses an authorization code to retrieve an access token. -func (c Client) FromAuthCode(ctx context.Context, req AuthCodeRequest) (TokenResponse, error) { - var qv url.Values - - switch req.AppType { - case ATUnknown: - return TokenResponse{}, fmt.Errorf("bug: Token.AuthCode() received request with AppType == ATUnknown") - case ATConfidential: - var err error - if req.Credential == nil { - return TokenResponse{}, fmt.Errorf("AuthCodeRequest had nil Credential for Confidential app") - } - qv, err = prepURLVals(ctx, req.Credential, req.AuthParams) - if err != nil { - return TokenResponse{}, err - } - case ATPublic: - qv = url.Values{} - default: - return TokenResponse{}, fmt.Errorf("bug: Token.AuthCode() received request with AppType == %v, which we do not recongnize", req.AppType) - } - - qv.Set(grantType, grant.AuthCode) - qv.Set("code", req.Code) - qv.Set("code_verifier", req.CodeChallenge) - qv.Set("redirect_uri", req.AuthParams.Redirecturi) - qv.Set(clientID, req.AuthParams.ClientID) - qv.Set(clientInfo, clientInfoVal) - addScopeQueryParam(qv, req.AuthParams) - if err := addClaims(qv, req.AuthParams); err != nil { - return TokenResponse{}, err - } - - return c.doTokenResp(ctx, req.AuthParams, qv) -} - -// FromRefreshToken uses a refresh token (for refreshing credentials) to get a new access token. -func (c Client) FromRefreshToken(ctx context.Context, appType AppType, authParams authority.AuthParams, cc *Credential, refreshToken string) (TokenResponse, error) { - qv := url.Values{} - if appType == ATConfidential { - var err error - qv, err = prepURLVals(ctx, cc, authParams) - if err != nil { - return TokenResponse{}, err - } - } - if err := addClaims(qv, authParams); err != nil { - return TokenResponse{}, err - } - qv.Set(grantType, grant.RefreshToken) - qv.Set(clientID, authParams.ClientID) - qv.Set(clientInfo, clientInfoVal) - qv.Set("refresh_token", refreshToken) - addScopeQueryParam(qv, authParams) - - return c.doTokenResp(ctx, authParams, qv) -} - -// FromClientSecret uses a client's secret (aka password) to get a new token. -func (c Client) FromClientSecret(ctx context.Context, authParameters authority.AuthParams, clientSecret string) (TokenResponse, error) { - qv := url.Values{} - if err := addClaims(qv, authParameters); err != nil { - return TokenResponse{}, err - } - qv.Set(grantType, grant.ClientCredential) - qv.Set("client_secret", clientSecret) - qv.Set(clientID, authParameters.ClientID) - addScopeQueryParam(qv, authParameters) - - token, err := c.doTokenResp(ctx, authParameters, qv) - if err != nil { - return token, fmt.Errorf("FromClientSecret(): %w", err) - } - return token, nil -} - -func (c Client) FromAssertion(ctx context.Context, authParameters authority.AuthParams, assertion string) (TokenResponse, error) { - qv := url.Values{} - if err := addClaims(qv, authParameters); err != nil { - return TokenResponse{}, err - } - qv.Set(grantType, grant.ClientCredential) - qv.Set("client_assertion_type", grant.ClientAssertion) - qv.Set("client_assertion", assertion) - qv.Set(clientID, authParameters.ClientID) - qv.Set(clientInfo, clientInfoVal) - addScopeQueryParam(qv, authParameters) - - token, err := c.doTokenResp(ctx, authParameters, qv) - if err != nil { - return token, fmt.Errorf("FromAssertion(): %w", err) - } - return token, nil -} - -func (c Client) FromUserAssertionClientSecret(ctx context.Context, authParameters authority.AuthParams, userAssertion string, clientSecret string) (TokenResponse, error) { - qv := url.Values{} - if err := addClaims(qv, authParameters); err != nil { - return TokenResponse{}, err - } - qv.Set(grantType, grant.JWT) - qv.Set(clientID, authParameters.ClientID) - qv.Set("client_secret", clientSecret) - qv.Set("assertion", userAssertion) - qv.Set(clientInfo, clientInfoVal) - qv.Set("requested_token_use", "on_behalf_of") - addScopeQueryParam(qv, authParameters) - - return c.doTokenResp(ctx, authParameters, qv) -} - -func (c Client) FromUserAssertionClientCertificate(ctx context.Context, authParameters authority.AuthParams, userAssertion string, assertion string) (TokenResponse, error) { - qv := url.Values{} - if err := addClaims(qv, authParameters); err != nil { - return TokenResponse{}, err - } - qv.Set(grantType, grant.JWT) - qv.Set("client_assertion_type", grant.ClientAssertion) - qv.Set("client_assertion", assertion) - qv.Set(clientID, authParameters.ClientID) - qv.Set("assertion", userAssertion) - qv.Set(clientInfo, clientInfoVal) - qv.Set("requested_token_use", "on_behalf_of") - addScopeQueryParam(qv, authParameters) - - return c.doTokenResp(ctx, authParameters, qv) -} - -func (c Client) DeviceCodeResult(ctx context.Context, authParameters authority.AuthParams) (DeviceCodeResult, error) { - qv := url.Values{} - if err := addClaims(qv, authParameters); err != nil { - return DeviceCodeResult{}, err - } - qv.Set(clientID, authParameters.ClientID) - addScopeQueryParam(qv, authParameters) - - endpoint := strings.Replace(authParameters.Endpoints.TokenEndpoint, "token", "devicecode", -1) - - resp := DeviceCodeResponse{} - err := c.Comm.URLFormCall(ctx, endpoint, qv, &resp) - if err != nil { - return DeviceCodeResult{}, err - } - - return resp.Convert(authParameters.ClientID, authParameters.Scopes), nil -} - -func (c Client) FromDeviceCodeResult(ctx context.Context, authParameters authority.AuthParams, deviceCodeResult DeviceCodeResult) (TokenResponse, error) { - qv := url.Values{} - if err := addClaims(qv, authParameters); err != nil { - return TokenResponse{}, err - } - qv.Set(grantType, grant.DeviceCode) - qv.Set(deviceCode, deviceCodeResult.DeviceCode) - qv.Set(clientID, authParameters.ClientID) - qv.Set(clientInfo, clientInfoVal) - addScopeQueryParam(qv, authParameters) - - return c.doTokenResp(ctx, authParameters, qv) -} - -func (c Client) FromSamlGrant(ctx context.Context, authParameters authority.AuthParams, samlGrant wstrust.SamlTokenInfo) (TokenResponse, error) { - qv := url.Values{} - if err := addClaims(qv, authParameters); err != nil { - return TokenResponse{}, err - } - qv.Set(username, authParameters.Username) - qv.Set(password, authParameters.Password) - qv.Set(clientID, authParameters.ClientID) - qv.Set(clientInfo, clientInfoVal) - qv.Set("assertion", base64.StdEncoding.WithPadding(base64.StdPadding).EncodeToString([]byte(samlGrant.Assertion))) - addScopeQueryParam(qv, authParameters) - - switch samlGrant.AssertionType { - case grant.SAMLV1: - qv.Set(grantType, grant.SAMLV1) - case grant.SAMLV2: - qv.Set(grantType, grant.SAMLV2) - default: - return TokenResponse{}, fmt.Errorf("GetAccessTokenFromSamlGrant returned unknown SAML assertion type: %q", samlGrant.AssertionType) - } - - return c.doTokenResp(ctx, authParameters, qv) -} - -func (c Client) doTokenResp(ctx context.Context, authParams authority.AuthParams, qv url.Values) (TokenResponse, error) { - resp := TokenResponse{} - if authParams.AuthnScheme != nil { - trParams := authParams.AuthnScheme.TokenRequestParams() - for k, v := range trParams { - qv.Set(k, v) - } - } - err := c.Comm.URLFormCall(ctx, authParams.Endpoints.TokenEndpoint, qv, &resp) - if err != nil { - return resp, err - } - resp.ComputeScope(authParams) - if c.testing { - return resp, nil - } - return resp, resp.Validate() -} - -// prepURLVals returns an url.Values that sets various key/values if we are doing secrets -// or JWT assertions. -func prepURLVals(ctx context.Context, cc *Credential, authParams authority.AuthParams) (url.Values, error) { - params := url.Values{} - if cc.Secret != "" { - params.Set("client_secret", cc.Secret) - return params, nil - } - - jwt, err := cc.JWT(ctx, authParams) - if err != nil { - return nil, err - } - params.Set("client_assertion", jwt) - params.Set("client_assertion_type", grant.ClientAssertion) - return params, nil -} - -// openid required to get an id token -// offline_access required to get a refresh token -// profile required to get the client_info field back -var detectDefaultScopes = map[string]bool{ - "openid": true, - "offline_access": true, - "profile": true, -} - -var defaultScopes = []string{"openid", "offline_access", "profile"} - -func AppendDefaultScopes(authParameters authority.AuthParams) []string { - scopes := make([]string, 0, len(authParameters.Scopes)+len(defaultScopes)) - for _, scope := range authParameters.Scopes { - s := strings.TrimSpace(scope) - if s == "" { - continue - } - if detectDefaultScopes[scope] { - continue - } - scopes = append(scopes, scope) - } - scopes = append(scopes, defaultScopes...) - return scopes -} - -// addClaims adds client capabilities and claims from AuthParams to the given url.Values -func addClaims(v url.Values, ap authority.AuthParams) error { - claims, err := ap.MergeCapabilitiesAndClaims() - if err == nil && claims != "" { - v.Set("claims", claims) - } - return err -} - -func addScopeQueryParam(queryParams url.Values, authParameters authority.AuthParams) { - scopes := AppendDefaultScopes(authParameters) - queryParams.Set("scope", strings.Join(scopes, " ")) -} diff --git a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/accesstokens/apptype_string.go b/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/accesstokens/apptype_string.go deleted file mode 100644 index 3bec4a67cf10..000000000000 --- a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/accesstokens/apptype_string.go +++ /dev/null @@ -1,25 +0,0 @@ -// Code generated by "stringer -type=AppType"; DO NOT EDIT. - -package accesstokens - -import "strconv" - -func _() { - // An "invalid array index" compiler error signifies that the constant values have changed. - // Re-run the stringer command to generate them again. - var x [1]struct{} - _ = x[ATUnknown-0] - _ = x[ATPublic-1] - _ = x[ATConfidential-2] -} - -const _AppType_name = "ATUnknownATPublicATConfidential" - -var _AppType_index = [...]uint8{0, 9, 17, 31} - -func (i AppType) String() string { - if i < 0 || i >= AppType(len(_AppType_index)-1) { - return "AppType(" + strconv.FormatInt(int64(i), 10) + ")" - } - return _AppType_name[_AppType_index[i]:_AppType_index[i+1]] -} diff --git a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/accesstokens/tokens.go b/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/accesstokens/tokens.go deleted file mode 100644 index 3107b45c1136..000000000000 --- a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/accesstokens/tokens.go +++ /dev/null @@ -1,339 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. - -package accesstokens - -import ( - "bytes" - "encoding/base64" - "encoding/json" - "errors" - "fmt" - "reflect" - "strings" - "time" - - internalTime "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/json/types/time" - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/authority" - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/shared" -) - -// IDToken consists of all the information used to validate a user. -// https://docs.microsoft.com/azure/active-directory/develop/id-tokens . -type IDToken struct { - PreferredUsername string `json:"preferred_username,omitempty"` - GivenName string `json:"given_name,omitempty"` - FamilyName string `json:"family_name,omitempty"` - MiddleName string `json:"middle_name,omitempty"` - Name string `json:"name,omitempty"` - Oid string `json:"oid,omitempty"` - TenantID string `json:"tid,omitempty"` - Subject string `json:"sub,omitempty"` - UPN string `json:"upn,omitempty"` - Email string `json:"email,omitempty"` - AlternativeID string `json:"alternative_id,omitempty"` - Issuer string `json:"iss,omitempty"` - Audience string `json:"aud,omitempty"` - ExpirationTime int64 `json:"exp,omitempty"` - IssuedAt int64 `json:"iat,omitempty"` - NotBefore int64 `json:"nbf,omitempty"` - RawToken string - - AdditionalFields map[string]interface{} -} - -var null = []byte("null") - -// UnmarshalJSON implements json.Unmarshaler. -func (i *IDToken) UnmarshalJSON(b []byte) error { - if bytes.Equal(null, b) { - return nil - } - - // Because we have a custom unmarshaler, you - // cannot directly call json.Unmarshal here. If you do, it will call this function - // recursively until reach our recursion limit. We have to create a new type - // that doesn't have this method in order to use json.Unmarshal. - type idToken2 IDToken - - jwt := strings.Trim(string(b), `"`) - jwtArr := strings.Split(jwt, ".") - if len(jwtArr) < 2 { - return errors.New("IDToken returned from server is invalid") - } - - jwtPart := jwtArr[1] - jwtDecoded, err := decodeJWT(jwtPart) - if err != nil { - return fmt.Errorf("unable to unmarshal IDToken, problem decoding JWT: %w", err) - } - - token := idToken2{} - err = json.Unmarshal(jwtDecoded, &token) - if err != nil { - return fmt.Errorf("unable to unmarshal IDToken: %w", err) - } - token.RawToken = jwt - - *i = IDToken(token) - return nil -} - -// IsZero indicates if the IDToken is the zero value. -func (i IDToken) IsZero() bool { - v := reflect.ValueOf(i) - for i := 0; i < v.NumField(); i++ { - field := v.Field(i) - if !field.IsZero() { - switch field.Kind() { - case reflect.Map, reflect.Slice: - if field.Len() == 0 { - continue - } - } - return false - } - } - return true -} - -// LocalAccountID extracts an account's local account ID from an ID token. -func (i IDToken) LocalAccountID() string { - if i.Oid != "" { - return i.Oid - } - return i.Subject -} - -// jwtDecoder is provided to allow tests to provide their own. -var jwtDecoder = decodeJWT - -// ClientInfo is used to create a Home Account ID for an account. -type ClientInfo struct { - UID string `json:"uid"` - UTID string `json:"utid"` - - AdditionalFields map[string]interface{} -} - -// UnmarshalJSON implements json.Unmarshaler.s -func (c *ClientInfo) UnmarshalJSON(b []byte) error { - s := strings.Trim(string(b), `"`) - // Client info may be empty in some flows, e.g. certificate exchange. - if len(s) == 0 { - return nil - } - - // Because we have a custom unmarshaler, you - // cannot directly call json.Unmarshal here. If you do, it will call this function - // recursively until reach our recursion limit. We have to create a new type - // that doesn't have this method in order to use json.Unmarshal. - type clientInfo2 ClientInfo - - raw, err := jwtDecoder(s) - if err != nil { - return fmt.Errorf("TokenResponse client_info field had JWT decode error: %w", err) - } - - var c2 clientInfo2 - - err = json.Unmarshal(raw, &c2) - if err != nil { - return fmt.Errorf("was unable to unmarshal decoded JWT in TokenRespone to ClientInfo: %w", err) - } - - *c = ClientInfo(c2) - return nil -} - -// Scopes represents scopes in a TokenResponse. -type Scopes struct { - Slice []string -} - -// UnmarshalJSON implements json.Unmarshal. -func (s *Scopes) UnmarshalJSON(b []byte) error { - str := strings.Trim(string(b), `"`) - if len(str) == 0 { - return nil - } - sl := strings.Split(str, " ") - s.Slice = sl - return nil -} - -// TokenResponse is the information that is returned from a token endpoint during a token acquisition flow. -type TokenResponse struct { - authority.OAuthResponseBase - - AccessToken string `json:"access_token"` - RefreshToken string `json:"refresh_token"` - TokenType string `json:"token_type"` - - FamilyID string `json:"foci"` - IDToken IDToken `json:"id_token"` - ClientInfo ClientInfo `json:"client_info"` - ExpiresOn internalTime.DurationTime `json:"expires_in"` - ExtExpiresOn internalTime.DurationTime `json:"ext_expires_in"` - GrantedScopes Scopes `json:"scope"` - DeclinedScopes []string // This is derived - - AdditionalFields map[string]interface{} - - scopesComputed bool -} - -// ComputeScope computes the final scopes based on what was granted by the server and -// what our AuthParams were from the authority server. Per OAuth spec, if no scopes are returned, the response should be treated as if all scopes were granted -// This behavior can be observed in client assertion flows, but can happen at any time, this check ensures we treat -// those special responses properly Link to spec: https://tools.ietf.org/html/rfc6749#section-3.3 -func (tr *TokenResponse) ComputeScope(authParams authority.AuthParams) { - if len(tr.GrantedScopes.Slice) == 0 { - tr.GrantedScopes = Scopes{Slice: authParams.Scopes} - } else { - tr.DeclinedScopes = findDeclinedScopes(authParams.Scopes, tr.GrantedScopes.Slice) - } - tr.scopesComputed = true -} - -// HomeAccountID uniquely identifies the authenticated account, if any. It's "" when the token is an app token. -func (tr *TokenResponse) HomeAccountID() string { - id := tr.IDToken.Subject - if uid := tr.ClientInfo.UID; uid != "" { - utid := tr.ClientInfo.UTID - if utid == "" { - utid = uid - } - id = fmt.Sprintf("%s.%s", uid, utid) - } - return id -} - -// Validate validates the TokenResponse has basic valid values. It must be called -// after ComputeScopes() is called. -func (tr *TokenResponse) Validate() error { - if tr.Error != "" { - return fmt.Errorf("%s: %s", tr.Error, tr.ErrorDescription) - } - - if tr.AccessToken == "" { - return errors.New("response is missing access_token") - } - - if !tr.scopesComputed { - return fmt.Errorf("TokenResponse hasn't had ScopesComputed() called") - } - return nil -} - -func (tr *TokenResponse) CacheKey(authParams authority.AuthParams) string { - if authParams.AuthorizationType == authority.ATOnBehalfOf { - return authParams.AssertionHash() - } - if authParams.AuthorizationType == authority.ATClientCredentials { - return authParams.AppKey() - } - if authParams.IsConfidentialClient || authParams.AuthorizationType == authority.ATRefreshToken { - return tr.HomeAccountID() - } - return "" -} - -func findDeclinedScopes(requestedScopes []string, grantedScopes []string) []string { - declined := []string{} - grantedMap := map[string]bool{} - for _, s := range grantedScopes { - grantedMap[strings.ToLower(s)] = true - } - // Comparing the requested scopes with the granted scopes to see if there are any scopes that have been declined. - for _, r := range requestedScopes { - if !grantedMap[strings.ToLower(r)] { - declined = append(declined, r) - } - } - return declined -} - -// decodeJWT decodes a JWT and converts it to a byte array representing a JSON object -// JWT has headers and payload base64url encoded without padding -// https://tools.ietf.org/html/rfc7519#section-3 and -// https://tools.ietf.org/html/rfc7515#section-2 -func decodeJWT(data string) ([]byte, error) { - // https://tools.ietf.org/html/rfc7515#appendix-C - return base64.RawURLEncoding.DecodeString(data) -} - -// RefreshToken is the JSON representation of a MSAL refresh token for encoding to storage. -type RefreshToken struct { - HomeAccountID string `json:"home_account_id,omitempty"` - Environment string `json:"environment,omitempty"` - CredentialType string `json:"credential_type,omitempty"` - ClientID string `json:"client_id,omitempty"` - FamilyID string `json:"family_id,omitempty"` - Secret string `json:"secret,omitempty"` - Realm string `json:"realm,omitempty"` - Target string `json:"target,omitempty"` - UserAssertionHash string `json:"user_assertion_hash,omitempty"` - - AdditionalFields map[string]interface{} -} - -// NewRefreshToken is the constructor for RefreshToken. -func NewRefreshToken(homeID, env, clientID, refreshToken, familyID string) RefreshToken { - return RefreshToken{ - HomeAccountID: homeID, - Environment: env, - CredentialType: "RefreshToken", - ClientID: clientID, - FamilyID: familyID, - Secret: refreshToken, - } -} - -// Key outputs the key that can be used to uniquely look up this entry in a map. -func (rt RefreshToken) Key() string { - var fourth = rt.FamilyID - if fourth == "" { - fourth = rt.ClientID - } - - key := strings.Join( - []string{rt.HomeAccountID, rt.Environment, rt.CredentialType, fourth}, - shared.CacheKeySeparator, - ) - return strings.ToLower(key) -} - -func (rt RefreshToken) GetSecret() string { - return rt.Secret -} - -// DeviceCodeResult stores the response from the STS device code endpoint. -type DeviceCodeResult struct { - // UserCode is the code the user needs to provide when authentication at the verification URI. - UserCode string - // DeviceCode is the code used in the access token request. - DeviceCode string - // VerificationURL is the the URL where user can authenticate. - VerificationURL string - // ExpiresOn is the expiration time of device code in seconds. - ExpiresOn time.Time - // Interval is the interval at which the STS should be polled at. - Interval int - // Message is the message which should be displayed to the user. - Message string - // ClientID is the UUID issued by the authorization server for your application. - ClientID string - // Scopes is the OpenID scopes used to request access a protected API. - Scopes []string -} - -// NewDeviceCodeResult creates a DeviceCodeResult instance. -func NewDeviceCodeResult(userCode, deviceCode, verificationURL string, expiresOn time.Time, interval int, message, clientID string, scopes []string) DeviceCodeResult { - return DeviceCodeResult{userCode, deviceCode, verificationURL, expiresOn, interval, message, clientID, scopes} -} - -func (dcr DeviceCodeResult) String() string { - return fmt.Sprintf("UserCode: (%v)\nDeviceCode: (%v)\nURL: (%v)\nMessage: (%v)\n", dcr.UserCode, dcr.DeviceCode, dcr.VerificationURL, dcr.Message) - -} diff --git a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/authority/authority.go b/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/authority/authority.go deleted file mode 100644 index 9d60734f88e2..000000000000 --- a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/authority/authority.go +++ /dev/null @@ -1,589 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. - -package authority - -import ( - "context" - "crypto/sha256" - "encoding/base64" - "encoding/json" - "errors" - "fmt" - "io" - "net/http" - "net/url" - "os" - "path" - "strings" - "time" - - "github.com/google/uuid" -) - -const ( - authorizationEndpoint = "https://%v/%v/oauth2/v2.0/authorize" - instanceDiscoveryEndpoint = "https://%v/common/discovery/instance" - tenantDiscoveryEndpointWithRegion = "https://%s.%s/%s/v2.0/.well-known/openid-configuration" - regionName = "REGION_NAME" - defaultAPIVersion = "2021-10-01" - imdsEndpoint = "http://169.254.169.254/metadata/instance/compute/location?format=text&api-version=" + defaultAPIVersion - autoDetectRegion = "TryAutoDetect" - AccessTokenTypeBearer = "Bearer" -) - -// These are various hosts that host AAD Instance discovery endpoints. -const ( - defaultHost = "login.microsoftonline.com" - loginMicrosoft = "login.microsoft.com" - loginWindows = "login.windows.net" - loginSTSWindows = "sts.windows.net" - loginMicrosoftOnline = defaultHost -) - -// jsonCaller is an interface that allows us to mock the JSONCall method. -type jsonCaller interface { - JSONCall(ctx context.Context, endpoint string, headers http.Header, qv url.Values, body, resp interface{}) error -} - -var aadTrustedHostList = map[string]bool{ - "login.windows.net": true, // Microsoft Azure Worldwide - Used in validation scenarios where host is not this list - "login.chinacloudapi.cn": true, // Microsoft Azure China - "login.microsoftonline.de": true, // Microsoft Azure Blackforest - "login-us.microsoftonline.com": true, // Microsoft Azure US Government - Legacy - "login.microsoftonline.us": true, // Microsoft Azure US Government - "login.microsoftonline.com": true, // Microsoft Azure Worldwide - "login.cloudgovapi.us": true, // Microsoft Azure US Government -} - -// TrustedHost checks if an AAD host is trusted/valid. -func TrustedHost(host string) bool { - if _, ok := aadTrustedHostList[host]; ok { - return true - } - return false -} - -// OAuthResponseBase is the base JSON return message for an OAuth call. -// This is embedded in other calls to get the base fields from every response. -type OAuthResponseBase struct { - Error string `json:"error"` - SubError string `json:"suberror"` - ErrorDescription string `json:"error_description"` - ErrorCodes []int `json:"error_codes"` - CorrelationID string `json:"correlation_id"` - Claims string `json:"claims"` -} - -// TenantDiscoveryResponse is the tenant endpoints from the OpenID configuration endpoint. -type TenantDiscoveryResponse struct { - OAuthResponseBase - - AuthorizationEndpoint string `json:"authorization_endpoint"` - TokenEndpoint string `json:"token_endpoint"` - Issuer string `json:"issuer"` - - AdditionalFields map[string]interface{} -} - -// Validate validates that the response had the correct values required. -func (r *TenantDiscoveryResponse) Validate() error { - switch "" { - case r.AuthorizationEndpoint: - return errors.New("TenantDiscoveryResponse: authorize endpoint was not found in the openid configuration") - case r.TokenEndpoint: - return errors.New("TenantDiscoveryResponse: token endpoint was not found in the openid configuration") - case r.Issuer: - return errors.New("TenantDiscoveryResponse: issuer was not found in the openid configuration") - } - return nil -} - -type InstanceDiscoveryMetadata struct { - PreferredNetwork string `json:"preferred_network"` - PreferredCache string `json:"preferred_cache"` - Aliases []string `json:"aliases"` - - AdditionalFields map[string]interface{} -} - -type InstanceDiscoveryResponse struct { - TenantDiscoveryEndpoint string `json:"tenant_discovery_endpoint"` - Metadata []InstanceDiscoveryMetadata `json:"metadata"` - - AdditionalFields map[string]interface{} -} - -//go:generate stringer -type=AuthorizeType - -// AuthorizeType represents the type of token flow. -type AuthorizeType int - -// These are all the types of token flows. -const ( - ATUnknown AuthorizeType = iota - ATUsernamePassword - ATWindowsIntegrated - ATAuthCode - ATInteractive - ATClientCredentials - ATDeviceCode - ATRefreshToken - AccountByID - ATOnBehalfOf -) - -// These are all authority types -const ( - AAD = "MSSTS" - ADFS = "ADFS" -) - -// AuthenticationScheme is an extensibility mechanism designed to be used only by Azure Arc for proof of possession access tokens. -type AuthenticationScheme interface { - // Extra parameters that are added to the request to the /token endpoint. - TokenRequestParams() map[string]string - // Key ID of the public / private key pair used by the encryption algorithm, if any. - // Tokens obtained by authentication schemes that use this are bound to the KeyId, i.e. - // if a different kid is presented, the access token cannot be used. - KeyID() string - // Creates the access token that goes into an Authorization HTTP header. - FormatAccessToken(accessToken string) (string, error) - //Expected to match the token_type parameter returned by ESTS. Used to disambiguate - // between ATs of different types (e.g. Bearer and PoP) when loading from cache etc. - AccessTokenType() string -} - -// default authn scheme realizing AuthenticationScheme for "Bearer" tokens -type BearerAuthenticationScheme struct{} - -var bearerAuthnScheme BearerAuthenticationScheme - -func (ba *BearerAuthenticationScheme) TokenRequestParams() map[string]string { - return nil -} -func (ba *BearerAuthenticationScheme) KeyID() string { - return "" -} -func (ba *BearerAuthenticationScheme) FormatAccessToken(accessToken string) (string, error) { - return accessToken, nil -} -func (ba *BearerAuthenticationScheme) AccessTokenType() string { - return AccessTokenTypeBearer -} - -// AuthParams represents the parameters used for authorization for token acquisition. -type AuthParams struct { - AuthorityInfo Info - CorrelationID string - Endpoints Endpoints - ClientID string - // Redirecturi is used for auth flows that specify a redirect URI (e.g. local server for interactive auth flow). - Redirecturi string - HomeAccountID string - // Username is the user-name portion for username/password auth flow. - Username string - // Password is the password portion for username/password auth flow. - Password string - // Scopes is the list of scopes the user consents to. - Scopes []string - // AuthorizationType specifies the auth flow being used. - AuthorizationType AuthorizeType - // State is a random value used to prevent cross-site request forgery attacks. - State string - // CodeChallenge is derived from a code verifier and is sent in the auth request. - CodeChallenge string - // CodeChallengeMethod describes the method used to create the CodeChallenge. - CodeChallengeMethod string - // Prompt specifies the user prompt type during interactive auth. - Prompt string - // IsConfidentialClient specifies if it is a confidential client. - IsConfidentialClient bool - // SendX5C specifies if x5c claim(public key of the certificate) should be sent to STS. - SendX5C bool - // UserAssertion is the access token used to acquire token on behalf of user - UserAssertion string - // Capabilities the client will include with each token request, for example "CP1". - // Call [NewClientCapabilities] to construct a value for this field. - Capabilities ClientCapabilities - // Claims required for an access token to satisfy a conditional access policy - Claims string - // KnownAuthorityHosts don't require metadata discovery because they're known to the user - KnownAuthorityHosts []string - // LoginHint is a username with which to pre-populate account selection during interactive auth - LoginHint string - // DomainHint is a directive that can be used to accelerate the user to their federated IdP sign-in page - DomainHint string - // AuthnScheme is an optional scheme for formatting access tokens - AuthnScheme AuthenticationScheme -} - -// NewAuthParams creates an authorization parameters object. -func NewAuthParams(clientID string, authorityInfo Info) AuthParams { - return AuthParams{ - ClientID: clientID, - AuthorityInfo: authorityInfo, - CorrelationID: uuid.New().String(), - AuthnScheme: &bearerAuthnScheme, - } -} - -// WithTenant returns a copy of the AuthParams having the specified tenant ID. If the given -// ID is empty, the copy is identical to the original. This function returns an error in -// several cases: -// - ID isn't specific (for example, it's "common") -// - ID is non-empty and the authority doesn't support tenants (for example, it's an ADFS authority) -// - the client is configured to authenticate only Microsoft accounts via the "consumers" endpoint -// - the resulting authority URL is invalid -func (p AuthParams) WithTenant(ID string) (AuthParams, error) { - switch ID { - case "", p.AuthorityInfo.Tenant: - // keep the default tenant because the caller didn't override it - return p, nil - case "common", "consumers", "organizations": - if p.AuthorityInfo.AuthorityType == AAD { - return p, fmt.Errorf(`tenant ID must be a specific tenant, not "%s"`, ID) - } - // else we'll return a better error below - } - if p.AuthorityInfo.AuthorityType != AAD { - return p, errors.New("the authority doesn't support tenants") - } - if p.AuthorityInfo.Tenant == "consumers" { - return p, errors.New(`client is configured to authenticate only personal Microsoft accounts, via the "consumers" endpoint`) - } - authority := "https://" + path.Join(p.AuthorityInfo.Host, ID) - info, err := NewInfoFromAuthorityURI(authority, p.AuthorityInfo.ValidateAuthority, p.AuthorityInfo.InstanceDiscoveryDisabled) - if err == nil { - info.Region = p.AuthorityInfo.Region - p.AuthorityInfo = info - } - return p, err -} - -// MergeCapabilitiesAndClaims combines client capabilities and challenge claims into a value suitable for an authentication request's "claims" parameter. -func (p AuthParams) MergeCapabilitiesAndClaims() (string, error) { - claims := p.Claims - if len(p.Capabilities.asMap) > 0 { - if claims == "" { - // without claims the result is simply the capabilities - return p.Capabilities.asJSON, nil - } - // Otherwise, merge claims and capabilties into a single JSON object. - // We handle the claims challenge as a map because we don't know its structure. - var challenge map[string]any - if err := json.Unmarshal([]byte(claims), &challenge); err != nil { - return "", fmt.Errorf(`claims must be JSON. Are they base64 encoded? json.Unmarshal returned "%v"`, err) - } - if err := merge(p.Capabilities.asMap, challenge); err != nil { - return "", err - } - b, err := json.Marshal(challenge) - if err != nil { - return "", err - } - claims = string(b) - } - return claims, nil -} - -// merges a into b without overwriting b's values. Returns an error when a and b share a key for which either has a non-object value. -func merge(a, b map[string]any) error { - for k, av := range a { - if bv, ok := b[k]; !ok { - // b doesn't contain this key => simply set it to a's value - b[k] = av - } else { - // b does contain this key => recursively merge a[k] into b[k], provided both are maps. If a[k] or b[k] isn't - // a map, return an error because merging would overwrite some value in b. Errors shouldn't occur in practice - // because the challenge will be from AAD, which knows the capabilities format. - if A, ok := av.(map[string]any); ok { - if B, ok := bv.(map[string]any); ok { - return merge(A, B) - } else { - // b[k] isn't a map - return errors.New("challenge claims conflict with client capabilities") - } - } else { - // a[k] isn't a map - return errors.New("challenge claims conflict with client capabilities") - } - } - } - return nil -} - -// ClientCapabilities stores capabilities in the formats used by AuthParams.MergeCapabilitiesAndClaims. -// [NewClientCapabilities] precomputes these representations because capabilities are static for the -// lifetime of a client and are included with every authentication request i.e., these computations -// always have the same result and would otherwise have to be repeated for every request. -type ClientCapabilities struct { - // asJSON is for the common case: adding the capabilities to an auth request with no challenge claims - asJSON string - // asMap is for merging the capabilities with challenge claims - asMap map[string]any -} - -func NewClientCapabilities(capabilities []string) (ClientCapabilities, error) { - c := ClientCapabilities{} - var err error - if len(capabilities) > 0 { - cpbs := make([]string, len(capabilities)) - for i := 0; i < len(cpbs); i++ { - cpbs[i] = fmt.Sprintf(`"%s"`, capabilities[i]) - } - c.asJSON = fmt.Sprintf(`{"access_token":{"xms_cc":{"values":[%s]}}}`, strings.Join(cpbs, ",")) - // note our JSON is valid but we can't stop users breaking it with garbage like "}" - err = json.Unmarshal([]byte(c.asJSON), &c.asMap) - } - return c, err -} - -// Info consists of information about the authority. -type Info struct { - Host string - CanonicalAuthorityURI string - AuthorityType string - UserRealmURIPrefix string - ValidateAuthority bool - Tenant string - Region string - InstanceDiscoveryDisabled bool -} - -func firstPathSegment(u *url.URL) (string, error) { - pathParts := strings.Split(u.EscapedPath(), "/") - if len(pathParts) >= 2 { - return pathParts[1], nil - } - - return "", errors.New(`authority must be an https URL such as "https://login.microsoftonline.com/"`) -} - -// NewInfoFromAuthorityURI creates an AuthorityInfo instance from the authority URL provided. -func NewInfoFromAuthorityURI(authority string, validateAuthority bool, instanceDiscoveryDisabled bool) (Info, error) { - u, err := url.Parse(strings.ToLower(authority)) - if err != nil || u.Scheme != "https" { - return Info{}, errors.New(`authority must be an https URL such as "https://login.microsoftonline.com/"`) - } - - tenant, err := firstPathSegment(u) - if err != nil { - return Info{}, err - } - authorityType := AAD - if tenant == "adfs" { - authorityType = ADFS - } - - // u.Host includes the port, if any, which is required for private cloud deployments - return Info{ - Host: u.Host, - CanonicalAuthorityURI: fmt.Sprintf("https://%v/%v/", u.Host, tenant), - AuthorityType: authorityType, - UserRealmURIPrefix: fmt.Sprintf("https://%v/common/userrealm/", u.Hostname()), - ValidateAuthority: validateAuthority, - Tenant: tenant, - InstanceDiscoveryDisabled: instanceDiscoveryDisabled, - }, nil -} - -// Endpoints consists of the endpoints from the tenant discovery response. -type Endpoints struct { - AuthorizationEndpoint string - TokenEndpoint string - selfSignedJwtAudience string - authorityHost string -} - -// NewEndpoints creates an Endpoints object. -func NewEndpoints(authorizationEndpoint string, tokenEndpoint string, selfSignedJwtAudience string, authorityHost string) Endpoints { - return Endpoints{authorizationEndpoint, tokenEndpoint, selfSignedJwtAudience, authorityHost} -} - -// UserRealmAccountType refers to the type of user realm. -type UserRealmAccountType string - -// These are the different types of user realms. -const ( - Unknown UserRealmAccountType = "" - Federated UserRealmAccountType = "Federated" - Managed UserRealmAccountType = "Managed" -) - -// UserRealm is used for the username password request to determine user type -type UserRealm struct { - AccountType UserRealmAccountType `json:"account_type"` - DomainName string `json:"domain_name"` - CloudInstanceName string `json:"cloud_instance_name"` - CloudAudienceURN string `json:"cloud_audience_urn"` - - // required if accountType is Federated - FederationProtocol string `json:"federation_protocol"` - FederationMetadataURL string `json:"federation_metadata_url"` - - AdditionalFields map[string]interface{} -} - -func (u UserRealm) validate() error { - switch "" { - case string(u.AccountType): - return errors.New("the account type (Federated or Managed) is missing") - case u.DomainName: - return errors.New("domain name of user realm is missing") - case u.CloudInstanceName: - return errors.New("cloud instance name of user realm is missing") - case u.CloudAudienceURN: - return errors.New("cloud Instance URN is missing") - } - - if u.AccountType == Federated { - switch "" { - case u.FederationProtocol: - return errors.New("federation protocol of user realm is missing") - case u.FederationMetadataURL: - return errors.New("federation metadata URL of user realm is missing") - } - } - return nil -} - -// Client represents the REST calls to authority backends. -type Client struct { - // Comm provides the HTTP transport client. - Comm jsonCaller // *comm.Client -} - -func (c Client) UserRealm(ctx context.Context, authParams AuthParams) (UserRealm, error) { - endpoint := fmt.Sprintf("https://%s/common/UserRealm/%s", authParams.Endpoints.authorityHost, url.PathEscape(authParams.Username)) - qv := url.Values{ - "api-version": []string{"1.0"}, - } - - resp := UserRealm{} - err := c.Comm.JSONCall( - ctx, - endpoint, - http.Header{"client-request-id": []string{authParams.CorrelationID}}, - qv, - nil, - &resp, - ) - if err != nil { - return resp, err - } - - return resp, resp.validate() -} - -func (c Client) GetTenantDiscoveryResponse(ctx context.Context, openIDConfigurationEndpoint string) (TenantDiscoveryResponse, error) { - resp := TenantDiscoveryResponse{} - err := c.Comm.JSONCall( - ctx, - openIDConfigurationEndpoint, - http.Header{}, - nil, - nil, - &resp, - ) - - return resp, err -} - -// AADInstanceDiscovery attempts to discover a tenant endpoint (used in OIDC auth with an authorization endpoint). -// This is done by AAD which allows for aliasing of tenants (windows.sts.net is the same as login.windows.com). -func (c Client) AADInstanceDiscovery(ctx context.Context, authorityInfo Info) (InstanceDiscoveryResponse, error) { - region := "" - var err error - resp := InstanceDiscoveryResponse{} - if authorityInfo.Region != "" && authorityInfo.Region != autoDetectRegion { - region = authorityInfo.Region - } else if authorityInfo.Region == autoDetectRegion { - region = detectRegion(ctx) - } - if region != "" { - environment := authorityInfo.Host - switch environment { - case loginMicrosoft, loginWindows, loginSTSWindows, defaultHost: - environment = loginMicrosoft - } - - resp.TenantDiscoveryEndpoint = fmt.Sprintf(tenantDiscoveryEndpointWithRegion, region, environment, authorityInfo.Tenant) - metadata := InstanceDiscoveryMetadata{ - PreferredNetwork: fmt.Sprintf("%v.%v", region, authorityInfo.Host), - PreferredCache: authorityInfo.Host, - Aliases: []string{fmt.Sprintf("%v.%v", region, authorityInfo.Host), authorityInfo.Host}, - } - resp.Metadata = []InstanceDiscoveryMetadata{metadata} - } else { - qv := url.Values{} - qv.Set("api-version", "1.1") - qv.Set("authorization_endpoint", fmt.Sprintf(authorizationEndpoint, authorityInfo.Host, authorityInfo.Tenant)) - - discoveryHost := defaultHost - if TrustedHost(authorityInfo.Host) { - discoveryHost = authorityInfo.Host - } - - endpoint := fmt.Sprintf(instanceDiscoveryEndpoint, discoveryHost) - err = c.Comm.JSONCall(ctx, endpoint, http.Header{}, qv, nil, &resp) - } - return resp, err -} - -func detectRegion(ctx context.Context) string { - region := os.Getenv(regionName) - if region != "" { - region = strings.ReplaceAll(region, " ", "") - return strings.ToLower(region) - } - // HTTP call to IMDS endpoint to get region - // Refer : https://identitydivision.visualstudio.com/DevEx/_git/AuthLibrariesApiReview?path=%2FPinAuthToRegion%2FAAD%20SDK%20Proposal%20to%20Pin%20Auth%20to%20region.md&_a=preview&version=GBdev - // Set a 2 second timeout for this http client which only does calls to IMDS endpoint - client := http.Client{ - Timeout: time.Duration(2 * time.Second), - } - req, _ := http.NewRequest("GET", imdsEndpoint, nil) - req.Header.Set("Metadata", "true") - resp, err := client.Do(req) - // If the request times out or there is an error, it is retried once - if err != nil || resp.StatusCode != 200 { - resp, err = client.Do(req) - if err != nil || resp.StatusCode != 200 { - return "" - } - } - defer resp.Body.Close() - response, err := io.ReadAll(resp.Body) - if err != nil { - return "" - } - return string(response) -} - -func (a *AuthParams) CacheKey(isAppCache bool) string { - if a.AuthorizationType == ATOnBehalfOf { - return a.AssertionHash() - } - if a.AuthorizationType == ATClientCredentials || isAppCache { - return a.AppKey() - } - if a.AuthorizationType == ATRefreshToken || a.AuthorizationType == AccountByID { - return a.HomeAccountID - } - return "" -} -func (a *AuthParams) AssertionHash() string { - hasher := sha256.New() - // Per documentation this never returns an error : https://pkg.go.dev/hash#pkg-types - _, _ = hasher.Write([]byte(a.UserAssertion)) - sha := base64.URLEncoding.EncodeToString(hasher.Sum(nil)) - return sha -} - -func (a *AuthParams) AppKey() string { - if a.AuthorityInfo.Tenant != "" { - return fmt.Sprintf("%s_%s_AppTokenCache", a.ClientID, a.AuthorityInfo.Tenant) - } - return fmt.Sprintf("%s__AppTokenCache", a.ClientID) -} diff --git a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/authority/authorizetype_string.go b/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/authority/authorizetype_string.go deleted file mode 100644 index 10039773b067..000000000000 --- a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/authority/authorizetype_string.go +++ /dev/null @@ -1,30 +0,0 @@ -// Code generated by "stringer -type=AuthorizeType"; DO NOT EDIT. - -package authority - -import "strconv" - -func _() { - // An "invalid array index" compiler error signifies that the constant values have changed. - // Re-run the stringer command to generate them again. - var x [1]struct{} - _ = x[ATUnknown-0] - _ = x[ATUsernamePassword-1] - _ = x[ATWindowsIntegrated-2] - _ = x[ATAuthCode-3] - _ = x[ATInteractive-4] - _ = x[ATClientCredentials-5] - _ = x[ATDeviceCode-6] - _ = x[ATRefreshToken-7] -} - -const _AuthorizeType_name = "ATUnknownATUsernamePasswordATWindowsIntegratedATAuthCodeATInteractiveATClientCredentialsATDeviceCodeATRefreshToken" - -var _AuthorizeType_index = [...]uint8{0, 9, 27, 46, 56, 69, 88, 100, 114} - -func (i AuthorizeType) String() string { - if i < 0 || i >= AuthorizeType(len(_AuthorizeType_index)-1) { - return "AuthorizeType(" + strconv.FormatInt(int64(i), 10) + ")" - } - return _AuthorizeType_name[_AuthorizeType_index[i]:_AuthorizeType_index[i+1]] -} diff --git a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/internal/comm/comm.go b/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/internal/comm/comm.go deleted file mode 100644 index 7d9ec7cd3742..000000000000 --- a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/internal/comm/comm.go +++ /dev/null @@ -1,320 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. - -// Package comm provides helpers for communicating with HTTP backends. -package comm - -import ( - "bytes" - "context" - "encoding/json" - "encoding/xml" - "fmt" - "io" - "net/http" - "net/url" - "reflect" - "runtime" - "strings" - "time" - - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/errors" - customJSON "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/json" - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/version" - "github.com/google/uuid" -) - -// HTTPClient represents an HTTP client. -// It's usually an *http.Client from the standard library. -type HTTPClient interface { - // Do sends an HTTP request and returns an HTTP response. - Do(req *http.Request) (*http.Response, error) - - // CloseIdleConnections closes any idle connections in a "keep-alive" state. - CloseIdleConnections() -} - -// Client provides a wrapper to our *http.Client that handles compression and serialization needs. -type Client struct { - client HTTPClient -} - -// New returns a new Client object. -func New(httpClient HTTPClient) *Client { - if httpClient == nil { - panic("http.Client cannot == nil") - } - - return &Client{client: httpClient} -} - -// JSONCall connects to the REST endpoint passing the HTTP query values, headers and JSON conversion -// of body in the HTTP body. It automatically handles compression and decompression with gzip. The response is JSON -// unmarshalled into resp. resp must be a pointer to a struct. If the body struct contains a field called -// "AdditionalFields" we use a custom marshal/unmarshal engine. -func (c *Client) JSONCall(ctx context.Context, endpoint string, headers http.Header, qv url.Values, body, resp interface{}) error { - if qv == nil { - qv = url.Values{} - } - - v := reflect.ValueOf(resp) - if err := c.checkResp(v); err != nil { - return err - } - - // Choose a JSON marshal/unmarshal depending on if we have AdditionalFields attribute. - var marshal = json.Marshal - var unmarshal = json.Unmarshal - if _, ok := v.Elem().Type().FieldByName("AdditionalFields"); ok { - marshal = customJSON.Marshal - unmarshal = customJSON.Unmarshal - } - - u, err := url.Parse(endpoint) - if err != nil { - return fmt.Errorf("could not parse path URL(%s): %w", endpoint, err) - } - u.RawQuery = qv.Encode() - - addStdHeaders(headers) - - req := &http.Request{Method: http.MethodGet, URL: u, Header: headers} - - if body != nil { - // Note: In case your wondering why we are not gzip encoding.... - // I'm not sure if these various services support gzip on send. - headers.Add("Content-Type", "application/json; charset=utf-8") - data, err := marshal(body) - if err != nil { - return fmt.Errorf("bug: conn.Call(): could not marshal the body object: %w", err) - } - req.Body = io.NopCloser(bytes.NewBuffer(data)) - req.Method = http.MethodPost - } - - data, err := c.do(ctx, req) - if err != nil { - return err - } - - if resp != nil { - if err := unmarshal(data, resp); err != nil { - return fmt.Errorf("json decode error: %w\njson message bytes were: %s", err, string(data)) - } - } - return nil -} - -// XMLCall connects to an endpoint and decodes the XML response into resp. This is used when -// sending application/xml . If sending XML via SOAP, use SOAPCall(). -func (c *Client) XMLCall(ctx context.Context, endpoint string, headers http.Header, qv url.Values, resp interface{}) error { - if err := c.checkResp(reflect.ValueOf(resp)); err != nil { - return err - } - - if qv == nil { - qv = url.Values{} - } - - u, err := url.Parse(endpoint) - if err != nil { - return fmt.Errorf("could not parse path URL(%s): %w", endpoint, err) - } - u.RawQuery = qv.Encode() - - headers.Set("Content-Type", "application/xml; charset=utf-8") // This was not set in he original Mex(), but... - addStdHeaders(headers) - - return c.xmlCall(ctx, u, headers, "", resp) -} - -// SOAPCall returns the SOAP message given an endpoint, action, body of the request and the response object to marshal into. -func (c *Client) SOAPCall(ctx context.Context, endpoint, action string, headers http.Header, qv url.Values, body string, resp interface{}) error { - if body == "" { - return fmt.Errorf("cannot make a SOAP call with body set to empty string") - } - - if err := c.checkResp(reflect.ValueOf(resp)); err != nil { - return err - } - - if qv == nil { - qv = url.Values{} - } - - u, err := url.Parse(endpoint) - if err != nil { - return fmt.Errorf("could not parse path URL(%s): %w", endpoint, err) - } - u.RawQuery = qv.Encode() - - headers.Set("Content-Type", "application/soap+xml; charset=utf-8") - headers.Set("SOAPAction", action) - addStdHeaders(headers) - - return c.xmlCall(ctx, u, headers, body, resp) -} - -// xmlCall sends an XML in body and decodes into resp. This simply does the transport and relies on -// an upper level call to set things such as SOAP parameters and Content-Type, if required. -func (c *Client) xmlCall(ctx context.Context, u *url.URL, headers http.Header, body string, resp interface{}) error { - req := &http.Request{Method: http.MethodGet, URL: u, Header: headers} - - if len(body) > 0 { - req.Method = http.MethodPost - req.Body = io.NopCloser(strings.NewReader(body)) - } - - data, err := c.do(ctx, req) - if err != nil { - return err - } - - return xml.Unmarshal(data, resp) -} - -// URLFormCall is used to make a call where we need to send application/x-www-form-urlencoded data -// to the backend and receive JSON back. qv will be encoded into the request body. -func (c *Client) URLFormCall(ctx context.Context, endpoint string, qv url.Values, resp interface{}) error { - if len(qv) == 0 { - return fmt.Errorf("URLFormCall() requires qv to have non-zero length") - } - - if err := c.checkResp(reflect.ValueOf(resp)); err != nil { - return err - } - - u, err := url.Parse(endpoint) - if err != nil { - return fmt.Errorf("could not parse path URL(%s): %w", endpoint, err) - } - - headers := http.Header{} - headers.Set("Content-Type", "application/x-www-form-urlencoded; charset=utf-8") - addStdHeaders(headers) - - enc := qv.Encode() - - req := &http.Request{ - Method: http.MethodPost, - URL: u, - Header: headers, - ContentLength: int64(len(enc)), - Body: io.NopCloser(strings.NewReader(enc)), - GetBody: func() (io.ReadCloser, error) { - return io.NopCloser(strings.NewReader(enc)), nil - }, - } - - data, err := c.do(ctx, req) - if err != nil { - return err - } - - v := reflect.ValueOf(resp) - if err := c.checkResp(v); err != nil { - return err - } - - var unmarshal = json.Unmarshal - if _, ok := v.Elem().Type().FieldByName("AdditionalFields"); ok { - unmarshal = customJSON.Unmarshal - } - if resp != nil { - if err := unmarshal(data, resp); err != nil { - return fmt.Errorf("json decode error: %w\nraw message was: %s", err, string(data)) - } - } - return nil -} - -// do makes the HTTP call to the server and returns the contents of the body. -func (c *Client) do(ctx context.Context, req *http.Request) ([]byte, error) { - if _, ok := ctx.Deadline(); !ok { - var cancel context.CancelFunc - ctx, cancel = context.WithTimeout(ctx, 30*time.Second) - defer cancel() - } - req = req.WithContext(ctx) - - reply, err := c.client.Do(req) - if err != nil { - return nil, fmt.Errorf("server response error:\n %w", err) - } - defer reply.Body.Close() - - data, err := c.readBody(reply) - if err != nil { - return nil, fmt.Errorf("could not read the body of an HTTP Response: %w", err) - } - reply.Body = io.NopCloser(bytes.NewBuffer(data)) - - // NOTE: This doesn't happen immediately after the call so that we can get an error message - // from the server and include it in our error. - switch reply.StatusCode { - case 200, 201: - default: - sd := strings.TrimSpace(string(data)) - if sd != "" { - // We probably have the error in the body. - return nil, errors.CallErr{ - Req: req, - Resp: reply, - Err: fmt.Errorf("http call(%s)(%s) error: reply status code was %d:\n%s", req.URL.String(), req.Method, reply.StatusCode, sd), - } - } - return nil, errors.CallErr{ - Req: req, - Resp: reply, - Err: fmt.Errorf("http call(%s)(%s) error: reply status code was %d", req.URL.String(), req.Method, reply.StatusCode), - } - } - - return data, nil -} - -// checkResp checks a response object o make sure it is a pointer to a struct. -func (c *Client) checkResp(v reflect.Value) error { - if v.Kind() != reflect.Ptr { - return fmt.Errorf("bug: resp argument must a *struct, was %T", v.Interface()) - } - v = v.Elem() - if v.Kind() != reflect.Struct { - return fmt.Errorf("bug: resp argument must be a *struct, was %T", v.Interface()) - } - return nil -} - -// readBody reads the body out of an *http.Response. It supports gzip encoded responses. -func (c *Client) readBody(resp *http.Response) ([]byte, error) { - var reader io.Reader = resp.Body - switch resp.Header.Get("Content-Encoding") { - case "": - // Do nothing - case "gzip": - reader = gzipDecompress(resp.Body) - default: - return nil, fmt.Errorf("bug: comm.Client.JSONCall(): content was send with unsupported content-encoding %s", resp.Header.Get("Content-Encoding")) - } - return io.ReadAll(reader) -} - -var testID string - -// addStdHeaders adds the standard headers we use on all calls. -func addStdHeaders(headers http.Header) http.Header { - headers.Set("Accept-Encoding", "gzip") - // So that I can have a static id for tests. - if testID != "" { - headers.Set("client-request-id", testID) - headers.Set("Return-Client-Request-Id", "false") - } else { - headers.Set("client-request-id", uuid.New().String()) - headers.Set("Return-Client-Request-Id", "false") - } - headers.Set("x-client-sku", "MSAL.Go") - headers.Set("x-client-os", runtime.GOOS) - headers.Set("x-client-cpu", runtime.GOARCH) - headers.Set("x-client-ver", version.Version) - return headers -} diff --git a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/internal/comm/compress.go b/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/internal/comm/compress.go deleted file mode 100644 index 4d3dbfcf0a6b..000000000000 --- a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/internal/comm/compress.go +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. - -package comm - -import ( - "compress/gzip" - "io" -) - -func gzipDecompress(r io.Reader) io.Reader { - gzipReader, _ := gzip.NewReader(r) - - pipeOut, pipeIn := io.Pipe() - go func() { - // decompression bomb would have to come from Azure services. - // If we want to limit, we should do that in comm.do(). - _, err := io.Copy(pipeIn, gzipReader) //nolint - if err != nil { - // don't need the error. - pipeIn.CloseWithError(err) //nolint - gzipReader.Close() - return - } - if err := gzipReader.Close(); err != nil { - // don't need the error. - pipeIn.CloseWithError(err) //nolint - return - } - pipeIn.Close() - }() - return pipeOut -} diff --git a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/internal/grant/grant.go b/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/internal/grant/grant.go deleted file mode 100644 index b628f61ac081..000000000000 --- a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/internal/grant/grant.go +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. - -// Package grant holds types of grants issued by authorization services. -package grant - -const ( - Password = "password" - JWT = "urn:ietf:params:oauth:grant-type:jwt-bearer" - SAMLV1 = "urn:ietf:params:oauth:grant-type:saml1_1-bearer" - SAMLV2 = "urn:ietf:params:oauth:grant-type:saml2-bearer" - DeviceCode = "device_code" - AuthCode = "authorization_code" - RefreshToken = "refresh_token" - ClientCredential = "client_credentials" - ClientAssertion = "urn:ietf:params:oauth:client-assertion-type:jwt-bearer" -) diff --git a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/ops.go b/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/ops.go deleted file mode 100644 index 1f9c543fa3b2..000000000000 --- a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/ops.go +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. - -/* -Package ops provides operations to various backend services using REST clients. - -The REST type provides several clients that can be used to communicate to backends. -Usage is simple: - - rest := ops.New() - - // Creates an authority client and calls the UserRealm() method. - userRealm, err := rest.Authority().UserRealm(ctx, authParameters) - if err != nil { - // Do something - } -*/ -package ops - -import ( - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/accesstokens" - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/authority" - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/internal/comm" - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/wstrust" -) - -// HTTPClient represents an HTTP client. -// It's usually an *http.Client from the standard library. -type HTTPClient = comm.HTTPClient - -// REST provides REST clients for communicating with various backends used by MSAL. -type REST struct { - client *comm.Client -} - -// New is the constructor for REST. -func New(httpClient HTTPClient) *REST { - return &REST{client: comm.New(httpClient)} -} - -// Authority returns a client for querying information about various authorities. -func (r *REST) Authority() authority.Client { - return authority.Client{Comm: r.client} -} - -// AccessTokens returns a client that can be used to get various access tokens for -// authorization purposes. -func (r *REST) AccessTokens() accesstokens.Client { - return accesstokens.Client{Comm: r.client} -} - -// WSTrust provides access to various metadata in a WSTrust service. This data can -// be used to gain tokens based on SAML data using the client provided by AccessTokens(). -func (r *REST) WSTrust() wstrust.Client { - return wstrust.Client{Comm: r.client} -} diff --git a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/wstrust/defs/endpointtype_string.go b/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/wstrust/defs/endpointtype_string.go deleted file mode 100644 index a2bb6278ae5f..000000000000 --- a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/wstrust/defs/endpointtype_string.go +++ /dev/null @@ -1,25 +0,0 @@ -// Code generated by "stringer -type=endpointType"; DO NOT EDIT. - -package defs - -import "strconv" - -func _() { - // An "invalid array index" compiler error signifies that the constant values have changed. - // Re-run the stringer command to generate them again. - var x [1]struct{} - _ = x[etUnknown-0] - _ = x[etUsernamePassword-1] - _ = x[etWindowsTransport-2] -} - -const _endpointType_name = "etUnknownetUsernamePasswordetWindowsTransport" - -var _endpointType_index = [...]uint8{0, 9, 27, 45} - -func (i endpointType) String() string { - if i < 0 || i >= endpointType(len(_endpointType_index)-1) { - return "endpointType(" + strconv.FormatInt(int64(i), 10) + ")" - } - return _endpointType_name[_endpointType_index[i]:_endpointType_index[i+1]] -} diff --git a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/wstrust/defs/mex_document_definitions.go b/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/wstrust/defs/mex_document_definitions.go deleted file mode 100644 index 6497270028d8..000000000000 --- a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/wstrust/defs/mex_document_definitions.go +++ /dev/null @@ -1,394 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. - -package defs - -import "encoding/xml" - -type Definitions struct { - XMLName xml.Name `xml:"definitions"` - Text string `xml:",chardata"` - Name string `xml:"name,attr"` - TargetNamespace string `xml:"targetNamespace,attr"` - WSDL string `xml:"wsdl,attr"` - XSD string `xml:"xsd,attr"` - T string `xml:"t,attr"` - SOAPENC string `xml:"soapenc,attr"` - SOAP string `xml:"soap,attr"` - TNS string `xml:"tns,attr"` - MSC string `xml:"msc,attr"` - WSAM string `xml:"wsam,attr"` - SOAP12 string `xml:"soap12,attr"` - WSA10 string `xml:"wsa10,attr"` - WSA string `xml:"wsa,attr"` - WSAW string `xml:"wsaw,attr"` - WSX string `xml:"wsx,attr"` - WSAP string `xml:"wsap,attr"` - WSU string `xml:"wsu,attr"` - Trust string `xml:"trust,attr"` - WSP string `xml:"wsp,attr"` - Policy []Policy `xml:"Policy"` - Types Types `xml:"types"` - Message []Message `xml:"message"` - PortType []PortType `xml:"portType"` - Binding []Binding `xml:"binding"` - Service Service `xml:"service"` -} - -type Policy struct { - Text string `xml:",chardata"` - ID string `xml:"Id,attr"` - ExactlyOne ExactlyOne `xml:"ExactlyOne"` -} - -type ExactlyOne struct { - Text string `xml:",chardata"` - All All `xml:"All"` -} - -type All struct { - Text string `xml:",chardata"` - NegotiateAuthentication NegotiateAuthentication `xml:"NegotiateAuthentication"` - TransportBinding TransportBinding `xml:"TransportBinding"` - UsingAddressing Text `xml:"UsingAddressing"` - EndorsingSupportingTokens EndorsingSupportingTokens `xml:"EndorsingSupportingTokens"` - WSS11 WSS11 `xml:"Wss11"` - Trust10 Trust10 `xml:"Trust10"` - SignedSupportingTokens SignedSupportingTokens `xml:"SignedSupportingTokens"` - Trust13 WSTrust13 `xml:"Trust13"` - SignedEncryptedSupportingTokens SignedEncryptedSupportingTokens `xml:"SignedEncryptedSupportingTokens"` -} - -type NegotiateAuthentication struct { - Text string `xml:",chardata"` - HTTP string `xml:"http,attr"` - XMLName xml.Name -} - -type TransportBinding struct { - Text string `xml:",chardata"` - SP string `xml:"sp,attr"` - Policy TransportBindingPolicy `xml:"Policy"` -} - -type TransportBindingPolicy struct { - Text string `xml:",chardata"` - TransportToken TransportToken `xml:"TransportToken"` - AlgorithmSuite AlgorithmSuite `xml:"AlgorithmSuite"` - Layout Layout `xml:"Layout"` - IncludeTimestamp Text `xml:"IncludeTimestamp"` -} - -type TransportToken struct { - Text string `xml:",chardata"` - Policy TransportTokenPolicy `xml:"Policy"` -} - -type TransportTokenPolicy struct { - Text string `xml:",chardata"` - HTTPSToken HTTPSToken `xml:"HttpsToken"` -} - -type HTTPSToken struct { - Text string `xml:",chardata"` - RequireClientCertificate string `xml:"RequireClientCertificate,attr"` -} - -type AlgorithmSuite struct { - Text string `xml:",chardata"` - Policy AlgorithmSuitePolicy `xml:"Policy"` -} - -type AlgorithmSuitePolicy struct { - Text string `xml:",chardata"` - Basic256 Text `xml:"Basic256"` - Basic128 Text `xml:"Basic128"` -} - -type Layout struct { - Text string `xml:",chardata"` - Policy LayoutPolicy `xml:"Policy"` -} - -type LayoutPolicy struct { - Text string `xml:",chardata"` - Strict Text `xml:"Strict"` -} - -type EndorsingSupportingTokens struct { - Text string `xml:",chardata"` - SP string `xml:"sp,attr"` - Policy EndorsingSupportingTokensPolicy `xml:"Policy"` -} - -type EndorsingSupportingTokensPolicy struct { - Text string `xml:",chardata"` - X509Token X509Token `xml:"X509Token"` - RSAToken RSAToken `xml:"RsaToken"` - SignedParts SignedParts `xml:"SignedParts"` - KerberosToken KerberosToken `xml:"KerberosToken"` - IssuedToken IssuedToken `xml:"IssuedToken"` - KeyValueToken KeyValueToken `xml:"KeyValueToken"` -} - -type X509Token struct { - Text string `xml:",chardata"` - IncludeToken string `xml:"IncludeToken,attr"` - Policy X509TokenPolicy `xml:"Policy"` -} - -type X509TokenPolicy struct { - Text string `xml:",chardata"` - RequireThumbprintReference Text `xml:"RequireThumbprintReference"` - WSSX509V3Token10 Text `xml:"WssX509V3Token10"` -} - -type RSAToken struct { - Text string `xml:",chardata"` - IncludeToken string `xml:"IncludeToken,attr"` - Optional string `xml:"Optional,attr"` - MSSP string `xml:"mssp,attr"` -} - -type SignedParts struct { - Text string `xml:",chardata"` - Header SignedPartsHeader `xml:"Header"` -} - -type SignedPartsHeader struct { - Text string `xml:",chardata"` - Name string `xml:"Name,attr"` - Namespace string `xml:"Namespace,attr"` -} - -type KerberosToken struct { - Text string `xml:",chardata"` - IncludeToken string `xml:"IncludeToken,attr"` - Policy KerberosTokenPolicy `xml:"Policy"` -} - -type KerberosTokenPolicy struct { - Text string `xml:",chardata"` - WSSGSSKerberosV5ApReqToken11 Text `xml:"WssGssKerberosV5ApReqToken11"` -} - -type IssuedToken struct { - Text string `xml:",chardata"` - IncludeToken string `xml:"IncludeToken,attr"` - RequestSecurityTokenTemplate RequestSecurityTokenTemplate `xml:"RequestSecurityTokenTemplate"` - Policy IssuedTokenPolicy `xml:"Policy"` -} - -type RequestSecurityTokenTemplate struct { - Text string `xml:",chardata"` - KeyType Text `xml:"KeyType"` - EncryptWith Text `xml:"EncryptWith"` - SignatureAlgorithm Text `xml:"SignatureAlgorithm"` - CanonicalizationAlgorithm Text `xml:"CanonicalizationAlgorithm"` - EncryptionAlgorithm Text `xml:"EncryptionAlgorithm"` - KeySize Text `xml:"KeySize"` - KeyWrapAlgorithm Text `xml:"KeyWrapAlgorithm"` -} - -type IssuedTokenPolicy struct { - Text string `xml:",chardata"` - RequireInternalReference Text `xml:"RequireInternalReference"` -} - -type KeyValueToken struct { - Text string `xml:",chardata"` - IncludeToken string `xml:"IncludeToken,attr"` - Optional string `xml:"Optional,attr"` -} - -type WSS11 struct { - Text string `xml:",chardata"` - SP string `xml:"sp,attr"` - Policy Wss11Policy `xml:"Policy"` -} - -type Wss11Policy struct { - Text string `xml:",chardata"` - MustSupportRefThumbprint Text `xml:"MustSupportRefThumbprint"` -} - -type Trust10 struct { - Text string `xml:",chardata"` - SP string `xml:"sp,attr"` - Policy Trust10Policy `xml:"Policy"` -} - -type Trust10Policy struct { - Text string `xml:",chardata"` - MustSupportIssuedTokens Text `xml:"MustSupportIssuedTokens"` - RequireClientEntropy Text `xml:"RequireClientEntropy"` - RequireServerEntropy Text `xml:"RequireServerEntropy"` -} - -type SignedSupportingTokens struct { - Text string `xml:",chardata"` - SP string `xml:"sp,attr"` - Policy SupportingTokensPolicy `xml:"Policy"` -} - -type SupportingTokensPolicy struct { - Text string `xml:",chardata"` - UsernameToken UsernameToken `xml:"UsernameToken"` -} -type UsernameToken struct { - Text string `xml:",chardata"` - IncludeToken string `xml:"IncludeToken,attr"` - Policy UsernameTokenPolicy `xml:"Policy"` -} - -type UsernameTokenPolicy struct { - Text string `xml:",chardata"` - WSSUsernameToken10 WSSUsernameToken10 `xml:"WssUsernameToken10"` -} - -type WSSUsernameToken10 struct { - Text string `xml:",chardata"` - XMLName xml.Name -} - -type WSTrust13 struct { - Text string `xml:",chardata"` - SP string `xml:"sp,attr"` - Policy WSTrust13Policy `xml:"Policy"` -} - -type WSTrust13Policy struct { - Text string `xml:",chardata"` - MustSupportIssuedTokens Text `xml:"MustSupportIssuedTokens"` - RequireClientEntropy Text `xml:"RequireClientEntropy"` - RequireServerEntropy Text `xml:"RequireServerEntropy"` -} - -type SignedEncryptedSupportingTokens struct { - Text string `xml:",chardata"` - SP string `xml:"sp,attr"` - Policy SupportingTokensPolicy `xml:"Policy"` -} - -type Types struct { - Text string `xml:",chardata"` - Schema Schema `xml:"schema"` -} - -type Schema struct { - Text string `xml:",chardata"` - TargetNamespace string `xml:"targetNamespace,attr"` - Import []Import `xml:"import"` -} - -type Import struct { - Text string `xml:",chardata"` - SchemaLocation string `xml:"schemaLocation,attr"` - Namespace string `xml:"namespace,attr"` -} - -type Message struct { - Text string `xml:",chardata"` - Name string `xml:"name,attr"` - Part Part `xml:"part"` -} - -type Part struct { - Text string `xml:",chardata"` - Name string `xml:"name,attr"` - Element string `xml:"element,attr"` -} - -type PortType struct { - Text string `xml:",chardata"` - Name string `xml:"name,attr"` - Operation Operation `xml:"operation"` -} - -type Operation struct { - Text string `xml:",chardata"` - Name string `xml:"name,attr"` - Input OperationIO `xml:"input"` - Output OperationIO `xml:"output"` -} - -type OperationIO struct { - Text string `xml:",chardata"` - Action string `xml:"Action,attr"` - Message string `xml:"message,attr"` - Body OperationIOBody `xml:"body"` -} - -type OperationIOBody struct { - Text string `xml:",chardata"` - Use string `xml:"use,attr"` -} - -type Binding struct { - Text string `xml:",chardata"` - Name string `xml:"name,attr"` - Type string `xml:"type,attr"` - PolicyReference PolicyReference `xml:"PolicyReference"` - Binding DefinitionsBinding `xml:"binding"` - Operation BindingOperation `xml:"operation"` -} - -type PolicyReference struct { - Text string `xml:",chardata"` - URI string `xml:"URI,attr"` -} - -type DefinitionsBinding struct { - Text string `xml:",chardata"` - Transport string `xml:"transport,attr"` -} - -type BindingOperation struct { - Text string `xml:",chardata"` - Name string `xml:"name,attr"` - Operation BindingOperationOperation `xml:"operation"` - Input BindingOperationIO `xml:"input"` - Output BindingOperationIO `xml:"output"` -} - -type BindingOperationOperation struct { - Text string `xml:",chardata"` - SoapAction string `xml:"soapAction,attr"` - Style string `xml:"style,attr"` -} - -type BindingOperationIO struct { - Text string `xml:",chardata"` - Body OperationIOBody `xml:"body"` -} - -type Service struct { - Text string `xml:",chardata"` - Name string `xml:"name,attr"` - Port []Port `xml:"port"` -} - -type Port struct { - Text string `xml:",chardata"` - Name string `xml:"name,attr"` - Binding string `xml:"binding,attr"` - Address Address `xml:"address"` - EndpointReference PortEndpointReference `xml:"EndpointReference"` -} - -type Address struct { - Text string `xml:",chardata"` - Location string `xml:"location,attr"` -} - -type PortEndpointReference struct { - Text string `xml:",chardata"` - Address Text `xml:"Address"` - Identity Identity `xml:"Identity"` -} - -type Identity struct { - Text string `xml:",chardata"` - XMLNS string `xml:"xmlns,attr"` - SPN Text `xml:"Spn"` -} diff --git a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/wstrust/defs/saml_assertion_definitions.go b/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/wstrust/defs/saml_assertion_definitions.go deleted file mode 100644 index 7d0725565777..000000000000 --- a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/wstrust/defs/saml_assertion_definitions.go +++ /dev/null @@ -1,230 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. - -package defs - -import "encoding/xml" - -// TODO(msal): Someone (and it ain't gonna be me) needs to document these attributes or -// at the least put a link to RFC. - -type SAMLDefinitions struct { - XMLName xml.Name `xml:"Envelope"` - Text string `xml:",chardata"` - S string `xml:"s,attr"` - A string `xml:"a,attr"` - U string `xml:"u,attr"` - Header Header `xml:"Header"` - Body Body `xml:"Body"` -} - -type Header struct { - Text string `xml:",chardata"` - Action Action `xml:"Action"` - Security Security `xml:"Security"` -} - -type Action struct { - Text string `xml:",chardata"` - MustUnderstand string `xml:"mustUnderstand,attr"` -} - -type Security struct { - Text string `xml:",chardata"` - MustUnderstand string `xml:"mustUnderstand,attr"` - O string `xml:"o,attr"` - Timestamp Timestamp `xml:"Timestamp"` -} - -type Timestamp struct { - Text string `xml:",chardata"` - ID string `xml:"Id,attr"` - Created Text `xml:"Created"` - Expires Text `xml:"Expires"` -} - -type Text struct { - Text string `xml:",chardata"` -} - -type Body struct { - Text string `xml:",chardata"` - RequestSecurityTokenResponseCollection RequestSecurityTokenResponseCollection `xml:"RequestSecurityTokenResponseCollection"` -} - -type RequestSecurityTokenResponseCollection struct { - Text string `xml:",chardata"` - Trust string `xml:"trust,attr"` - RequestSecurityTokenResponse []RequestSecurityTokenResponse `xml:"RequestSecurityTokenResponse"` -} - -type RequestSecurityTokenResponse struct { - Text string `xml:",chardata"` - Lifetime Lifetime `xml:"Lifetime"` - AppliesTo AppliesTo `xml:"AppliesTo"` - RequestedSecurityToken RequestedSecurityToken `xml:"RequestedSecurityToken"` - RequestedAttachedReference RequestedAttachedReference `xml:"RequestedAttachedReference"` - RequestedUnattachedReference RequestedUnattachedReference `xml:"RequestedUnattachedReference"` - TokenType Text `xml:"TokenType"` - RequestType Text `xml:"RequestType"` - KeyType Text `xml:"KeyType"` -} - -type Lifetime struct { - Text string `xml:",chardata"` - Created WSUTimestamp `xml:"Created"` - Expires WSUTimestamp `xml:"Expires"` -} - -type WSUTimestamp struct { - Text string `xml:",chardata"` - Wsu string `xml:"wsu,attr"` -} - -type AppliesTo struct { - Text string `xml:",chardata"` - Wsp string `xml:"wsp,attr"` - EndpointReference EndpointReference `xml:"EndpointReference"` -} - -type EndpointReference struct { - Text string `xml:",chardata"` - Wsa string `xml:"wsa,attr"` - Address Text `xml:"Address"` -} - -type RequestedSecurityToken struct { - Text string `xml:",chardata"` - AssertionRawXML string `xml:",innerxml"` - Assertion Assertion `xml:"Assertion"` -} - -type Assertion struct { - XMLName xml.Name // Normally its `xml:"Assertion"`, but I think they want to capture the xmlns - Text string `xml:",chardata"` - MajorVersion string `xml:"MajorVersion,attr"` - MinorVersion string `xml:"MinorVersion,attr"` - AssertionID string `xml:"AssertionID,attr"` - Issuer string `xml:"Issuer,attr"` - IssueInstant string `xml:"IssueInstant,attr"` - Saml string `xml:"saml,attr"` - Conditions Conditions `xml:"Conditions"` - AttributeStatement AttributeStatement `xml:"AttributeStatement"` - AuthenticationStatement AuthenticationStatement `xml:"AuthenticationStatement"` - Signature Signature `xml:"Signature"` -} - -type Conditions struct { - Text string `xml:",chardata"` - NotBefore string `xml:"NotBefore,attr"` - NotOnOrAfter string `xml:"NotOnOrAfter,attr"` - AudienceRestrictionCondition AudienceRestrictionCondition `xml:"AudienceRestrictionCondition"` -} - -type AudienceRestrictionCondition struct { - Text string `xml:",chardata"` - Audience Text `xml:"Audience"` -} - -type AttributeStatement struct { - Text string `xml:",chardata"` - Subject Subject `xml:"Subject"` - Attribute []Attribute `xml:"Attribute"` -} - -type Subject struct { - Text string `xml:",chardata"` - NameIdentifier NameIdentifier `xml:"NameIdentifier"` - SubjectConfirmation SubjectConfirmation `xml:"SubjectConfirmation"` -} - -type NameIdentifier struct { - Text string `xml:",chardata"` - Format string `xml:"Format,attr"` -} - -type SubjectConfirmation struct { - Text string `xml:",chardata"` - ConfirmationMethod Text `xml:"ConfirmationMethod"` -} - -type Attribute struct { - Text string `xml:",chardata"` - AttributeName string `xml:"AttributeName,attr"` - AttributeNamespace string `xml:"AttributeNamespace,attr"` - AttributeValue Text `xml:"AttributeValue"` -} - -type AuthenticationStatement struct { - Text string `xml:",chardata"` - AuthenticationMethod string `xml:"AuthenticationMethod,attr"` - AuthenticationInstant string `xml:"AuthenticationInstant,attr"` - Subject Subject `xml:"Subject"` -} - -type Signature struct { - Text string `xml:",chardata"` - Ds string `xml:"ds,attr"` - SignedInfo SignedInfo `xml:"SignedInfo"` - SignatureValue Text `xml:"SignatureValue"` - KeyInfo KeyInfo `xml:"KeyInfo"` -} - -type SignedInfo struct { - Text string `xml:",chardata"` - CanonicalizationMethod Method `xml:"CanonicalizationMethod"` - SignatureMethod Method `xml:"SignatureMethod"` - Reference Reference `xml:"Reference"` -} - -type Method struct { - Text string `xml:",chardata"` - Algorithm string `xml:"Algorithm,attr"` -} - -type Reference struct { - Text string `xml:",chardata"` - URI string `xml:"URI,attr"` - Transforms Transforms `xml:"Transforms"` - DigestMethod Method `xml:"DigestMethod"` - DigestValue Text `xml:"DigestValue"` -} - -type Transforms struct { - Text string `xml:",chardata"` - Transform []Method `xml:"Transform"` -} - -type KeyInfo struct { - Text string `xml:",chardata"` - Xmlns string `xml:"xmlns,attr"` - X509Data X509Data `xml:"X509Data"` -} - -type X509Data struct { - Text string `xml:",chardata"` - X509Certificate Text `xml:"X509Certificate"` -} - -type RequestedAttachedReference struct { - Text string `xml:",chardata"` - SecurityTokenReference SecurityTokenReference `xml:"SecurityTokenReference"` -} - -type SecurityTokenReference struct { - Text string `xml:",chardata"` - TokenType string `xml:"TokenType,attr"` - O string `xml:"o,attr"` - K string `xml:"k,attr"` - KeyIdentifier KeyIdentifier `xml:"KeyIdentifier"` -} - -type KeyIdentifier struct { - Text string `xml:",chardata"` - ValueType string `xml:"ValueType,attr"` -} - -type RequestedUnattachedReference struct { - Text string `xml:",chardata"` - SecurityTokenReference SecurityTokenReference `xml:"SecurityTokenReference"` -} diff --git a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/wstrust/defs/version_string.go b/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/wstrust/defs/version_string.go deleted file mode 100644 index 6fe5efa8a9ab..000000000000 --- a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/wstrust/defs/version_string.go +++ /dev/null @@ -1,25 +0,0 @@ -// Code generated by "stringer -type=Version"; DO NOT EDIT. - -package defs - -import "strconv" - -func _() { - // An "invalid array index" compiler error signifies that the constant values have changed. - // Re-run the stringer command to generate them again. - var x [1]struct{} - _ = x[TrustUnknown-0] - _ = x[Trust2005-1] - _ = x[Trust13-2] -} - -const _Version_name = "TrustUnknownTrust2005Trust13" - -var _Version_index = [...]uint8{0, 12, 21, 28} - -func (i Version) String() string { - if i < 0 || i >= Version(len(_Version_index)-1) { - return "Version(" + strconv.FormatInt(int64(i), 10) + ")" - } - return _Version_name[_Version_index[i]:_Version_index[i+1]] -} diff --git a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/wstrust/defs/wstrust_endpoint.go b/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/wstrust/defs/wstrust_endpoint.go deleted file mode 100644 index 8fad5efb5de5..000000000000 --- a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/wstrust/defs/wstrust_endpoint.go +++ /dev/null @@ -1,199 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. - -package defs - -import ( - "encoding/xml" - "fmt" - "time" - - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/authority" - uuid "github.com/google/uuid" -) - -//go:generate stringer -type=Version - -type Version int - -const ( - TrustUnknown Version = iota - Trust2005 - Trust13 -) - -// Endpoint represents a WSTrust endpoint. -type Endpoint struct { - // Version is the version of the endpoint. - Version Version - // URL is the URL of the endpoint. - URL string -} - -type wsTrustTokenRequestEnvelope struct { - XMLName xml.Name `xml:"s:Envelope"` - Text string `xml:",chardata"` - S string `xml:"xmlns:s,attr"` - Wsa string `xml:"xmlns:wsa,attr"` - Wsu string `xml:"xmlns:wsu,attr"` - Header struct { - Text string `xml:",chardata"` - Action struct { - Text string `xml:",chardata"` - MustUnderstand string `xml:"s:mustUnderstand,attr"` - } `xml:"wsa:Action"` - MessageID struct { - Text string `xml:",chardata"` - } `xml:"wsa:messageID"` - ReplyTo struct { - Text string `xml:",chardata"` - Address struct { - Text string `xml:",chardata"` - } `xml:"wsa:Address"` - } `xml:"wsa:ReplyTo"` - To struct { - Text string `xml:",chardata"` - MustUnderstand string `xml:"s:mustUnderstand,attr"` - } `xml:"wsa:To"` - Security struct { - Text string `xml:",chardata"` - MustUnderstand string `xml:"s:mustUnderstand,attr"` - Wsse string `xml:"xmlns:wsse,attr"` - Timestamp struct { - Text string `xml:",chardata"` - ID string `xml:"wsu:Id,attr"` - Created struct { - Text string `xml:",chardata"` - } `xml:"wsu:Created"` - Expires struct { - Text string `xml:",chardata"` - } `xml:"wsu:Expires"` - } `xml:"wsu:Timestamp"` - UsernameToken struct { - Text string `xml:",chardata"` - ID string `xml:"wsu:Id,attr"` - Username struct { - Text string `xml:",chardata"` - } `xml:"wsse:Username"` - Password struct { - Text string `xml:",chardata"` - } `xml:"wsse:Password"` - } `xml:"wsse:UsernameToken"` - } `xml:"wsse:Security"` - } `xml:"s:Header"` - Body struct { - Text string `xml:",chardata"` - RequestSecurityToken struct { - Text string `xml:",chardata"` - Wst string `xml:"xmlns:wst,attr"` - AppliesTo struct { - Text string `xml:",chardata"` - Wsp string `xml:"xmlns:wsp,attr"` - EndpointReference struct { - Text string `xml:",chardata"` - Address struct { - Text string `xml:",chardata"` - } `xml:"wsa:Address"` - } `xml:"wsa:EndpointReference"` - } `xml:"wsp:AppliesTo"` - KeyType struct { - Text string `xml:",chardata"` - } `xml:"wst:KeyType"` - RequestType struct { - Text string `xml:",chardata"` - } `xml:"wst:RequestType"` - } `xml:"wst:RequestSecurityToken"` - } `xml:"s:Body"` -} - -func buildTimeString(t time.Time) string { - // Golang time formats are weird: https://stackoverflow.com/questions/20234104/how-to-format-current-time-using-a-yyyymmddhhmmss-format - return t.Format("2006-01-02T15:04:05.000Z") -} - -func (wte *Endpoint) buildTokenRequestMessage(authType authority.AuthorizeType, cloudAudienceURN string, username string, password string) (string, error) { - var soapAction string - var trustNamespace string - var keyType string - var requestType string - - createdTime := time.Now().UTC() - expiresTime := createdTime.Add(10 * time.Minute) - - switch wte.Version { - case Trust2005: - soapAction = trust2005Spec - trustNamespace = "http://schemas.xmlsoap.org/ws/2005/02/trust" - keyType = "http://schemas.xmlsoap.org/ws/2005/05/identity/NoProofKey" - requestType = "http://schemas.xmlsoap.org/ws/2005/02/trust/Issue" - case Trust13: - soapAction = trust13Spec - trustNamespace = "http://docs.oasis-open.org/ws-sx/ws-trust/200512" - keyType = "http://docs.oasis-open.org/ws-sx/ws-trust/200512/Bearer" - requestType = "http://docs.oasis-open.org/ws-sx/ws-trust/200512/Issue" - default: - return "", fmt.Errorf("buildTokenRequestMessage had Version == %q, which is not recognized", wte.Version) - } - - var envelope wsTrustTokenRequestEnvelope - - messageUUID := uuid.New() - - envelope.S = "http://www.w3.org/2003/05/soap-envelope" - envelope.Wsa = "http://www.w3.org/2005/08/addressing" - envelope.Wsu = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" - - envelope.Header.Action.MustUnderstand = "1" - envelope.Header.Action.Text = soapAction - envelope.Header.MessageID.Text = "urn:uuid:" + messageUUID.String() - envelope.Header.ReplyTo.Address.Text = "http://www.w3.org/2005/08/addressing/anonymous" - envelope.Header.To.MustUnderstand = "1" - envelope.Header.To.Text = wte.URL - - switch authType { - case authority.ATUnknown: - return "", fmt.Errorf("buildTokenRequestMessage had no authority type(%v)", authType) - case authority.ATUsernamePassword: - endpointUUID := uuid.New() - - var trustID string - if wte.Version == Trust2005 { - trustID = "UnPwSecTok2005-" + endpointUUID.String() - } else { - trustID = "UnPwSecTok13-" + endpointUUID.String() - } - - envelope.Header.Security.MustUnderstand = "1" - envelope.Header.Security.Wsse = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" - envelope.Header.Security.Timestamp.ID = "MSATimeStamp" - envelope.Header.Security.Timestamp.Created.Text = buildTimeString(createdTime) - envelope.Header.Security.Timestamp.Expires.Text = buildTimeString(expiresTime) - envelope.Header.Security.UsernameToken.ID = trustID - envelope.Header.Security.UsernameToken.Username.Text = username - envelope.Header.Security.UsernameToken.Password.Text = password - default: - // This is just to note that we don't do anything for other cases. - // We aren't missing anything I know of. - } - - envelope.Body.RequestSecurityToken.Wst = trustNamespace - envelope.Body.RequestSecurityToken.AppliesTo.Wsp = "http://schemas.xmlsoap.org/ws/2004/09/policy" - envelope.Body.RequestSecurityToken.AppliesTo.EndpointReference.Address.Text = cloudAudienceURN - envelope.Body.RequestSecurityToken.KeyType.Text = keyType - envelope.Body.RequestSecurityToken.RequestType.Text = requestType - - output, err := xml.Marshal(envelope) - if err != nil { - return "", err - } - - return string(output), nil -} - -func (wte *Endpoint) BuildTokenRequestMessageWIA(cloudAudienceURN string) (string, error) { - return wte.buildTokenRequestMessage(authority.ATWindowsIntegrated, cloudAudienceURN, "", "") -} - -func (wte *Endpoint) BuildTokenRequestMessageUsernamePassword(cloudAudienceURN string, username string, password string) (string, error) { - return wte.buildTokenRequestMessage(authority.ATUsernamePassword, cloudAudienceURN, username, password) -} diff --git a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/wstrust/defs/wstrust_mex_document.go b/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/wstrust/defs/wstrust_mex_document.go deleted file mode 100644 index e3d19886ebc5..000000000000 --- a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/wstrust/defs/wstrust_mex_document.go +++ /dev/null @@ -1,159 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. - -package defs - -import ( - "errors" - "fmt" - "strings" -) - -//go:generate stringer -type=endpointType - -type endpointType int - -const ( - etUnknown endpointType = iota - etUsernamePassword - etWindowsTransport -) - -type wsEndpointData struct { - Version Version - EndpointType endpointType -} - -const trust13Spec string = "http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Issue" -const trust2005Spec string = "http://schemas.xmlsoap.org/ws/2005/02/trust/RST/Issue" - -type MexDocument struct { - UsernamePasswordEndpoint Endpoint - WindowsTransportEndpoint Endpoint - policies map[string]endpointType - bindings map[string]wsEndpointData -} - -func updateEndpoint(cached *Endpoint, found Endpoint) { - if cached == nil || cached.Version == TrustUnknown { - *cached = found - return - } - if (*cached).Version == Trust2005 && found.Version == Trust13 { - *cached = found - return - } -} - -// TODO(msal): Someone needs to write tests for everything below. - -// NewFromDef creates a new MexDocument. -func NewFromDef(defs Definitions) (MexDocument, error) { - policies, err := policies(defs) - if err != nil { - return MexDocument{}, err - } - - bindings, err := bindings(defs, policies) - if err != nil { - return MexDocument{}, err - } - - userPass, windows, err := endpoints(defs, bindings) - if err != nil { - return MexDocument{}, err - } - - return MexDocument{ - UsernamePasswordEndpoint: userPass, - WindowsTransportEndpoint: windows, - policies: policies, - bindings: bindings, - }, nil -} - -func policies(defs Definitions) (map[string]endpointType, error) { - policies := make(map[string]endpointType, len(defs.Policy)) - - for _, policy := range defs.Policy { - if policy.ExactlyOne.All.NegotiateAuthentication.XMLName.Local != "" { - if policy.ExactlyOne.All.TransportBinding.SP != "" && policy.ID != "" { - policies["#"+policy.ID] = etWindowsTransport - } - } - - if policy.ExactlyOne.All.SignedEncryptedSupportingTokens.Policy.UsernameToken.Policy.WSSUsernameToken10.XMLName.Local != "" { - if policy.ExactlyOne.All.TransportBinding.SP != "" && policy.ID != "" { - policies["#"+policy.ID] = etUsernamePassword - } - } - if policy.ExactlyOne.All.SignedSupportingTokens.Policy.UsernameToken.Policy.WSSUsernameToken10.XMLName.Local != "" { - if policy.ExactlyOne.All.TransportBinding.SP != "" && policy.ID != "" { - policies["#"+policy.ID] = etUsernamePassword - } - } - } - - if len(policies) == 0 { - return policies, errors.New("no policies for mex document") - } - - return policies, nil -} - -func bindings(defs Definitions, policies map[string]endpointType) (map[string]wsEndpointData, error) { - bindings := make(map[string]wsEndpointData, len(defs.Binding)) - - for _, binding := range defs.Binding { - policyName := binding.PolicyReference.URI - transport := binding.Binding.Transport - - if transport == "http://schemas.xmlsoap.org/soap/http" { - if policy, ok := policies[policyName]; ok { - bindingName := binding.Name - specVersion := binding.Operation.Operation.SoapAction - - if specVersion == trust13Spec { - bindings[bindingName] = wsEndpointData{Trust13, policy} - } else if specVersion == trust2005Spec { - bindings[bindingName] = wsEndpointData{Trust2005, policy} - } else { - return nil, errors.New("found unknown spec version in mex document") - } - } - } - } - return bindings, nil -} - -func endpoints(defs Definitions, bindings map[string]wsEndpointData) (userPass, windows Endpoint, err error) { - for _, port := range defs.Service.Port { - bindingName := port.Binding - - index := strings.Index(bindingName, ":") - if index != -1 { - bindingName = bindingName[index+1:] - } - - if binding, ok := bindings[bindingName]; ok { - url := strings.TrimSpace(port.EndpointReference.Address.Text) - if url == "" { - return Endpoint{}, Endpoint{}, fmt.Errorf("MexDocument cannot have blank URL endpoint") - } - if binding.Version == TrustUnknown { - return Endpoint{}, Endpoint{}, fmt.Errorf("endpoint version unknown") - } - endpoint := Endpoint{Version: binding.Version, URL: url} - - switch binding.EndpointType { - case etUsernamePassword: - updateEndpoint(&userPass, endpoint) - case etWindowsTransport: - updateEndpoint(&windows, endpoint) - default: - return Endpoint{}, Endpoint{}, errors.New("found unknown port type in MEX document") - } - } - } - return userPass, windows, nil -} diff --git a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/wstrust/wstrust.go b/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/wstrust/wstrust.go deleted file mode 100644 index 47cd4c692d62..000000000000 --- a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/wstrust/wstrust.go +++ /dev/null @@ -1,136 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. - -/* -Package wstrust provides a client for communicating with a WSTrust (https://en.wikipedia.org/wiki/WS-Trust#:~:text=WS%2DTrust%20is%20a%20WS,in%20a%20secure%20message%20exchange.) -for the purposes of extracting metadata from the service. This data can be used to acquire -tokens using the accesstokens.Client.GetAccessTokenFromSamlGrant() call. -*/ -package wstrust - -import ( - "context" - "errors" - "fmt" - "net/http" - "net/url" - - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/authority" - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/internal/grant" - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/wstrust/defs" -) - -type xmlCaller interface { - XMLCall(ctx context.Context, endpoint string, headers http.Header, qv url.Values, resp interface{}) error - SOAPCall(ctx context.Context, endpoint, action string, headers http.Header, qv url.Values, body string, resp interface{}) error -} - -type SamlTokenInfo struct { - AssertionType string // Should be either constants SAMLV1Grant or SAMLV2Grant. - Assertion string -} - -// Client represents the REST calls to get tokens from token generator backends. -type Client struct { - // Comm provides the HTTP transport client. - Comm xmlCaller -} - -// TODO(msal): This allows me to call Mex without having a real Def file on line 45. -// This would fail because policies() would not find a policy. This is easy enough to -// fix in test data, but.... Definitions is defined with built in structs. That needs -// to be pulled apart and until then I have this hack in. -var newFromDef = defs.NewFromDef - -// Mex provides metadata about a wstrust service. -func (c Client) Mex(ctx context.Context, federationMetadataURL string) (defs.MexDocument, error) { - resp := defs.Definitions{} - err := c.Comm.XMLCall( - ctx, - federationMetadataURL, - http.Header{}, - nil, - &resp, - ) - if err != nil { - return defs.MexDocument{}, err - } - - return newFromDef(resp) -} - -const ( - SoapActionDefault = "http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Issue" - - // Note: Commented out because this action is not supported. It was in the original code - // but only used in a switch where it errored. Since there was only one value, a default - // worked better. However, buildTokenRequestMessage() had 2005 support. I'm not actually - // sure what's going on here. It like we have half support. For now this is here just - // for documentation purposes in case we are going to add support. - // - // SoapActionWSTrust2005 = "http://schemas.xmlsoap.org/ws/2005/02/trust/RST/Issue" -) - -// SAMLTokenInfo provides SAML information that is used to generate a SAML token. -func (c Client) SAMLTokenInfo(ctx context.Context, authParameters authority.AuthParams, cloudAudienceURN string, endpoint defs.Endpoint) (SamlTokenInfo, error) { - var wsTrustRequestMessage string - var err error - - switch authParameters.AuthorizationType { - case authority.ATWindowsIntegrated: - wsTrustRequestMessage, err = endpoint.BuildTokenRequestMessageWIA(cloudAudienceURN) - if err != nil { - return SamlTokenInfo{}, err - } - case authority.ATUsernamePassword: - wsTrustRequestMessage, err = endpoint.BuildTokenRequestMessageUsernamePassword( - cloudAudienceURN, authParameters.Username, authParameters.Password) - if err != nil { - return SamlTokenInfo{}, err - } - default: - return SamlTokenInfo{}, fmt.Errorf("unknown auth type %v", authParameters.AuthorizationType) - } - - var soapAction string - switch endpoint.Version { - case defs.Trust13: - soapAction = SoapActionDefault - case defs.Trust2005: - return SamlTokenInfo{}, errors.New("WS Trust 2005 support is not implemented") - default: - return SamlTokenInfo{}, fmt.Errorf("the SOAP endpoint for a wstrust call had an invalid version: %v", endpoint.Version) - } - - resp := defs.SAMLDefinitions{} - err = c.Comm.SOAPCall(ctx, endpoint.URL, soapAction, http.Header{}, nil, wsTrustRequestMessage, &resp) - if err != nil { - return SamlTokenInfo{}, err - } - - return c.samlAssertion(resp) -} - -const ( - samlv1Assertion = "urn:oasis:names:tc:SAML:1.0:assertion" - samlv2Assertion = "urn:oasis:names:tc:SAML:2.0:assertion" -) - -func (c Client) samlAssertion(def defs.SAMLDefinitions) (SamlTokenInfo, error) { - for _, tokenResponse := range def.Body.RequestSecurityTokenResponseCollection.RequestSecurityTokenResponse { - token := tokenResponse.RequestedSecurityToken - if token.Assertion.XMLName.Local != "" { - assertion := token.AssertionRawXML - - samlVersion := token.Assertion.Saml - switch samlVersion { - case samlv1Assertion: - return SamlTokenInfo{AssertionType: grant.SAMLV1, Assertion: assertion}, nil - case samlv2Assertion: - return SamlTokenInfo{AssertionType: grant.SAMLV2, Assertion: assertion}, nil - } - return SamlTokenInfo{}, fmt.Errorf("couldn't parse SAML assertion, version unknown: %q", samlVersion) - } - } - return SamlTokenInfo{}, errors.New("unknown WS-Trust version") -} diff --git a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/resolvers.go b/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/resolvers.go deleted file mode 100644 index 0ade411797ac..000000000000 --- a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/resolvers.go +++ /dev/null @@ -1,149 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. - -// TODO(msal): Write some tests. The original code this came from didn't have tests and I'm too -// tired at this point to do it. It, like many other *Manager code I found was broken because -// they didn't have mutex protection. - -package oauth - -import ( - "context" - "errors" - "fmt" - "strings" - "sync" - - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops" - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/authority" -) - -// ADFS is an active directory federation service authority type. -const ADFS = "ADFS" - -type cacheEntry struct { - Endpoints authority.Endpoints - ValidForDomainsInList map[string]bool -} - -func createcacheEntry(endpoints authority.Endpoints) cacheEntry { - return cacheEntry{endpoints, map[string]bool{}} -} - -// AuthorityEndpoint retrieves endpoints from an authority for auth and token acquisition. -type authorityEndpoint struct { - rest *ops.REST - - mu sync.Mutex - cache map[string]cacheEntry -} - -// newAuthorityEndpoint is the constructor for AuthorityEndpoint. -func newAuthorityEndpoint(rest *ops.REST) *authorityEndpoint { - m := &authorityEndpoint{rest: rest, cache: map[string]cacheEntry{}} - return m -} - -// ResolveEndpoints gets the authorization and token endpoints and creates an AuthorityEndpoints instance -func (m *authorityEndpoint) ResolveEndpoints(ctx context.Context, authorityInfo authority.Info, userPrincipalName string) (authority.Endpoints, error) { - - if endpoints, found := m.cachedEndpoints(authorityInfo, userPrincipalName); found { - return endpoints, nil - } - - endpoint, err := m.openIDConfigurationEndpoint(ctx, authorityInfo, userPrincipalName) - if err != nil { - return authority.Endpoints{}, err - } - - resp, err := m.rest.Authority().GetTenantDiscoveryResponse(ctx, endpoint) - if err != nil { - return authority.Endpoints{}, err - } - if err := resp.Validate(); err != nil { - return authority.Endpoints{}, fmt.Errorf("ResolveEndpoints(): %w", err) - } - - tenant := authorityInfo.Tenant - - endpoints := authority.NewEndpoints( - strings.Replace(resp.AuthorizationEndpoint, "{tenant}", tenant, -1), - strings.Replace(resp.TokenEndpoint, "{tenant}", tenant, -1), - strings.Replace(resp.Issuer, "{tenant}", tenant, -1), - authorityInfo.Host) - - m.addCachedEndpoints(authorityInfo, userPrincipalName, endpoints) - - return endpoints, nil -} - -// cachedEndpoints returns a the cached endpoints if they exists. If not, we return false. -func (m *authorityEndpoint) cachedEndpoints(authorityInfo authority.Info, userPrincipalName string) (authority.Endpoints, bool) { - m.mu.Lock() - defer m.mu.Unlock() - - if cacheEntry, ok := m.cache[authorityInfo.CanonicalAuthorityURI]; ok { - if authorityInfo.AuthorityType == ADFS { - domain, err := adfsDomainFromUpn(userPrincipalName) - if err == nil { - if _, ok := cacheEntry.ValidForDomainsInList[domain]; ok { - return cacheEntry.Endpoints, true - } - } - } - return cacheEntry.Endpoints, true - } - return authority.Endpoints{}, false -} - -func (m *authorityEndpoint) addCachedEndpoints(authorityInfo authority.Info, userPrincipalName string, endpoints authority.Endpoints) { - m.mu.Lock() - defer m.mu.Unlock() - - updatedCacheEntry := createcacheEntry(endpoints) - - if authorityInfo.AuthorityType == ADFS { - // Since we're here, we've made a call to the backend. We want to ensure we're caching - // the latest values from the server. - if cacheEntry, ok := m.cache[authorityInfo.CanonicalAuthorityURI]; ok { - for k := range cacheEntry.ValidForDomainsInList { - updatedCacheEntry.ValidForDomainsInList[k] = true - } - } - domain, err := adfsDomainFromUpn(userPrincipalName) - if err == nil { - updatedCacheEntry.ValidForDomainsInList[domain] = true - } - } - - m.cache[authorityInfo.CanonicalAuthorityURI] = updatedCacheEntry -} - -func (m *authorityEndpoint) openIDConfigurationEndpoint(ctx context.Context, authorityInfo authority.Info, userPrincipalName string) (string, error) { - if authorityInfo.Tenant == "adfs" { - return fmt.Sprintf("https://%s/adfs/.well-known/openid-configuration", authorityInfo.Host), nil - } else if authorityInfo.ValidateAuthority && !authority.TrustedHost(authorityInfo.Host) { - resp, err := m.rest.Authority().AADInstanceDiscovery(ctx, authorityInfo) - if err != nil { - return "", err - } - return resp.TenantDiscoveryEndpoint, nil - } else if authorityInfo.Region != "" { - resp, err := m.rest.Authority().AADInstanceDiscovery(ctx, authorityInfo) - if err != nil { - return "", err - } - return resp.TenantDiscoveryEndpoint, nil - - } - - return authorityInfo.CanonicalAuthorityURI + "v2.0/.well-known/openid-configuration", nil -} - -func adfsDomainFromUpn(userPrincipalName string) (string, error) { - parts := strings.Split(userPrincipalName, "@") - if len(parts) < 2 { - return "", errors.New("no @ present in user principal name") - } - return parts[1], nil -} diff --git a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/options/options.go b/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/options/options.go deleted file mode 100644 index 4561d72db4d7..000000000000 --- a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/options/options.go +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. - -package options - -import ( - "errors" - "fmt" -) - -// CallOption implements an optional argument to a method call. See -// https://blog.devgenius.io/go-call-option-that-can-be-used-with-multiple-methods-6c81734f3dbe -// for an explanation of the usage pattern. -type CallOption interface { - Do(any) error - callOption() -} - -// ApplyOptions applies all the callOptions to options. options must be a pointer to a struct and -// callOptions must be a list of objects that implement CallOption. -func ApplyOptions[O, C any](options O, callOptions []C) error { - for _, o := range callOptions { - if t, ok := any(o).(CallOption); !ok { - return fmt.Errorf("unexpected option type %T", o) - } else if err := t.Do(options); err != nil { - return err - } - } - return nil -} - -// NewCallOption returns a new CallOption whose Do() method calls function "f". -func NewCallOption(f func(any) error) CallOption { - if f == nil { - // This isn't a practical concern because only an MSAL maintainer can get - // us here, by implementing a do-nothing option. But if someone does that, - // the below ensures the method invoked with the option returns an error. - return callOption(func(any) error { - return errors.New("invalid option: missing implementation") - }) - } - return callOption(f) -} - -// callOption is an adapter for a function to a CallOption -type callOption func(any) error - -func (c callOption) Do(a any) error { - return c(a) -} - -func (callOption) callOption() {} diff --git a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/shared/shared.go b/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/shared/shared.go deleted file mode 100644 index d8ab713560c9..000000000000 --- a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/shared/shared.go +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. - -package shared - -import ( - "net/http" - "reflect" - "strings" -) - -const ( - // CacheKeySeparator is used in creating the keys of the cache. - CacheKeySeparator = "-" -) - -type Account struct { - HomeAccountID string `json:"home_account_id,omitempty"` - Environment string `json:"environment,omitempty"` - Realm string `json:"realm,omitempty"` - LocalAccountID string `json:"local_account_id,omitempty"` - AuthorityType string `json:"authority_type,omitempty"` - PreferredUsername string `json:"username,omitempty"` - GivenName string `json:"given_name,omitempty"` - FamilyName string `json:"family_name,omitempty"` - MiddleName string `json:"middle_name,omitempty"` - Name string `json:"name,omitempty"` - AlternativeID string `json:"alternative_account_id,omitempty"` - RawClientInfo string `json:"client_info,omitempty"` - UserAssertionHash string `json:"user_assertion_hash,omitempty"` - - AdditionalFields map[string]interface{} -} - -// NewAccount creates an account. -func NewAccount(homeAccountID, env, realm, localAccountID, authorityType, username string) Account { - return Account{ - HomeAccountID: homeAccountID, - Environment: env, - Realm: realm, - LocalAccountID: localAccountID, - AuthorityType: authorityType, - PreferredUsername: username, - } -} - -// Key creates the key for storing accounts in the cache. -func (acc Account) Key() string { - key := strings.Join([]string{acc.HomeAccountID, acc.Environment, acc.Realm}, CacheKeySeparator) - return strings.ToLower(key) -} - -// IsZero checks the zero value of account. -func (acc Account) IsZero() bool { - v := reflect.ValueOf(acc) - for i := 0; i < v.NumField(); i++ { - field := v.Field(i) - if !field.IsZero() { - switch field.Kind() { - case reflect.Map, reflect.Slice: - if field.Len() == 0 { - continue - } - } - return false - } - } - return true -} - -// DefaultClient is our default shared HTTP client. -var DefaultClient = &http.Client{} diff --git a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/version/version.go b/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/version/version.go deleted file mode 100644 index eb16b405c4be..000000000000 --- a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/version/version.go +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. - -// Package version keeps the version number of the client package. -package version - -// Version is the version of this client package that is communicated to the server. -const Version = "1.2.0" diff --git a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/public/public.go b/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/public/public.go deleted file mode 100644 index 392e5e43f7dc..000000000000 --- a/vendor/github.com/AzureAD/microsoft-authentication-library-for-go/apps/public/public.go +++ /dev/null @@ -1,756 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. - -/* -Package public provides a client for authentication of "public" applications. A "public" -application is defined as an app that runs on client devices (android, ios, windows, linux, ...). -These devices are "untrusted" and access resources via web APIs that must authenticate. -*/ -package public - -/* -Design note: - -public.Client uses client.Base as an embedded type. client.Base statically assigns its attributes -during creation. As it doesn't have any pointers in it, anything borrowed from it, such as -Base.AuthParams is a copy that is free to be manipulated here. -*/ - -// TODO(msal): This should have example code for each method on client using Go's example doc framework. -// base usage details should be includee in the package documentation. - -import ( - "context" - "crypto/rand" - "crypto/sha256" - "encoding/base64" - "errors" - "fmt" - "net/url" - "reflect" - "strconv" - - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/cache" - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/base" - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/local" - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth" - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops" - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/accesstokens" - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/authority" - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/options" - "github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/shared" - "github.com/google/uuid" - "github.com/pkg/browser" -) - -// AuthResult contains the results of one token acquisition operation. -// For details see https://aka.ms/msal-net-authenticationresult -type AuthResult = base.AuthResult - -type AuthenticationScheme = authority.AuthenticationScheme - -type Account = shared.Account - -var errNoAccount = errors.New("no account was specified with public.WithSilentAccount(), or the specified account is invalid") - -// clientOptions configures the Client's behavior. -type clientOptions struct { - accessor cache.ExportReplace - authority string - capabilities []string - disableInstanceDiscovery bool - httpClient ops.HTTPClient -} - -func (p *clientOptions) validate() error { - u, err := url.Parse(p.authority) - if err != nil { - return fmt.Errorf("Authority options cannot be URL parsed: %w", err) - } - if u.Scheme != "https" { - return fmt.Errorf("Authority(%s) did not start with https://", u.String()) - } - return nil -} - -// Option is an optional argument to the New constructor. -type Option func(o *clientOptions) - -// WithAuthority allows for a custom authority to be set. This must be a valid https url. -func WithAuthority(authority string) Option { - return func(o *clientOptions) { - o.authority = authority - } -} - -// WithCache provides an accessor that will read and write authentication data to an externally managed cache. -func WithCache(accessor cache.ExportReplace) Option { - return func(o *clientOptions) { - o.accessor = accessor - } -} - -// WithClientCapabilities allows configuring one or more client capabilities such as "CP1" -func WithClientCapabilities(capabilities []string) Option { - return func(o *clientOptions) { - // there's no danger of sharing the slice's underlying memory with the application because - // this slice is simply passed to base.WithClientCapabilities, which copies its data - o.capabilities = capabilities - } -} - -// WithHTTPClient allows for a custom HTTP client to be set. -func WithHTTPClient(httpClient ops.HTTPClient) Option { - return func(o *clientOptions) { - o.httpClient = httpClient - } -} - -// WithInstanceDiscovery set to false to disable authority validation (to support private cloud scenarios) -func WithInstanceDiscovery(enabled bool) Option { - return func(o *clientOptions) { - o.disableInstanceDiscovery = !enabled - } -} - -// Client is a representation of authentication client for public applications as defined in the -// package doc. For more information, visit https://docs.microsoft.com/azure/active-directory/develop/msal-client-applications. -type Client struct { - base base.Client -} - -// New is the constructor for Client. -func New(clientID string, options ...Option) (Client, error) { - opts := clientOptions{ - authority: base.AuthorityPublicCloud, - httpClient: shared.DefaultClient, - } - - for _, o := range options { - o(&opts) - } - if err := opts.validate(); err != nil { - return Client{}, err - } - - base, err := base.New(clientID, opts.authority, oauth.New(opts.httpClient), base.WithCacheAccessor(opts.accessor), base.WithClientCapabilities(opts.capabilities), base.WithInstanceDiscovery(!opts.disableInstanceDiscovery)) - if err != nil { - return Client{}, err - } - return Client{base}, nil -} - -// authCodeURLOptions contains options for AuthCodeURL -type authCodeURLOptions struct { - claims, loginHint, tenantID, domainHint string -} - -// AuthCodeURLOption is implemented by options for AuthCodeURL -type AuthCodeURLOption interface { - authCodeURLOption() -} - -// AuthCodeURL creates a URL used to acquire an authorization code. -// -// Options: [WithClaims], [WithDomainHint], [WithLoginHint], [WithTenantID] -func (pca Client) AuthCodeURL(ctx context.Context, clientID, redirectURI string, scopes []string, opts ...AuthCodeURLOption) (string, error) { - o := authCodeURLOptions{} - if err := options.ApplyOptions(&o, opts); err != nil { - return "", err - } - ap, err := pca.base.AuthParams.WithTenant(o.tenantID) - if err != nil { - return "", err - } - ap.Claims = o.claims - ap.LoginHint = o.loginHint - ap.DomainHint = o.domainHint - return pca.base.AuthCodeURL(ctx, clientID, redirectURI, scopes, ap) -} - -// WithClaims sets additional claims to request for the token, such as those required by conditional access policies. -// Use this option when Azure AD returned a claims challenge for a prior request. The argument must be decoded. -// This option is valid for any token acquisition method. -func WithClaims(claims string) interface { - AcquireByAuthCodeOption - AcquireByDeviceCodeOption - AcquireByUsernamePasswordOption - AcquireInteractiveOption - AcquireSilentOption - AuthCodeURLOption - options.CallOption -} { - return struct { - AcquireByAuthCodeOption - AcquireByDeviceCodeOption - AcquireByUsernamePasswordOption - AcquireInteractiveOption - AcquireSilentOption - AuthCodeURLOption - options.CallOption - }{ - CallOption: options.NewCallOption( - func(a any) error { - switch t := a.(type) { - case *acquireTokenByAuthCodeOptions: - t.claims = claims - case *acquireTokenByDeviceCodeOptions: - t.claims = claims - case *acquireTokenByUsernamePasswordOptions: - t.claims = claims - case *acquireTokenSilentOptions: - t.claims = claims - case *authCodeURLOptions: - t.claims = claims - case *interactiveAuthOptions: - t.claims = claims - default: - return fmt.Errorf("unexpected options type %T", a) - } - return nil - }, - ), - } -} - -// WithAuthenticationScheme is an extensibility mechanism designed to be used only by Azure Arc for proof of possession access tokens. -func WithAuthenticationScheme(authnScheme AuthenticationScheme) interface { - AcquireSilentOption - AcquireInteractiveOption - AcquireByUsernamePasswordOption - options.CallOption -} { - return struct { - AcquireSilentOption - AcquireInteractiveOption - AcquireByUsernamePasswordOption - options.CallOption - }{ - CallOption: options.NewCallOption( - func(a any) error { - switch t := a.(type) { - case *acquireTokenSilentOptions: - t.authnScheme = authnScheme - case *interactiveAuthOptions: - t.authnScheme = authnScheme - case *acquireTokenByUsernamePasswordOptions: - t.authnScheme = authnScheme - default: - return fmt.Errorf("unexpected options type %T", a) - } - return nil - }, - ), - } -} - -// WithTenantID specifies a tenant for a single authentication. It may be different than the tenant set in [New] by [WithAuthority]. -// This option is valid for any token acquisition method. -func WithTenantID(tenantID string) interface { - AcquireByAuthCodeOption - AcquireByDeviceCodeOption - AcquireByUsernamePasswordOption - AcquireInteractiveOption - AcquireSilentOption - AuthCodeURLOption - options.CallOption -} { - return struct { - AcquireByAuthCodeOption - AcquireByDeviceCodeOption - AcquireByUsernamePasswordOption - AcquireInteractiveOption - AcquireSilentOption - AuthCodeURLOption - options.CallOption - }{ - CallOption: options.NewCallOption( - func(a any) error { - switch t := a.(type) { - case *acquireTokenByAuthCodeOptions: - t.tenantID = tenantID - case *acquireTokenByDeviceCodeOptions: - t.tenantID = tenantID - case *acquireTokenByUsernamePasswordOptions: - t.tenantID = tenantID - case *acquireTokenSilentOptions: - t.tenantID = tenantID - case *authCodeURLOptions: - t.tenantID = tenantID - case *interactiveAuthOptions: - t.tenantID = tenantID - default: - return fmt.Errorf("unexpected options type %T", a) - } - return nil - }, - ), - } -} - -// acquireTokenSilentOptions are all the optional settings to an AcquireTokenSilent() call. -// These are set by using various AcquireTokenSilentOption functions. -type acquireTokenSilentOptions struct { - account Account - claims, tenantID string - authnScheme AuthenticationScheme -} - -// AcquireSilentOption is implemented by options for AcquireTokenSilent -type AcquireSilentOption interface { - acquireSilentOption() -} - -// WithSilentAccount uses the passed account during an AcquireTokenSilent() call. -func WithSilentAccount(account Account) interface { - AcquireSilentOption - options.CallOption -} { - return struct { - AcquireSilentOption - options.CallOption - }{ - CallOption: options.NewCallOption( - func(a any) error { - switch t := a.(type) { - case *acquireTokenSilentOptions: - t.account = account - default: - return fmt.Errorf("unexpected options type %T", a) - } - return nil - }, - ), - } -} - -// AcquireTokenSilent acquires a token from either the cache or using a refresh token. -// -// Options: [WithClaims], [WithSilentAccount], [WithTenantID] -func (pca Client) AcquireTokenSilent(ctx context.Context, scopes []string, opts ...AcquireSilentOption) (AuthResult, error) { - o := acquireTokenSilentOptions{} - if err := options.ApplyOptions(&o, opts); err != nil { - return AuthResult{}, err - } - // an account is required to find user tokens in the cache - if reflect.ValueOf(o.account).IsZero() { - return AuthResult{}, errNoAccount - } - - silentParameters := base.AcquireTokenSilentParameters{ - Scopes: scopes, - Account: o.account, - Claims: o.claims, - RequestType: accesstokens.ATPublic, - IsAppCache: false, - TenantID: o.tenantID, - AuthnScheme: o.authnScheme, - } - - return pca.base.AcquireTokenSilent(ctx, silentParameters) -} - -// acquireTokenByUsernamePasswordOptions contains optional configuration for AcquireTokenByUsernamePassword -type acquireTokenByUsernamePasswordOptions struct { - claims, tenantID string - authnScheme AuthenticationScheme -} - -// AcquireByUsernamePasswordOption is implemented by options for AcquireTokenByUsernamePassword -type AcquireByUsernamePasswordOption interface { - acquireByUsernamePasswordOption() -} - -// AcquireTokenByUsernamePassword acquires a security token from the authority, via Username/Password Authentication. -// NOTE: this flow is NOT recommended. -// -// Options: [WithClaims], [WithTenantID] -func (pca Client) AcquireTokenByUsernamePassword(ctx context.Context, scopes []string, username, password string, opts ...AcquireByUsernamePasswordOption) (AuthResult, error) { - o := acquireTokenByUsernamePasswordOptions{} - if err := options.ApplyOptions(&o, opts); err != nil { - return AuthResult{}, err - } - authParams, err := pca.base.AuthParams.WithTenant(o.tenantID) - if err != nil { - return AuthResult{}, err - } - authParams.Scopes = scopes - authParams.AuthorizationType = authority.ATUsernamePassword - authParams.Claims = o.claims - authParams.Username = username - authParams.Password = password - if o.authnScheme != nil { - authParams.AuthnScheme = o.authnScheme - } - - token, err := pca.base.Token.UsernamePassword(ctx, authParams) - if err != nil { - return AuthResult{}, err - } - return pca.base.AuthResultFromToken(ctx, authParams, token, true) -} - -type DeviceCodeResult = accesstokens.DeviceCodeResult - -// DeviceCode provides the results of the device code flows first stage (containing the code) -// that must be entered on the second device and provides a method to retrieve the AuthenticationResult -// once that code has been entered and verified. -type DeviceCode struct { - // Result holds the information about the device code (such as the code). - Result DeviceCodeResult - - authParams authority.AuthParams - client Client - dc oauth.DeviceCode -} - -// AuthenticationResult retreives the AuthenticationResult once the user enters the code -// on the second device. Until then it blocks until the .AcquireTokenByDeviceCode() context -// is cancelled or the token expires. -func (d DeviceCode) AuthenticationResult(ctx context.Context) (AuthResult, error) { - token, err := d.dc.Token(ctx) - if err != nil { - return AuthResult{}, err - } - return d.client.base.AuthResultFromToken(ctx, d.authParams, token, true) -} - -// acquireTokenByDeviceCodeOptions contains optional configuration for AcquireTokenByDeviceCode -type acquireTokenByDeviceCodeOptions struct { - claims, tenantID string -} - -// AcquireByDeviceCodeOption is implemented by options for AcquireTokenByDeviceCode -type AcquireByDeviceCodeOption interface { - acquireByDeviceCodeOptions() -} - -// AcquireTokenByDeviceCode acquires a security token from the authority, by acquiring a device code and using that to acquire the token. -// Users need to create an AcquireTokenDeviceCodeParameters instance and pass it in. -// -// Options: [WithClaims], [WithTenantID] -func (pca Client) AcquireTokenByDeviceCode(ctx context.Context, scopes []string, opts ...AcquireByDeviceCodeOption) (DeviceCode, error) { - o := acquireTokenByDeviceCodeOptions{} - if err := options.ApplyOptions(&o, opts); err != nil { - return DeviceCode{}, err - } - authParams, err := pca.base.AuthParams.WithTenant(o.tenantID) - if err != nil { - return DeviceCode{}, err - } - authParams.Scopes = scopes - authParams.AuthorizationType = authority.ATDeviceCode - authParams.Claims = o.claims - - dc, err := pca.base.Token.DeviceCode(ctx, authParams) - if err != nil { - return DeviceCode{}, err - } - - return DeviceCode{Result: dc.Result, authParams: authParams, client: pca, dc: dc}, nil -} - -// acquireTokenByAuthCodeOptions contains the optional parameters used to acquire an access token using the authorization code flow. -type acquireTokenByAuthCodeOptions struct { - challenge, claims, tenantID string -} - -// AcquireByAuthCodeOption is implemented by options for AcquireTokenByAuthCode -type AcquireByAuthCodeOption interface { - acquireByAuthCodeOption() -} - -// WithChallenge allows you to provide a code for the .AcquireTokenByAuthCode() call. -func WithChallenge(challenge string) interface { - AcquireByAuthCodeOption - options.CallOption -} { - return struct { - AcquireByAuthCodeOption - options.CallOption - }{ - CallOption: options.NewCallOption( - func(a any) error { - switch t := a.(type) { - case *acquireTokenByAuthCodeOptions: - t.challenge = challenge - default: - return fmt.Errorf("unexpected options type %T", a) - } - return nil - }, - ), - } -} - -// AcquireTokenByAuthCode is a request to acquire a security token from the authority, using an authorization code. -// The specified redirect URI must be the same URI that was used when the authorization code was requested. -// -// Options: [WithChallenge], [WithClaims], [WithTenantID] -func (pca Client) AcquireTokenByAuthCode(ctx context.Context, code string, redirectURI string, scopes []string, opts ...AcquireByAuthCodeOption) (AuthResult, error) { - o := acquireTokenByAuthCodeOptions{} - if err := options.ApplyOptions(&o, opts); err != nil { - return AuthResult{}, err - } - - params := base.AcquireTokenAuthCodeParameters{ - Scopes: scopes, - Code: code, - Challenge: o.challenge, - Claims: o.claims, - AppType: accesstokens.ATPublic, - RedirectURI: redirectURI, - TenantID: o.tenantID, - } - - return pca.base.AcquireTokenByAuthCode(ctx, params) -} - -// Accounts gets all the accounts in the token cache. -// If there are no accounts in the cache the returned slice is empty. -func (pca Client) Accounts(ctx context.Context) ([]Account, error) { - return pca.base.AllAccounts(ctx) -} - -// RemoveAccount signs the account out and forgets account from token cache. -func (pca Client) RemoveAccount(ctx context.Context, account Account) error { - return pca.base.RemoveAccount(ctx, account) -} - -// interactiveAuthOptions contains the optional parameters used to acquire an access token for interactive auth code flow. -type interactiveAuthOptions struct { - claims, domainHint, loginHint, redirectURI, tenantID string - openURL func(url string) error - authnScheme AuthenticationScheme -} - -// AcquireInteractiveOption is implemented by options for AcquireTokenInteractive -type AcquireInteractiveOption interface { - acquireInteractiveOption() -} - -// WithLoginHint pre-populates the login prompt with a username. -func WithLoginHint(username string) interface { - AcquireInteractiveOption - AuthCodeURLOption - options.CallOption -} { - return struct { - AcquireInteractiveOption - AuthCodeURLOption - options.CallOption - }{ - CallOption: options.NewCallOption( - func(a any) error { - switch t := a.(type) { - case *authCodeURLOptions: - t.loginHint = username - case *interactiveAuthOptions: - t.loginHint = username - default: - return fmt.Errorf("unexpected options type %T", a) - } - return nil - }, - ), - } -} - -// WithDomainHint adds the IdP domain as domain_hint query parameter in the auth url. -func WithDomainHint(domain string) interface { - AcquireInteractiveOption - AuthCodeURLOption - options.CallOption -} { - return struct { - AcquireInteractiveOption - AuthCodeURLOption - options.CallOption - }{ - CallOption: options.NewCallOption( - func(a any) error { - switch t := a.(type) { - case *authCodeURLOptions: - t.domainHint = domain - case *interactiveAuthOptions: - t.domainHint = domain - default: - return fmt.Errorf("unexpected options type %T", a) - } - return nil - }, - ), - } -} - -// WithRedirectURI sets a port for the local server used in interactive authentication, for -// example http://localhost:port. All URI components other than the port are ignored. -func WithRedirectURI(redirectURI string) interface { - AcquireInteractiveOption - options.CallOption -} { - return struct { - AcquireInteractiveOption - options.CallOption - }{ - CallOption: options.NewCallOption( - func(a any) error { - switch t := a.(type) { - case *interactiveAuthOptions: - t.redirectURI = redirectURI - default: - return fmt.Errorf("unexpected options type %T", a) - } - return nil - }, - ), - } -} - -// WithOpenURL allows you to provide a function to open the browser to complete the interactive login, instead of launching the system default browser. -func WithOpenURL(openURL func(url string) error) interface { - AcquireInteractiveOption - options.CallOption -} { - return struct { - AcquireInteractiveOption - options.CallOption - }{ - CallOption: options.NewCallOption( - func(a any) error { - switch t := a.(type) { - case *interactiveAuthOptions: - t.openURL = openURL - default: - return fmt.Errorf("unexpected options type %T", a) - } - return nil - }, - ), - } -} - -// AcquireTokenInteractive acquires a security token from the authority using the default web browser to select the account. -// https://docs.microsoft.com/en-us/azure/active-directory/develop/msal-authentication-flows#interactive-and-non-interactive-authentication -// -// Options: [WithDomainHint], [WithLoginHint], [WithOpenURL], [WithRedirectURI], [WithTenantID] -func (pca Client) AcquireTokenInteractive(ctx context.Context, scopes []string, opts ...AcquireInteractiveOption) (AuthResult, error) { - o := interactiveAuthOptions{} - if err := options.ApplyOptions(&o, opts); err != nil { - return AuthResult{}, err - } - // the code verifier is a random 32-byte sequence that's been base-64 encoded without padding. - // it's used to prevent MitM attacks during auth code flow, see https://tools.ietf.org/html/rfc7636 - cv, challenge, err := codeVerifier() - if err != nil { - return AuthResult{}, err - } - var redirectURL *url.URL - if o.redirectURI != "" { - redirectURL, err = url.Parse(o.redirectURI) - if err != nil { - return AuthResult{}, err - } - } - if o.openURL == nil { - o.openURL = browser.OpenURL - } - authParams, err := pca.base.AuthParams.WithTenant(o.tenantID) - if err != nil { - return AuthResult{}, err - } - authParams.Scopes = scopes - authParams.AuthorizationType = authority.ATInteractive - authParams.Claims = o.claims - authParams.CodeChallenge = challenge - authParams.CodeChallengeMethod = "S256" - authParams.LoginHint = o.loginHint - authParams.DomainHint = o.domainHint - authParams.State = uuid.New().String() - authParams.Prompt = "select_account" - if o.authnScheme != nil { - authParams.AuthnScheme = o.authnScheme - } - res, err := pca.browserLogin(ctx, redirectURL, authParams, o.openURL) - if err != nil { - return AuthResult{}, err - } - authParams.Redirecturi = res.redirectURI - - req, err := accesstokens.NewCodeChallengeRequest(authParams, accesstokens.ATPublic, nil, res.authCode, cv) - if err != nil { - return AuthResult{}, err - } - - token, err := pca.base.Token.AuthCode(ctx, req) - if err != nil { - return AuthResult{}, err - } - - return pca.base.AuthResultFromToken(ctx, authParams, token, true) -} - -type interactiveAuthResult struct { - authCode string - redirectURI string -} - -// parses the port number from the provided URL. -// returns 0 if nil or no port is specified. -func parsePort(u *url.URL) (int, error) { - if u == nil { - return 0, nil - } - p := u.Port() - if p == "" { - return 0, nil - } - return strconv.Atoi(p) -} - -// browserLogin calls openURL and waits for a user to log in -func (pca Client) browserLogin(ctx context.Context, redirectURI *url.URL, params authority.AuthParams, openURL func(string) error) (interactiveAuthResult, error) { - // start local redirect server so login can call us back - port, err := parsePort(redirectURI) - if err != nil { - return interactiveAuthResult{}, err - } - srv, err := local.New(params.State, port) - if err != nil { - return interactiveAuthResult{}, err - } - defer srv.Shutdown() - params.Scopes = accesstokens.AppendDefaultScopes(params) - authURL, err := pca.base.AuthCodeURL(ctx, params.ClientID, srv.Addr, params.Scopes, params) - if err != nil { - return interactiveAuthResult{}, err - } - // open browser window so user can select credentials - if err := openURL(authURL); err != nil { - return interactiveAuthResult{}, err - } - // now wait until the logic calls us back - res := srv.Result(ctx) - if res.Err != nil { - return interactiveAuthResult{}, res.Err - } - return interactiveAuthResult{ - authCode: res.Code, - redirectURI: srv.Addr, - }, nil -} - -// creates a code verifier string along with its SHA256 hash which -// is used as the challenge when requesting an auth code. -// used in interactive auth flow for PKCE. -func codeVerifier() (codeVerifier string, challenge string, err error) { - cvBytes := make([]byte, 32) - if _, err = rand.Read(cvBytes); err != nil { - return - } - codeVerifier = base64.RawURLEncoding.EncodeToString(cvBytes) - // for PKCE, create a hash of the code verifier - cvh := sha256.Sum256([]byte(codeVerifier)) - challenge = base64.RawURLEncoding.EncodeToString(cvh[:]) - return -} diff --git a/vendor/github.com/kylelemons/godebug/LICENSE b/vendor/github.com/kylelemons/godebug/LICENSE deleted file mode 100644 index d64569567334..000000000000 --- a/vendor/github.com/kylelemons/godebug/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/vendor/github.com/kylelemons/godebug/diff/diff.go b/vendor/github.com/kylelemons/godebug/diff/diff.go deleted file mode 100644 index 200e596c6259..000000000000 --- a/vendor/github.com/kylelemons/godebug/diff/diff.go +++ /dev/null @@ -1,186 +0,0 @@ -// Copyright 2013 Google Inc. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Package diff implements a linewise diff algorithm. -package diff - -import ( - "bytes" - "fmt" - "strings" -) - -// Chunk represents a piece of the diff. A chunk will not have both added and -// deleted lines. Equal lines are always after any added or deleted lines. -// A Chunk may or may not have any lines in it, especially for the first or last -// chunk in a computation. -type Chunk struct { - Added []string - Deleted []string - Equal []string -} - -func (c *Chunk) empty() bool { - return len(c.Added) == 0 && len(c.Deleted) == 0 && len(c.Equal) == 0 -} - -// Diff returns a string containing a line-by-line unified diff of the linewise -// changes required to make A into B. Each line is prefixed with '+', '-', or -// ' ' to indicate if it should be added, removed, or is correct respectively. -func Diff(A, B string) string { - aLines := strings.Split(A, "\n") - bLines := strings.Split(B, "\n") - - chunks := DiffChunks(aLines, bLines) - - buf := new(bytes.Buffer) - for _, c := range chunks { - for _, line := range c.Added { - fmt.Fprintf(buf, "+%s\n", line) - } - for _, line := range c.Deleted { - fmt.Fprintf(buf, "-%s\n", line) - } - for _, line := range c.Equal { - fmt.Fprintf(buf, " %s\n", line) - } - } - return strings.TrimRight(buf.String(), "\n") -} - -// DiffChunks uses an O(D(N+M)) shortest-edit-script algorithm -// to compute the edits required from A to B and returns the -// edit chunks. -func DiffChunks(a, b []string) []Chunk { - // algorithm: http://www.xmailserver.org/diff2.pdf - - // We'll need these quantities a lot. - alen, blen := len(a), len(b) // M, N - - // At most, it will require len(a) deletions and len(b) additions - // to transform a into b. - maxPath := alen + blen // MAX - if maxPath == 0 { - // degenerate case: two empty lists are the same - return nil - } - - // Store the endpoint of the path for diagonals. - // We store only the a index, because the b index on any diagonal - // (which we know during the loop below) is aidx-diag. - // endpoint[maxPath] represents the 0 diagonal. - // - // Stated differently: - // endpoint[d] contains the aidx of a furthest reaching path in diagonal d - endpoint := make([]int, 2*maxPath+1) // V - - saved := make([][]int, 0, 8) // Vs - save := func() { - dup := make([]int, len(endpoint)) - copy(dup, endpoint) - saved = append(saved, dup) - } - - var editDistance int // D -dLoop: - for editDistance = 0; editDistance <= maxPath; editDistance++ { - // The 0 diag(onal) represents equality of a and b. Each diagonal to - // the left is numbered one lower, to the right is one higher, from - // -alen to +blen. Negative diagonals favor differences from a, - // positive diagonals favor differences from b. The edit distance to a - // diagonal d cannot be shorter than d itself. - // - // The iterations of this loop cover either odds or evens, but not both, - // If odd indices are inputs, even indices are outputs and vice versa. - for diag := -editDistance; diag <= editDistance; diag += 2 { // k - var aidx int // x - switch { - case diag == -editDistance: - // This is a new diagonal; copy from previous iter - aidx = endpoint[maxPath-editDistance+1] + 0 - case diag == editDistance: - // This is a new diagonal; copy from previous iter - aidx = endpoint[maxPath+editDistance-1] + 1 - case endpoint[maxPath+diag+1] > endpoint[maxPath+diag-1]: - // diagonal d+1 was farther along, so use that - aidx = endpoint[maxPath+diag+1] + 0 - default: - // diagonal d-1 was farther (or the same), so use that - aidx = endpoint[maxPath+diag-1] + 1 - } - // On diagonal d, we can compute bidx from aidx. - bidx := aidx - diag // y - // See how far we can go on this diagonal before we find a difference. - for aidx < alen && bidx < blen && a[aidx] == b[bidx] { - aidx++ - bidx++ - } - // Store the end of the current edit chain. - endpoint[maxPath+diag] = aidx - // If we've found the end of both inputs, we're done! - if aidx >= alen && bidx >= blen { - save() // save the final path - break dLoop - } - } - save() // save the current path - } - if editDistance == 0 { - return nil - } - chunks := make([]Chunk, editDistance+1) - - x, y := alen, blen - for d := editDistance; d > 0; d-- { - endpoint := saved[d] - diag := x - y - insert := diag == -d || (diag != d && endpoint[maxPath+diag-1] < endpoint[maxPath+diag+1]) - - x1 := endpoint[maxPath+diag] - var x0, xM, kk int - if insert { - kk = diag + 1 - x0 = endpoint[maxPath+kk] - xM = x0 - } else { - kk = diag - 1 - x0 = endpoint[maxPath+kk] - xM = x0 + 1 - } - y0 := x0 - kk - - var c Chunk - if insert { - c.Added = b[y0:][:1] - } else { - c.Deleted = a[x0:][:1] - } - if xM < x1 { - c.Equal = a[xM:][:x1-xM] - } - - x, y = x0, y0 - chunks[d] = c - } - if x > 0 { - chunks[0].Equal = a[:x] - } - if chunks[0].empty() { - chunks = chunks[1:] - } - if len(chunks) == 0 { - return nil - } - return chunks -} diff --git a/vendor/github.com/kylelemons/godebug/pretty/.gitignore b/vendor/github.com/kylelemons/godebug/pretty/.gitignore deleted file mode 100644 index fa9a735da3c1..000000000000 --- a/vendor/github.com/kylelemons/godebug/pretty/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -*.test -*.bench -*.golden -*.txt -*.prof diff --git a/vendor/github.com/kylelemons/godebug/pretty/doc.go b/vendor/github.com/kylelemons/godebug/pretty/doc.go deleted file mode 100644 index 03b5718a70db..000000000000 --- a/vendor/github.com/kylelemons/godebug/pretty/doc.go +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2013 Google Inc. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Package pretty pretty-prints Go structures. -// -// This package uses reflection to examine a Go value and can -// print out in a nice, aligned fashion. It supports three -// modes (normal, compact, and extended) for advanced use. -// -// See the Reflect and Print examples for what the output looks like. -package pretty - -// TODO: -// - Catch cycles diff --git a/vendor/github.com/kylelemons/godebug/pretty/public.go b/vendor/github.com/kylelemons/godebug/pretty/public.go deleted file mode 100644 index fbc5d7abbf87..000000000000 --- a/vendor/github.com/kylelemons/godebug/pretty/public.go +++ /dev/null @@ -1,188 +0,0 @@ -// Copyright 2013 Google Inc. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package pretty - -import ( - "bytes" - "fmt" - "io" - "net" - "reflect" - "time" - - "github.com/kylelemons/godebug/diff" -) - -// A Config represents optional configuration parameters for formatting. -// -// Some options, notably ShortList, dramatically increase the overhead -// of pretty-printing a value. -type Config struct { - // Verbosity options - Compact bool // One-line output. Overrides Diffable. - Diffable bool // Adds extra newlines for more easily diffable output. - - // Field and value options - IncludeUnexported bool // Include unexported fields in output - PrintStringers bool // Call String on a fmt.Stringer - PrintTextMarshalers bool // Call MarshalText on an encoding.TextMarshaler - SkipZeroFields bool // Skip struct fields that have a zero value. - - // Output transforms - ShortList int // Maximum character length for short lists if nonzero. - - // Type-specific overrides - // - // Formatter maps a type to a function that will provide a one-line string - // representation of the input value. Conceptually: - // Formatter[reflect.TypeOf(v)](v) = "v as a string" - // - // Note that the first argument need not explicitly match the type, it must - // merely be callable with it. - // - // When processing an input value, if its type exists as a key in Formatter: - // 1) If the value is nil, no stringification is performed. - // This allows overriding of PrintStringers and PrintTextMarshalers. - // 2) The value will be called with the input as its only argument. - // The function must return a string as its first return value. - // - // In addition to func literals, two common values for this will be: - // fmt.Sprint (function) func Sprint(...interface{}) string - // Type.String (method) func (Type) String() string - // - // Note that neither of these work if the String method is a pointer - // method and the input will be provided as a value. In that case, - // use a function that calls .String on the formal value parameter. - Formatter map[reflect.Type]interface{} - - // If TrackCycles is enabled, pretty will detect and track - // self-referential structures. If a self-referential structure (aka a - // "recursive" value) is detected, numbered placeholders will be emitted. - // - // Pointer tracking is disabled by default for performance reasons. - TrackCycles bool -} - -// Default Config objects -var ( - // DefaultFormatter is the default set of overrides for stringification. - DefaultFormatter = map[reflect.Type]interface{}{ - reflect.TypeOf(time.Time{}): fmt.Sprint, - reflect.TypeOf(net.IP{}): fmt.Sprint, - reflect.TypeOf((*error)(nil)).Elem(): fmt.Sprint, - } - - // CompareConfig is the default configuration used for Compare. - CompareConfig = &Config{ - Diffable: true, - IncludeUnexported: true, - Formatter: DefaultFormatter, - } - - // DefaultConfig is the default configuration used for all other top-level functions. - DefaultConfig = &Config{ - Formatter: DefaultFormatter, - } - - // CycleTracker is a convenience config for formatting and comparing recursive structures. - CycleTracker = &Config{ - Diffable: true, - Formatter: DefaultFormatter, - TrackCycles: true, - } -) - -func (cfg *Config) fprint(buf *bytes.Buffer, vals ...interface{}) { - ref := &reflector{ - Config: cfg, - } - if cfg.TrackCycles { - ref.pointerTracker = new(pointerTracker) - } - for i, val := range vals { - if i > 0 { - buf.WriteByte('\n') - } - newFormatter(cfg, buf).write(ref.val2node(reflect.ValueOf(val))) - } -} - -// Print writes the DefaultConfig representation of the given values to standard output. -func Print(vals ...interface{}) { - DefaultConfig.Print(vals...) -} - -// Print writes the configured presentation of the given values to standard output. -func (cfg *Config) Print(vals ...interface{}) { - fmt.Println(cfg.Sprint(vals...)) -} - -// Sprint returns a string representation of the given value according to the DefaultConfig. -func Sprint(vals ...interface{}) string { - return DefaultConfig.Sprint(vals...) -} - -// Sprint returns a string representation of the given value according to cfg. -func (cfg *Config) Sprint(vals ...interface{}) string { - buf := new(bytes.Buffer) - cfg.fprint(buf, vals...) - return buf.String() -} - -// Fprint writes the representation of the given value to the writer according to the DefaultConfig. -func Fprint(w io.Writer, vals ...interface{}) (n int64, err error) { - return DefaultConfig.Fprint(w, vals...) -} - -// Fprint writes the representation of the given value to the writer according to the cfg. -func (cfg *Config) Fprint(w io.Writer, vals ...interface{}) (n int64, err error) { - buf := new(bytes.Buffer) - cfg.fprint(buf, vals...) - return buf.WriteTo(w) -} - -// Compare returns a string containing a line-by-line unified diff of the -// values in a and b, using the CompareConfig. -// -// Each line in the output is prefixed with '+', '-', or ' ' to indicate which -// side it's from. Lines from the a side are marked with '-', lines from the -// b side are marked with '+' and lines that are the same on both sides are -// marked with ' '. -// -// The comparison is based on the intentionally-untyped output of Print, and as -// such this comparison is pretty forviving. In particular, if the types of or -// types within in a and b are different but have the same representation, -// Compare will not indicate any differences between them. -func Compare(a, b interface{}) string { - return CompareConfig.Compare(a, b) -} - -// Compare returns a string containing a line-by-line unified diff of the -// values in got and want according to the cfg. -// -// Each line in the output is prefixed with '+', '-', or ' ' to indicate which -// side it's from. Lines from the a side are marked with '-', lines from the -// b side are marked with '+' and lines that are the same on both sides are -// marked with ' '. -// -// The comparison is based on the intentionally-untyped output of Print, and as -// such this comparison is pretty forviving. In particular, if the types of or -// types within in a and b are different but have the same representation, -// Compare will not indicate any differences between them. -func (cfg *Config) Compare(a, b interface{}) string { - diffCfg := *cfg - diffCfg.Diffable = true - return diff.Diff(cfg.Sprint(a), cfg.Sprint(b)) -} diff --git a/vendor/github.com/kylelemons/godebug/pretty/reflect.go b/vendor/github.com/kylelemons/godebug/pretty/reflect.go deleted file mode 100644 index 5cd30b7f0360..000000000000 --- a/vendor/github.com/kylelemons/godebug/pretty/reflect.go +++ /dev/null @@ -1,241 +0,0 @@ -// Copyright 2013 Google Inc. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package pretty - -import ( - "encoding" - "fmt" - "reflect" - "sort" -) - -func isZeroVal(val reflect.Value) bool { - if !val.CanInterface() { - return false - } - z := reflect.Zero(val.Type()).Interface() - return reflect.DeepEqual(val.Interface(), z) -} - -// pointerTracker is a helper for tracking pointer chasing to detect cycles. -type pointerTracker struct { - addrs map[uintptr]int // addr[address] = seen count - - lastID int - ids map[uintptr]int // ids[address] = id -} - -// track tracks following a reference (pointer, slice, map, etc). Every call to -// track should be paired with a call to untrack. -func (p *pointerTracker) track(ptr uintptr) { - if p.addrs == nil { - p.addrs = make(map[uintptr]int) - } - p.addrs[ptr]++ -} - -// untrack registers that we have backtracked over the reference to the pointer. -func (p *pointerTracker) untrack(ptr uintptr) { - p.addrs[ptr]-- - if p.addrs[ptr] == 0 { - delete(p.addrs, ptr) - } -} - -// seen returns whether the pointer was previously seen along this path. -func (p *pointerTracker) seen(ptr uintptr) bool { - _, ok := p.addrs[ptr] - return ok -} - -// keep allocates an ID for the given address and returns it. -func (p *pointerTracker) keep(ptr uintptr) int { - if p.ids == nil { - p.ids = make(map[uintptr]int) - } - if _, ok := p.ids[ptr]; !ok { - p.lastID++ - p.ids[ptr] = p.lastID - } - return p.ids[ptr] -} - -// id returns the ID for the given address. -func (p *pointerTracker) id(ptr uintptr) (int, bool) { - if p.ids == nil { - p.ids = make(map[uintptr]int) - } - id, ok := p.ids[ptr] - return id, ok -} - -// reflector adds local state to the recursive reflection logic. -type reflector struct { - *Config - *pointerTracker -} - -// follow handles following a possiblly-recursive reference to the given value -// from the given ptr address. -func (r *reflector) follow(ptr uintptr, val reflect.Value) node { - if r.pointerTracker == nil { - // Tracking disabled - return r.val2node(val) - } - - // If a parent already followed this, emit a reference marker - if r.seen(ptr) { - id := r.keep(ptr) - return ref{id} - } - - // Track the pointer we're following while on this recursive branch - r.track(ptr) - defer r.untrack(ptr) - n := r.val2node(val) - - // If the recursion used this ptr, wrap it with a target marker - if id, ok := r.id(ptr); ok { - return target{id, n} - } - - // Otherwise, return the node unadulterated - return n -} - -func (r *reflector) val2node(val reflect.Value) node { - if !val.IsValid() { - return rawVal("nil") - } - - if val.CanInterface() { - v := val.Interface() - if formatter, ok := r.Formatter[val.Type()]; ok { - if formatter != nil { - res := reflect.ValueOf(formatter).Call([]reflect.Value{val}) - return rawVal(res[0].Interface().(string)) - } - } else { - if s, ok := v.(fmt.Stringer); ok && r.PrintStringers { - return stringVal(s.String()) - } - if t, ok := v.(encoding.TextMarshaler); ok && r.PrintTextMarshalers { - if raw, err := t.MarshalText(); err == nil { // if NOT an error - return stringVal(string(raw)) - } - } - } - } - - switch kind := val.Kind(); kind { - case reflect.Ptr: - if val.IsNil() { - return rawVal("nil") - } - return r.follow(val.Pointer(), val.Elem()) - case reflect.Interface: - if val.IsNil() { - return rawVal("nil") - } - return r.val2node(val.Elem()) - case reflect.String: - return stringVal(val.String()) - case reflect.Slice: - n := list{} - length := val.Len() - ptr := val.Pointer() - for i := 0; i < length; i++ { - n = append(n, r.follow(ptr, val.Index(i))) - } - return n - case reflect.Array: - n := list{} - length := val.Len() - for i := 0; i < length; i++ { - n = append(n, r.val2node(val.Index(i))) - } - return n - case reflect.Map: - // Extract the keys and sort them for stable iteration - keys := val.MapKeys() - pairs := make([]mapPair, 0, len(keys)) - for _, key := range keys { - pairs = append(pairs, mapPair{ - key: new(formatter).compactString(r.val2node(key)), // can't be cyclic - value: val.MapIndex(key), - }) - } - sort.Sort(byKey(pairs)) - - // Process the keys into the final representation - ptr, n := val.Pointer(), keyvals{} - for _, pair := range pairs { - n = append(n, keyval{ - key: pair.key, - val: r.follow(ptr, pair.value), - }) - } - return n - case reflect.Struct: - n := keyvals{} - typ := val.Type() - fields := typ.NumField() - for i := 0; i < fields; i++ { - sf := typ.Field(i) - if !r.IncludeUnexported && sf.PkgPath != "" { - continue - } - field := val.Field(i) - if r.SkipZeroFields && isZeroVal(field) { - continue - } - n = append(n, keyval{sf.Name, r.val2node(field)}) - } - return n - case reflect.Bool: - if val.Bool() { - return rawVal("true") - } - return rawVal("false") - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - return rawVal(fmt.Sprintf("%d", val.Int())) - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: - return rawVal(fmt.Sprintf("%d", val.Uint())) - case reflect.Uintptr: - return rawVal(fmt.Sprintf("0x%X", val.Uint())) - case reflect.Float32, reflect.Float64: - return rawVal(fmt.Sprintf("%v", val.Float())) - case reflect.Complex64, reflect.Complex128: - return rawVal(fmt.Sprintf("%v", val.Complex())) - } - - // Fall back to the default %#v if we can - if val.CanInterface() { - return rawVal(fmt.Sprintf("%#v", val.Interface())) - } - - return rawVal(val.String()) -} - -type mapPair struct { - key string - value reflect.Value -} - -type byKey []mapPair - -func (v byKey) Len() int { return len(v) } -func (v byKey) Swap(i, j int) { v[i], v[j] = v[j], v[i] } -func (v byKey) Less(i, j int) bool { return v[i].key < v[j].key } diff --git a/vendor/github.com/kylelemons/godebug/pretty/structure.go b/vendor/github.com/kylelemons/godebug/pretty/structure.go deleted file mode 100644 index d876f60cad21..000000000000 --- a/vendor/github.com/kylelemons/godebug/pretty/structure.go +++ /dev/null @@ -1,223 +0,0 @@ -// Copyright 2013 Google Inc. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package pretty - -import ( - "bufio" - "bytes" - "fmt" - "io" - "strconv" - "strings" -) - -// a formatter stores stateful formatting information as well as being -// an io.Writer for simplicity. -type formatter struct { - *bufio.Writer - *Config - - // Self-referential structure tracking - tagNumbers map[int]int // tagNumbers[id] = <#n> -} - -// newFormatter creates a new buffered formatter. For the output to be written -// to the given writer, this must be accompanied by a call to write (or Flush). -func newFormatter(cfg *Config, w io.Writer) *formatter { - return &formatter{ - Writer: bufio.NewWriter(w), - Config: cfg, - tagNumbers: make(map[int]int), - } -} - -func (f *formatter) write(n node) { - defer f.Flush() - n.format(f, "") -} - -func (f *formatter) tagFor(id int) int { - if tag, ok := f.tagNumbers[id]; ok { - return tag - } - if f.tagNumbers == nil { - return 0 - } - tag := len(f.tagNumbers) + 1 - f.tagNumbers[id] = tag - return tag -} - -type node interface { - format(f *formatter, indent string) -} - -func (f *formatter) compactString(n node) string { - switch k := n.(type) { - case stringVal: - return string(k) - case rawVal: - return string(k) - } - - buf := new(bytes.Buffer) - f2 := newFormatter(&Config{Compact: true}, buf) - f2.tagNumbers = f.tagNumbers // reuse tagNumbers just in case - f2.write(n) - return buf.String() -} - -type stringVal string - -func (str stringVal) format(f *formatter, indent string) { - f.WriteString(strconv.Quote(string(str))) -} - -type rawVal string - -func (r rawVal) format(f *formatter, indent string) { - f.WriteString(string(r)) -} - -type keyval struct { - key string - val node -} - -type keyvals []keyval - -func (l keyvals) format(f *formatter, indent string) { - f.WriteByte('{') - - switch { - case f.Compact: - // All on one line: - for i, kv := range l { - if i > 0 { - f.WriteByte(',') - } - f.WriteString(kv.key) - f.WriteByte(':') - kv.val.format(f, indent) - } - case f.Diffable: - f.WriteByte('\n') - inner := indent + " " - // Each value gets its own line: - for _, kv := range l { - f.WriteString(inner) - f.WriteString(kv.key) - f.WriteString(": ") - kv.val.format(f, inner) - f.WriteString(",\n") - } - f.WriteString(indent) - default: - keyWidth := 0 - for _, kv := range l { - if kw := len(kv.key); kw > keyWidth { - keyWidth = kw - } - } - alignKey := indent + " " - alignValue := strings.Repeat(" ", keyWidth) - inner := alignKey + alignValue + " " - // First and last line shared with bracket: - for i, kv := range l { - if i > 0 { - f.WriteString(",\n") - f.WriteString(alignKey) - } - f.WriteString(kv.key) - f.WriteString(": ") - f.WriteString(alignValue[len(kv.key):]) - kv.val.format(f, inner) - } - } - - f.WriteByte('}') -} - -type list []node - -func (l list) format(f *formatter, indent string) { - if max := f.ShortList; max > 0 { - short := f.compactString(l) - if len(short) <= max { - f.WriteString(short) - return - } - } - - f.WriteByte('[') - - switch { - case f.Compact: - // All on one line: - for i, v := range l { - if i > 0 { - f.WriteByte(',') - } - v.format(f, indent) - } - case f.Diffable: - f.WriteByte('\n') - inner := indent + " " - // Each value gets its own line: - for _, v := range l { - f.WriteString(inner) - v.format(f, inner) - f.WriteString(",\n") - } - f.WriteString(indent) - default: - inner := indent + " " - // First and last line shared with bracket: - for i, v := range l { - if i > 0 { - f.WriteString(",\n") - f.WriteString(inner) - } - v.format(f, inner) - } - } - - f.WriteByte(']') -} - -type ref struct { - id int -} - -func (r ref) format(f *formatter, indent string) { - fmt.Fprintf(f, "", f.tagFor(r.id)) -} - -type target struct { - id int - value node -} - -func (t target) format(f *formatter, indent string) { - tag := fmt.Sprintf("<#%d> ", f.tagFor(t.id)) - switch { - case f.Diffable, f.Compact: - // no indent changes - default: - indent += strings.Repeat(" ", len(tag)) - } - f.WriteString(tag) - t.value.format(f, indent) -} diff --git a/vendor/github.com/pkg/browser/LICENSE b/vendor/github.com/pkg/browser/LICENSE deleted file mode 100644 index 65f78fb62910..000000000000 --- a/vendor/github.com/pkg/browser/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -Copyright (c) 2014, Dave Cheney -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/pkg/browser/README.md b/vendor/github.com/pkg/browser/README.md deleted file mode 100644 index 72b1976e3035..000000000000 --- a/vendor/github.com/pkg/browser/README.md +++ /dev/null @@ -1,55 +0,0 @@ - -# browser - import "github.com/pkg/browser" - -Package browser provides helpers to open files, readers, and urls in a browser window. - -The choice of which browser is started is entirely client dependant. - - - - - -## Variables -``` go -var Stderr io.Writer = os.Stderr -``` -Stderr is the io.Writer to which executed commands write standard error. - -``` go -var Stdout io.Writer = os.Stdout -``` -Stdout is the io.Writer to which executed commands write standard output. - - -## func OpenFile -``` go -func OpenFile(path string) error -``` -OpenFile opens new browser window for the file path. - - -## func OpenReader -``` go -func OpenReader(r io.Reader) error -``` -OpenReader consumes the contents of r and presents the -results in a new browser window. - - -## func OpenURL -``` go -func OpenURL(url string) error -``` -OpenURL opens a new browser window pointing to url. - - - - - - - - - -- - - -Generated by [godoc2md](http://godoc.org/github.com/davecheney/godoc2md) diff --git a/vendor/github.com/pkg/browser/browser.go b/vendor/github.com/pkg/browser/browser.go deleted file mode 100644 index d7969d74d80d..000000000000 --- a/vendor/github.com/pkg/browser/browser.go +++ /dev/null @@ -1,57 +0,0 @@ -// Package browser provides helpers to open files, readers, and urls in a browser window. -// -// The choice of which browser is started is entirely client dependant. -package browser - -import ( - "fmt" - "io" - "io/ioutil" - "os" - "os/exec" - "path/filepath" -) - -// Stdout is the io.Writer to which executed commands write standard output. -var Stdout io.Writer = os.Stdout - -// Stderr is the io.Writer to which executed commands write standard error. -var Stderr io.Writer = os.Stderr - -// OpenFile opens new browser window for the file path. -func OpenFile(path string) error { - path, err := filepath.Abs(path) - if err != nil { - return err - } - return OpenURL("file://" + path) -} - -// OpenReader consumes the contents of r and presents the -// results in a new browser window. -func OpenReader(r io.Reader) error { - f, err := ioutil.TempFile("", "browser.*.html") - if err != nil { - return fmt.Errorf("browser: could not create temporary file: %v", err) - } - if _, err := io.Copy(f, r); err != nil { - f.Close() - return fmt.Errorf("browser: caching temporary file failed: %v", err) - } - if err := f.Close(); err != nil { - return fmt.Errorf("browser: caching temporary file failed: %v", err) - } - return OpenFile(f.Name()) -} - -// OpenURL opens a new browser window pointing to url. -func OpenURL(url string) error { - return openBrowser(url) -} - -func runCmd(prog string, args ...string) error { - cmd := exec.Command(prog, args...) - cmd.Stdout = Stdout - cmd.Stderr = Stderr - return cmd.Run() -} diff --git a/vendor/github.com/pkg/browser/browser_darwin.go b/vendor/github.com/pkg/browser/browser_darwin.go deleted file mode 100644 index 8507cf7c2b45..000000000000 --- a/vendor/github.com/pkg/browser/browser_darwin.go +++ /dev/null @@ -1,5 +0,0 @@ -package browser - -func openBrowser(url string) error { - return runCmd("open", url) -} diff --git a/vendor/github.com/pkg/browser/browser_freebsd.go b/vendor/github.com/pkg/browser/browser_freebsd.go deleted file mode 100644 index 4fc7ff0761b4..000000000000 --- a/vendor/github.com/pkg/browser/browser_freebsd.go +++ /dev/null @@ -1,14 +0,0 @@ -package browser - -import ( - "errors" - "os/exec" -) - -func openBrowser(url string) error { - err := runCmd("xdg-open", url) - if e, ok := err.(*exec.Error); ok && e.Err == exec.ErrNotFound { - return errors.New("xdg-open: command not found - install xdg-utils from ports(8)") - } - return err -} diff --git a/vendor/github.com/pkg/browser/browser_linux.go b/vendor/github.com/pkg/browser/browser_linux.go deleted file mode 100644 index d26cdddf9c15..000000000000 --- a/vendor/github.com/pkg/browser/browser_linux.go +++ /dev/null @@ -1,21 +0,0 @@ -package browser - -import ( - "os/exec" - "strings" -) - -func openBrowser(url string) error { - providers := []string{"xdg-open", "x-www-browser", "www-browser"} - - // There are multiple possible providers to open a browser on linux - // One of them is xdg-open, another is x-www-browser, then there's www-browser, etc. - // Look for one that exists and run it - for _, provider := range providers { - if _, err := exec.LookPath(provider); err == nil { - return runCmd(provider, url) - } - } - - return &exec.Error{Name: strings.Join(providers, ","), Err: exec.ErrNotFound} -} diff --git a/vendor/github.com/pkg/browser/browser_netbsd.go b/vendor/github.com/pkg/browser/browser_netbsd.go deleted file mode 100644 index 65a5e5a29342..000000000000 --- a/vendor/github.com/pkg/browser/browser_netbsd.go +++ /dev/null @@ -1,14 +0,0 @@ -package browser - -import ( - "errors" - "os/exec" -) - -func openBrowser(url string) error { - err := runCmd("xdg-open", url) - if e, ok := err.(*exec.Error); ok && e.Err == exec.ErrNotFound { - return errors.New("xdg-open: command not found - install xdg-utils from pkgsrc(7)") - } - return err -} diff --git a/vendor/github.com/pkg/browser/browser_openbsd.go b/vendor/github.com/pkg/browser/browser_openbsd.go deleted file mode 100644 index 4fc7ff0761b4..000000000000 --- a/vendor/github.com/pkg/browser/browser_openbsd.go +++ /dev/null @@ -1,14 +0,0 @@ -package browser - -import ( - "errors" - "os/exec" -) - -func openBrowser(url string) error { - err := runCmd("xdg-open", url) - if e, ok := err.(*exec.Error); ok && e.Err == exec.ErrNotFound { - return errors.New("xdg-open: command not found - install xdg-utils from ports(8)") - } - return err -} diff --git a/vendor/github.com/pkg/browser/browser_unsupported.go b/vendor/github.com/pkg/browser/browser_unsupported.go deleted file mode 100644 index 7c5c17d34d26..000000000000 --- a/vendor/github.com/pkg/browser/browser_unsupported.go +++ /dev/null @@ -1,12 +0,0 @@ -// +build !linux,!windows,!darwin,!openbsd,!freebsd,!netbsd - -package browser - -import ( - "fmt" - "runtime" -) - -func openBrowser(url string) error { - return fmt.Errorf("openBrowser: unsupported operating system: %v", runtime.GOOS) -} diff --git a/vendor/github.com/pkg/browser/browser_windows.go b/vendor/github.com/pkg/browser/browser_windows.go deleted file mode 100644 index 63e192959a5e..000000000000 --- a/vendor/github.com/pkg/browser/browser_windows.go +++ /dev/null @@ -1,7 +0,0 @@ -package browser - -import "golang.org/x/sys/windows" - -func openBrowser(url string) error { - return windows.ShellExecute(0, nil, windows.StringToUTF16Ptr(url), nil, nil, windows.SW_SHOWNORMAL) -} diff --git a/vendor/golang.org/x/crypto/pkcs12/bmp-string.go b/vendor/golang.org/x/crypto/pkcs12/bmp-string.go deleted file mode 100644 index 233b8b62cc27..000000000000 --- a/vendor/golang.org/x/crypto/pkcs12/bmp-string.go +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2015 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package pkcs12 - -import ( - "errors" - "unicode/utf16" -) - -// bmpString returns s encoded in UCS-2 with a zero terminator. -func bmpString(s string) ([]byte, error) { - // References: - // https://tools.ietf.org/html/rfc7292#appendix-B.1 - // https://en.wikipedia.org/wiki/Plane_(Unicode)#Basic_Multilingual_Plane - // - non-BMP characters are encoded in UTF 16 by using a surrogate pair of 16-bit codes - // EncodeRune returns 0xfffd if the rune does not need special encoding - // - the above RFC provides the info that BMPStrings are NULL terminated. - - ret := make([]byte, 0, 2*len(s)+2) - - for _, r := range s { - if t, _ := utf16.EncodeRune(r); t != 0xfffd { - return nil, errors.New("pkcs12: string contains characters that cannot be encoded in UCS-2") - } - ret = append(ret, byte(r/256), byte(r%256)) - } - - return append(ret, 0, 0), nil -} - -func decodeBMPString(bmpString []byte) (string, error) { - if len(bmpString)%2 != 0 { - return "", errors.New("pkcs12: odd-length BMP string") - } - - // strip terminator if present - if l := len(bmpString); l >= 2 && bmpString[l-1] == 0 && bmpString[l-2] == 0 { - bmpString = bmpString[:l-2] - } - - s := make([]uint16, 0, len(bmpString)/2) - for len(bmpString) > 0 { - s = append(s, uint16(bmpString[0])<<8+uint16(bmpString[1])) - bmpString = bmpString[2:] - } - - return string(utf16.Decode(s)), nil -} diff --git a/vendor/golang.org/x/crypto/pkcs12/crypto.go b/vendor/golang.org/x/crypto/pkcs12/crypto.go deleted file mode 100644 index 96f4a1a56eca..000000000000 --- a/vendor/golang.org/x/crypto/pkcs12/crypto.go +++ /dev/null @@ -1,131 +0,0 @@ -// Copyright 2015 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package pkcs12 - -import ( - "bytes" - "crypto/cipher" - "crypto/des" - "crypto/x509/pkix" - "encoding/asn1" - "errors" - - "golang.org/x/crypto/pkcs12/internal/rc2" -) - -var ( - oidPBEWithSHAAnd3KeyTripleDESCBC = asn1.ObjectIdentifier([]int{1, 2, 840, 113549, 1, 12, 1, 3}) - oidPBEWithSHAAnd40BitRC2CBC = asn1.ObjectIdentifier([]int{1, 2, 840, 113549, 1, 12, 1, 6}) -) - -// pbeCipher is an abstraction of a PKCS#12 cipher. -type pbeCipher interface { - // create returns a cipher.Block given a key. - create(key []byte) (cipher.Block, error) - // deriveKey returns a key derived from the given password and salt. - deriveKey(salt, password []byte, iterations int) []byte - // deriveKey returns an IV derived from the given password and salt. - deriveIV(salt, password []byte, iterations int) []byte -} - -type shaWithTripleDESCBC struct{} - -func (shaWithTripleDESCBC) create(key []byte) (cipher.Block, error) { - return des.NewTripleDESCipher(key) -} - -func (shaWithTripleDESCBC) deriveKey(salt, password []byte, iterations int) []byte { - return pbkdf(sha1Sum, 20, 64, salt, password, iterations, 1, 24) -} - -func (shaWithTripleDESCBC) deriveIV(salt, password []byte, iterations int) []byte { - return pbkdf(sha1Sum, 20, 64, salt, password, iterations, 2, 8) -} - -type shaWith40BitRC2CBC struct{} - -func (shaWith40BitRC2CBC) create(key []byte) (cipher.Block, error) { - return rc2.New(key, len(key)*8) -} - -func (shaWith40BitRC2CBC) deriveKey(salt, password []byte, iterations int) []byte { - return pbkdf(sha1Sum, 20, 64, salt, password, iterations, 1, 5) -} - -func (shaWith40BitRC2CBC) deriveIV(salt, password []byte, iterations int) []byte { - return pbkdf(sha1Sum, 20, 64, salt, password, iterations, 2, 8) -} - -type pbeParams struct { - Salt []byte - Iterations int -} - -func pbDecrypterFor(algorithm pkix.AlgorithmIdentifier, password []byte) (cipher.BlockMode, int, error) { - var cipherType pbeCipher - - switch { - case algorithm.Algorithm.Equal(oidPBEWithSHAAnd3KeyTripleDESCBC): - cipherType = shaWithTripleDESCBC{} - case algorithm.Algorithm.Equal(oidPBEWithSHAAnd40BitRC2CBC): - cipherType = shaWith40BitRC2CBC{} - default: - return nil, 0, NotImplementedError("algorithm " + algorithm.Algorithm.String() + " is not supported") - } - - var params pbeParams - if err := unmarshal(algorithm.Parameters.FullBytes, ¶ms); err != nil { - return nil, 0, err - } - - key := cipherType.deriveKey(params.Salt, password, params.Iterations) - iv := cipherType.deriveIV(params.Salt, password, params.Iterations) - - block, err := cipherType.create(key) - if err != nil { - return nil, 0, err - } - - return cipher.NewCBCDecrypter(block, iv), block.BlockSize(), nil -} - -func pbDecrypt(info decryptable, password []byte) (decrypted []byte, err error) { - cbc, blockSize, err := pbDecrypterFor(info.Algorithm(), password) - if err != nil { - return nil, err - } - - encrypted := info.Data() - if len(encrypted) == 0 { - return nil, errors.New("pkcs12: empty encrypted data") - } - if len(encrypted)%blockSize != 0 { - return nil, errors.New("pkcs12: input is not a multiple of the block size") - } - decrypted = make([]byte, len(encrypted)) - cbc.CryptBlocks(decrypted, encrypted) - - psLen := int(decrypted[len(decrypted)-1]) - if psLen == 0 || psLen > blockSize { - return nil, ErrDecryption - } - - if len(decrypted) < psLen { - return nil, ErrDecryption - } - ps := decrypted[len(decrypted)-psLen:] - decrypted = decrypted[:len(decrypted)-psLen] - if !bytes.Equal(ps, bytes.Repeat([]byte{byte(psLen)}, psLen)) { - return nil, ErrDecryption - } - - return -} - -// decryptable abstracts an object that contains ciphertext. -type decryptable interface { - Algorithm() pkix.AlgorithmIdentifier - Data() []byte -} diff --git a/vendor/golang.org/x/crypto/pkcs12/errors.go b/vendor/golang.org/x/crypto/pkcs12/errors.go deleted file mode 100644 index 7377ce6fb2b8..000000000000 --- a/vendor/golang.org/x/crypto/pkcs12/errors.go +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2015 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package pkcs12 - -import "errors" - -var ( - // ErrDecryption represents a failure to decrypt the input. - ErrDecryption = errors.New("pkcs12: decryption error, incorrect padding") - - // ErrIncorrectPassword is returned when an incorrect password is detected. - // Usually, P12/PFX data is signed to be able to verify the password. - ErrIncorrectPassword = errors.New("pkcs12: decryption password incorrect") -) - -// NotImplementedError indicates that the input is not currently supported. -type NotImplementedError string - -func (e NotImplementedError) Error() string { - return "pkcs12: " + string(e) -} diff --git a/vendor/golang.org/x/crypto/pkcs12/internal/rc2/rc2.go b/vendor/golang.org/x/crypto/pkcs12/internal/rc2/rc2.go deleted file mode 100644 index 05de9cc2cdcc..000000000000 --- a/vendor/golang.org/x/crypto/pkcs12/internal/rc2/rc2.go +++ /dev/null @@ -1,268 +0,0 @@ -// Copyright 2015 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package rc2 implements the RC2 cipher -/* -https://www.ietf.org/rfc/rfc2268.txt -http://people.csail.mit.edu/rivest/pubs/KRRR98.pdf - -This code is licensed under the MIT license. -*/ -package rc2 - -import ( - "crypto/cipher" - "encoding/binary" - "math/bits" -) - -// The rc2 block size in bytes -const BlockSize = 8 - -type rc2Cipher struct { - k [64]uint16 -} - -// New returns a new rc2 cipher with the given key and effective key length t1 -func New(key []byte, t1 int) (cipher.Block, error) { - // TODO(dgryski): error checking for key length - return &rc2Cipher{ - k: expandKey(key, t1), - }, nil -} - -func (*rc2Cipher) BlockSize() int { return BlockSize } - -var piTable = [256]byte{ - 0xd9, 0x78, 0xf9, 0xc4, 0x19, 0xdd, 0xb5, 0xed, 0x28, 0xe9, 0xfd, 0x79, 0x4a, 0xa0, 0xd8, 0x9d, - 0xc6, 0x7e, 0x37, 0x83, 0x2b, 0x76, 0x53, 0x8e, 0x62, 0x4c, 0x64, 0x88, 0x44, 0x8b, 0xfb, 0xa2, - 0x17, 0x9a, 0x59, 0xf5, 0x87, 0xb3, 0x4f, 0x13, 0x61, 0x45, 0x6d, 0x8d, 0x09, 0x81, 0x7d, 0x32, - 0xbd, 0x8f, 0x40, 0xeb, 0x86, 0xb7, 0x7b, 0x0b, 0xf0, 0x95, 0x21, 0x22, 0x5c, 0x6b, 0x4e, 0x82, - 0x54, 0xd6, 0x65, 0x93, 0xce, 0x60, 0xb2, 0x1c, 0x73, 0x56, 0xc0, 0x14, 0xa7, 0x8c, 0xf1, 0xdc, - 0x12, 0x75, 0xca, 0x1f, 0x3b, 0xbe, 0xe4, 0xd1, 0x42, 0x3d, 0xd4, 0x30, 0xa3, 0x3c, 0xb6, 0x26, - 0x6f, 0xbf, 0x0e, 0xda, 0x46, 0x69, 0x07, 0x57, 0x27, 0xf2, 0x1d, 0x9b, 0xbc, 0x94, 0x43, 0x03, - 0xf8, 0x11, 0xc7, 0xf6, 0x90, 0xef, 0x3e, 0xe7, 0x06, 0xc3, 0xd5, 0x2f, 0xc8, 0x66, 0x1e, 0xd7, - 0x08, 0xe8, 0xea, 0xde, 0x80, 0x52, 0xee, 0xf7, 0x84, 0xaa, 0x72, 0xac, 0x35, 0x4d, 0x6a, 0x2a, - 0x96, 0x1a, 0xd2, 0x71, 0x5a, 0x15, 0x49, 0x74, 0x4b, 0x9f, 0xd0, 0x5e, 0x04, 0x18, 0xa4, 0xec, - 0xc2, 0xe0, 0x41, 0x6e, 0x0f, 0x51, 0xcb, 0xcc, 0x24, 0x91, 0xaf, 0x50, 0xa1, 0xf4, 0x70, 0x39, - 0x99, 0x7c, 0x3a, 0x85, 0x23, 0xb8, 0xb4, 0x7a, 0xfc, 0x02, 0x36, 0x5b, 0x25, 0x55, 0x97, 0x31, - 0x2d, 0x5d, 0xfa, 0x98, 0xe3, 0x8a, 0x92, 0xae, 0x05, 0xdf, 0x29, 0x10, 0x67, 0x6c, 0xba, 0xc9, - 0xd3, 0x00, 0xe6, 0xcf, 0xe1, 0x9e, 0xa8, 0x2c, 0x63, 0x16, 0x01, 0x3f, 0x58, 0xe2, 0x89, 0xa9, - 0x0d, 0x38, 0x34, 0x1b, 0xab, 0x33, 0xff, 0xb0, 0xbb, 0x48, 0x0c, 0x5f, 0xb9, 0xb1, 0xcd, 0x2e, - 0xc5, 0xf3, 0xdb, 0x47, 0xe5, 0xa5, 0x9c, 0x77, 0x0a, 0xa6, 0x20, 0x68, 0xfe, 0x7f, 0xc1, 0xad, -} - -func expandKey(key []byte, t1 int) [64]uint16 { - - l := make([]byte, 128) - copy(l, key) - - var t = len(key) - var t8 = (t1 + 7) / 8 - var tm = byte(255 % uint(1<<(8+uint(t1)-8*uint(t8)))) - - for i := len(key); i < 128; i++ { - l[i] = piTable[l[i-1]+l[uint8(i-t)]] - } - - l[128-t8] = piTable[l[128-t8]&tm] - - for i := 127 - t8; i >= 0; i-- { - l[i] = piTable[l[i+1]^l[i+t8]] - } - - var k [64]uint16 - - for i := range k { - k[i] = uint16(l[2*i]) + uint16(l[2*i+1])*256 - } - - return k -} - -func (c *rc2Cipher) Encrypt(dst, src []byte) { - - r0 := binary.LittleEndian.Uint16(src[0:]) - r1 := binary.LittleEndian.Uint16(src[2:]) - r2 := binary.LittleEndian.Uint16(src[4:]) - r3 := binary.LittleEndian.Uint16(src[6:]) - - var j int - - for j <= 16 { - // mix r0 - r0 = r0 + c.k[j] + (r3 & r2) + ((^r3) & r1) - r0 = bits.RotateLeft16(r0, 1) - j++ - - // mix r1 - r1 = r1 + c.k[j] + (r0 & r3) + ((^r0) & r2) - r1 = bits.RotateLeft16(r1, 2) - j++ - - // mix r2 - r2 = r2 + c.k[j] + (r1 & r0) + ((^r1) & r3) - r2 = bits.RotateLeft16(r2, 3) - j++ - - // mix r3 - r3 = r3 + c.k[j] + (r2 & r1) + ((^r2) & r0) - r3 = bits.RotateLeft16(r3, 5) - j++ - - } - - r0 = r0 + c.k[r3&63] - r1 = r1 + c.k[r0&63] - r2 = r2 + c.k[r1&63] - r3 = r3 + c.k[r2&63] - - for j <= 40 { - // mix r0 - r0 = r0 + c.k[j] + (r3 & r2) + ((^r3) & r1) - r0 = bits.RotateLeft16(r0, 1) - j++ - - // mix r1 - r1 = r1 + c.k[j] + (r0 & r3) + ((^r0) & r2) - r1 = bits.RotateLeft16(r1, 2) - j++ - - // mix r2 - r2 = r2 + c.k[j] + (r1 & r0) + ((^r1) & r3) - r2 = bits.RotateLeft16(r2, 3) - j++ - - // mix r3 - r3 = r3 + c.k[j] + (r2 & r1) + ((^r2) & r0) - r3 = bits.RotateLeft16(r3, 5) - j++ - - } - - r0 = r0 + c.k[r3&63] - r1 = r1 + c.k[r0&63] - r2 = r2 + c.k[r1&63] - r3 = r3 + c.k[r2&63] - - for j <= 60 { - // mix r0 - r0 = r0 + c.k[j] + (r3 & r2) + ((^r3) & r1) - r0 = bits.RotateLeft16(r0, 1) - j++ - - // mix r1 - r1 = r1 + c.k[j] + (r0 & r3) + ((^r0) & r2) - r1 = bits.RotateLeft16(r1, 2) - j++ - - // mix r2 - r2 = r2 + c.k[j] + (r1 & r0) + ((^r1) & r3) - r2 = bits.RotateLeft16(r2, 3) - j++ - - // mix r3 - r3 = r3 + c.k[j] + (r2 & r1) + ((^r2) & r0) - r3 = bits.RotateLeft16(r3, 5) - j++ - } - - binary.LittleEndian.PutUint16(dst[0:], r0) - binary.LittleEndian.PutUint16(dst[2:], r1) - binary.LittleEndian.PutUint16(dst[4:], r2) - binary.LittleEndian.PutUint16(dst[6:], r3) -} - -func (c *rc2Cipher) Decrypt(dst, src []byte) { - - r0 := binary.LittleEndian.Uint16(src[0:]) - r1 := binary.LittleEndian.Uint16(src[2:]) - r2 := binary.LittleEndian.Uint16(src[4:]) - r3 := binary.LittleEndian.Uint16(src[6:]) - - j := 63 - - for j >= 44 { - // unmix r3 - r3 = bits.RotateLeft16(r3, 16-5) - r3 = r3 - c.k[j] - (r2 & r1) - ((^r2) & r0) - j-- - - // unmix r2 - r2 = bits.RotateLeft16(r2, 16-3) - r2 = r2 - c.k[j] - (r1 & r0) - ((^r1) & r3) - j-- - - // unmix r1 - r1 = bits.RotateLeft16(r1, 16-2) - r1 = r1 - c.k[j] - (r0 & r3) - ((^r0) & r2) - j-- - - // unmix r0 - r0 = bits.RotateLeft16(r0, 16-1) - r0 = r0 - c.k[j] - (r3 & r2) - ((^r3) & r1) - j-- - } - - r3 = r3 - c.k[r2&63] - r2 = r2 - c.k[r1&63] - r1 = r1 - c.k[r0&63] - r0 = r0 - c.k[r3&63] - - for j >= 20 { - // unmix r3 - r3 = bits.RotateLeft16(r3, 16-5) - r3 = r3 - c.k[j] - (r2 & r1) - ((^r2) & r0) - j-- - - // unmix r2 - r2 = bits.RotateLeft16(r2, 16-3) - r2 = r2 - c.k[j] - (r1 & r0) - ((^r1) & r3) - j-- - - // unmix r1 - r1 = bits.RotateLeft16(r1, 16-2) - r1 = r1 - c.k[j] - (r0 & r3) - ((^r0) & r2) - j-- - - // unmix r0 - r0 = bits.RotateLeft16(r0, 16-1) - r0 = r0 - c.k[j] - (r3 & r2) - ((^r3) & r1) - j-- - - } - - r3 = r3 - c.k[r2&63] - r2 = r2 - c.k[r1&63] - r1 = r1 - c.k[r0&63] - r0 = r0 - c.k[r3&63] - - for j >= 0 { - // unmix r3 - r3 = bits.RotateLeft16(r3, 16-5) - r3 = r3 - c.k[j] - (r2 & r1) - ((^r2) & r0) - j-- - - // unmix r2 - r2 = bits.RotateLeft16(r2, 16-3) - r2 = r2 - c.k[j] - (r1 & r0) - ((^r1) & r3) - j-- - - // unmix r1 - r1 = bits.RotateLeft16(r1, 16-2) - r1 = r1 - c.k[j] - (r0 & r3) - ((^r0) & r2) - j-- - - // unmix r0 - r0 = bits.RotateLeft16(r0, 16-1) - r0 = r0 - c.k[j] - (r3 & r2) - ((^r3) & r1) - j-- - - } - - binary.LittleEndian.PutUint16(dst[0:], r0) - binary.LittleEndian.PutUint16(dst[2:], r1) - binary.LittleEndian.PutUint16(dst[4:], r2) - binary.LittleEndian.PutUint16(dst[6:], r3) -} diff --git a/vendor/golang.org/x/crypto/pkcs12/mac.go b/vendor/golang.org/x/crypto/pkcs12/mac.go deleted file mode 100644 index 5f38aa7de83c..000000000000 --- a/vendor/golang.org/x/crypto/pkcs12/mac.go +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2015 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package pkcs12 - -import ( - "crypto/hmac" - "crypto/sha1" - "crypto/x509/pkix" - "encoding/asn1" -) - -type macData struct { - Mac digestInfo - MacSalt []byte - Iterations int `asn1:"optional,default:1"` -} - -// from PKCS#7: -type digestInfo struct { - Algorithm pkix.AlgorithmIdentifier - Digest []byte -} - -var ( - oidSHA1 = asn1.ObjectIdentifier([]int{1, 3, 14, 3, 2, 26}) -) - -func verifyMac(macData *macData, message, password []byte) error { - if !macData.Mac.Algorithm.Algorithm.Equal(oidSHA1) { - return NotImplementedError("unknown digest algorithm: " + macData.Mac.Algorithm.Algorithm.String()) - } - - key := pbkdf(sha1Sum, 20, 64, macData.MacSalt, password, macData.Iterations, 3, 20) - - mac := hmac.New(sha1.New, key) - mac.Write(message) - expectedMAC := mac.Sum(nil) - - if !hmac.Equal(macData.Mac.Digest, expectedMAC) { - return ErrIncorrectPassword - } - return nil -} diff --git a/vendor/golang.org/x/crypto/pkcs12/pbkdf.go b/vendor/golang.org/x/crypto/pkcs12/pbkdf.go deleted file mode 100644 index 5c419d41e32c..000000000000 --- a/vendor/golang.org/x/crypto/pkcs12/pbkdf.go +++ /dev/null @@ -1,170 +0,0 @@ -// Copyright 2015 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package pkcs12 - -import ( - "bytes" - "crypto/sha1" - "math/big" -) - -var ( - one = big.NewInt(1) -) - -// sha1Sum returns the SHA-1 hash of in. -func sha1Sum(in []byte) []byte { - sum := sha1.Sum(in) - return sum[:] -} - -// fillWithRepeats returns v*ceiling(len(pattern) / v) bytes consisting of -// repeats of pattern. -func fillWithRepeats(pattern []byte, v int) []byte { - if len(pattern) == 0 { - return nil - } - outputLen := v * ((len(pattern) + v - 1) / v) - return bytes.Repeat(pattern, (outputLen+len(pattern)-1)/len(pattern))[:outputLen] -} - -func pbkdf(hash func([]byte) []byte, u, v int, salt, password []byte, r int, ID byte, size int) (key []byte) { - // implementation of https://tools.ietf.org/html/rfc7292#appendix-B.2 , RFC text verbatim in comments - - // Let H be a hash function built around a compression function f: - - // Z_2^u x Z_2^v -> Z_2^u - - // (that is, H has a chaining variable and output of length u bits, and - // the message input to the compression function of H is v bits). The - // values for u and v are as follows: - - // HASH FUNCTION VALUE u VALUE v - // MD2, MD5 128 512 - // SHA-1 160 512 - // SHA-224 224 512 - // SHA-256 256 512 - // SHA-384 384 1024 - // SHA-512 512 1024 - // SHA-512/224 224 1024 - // SHA-512/256 256 1024 - - // Furthermore, let r be the iteration count. - - // We assume here that u and v are both multiples of 8, as are the - // lengths of the password and salt strings (which we denote by p and s, - // respectively) and the number n of pseudorandom bits required. In - // addition, u and v are of course non-zero. - - // For information on security considerations for MD5 [19], see [25] and - // [1], and on those for MD2, see [18]. - - // The following procedure can be used to produce pseudorandom bits for - // a particular "purpose" that is identified by a byte called "ID". - // This standard specifies 3 different values for the ID byte: - - // 1. If ID=1, then the pseudorandom bits being produced are to be used - // as key material for performing encryption or decryption. - - // 2. If ID=2, then the pseudorandom bits being produced are to be used - // as an IV (Initial Value) for encryption or decryption. - - // 3. If ID=3, then the pseudorandom bits being produced are to be used - // as an integrity key for MACing. - - // 1. Construct a string, D (the "diversifier"), by concatenating v/8 - // copies of ID. - var D []byte - for i := 0; i < v; i++ { - D = append(D, ID) - } - - // 2. Concatenate copies of the salt together to create a string S of - // length v(ceiling(s/v)) bits (the final copy of the salt may be - // truncated to create S). Note that if the salt is the empty - // string, then so is S. - - S := fillWithRepeats(salt, v) - - // 3. Concatenate copies of the password together to create a string P - // of length v(ceiling(p/v)) bits (the final copy of the password - // may be truncated to create P). Note that if the password is the - // empty string, then so is P. - - P := fillWithRepeats(password, v) - - // 4. Set I=S||P to be the concatenation of S and P. - I := append(S, P...) - - // 5. Set c=ceiling(n/u). - c := (size + u - 1) / u - - // 6. For i=1, 2, ..., c, do the following: - A := make([]byte, c*20) - var IjBuf []byte - for i := 0; i < c; i++ { - // A. Set A2=H^r(D||I). (i.e., the r-th hash of D||1, - // H(H(H(... H(D||I)))) - Ai := hash(append(D, I...)) - for j := 1; j < r; j++ { - Ai = hash(Ai) - } - copy(A[i*20:], Ai[:]) - - if i < c-1 { // skip on last iteration - // B. Concatenate copies of Ai to create a string B of length v - // bits (the final copy of Ai may be truncated to create B). - var B []byte - for len(B) < v { - B = append(B, Ai[:]...) - } - B = B[:v] - - // C. Treating I as a concatenation I_0, I_1, ..., I_(k-1) of v-bit - // blocks, where k=ceiling(s/v)+ceiling(p/v), modify I by - // setting I_j=(I_j+B+1) mod 2^v for each j. - { - Bbi := new(big.Int).SetBytes(B) - Ij := new(big.Int) - - for j := 0; j < len(I)/v; j++ { - Ij.SetBytes(I[j*v : (j+1)*v]) - Ij.Add(Ij, Bbi) - Ij.Add(Ij, one) - Ijb := Ij.Bytes() - // We expect Ijb to be exactly v bytes, - // if it is longer or shorter we must - // adjust it accordingly. - if len(Ijb) > v { - Ijb = Ijb[len(Ijb)-v:] - } - if len(Ijb) < v { - if IjBuf == nil { - IjBuf = make([]byte, v) - } - bytesShort := v - len(Ijb) - for i := 0; i < bytesShort; i++ { - IjBuf[i] = 0 - } - copy(IjBuf[bytesShort:], Ijb) - Ijb = IjBuf - } - copy(I[j*v:(j+1)*v], Ijb) - } - } - } - } - // 7. Concatenate A_1, A_2, ..., A_c together to form a pseudorandom - // bit string, A. - - // 8. Use the first n bits of A as the output of this entire process. - return A[:size] - - // If the above process is being used to generate a DES key, the process - // should be used to create 64 random bits, and the key's parity bits - // should be set after the 64 bits have been produced. Similar concerns - // hold for 2-key and 3-key triple-DES keys, for CDMF keys, and for any - // similar keys with parity bits "built into them". -} diff --git a/vendor/golang.org/x/crypto/pkcs12/pkcs12.go b/vendor/golang.org/x/crypto/pkcs12/pkcs12.go deleted file mode 100644 index 3a89bdb3e393..000000000000 --- a/vendor/golang.org/x/crypto/pkcs12/pkcs12.go +++ /dev/null @@ -1,360 +0,0 @@ -// Copyright 2015 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package pkcs12 implements some of PKCS#12. -// -// This implementation is distilled from https://tools.ietf.org/html/rfc7292 -// and referenced documents. It is intended for decoding P12/PFX-stored -// certificates and keys for use with the crypto/tls package. -// -// This package is frozen. If it's missing functionality you need, consider -// an alternative like software.sslmate.com/src/go-pkcs12. -package pkcs12 - -import ( - "crypto/ecdsa" - "crypto/rsa" - "crypto/x509" - "crypto/x509/pkix" - "encoding/asn1" - "encoding/hex" - "encoding/pem" - "errors" -) - -var ( - oidDataContentType = asn1.ObjectIdentifier([]int{1, 2, 840, 113549, 1, 7, 1}) - oidEncryptedDataContentType = asn1.ObjectIdentifier([]int{1, 2, 840, 113549, 1, 7, 6}) - - oidFriendlyName = asn1.ObjectIdentifier([]int{1, 2, 840, 113549, 1, 9, 20}) - oidLocalKeyID = asn1.ObjectIdentifier([]int{1, 2, 840, 113549, 1, 9, 21}) - oidMicrosoftCSPName = asn1.ObjectIdentifier([]int{1, 3, 6, 1, 4, 1, 311, 17, 1}) - - errUnknownAttributeOID = errors.New("pkcs12: unknown attribute OID") -) - -type pfxPdu struct { - Version int - AuthSafe contentInfo - MacData macData `asn1:"optional"` -} - -type contentInfo struct { - ContentType asn1.ObjectIdentifier - Content asn1.RawValue `asn1:"tag:0,explicit,optional"` -} - -type encryptedData struct { - Version int - EncryptedContentInfo encryptedContentInfo -} - -type encryptedContentInfo struct { - ContentType asn1.ObjectIdentifier - ContentEncryptionAlgorithm pkix.AlgorithmIdentifier - EncryptedContent []byte `asn1:"tag:0,optional"` -} - -func (i encryptedContentInfo) Algorithm() pkix.AlgorithmIdentifier { - return i.ContentEncryptionAlgorithm -} - -func (i encryptedContentInfo) Data() []byte { return i.EncryptedContent } - -type safeBag struct { - Id asn1.ObjectIdentifier - Value asn1.RawValue `asn1:"tag:0,explicit"` - Attributes []pkcs12Attribute `asn1:"set,optional"` -} - -type pkcs12Attribute struct { - Id asn1.ObjectIdentifier - Value asn1.RawValue `asn1:"set"` -} - -type encryptedPrivateKeyInfo struct { - AlgorithmIdentifier pkix.AlgorithmIdentifier - EncryptedData []byte -} - -func (i encryptedPrivateKeyInfo) Algorithm() pkix.AlgorithmIdentifier { - return i.AlgorithmIdentifier -} - -func (i encryptedPrivateKeyInfo) Data() []byte { - return i.EncryptedData -} - -// PEM block types -const ( - certificateType = "CERTIFICATE" - privateKeyType = "PRIVATE KEY" -) - -// unmarshal calls asn1.Unmarshal, but also returns an error if there is any -// trailing data after unmarshaling. -func unmarshal(in []byte, out interface{}) error { - trailing, err := asn1.Unmarshal(in, out) - if err != nil { - return err - } - if len(trailing) != 0 { - return errors.New("pkcs12: trailing data found") - } - return nil -} - -// ToPEM converts all "safe bags" contained in pfxData to PEM blocks. -// Unknown attributes are discarded. -// -// Note that although the returned PEM blocks for private keys have type -// "PRIVATE KEY", the bytes are not encoded according to PKCS #8, but according -// to PKCS #1 for RSA keys and SEC 1 for ECDSA keys. -func ToPEM(pfxData []byte, password string) ([]*pem.Block, error) { - encodedPassword, err := bmpString(password) - if err != nil { - return nil, ErrIncorrectPassword - } - - bags, encodedPassword, err := getSafeContents(pfxData, encodedPassword) - - if err != nil { - return nil, err - } - - blocks := make([]*pem.Block, 0, len(bags)) - for _, bag := range bags { - block, err := convertBag(&bag, encodedPassword) - if err != nil { - return nil, err - } - blocks = append(blocks, block) - } - - return blocks, nil -} - -func convertBag(bag *safeBag, password []byte) (*pem.Block, error) { - block := &pem.Block{ - Headers: make(map[string]string), - } - - for _, attribute := range bag.Attributes { - k, v, err := convertAttribute(&attribute) - if err == errUnknownAttributeOID { - continue - } - if err != nil { - return nil, err - } - block.Headers[k] = v - } - - switch { - case bag.Id.Equal(oidCertBag): - block.Type = certificateType - certsData, err := decodeCertBag(bag.Value.Bytes) - if err != nil { - return nil, err - } - block.Bytes = certsData - case bag.Id.Equal(oidPKCS8ShroundedKeyBag): - block.Type = privateKeyType - - key, err := decodePkcs8ShroudedKeyBag(bag.Value.Bytes, password) - if err != nil { - return nil, err - } - - switch key := key.(type) { - case *rsa.PrivateKey: - block.Bytes = x509.MarshalPKCS1PrivateKey(key) - case *ecdsa.PrivateKey: - block.Bytes, err = x509.MarshalECPrivateKey(key) - if err != nil { - return nil, err - } - default: - return nil, errors.New("found unknown private key type in PKCS#8 wrapping") - } - default: - return nil, errors.New("don't know how to convert a safe bag of type " + bag.Id.String()) - } - return block, nil -} - -func convertAttribute(attribute *pkcs12Attribute) (key, value string, err error) { - isString := false - - switch { - case attribute.Id.Equal(oidFriendlyName): - key = "friendlyName" - isString = true - case attribute.Id.Equal(oidLocalKeyID): - key = "localKeyId" - case attribute.Id.Equal(oidMicrosoftCSPName): - // This key is chosen to match OpenSSL. - key = "Microsoft CSP Name" - isString = true - default: - return "", "", errUnknownAttributeOID - } - - if isString { - if err := unmarshal(attribute.Value.Bytes, &attribute.Value); err != nil { - return "", "", err - } - if value, err = decodeBMPString(attribute.Value.Bytes); err != nil { - return "", "", err - } - } else { - var id []byte - if err := unmarshal(attribute.Value.Bytes, &id); err != nil { - return "", "", err - } - value = hex.EncodeToString(id) - } - - return key, value, nil -} - -// Decode extracts a certificate and private key from pfxData. This function -// assumes that there is only one certificate and only one private key in the -// pfxData; if there are more use ToPEM instead. -func Decode(pfxData []byte, password string) (privateKey interface{}, certificate *x509.Certificate, err error) { - encodedPassword, err := bmpString(password) - if err != nil { - return nil, nil, err - } - - bags, encodedPassword, err := getSafeContents(pfxData, encodedPassword) - if err != nil { - return nil, nil, err - } - - if len(bags) != 2 { - err = errors.New("pkcs12: expected exactly two safe bags in the PFX PDU") - return - } - - for _, bag := range bags { - switch { - case bag.Id.Equal(oidCertBag): - if certificate != nil { - err = errors.New("pkcs12: expected exactly one certificate bag") - } - - certsData, err := decodeCertBag(bag.Value.Bytes) - if err != nil { - return nil, nil, err - } - certs, err := x509.ParseCertificates(certsData) - if err != nil { - return nil, nil, err - } - if len(certs) != 1 { - err = errors.New("pkcs12: expected exactly one certificate in the certBag") - return nil, nil, err - } - certificate = certs[0] - - case bag.Id.Equal(oidPKCS8ShroundedKeyBag): - if privateKey != nil { - err = errors.New("pkcs12: expected exactly one key bag") - return nil, nil, err - } - - if privateKey, err = decodePkcs8ShroudedKeyBag(bag.Value.Bytes, encodedPassword); err != nil { - return nil, nil, err - } - } - } - - if certificate == nil { - return nil, nil, errors.New("pkcs12: certificate missing") - } - if privateKey == nil { - return nil, nil, errors.New("pkcs12: private key missing") - } - - return -} - -func getSafeContents(p12Data, password []byte) (bags []safeBag, updatedPassword []byte, err error) { - pfx := new(pfxPdu) - if err := unmarshal(p12Data, pfx); err != nil { - return nil, nil, errors.New("pkcs12: error reading P12 data: " + err.Error()) - } - - if pfx.Version != 3 { - return nil, nil, NotImplementedError("can only decode v3 PFX PDU's") - } - - if !pfx.AuthSafe.ContentType.Equal(oidDataContentType) { - return nil, nil, NotImplementedError("only password-protected PFX is implemented") - } - - // unmarshal the explicit bytes in the content for type 'data' - if err := unmarshal(pfx.AuthSafe.Content.Bytes, &pfx.AuthSafe.Content); err != nil { - return nil, nil, err - } - - if len(pfx.MacData.Mac.Algorithm.Algorithm) == 0 { - return nil, nil, errors.New("pkcs12: no MAC in data") - } - - if err := verifyMac(&pfx.MacData, pfx.AuthSafe.Content.Bytes, password); err != nil { - if err == ErrIncorrectPassword && len(password) == 2 && password[0] == 0 && password[1] == 0 { - // some implementations use an empty byte array - // for the empty string password try one more - // time with empty-empty password - password = nil - err = verifyMac(&pfx.MacData, pfx.AuthSafe.Content.Bytes, password) - } - if err != nil { - return nil, nil, err - } - } - - var authenticatedSafe []contentInfo - if err := unmarshal(pfx.AuthSafe.Content.Bytes, &authenticatedSafe); err != nil { - return nil, nil, err - } - - if len(authenticatedSafe) != 2 { - return nil, nil, NotImplementedError("expected exactly two items in the authenticated safe") - } - - for _, ci := range authenticatedSafe { - var data []byte - - switch { - case ci.ContentType.Equal(oidDataContentType): - if err := unmarshal(ci.Content.Bytes, &data); err != nil { - return nil, nil, err - } - case ci.ContentType.Equal(oidEncryptedDataContentType): - var encryptedData encryptedData - if err := unmarshal(ci.Content.Bytes, &encryptedData); err != nil { - return nil, nil, err - } - if encryptedData.Version != 0 { - return nil, nil, NotImplementedError("only version 0 of EncryptedData is supported") - } - if data, err = pbDecrypt(encryptedData.EncryptedContentInfo, password); err != nil { - return nil, nil, err - } - default: - return nil, nil, NotImplementedError("only data and encryptedData content types are supported in authenticated safe") - } - - var safeContents []safeBag - if err := unmarshal(data, &safeContents); err != nil { - return nil, nil, err - } - bags = append(bags, safeContents...) - } - - return bags, password, nil -} diff --git a/vendor/golang.org/x/crypto/pkcs12/safebags.go b/vendor/golang.org/x/crypto/pkcs12/safebags.go deleted file mode 100644 index def1f7b98d7d..000000000000 --- a/vendor/golang.org/x/crypto/pkcs12/safebags.go +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2015 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package pkcs12 - -import ( - "crypto/x509" - "encoding/asn1" - "errors" -) - -var ( - // see https://tools.ietf.org/html/rfc7292#appendix-D - oidCertTypeX509Certificate = asn1.ObjectIdentifier([]int{1, 2, 840, 113549, 1, 9, 22, 1}) - oidPKCS8ShroundedKeyBag = asn1.ObjectIdentifier([]int{1, 2, 840, 113549, 1, 12, 10, 1, 2}) - oidCertBag = asn1.ObjectIdentifier([]int{1, 2, 840, 113549, 1, 12, 10, 1, 3}) -) - -type certBag struct { - Id asn1.ObjectIdentifier - Data []byte `asn1:"tag:0,explicit"` -} - -func decodePkcs8ShroudedKeyBag(asn1Data, password []byte) (privateKey interface{}, err error) { - pkinfo := new(encryptedPrivateKeyInfo) - if err = unmarshal(asn1Data, pkinfo); err != nil { - return nil, errors.New("pkcs12: error decoding PKCS#8 shrouded key bag: " + err.Error()) - } - - pkData, err := pbDecrypt(pkinfo, password) - if err != nil { - return nil, errors.New("pkcs12: error decrypting PKCS#8 shrouded key bag: " + err.Error()) - } - - ret := new(asn1.RawValue) - if err = unmarshal(pkData, ret); err != nil { - return nil, errors.New("pkcs12: error unmarshaling decrypted private key: " + err.Error()) - } - - if privateKey, err = x509.ParsePKCS8PrivateKey(pkData); err != nil { - return nil, errors.New("pkcs12: error parsing PKCS#8 private key: " + err.Error()) - } - - return privateKey, nil -} - -func decodeCertBag(asn1Data []byte) (x509Certificates []byte, err error) { - bag := new(certBag) - if err := unmarshal(asn1Data, bag); err != nil { - return nil, errors.New("pkcs12: error decoding cert bag: " + err.Error()) - } - if !bag.Id.Equal(oidCertTypeX509Certificate) { - return nil, NotImplementedError("only X509 certificates are supported") - } - return bag.Data, nil -} diff --git a/vendor/modules.txt b/vendor/modules.txt index fb86db4c409f..3a8a8e2c1463 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -4,68 +4,6 @@ github.com/AdaLogics/go-fuzz-headers # github.com/AdamKorcz/go-118-fuzz-build v0.0.0-20231105174938-2b5cbb29f3e2 ## explicit; go 1.18 github.com/AdamKorcz/go-118-fuzz-build/testing -# github.com/Azure/azure-sdk-for-go/sdk/azcore v1.11.1 -## explicit; go 1.18 -github.com/Azure/azure-sdk-for-go/sdk/azcore -github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/internal/resource -github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/policy -github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/runtime -github.com/Azure/azure-sdk-for-go/sdk/azcore/cloud -github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported -github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/log -github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers -github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/async -github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/body -github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/fake -github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/loc -github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/op -github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared -github.com/Azure/azure-sdk-for-go/sdk/azcore/log -github.com/Azure/azure-sdk-for-go/sdk/azcore/policy -github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime -github.com/Azure/azure-sdk-for-go/sdk/azcore/streaming -github.com/Azure/azure-sdk-for-go/sdk/azcore/to -github.com/Azure/azure-sdk-for-go/sdk/azcore/tracing -# github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.6.0 -## explicit; go 1.18 -github.com/Azure/azure-sdk-for-go/sdk/azidentity -github.com/Azure/azure-sdk-for-go/sdk/azidentity/internal -# github.com/Azure/azure-sdk-for-go/sdk/internal v1.8.0 -## explicit; go 1.18 -github.com/Azure/azure-sdk-for-go/sdk/internal/diag -github.com/Azure/azure-sdk-for-go/sdk/internal/errorinfo -github.com/Azure/azure-sdk-for-go/sdk/internal/exported -github.com/Azure/azure-sdk-for-go/sdk/internal/log -github.com/Azure/azure-sdk-for-go/sdk/internal/poller -github.com/Azure/azure-sdk-for-go/sdk/internal/temporal -github.com/Azure/azure-sdk-for-go/sdk/internal/uuid -# github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v0.4.1 -## explicit; go 1.18 -github.com/Azure/azure-sdk-for-go/sdk/storage/azblob -github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/internal -# github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2 -## explicit; go 1.18 -github.com/AzureAD/microsoft-authentication-library-for-go/apps/cache -github.com/AzureAD/microsoft-authentication-library-for-go/apps/confidential -github.com/AzureAD/microsoft-authentication-library-for-go/apps/errors -github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/base -github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/base/internal/storage -github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/exported -github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/json -github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/json/types/time -github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/local -github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth -github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops -github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/accesstokens -github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/authority -github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/internal/comm -github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/internal/grant -github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/wstrust -github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/oauth/ops/wstrust/defs -github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/options -github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/shared -github.com/AzureAD/microsoft-authentication-library-for-go/apps/internal/version -github.com/AzureAD/microsoft-authentication-library-for-go/apps/public # github.com/Microsoft/go-winio v0.6.2 ## explicit; go 1.21 github.com/Microsoft/go-winio @@ -630,10 +568,6 @@ github.com/klauspost/compress/internal/cpuinfo github.com/klauspost/compress/internal/snapref github.com/klauspost/compress/zstd github.com/klauspost/compress/zstd/internal/xxhash -# github.com/kylelemons/godebug v1.1.0 -## explicit; go 1.11 -github.com/kylelemons/godebug/diff -github.com/kylelemons/godebug/pretty # github.com/mitchellh/hashstructure/v2 v2.0.2 ## explicit; go 1.14 github.com/mitchellh/hashstructure/v2 @@ -707,9 +641,6 @@ github.com/pelletier/go-toml # github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7 ## explicit; go 1.17 github.com/petermattis/goid -# github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c -## explicit; go 1.14 -github.com/pkg/browser # github.com/pkg/errors v0.9.1 ## explicit github.com/pkg/errors @@ -952,8 +883,6 @@ golang.org/x/crypto/curve25519 golang.org/x/crypto/internal/alias golang.org/x/crypto/internal/poly1305 golang.org/x/crypto/nacl/sign -golang.org/x/crypto/pkcs12 -golang.org/x/crypto/pkcs12/internal/rc2 golang.org/x/crypto/ssh golang.org/x/crypto/ssh/agent golang.org/x/crypto/ssh/internal/bcrypt_pbkdf