From d34ca5bfa5428ef02ff4be324ef823348a23a974 Mon Sep 17 00:00:00 2001
From: Andrew Williams
Date: Thu, 13 Jan 2011 12:58:41 +0000
Subject: [PATCH] Finish moving the eve_api functions out to the eve_api app
---
eve_api/forms.py | 33 +++++++
eve_api/urls.py | 11 +++
eve_api/views.py | 92 +++++++++++++++++++
sso/urls.py | 5 -
sso/views.py | 83 +----------------
.../{sso/eveapi.html => eve_api/add.html} | 5 +-
.../{sso/eveapi_log.html => eve_api/log.html} | 0
templates/sso/profile.html | 8 +-
urls.py | 1 +
9 files changed, 144 insertions(+), 94 deletions(-)
create mode 100644 eve_api/forms.py
create mode 100644 eve_api/urls.py
create mode 100644 eve_api/views.py
rename templates/{sso/eveapi.html => eve_api/add.html} (60%)
rename templates/{sso/eveapi_log.html => eve_api/log.html} (100%)
diff --git a/eve_api/forms.py b/eve_api/forms.py
new file mode 100644
index 0000000..00c50e2
--- /dev/null
+++ b/eve_api/forms.py
@@ -0,0 +1,33 @@
+import re
+
+from django import forms
+from eve_api.models import EVEAccount, EVEPlayerCharacter, EVEPlayerCorporation
+
+
+class EveAPIForm(forms.Form):
+ """ EVE API input form """
+
+ user_id = forms.IntegerField(label=u'User ID')
+ api_key = forms.CharField(label=u'API Key', max_length=64)
+ description = forms.CharField(max_length=100, required=False)
+
+ def clean_api_key(self):
+
+ if not len(self.cleaned_data['api_key']) == 64:
+ raise forms.ValidationError("Provided API Key is not 64 characters long.")
+
+ if re.search(r'[^\.a-zA-Z0-9]', self.cleaned_data['api_key']):
+ raise forms.ValidationError("Provided API Key has invalid characters.")
+
+ def clean_user_id(self):
+
+ if not 'user_id' in self.cleaned_data or self.cleaned_data['user_id'] == '':
+ raise forms.ValidationError("Please provide a valid User ID")
+
+ try:
+ eaccount = EVEAccount.objects.get(api_user_id=self.cleaned_data['user_id'])
+ except EVEAccount.DoesNotExist:
+ return self.cleaned_data
+ else:
+ raise forms.ValidationError("This API User ID is already registered")
+
diff --git a/eve_api/urls.py b/eve_api/urls.py
new file mode 100644
index 0000000..047a1ed
--- /dev/null
+++ b/eve_api/urls.py
@@ -0,0 +1,11 @@
+from django.conf.urls.defaults import *
+from django.core.urlresolvers import reverse
+
+from eve_api import views
+
+urlpatterns = patterns('',
+ url(r'^eveapi/add/', views.eveapi_add, name="eveapi-add"),
+ url(r'^eveapi/delete/(?P\d+)/$', views.eveapi_del, name="eveapi-delete"),
+ url(r'^eveapi/refresh/(?P\d+)/$', views.eveapi_refresh, name="eveapi-refresh"),
+ url(r'^eveapi/log/(?P\d+)/$', views.eveapi_log, name="eveapi-log"),
+)
diff --git a/eve_api/views.py b/eve_api/views.py
new file mode 100644
index 0000000..a979eb9
--- /dev/null
+++ b/eve_api/views.py
@@ -0,0 +1,92 @@
+import celery
+
+from django.shortcuts import render_to_response, get_object_or_404, redirect
+from django.core.urlresolvers import reverse
+from django.contrib import messages
+from django.contrib.auth.decorators import login_required
+from django.template import RequestContext
+from django.http import Http404
+
+from eve_api.forms import EveAPIForm
+from eve_api.models import EVEAccount, EVEPlayerCharacter
+from eve_api.tasks import import_apikey_result
+
+
+@login_required
+def eveapi_add(request, post_save_redirect='/'):
+ """ Add a EVE API key to a user's account """
+
+ if request.method == 'POST':
+ form = EveAPIForm(request.POST)
+ if form.is_valid():
+
+ task = import_apikey_result.delay(api_key=form.cleaned_data['api_key'], api_userid=form.cleaned_data['user_id'], user=request.user.id)
+ try:
+ task.wait(10)
+ except celery.exceptions.TimeoutError:
+ msg = "The addition of your API key is still processing, please check back in a minute or so."
+ pass
+ else:
+ msg = "EVE API key %d successfully added." % form.cleaned_data['user_id']
+ messages.success(request, msg, fail_silently=True)
+ return redirect(post_save_redirect)
+ else:
+ form = EveAPIForm() # An unbound form
+
+ return render_to_response('eve_api/add.html', locals(), context_instance=RequestContext(request))
+
+
+@login_required
+def eveapi_del(request, userid, post_save_redirect='/'):
+ """ Delete a EVE API key from a account """
+
+ try:
+ acc = EVEAccount.objects.get(id=userid)
+ except EVEAccount.DoesNotExist:
+ return redirect(post_save_redirect)
+ if acc.user == request.user:
+ acc.delete()
+ messages.success(request, "EVE API key successfully deleted.", fail_silently=True)
+
+ return redirect(post_save_redirect)
+
+
+@login_required
+def eveapi_refresh(request, userid, post_save_redirect='/'):
+ """ Force refresh a EVE API key """
+
+ if userid > 0:
+ try:
+ acc = EVEAccount.objects.get(id=userid)
+ except EVEAccount.DoesNotExist:
+ pass
+ else:
+ if acc.user == request.user or request.user.is_superuser:
+ task = import_apikey_result.delay(api_key=acc.api_key, api_userid=acc.api_user_id, force_cache=True, user=request.user.id)
+
+ if request.is_ajax():
+ try:
+ acc = task.wait(30)
+ except celery.exceptions.TimeoutError:
+ acc = EVEAccount.objects.get(id=userid)
+ return HttpResponse(serializers.serialize('json', [acc]), mimetype='application/javascript')
+ else:
+ messages.add_message(request, messages.INFO, "Key %s has been queued to be refreshed from the API" % acc.api_user_id)
+
+ return redirect(post_save_redirect)
+
+
+@login_required
+def eveproxy_log(request, userid):
+ """ Provides a list of access logs for a specific EVE API key """
+ try:
+ acc = EVEAccount.objects.get(id=userid)
+ except EVEAccount.DoesNotExist:
+ pass
+ else:
+ if acc and (acc.user == request.user or request.user.is_staff):
+ logs = ApiAccessLog.objects.filter(userid=userid).order_by('-time_access')[:50]
+ return render_to_response('eve_api/log.html', locals(), context_instance=RequestContext(request))
+
+ raise Http404
+
diff --git a/sso/urls.py b/sso/urls.py
index 0d1d0f1..4d0df48 100644
--- a/sso/urls.py
+++ b/sso/urls.py
@@ -6,16 +6,11 @@ from sso import views
urlpatterns = patterns('',
('^$', views.profile),
(r'^profile/$', views.profile),
- (r'^profile/add/eveapi', views.eveapi_add),
- (r'^profile/del/eveapi/$', views.eveapi_del),
- (r'^profile/del/eveapi/(?P\d+)/$', views.eveapi_del),
(r'^profile/add/service', views.service_add),
(r'^profile/del/service/$', views.service_del),
(r'^profile/del/service/(?P\d+)/$', views.service_del),
(r'^profile/reset/service/(?P\d+)/$', views.service_reset),
(r'^profile/reset/service/(?P\d+)/(?P\d+)$', views.service_reset),
- (r'^profile/refresh/eveapi/(?P\d+)/$', views.eveapi_refresh),
- (r'^profile/log/eveapi/(?P\d+)/$', views.eveapi_log),
(r'^profile/characters$', views.characters),
(r'^profile/characters/(?P.*)/$', views.characters),
(r'^profile/apipassword/', views.set_apipasswd),
diff --git a/sso/views.py b/sso/views.py
index 1c638e8..ce00e54 100644
--- a/sso/views.py
+++ b/sso/views.py
@@ -22,7 +22,7 @@ from eve_api.tasks import import_apikey, import_apikey_result
from eve_proxy.models import ApiAccessLog
from sso.models import ServiceAccount, Service, SSOUser, ExistingUser, ServiceError
-from sso.forms import EveAPIForm, UserServiceAccountForm, ServiceAccountResetForm, UserLookupForm, APIPasswordForm
+from sso.forms import UserServiceAccountForm, ServiceAccountResetForm, UserLookupForm, APIPasswordForm
@login_required
def profile(request):
@@ -51,87 +51,6 @@ def characters(request, charid=0):
return render_to_response('sso/characterlist.html', locals(), context_instance=RequestContext(request))
-@login_required
-def eveapi_add(request):
- """ Add a EVE API key to a user's account """
-
- if request.method == 'POST':
- form = EveAPIForm(request.POST)
- if form.is_valid():
-
- task = import_apikey.delay(api_key=form.cleaned_data['api_key'], api_userid=form.cleaned_data['user_id'], user=request.user.id)
- try:
- task.wait(5)
- except celery.exceptions.TimeoutError:
- messages.add_message(request, messages.INFO, "The addition of your API key is still processing, please check back in a minute or so")
- pass
- else:
- messages.add_message(request, messages.INFO, "EVE API successfully added.")
-
- return redirect('sso.views.profile')
- else:
- form = EveAPIForm() # An unbound form
-
- return render_to_response('sso/eveapi.html', locals(), context_instance=RequestContext(request))
-
-
-@login_required
-def eveapi_del(request, userid=0):
- """ Delete a EVE API key from a account """
-
- if userid > 0:
- try:
- acc = EVEAccount.objects.get(id=userid)
- except EVEAccount.DoesNotExist:
- return redirect('sso.views.profile')
- if acc.user == request.user:
- acc.delete()
- messages.add_message(request, messages.INFO, "EVE API key successfully deleted.")
-
- return redirect('sso.views.profile')
-
-
-@login_required
-def eveapi_refresh(request, userid=0):
- """ Force refresh a EVE API key """
-
- if userid > 0:
- try:
- acc = EVEAccount.objects.get(id=userid)
- except EVEAccount.DoesNotExist:
- pass
- else:
- if acc.user == request.user or request.user.is_superuser:
- task = import_apikey_result.delay(api_key=acc.api_key, api_userid=acc.api_user_id, force_cache=True, user=request.user.id)
-
- if request.is_ajax():
- try:
- acc = task.wait(30)
- except celery.exceptions.TimeoutError:
- acc = EVEAccount.objects.get(id=userid)
- return HttpResponse(serializers.serialize('json', [acc]), mimetype='application/javascript')
- else:
- messages.add_message(request, messages.INFO, "Key %s has been queued to be refreshed from the API" % acc.api_user_id)
-
- return redirect('sso.views.profile')
-
-
-@login_required
-def eveapi_log(request, userid=0):
- """ Provides a list of access logs for a specific EVE API key """
- if userid > 0:
- try:
- acc = EVEAccount.objects.get(id=userid)
- except:
- pass
-
- if acc and (acc.user == request.user or request.user.is_staff):
- logs = ApiAccessLog.objects.filter(userid=userid).order_by('-time_access')[:50]
- return render_to_response('sso/eveapi_log.html', locals(), context_instance=RequestContext(request))
-
- return redirect('sso.views.profile')
-
-
@login_required
def service_add(request):
""" Add a service to a user's account """
diff --git a/templates/sso/eveapi.html b/templates/eve_api/add.html
similarity index 60%
rename from templates/sso/eveapi.html
rename to templates/eve_api/add.html
index 0cdae01..914ed2e 100644
--- a/templates/sso/eveapi.html
+++ b/templates/eve_api/add.html
@@ -7,7 +7,7 @@
href="http://eve-online.com/api">EVE Online API
page and a optional description.
-
-Once you have added your EVE API key, don't forget to apply in game, as well as add an application through our
-HR system.
+
{% endblock %}
diff --git a/templates/sso/eveapi_log.html b/templates/eve_api/log.html
similarity index 100%
rename from templates/sso/eveapi_log.html
rename to templates/eve_api/log.html
diff --git a/templates/sso/profile.html b/templates/sso/profile.html
index acdae04..35d5624 100644
--- a/templates/sso/profile.html
+++ b/templates/sso/profile.html
@@ -13,7 +13,7 @@
function refresh_apikey(key) {
$("#api-status-" + key).html("
");
$("#api-time-" + key).html("
");
- $.getJSON("/profile/refresh/eveapi/" + key + "/", function(json) {
+ $.getJSON("/eve/eveapi/refresh/" + key + "/", function(json) {
$("#api-time-" + json[0].fields.api_user_id).html("a moment ago");
switch(json[0].fields.api_status) {
@@ -107,15 +107,15 @@ setup.
{{ acc.get_api_status_display }} |
{{ acc.api_last_updated|naturaltimediff }} |
Refresh,
- Logs,
- Delete |
+ Logs,
+ Delete
{% endfor %}
{% endif %}
-Add a Eve API key
+Add a Eve API key
diff --git a/urls.py b/urls.py
index 8dafaec..d8f896a 100644
--- a/urls.py
+++ b/urls.py
@@ -15,6 +15,7 @@ urlpatterns = patterns('',
(r'^admin/', include(admin.site.urls)),
('', include('registration.urls')),
('', include('sso.urls')),
+ (r'^eve/', include('eve_api.urls')),
(r'^eveapi/', include('eve_proxy.urls')),
(r'^api/', include('api.urls')),
(r'^hr/', include('hr.urls')),