From 427fdcc2dd14f8fc219b17c5663d2076c941424f Mon Sep 17 00:00:00 2001 From: Andrew Williams Date: Sun, 4 Dec 2011 03:46:48 +0000 Subject: [PATCH] Added API access display to the profile page --- app/eve_api/templates/eve_api/accessview.html | 7 +++ app/eve_api/urls.py | 4 +- app/eve_api/views.py | 48 +++++++++++++++---- app/sso/templates/sso/profile.html | 31 ++++++++---- app/templates/base.html | 2 +- 5 files changed, 74 insertions(+), 18 deletions(-) create mode 100644 app/eve_api/templates/eve_api/accessview.html diff --git a/app/eve_api/templates/eve_api/accessview.html b/app/eve_api/templates/eve_api/accessview.html new file mode 100644 index 0000000..33818ea --- /dev/null +++ b/app/eve_api/templates/eve_api/accessview.html @@ -0,0 +1,7 @@ +
+{% for x, y in access %} + {% if y %} + {{ x }}
+ {% endif %} +{% endfor %} +
diff --git a/app/eve_api/urls.py b/app/eve_api/urls.py index ccab5ca..2f4be4c 100644 --- a/app/eve_api/urls.py +++ b/app/eve_api/urls.py @@ -1,14 +1,16 @@ from django.conf.urls.defaults import * from django.core.urlresolvers import reverse +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/add/$', views.eveapi_add, name="eveapi-add"), url(r'^eveapi/update/(?P\d+)/$', views.eveapi_update, name="eveapi-update"), 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"), + url(r'^eveapi/access/(?P\d+)/$', login_required(views.EVEAPIAccessView.as_view()), name="eveapi-accessview"), url(r'^character/list/$', views.eveapi_character, name="eveapi-characters-list"), url(r'^character/(?P\d+)/$', views.eveapi_character, name="eveapi-character"), diff --git a/app/eve_api/views.py b/app/eve_api/views.py index d400d15..59a7c67 100644 --- a/app/eve_api/views.py +++ b/app/eve_api/views.py @@ -1,24 +1,25 @@ import csv -import celery - -from django.http import HttpResponse -from django.shortcuts import render_to_response, get_object_or_404, redirect +from django.core import serializers from django.core.urlresolvers import reverse +from django.http import HttpResponse, Http404 +from django.shortcuts import render_to_response, get_object_or_404, redirect +from django.template import RequestContext +from django.views.generic import DetailView + from django.contrib import messages from django.contrib.auth.decorators import login_required -from django.template import RequestContext -from django.http import Http404 -from django.core import serializers +import celery from gargoyle import gargoyle -from eve_proxy.models import ApiAccessLog +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.models import EVEAccount, EVEPlayerCharacter, EVEPlayerCorporation, EVEPlayerAlliance from eve_api.tasks import import_apikey_result +from eve_api.utils import basic_xml_parse_doc @login_required @@ -233,3 +234,34 @@ def eveapi_alliance(request, allianceid, template='eve_api/alliance.html'): } return render_to_response(template, context, context_instance=RequestContext(request)) + +class EVEAPIAccessView(DetailView): + + model = EVEAccount + template_name = 'eve_api/accessview.html' + slug_field = 'api_user_id' + + @staticmethod + def lowestSet(int_type): + low = (int_type & -int_type) + lowBit = -1 + while (low): + low >>= 1 + lowBit += 1 + return(lowBit) + + def get_context_data(self, **kwargs): + ctx = super(EVEAPIAccessView, self).get_context_data(**kwargs) + + calls = basic_xml_parse_doc(CachedDocument.objects.api_query('/api/CallList.xml.aspx'))['eveapi']['result'] + if self.object.api_keytype == API_KEYTYPE_CORPORATION: + typ = 'Corporation' + else: + typ = 'Character' + + ctx['access'] = [] + for row in [x for x in calls['calls'] if x['type'] == typ]: + bit = self.lowestSet(int(row['accessMask'])) + ctx['access'].append((row['name'], self.object.has_access(bit))) + + return ctx diff --git a/app/sso/templates/sso/profile.html b/app/sso/templates/sso/profile.html index 9731b27..ff66f51 100644 --- a/app/sso/templates/sso/profile.html +++ b/app/sso/templates/sso/profile.html @@ -10,6 +10,8 @@ + + - diff --git a/app/templates/base.html b/app/templates/base.html index 86e17e6..475b81c 100644 --- a/app/templates/base.html +++ b/app/templates/base.html @@ -26,7 +26,7 @@ //background-image: -o-linear-gradient(top, #333333, #5F6757); //background-image: linear-gradient(top, #333333, #5F6757); } - div.content { + .container div.content { background-color: white; padding: 20px; margin: 0 -20px;