diff --git a/README.md b/README.md index d30ed5e1..02d9c2e2 100755 --- a/README.md +++ b/README.md @@ -69,6 +69,8 @@ Special Permissions In Admin: auth | user | blue_member ( Auto Added to people who register has a blue when adding api key) auth | user | corp_stats ( View basic corp auth stats *who is authed etc*) auth | user | corputils ( View who has registered APIs, which alts belong to which main, and more. ) + auth | user | corp_apis ( View APIs, andjackKnife, of all member in current corp. ) + auth | user | alliance_apis ( View APIs, andjackKnife, of all member in whole alliance. ) auth | user | timer_management ( Access to create and remove timers) auth | user | timer_view ( Access to timerboard to view timers) auth | user | srp_management ( Allows for an individual to create and remove srp fleets and fleet data) diff --git a/alliance_auth/urls.py b/alliance_auth/urls.py index 4d812dea..4a308518 100755 --- a/alliance_auth/urls.py +++ b/alliance_auth/urls.py @@ -42,7 +42,6 @@ urlpatterns = patterns('', url(r'^characters/', 'eveonline.views.characters_view', name='auth_characters'), url(r'^main_character_change/(\w+)/$', 'eveonline.views.main_character_change', name='auth_main_character_change'), - url(r'^corporation_stats/$', 'eveonline.views.corp_stats_view', name='auth_corp_stats'), # Group management url(r'^groups/', 'groupmanagement.views.groups_view', name='auth_groups'), @@ -166,7 +165,7 @@ urlpatterns = patterns('', name="auth_srp_request_update_amount_view"), #corputils - url(r'^corputils/$', 'corputils.views.corp_member_view', name='auth_corp_member_view'), + url(r'^corputils/$', 'corputils.views.corp_member_view', name='auth_corputils'), url(r'^corputils/(?P[0-9]+)/$', 'corputils.views.corp_member_view'), url(r'^corputils/search/$', 'corputils.views.corputils_search', name="auth_corputils_search"), url(r'^corputils/search/(?P[0-9]+)/$', 'corputils.views.corputils_search'), diff --git a/corputils/views.py b/corputils/views.py index 8498541c..082963fb 100644 --- a/corputils/views.py +++ b/corputils/views.py @@ -13,7 +13,9 @@ from services.managers.evewho_manager import EveWhoManager from eveonline.models import EveCorporationInfo from eveonline.models import EveAllianceInfo from eveonline.models import EveCharacter +from eveonline.models import EveApiKeyPair from authentication.models import AuthServicesInfo +from util import check_if_user_has_permission from forms import CorputilsSearchForm from evelink.api import APIError @@ -24,135 +26,174 @@ logger = logging.getLogger(__name__) # Because corp-api only exist for the executor corp, this function will only be available in corporation mode. @login_required -@permission_required('auth.corputils') def corp_member_view(request, corpid = None): logger.debug("corp_member_view called by user %s" % request.user) + try: + user_main = EveCharacter.objects.get(character_id=AuthServicesInfoManager.get_auth_service_info(user=request.user).main_char_id) + user_corp_id = int(user_main.corporation_id) + except (ValueError, EveCharacter.DoesNotExist): + user_corp_id = settings.CORP_ID + + if not settings.IS_CORP: alliance = EveAllianceInfo.objects.get(alliance_id=settings.ALLIANCE_ID) alliancecorps = EveCorporationInfo.objects.filter(alliance=alliance) membercorp_list = [(int(membercorp.corporation_id), str(membercorp.corporation_name)) for membercorp in alliancecorps] membercorp_list.sort(key=lambda tup: tup[1]) + membercorp_id_list = [int(membercorp.corporation_id) for membercorp in alliancecorps] + if user_corp_id not in membercorp_id_list: + user_corp_id = None + if not corpid: - if(settings.CORP_ID): + if(settings.IS_CORP): corpid = settings.CORP_ID + elif user_corp_id: + corpid = user_corp_id else: corpid = membercorp_list[0][0] - corp = EveCorporationInfo.objects.get(corporation_id=corpid) - Player = namedtuple("Player", ["main", "maincorp", "maincorpid", "altlist"]) + Player = namedtuple("Player", ["main", "maincorp", "maincorpid", "altlist", "apilist"]) - if settings.IS_CORP: - try: - member_list = EveApiManager.get_corp_membertracking(settings.CORP_API_ID, settings.CORP_API_VCODE) - except APIError: - logger.debug("Corp API does not have membertracking scope, using EveWho data instead.") - member_list = EveWhoManager.get_corporation_members(corpid) - else: - member_list = EveWhoManager.get_corporation_members(corpid) + if check_if_user_has_permission(request.user, 'alliance_apis') or (check_if_user_has_permission(request.user, 'corp_apis') and (user_corp_id == corpid)): + logger.debug("Retreiving and sending API-information") - characters_with_api = {} - characters_without_api = {} - - for char_id, member_data in member_list.items(): - try: - char = EveCharacter.objects.get(character_id=char_id) - user = char.user + if settings.IS_CORP: try: - mainid = int(AuthServicesInfoManager.get_auth_service_info(user=user).main_char_id) - mainchar = EveCharacter.objects.get(character_id=mainid) - mainname = mainchar.character_name - maincorp = mainchar.corporation_name - maincorpid = mainchar.corporation_id - except (ValueError, EveCharacter.DoesNotExist): - mainname = "User: " + user.username - mainchar = char - maincorp = "Not set." - maincorpid = None - characters_with_api.setdefault(mainname, Player(main=mainchar, - maincorp=maincorp, - maincorpid=maincorpid, - altlist=[]) - ).altlist.append(char) + member_list = EveApiManager.get_corp_membertracking(settings.CORP_API_ID, settings.CORP_API_VCODE) + except APIError: + logger.debug("Corp API does not have membertracking scope, using EveWho data instead.") + member_list = EveWhoManager.get_corporation_members(corpid) + else: + member_list = EveWhoManager.get_corporation_members(corpid) - except EveCharacter.DoesNotExist: - characters_without_api.update({member_data["name"]: member_data["id"]}) + characters_with_api = {} + characters_without_api = {} + + num_registered_characters = 0 + for char_id, member_data in member_list.items(): + try: + char = EveCharacter.objects.get(character_id=char_id) + char_owner = char.user + try: + mainid = int(AuthServicesInfoManager.get_auth_service_info(user=char_owner).main_char_id) + mainchar = EveCharacter.objects.get(character_id=mainid) + mainname = mainchar.character_name + maincorp = mainchar.corporation_name + maincorpid = mainchar.corporation_id + except (ValueError, EveCharacter.DoesNotExist): + mainname = "User: " + char_owner.username + mainchar = char + maincorp = "Not set." + maincorpid = None + num_registered_characters = num_registered_characters + 1 + characters_with_api.setdefault(mainname, Player(main=mainchar, + maincorp=maincorp, + maincorpid=maincorpid, + altlist=[], + apilist=[]) + ).altlist.append(char) + characters_with_api[mainname].apilist.append(EveApiKeyPair.objects.get(api_id=char.api_id)) - if not settings.IS_CORP: - context = {"membercorp_list": membercorp_list, - "corp": corp, - "characters_with_api": sorted(characters_with_api.items()), - "characters_without_api": sorted(characters_without_api.items()), - "search_form": CorputilsSearchForm()} - else: - logger.debug("corp_member_view running in corportation mode") - context = {"corp": corp, - "characters_with_api": sorted(characters_with_api.items()), - "characters_without_api": sorted(characters_without_api.items()), - "search_form": CorputilsSearchForm()} + except EveCharacter.DoesNotExist: + characters_without_api.update({member_data["name"]: member_data["id"]}) - return render_to_response('registered/corputils.html',context, context_instance=RequestContext(request) ) + if not settings.IS_CORP: + context = {"membercorp_list": membercorp_list, + "corp": corp, + "characters_with_api": sorted(characters_with_api.items()), + 'n_registered': num_registered_characters, + "characters_without_api": sorted(characters_without_api.items()), + "search_form": CorputilsSearchForm()} + else: + logger.debug("corp_member_view running in corportation mode") + context = {"corp": corp, + "characters_with_api": sorted(characters_with_api.items()), + 'n_registered': num_registered_characters, + "characters_without_api": sorted(characters_without_api.items()), + "search_form": CorputilsSearchForm()} + + return render_to_response('registered/corputils.html',context, context_instance=RequestContext(request) ) + return HttpResponseRedirect("/dashboard/") @login_required -@permission_required('auth.corputils') def corputils_search(request, corpid=settings.CORP_ID): logger.debug("corputils_search called by user %s" % request.user) corp = EveCorporationInfo.objects.get(corporation_id=corpid) - if request.method == 'POST': - form = CorputilsSearchForm(request.POST) - logger.debug("Request type POST contains form valid: %s" % form.is_valid()) - if form.is_valid(): - # Really dumb search and only checks character name - # This can be improved but it does the job for now - searchstring = form.cleaned_data['search_string'] - logger.debug("Searching for player with character name %s for user %s" % (searchstring, request.user)) + authorized = False + try: + user_main = EveCharacter.objects.get(character_id=AuthServicesInfoManager.get_auth_service_info(user=request.user).main_char_id) + if check_if_user_has_permission(request.user, 'alliance_apis') or (check_if_user_has_permission(request.user, 'corp_apis') and (user_main.corporation_id == corpid)): + logger.debug("Retreiving and sending API-information") + authorized = True + except (ValueError, EveCharacter.DoesNotExist): + if check_if_user_has_permission(request.user, 'alliance_apis'): + logger.debug("Retreiving and sending API-information") + authorized = True - if settings.IS_CORP: - try: - member_list = EveApiManager.get_corp_membertracking(settings.CORP_API_ID, settings.CORP_API_VCODE) - except APIError: - logger.debug("Corp API does not have membertracking scope, using EveWho data instead.") - member_list = EveWhoManager.get_corporation_members(corpid) - else: - member_list = EveWhoManager.get_corporation_members(corpid) + if authorized: + if request.method == 'POST': + form = CorputilsSearchForm(request.POST) + logger.debug("Request type POST contains form valid: %s" % form.is_valid()) + if form.is_valid(): + # Really dumb search and only checks character name + # This can be improved but it does the job for now + searchstring = form.cleaned_data['search_string'] + logger.debug("Searching for player with character name %s for user %s" % (searchstring, request.user)) - Member = namedtuple('Member', ['name', 'main', 'api_registered']) - - members = [] - for memberid, member_data in member_list.items(): - if searchstring.lower() in member_data["name"].lower(): + if settings.IS_CORP: try: - char = EveCharacter.objects.get(character_name=member_data["name"]) - user = char.user - mainid = int(AuthServicesInfoManager.get_auth_service_info(user=user).main_char_id) - mainname = EveCharacter.objects.get(character_id=mainid).character_name - api_registered = True - except EveCharacter.DoesNotExist: - api_registered = False - mainname = "" - members.append(Member(name=member_data["name"], main=mainname, api_registered=api_registered)) + member_list = EveApiManager.get_corp_membertracking(settings.CORP_API_ID, settings.CORP_API_VCODE) + except APIError: + logger.debug("Corp API does not have membertracking scope, using EveWho data instead.") + member_list = EveWhoManager.get_corporation_members(corpid) + else: + member_list = EveWhoManager.get_corporation_members(corpid) + + SearchResult = namedtuple('SearchResult', ['name', 'id', 'main', 'api_registered', 'character', 'apiinfo']) + + searchresults = [] + for memberid, member_data in member_list.items(): + if searchstring.lower() in member_data["name"].lower(): + try: + char = EveCharacter.objects.get(character_name=member_data["name"]) + user = char.user + mainid = int(AuthServicesInfoManager.get_auth_service_info(user=user).main_char_id) + mainname = EveCharacter.objects.get(character_id=mainid).character_name + api_registered = True + apiinfo = EveApiKeyPair.objects.get(api_id=char.api_id) + except EveCharacter.DoesNotExist: + api_registered = False + char = None + mainname = "" + apiinfo = None + + searchresults.append(SearchResult(name=member_data["name"], id=memberid, main=mainname, api_registered=api_registered, + character=char, apiinfo=apiinfo)) - logger.info("Found %s members for user %s matching search string %s" % (len(members), request.user, searchstring)) + logger.info("Found %s members for user %s matching search string %s" % (len(searchresults), request.user, searchstring)) - context = {'corp': corp, 'members': members, 'search_form': CorputilsSearchForm()} + context = {'corp': corp, 'results': searchresults, 'search_form': CorputilsSearchForm()} + + return render_to_response('registered/corputilssearchview.html', + context, context_instance=RequestContext(request)) + else: + logger.debug("Form invalid - returning for user %s to retry." % request.user) + context = {'corp': corp, 'members': None, 'search_form': CorputilsSearchForm()} + return render_to_response('registered/corputilssearchview.html', + context, context_instance=RequestContext(request)) - return render_to_response('registered/corputilssearchview.html', - context, context_instance=RequestContext(request)) else: - logger.debug("Form invalid - returning for user %s to retry." % request.user) - context = {'corp': corp, 'members': None, 'search_form': CorputilsSearchForm()} - return render_to_response('registered/corputilssearchview.html', - context, context_instance=RequestContext(request)) + logger.debug("Returning empty search form for user %s" % request.user) + return HttpResponseRedirect("/corputils/") + return HttpResponseRedirect("/dashboard/") - else: - logger.debug("Returning empty search form for user %s" % request.user) - return HttpResponseRedirect("/corputils/") diff --git a/eveonline/views.py b/eveonline/views.py index ff7bf6c1..15ea537d 100755 --- a/eveonline/views.py +++ b/eveonline/views.py @@ -128,39 +128,6 @@ def main_character_change(request, char_id): return HttpResponseRedirect("/characters") -@login_required -@permission_required('auth.corp_stats') -def corp_stats_view(request): - logger.debug("corp_stats_view called by user %s" % request.user) - # Get the corp the member is in - auth_info = AuthServicesInfo.objects.get(user=request.user) - logger.debug("Got user %s authservicesinfo model %s" % (request.user, auth_info)) - if EveCharacter.objects.filter(character_id=auth_info.main_char_id).exists(): - main_char = EveCharacter.objects.get(character_id=auth_info.main_char_id) - logger.debug("Got user %s main character model %s" % (request.user, main_char)) - if EveCorporationInfo.objects.filter(corporation_id=main_char.corporation_id).exists(): - current_count = 0 - allcharacters = {} - corp = EveCorporationInfo.objects.get(corporation_id=main_char.corporation_id) - logger.debug("Got user %s main character's corp model %s" % (request.user, corp)) - all_characters = EveCharacter.objects.all() - for char in all_characters: - if char: - try: - if char.corporation_id == corp.corporation_id: - current_count = current_count + 1 - allcharacters[char.character_name] = EveApiKeyPair.objects.get(api_id=char.api_id) - except: - pass - context = {"corp": corp, - "currentCount": current_count, - "characters": allcharacters} - return render_to_response('registered/corpstats.html', context, context_instance=RequestContext(request)) - else: - logger.error("Unable to locate user %s main character's corp model with id %s. Cannot provide corp stats." % (request.user, main_char.corporation_id)) - else: - logger.error("Unable to locate user %s main character model with id %s. Cannot provide corp stats." % (request.user, auth_info.main_char_id)) - return render_to_response('registered/corpstats.html', None, context_instance=RequestContext(request)) @login_required def user_refresh_api(request, api_id): diff --git a/stock/templates/public/base.html b/stock/templates/public/base.html index 5b61d205..1f97835e 100755 --- a/stock/templates/public/base.html +++ b/stock/templates/public/base.html @@ -124,18 +124,11 @@ {% endif %} - {% if perms.auth.corp_stats %} -
  • - Corporation Stats -
  • - {% endif %} - {% if perms.auth.corputils %} + {% if perms.auth.corp_apis or perms.auth.alliance_apis %}
  • Member Tracking + href="{% url 'auth_corputils' %}"> Corporation Stats
  • {% endif %} diff --git a/stock/templates/registered/corpstats.html b/stock/templates/registered/corpstats.html deleted file mode 100755 index f373d253..00000000 --- a/stock/templates/registered/corpstats.html +++ /dev/null @@ -1,85 +0,0 @@ -{% extends "public/base.html" %} -{% block title %}Alliance Auth{% endblock %} -{% block page_title %}Corporation Stats{% endblock page_title %} - -{% block content %} - -
    -

    Corporation Stats

    - {% if perms.auth.member %} -
    - {% if corp %} -
    -
    -
    -
    Corporation
    - -
    -
    -
    - -
    -

    Name: {{ corp.corporation_name }}

    - -

    Ticker: {{ corp.corporation_ticker }}

    - -

    Member: {{ corp.member_count }}

    - -

    Total Authed Members: {{ currentCount }}

    -
    -
    -
    -
    - - -
    -
    -
    Registered Characters
    -
    -
    - - - - - - {% for key,value in characters.items %} - - - - - {% endfor %} -
    Character NameActions
    -

    {{ key }}

    -
    - - - -
    -
    -
    -
    -
    - {% else %} -
    -
    -
    - -
    -
    -
    - {% endif %} -
    -
    - {% else %} - {% if IS_CORP %} - - {% else %} - - {% endif %} - {% endif %} -
    -{% endblock content %} diff --git a/stock/templates/registered/corputils.html b/stock/templates/registered/corputils.html index 708f3996..603a470b 100644 --- a/stock/templates/registered/corputils.html +++ b/stock/templates/registered/corputils.html @@ -34,8 +34,8 @@
    API Index:
    -
    - {{characters_with_api|length}}/{{ corp.member_count }} +
    + {{n_registered}}/{{ corp.member_count }}
    @@ -46,7 +46,7 @@