From eb09a40de63ee66c1128f58463bf30ca9e0a4bbf Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot Date: Tue, 12 Mar 2024 02:54:31 +0000 Subject: [PATCH] feat: Automated regeneration of STS client --- clients/sts/README.md | 2 +- clients/sts/lib/google_api/sts/v1/api/v1.ex | 63 +++++++++++++++++- clients/sts/lib/google_api/sts/v1/metadata.ex | 2 +- .../sts/v1/model/google_iam_v1_binding.ex | 4 +- ...ity_sts_v1_exchange_oauth_token_request.ex | 64 +++++++++++++++++++ ...ty_sts_v1_exchange_oauth_token_response.ex | 61 ++++++++++++++++++ clients/sts/mix.exs | 2 +- 7 files changed, 192 insertions(+), 6 deletions(-) create mode 100644 clients/sts/lib/google_api/sts/v1/model/google_identity_sts_v1_exchange_oauth_token_request.ex create mode 100644 clients/sts/lib/google_api/sts/v1/model/google_identity_sts_v1_exchange_oauth_token_response.ex diff --git a/clients/sts/README.md b/clients/sts/README.md index e923801dbb..1cbb0612bd 100644 --- a/clients/sts/README.md +++ b/clients/sts/README.md @@ -11,7 +11,7 @@ Install this package from [Hex](https://hex.pm) by adding ```elixir def deps do - [{:google_api_sts, "~> 0.5"}] + [{:google_api_sts, "~> 0.6"}] end ``` diff --git a/clients/sts/lib/google_api/sts/v1/api/v1.ex b/clients/sts/lib/google_api/sts/v1/api/v1.ex index 4dfd809c23..2695e2cb3c 100644 --- a/clients/sts/lib/google_api/sts/v1/api/v1.ex +++ b/clients/sts/lib/google_api/sts/v1/api/v1.ex @@ -87,7 +87,68 @@ defmodule GoogleApi.STS.V1.Api.V1 do end @doc """ - Exchanges a credential for a Google OAuth 2.0 access token. The token asserts an external identity within an identity pool, or it applies a Credential Access Boundary to a Google access token. Note that workforce pools do not support Credential Access Boundary at the moment. When you call this method, do not send the `Authorization` HTTP header in the request. This method does not require the `Authorization` header, and using the header can cause the request to fail. + Exchanges a credential that represents the resource owner's authorization for a Google-generated [OAuth 2.0 access token] (https://www.rfc-editor.org/rfc/rfc6749#section-5) or [refreshes an accesstoken] (https://www.rfc-editor.org/rfc/rfc6749#section-6) following [the OAuth 2.0 authorization framework] (https://tools.ietf.org/html/rfc8693) The credential can be one of the following: - An authorization code issued by the workforce identity federation authorization endpoint - A [refresh token](https://www.rfc-editor.org/rfc/rfc6749#section-10.4) issued by this endpoint This endpoint is only meant to be called by the Google Cloud CLI. Also note that this API only accepts the authorization code issued for workforce pools. + + ## Parameters + + * `connection` (*type:* `GoogleApi.STS.V1.Connection.t`) - Connection to server + * `optional_params` (*type:* `keyword()`) - Optional parameters + * `:"$.xgafv"` (*type:* `String.t`) - V1 error format. + * `:access_token` (*type:* `String.t`) - OAuth access token. + * `:alt` (*type:* `String.t`) - Data format for response. + * `:callback` (*type:* `String.t`) - JSONP + * `:fields` (*type:* `String.t`) - Selector specifying which fields to include in a partial response. + * `:key` (*type:* `String.t`) - API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token. + * `:oauth_token` (*type:* `String.t`) - OAuth 2.0 token for the current user. + * `:prettyPrint` (*type:* `boolean()`) - Returns response with indentations and line breaks. + * `:quotaUser` (*type:* `String.t`) - Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. + * `:uploadType` (*type:* `String.t`) - Legacy upload protocol for media (e.g. "media", "multipart"). + * `:upload_protocol` (*type:* `String.t`) - Upload protocol for media (e.g. "raw", "multipart"). + * `:body` (*type:* `GoogleApi.STS.V1.Model.GoogleIdentityStsV1ExchangeOauthTokenRequest.t`) - + * `opts` (*type:* `keyword()`) - Call options + + ## Returns + + * `{:ok, %GoogleApi.STS.V1.Model.GoogleIdentityStsV1ExchangeOauthTokenResponse{}}` on success + * `{:error, info}` on failure + """ + @spec sts_oauthtoken(Tesla.Env.client(), keyword(), keyword()) :: + {:ok, GoogleApi.STS.V1.Model.GoogleIdentityStsV1ExchangeOauthTokenResponse.t()} + | {:ok, Tesla.Env.t()} + | {:ok, list()} + | {:error, any()} + def sts_oauthtoken(connection, optional_params \\ [], opts \\ []) do + optional_params_config = %{ + :"$.xgafv" => :query, + :access_token => :query, + :alt => :query, + :callback => :query, + :fields => :query, + :key => :query, + :oauth_token => :query, + :prettyPrint => :query, + :quotaUser => :query, + :uploadType => :query, + :upload_protocol => :query, + :body => :body + } + + request = + Request.new() + |> Request.method(:post) + |> Request.url("/v1/oauthtoken", %{}) + |> Request.add_optional_params(optional_params_config, optional_params) + |> Request.library_version(@library_version) + + connection + |> Connection.execute(request) + |> Response.decode( + opts ++ [struct: %GoogleApi.STS.V1.Model.GoogleIdentityStsV1ExchangeOauthTokenResponse{}] + ) + end + + @doc """ + Exchanges a credential for a Google OAuth 2.0 access token. The token asserts an external identity within an identity pool, or it applies a Credential Access Boundary to a Google access token. Note that workforce pools do not support Credential Access Boundaries. When you call this method, do not send the `Authorization` HTTP header in the request. This method does not require the `Authorization` header, and using the header can cause the request to fail. ## Parameters diff --git a/clients/sts/lib/google_api/sts/v1/metadata.ex b/clients/sts/lib/google_api/sts/v1/metadata.ex index 33cf8521f1..8eec5faba5 100644 --- a/clients/sts/lib/google_api/sts/v1/metadata.ex +++ b/clients/sts/lib/google_api/sts/v1/metadata.ex @@ -20,7 +20,7 @@ defmodule GoogleApi.STS.V1 do API client metadata for GoogleApi.STS.V1. """ - @discovery_revision "20220916" + @discovery_revision "20240228" def discovery_revision(), do: @discovery_revision end diff --git a/clients/sts/lib/google_api/sts/v1/model/google_iam_v1_binding.ex b/clients/sts/lib/google_api/sts/v1/model/google_iam_v1_binding.ex index 626504257f..97251cb06e 100644 --- a/clients/sts/lib/google_api/sts/v1/model/google_iam_v1_binding.ex +++ b/clients/sts/lib/google_api/sts/v1/model/google_iam_v1_binding.ex @@ -22,8 +22,8 @@ defmodule GoogleApi.STS.V1.Model.GoogleIamV1Binding do ## Attributes * `condition` (*type:* `GoogleApi.STS.V1.Model.GoogleTypeExpr.t`, *default:* `nil`) - The condition that is associated with this binding. If the condition evaluates to `true`, then this binding applies to the current request. If the condition evaluates to `false`, then this binding does not apply to the current request. However, a different role binding might grant the same role to one or more of the principals in this binding. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies). - * `members` (*type:* `list(String.t)`, *default:* `nil`) - Specifies the principals requesting access for a Google Cloud resource. `members` can have the following values: * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account. * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google account or a service account. Does not include identities that come from external identity providers (IdPs) through identity federation. * `user:{emailid}`: An email address that represents a specific Google account. For example, `alice@example.com` . * `serviceAccount:{emailid}`: An email address that represents a Google service account. For example, `my-other-app@appspot.gserviceaccount.com`. * `serviceAccount:{projectid}.svc.id.goog[{namespace}/{kubernetes-sa}]`: An identifier for a [Kubernetes service account](https://cloud.google.com/kubernetes-engine/docs/how-to/kubernetes-service-accounts). For example, `my-project.svc.id.goog[my-namespace/my-kubernetes-sa]`. * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`. * `deleted:user:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a user that has been recently deleted. For example, `alice@example.com?uid=123456789012345678901`. If the user is recovered, this value reverts to `user:{emailid}` and the recovered user retains the role in the binding. * `deleted:serviceAccount:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a service account that has been recently deleted. For example, `my-other-app@appspot.gserviceaccount.com?uid=123456789012345678901`. If the service account is undeleted, this value reverts to `serviceAccount:{emailid}` and the undeleted service account retains the role in the binding. * `deleted:group:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a Google group that has been recently deleted. For example, `admins@example.com?uid=123456789012345678901`. If the group is recovered, this value reverts to `group:{emailid}` and the recovered group retains the role in the binding. * `domain:{domain}`: The G Suite domain (primary) that represents all the users of that domain. For example, `google.com` or `example.com`. - * `role` (*type:* `String.t`, *default:* `nil`) - Role that is assigned to the list of `members`, or principals. For example, `roles/viewer`, `roles/editor`, or `roles/owner`. + * `members` (*type:* `list(String.t)`, *default:* `nil`) - Specifies the principals requesting access for a Google Cloud resource. `members` can have the following values: * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account. * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google account or a service account. Does not include identities that come from external identity providers (IdPs) through identity federation. * `user:{emailid}`: An email address that represents a specific Google account. For example, `alice@example.com` . * `serviceAccount:{emailid}`: An email address that represents a Google service account. For example, `my-other-app@appspot.gserviceaccount.com`. * `serviceAccount:{projectid}.svc.id.goog[{namespace}/{kubernetes-sa}]`: An identifier for a [Kubernetes service account](https://cloud.google.com/kubernetes-engine/docs/how-to/kubernetes-service-accounts). For example, `my-project.svc.id.goog[my-namespace/my-kubernetes-sa]`. * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`. * `domain:{domain}`: The G Suite domain (primary) that represents all the users of that domain. For example, `google.com` or `example.com`. * `principal://iam.googleapis.com/locations/global/workforcePools/{pool_id}/subject/{subject_attribute_value}`: A single identity in a workforce identity pool. * `principalSet://iam.googleapis.com/locations/global/workforcePools/{pool_id}/group/{group_id}`: All workforce identities in a group. * `principalSet://iam.googleapis.com/locations/global/workforcePools/{pool_id}/attribute.{attribute_name}/{attribute_value}`: All workforce identities with a specific attribute value. * `principalSet://iam.googleapis.com/locations/global/workforcePools/{pool_id}/*`: All identities in a workforce identity pool. * `principal://iam.googleapis.com/projects/{project_number}/locations/global/workloadIdentityPools/{pool_id}/subject/{subject_attribute_value}`: A single identity in a workload identity pool. * `principalSet://iam.googleapis.com/projects/{project_number}/locations/global/workloadIdentityPools/{pool_id}/group/{group_id}`: A workload identity pool group. * `principalSet://iam.googleapis.com/projects/{project_number}/locations/global/workloadIdentityPools/{pool_id}/attribute.{attribute_name}/{attribute_value}`: All identities in a workload identity pool with a certain attribute. * `principalSet://iam.googleapis.com/projects/{project_number}/locations/global/workloadIdentityPools/{pool_id}/*`: All identities in a workload identity pool. * `deleted:user:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a user that has been recently deleted. For example, `alice@example.com?uid=123456789012345678901`. If the user is recovered, this value reverts to `user:{emailid}` and the recovered user retains the role in the binding. * `deleted:serviceAccount:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a service account that has been recently deleted. For example, `my-other-app@appspot.gserviceaccount.com?uid=123456789012345678901`. If the service account is undeleted, this value reverts to `serviceAccount:{emailid}` and the undeleted service account retains the role in the binding. * `deleted:group:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a Google group that has been recently deleted. For example, `admins@example.com?uid=123456789012345678901`. If the group is recovered, this value reverts to `group:{emailid}` and the recovered group retains the role in the binding. * `deleted:principal://iam.googleapis.com/locations/global/workforcePools/{pool_id}/subject/{subject_attribute_value}`: Deleted single identity in a workforce identity pool. For example, `deleted:principal://iam.googleapis.com/locations/global/workforcePools/my-pool-id/subject/my-subject-attribute-value`. + * `role` (*type:* `String.t`, *default:* `nil`) - Role that is assigned to the list of `members`, or principals. For example, `roles/viewer`, `roles/editor`, or `roles/owner`. For an overview of the IAM roles and permissions, see the [IAM documentation](https://cloud.google.com/iam/docs/roles-overview). For a list of the available pre-defined roles, see [here](https://cloud.google.com/iam/docs/understanding-roles). """ use GoogleApi.Gax.ModelBase diff --git a/clients/sts/lib/google_api/sts/v1/model/google_identity_sts_v1_exchange_oauth_token_request.ex b/clients/sts/lib/google_api/sts/v1/model/google_identity_sts_v1_exchange_oauth_token_request.ex new file mode 100644 index 0000000000..d48ba5779b --- /dev/null +++ b/clients/sts/lib/google_api/sts/v1/model/google_identity_sts_v1_exchange_oauth_token_request.ex @@ -0,0 +1,64 @@ +# Copyright 2019 Google LLC +# +# 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. + +# NOTE: This file is auto generated by the elixir code generator program. +# Do not edit this file manually. + +defmodule GoogleApi.STS.V1.Model.GoogleIdentityStsV1ExchangeOauthTokenRequest do + @moduledoc """ + Request message for ExchangeOauthToken + + ## Attributes + + * `clientId` (*type:* `String.t`, *default:* `nil`) - Optional. The client identifier for the OAuth 2.0 client that requested the provided token. It is REQUIRED when the [client] (https://www.rfc-editor.org/rfc/rfc6749#section-1.1) is not authenticating with the authorization server, i.e. when authentication method is [client authentication] (https://www.rfc-editor.org/rfc/rfc6749#section-3.2.1). + * `code` (*type:* `String.t`, *default:* `nil`) - Optional. The authorization code that was previously from workforce identity federation's `authorize` endpoint. Required if the flow is authorization code flow, i.e. if grant_type is 'authorization_code' + * `codeVerifier` (*type:* `String.t`, *default:* `nil`) - Optional. The code verifier for the PKCE request, Google Cloud CLI originally generates it before the authorization request. PKCE is used to protect authorization code from interception attacks. See https://www.rfc-editor.org/rfc/rfc7636#section-1.1 and https://www.rfc-editor.org/rfc/rfc7636#section-3. It is required when the flow is authorization code flow, i.e. if grant_type is 'authorization_code' + * `grantType` (*type:* `String.t`, *default:* `nil`) - Required. The grant types are as follows: - 'authorization_code' : an authorization code flow, i.e. exchange of authorization code for the Oauth access token - 'refresh_token' : a refresh token flow, i.e. obtain a new access token by providing the refresh token. See https://www.rfc-editor.org/rfc/rfc6749#section-6 + * `redirectUri` (*type:* `String.t`, *default:* `nil`) - Optional. redirect_url is required when the flow is authorization code flow i.e. if grant_type is `authorization_code` See https://www.rfc-editor.org/rfc/rfc6749#section-4.1.3 + * `refreshToken` (*type:* `String.t`, *default:* `nil`) - Optional. The Refresh token is the credential that is used to obtain a new access token when the current access token becomes invalid or expires. Required when using refresh token flow, i.e. if `grant_type` is 'refresh_token' See https://www.rfc-editor.org/rfc/rfc6749#section-1.5 and https://www.rfc-editor.org/rfc/rfc6749#section-6 + * `scope` (*type:* `String.t`, *default:* `nil`) - Optional. An optional list of scopes that are requested for the token to be returned. See https://www.rfc-editor.org/rfc/rfc6749#section-3.3 Must be a list of space-delimited, case-sensitive strings. Note: Currently, the scopes in the request are not supported + """ + + use GoogleApi.Gax.ModelBase + + @type t :: %__MODULE__{ + :clientId => String.t() | nil, + :code => String.t() | nil, + :codeVerifier => String.t() | nil, + :grantType => String.t() | nil, + :redirectUri => String.t() | nil, + :refreshToken => String.t() | nil, + :scope => String.t() | nil + } + + field(:clientId) + field(:code) + field(:codeVerifier) + field(:grantType) + field(:redirectUri) + field(:refreshToken) + field(:scope) +end + +defimpl Poison.Decoder, for: GoogleApi.STS.V1.Model.GoogleIdentityStsV1ExchangeOauthTokenRequest do + def decode(value, options) do + GoogleApi.STS.V1.Model.GoogleIdentityStsV1ExchangeOauthTokenRequest.decode(value, options) + end +end + +defimpl Poison.Encoder, for: GoogleApi.STS.V1.Model.GoogleIdentityStsV1ExchangeOauthTokenRequest do + def encode(value, options) do + GoogleApi.Gax.ModelBase.encode(value, options) + end +end diff --git a/clients/sts/lib/google_api/sts/v1/model/google_identity_sts_v1_exchange_oauth_token_response.ex b/clients/sts/lib/google_api/sts/v1/model/google_identity_sts_v1_exchange_oauth_token_response.ex new file mode 100644 index 0000000000..abc9111b46 --- /dev/null +++ b/clients/sts/lib/google_api/sts/v1/model/google_identity_sts_v1_exchange_oauth_token_response.ex @@ -0,0 +1,61 @@ +# Copyright 2019 Google LLC +# +# 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. + +# NOTE: This file is auto generated by the elixir code generator program. +# Do not edit this file manually. + +defmodule GoogleApi.STS.V1.Model.GoogleIdentityStsV1ExchangeOauthTokenResponse do + @moduledoc """ + Response message for ExchangeOauthToken. see https://www.rfc-editor.org/rfc/rfc6749#section-5.1 + + ## Attributes + + * `access_token` (*type:* `String.t`, *default:* `nil`) - An OAuth 2.0 security token, issued by Google, in response to the Oauth token exchange request for the authorization code and refresh token flows. The returned [access token](https://www.rfc-editor.org/rfc/rfc6749#section-4.1.4). Tokens can vary in size, depending, in part, on the size of mapped claims, up to a maximum of 12288 bytes (12 KB). Google reserves the right to change the token size and the maximum length at any time. + * `expires_in` (*type:* `integer()`, *default:* `nil`) - The amount of time, in seconds, between the time when the access token was issued and the time when the access token will expires. + * `id_token` (*type:* `String.t`, *default:* `nil`) - Google issued ID token in response to the OAuth token exchange request for ID token flow. + * `refresh_token` (*type:* `String.t`, *default:* `nil`) - A refresh token, issued by Google, in response to the OAuth token exchange request for refresh token flow + * `scope` (*type:* `String.t`, *default:* `nil`) - A list of scopes associated with the returned token. + * `token_type` (*type:* `String.t`, *default:* `nil`) - The type of token. Field reserved for RFC compliance. See https://www.rfc-editor.org/rfc/rfc6749#section-5.1 + """ + + use GoogleApi.Gax.ModelBase + + @type t :: %__MODULE__{ + :access_token => String.t() | nil, + :expires_in => integer() | nil, + :id_token => String.t() | nil, + :refresh_token => String.t() | nil, + :scope => String.t() | nil, + :token_type => String.t() | nil + } + + field(:access_token) + field(:expires_in) + field(:id_token) + field(:refresh_token) + field(:scope) + field(:token_type) +end + +defimpl Poison.Decoder, for: GoogleApi.STS.V1.Model.GoogleIdentityStsV1ExchangeOauthTokenResponse do + def decode(value, options) do + GoogleApi.STS.V1.Model.GoogleIdentityStsV1ExchangeOauthTokenResponse.decode(value, options) + end +end + +defimpl Poison.Encoder, for: GoogleApi.STS.V1.Model.GoogleIdentityStsV1ExchangeOauthTokenResponse do + def encode(value, options) do + GoogleApi.Gax.ModelBase.encode(value, options) + end +end diff --git a/clients/sts/mix.exs b/clients/sts/mix.exs index e35bbc37a7..07a5034c0c 100644 --- a/clients/sts/mix.exs +++ b/clients/sts/mix.exs @@ -18,7 +18,7 @@ defmodule GoogleApi.STS.Mixfile do use Mix.Project - @version "0.5.2" + @version "0.6.0" def project() do [