mirror of
https://gitlab.com/allianceauth/allianceauth.git
synced 2026-02-12 18:16:24 +01:00
Logging everywhere.
Corrected corp model updating logic to handle owning corp. Corrected typecasting during api access mask comparison. Removed error protection during user TS3 group updating to propogate errors. Relevent issues: Sorry for the spam.
This commit is contained in:
@@ -4,6 +4,9 @@ from django.conf import settings
|
||||
from services.managers.eve_api_manager import EveApiManager
|
||||
from eveonline.managers import EveManager
|
||||
|
||||
import logging
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
class UpdateKeyForm(forms.Form):
|
||||
api_id = forms.CharField(max_length=254, required=True, label="Key ID")
|
||||
@@ -12,6 +15,7 @@ class UpdateKeyForm(forms.Form):
|
||||
|
||||
def clean(self):
|
||||
if EveManager.check_if_api_key_pair_exist(self.cleaned_data['api_id']):
|
||||
logger.debug("UpdateKeyForm failed cleaning as API id %s already exists." % self.cleaned_data['api_id'])
|
||||
raise forms.ValidationError(u'API key already exist')
|
||||
|
||||
check_blue = False
|
||||
@@ -24,20 +28,24 @@ class UpdateKeyForm(forms.Form):
|
||||
if settings.BLUE_API_ACCOUNT:
|
||||
if not EveApiManager.check_api_is_type_account(self.cleaned_data['api_id'],
|
||||
self.cleaned_data['api_key']):
|
||||
logger.debug("UpdateKeyForm failed cleaning as API id %s does not meet blue api key account requirement." % self.cleaned_data['api_id'])
|
||||
raise forms.ValidationError(u'API not of type account')
|
||||
|
||||
if not EveApiManager.check_blue_api_is_full(self.cleaned_data['api_id'],
|
||||
self.cleaned_data['api_key']):
|
||||
logger.debug("UpdateKeyForm failed cleaning as API id %s does not meet minimum blue api access mask requirement." % self.cleaned_data['api_id'])
|
||||
raise forms.ValidationError(u'API supplied is too restricted. Minimum access mask is ' + str(settings.BLUE_API_MASK))
|
||||
|
||||
else:
|
||||
if settings.MEMBER_API_ACCOUNT:
|
||||
if not EveApiManager.check_api_is_type_account(self.cleaned_data['api_id'],
|
||||
self.cleaned_data['api_key']):
|
||||
logger.debug("UpdateKeyForm failed cleaning as API id %s does not meet member api key account requirement." % self.cleaned_data['api_id'])
|
||||
raise forms.ValidationError(u'API not of type account')
|
||||
|
||||
if not EveApiManager.check_api_is_full(self.cleaned_data['api_id'],
|
||||
self.cleaned_data['api_key']):
|
||||
logger.debug("UpdateKeyForm failed cleaning as API id %s does not meet minimum member api access mask requirement." % self.cleaned_data['api_id'])
|
||||
raise forms.ValidationError(u'API supplied is too restricted. Minimum access mask is ' + str(settings.MEMBER_API_MASK))
|
||||
|
||||
return self.cleaned_data
|
||||
|
||||
@@ -4,7 +4,9 @@ from models import EveAllianceInfo
|
||||
from models import EveCorporationInfo
|
||||
|
||||
from services.managers.eve_api_manager import EveApiManager
|
||||
import logging
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
class EveManager:
|
||||
def __init__(self):
|
||||
@@ -14,7 +16,7 @@ class EveManager:
|
||||
def create_character(character_id, character_name, corporation_id,
|
||||
corporation_name, corporation_ticker, alliance_id,
|
||||
alliance_name, user, api_id):
|
||||
|
||||
logger.debug("Creating model for character %s id %s" % (character_name, character_id))
|
||||
if not EveCharacter.objects.filter(character_id=character_id).exists():
|
||||
eve_char = EveCharacter()
|
||||
eve_char.character_id = character_id
|
||||
@@ -27,10 +29,13 @@ class EveManager:
|
||||
eve_char.user = user
|
||||
eve_char.api_id = api_id
|
||||
eve_char.save()
|
||||
logger.info("Created new character model %s for user" % (eve_char, user))
|
||||
else:
|
||||
logger.warn("Attempting to create existing character model with id %s" % character_id)
|
||||
|
||||
@staticmethod
|
||||
def create_characters_from_list(chars, user, api_id):
|
||||
|
||||
logger.debug("Creating characters from batch: %s" % chars)
|
||||
for char in chars.result:
|
||||
if not EveManager.check_if_character_exist(chars.result[char]['name']):
|
||||
EveManager.create_character(chars.result[char]['id'],
|
||||
@@ -45,9 +50,11 @@ class EveManager:
|
||||
|
||||
@staticmethod
|
||||
def update_characters_from_list(chars):
|
||||
logger.debug("Updating characters from list: %s" % chars.result)
|
||||
for char in chars.result:
|
||||
if EveManager.check_if_character_exist(chars.result[char]['name']):
|
||||
eve_char = EveManager.get_character_by_character_name(chars.result[char]['name'])
|
||||
logger.debug("Got existing character model %s" % eve_char)
|
||||
eve_char.corporation_id = chars.result[char]['corp']['id']
|
||||
eve_char.corporation_name = chars.result[char]['corp']['name']
|
||||
eve_char.corporation_ticker = EveApiManager.get_corporation_ticker_from_id(
|
||||
@@ -55,20 +62,28 @@ class EveManager:
|
||||
eve_char.alliance_id = chars.result[char]['alliance']['id']
|
||||
eve_char.alliance_name = chars.result[char]['alliance']['name']
|
||||
eve_char.save()
|
||||
logger.info("Updated character model %s" % eve_char)
|
||||
else:
|
||||
logger.warn("Attempting to update non-existing character model with name %s" % char['name'])
|
||||
|
||||
|
||||
@staticmethod
|
||||
def create_api_keypair(api_id, api_key, user_id):
|
||||
logger.debug("Creating api keypair id %s for user_id %s" % (api_id, user_id))
|
||||
if not EveApiKeyPair.objects.filter(api_id=api_id).exists():
|
||||
api_pair = EveApiKeyPair()
|
||||
api_pair.api_id = api_id
|
||||
api_pair.api_key = api_key
|
||||
api_pair.user = user_id
|
||||
api_pair.save()
|
||||
logger.info("Created api keypair id %s for user %s" % (api_id, user_id))
|
||||
else:
|
||||
logger.warn("Attempting to create existing api keypair with id %s" % api_id)
|
||||
|
||||
@staticmethod
|
||||
def create_alliance_info(alliance_id, alliance_name, alliance_ticker, alliance_executor_corp_id,
|
||||
alliance_member_count, is_blue):
|
||||
logger.debug("Creating alliance info for alliance %s id %s" % (alliance_name, alliance_id))
|
||||
if not EveManager.check_if_alliance_exists_by_id(alliance_id):
|
||||
alliance_info = EveAllianceInfo()
|
||||
alliance_info.alliance_id = alliance_id
|
||||
@@ -78,18 +93,26 @@ class EveManager:
|
||||
alliance_info.member_count = alliance_member_count
|
||||
alliance_info.is_blue = is_blue
|
||||
alliance_info.save()
|
||||
logger.info("Created alliance model for %s" % alliance_info)
|
||||
else:
|
||||
logger.warn("Attempting to create existing alliance model with id %s" % alliance_id)
|
||||
|
||||
@staticmethod
|
||||
def update_alliance_info(alliance_id, alliance_executor_corp_id, alliance_member_count, is_blue):
|
||||
logger.debug("Updating alliance model with id %s" % alliance_id)
|
||||
if EveManager.check_if_alliance_exists_by_id(alliance_id):
|
||||
alliance_info = EveAllianceInfo.objects.get(alliance_id=alliance_id)
|
||||
alliance_info.executor_corp_id = alliance_executor_corp_id
|
||||
alliance_info.member_count = alliance_member_count
|
||||
alliance_info.is_blue = is_blue
|
||||
alliance_info.save()
|
||||
logger.info("Updated alliance model %s" % alliance_info)
|
||||
else:
|
||||
logger.warn("Attempting to update non-existing alliance model with id %s" % alliance_id)
|
||||
|
||||
@staticmethod
|
||||
def create_corporation_info(corp_id, corp_name, corp_ticker, corp_member_count, is_blue, alliance):
|
||||
logger.debug("Creating corp info for corp %s id %s" % (corp_name, corp_id))
|
||||
if not EveManager.check_if_corporation_exists_by_id(corp_id):
|
||||
corp_info = EveCorporationInfo()
|
||||
corp_info.corporation_id = corp_id
|
||||
@@ -100,45 +123,67 @@ class EveManager:
|
||||
if alliance:
|
||||
corp_info.alliance = alliance
|
||||
corp_info.save()
|
||||
logger.info("Created corp model for %s" % corp)
|
||||
else:
|
||||
logger.warn("Attempting to create existing corp model with id %s" % corp_id)
|
||||
|
||||
@staticmethod
|
||||
def update_corporation_info(corp_id, corp_member_count, alliance, is_blue):
|
||||
logger.debug("Updating corp model with id %s" % corp_id)
|
||||
if EveManager.check_if_corporation_exists_by_id(corp_id):
|
||||
corp_info = EveCorporationInfo.objects.get(corporation_id=corp_id)
|
||||
corp_info.member_count = corp_member_count
|
||||
corp_info.alliance = alliance
|
||||
corp_info.is_blue = is_blue
|
||||
corp_info.save()
|
||||
logger.info("Updated corp model %s" % corp_info)
|
||||
else:
|
||||
logger.warn("Attempting to update non-existant corp model with id %s" % corp_id)
|
||||
|
||||
@staticmethod
|
||||
def get_api_key_pairs(user):
|
||||
if EveApiKeyPair.objects.filter(user=user).exists():
|
||||
logger.debug("Returning api keypairs for user %s" % user)
|
||||
return EveApiKeyPair.objects.filter(user=user)
|
||||
else:
|
||||
logger.debug("No api keypairs found for user %s" % user)
|
||||
|
||||
@staticmethod
|
||||
def check_if_api_key_pair_exist(api_id):
|
||||
if EveApiKeyPair.objects.filter(api_id=api_id).exists():
|
||||
logger.debug("Determined api id %s exists." % api_id)
|
||||
return True
|
||||
else:
|
||||
logger.debug("Determined api id %s does not exist." % api_id)
|
||||
return False
|
||||
|
||||
@staticmethod
|
||||
def delete_api_key_pair(api_id, user_id):
|
||||
logger.debug("Deleting api id %s" % api_id)
|
||||
if EveApiKeyPair.objects.filter(api_id=api_id).exists():
|
||||
# Check that its owned by our user_id
|
||||
apikeypair = EveApiKeyPair.objects.get(api_id=api_id)
|
||||
if apikeypair.user.id == user_id:
|
||||
logger.info("Deleted user %s api key id %s" % (user_id, api_id))
|
||||
apikeypair.delete()
|
||||
else:
|
||||
logger.error("Unable to delete api: user mismatch: key id %s not owned by %s" % (api_id, user_id))
|
||||
else:
|
||||
logger.warn("Unable to locate api id %s - cannot delete." % api_id)
|
||||
|
||||
@staticmethod
|
||||
def delete_characters_by_api_id(api_id, user_id):
|
||||
logger.debug("Deleting all characters associated with api id %s" % api_id)
|
||||
if EveCharacter.objects.filter(api_id=api_id).exists():
|
||||
# Check that its owned by our user_id
|
||||
characters = EveCharacter.objects.filter(api_id=api_id)
|
||||
|
||||
logger.debug("Got user %s characters %s from api %s" % (user_id, characters, api_id))
|
||||
for char in characters:
|
||||
if char.user.id == user_id:
|
||||
logger.info("Deleting user %s character %s from api %s" % (user_id, char, api_id))
|
||||
char.delete()
|
||||
else:
|
||||
logger.error("Unable to delete character %s by api %s: user mismatch: character not owned by %s" % (char, api_id, user_id))
|
||||
|
||||
@staticmethod
|
||||
def check_if_character_exist(char_name):
|
||||
|
||||
@@ -21,27 +21,34 @@ from eveonline.models import EveCharacter
|
||||
from eveonline.models import EveApiKeyPair
|
||||
from authentication.models import AuthServicesInfo
|
||||
|
||||
import logging
|
||||
|
||||
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')
|
||||
remove_user_from_group(user, settings.DEFAULT_AUTH_GROUP)
|
||||
remove_user_from_group(user,
|
||||
generate_corp_group_name(
|
||||
EveManager.get_character_by_id(char_id).corporation_name))
|
||||
deactivate_services(user)
|
||||
logger.info("Disabled member %s" % user)
|
||||
|
||||
|
||||
def disable_blue_member(user):
|
||||
logger.debug("Disabling blue user %s" % user)
|
||||
remove_member_permission(user, 'blue_member')
|
||||
remove_user_from_group(user, settings.DEFAULT_BLUE_GROUP)
|
||||
deactivate_services(user)
|
||||
|
||||
logger.info("Disabled blue user %s" % user)
|
||||
|
||||
@login_required
|
||||
def add_api_key(request):
|
||||
logger.debug("add_api_key called by user %s" % request.user)
|
||||
if request.method == 'POST':
|
||||
form = UpdateKeyForm(request.POST)
|
||||
|
||||
logger.debug("Request type POST with form valid: %s" % form.is_valid())
|
||||
if form.is_valid():
|
||||
EveManager.create_api_keypair(form.cleaned_data['api_id'],
|
||||
form.cleaned_data['api_key'],
|
||||
@@ -51,8 +58,12 @@ def add_api_key(request):
|
||||
characters = EveApiManager.get_characters_from_api(form.cleaned_data['api_id'],
|
||||
form.cleaned_data['api_key'])
|
||||
EveManager.create_characters_from_list(characters, request.user, form.cleaned_data['api_id'])
|
||||
logger.info("Successfully processed api add form for user %s" % request.user)
|
||||
return HttpResponseRedirect("/api_key_management/")
|
||||
else:
|
||||
logger.debug("Form invalid: returning to form.")
|
||||
else:
|
||||
logger.debug("Providing empty update key form for user %s" % request.user)
|
||||
form = UpdateKeyForm()
|
||||
context = {'form': form, 'apikeypairs': EveManager.get_api_key_pairs(request.user.id)}
|
||||
return render_to_response('registered/addapikey.html', context,
|
||||
@@ -61,6 +72,7 @@ def add_api_key(request):
|
||||
|
||||
@login_required
|
||||
def api_key_management_view(request):
|
||||
logger.debug("api_key_management_view called by user %s" % request.user)
|
||||
context = {'apikeypairs': EveManager.get_api_key_pairs(request.user.id)}
|
||||
|
||||
return render_to_response('registered/apikeymanagment.html', context,
|
||||
@@ -69,6 +81,7 @@ def api_key_management_view(request):
|
||||
|
||||
@login_required
|
||||
def api_key_removal(request, api_id):
|
||||
logger.debug("api_key_removal called by user %s for api id %s" % (request.user, api_id))
|
||||
authinfo = AuthServicesInfoManager.get_auth_service_info(request.user)
|
||||
# Check if our users main id is in the to be deleted characters
|
||||
characters = EveManager.get_characters_by_owner_id(request.user.id)
|
||||
@@ -76,20 +89,23 @@ def api_key_removal(request, api_id):
|
||||
for character in characters:
|
||||
if character.character_id == authinfo.main_char_id:
|
||||
if character.api_id == api_id:
|
||||
# TODO: Remove servies also
|
||||
# TODO: Remove services also
|
||||
if authinfo.is_blue:
|
||||
logger.debug("Blue user %s deleting api for main character. Disabling." % request.user)
|
||||
disable_blue_member(request.user)
|
||||
else:
|
||||
logger.debug("User %s deleting api for main character. Disabling." % request.user)
|
||||
disable_member(request.user, authinfo.main_char_id)
|
||||
|
||||
EveManager.delete_api_key_pair(api_id, request.user.id)
|
||||
EveManager.delete_characters_by_api_id(api_id, request.user.id)
|
||||
|
||||
logger.info("Succesfully processed api delete request by user %s for api %s" % (request.user, api_id))
|
||||
return HttpResponseRedirect("/api_key_management/")
|
||||
|
||||
|
||||
@login_required
|
||||
def characters_view(request):
|
||||
logger.debug("characters_view called by user %s" % request.user)
|
||||
render_items = {'characters': EveManager.get_characters_by_owner_id(request.user.id),
|
||||
'authinfo': AuthServicesInfoManager.get_auth_service_info(request.user)}
|
||||
return render_to_response('registered/characters.html', render_items, context_instance=RequestContext(request))
|
||||
@@ -97,30 +113,34 @@ def characters_view(request):
|
||||
|
||||
@login_required
|
||||
def main_character_change(request, char_id):
|
||||
logger.debug("main_character_change called by user %s for character id %s" % (request.user, char_id))
|
||||
if EveManager.check_if_character_owned_by_user(char_id, request.user):
|
||||
previousmainid = AuthServicesInfoManager.get_auth_service_info(request.user).main_char_id
|
||||
AuthServicesInfoManager.update_main_char_Id(char_id, request.user)
|
||||
# Check if character is in the alliance
|
||||
character_info = EveManager.get_character_by_id(char_id)
|
||||
corporation_info = EveManager.get_corporation_info_by_id(character_info.corporation_id)
|
||||
|
||||
logger.debug("User %s changing main character to %s in corp %s" % (request.user, character_info, corporation_info))
|
||||
if (settings.IS_CORP and EveManager.get_charater_corporation_id_by_id(char_id) == settings.CORP_ID) or (not settings.IS_CORP and EveManager.get_charater_alliance_id_by_id(char_id) == settings.ALLIANCE_ID):
|
||||
add_member_permission(request.user, 'member')
|
||||
add_user_to_group(request.user, settings.DEFAULT_AUTH_GROUP)
|
||||
add_user_to_group(request.user,
|
||||
generate_corp_group_name(EveManager.get_character_by_id(char_id).corporation_name))
|
||||
logger.info("User %s transitioned to full member by chaning main character to %s" % (request.user, character_info))
|
||||
|
||||
elif corporation_info != None:
|
||||
if corporation_info.is_blue:
|
||||
add_member_permission(request.user, 'blue_member')
|
||||
add_user_to_group(request.user, settings.DEFAULT_BLUE_GROUP)
|
||||
AuthServicesInfoManager.update_is_blue(True, request.user)
|
||||
logger.info("User %s transitioned to blue by changing main character to %s" % (request.user, character_info))
|
||||
else:
|
||||
if check_if_user_has_permission(request.user, 'member'):
|
||||
disable_member(request.user, previousmainid)
|
||||
|
||||
if check_if_user_has_permission(request.user, 'blue_member'):
|
||||
disable_blue_member(request.user)
|
||||
logger.info("User %s disabled as new main character %s not member nor blue." % (request.user, character_info))
|
||||
else:
|
||||
# TODO: disable serivces
|
||||
if check_if_user_has_permission(request.user, 'member'):
|
||||
@@ -128,6 +148,7 @@ def main_character_change(request, char_id):
|
||||
|
||||
if check_if_user_has_permission(request.user, 'blue_member'):
|
||||
disable_blue_member(request.user)
|
||||
logger.info("User %s disabled as new main character %s does not have corp model to check." % (request.user, character_indo))
|
||||
|
||||
return HttpResponseRedirect("/characters")
|
||||
return HttpResponseRedirect("/characters")
|
||||
@@ -136,14 +157,18 @@ def main_character_change(request, char_id):
|
||||
@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:
|
||||
@@ -157,4 +182,8 @@ def corp_stats_view(request):
|
||||
"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))
|
||||
|
||||
Reference in New Issue
Block a user