Skip to content

Commit

Permalink
add coinbase oauth
Browse files Browse the repository at this point in the history
  • Loading branch information
FloorLamp committed Nov 23, 2013
1 parent cc6970b commit 442ca5e
Show file tree
Hide file tree
Showing 5 changed files with 79 additions and 0 deletions.
1 change: 1 addition & 0 deletions examples/django_example/example/settings.py
Expand Up @@ -127,6 +127,7 @@
'social.backends.belgiumeid.BelgiumEIDOpenId',
'social.backends.bitbucket.BitbucketOAuth',
'social.backends.box.BoxOAuth2',
'social.backends.coinbase.CoinbaseOAuth2',
'social.backends.dailymotion.DailymotionOAuth2',
'social.backends.disqus.DisqusOAuth2',
'social.backends.douban.DoubanOAuth2',
Expand Down
1 change: 1 addition & 0 deletions examples/django_example/example/templates/home.html
Expand Up @@ -10,6 +10,7 @@
<a href="{% url 'social:begin' 'belgiumeid' %}">BelgiumEID OpenId</a> <br />
<a href="{% url 'social:begin' 'bitbucket' %}">Bitbucket OAuth1</a> <br />
<a href="{% url 'social:begin' 'box' %}">Box.net OAuth2</a> <br />
<a href="{% url 'social:begin' 'coinbase' %}">Coinbase OAuth2</a> <br />
<a href="{% url 'social:begin' 'dailymotion' %}">Dailymotion OAuth2</a> <br />
<a href="{% url 'social:begin' 'disqus' %}">Disqus OAuth2</a> <br />
<a href="{% url 'social:begin' 'douban-oauth2' %}">Douban OAuth2</a> <br />
Expand Down
1 change: 1 addition & 0 deletions social/apps/django_app/tests.py
Expand Up @@ -11,6 +11,7 @@
from social.tests.backends.test_bitbucket import *
from social.tests.backends.test_box import *
from social.tests.backends.test_broken import *
from social.tests.backends.test_coinbase import *
from social.tests.backends.test_dailymotion import *
from social.tests.backends.test_disqus import *
from social.tests.backends.test_dropbox import *
Expand Down
29 changes: 29 additions & 0 deletions social/backends/coinbase.py
@@ -0,0 +1,29 @@
from social.backends.oauth import BaseOAuth2


class CoinbaseOAuth2(BaseOAuth2):
name = 'coinbase'
SCOPE_SEPARATOR = '+'
DEFAULT_SCOPE = ['balance']
AUTHORIZATION_URL = 'https://coinbase.com/oauth/authorize'
ACCESS_TOKEN_URL = 'https://coinbase.com/oauth/token'
ACCESS_TOKEN_METHOD = 'POST'
REDIRECT_STATE = False

def get_user_details(self, response):
"""Return user details from Coinbase account"""
user_data = response['users'][0]['user']
name = user_data['name']
name_split = name.split()
first_name = name_split[0]
last_name = name_split[1]
email = user_data.get('email', '')
return {'username': name,
'first_name': first_name,
'last_name': last_name,
'email': email}

def user_data(self, access_token, *args, **kwargs):
"""Loads user data from service"""
return self.get_json('https://coinbase.com/api/v1/users',
params={'access_token': access_token})
47 changes: 47 additions & 0 deletions social/tests/backends/test_coinbase.py
@@ -0,0 +1,47 @@
import json

from social.tests.backends.oauth import OAuth2Test


class CoinbaseOAuth2Test(OAuth2Test):
backend_path = 'social.backends.coinbase.CoinbaseOAuth2'
user_data_url = 'https://coinbase.com/api/v1/users'
expected_username = 'SatoshiNakamoto'
access_token_body = json.dumps({
'access_token': 'foobar',
'token_type': 'bearer'
})
user_data_body = json.dumps({
'users': [
{
'user': {
'id': "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa",
'name': "Satoshi Nakamoto",
'email': "satoshi@nakamoto.com",
'pin': None,
'time_zone': "Eastern Time (US & Canada)",
'native_currency': "USD",
'buy_level': 2,
'sell_level': 2,
'balance': {
'amount': "1000000",
'currency': "BTC"
},
'buy_limit': {
'amount': "50.00000000",
'currency': "BTC"
},
'sell_limit': {
'amount': "50.00000000",
'currency': "BTC"
}
}
}
]
})

def test_login(self):
self.do_login()

def test_partial_pipeline(self):
self.do_partial_pipeline()

0 comments on commit 442ca5e

Please sign in to comment.