diff --git a/alliance_auth/settings.py b/alliance_auth/settings.py index 3b882afb..e3d52316 100644 --- a/alliance_auth/settings.py +++ b/alliance_auth/settings.py @@ -33,7 +33,7 @@ BROKER_URL = 'amqp://guest:guest@localhost:5672/' CELERYBEAT_SCHEDULER = "djcelery.schedulers.DatabaseScheduler" # EMAIL SETTINGS -# By default setup for gmail +# By default uses the python smtpd server DOMAIN = 'https://the99eve.com' EMAIL_HOST = 'smtp.gmail.com' EMAIL_PORT = 587 diff --git a/celerytask/tasks.py b/celerytask/tasks.py index 837eebb3..245ce12d 100644 --- a/celerytask/tasks.py +++ b/celerytask/tasks.py @@ -1,5 +1,5 @@ from models import SyncGroupCache -from celery import task +from django.conf import settings from celery.task import periodic_task from celery.task.schedules import crontab from django.contrib.auth.models import User @@ -7,8 +7,9 @@ from services.managers.jabber_manager import JabberManager from services.managers.mumble_manager import MumbleManager from services.managers.forum_manager import ForumManager from authentication.models import AuthServicesInfo -from django.utils.timezone import timedelta - +from eveonline.managers import EveManager +from services.managers.eve_api_manager import EveApiManager +from util.common_task import deactivate_services def update_jabber_groups(user): syncgroups = SyncGroupCache.objects.filter(user=user) @@ -115,3 +116,33 @@ def run_databaseUpdate(): syncgroups = SyncGroupCache.objects.filter(user=user) add_to_databases(user, groups, syncgroups) remove_from_databases(user, groups, syncgroups) + + +@periodic_task(run_every=crontab(day="*/1")) +def run_api_refresh(): + users = User.objects.all() + for user in users: + api_key_pairs = EveManager.get_api_key_pairs(user.id) + if api_key_pairs: + valid_key = False + authserviceinfo = AuthServicesInfo.objects.get(user=user) + for api_key_pair in api_key_pairs: + if EveApiManager.api_key_is_valid(api_key_pair.api_id, api_key_pair.api_key): + # Update characters + characters = EveApiManager.get_characters_from_api(api_key_pair.api_id, api_key_pair.api_key) + EveManager.update_characters_from_list(characters) + valid_key = True + else: + EveManager.delete_characters_by_api_id(api_key_pair.api_id, api_key_pair.api_key) + EveManager.delete_api_key_pair(api_key_pair.api_id, api_key_pair.api_key) + + if valid_key: + # Check our main character + main_alliance_id = EveManager.get_charater_alliance_id_by_id(authserviceinfo.main_char_id) + if main_alliance_id == settings.ALLIANCE_ID: + pass + else: + deactivate_services(user) + else: + #nuke it + deactivate_services(user) \ No newline at end of file diff --git a/eveonline/managers.py b/eveonline/managers.py index 60a29833..18b92460 100644 --- a/eveonline/managers.py +++ b/eveonline/managers.py @@ -40,6 +40,19 @@ class EveManager: chars.result[char]['alliance']['name'], user, api_id) + @staticmethod + def update_characters_from_list(chars): + 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']) + 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(chars.result[char]['corp']['id']) + eve_char.alliance_id = chars.result[char]['alliance']['id'] + eve_char.alliance_name = chars.result[char]['alliance']['name'] + eve_char.save() + + @staticmethod def create_api_keypair(api_id, api_key, user_id): if not EveApiKeyPair.objects.filter(api_id=api_id).exists(): @@ -50,9 +63,9 @@ class EveManager: api_pair.save() @staticmethod - def get_api_key_pairs(user_id): - if EveApiKeyPair.objects.filter(user=user_id).exists(): - return EveApiKeyPair.objects.filter(user=user_id) + def get_api_key_pairs(user): + if EveApiKeyPair.objects.filter(user=user).exists(): + return EveApiKeyPair.objects.filter(user=user) @staticmethod def delete_api_key_pair(api_id, user_id): @@ -83,6 +96,11 @@ class EveManager: return None + @staticmethod + def get_character_by_character_name(char_name): + if EveCharacter.objects.filter(character_name=char_name).exists(): + return EveCharacter.objects.get(character_name=char_name) + @staticmethod def get_character_by_id(char_id): if EveCharacter.objects.filter(character_id=char_id).exists(): diff --git a/services/managers/eve_api_manager.py b/services/managers/eve_api_manager.py index 47c8528f..18084bfe 100644 --- a/services/managers/eve_api_manager.py +++ b/services/managers/eve_api_manager.py @@ -45,4 +45,29 @@ class EveApiManager(): except evelink.api.APIError as error: print error + return False + + @staticmethod + def get_api_info(api_id, api_key): + try: + api = evelink.api.API(api_key=(api_id, api_key)) + account = evelink.account.Account(api=api) + info = account.key_info() + return info + + except evelink.api.APIError as error: + print error + + return False + + @staticmethod + def api_key_is_valid(api_id, api_key): + try: + api = evelink.api.API(api_key=(api_id, api_key)) + account = evelink.account.Account(api=api) + info = account.status() + return True + except evelink.api.APIError as error: + return False + return False \ No newline at end of file