Zverik / cli-oauth2

Helper library for OAuth2 in command-line tools
https://pypi.org/project/cli-oauth2/
Apache License 2.0
11 stars 2 forks source link

CLI OAuth2

This Python library help command-line tool authors to use OAuth2 services. Built using requests-oauthlib with parts of google_auth_oauthlib.

Installation

pip install cli-oauth2

Usage

Before using OAuth2, you must obtain a Client ID and Client Secret by registering an application with the provider. For example, for OpenStreetMapAuth, register an application here. Important: set the redirect URI of the application to http://127.0.0.1:8080/.

Then do something like this:

from oauthcli import OpenStreetMapAuth

auth = OpenStreetMapAuth(
    client_id, client_secret, ['read_prefs']
).auth_server(token_test=lambda r: r.get('user/details'))

data = auth.get('user/details.json')
if data.status_code != 200:
    print(f'Error {data.status_code}: {data.text})')
else:
    print(f'Hello, {data.json()["user"]["display_name"]}')

Tokens are saved to disk, so subsequent runs won't require authorization.

Auth objects have these methods and properties:

There are some predefined providers:

Note that only OSM and GitHub providers were tested. I welcome pull requests with fixes.

If you need to use another provider, just subclass AuthFlow and pass it provider_id (the key for the stored token map), OAuth2Session(client_id, scope=scopes), auth_url, token_url, and client_secret.

Cleanup

The tool stores tokens in a json in the configuration directory. To clean some or all tokens, use the oauthclean command-line tool.

Author and License

Written by Ilya Zverev, published under Apache License 2.0.

Contains portions of google_auth_oauthlib as of commit 1a9dca889357b93bdad17d75a28ac81e3ba6067f, published under Apache License 2.0.