mirror of
https://github.com/nikdoof/test-auth.git
synced 2025-12-20 05:09:27 +00:00
94 lines
3.5 KiB
Python
94 lines
3.5 KiB
Python
from django.contrib.auth.decorators import login_required
|
|
from django.shortcuts import render_to_response, redirect
|
|
from django.template import RequestContext
|
|
from django.views.generic import TemplateView
|
|
from django.http import HttpResponse
|
|
import django.utils.simplejson as json
|
|
|
|
from django.contrib import messages
|
|
from django.contrib.auth.models import User
|
|
from gargoyle.decorators import switch_is_active
|
|
|
|
from reddit.forms import RedditAccountForm
|
|
from reddit.models import RedditAccount
|
|
|
|
@login_required
|
|
@switch_is_active('reddit')
|
|
def reddit_add(request):
|
|
""" Add a Reddit account to a user's account """
|
|
|
|
if request.method == 'POST':
|
|
form = RedditAccountForm(request.POST)
|
|
if form.is_valid():
|
|
acc = RedditAccount()
|
|
acc.user = request.user
|
|
acc.username = form.cleaned_data['username']
|
|
try:
|
|
acc.api_update()
|
|
except RedditAccount.DoesNotExist:
|
|
messages.add_message(request, messages.ERROR, "Error, user %s does not exist on Reddit" % acc.username )
|
|
return render_to_response('reddit/add_reddit_account.html', locals(), context_instance=RequestContext(request))
|
|
acc.save()
|
|
|
|
messages.add_message(request, messages.INFO, "Reddit account %s successfully added." % acc.username)
|
|
return redirect('sso.views.profile') # Redirect after POST
|
|
else:
|
|
defaults = { 'username': request.user.username, }
|
|
form = RedditAccountForm(defaults) # An unbound form
|
|
|
|
return render_to_response('reddit/add_reddit_account.html', locals(), context_instance=RequestContext(request))
|
|
|
|
@login_required
|
|
@switch_is_active('reddit')
|
|
def reddit_del(request, redditid=0):
|
|
""" Delete a Reddit account from a user's account """
|
|
|
|
if redditid > 0 :
|
|
try:
|
|
acc = RedditAccount.objects.get(id=redditid)
|
|
except RedditAccount.DoesNotExist:
|
|
return redirect('sso.views.profile')
|
|
|
|
if acc.user == request.user:
|
|
acc.delete()
|
|
messages.add_message(request, messages.INFO, "Reddit account successfully deleted.")
|
|
|
|
return redirect('sso.views.profile')
|
|
|
|
|
|
class JSONResponseMixin(object):
|
|
def render_to_response(self, context):
|
|
"Returns a JSON response containing 'context' as payload"
|
|
return self.get_json_response(self.convert_context_to_json(context))
|
|
|
|
def get_json_response(self, content, **httpresponse_kwargs):
|
|
"Construct an `HttpResponse` object."
|
|
return HttpResponse(content,
|
|
content_type='application/json',
|
|
**httpresponse_kwargs)
|
|
|
|
def convert_context_to_json(self, context):
|
|
"Convert the context dictionary into a JSON object"
|
|
# Note: This is *EXTREMELY* naive; in reality, you'll need
|
|
# to do much more complex handling to ensure that arbitrary
|
|
# objects -- such as Django model instances or querysets
|
|
# -- can be serialized as JSON.
|
|
return json.dumps(context)
|
|
|
|
|
|
class RedditCommentsJSON(JSONResponseMixin, TemplateView):
|
|
|
|
def dispatch(self, request, *args, **kwargs):
|
|
self.user = User.objects.get(id=request.GET.get('userid'))
|
|
return super(RedditCommentsJSON, self).dispatch(request, *args, **kwargs)
|
|
|
|
def get_context_data(self, **kwargs):
|
|
posts = []
|
|
for account in self.user.redditaccount_set.all():
|
|
try:
|
|
accposts = account.recent_posts()
|
|
except:
|
|
accposts = []
|
|
posts.extend(accposts)
|
|
return {'posts': posts}
|