forked from scoursen/django-apikey
-
Notifications
You must be signed in to change notification settings - Fork 0
/
views.py
71 lines (59 loc) · 2.4 KB
/
views.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
from django.http import HttpResponse, Http404, HttpResponseRedirect
from django.template import RequestContext
from django.shortcuts import render_to_response, get_object_or_404, redirect
from django.contrib.auth.decorators import login_required
from django.views.decorators.http import condition, last_modified
from django.views.decorators.cache import cache_control, cache_page
from django.core.cache import cache
from key.models import ApiKey, generate_unique_api_key
from django.contrib.auth.models import User
import datetime
def get_etag_key( request ):
try:
lm = request.user.get_profile( ).last_accessed
except:
try:
lm = request.get_profile( ).last_accessed
except:
lm = datetime.datetime.utcnow( )
return 'etag.%s' % ( lm )
def etag_func( request, *args, **kwargs ):
etag_key = get_etag_key( request )
etag = cache.get( etag_key, None )
return etag
def latest_access( request, *args, **kwargs ):
try:
return request.user.get_profile( ).last_accessed
except:
return datetime.datetime.utcnow( )
@login_required
@condition( etag_func=etag_func, last_modified_func=latest_access )
@cache_page( 1 )
def generate_key( request ):
if request.method == 'POST':
key = generate_unique_api_key( request.user )
return do_generate_key_list( request )
@login_required
@condition( etag_func=etag_func, last_modified_func=latest_access )
@cache_page( 1 )
def list_keys( request ):
return do_generate_key_list( request )
def do_generate_key_list( request ):
keys = ApiKey.objects.filter( user=request.user )
user = request.user
cmak = user.get_profile( ).can_make_api_key( )
ak = user.get_profile( ).available_keys( )
return render_to_response( 'key/key.html',
{ 'keys': keys, 'user': user,
'can_make_api_key': cmak,
'available_keys': ak },
context_instance=RequestContext(request) )
@login_required
@condition( etag_func=etag_func, last_modified_func=latest_access )
@cache_page( 1 )
def delete_key( request ):
keys = ApiKey.objects.filter( user=request.user )
return render_to_response( 'key/key.html',
{ 'keys': keys,
'user': request.user },
context_instance=RequestContext(request) )