53 lines
No EOL
1.8 KiB
Python
53 lines
No EOL
1.8 KiB
Python
# Create your views here.
|
|
from models import Credential
|
|
from django.http import HttpResponse, HttpResponseRedirect
|
|
import datetime
|
|
import uuid
|
|
from django.contrib.auth.decorators import login_required
|
|
from django.shortcuts import render_to_response
|
|
from django.template import RequestContext
|
|
|
|
def index( request ):
|
|
return render_to_response('account_index.html', context_instance=RequestContext(request) )
|
|
index = login_required(index)
|
|
|
|
def auth( request ):
|
|
service = request.GET['service']
|
|
# create credential
|
|
## generat token
|
|
token = str( uuid.uuid4() )
|
|
## save in db
|
|
cred = Credential( service=service, token=token, user=request.user )
|
|
cred.save()
|
|
# redirect
|
|
## by service...
|
|
if service == "blogs":
|
|
return callbacks.blogs_callback( cred )
|
|
return HttpResponse("cred=%s" % cred.token)
|
|
auth = login_required(auth)
|
|
|
|
|
|
def check_credential( request ):
|
|
cred = request.GET['cred']
|
|
service = request.GET['service']
|
|
# retreive credential in db
|
|
try:
|
|
cred = Credential.objects.get(token=cred, service=service)
|
|
## if not to old, accept
|
|
if cred.date.today() - cred.date < datetime.timedelta( minutes=10 ):
|
|
response = HttpResponse("VALID")
|
|
response['username'] = cred.user.username
|
|
response['fullname'] = cred.user.get_full_name()
|
|
response['email'] = cred.user.email
|
|
return response
|
|
return HttpResponse("INVALID")
|
|
except Credential.DoesNotExist:
|
|
return HttpResponse("INVALID")
|
|
## else, or if not exist reject
|
|
|
|
|
|
class callbacks:
|
|
def blogs_callback( cred ):
|
|
url="http://blogtest.crans.org/actions/auth/return?cred=" + cred.token
|
|
return HttpResponseRedirect(url)
|
|
blogs_callback = staticmethod(blogs_callback) |