Ooops...forgot other files I had actually changed.

pull/1/head
Raymond Yee 2011-10-24 18:29:01 -07:00
parent 299d3d1be3
commit 809517e99a
5 changed files with 95 additions and 2 deletions

View File

@ -190,5 +190,11 @@ class UserProfile(models.Model):
user = models.OneToOneField(User, related_name='profile')
tagline = models.CharField(max_length=140, blank=True)
#class GoodreadsProfile(models.Model):
# user_id = models.CharField(max_length=32)
# username = models.CharField(max_length=200, blank=True)
# auth_token = models.TextField(null=True, blank=True)
# auth_secret = models.TextField(null=True, blank=True)
from regluit.core import signals
from regluit.payment.manager import PaymentManager

View File

@ -4,7 +4,7 @@ from django.views.generic.base import TemplateView
from django.views.generic import ListView, DetailView
from regluit.core.models import Campaign
from regluit.frontend.views import CampaignFormView
from regluit.frontend.views import CampaignFormView, GoodreadsDisplayView
urlpatterns = patterns(
"regluit.frontend.views",
@ -19,5 +19,8 @@ urlpatterns = patterns(
url(r"^wishlist/$", "wishlist", name="wishlist"),
url(r"^campaigns/$", ListView.as_view(
model=Campaign,template_name="campaign_list.html", context_object_name="campaign_list")),
url(r"^campaigns/(?P<pk>\d+)/$",CampaignFormView.as_view(), name="campaign_by_id")
url(r"^campaigns/(?P<pk>\d+)/$",CampaignFormView.as_view(), name="campaign_by_id"),
url(r"^goodreads/$", GoodreadsDisplayView.as_view(), name="goodreads_display"),
url(r"^goodreads/auth_cb/$", "goodreads_cb", name="goodreads_cb"),
url(r"^goodreads/flush/$","goodreads_flush_session", name="goodreads_flush_session")
)

View File

@ -10,17 +10,23 @@ from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.http import require_POST
from django.views.generic.edit import FormView
from django.views.generic.base import TemplateView
from django.contrib.auth.decorators import login_required
from django.shortcuts import render, render_to_response, get_object_or_404
import oauth2 as oauth
from regluit.core import tasks
from regluit.core import models, bookloader
from regluit.core.search import gluejar_search
from regluit.core.goodreads import GoodreadsClient
from regluit.frontend.forms import UserData, ProfileForm
from regluit.frontend.forms import CampaignPledgeForm
from regluit.payment.manager import PaymentManager
from regluit.payment.parameters import TARGET_TYPE_CAMPAIGN
from regluit.core import goodreads
logger = logging.getLogger(__name__)
from regluit.payment.models import Transaction
@ -213,3 +219,76 @@ class CampaignFormView(FormView):
response = t.reference
logger.info("CampaignFormView paypal: Error " + str(t.reference))
return HttpResponse(response)
class GoodreadsDisplayView(TemplateView):
template_name = "goodreads_display.html"
def get_context_data(self, **kwargs):
context = super(GoodreadsDisplayView, self).get_context_data(**kwargs)
goodreads_attribs = ["goodreads_userid", "goodreads_username", "goodreads_isauthorized", "goodreads_userlink"]
# for this round, I will use the Session to hold the Goodreads profile info
session = self.request.session
# load up context with this info even though the template can directly access the session.
# down the road, we won't store the goodreads user info in the session.
for attrib in goodreads_attribs:
context[attrib] = session.get(attrib, None)
# a Goodreads user shouldn't have to authorize us to get certain functionality
# if we don't know the Goodreads identity of user, offer to authenticate user to Goodreads and grab identity
gr_client = GoodreadsClient(key=settings.GOODREADS_API_KEY, secret=settings.GOODREADS_API_SECRET)
if session.get("goodreads_isauthorized") is None:
# calculate the Goodreads authorization URL
(context["goodreads_auth_url"], request_token) = gr_client.begin_authorization(self.request.build_absolute_uri(reverse('goodreads_cb')))
# store request token in session so that we can redeem it for auth_token if authorization works
session['goodreads_request_token'] = request_token['oauth_token']
session['goodreads_request_secret'] = request_token['oauth_token_secret']
# if we have a userid, grab info about the book shelves
if session.get("goodreads_userid") is not None:
context["shelves_info"] = gr_client.shelves_list(user_id=session["goodreads_userid"])
return context
def goodreads_cb(request):
# handle callback from Goodreads
# how to check that Goodreads is saying it's a go?
session = request.session
authorized_flag = request.GET['authorize'] # is it '1'?
request_oauth_token = request.GET['oauth_token']
# compare what Goodreads sends back in terms of a request_token vs what is stored in session
if authorized_flag == '1':
request_token = {'oauth_token': session.get('goodreads_request_token'),
'oauth_token_secret': session.get('goodreads_request_secret')}
gr_client = GoodreadsClient(key=settings.GOODREADS_API_KEY, secret=settings.GOODREADS_API_SECRET)
access_token = gr_client.complete_authorization(request_token)
# store the access token in the session
session["goodreads_access_token"] = access_token["oauth_token"]
session["goodreads_access_secret"] = access_token["oauth_token_secret"]
session["goodreads_isauthorized"] = True
# delete old request tokens in the session
del session['goodreads_request_token']
del session['goodreads_request_secret']
# let's get the userid, username
user = gr_client.auth_user()
session["goodreads_userid"] = user["userid"]
session["goodreads_username"] = user["name"]
session["goodreads_userlink"] = user["link"]
# redirect to the Goodreads display page -- should observe some next later
return HttpResponseRedirect(reverse('goodreads_display'))
def goodreads_flush_session(request):
request.session.flush()
return HttpResponse("Your session has been flushed. Go back to <a href='%s'>goodreads display</a>"
% (reverse('goodreads_display')))

View File

@ -12,3 +12,4 @@ django-profiles
django-kombu
django-celery
redis
oauth2

View File

@ -83,3 +83,7 @@ BASE_URL = 'http://0.0.0.0/'
# use database as queuing service in development
BROKER_TRANSPORT = "djkombu.transport.DatabaseTransport"
INSTALLED_APPS += ("djkombu",)
# Goodreads API
GOODREADS_API_KEY = ''
GOODREADS_API_SECRET = ''