Skip to content
This repository was archived by the owner on Jan 13, 2019. It is now read-only.

Commit

Permalink
Added initial corputils functionality, for auditing members in corpor…
Browse files Browse the repository at this point in the history
…ation mode.
  • Loading branch information
Ydmir committed Jan 15, 2016
1 parent 4c8ab70 commit 786e573
Show file tree
Hide file tree
Showing 12 changed files with 381 additions and 200 deletions.
11 changes: 3 additions & 8 deletions .idea/allianceauth.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 6 additions & 3 deletions alliance_auth/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,10 @@
url(r'srp_request_reject/(\w+)', 'srp.views.srp_request_reject', name='auth_srp_request_reject'),
url(r'srp_request_amount_update/(\w+)', 'srp.views.srp_request_update_amount_view',
name="auth_srp_request_update_amount_view"),

# FLEET FITTINGS
url(r'^fits/$', 'services.views.fleet_fits', name='auth_fleet_fits'),

#corputils
url(r'^corp_utils/$', 'corputils.views.corp_member_view', name='auth_corp_member_view'),

# FLEET FITTINGS
url(r'^fits/$', 'services.views.fleet_fits', name='auth_fleet_fits'),
)
Empty file added corputils/__init__.py
Empty file.
Empty file added corputils/admin.py
Empty file.
Empty file added corputils/models.py
Empty file.
Empty file added corputils/tests.py
Empty file.
52 changes: 52 additions & 0 deletions corputils/views.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
from django.conf import settings
from django.shortcuts import render_to_response
from django.template import RequestContext
from django.contrib.auth.decorators import login_required
from django.contrib.auth.decorators import permission_required

from authentication.managers import AuthServicesInfoManager
from services.managers.eve_api_manager import EveApiManager
from eveonline.models import EveCorporationInfo
from eveonline.models import EveCharacter
from authentication.models import AuthServicesInfo

import logging

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.corp_stats')
def corp_member_view(request):
logger.debug("corp_member_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 settings.IS_CORP:
corp = EveCorporationInfo.objects.get(corporation_id=settings.CORP_ID)

member_list = EveApiManager.get_corp_membertracking()
characters_with_api = {}
characters_without_api = {}
for char_id, member_data in member_list.iteritems():
try:
char = EveCharacter.objects.get(character_id=char_id)
user = char.user
mainid = int(AuthServicesInfoManager.get_auth_service_info(user=user).main_char_id)
characters_with_api.setdefault(mainid,{}).update({char_id:char.character_name})
except EveCharacter.DoesNotExist:
mainid = char_id
characters_without_api.setdefault(mainid,{}).update({char_id:member_data["name"]})


context = {"corp": corp,
"characters_with_api": characters_with_api,
"characters_without_api": characters_without_api}

return render_to_response('registered/corputils.html',context, context_instance=RequestContext(request) )
else:
logger.error("Not running in corporation mode. Cannot provide corp member tracking data." % (request.user, auth_info.main_char_id))
return render_to_response('registered/corputils.html', None, context_instance=RequestContext(request))

1 change: 1 addition & 0 deletions eveonline/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@

logger = logging.getLogger(__name__)


def disable_member(user, char_id):
logger.debug("Disabling user %s with character id %s" % (user, char_id))
remove_member_permission(user, 'member')
Expand Down
372 changes: 186 additions & 186 deletions hrapplications/views.py

Large diffs are not rendered by default.

25 changes: 23 additions & 2 deletions services/managers/eve_api_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,7 @@ def get_corp_standings():
api = evelink.api.API(api_key=(settings.CORP_API_ID, settings.CORP_API_VCODE))
corp = evelink.corp.Corp(api=api)
corpinfo = corp.contacts()
results = corpinfo[0]
results = corpinfo.result
logger.debug("Got corp standings from settings: %s" % results)
return results
except evelink.api.APIError as error:
Expand All @@ -194,14 +194,35 @@ def get_corp_standings():
logger.error("No corp API key supplied in settings. Unable to get standings.")
return {}

@staticmethod
def get_corp_membertracking():
if settings.IS_CORP:
if settings.CORP_API_ID and settings.CORP_API_VCODE:
try:
logger.debug("Getting corp membertracking with api id %s" % settings.CORP_API_ID)
api = evelink.api.API(api_key=(settings.CORP_API_ID, settings.CORP_API_VCODE))
corp = evelink.corp.Corp(api=api)
membertracking = corp.members()
results = membertracking.result
logger.debug("Got corp membertracking from settings: %s" % results)
return results
except evelink.api.APIError as error:
logger.exception("Unhandled APIError occured.", exc_info=True)
else:
logger.error("No corp API key supplied in settings. Unable to get standings.")
else:
logger.error("Membertracking function only works in corporation mode.")
return {}


@staticmethod
def check_if_id_is_alliance(alliance_id):
logger.debug("Checking if id %s is an alliance." % alliance_id)
try:
api = evelink.api.API()
eve = evelink.eve.EVE(api=api)
alliance = eve.alliances()
results = alliance[0][int(alliance_id)]
results = alliance.result[int(alliance_id)]
if results:
logger.debug("Confirmed id %s is an alliance." % alliance_id)
return True
Expand Down
9 changes: 8 additions & 1 deletion stock/templates/public/base.html
Original file line number Diff line number Diff line change
Expand Up @@ -117,10 +117,17 @@ <h5>Aux Navigation</h5>

{% if perms.auth.corp_stats %}
<li>
<a {% ifequal request.path "/corporation_stats" %} class="active" {% endifequal %}
<a {% ifequal request.path "/corporation_stats/" %} class="active" {% endifequal %}
href="{% url 'auth_corp_stats' %}"><i
class="fa fa-share-alt fa-fw grayiconecolor"></i> Corporation Stats</a>
</li>
{% if IS_CORP %}
<li>
<a {% ifequal request.path "/corp_utils/" %} class="active" {% endifequal %}
href="{% url 'auth_corp_stats' %}"><i
class="fa fa-chain fa-fw grayiconecolor"></i> Corporation Stats</a>
</li>
{% endif %}
{% endif %}

{% if perms.auth.group_management %}
Expand Down
102 changes: 102 additions & 0 deletions stock/templates/registered/corputils.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{% extends "public/base.html" %}
{% block title %}Alliance Auth{% endblock %}
{% block page_title %}Corporation Stats{% endblock page_title %}
{% load corputils_extras %}

{% block content %}

<div class="col-lg-12">
<h1 class="page-header text-center">Corporation Member Data</h1>
{% if perms.auth.member %}
<div class="col-lg-12 container" id="example">
{% if corp %}
<div class="row">
<div class="col-lg-12">
<div class="panel panel-default">
<div class="panel-heading">Corporation</div>

<div class="panel-body">
<div class="col-lg-5 col-sm-2"><img class=
"ra-avatar img-responsive" src=
"https://image.eveonline.com/Corporation/{{ corp.corporation_id }}_128.png">
</div>

<div class="col-lg-7 col-sm-2">
<h4 class="">Name: {{ corp.corporation_name }}</h4>

<p>Ticker: {{ corp.corporation_ticker }}</p>

<p>Member: {{ corp.member_count }}</p>
</div>
</div>
</div>
</div>


<div class="col-lg-12">
<div class="panel panel-default">
<div class="panel-heading">Registered Characters</div>
<div class="panel-body">
<div style="overflow:auto;overflow-y:auto;">
<table class="table table-condensed">
<tr>
<th class="text-center">Main character</th>
<th class="text-center">Character list</th>
</tr>
{% for mainid, alts in characters_with_api.items %}
<tr>
<td class="text-center">
<p class="">{{ alts|get_dict_item:mainid }}</p>
</td>
<td class="text-center">
{% for charid, name in alts.items %}
<p class="">{{ name}}</p>
{% endfor %}
</td>
</tr>
{% endfor %}
{% for mainid, alts in characters_without_api.items %}
<tr bgcolor="#DD5500">
<td class="text-center">
<p class="">{{ alts|get_dict_item:mainid }}</p>
</td>
<td class="text-center">
<p class="">No API registered!</p>
</td>
</tr>
{% endfor %}
</table>
</div>
</div>
</div>
</div>
{% else %}
<div class="container-fluid">
<div class="col-md-4 col-md-offset-4">
<div class="row">
<div class="alert alert-danger text-center" role="alert">No corporation model found. Contact your admin.</div>
</div>
</div>
</div>
</div>
{% endif %}
</div>
{% else %}
{% if IS_CORP %}
<div class="alert alert-danger" role="alert">You are not in the corporation.</div>
{% else %}
<div class="alert alert-danger" role="alert">You are not in the alliance.</div>
{% endif %}
{% endif %}
</div>
{% endblock content %}
</title>
</head>
<body>

</body>
</html>

0 comments on commit 786e573

Please sign in to comment.