This is a pre-production deployment of Warehouse. Changes made here affect the production instance of PyPI (pypi.python.org).
Help us improve Python packaging - Donate today!

Minimalist and framework independent OAuth(1 & 2) consumers

Project Description

Note

For the latest source, discussions, etc., please visit the GitHub repository

UniAuth

Minimalist and framework independent package that provides common OAuth (1 & 2) consumers (or the ability to easily add more).

  • Unifies OAuth1 and OAuth2 flows into one easy and clear dance
  • Normalises providers’ profiles data
  • Normalises OAuth1 & 2 tokens for storage/restoration
  • Based on oauthlib and requests

Installation

pip install uniauth

Usage

Retrieve a token:

from uniauth import Bitbucket, GitHub

# Use an OAuth2 client
client = GitHub(client_id="****************", client_secret="****************", scope=None)

# Or an OAuth1 client
client = Bitbucket(client_id="****************", client_secret="****************")

# Provides a unified flow for both OAuth1 & OAuth2
oauth_dance = client.dance(stash, "http://example.org/oauth/callback")

# 'stash' allows to complete the oauth dance over multiple requests (by maintaining OAuth1's request token or OAuth2's state)
# It can be anything as long as it implements __setattr__(key, value) and pop(key, default)
# e.g.:
#     stash = request.session
# Or
#     stash = {}

# Redirect your user to:
oauth_dance.get_authorization_url()

# Get the access token using the absolute url the povider redirected your user to:
normalised_token = oauth_dance.get_access_token(callback_url)
# {"token": "**********", "extra": "**********", "expires_at": None, "scope": None}

# The token is also stored in the client state
client.get_profile()

Restore a token:

# OAuth2 client
client = GitHub(client_id="****************", client_secret="****************", scope=None, token=normalised_token)

# or OAuth1 client
client = Bitbucket(client_id="****************", client_secret="****************", token=normalised_token)

client.get_profile()

Request any resource:

# client.request has a similar signature to requests.request but with an optional method (it uses "GET" by default)
response = client.request(url_to_resource)

# response is an instance of requests.Response
response.raise_for_status()

data = response.json()

That’s it.

Available Consumers

Bitbucket

Use uniauth.Bitbucket

Facebook

Use uniauth.Facebook

GitHub

Use uniauth.GitHub

Google

Use uniauth.Google

LinkedIn

Use uniauth.LinkedIn

Contribute More

It’s easy to add more consumers:

from uniauth.base import ProfileMixin
from uniauth.oauth2 import OAuth2Consumer

class MyProviderName(ProfileMixin, OAuth2Consumer):
    authorization_url = "https://example.org/oauth2/authorization"
    access_token_url = "https://example.org/oauth2/access_token"
    profile_url = "https://example.org/user/"

    def normalize_profile_data(self, data):
        # transform provider's format into normalised format
        return {"uid": data.get("id"),
                "email": data.get("email_address"),
                "username": data.get("login"),
                "first_name": data.get("given_name"),
                "last_name": data.get("family_name"),
                "gender": data.get("sex"),
                "birthdate": data.get("dob"),
                "avatar_url": data.get("picture"),
                "is_verified": data.get("verified")}

Running Tests

Get a copy of the repository:

git clone git@github.com:OohlaLabs/uniauth.git .

Install tox:

pip install tox

Run the tests:

tox

Contributions

All contributions and comments are welcome.

Change Log

v0.0.2

  • Cast default provider name to unicode
  • Fix resource request extra params not used

v0.0.1

  • Initial
Release History

Release History

This version
History Node

0.0.2

History Node

0.0.1

Download Files

Download Files

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

File Name & Checksum SHA256 Checksum Help Version File Type Upload Date
uniauth-0.0.2-py2.py3-none-any.whl (11.8 kB) Copy SHA256 Checksum SHA256 py2.py3 Wheel Jun 22, 2015
uniauth-0.0.2.tar.gz (10.1 kB) Copy SHA256 Checksum SHA256 Source Jun 22, 2015

Supported By

WebFaction WebFaction Technical Writing Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Heroku Heroku PaaS Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Rackspace Rackspace Cloud Servers DreamHost DreamHost Log Hosting