| # Copyright 2022 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. |
| |
| """Google API key support. |
| This module provides authentication using the `API key`_. |
| .. _API key: |
| https://cloud.google.com/docs/authentication/api-keys/ |
| """ |
| |
| from google.auth import _helpers |
| from google.auth import credentials |
| from google.auth import exceptions |
| |
| |
| class Credentials(credentials.Credentials): |
| """API key credentials. |
| These credentials use API key to provide authorization to applications. |
| """ |
| |
| def __init__(self, token): |
| """ |
| Args: |
| token (str): API key string |
| Raises: |
| ValueError: If the provided API key is not a non-empty string. |
| """ |
| super(Credentials, self).__init__() |
| if not token: |
| raise exceptions.InvalidValue("Token must be a non-empty API key string") |
| self.token = token |
| |
| @property |
| def expired(self): |
| return False |
| |
| @property |
| def valid(self): |
| return True |
| |
| @_helpers.copy_docstring(credentials.Credentials) |
| def refresh(self, request): |
| return |
| |
| def apply(self, headers, token=None): |
| """Apply the API key token to the x-goog-api-key header. |
| Args: |
| headers (Mapping): The HTTP request headers. |
| token (Optional[str]): If specified, overrides the current access |
| token. |
| """ |
| headers["x-goog-api-key"] = token or self.token |
| |
| def before_request(self, request, method, url, headers): |
| """Performs credential-specific before request logic. |
| Refreshes the credentials if necessary, then calls :meth:`apply` to |
| apply the token to the x-goog-api-key header. |
| Args: |
| request (google.auth.transport.Request): The object used to make |
| HTTP requests. |
| method (str): The request's HTTP method or the RPC method being |
| invoked. |
| url (str): The request's URI or the RPC service's URI. |
| headers (Mapping): The request's headers. |
| """ |
| self.apply(headers) |