diff --git a/app/eve_api/forms.py b/app/eve_api/forms.py
index 744acbc..2cdd45a 100644
--- a/app/eve_api/forms.py
+++ b/app/eve_api/forms.py
@@ -6,7 +6,7 @@ from gargoyle import gargoyle
from eve_api.models import EVEAccount, EVEPlayerCharacter, EVEPlayerCorporation
-class EveAPIForm(forms.ModelForm):
+class EVEAPIForm(forms.ModelForm):
""" EVE API input form """
class Meta:
@@ -15,12 +15,15 @@ class EveAPIForm(forms.ModelForm):
widgets = {'user': forms.HiddenInput()}
def __init__(self, *args, **kwargs):
- super(EveAPIForm, self).__init__(*args, **kwargs)
+ super(EVEAPIForm, self).__init__(*args, **kwargs)
instance = getattr(self, 'instance', None)
if instance and instance.pk:
# We're editing a existing instance, readonly the userid
self.fields['api_user_id'].widget.attrs['readonly'] = True
+ else:
+ # New instance, hide description
+ del self.fields['description']
if gargoyle.is_active('eve-cak'):
self.fields['api_user_id'].label = 'Key ID'
diff --git a/app/eve_api/templates/eve_api/eveaccount_add.html b/app/eve_api/templates/eve_api/eveaccount_add.html
deleted file mode 100644
index c145b80..0000000
--- a/app/eve_api/templates/eve_api/eveaccount_add.html
+++ /dev/null
@@ -1,23 +0,0 @@
-{% extends "base.html" %}
-
-{% block title %}Add EVE API Key{% endblock %}
-
-{% block content %}
-
-
-Please fill in your API key details and a optional description. You can create a API key on the API support site
-
-
-
-{% endblock %}
diff --git a/app/eve_api/templates/eve_api/eveaccount_form.html b/app/eve_api/templates/eve_api/eveaccount_form.html
new file mode 100644
index 0000000..abf7fa7
--- /dev/null
+++ b/app/eve_api/templates/eve_api/eveaccount_form.html
@@ -0,0 +1,24 @@
+{% extends "base.html" %}
+
+{% block title %}{% if object %}Update EVE API Key{% else %}Add EVE API Key{% endif %}{% endblock %}
+
+{% block content %}
+
+
+Please fill in your API key details and a optional description. You can create a API key on the API support site
+
+
+
+{% endblock %}
diff --git a/app/eve_api/templates/eve_api/update.html b/app/eve_api/templates/eve_api/update.html
deleted file mode 100644
index 978a057..0000000
--- a/app/eve_api/templates/eve_api/update.html
+++ /dev/null
@@ -1,24 +0,0 @@
-{% extends "base.html" %}
-
-{% block title %}Update EVE API Key{% endblock %}
-
-{% block content %}
-
-
-Please update your API key as provided on the EVE Online API page and a optional description.
-
-
-
-{% endblock %}
diff --git a/app/eve_api/urls.py b/app/eve_api/urls.py
index a1e7b02..207a8bc 100644
--- a/app/eve_api/urls.py
+++ b/app/eve_api/urls.py
@@ -5,8 +5,8 @@ from django.contrib.auth.decorators import login_required
from eve_api import views
urlpatterns = patterns('',
- url(r'^eveapi/add/$', views.eveapi_add, name="eveapi-add"),
- url(r'^eveapi/update/(?P\d+)/$', views.eveapi_update, name="eveapi-update"),
+ url(r'^eveapi/add/$', login_required(views.EVEAPICreateView.as_view()), name="eveapi-add"),
+ url(r'^eveapi/update/(?P\d+)/$', login_required(views.EVEAPIUpdateView.as_view()), name="eveapi-update"),
url(r'^eveapi/delete/(?P\d+)/$', login_required(views.EVEAPIDeleteView.as_view()), name="eveapi-delete"),
url(r'^eveapi/refresh/(?P\d+)/$', login_required(views.EVEAPIRefreshView.as_view()), name="eveapi-refresh"),
url(r'^eveapi/log/(?P\d+)/$', login_required(views.EVEAPILogView.as_view()), name="eveapi-log"),
diff --git a/app/eve_api/views/base.py b/app/eve_api/views/base.py
index 533ed0d..7056ce3 100644
--- a/app/eve_api/views/base.py
+++ b/app/eve_api/views/base.py
@@ -2,10 +2,10 @@ import csv
from django.core import serializers
from django.core.urlresolvers import reverse, reverse_lazy
-from django.http import HttpResponse, Http404, HttpResponseForbidden, HttpResponseRedirect
-from django.shortcuts import render_to_response, get_object_or_404, redirect
+from django.http import HttpResponse, HttpResponseForbidden, HttpResponseRedirect
+from django.shortcuts import render_to_response, get_object_or_404
from django.template import RequestContext
-from django.views.generic import TemplateView, DetailView, ListView, DeleteView, View
+from django.views.generic import TemplateView, CreateView, UpdateView, DetailView, ListView, DeleteView, View
from django.views.generic.detail import SingleObjectMixin
from django.contrib import messages
from django.contrib.auth.decorators import login_required
@@ -16,23 +16,55 @@ from gargoyle import gargoyle
from eve_proxy.models import ApiAccessLog, CachedDocument
from eve_proxy.exceptions import DocumentRetrievalError
from eve_api.app_defines import *
-from eve_api.forms import EveAPIForm
+from eve_api.forms import EVEAPIForm
from eve_api.models import EVEAccount, EVEPlayerCharacter, EVEPlayerCorporation, EVEPlayerAlliance
from eve_api.tasks import import_apikey_result
from eve_api.utils import basic_xml_parse_doc
from eve_api.views.mixins import DetailPaginationMixin
-@login_required
-def eveapi_add(request, post_save_redirect='/', template='eve_api/add.html'):
- """ Add a EVE API key to a user's account """
+class EVEAPICreateView(CreateView):
- 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['api_user_id'], user=request.user.id)
+ model = EVEAccount
+ form_class = EVEAPIForm
+ success_url = reverse_lazy('sso-profile')
+
+ def form_valid(self, form):
+ task = import_apikey_result.delay(api_key=form.cleaned_data['api_key'], api_userid=form.cleaned_data['api_user_id'], user=request.user.id)
+ try:
+ out = 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."
+ except DocumentRetrievalError:
+ msg = "An issue with the EVE API was encountered while adding your API, please try again later."
+ except:
+ msg = "An unknown error was encountered while trying to add your API key, please try again later."
+ else:
+ if out:
+ msg = "Key %d successfully added." % form.cleaned_data['api_user_id']
+ else:
+ msg = "An issue was encountered while trying to import key %s, Please check that you are using the correct information and try again." % form.cleaned_data['api_user_id']
+ messages.success(request, msg, fail_silently=True)
+ return HttpResponseRedirect(self.get_success_url())
+
+ def get_initial(self):
+ return {'user': self.request.user.pk}
+
+
+class EVEAPIUpdateView(UpdateView):
+
+ model = EVEAccount
+ form_class = EVEAPIForm
+ success_url = reverse_lazy('sso-profile')
+
+ def get_initial(self):
+ return {'user': self.request.user.pk}
+
+ def form_valid(self, form):
+ if form.has_changed() and 'api_key' in form.changed_data:
+ task = import_apikey_result.delay(api_key=acc.api_key, api_userid=acc.api_user_id, user=request.user.id)
try:
- out = task.wait(10)
+ task.wait(30)
except celery.exceptions.TimeoutError:
msg = "The addition of your API key is still processing, please check back in a minute or so."
except DocumentRetrievalError:
@@ -40,59 +72,14 @@ def eveapi_add(request, post_save_redirect='/', template='eve_api/add.html'):
except:
msg = "An unknown error was encountered while trying to add your API key, please try again later."
else:
- if out:
- msg = "Key %d successfully added." % form.cleaned_data['api_user_id']
- else:
- msg = "An issue was encountered while trying to import key %s, Please check that you are using the correct information and try again." % form.cleaned_data['api_user_id']
- messages.success(request, msg, fail_silently=True)
- return HttpResponseRedirect(post_save_redirect)
- else:
- form = EveAPIForm(initial={'user': request.user.id }) # An unbound form
-
- context = {
- 'form': form,
- }
- return render_to_response(template, context, context_instance=RequestContext(request))
-
-
-@login_required
-def eveapi_update(request, userid, post_save_redirect='/', template='eve_api/update.html'):
- """ Update a EVE API Key """
-
- acc = get_object_or_404(EVEAccount, pk=userid)
- if not acc.user == request.user and not request.user.is_staff:
- raise Http404
-
- if request.method == 'POST':
- form = EveAPIForm(request.POST, instance=acc)
- if form.is_valid():
- if form.has_changed() and ('api_key' in form.changed_data):
- task = import_apikey_result.delay(api_key=acc.api_key, api_userid=acc.api_user_id, user=request.user.id)
- try:
- task.wait(30)
- except celery.exceptions.TimeoutError:
- msg = "The addition of your API key is still processing, please check back in a minute or so."
- except DocumentRetrievalError:
- msg = "An issue with the EVE API was encountered while adding your API, please try again later."
- except:
- msg = "An unknown error was encountered while trying to add your API key, please try again later."
- else:
- msg = "EVE API key %d successfully updated." % acc.api_user_id
- else:
- if form.has_changed():
- form.save()
msg = "EVE API key %d successfully updated." % acc.api_user_id
+ else:
+ if form.has_changed():
+ form.save()
+ msg = "EVE API key %d successfully updated." % acc.api_user_id
- messages.success(request, msg, fail_silently=True)
- return redirect(post_save_redirect)
- else:
- form = EveAPIForm(instance=acc) # An unbound form
-
- context = {
- 'acc': acc,
- 'form': form,
- }
- return render_to_response(template, context, context_instance=RequestContext(request))
+ messages.success(request, msg, fail_silently=True)
+ return HttpResponseRedirect(self.get_success_url())
class EVEAPIDeleteView(DeleteView):
@@ -205,6 +192,7 @@ class EVEAPICharacterDetailView(DetailView):
})
return ctx
+
class EVEAPICharacterListView(TemplateView):
template_name = 'eve_api/character_list.html'
@@ -240,7 +228,7 @@ def eveapi_corporation_members_csv(request, corporationid):
corporation = get_object_or_404(EVEPlayerCorporation, id=corporationid)
if not corporation.eveplayercharacter_set.filter(eveaccount__user=request.user, roles__name="roleDirector").count() and not request.user.is_superuser:
- raise Http404
+ return HttpResponseForbidden()
response = HttpResponse(mimetype='text/csv')
response['Content-Disposition'] = 'attachment; filename=%s-members_export.csv' % corporation.id
diff --git a/app/sso/templates/sso/profile.html b/app/sso/templates/sso/profile.html
index dbb77a0..40b40f5 100644
--- a/app/sso/templates/sso/profile.html
+++ b/app/sso/templates/sso/profile.html
@@ -99,7 +99,7 @@
{{ acc.get_api_status_display }} |
{{ acc.api_last_updated|naturaltimediff }} |
{% ifswitch api-disableprocessing %}{% else %}Refresh,
- Update Key, {% endifswitch %}
+ Update Key, {% endifswitch %}
Logs{% ifswitch eve-keydelete %},
Delete{% endifswitch %} |
@@ -112,7 +112,7 @@
{% ifswitch api-disableprocessing %}
{% else %}
- Add a Eve API key
+ Add a Eve API key
Create API Key
Force Access Update
{% endifswitch %}