Skip to main content

Support OAuth authentication for Muffin Framework.

Project description

Muffin‑OAuth

Muffin‑OAuth adds OAuth 1 and 2 support to the Muffin_ framework, enabling both client-side and server-side authentication flows.

Tests Status PyPI Version Python Versions

Requirements

  • Python >= 3.10
  • Compatible with asyncio, Trio, and Curio

Installation

Install via pip:

pip install muffin-oauth

Usage

Here's a basic example using OAuth2:

from muffin import Application
from muffin_oauth import OAuthPlugin

app = Application("auth-example")
oauth = OAuthPlugin()
oauth.setup(app, providers={
    "github": {
        "client_id": "...",
        "client_secret": "...",
        "authorize_url": "https://github.com/login/oauth/authorize",
        "access_token_url": "https://github.com/login/oauth/access_token",
        "api_base_url": "https://api.github.com"
    }
})

@app.route("/")
async def login(request):
    return await oauth.authorize_redirect(request, "github", redirect_uri="http://localhost:8000/callback")

@app.route("/callback")
async def callback(request):
    token = await oauth.authorize_access_token(request, "github")
    request.session["token"] = token
    return "Logged in"

@app.route("/user")
async def user(request):
    client = oauth.client("github", token=request.session.get("token"))
    resp = await client.get("/user")
    return resp.json()

Run the example app:

$ make example
http://localhost:5000

Client-side usage:

client = oauth.client("github", access_token="...")
resp = await client.request("GET", "/user")
user_info = resp.json()

This supports both OAuth1 and OAuth2 flows, with automatic token handling and resource access via configured providers.

Testing & Security

  • Test coverage for major flows is provided in tests.py.
  • Minimal dependencies and async-native design.
  • Production-ready, MIT-licensed.

Bug Tracker & Contributing

Found an issue or have an idea? Report it at: https://github.com/klen/muffin-oauth/issues

Contributions welcome! Fork the repo and submit a PR.

Contributors

  • klen (Kirill Klenov)

License

Licensed under the MIT license.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

muffin_oauth-2.8.1.tar.gz (4.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

muffin_oauth-2.8.1-py3-none-any.whl (4.8 kB view details)

Uploaded Python 3

File details

Details for the file muffin_oauth-2.8.1.tar.gz.

File metadata

  • Download URL: muffin_oauth-2.8.1.tar.gz
  • Upload date:
  • Size: 4.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.3 CPython/3.12.3 Linux/6.11.0-1018-azure

File hashes

Hashes for muffin_oauth-2.8.1.tar.gz
Algorithm Hash digest
SHA256 16fb4079541b754cb3f8f89a5ddd334993a616f74af7319e8f52c6409647a845
MD5 a160e20b09a8e05a8eadd97293db7b52
BLAKE2b-256 b1f6c7bd76dba88c8f978f8cededb42d9c328f4f9dbf977767398117baa10939

See more details on using hashes here.

File details

Details for the file muffin_oauth-2.8.1-py3-none-any.whl.

File metadata

  • Download URL: muffin_oauth-2.8.1-py3-none-any.whl
  • Upload date:
  • Size: 4.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.3 CPython/3.12.3 Linux/6.11.0-1018-azure

File hashes

Hashes for muffin_oauth-2.8.1-py3-none-any.whl
Algorithm Hash digest
SHA256 da6ecc7cc08641f69e40a9168f52db50959d9688913d77971b38d1a70d5f15a2
MD5 11d1188e57bf72cb40fe735d714833bb
BLAKE2b-256 71e00d1213ca20b61a675f3dcf177ec396b1ad75a961a5f9862fb5065e8f8903

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page