Helper library for OAuth2 in command-line tools
APACHE-2.0 License
This Python library help command-line tool authors to use OAuth2 services. Built using requests-oauthlib with parts of google_auth_oauthlib.
pip install cli-oauth2
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:
auth_server()
opens a web browser and catches the response byauth_code()
opens a web browser and expected a user to copy the codeurn:ietf:wg:oauth:2.0:oob
redirect uri.authorized
returns whether there is an active access token.get
, post
etc call the relevant requests
methods, but often shadowsession
is the underlying OAuth2Session object.There are some predefined providers:
OpenStreetMapAuth
OpenStreetMapDevAuth
GoogleAuth
GitHubAuth
MastodonAuth
(requires a server
parameter)RedditAuth
FacebookAuth
LinkedInAuth
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
.
The tool stores tokens in a json in the configuration directory.
To clean some or all tokens, use the oauthclean
command-line tool.
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.