mirror of
https://github.com/nikdoof/test-auth.git
synced 2025-12-14 06:42:16 +00:00
Finish moving the eve_api functions out to the eve_api app
This commit is contained in:
33
eve_api/forms.py
Normal file
33
eve_api/forms.py
Normal file
@@ -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")
|
||||
|
||||
11
eve_api/urls.py
Normal file
11
eve_api/urls.py
Normal file
@@ -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<userid>\d+)/$', views.eveapi_del, name="eveapi-delete"),
|
||||
url(r'^eveapi/refresh/(?P<userid>\d+)/$', views.eveapi_refresh, name="eveapi-refresh"),
|
||||
url(r'^eveapi/log/(?P<userid>\d+)/$', views.eveapi_log, name="eveapi-log"),
|
||||
)
|
||||
92
eve_api/views.py
Normal file
92
eve_api/views.py
Normal file
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user