diff options
Diffstat (limited to '.venv/lib/python3.12/site-packages/google_auth_oauthlib/tool')
-rw-r--r-- | .venv/lib/python3.12/site-packages/google_auth_oauthlib/tool/__init__.py | 0 | ||||
-rw-r--r-- | .venv/lib/python3.12/site-packages/google_auth_oauthlib/tool/__main__.py | 124 |
2 files changed, 124 insertions, 0 deletions
diff --git a/.venv/lib/python3.12/site-packages/google_auth_oauthlib/tool/__init__.py b/.venv/lib/python3.12/site-packages/google_auth_oauthlib/tool/__init__.py new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/.venv/lib/python3.12/site-packages/google_auth_oauthlib/tool/__init__.py diff --git a/.venv/lib/python3.12/site-packages/google_auth_oauthlib/tool/__main__.py b/.venv/lib/python3.12/site-packages/google_auth_oauthlib/tool/__main__.py new file mode 100644 index 00000000..db679a18 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/google_auth_oauthlib/tool/__main__.py @@ -0,0 +1,124 @@ +# Copyright (C) 2017 Google Inc. +# +# 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. + +"""Command-line tool for obtaining authorization and credentials from a user. + +This tool uses the OAuth 2.0 Authorization Code grant as described in +`section 1.3.1 of RFC6749`_ and implemeted by +:class:`google_auth_oauthlib.flow.Flow`. + +This tool is intended for assist developers in obtaining credentials +for testing applications where it may not be possible or easy to run a +complete OAuth 2.0 authorization flow, especially in the case of code +samples or embedded devices without input / display capabilities. + +This is not intended for production use where a combination of +companion and on-device applications should complete the OAuth 2.0 +authorization flow to get authorization from the users. + +.. _section 1.3.1 of RFC6749: https://tools.ietf.org/html/rfc6749#section-1.3.1 +""" + +import json +import os +import os.path + +import click + +import google_auth_oauthlib.flow + + +APP_NAME = "google-oauthlib-tool" +DEFAULT_CREDENTIALS_FILENAME = "credentials.json" + + +@click.command() +@click.option( + "--client-secrets", + metavar="<client_secret_json_file>", + required=True, + help="Path to OAuth2 client secret JSON file.", +) +@click.option( + "--scope", + multiple=True, + metavar="<oauth2 scope>", + required=True, + help="API scopes to authorize access for.", +) +@click.option( + "--save", + is_flag=True, + metavar="<save_mode>", + show_default=True, + default=False, + help="Save the credentials to file.", +) +@click.option( + "--credentials", + metavar="<oauth2_credentials>", + show_default=True, + default=os.path.join(click.get_app_dir(APP_NAME), DEFAULT_CREDENTIALS_FILENAME), + help="Path to store OAuth2 credentials.", +) +def main(client_secrets, scope, save, credentials): + """Command-line tool for obtaining authorization and credentials from a user. + + This tool uses the OAuth 2.0 Authorization Code grant as described + in section 1.3.1 of RFC6749: + https://tools.ietf.org/html/rfc6749#section-1.3.1 + + This tool is intended for assist developers in obtaining credentials + for testing applications or samples. + + This is not intended for production use where a combination of + companion and on-device applications should complete the OAuth 2.0 + authorization flow to get authorization from the users. + + """ + + flow = google_auth_oauthlib.flow.InstalledAppFlow.from_client_secrets_file( + client_secrets, scopes=scope + ) + + creds = flow.run_local_server() + + creds_data = { + "token": creds.token, + "refresh_token": creds.refresh_token, + "token_uri": creds.token_uri, + "client_id": creds.client_id, + "client_secret": creds.client_secret, + "scopes": creds.scopes, + } + + if save: + del creds_data["token"] + + config_path = os.path.dirname(credentials) + if config_path and not os.path.isdir(config_path): + os.makedirs(config_path) + + with open(credentials, "w") as outfile: + json.dump(creds_data, outfile) + + click.echo("credentials saved: %s" % credentials) + + else: + click.echo(json.dumps(creds_data)) + + +if __name__ == "__main__": + # pylint doesn't realize that click has changed the function signature. + main() # pylint: disable=no-value-for-parameter |