Update delete to CBV, add in support for soft deletes.

This commit is contained in:
2012-06-06 18:52:09 +01:00
parent 604124439d
commit 683e193f9a
5 changed files with 47 additions and 20 deletions

View File

@@ -148,7 +148,11 @@ GARGOYLE_SWITCH_DEFAULTS = {
'label': 'Disable API Backend Processing', 'label': 'Disable API Backend Processing',
'description': 'Disables backend processing for the EVE API, stops Auth hammering the API during outages', 'description': 'Disables backend processing for the EVE API, stops Auth hammering the API during outages',
} }
'eve-softkeydelete': {
'is_active': False,
'label': 'Soft API Key Deletions',
'description': 'API Keys are not deleted from the database, only removed from the user.',
},
} }
LOGGING = { LOGGING = {

View File

@@ -0,0 +1,16 @@
{% extends "base.html" %}
{% block title %}Delete EVE API Key {{ object.pk }}{% endblock %}
{% block content %}
<div class="page-header">
<h1>Confirm EVE API Key deletion</h1>
</div>
<p>You are about to remove EVE API Key {{ object.pk }} from Auth, once deleted Auth with recheck your permissions and make modifications to your account as required. <b>You may lose access to TEST services if this API key is the only one providing permissions for your account</b>.</p>
<form action="{% url eveapi-delete object.pk %}" method="post">
<input type="submit" value="Confirm Deletion" class="btn error"/>
{% csrf_token %}
</fieldset>
</form>
{% endblock %}

View File

@@ -7,8 +7,8 @@ from eve_api import views
urlpatterns = patterns('', urlpatterns = patterns('',
url(r'^eveapi/add/$', views.eveapi_add, name="eveapi-add"), url(r'^eveapi/add/$', views.eveapi_add, name="eveapi-add"),
url(r'^eveapi/update/(?P<userid>\d+)/$', views.eveapi_update, name="eveapi-update"), url(r'^eveapi/update/(?P<userid>\d+)/$', views.eveapi_update, name="eveapi-update"),
url(r'^eveapi/delete/(?P<userid>\d+)/$', views.eveapi_del, name="eveapi-delete"), url(r'^eveapi/delete/(?P<pk>\d+)/$', login_required(views.EVEAPIDeleteView.as_view()), name="eveapi-delete"),
url(r'^eveapi/refresh/(?P<pk>\d+)/$', login_required(views.EVEAPIRefresh.as_view()), name="eveapi-refresh"), url(r'^eveapi/refresh/(?P<pk>\d+)/$', login_required(views.EVEAPIRefreshView.as_view()), name="eveapi-refresh"),
url(r'^eveapi/log/(?P<userid>\d+)/$', login_required(views.EVEAPILogView.as_view()), name="eveapi-log"), url(r'^eveapi/log/(?P<userid>\d+)/$', login_required(views.EVEAPILogView.as_view()), name="eveapi-log"),
url(r'^eveapi/access/(?P<slug>\d+)/$', login_required(views.EVEAPIAccessView.as_view()), name="eveapi-accessview"), url(r'^eveapi/access/(?P<slug>\d+)/$', login_required(views.EVEAPIAccessView.as_view()), name="eveapi-accessview"),

View File

@@ -1,11 +1,11 @@
import csv import csv
from django.core import serializers from django.core import serializers
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse, reverse_lazy
from django.http import HttpResponse, Http404, HttpResponseForbidden, HttpResponseRedirect from django.http import HttpResponse, Http404, HttpResponseForbidden, HttpResponseRedirect
from django.shortcuts import render_to_response, get_object_or_404, redirect from django.shortcuts import render_to_response, get_object_or_404, redirect
from django.template import RequestContext from django.template import RequestContext
from django.views.generic import TemplateView, DetailView, ListView, View from django.views.generic import TemplateView, DetailView, ListView, DeleteView, View
from django.views.generic.detail import SingleObjectMixin from django.views.generic.detail import SingleObjectMixin
from django.contrib import messages from django.contrib import messages
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
@@ -95,23 +95,30 @@ def eveapi_update(request, userid, post_save_redirect='/', template='eve_api/upd
return render_to_response(template, context, context_instance=RequestContext(request)) return render_to_response(template, context, context_instance=RequestContext(request))
@login_required class EVEAPIDeleteView(DeleteView):
def eveapi_del(request, userid, post_save_redirect='/'): """Deletes a EVE API key that exists within the system after confirmation"""
""" Delete a EVE API key from a account """
if gargoyle.is_active('eve-keydelete', request): model = EVEAccount
try: success_url = reverse_lazy('sso-profile')
acc = EVEAccount.objects.get(pk=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) def dispatch(self, request, *args, **kwargs):
if not gargoyle.is_active('eve-keydelete', request):
return HttpResponseForbidden()
return super(EVEAPIDeleteView, self).dispatch(request, *args, **kwargs)
def delete(self, request, *args, **kwargs):
self.object = self.get_object()
keyid = self.object.pk
if not gargoyle.is_active('eve-softkeydelete', request)
self.object.delete()
else:
self.object.user = None
self.object.save()
messages.success(self.request, 'EVE API key %s successfully deleted.' % keyid, fail_silently=True)
return HttpResponseRedirect(self.get_success_url())
class EVEAPIRefresh(SingleObjectMixin, View): class EVEAPIRefreshView(SingleObjectMixin, View):
"""Force a refresh of a EVE API key, accepts requests via AJAX or normal requests""" """Force a refresh of a EVE API key, accepts requests via AJAX or normal requests"""
model = EVEAccount model = EVEAccount
@@ -131,7 +138,7 @@ class EVEAPIRefresh(SingleObjectMixin, View):
ret = [acc] ret = [acc]
return HttpResponse(serializers.serialize('json', ret), mimetype='application/javascript') return HttpResponse(serializers.serialize('json', ret), mimetype='application/javascript')
else: else:
messages.add_message(request, messages.INFO, "Key %s has been queued to be refreshed from the API" % acc.api_user_id) messages.add_message(self.request, messages.INFO, "Key %s has been queued to be refreshed from the API" % acc.api_user_id)
return HttpResponseRedirect('/') return HttpResponseRedirect('/')

View File

@@ -101,7 +101,7 @@
<td>{% ifswitch api-disableprocessing %}{% else %}<a href="{% url eveapi-refresh acc.api_user_id %}" onclick="javascript:refresh_apikey({{ acc.api_user_id }}); return false;">Refresh</a>,&nbsp; <td>{% ifswitch api-disableprocessing %}{% else %}<a href="{% url eveapi-refresh acc.api_user_id %}" onclick="javascript:refresh_apikey({{ acc.api_user_id }}); return false;">Refresh</a>,&nbsp;
<a href="{% url eve_api.views.eveapi_update acc.api_user_id %}">Update Key</a>,&nbsp;{% endifswitch %} <a href="{% url eve_api.views.eveapi_update acc.api_user_id %}">Update Key</a>,&nbsp;{% endifswitch %}
<a href="{% url eveapi-log acc.api_user_id %}">Logs</a>{% ifswitch eve-keydelete %},&nbsp; <a href="{% url eveapi-log acc.api_user_id %}">Logs</a>{% ifswitch eve-keydelete %},&nbsp;
<a href="{% url eve_api.views.eveapi_del acc.api_user_id %}">Delete</a>{% endifswitch %}</td> <a href="{% url eveapi-delete acc.api_user_id %}">Delete</a>{% endifswitch %}</td>
</tr> </tr>
{% endfor %} {% endfor %}
</tbody> </tbody>