Пример #1
0
def run_alliance_corp_update():
    # I am not proud of this block of code
    if EveApiManager.check_if_api_server_online():
        # Get Corp info
        corp_info = EveApiManager.get_corporation_information(settings.ALLIANCE_ID, settings.ALLIANCE_EXEC_CORP_ID,
                                                              settings.ALLIANCE_EXEC_CORP_VCODE)

        # Dummy alliance info
        if not EveManager.check_if_alliance_exists_by_id(settings.ALLIANCE_ID):
            EveManager.create_alliance_info(settings.ALLIANCE_ID, corp_info['name'], corp_info['ticker'],
                                            settings.ALLIANCE_ID, 1, False)
        else:
            # Update semi fake data no real point
            EveManager.update_alliance_info(settings.ALLIANCE_ID, settings.ALLIANCE_ID,
                                            1, False)

        # Get the fake data we just added / updated
        alliance = EveManager.get_alliance_info_by_id(settings.ALLIANCE_ID)

        # Only one corp add or update
        if not EveManager.check_if_corporation_exists_by_id(corp_info['id']):
            EveManager.create_corporation_info(corp_info['id'], corp_info['name'], corp_info['ticker'],
                                               corp_info['members']['current'], False, alliance)
        else:
            EveManager.update_corporation_info(corp_info['id'], corp_info['members']['current'], alliance,
                                               False)
Пример #2
0
def run_api_refresh():
    if not EveApiManager.check_if_api_server_online():
        logger.warn("Aborted scheduled API key refresh: API server unreachable")
        return

    for u in User.objects.all():
        refresh_user_apis.delay(u)
Пример #3
0
def run_api_refresh():
    if not EveApiManager.check_if_api_server_online():
        logger.warn("Aborted scheduled API key refresh: API server unreachable")
        return

    for u in User.objects.all():
        refresh_user_apis.delay(u.pk)
Пример #4
0
def run_api_refresh():
    users = User.objects.all()
    logger.debug("Running api refresh on %s users." % len(users))
    for user in users:
        # Check if the api server is online
        logger.debug("Running api refresh for user %s" % user)
        if EveApiManager.check_if_api_server_online():
            api_key_pairs = EveManager.get_api_key_pairs(user.id)
            logger.debug("User %s has api key pairs %s" % (user, api_key_pairs))
            if api_key_pairs:
                authserviceinfo, c = AuthServicesInfo.objects.get_or_create(user=user)
                logger.debug("User %s has api keys. Proceeding to refresh." % user)
                for api_key_pair in api_key_pairs:
                    try:
                        refresh_api(api_key_pair)
                    except evelink.api.APIError as e:
                        if int(e.code) >= 500:
                            logger.error("EVE API servers encountered error %s updating %s" % (e.code, api_key_pair))
                        elif int(e.code) == 221:
                            logger.warn("API server hiccup %s while updating %s" % (e.code, api_key_pair))
                        else:
                            logger.info("API key %s failed update with error code %s" % (api_key_pair.api_id, e.code))
                            EveManager.delete_characters_by_api_id(api_key_pair.api_id, user.id)
                            EveManager.delete_api_key_pair(api_key_pair.api_id, user.id)
                            notify(user, "API Key Deleted", message="Your API key ID %s failed validation with code %s. It and its associated characters have been deleted." % (api_key_pair.api_id, e.code), level="danger")
                # Check our main character
                if EveCharacter.objects.filter(character_id=authserviceinfo.main_char_id).exists() is False:
                    logger.info("User %s main character id %s missing model. Clearning main character." % (user, authserviceinfo.main_char_id))
                    authserviceinfo.main_char_id = ''
                    authserviceinfo.save()
                    notify(user, "Main Character Reset", message="Your specified main character no longer has a model.\nThis could be the result of an invalid API\nYour main character ID has been reset.", level="warn")
        set_state(user)
Пример #5
0
def run_api_refresh():
    users = User.objects.all()
    logger.debug("Running api refresh on %s users." % len(users))
    for user in users:
        # Check if the api server is online
        logger.debug("Running api refresh for user %s" % user)
        if EveApiManager.check_if_api_server_online():
            api_key_pairs = EveManager.get_api_key_pairs(user.id)
            logger.debug("User %s has api key pairs %s" % (user, api_key_pairs))
            if api_key_pairs:
                authserviceinfo, c = AuthServicesInfo.objects.get_or_create(user=user)
                logger.debug("User %s has api keys. Proceeding to refresh." % user)
                for api_key_pair in api_key_pairs:
                    try:
                        refresh_api(api_key_pair)
                    except evelink.api.APIError as e:
                        if int(e.code) >= 500:
                            logger.error("EVE API servers encountered error %s updating %s" % (e.code, api_key_pair))
                        elif int(e.code) == 221:
                            logger.warn("API server hiccup %s while updating %s" % (e.code, api_key_pair))
                        else:
                            logger.info("API key %s failed update with error code %s" % (api_key_pair.api_id, e.code))
                            EveManager.delete_characters_by_api_id(api_key_pair.api_id, user.id)
                            EveManager.delete_api_key_pair(api_key_pair.api_id, user.id)
                            notify(user, "API Key Deleted", message="Your API key ID %s failed validation with code %s. It and its associated characters have been deleted." % (api_key_pair.api_id, e.code), level="danger")
                # Check our main character
                if EveCharacter.objects.filter(character_id=authserviceinfo.main_char_id).exists() is False:
                    logger.info("User %s main character id %s missing model. Clearning main character." % (user, authserviceinfo.main_char_id))
                    authserviceinfo.main_char_id = ''
                    authserviceinfo.save()
                    notify(user, "Main Character Reset", message="Your specified main character no longer has a model.\nThis could be the result of an invalid API\nYour main character ID has been reset.", level="warn")
        set_state(user)
Пример #6
0
def run_api_refresh():

    users = User.objects.all()

    for user in users:
        # Check if the api server is online
        if EveApiManager.check_if_api_server_online():
            api_key_pairs = EveManager.get_api_key_pairs(user.id)
            if api_key_pairs:
                authserviceinfo = AuthServicesInfo.objects.get(user=user)

                if settings.DEBUG:
                    print 'Running update on user: '******'Running on ' + api_key_pair.api_id + ':' + api_key_pair.api_key
                        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)
                            # Check our main character
                            character = EveManager.get_character_by_id(authserviceinfo.main_char_id)
                            main_alliance_id = EveManager.get_charater_corporation_id_by_id(
                                authserviceinfo.main_char_id)

                            # NPC corps return as None
                            if main_alliance_id is None or int(main_alliance_id) != int(settings.ALLIANCE_ID):
                                if settings.DEBUG:
                                    print 'Not in Corp'

                                SlackManager.send_director('API ERROR: ' + user.username +
                                                           ' Not in corp.\n\tServices disabled.\n\tAPI removed.')

                                remove_user_all_groups(user)
                                deactivate_services(user)
                                EveManager.delete_characters_by_api_id(api_key_pair.api_id, user.id)
                                EveManager.delete_api_key_pair(api_key_pair.api_id, user.id)
                        else:
                            if settings.DEBUG:
                                print 'Bad API Deleting character and api for ' + user.username

                            SlackManager.send_director('API ERROR: Bad API for user ' + user.username +
                                                       '\n\tServices disabled.\n\tAPI removed.')

                            remove_user_all_groups(user)
                            deactivate_services(user)
                            EveManager.delete_characters_by_api_id(api_key_pair.api_id, user.id)
                            EveManager.delete_api_key_pair(api_key_pair.api_id, user.id)

                else:
                    if settings.DEBUG:
                        print 'No main_char_id set'
Пример #7
0
def run_api_refresh():
    users = User.objects.all()

    for user in users:
        # Check if the api server is online
        if EveApiManager.check_if_api_server_online():
            api_key_pairs = EveManager.get_api_key_pairs(user.id)
            if api_key_pairs:
                valid_key = False
                authserviceinfo = AuthServicesInfo.objects.get(user=user)

                print 'Running update on user: '******'Running on ' + api_key_pair.api_id + ':' + api_key_pair.api_key
                            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, user)
                                EveManager.delete_api_key_pair(
                                    api_key_pair.api_id, api_key_pair.api_key)

                        if valid_key:
                            # Check our main character
                            character = EveManager.get_character_by_id(
                                authserviceinfo.main_char_id)
                            corp = EveManager.get_corporation_info_by_id(
                                character.corporation_id)
                            main_alliance_id = EveManager.get_charater_alliance_id_by_id(
                                authserviceinfo.main_char_id)
                            if main_alliance_id == settings.ALLIANCE_ID:
                                pass
                            elif corp is not None:
                                if corp.is_blue is not True:
                                    deactivate_services(user)
                            else:
                                deactivate_services(user)
                        else:
                            # nuke it
                            deactivate_services(user)
                else:
                    print 'No main_char_id set'
Пример #8
0
def run_databaseUpdate():
    users = User.objects.all()
    for user in users:
        groups = user.groups.all()
        syncgroups = SyncGroupCache.objects.filter(user=user)
        add_to_databases(user, groups, syncgroups)
        remove_from_databases(user, groups, syncgroups)

    # no point if slack isn't enabled
    # this isn't really going to run every minute
    # cache will stop it
    if SlackManager.enabled():
        if EveApiManager.check_if_api_server_online():
            kill_api = EveApiManager.get_corp_kills(settings.ALLIANCE_EXEC_CORP_ID, settings.ALLIANCE_EXEC_CORP_VCODE)
            for kill in kill_api.result:
                if not EveManager.check_corporation_kill(kill):
                    # if sent save to db
                    if SlackManager.send_kill(kill):
                        EveManager.create_corporation_kill(kill)
Пример #9
0
def run_api_refresh():
    users = User.objects.all()

    for user in users:
        # Check if the api server is online
        if EveApiManager.check_if_api_server_online():
            api_key_pairs = EveManager.get_api_key_pairs(user.id)
            if api_key_pairs:
                valid_key = False
                authserviceinfo = AuthServicesInfo.objects.get(user=user)

                print 'Running update on user: '******'Running on ' + api_key_pair.api_id + ':' + api_key_pair.api_key
                            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, user)
                                EveManager.delete_api_key_pair(api_key_pair.api_id, api_key_pair.api_key)

                        if valid_key:
                            # Check our main character
                            character = EveManager.get_character_by_id(authserviceinfo.main_char_id)
                            corp = EveManager.get_corporation_info_by_id(character.corporation_id)
                            main_alliance_id = EveManager.get_charater_alliance_id_by_id(authserviceinfo.main_char_id)
                            if main_alliance_id == settings.ALLIANCE_ID:
                                pass
                            elif corp is not None:
                                if corp.is_blue is not True:
                                    deactivate_services(user)
                            else:
                                deactivate_services(user)
                        else:
                            # nuke it
                            deactivate_services(user)
                else:
                    print 'No main_char_id set'
Пример #10
0
def run_api_refresh():
    users = User.objects.all()
    logger.debug("Running api refresh on %s users." % len(users))
    for user in users:
        # Check if the api server is online
        logger.debug("Running api refresh for user %s" % user)
        if EveApiManager.check_if_api_server_online():
            api_key_pairs = EveManager.get_api_key_pairs(user.id)
            logger.debug("User %s has api key pairs %s" % (user, api_key_pairs))
            if api_key_pairs:
                authserviceinfo, c = AuthServicesInfo.objects.get_or_create(user=user)
                logger.debug("User %s has api keys. Proceeding to refresh." % user)
                for api_key_pair in api_key_pairs:
                    refresh_api(api_key_pair)
                # Check our main character
                if EveCharacter.objects.filter(character_id=authserviceinfo.main_char_id).exists() is False:
                    logger.info("User %s main character id %s missing model. Clearning main character." % (user, authserviceinfo.main_char_id))
                    authserviceinfo.main_char_id = ''
                    authserviceinfo.save()
        set_state(user)
Пример #11
0
def run_api_refresh():
    users = User.objects.all()
    logger.debug("Running api refresh on %s users." % len(users))
    for user in users:
        # Check if the api server is online
        logger.debug("Running api refresh for user %s" % user)
        if EveApiManager.check_if_api_server_online():
            api_key_pairs = EveManager.get_api_key_pairs(user.id)
            logger.debug("User %s has api key pairs %s" % (user, api_key_pairs))
            if api_key_pairs:
                authserviceinfo, c = AuthServicesInfo.objects.get_or_create(user=user)
                logger.debug("User %s has api keys. Proceeding to refresh." % user)
                for api_key_pair in api_key_pairs:
                    refresh_api(api_key_pair)
                # Check our main character
                if EveCharacter.objects.filter(character_id=authserviceinfo.main_char_id).exists() is False:
                    logger.info("User %s main character id %s missing model. Clearning main character." % (user, authserviceinfo.main_char_id))
                    authserviceinfo.main_char_id = ''
                    authserviceinfo.save()
                    notify(user, "Main Character Reset", message="Your specified main character no longer has a model.\nThis could be the result of an invalid API\nYour main character ID has been reset." % api_key_pair.api_id, level="warn")
        set_state(user)
Пример #12
0
def run_alliance_corp_update():
    # I am not proud of this block of code
    if EveApiManager.check_if_api_server_online():

        # Updated alliance info
        alliance_info = EveApiManager.get_alliance_information(settings.ALLIANCE_ID)

        # Populate alliance info
        if not EveManager.check_if_alliance_exists_by_id(settings.ALLIANCE_ID):
            EveManager.create_alliance_info(settings.ALLIANCE_ID, alliance_info['name'], alliance_info['ticker'],
                                            alliance_info['executor_id'], alliance_info['member_count'], False)

        alliance = EveManager.get_alliance_info_by_id(settings.ALLIANCE_ID)

        # Create the corps in the alliance
        for alliance_corp in alliance_info['member_corps']:
            corpinfo = EveApiManager.get_corporation_information(alliance_corp)
            if not EveManager.check_if_corporation_exists_by_id(corpinfo['id']):
                EveManager.create_corporation_info(corpinfo['id'], corpinfo['name'], corpinfo['ticker'],
                                                   corpinfo['members']['current'], False, alliance)

        # Create the corps in the standings
        alliance_standings = EveApiManager.get_alliance_standings()
        if alliance_standings:
            for standing_id in EveApiManager.get_alliance_standings()['alliance']:
                if int(alliance_standings['alliance'][standing_id]['standing']) >= settings.ALLIANCE_BLUE_STANDING:
                    if EveApiManager.check_if_id_is_character(standing_id):
                        pass
                    elif EveApiManager.check_if_id_is_corp(standing_id):
                        corpinfo = EveApiManager.get_corporation_information(standing_id)
                        if not EveManager.check_if_corporation_exists_by_id(standing_id):
                            EveManager.create_corporation_info(corpinfo['id'], corpinfo['name'], corpinfo['ticker'],
                                                               corpinfo['members']['current'], True, None)
                    else:
                        # Alliance id create corps
                        blue_alliance_info = EveApiManager.get_alliance_information(standing_id)

                        if not EveManager.check_if_alliance_exists_by_id(standing_id):
                            EveManager.create_alliance_info(standing_id, blue_alliance_info['name'],
                                                            blue_alliance_info['ticker'],
                                                            blue_alliance_info['executor_id'],
                                                            blue_alliance_info['member_count'], True)

                        blue_alliance = EveManager.get_alliance_info_by_id(standing_id)

                        for blue_alliance_corp in blue_alliance_info['member_corps']:
                            blue_info = EveApiManager.get_corporation_information(blue_alliance_corp)
                            if not EveManager.check_if_corporation_exists_by_id(blue_info['id']):
                                EveManager.create_corporation_info(blue_info['id'], blue_info['name'],
                                                                   blue_info['ticker'],
                                                                   blue_info['members']['current'], True, blue_alliance)

        # Update all allinace info's
        for all_alliance_info in EveManager.get_all_alliance_info():
            all_alliance_api_info = EveApiManager.get_alliance_information(all_alliance_info.alliance_id)
            if all_alliance_info.alliance_id == settings.ALLIANCE_ID:
                EveManager.update_alliance_info(all_alliance_api_info['id'], all_alliance_api_info['executor_id'],
                                                all_alliance_api_info['member_count'], False)
            else:
                if 'alliance' in alliance_standings:
                    if int(all_alliance_info.alliance_id) in alliance_standings['alliance']:
                        if int(alliance_standings['alliance'][int(all_alliance_info.alliance_id)][
                            'standing']) >= settings.ALLIANCE_BLUE_STANDING:
                            EveManager.update_alliance_info(all_alliance_api_info['id'],
                                                            all_alliance_api_info['executor_id'],
                                                            all_alliance_api_info['member_count'], True)
                        else:
                            EveManager.update_alliance_info(all_alliance_api_info['id'],
                                                            all_alliance_api_info['executor_id'],
                                                            all_alliance_api_info['member_count'], False)

                    else:
                        EveManager.update_alliance_info(all_alliance_api_info['id'],
                                                        all_alliance_api_info['executor_id'],
                                                        all_alliance_api_info['member_count'], False)
                else:
                    EveManager.update_alliance_info(all_alliance_api_info['id'],
                                                    all_alliance_api_info['executor_id'],
                                                    all_alliance_api_info['member_count'], False)

        # Update corp infos
        for all_corp_info in EveManager.get_all_corporation_info():
            alliance = None
            corpinfo = EveApiManager.get_corporation_information(all_corp_info.corporation_id)
            if corpinfo['alliance']['id'] is not None:
                alliance = EveManager.get_alliance_info_by_id(corpinfo['alliance']['id'])

            if alliance is not None and all_corp_info.alliance is not None:

                if all_corp_info.alliance.alliance_id == settings.ALLIANCE_ID:
                    EveManager.update_corporation_info(corpinfo['id'], corpinfo['members']['current'], alliance, False)
                else:
                    if int(alliance.alliance_id) in alliance_standings['alliance']:
                        if int(alliance_standings['alliance'][int(alliance.alliance_id)][
                            'standing']) >= settings.ALLIANCE_BLUE_STANDING:
                            EveManager.update_corporation_info(corpinfo['id'], corpinfo['members']['current'], alliance,
                                                               True)
                        else:
                            EveManager.update_corporation_info(corpinfo['id'], corpinfo['members']['current'], alliance,
                                                               False)
                    else:
                        EveManager.update_corporation_info(corpinfo['id'], corpinfo['members']['current'], alliance,
                                                           False)
            else:
                if int(all_corp_info.corporation_id) in alliance_standings['alliance']:
                    if int(alliance_standings['alliance'][int(all_corp_info.corporation_id)][
                        'standing']) >= settings.ALLIANCE_BLUE_STANDING:
                        EveManager.update_corporation_info(corpinfo['id'], corpinfo['members']['current'], None, True)
                    else:
                        EveManager.update_corporation_info(corpinfo['id'], corpinfo['members']['current'], None, False)
                else:
                    EveManager.update_corporation_info(corpinfo['id'], corpinfo['members']['current'], None, False)

        # Nuke the none believers
        # Check the corps
        for all_corp_info in EveManager.get_all_corporation_info():
            if all_corp_info.alliance is not None:
                if all_corp_info.alliance.alliance_id is not None:
                    if all_corp_info.alliance.alliance_id != settings.ALLIANCE_ID:
                        if not all_corp_info.is_blue:
                            all_corp_info.delete()
            else:
                if not all_corp_info.is_blue:
                    all_corp_info.delete()

        # Check the alliances
        for all_alliance_info in EveManager.get_all_alliance_info():
            if all_alliance_info.alliance_id != settings.ALLIANCE_ID:
                if all_alliance_info.is_blue is not True:
                    all_alliance_info.delete()
Пример #13
0
def run_corp_update():
    if EveApiManager.check_if_api_server_online() is False:
        logger.warn("Aborted updating corp and alliance models: API server unreachable")
        return
    standing_level = 'alliance'
    try:
        # get corp info for owning corp if required
        ownercorpinfo = {}
        if settings.IS_CORP:
            standing_level = 'corp'
            logger.debug("Getting information for owning corp with id %s" % settings.CORP_ID)
            ownercorpinfo = EveApiManager.get_corporation_information(settings.CORP_ID)
            if not ownercorpinfo:
                logger.error("Failed to retrieve corp info for owning corp id %s - bad corp id?" % settings.CORP_ID)
                return
    
        # check if we need to update an alliance model
        alliance_id = ''
        if ownercorpinfo and ownercorpinfo['alliance']['id']:
            alliance_id = ownercorpinfo['alliance']['id']
        elif settings.IS_CORP is False:
            alliance_id = settings.ALLIANCE_ID
    
        # get and create alliance info for owning alliance if required
        alliance = None
        if alliance_id:
            logger.debug("Getting information for owning alliance with id %s" % alliance_id)
            ownerallianceinfo = EveApiManager.get_alliance_information(alliance_id)
            if not ownerallianceinfo:
                logger.error("Failed to retrieve corp info for owning alliance id %s - bad alliance id?" % alliance_id)
                return
            if EveAllianceInfo.objects.filter(alliance_id=ownerallianceinfo['id']).exists():
                logger.debug("Updating existing owner alliance model with id %s" % alliance_id)
                EveManager.update_alliance_info(ownerallianceinfo['id'], ownerallianceinfo['executor_id'], ownerallianceinfo['member_count'], False)
            else:
                populate_alliance(alliance_id)
                alliance = EveAllianceInfo.objects.get(alliance_id=alliance_id)
    
        # create corp info for owning corp if required
        if ownercorpinfo:
            if EveCorporationInfo.objects.filter(corporation_id=ownercorpinfo['id']).exists():
                logger.debug("Updating existing owner corp model with id %s" % ownercorpinfo['id'])
                EveManager.update_corporation_info(ownercorpinfo['id'], ownercorpinfo['members']['current'], alliance, False)
            else:
                logger.info("Creating model for owning corp with id %s" % ownercorpinfo['id'])
                EveManager.create_corporation_info(ownercorpinfo['id'], ownercorpinfo['name'], ownercorpinfo['ticker'],
                                                       ownercorpinfo['members']['current'], False, alliance)

        # validate and create corp models for member corps of owning alliance
        if alliance:
            current_corps = EveCorporationInfo.objects.filter(alliance=alliance)
            for corp in current_corps:
                if corp.corporation_id in ownerallianceinfo['member_corps'] is False:
                    logger.info("Corp %s is no longer in owning alliance %s - updating model." % (corp, alliance))
                    corp.alliance = None
                    corp.save()
            for member_corp in ownerallianceinfo['member_corps']:
                if EveCorporationInfo.objects.filter(corporation_id=member_corp).exists():
                    corp = EveCorporationInfo.objects.get(corporation_id=member_corp)
                    if corp.alliance == alliance is not True:
                        logger.info("Associating corp %s with owning alliance %s" % (corp, alliance))
                        corp.alliance = alliance
                        corp.save()
                else:
                    corpinfo = EveApiManager.get_corporation_information(member_corp)
                    logger.info("Creating model for owning alliance member corp with id %s" % corpinfo['id'])
                    EveManager.create_corporation_info(corpinfo['id'], corpinfo['name'], corpinfo['ticker'],
                                                       corpinfo['members']['current'], False, alliance)

        # update existing corp models
        for corp in EveCorporationInfo.objects.all():
            update_corp.delay(corp.corporation_id)

        # update existing alliance models
        for alliance in EveAllianceInfo.objects.all():
            update_alliance.delay(alliance.alliance_id)

        # create standings
        standings = EveApiManager.get_corp_standings()
        if standings:
            standings = standings[standing_level]
            for standing in standings:
                if int(standings[standing]['standing']) >= settings.BLUE_STANDING:
                    logger.debug("Standing %s meets threshold" % standing)
                    if EveApiManager.check_if_id_is_alliance(standing):
                        logger.debug("Standing %s is an alliance" % standing)
                        if EveAllianceInfo.objects.filter(alliance_id=standing).exists():
                            alliance = EveAllianceInfo.objects.get(alliance_id=standing)
                            if alliance.is_blue is not True:
                                logger.info("Updating alliance %s as blue" % alliance)
                                alliance.is_blue = True
                                alliance.save()
                        else:
                            populate_alliance(standing, blue=True)
                    elif EveApiManager.check_if_id_is_corp(standing):
                        logger.debug("Standing %s is a corp" % standing)
                        if EveCorporationInfo.objects.filter(corporation_id=standing).exists():
                            corp = EveCorporationInfo.objects.get(corporation_id=standing)
                            if corp.is_blue is not True:
                                logger.info("Updating corp %s as blue" % corp)
                                corp.is_blue = True
                                corp.save()
                        else:
                            logger.info("Creating model for blue corp with id %s" % standing)
                            corpinfo = EveApiManager.get_corporation_information(standing)
                            corp_alliance = None
                            if EveAllianceInfo.objects.filter(alliance_id=corpinfo['alliance']['id']).exists():
                                logger.debug("New corp model for standing %s has existing alliance model" % standing)
                                corp_alliance = EveAllianceInfo.objects.get(alliance_id=corpinfo['alliance']['id'])
                            EveManager.create_corporation_info(corpinfo['id'], corpinfo['name'], corpinfo['ticker'],
                                                               corpinfo['members']['current'], True, corp_alliance)
                    

        # update alliance standings
        for alliance in EveAllianceInfo.objects.filter(is_blue=True):
            if int(alliance.alliance_id) in standings:
                if float(standings[int(alliance.alliance_id)]['standing']) < float(settings.BLUE_STANDING):
                    logger.info("Alliance %s no longer meets minimum blue standing threshold" % alliance)
                    alliance.is_blue = False
                    alliance.save()
            else:
                logger.info("Alliance %s no longer in standings" % alliance)
                alliance.is_blue = False
                alliance.save()
    
        # update corp standings
        for corp in EveCorporationInfo.objects.filter(is_blue=True):
            if int(corp.corporation_id) in standings:
                if float(standings[int(corp.corporation_id)]['standing']) < float(settings.BLUE_STANDING):
                    logger.info("Corp %s no longer meets minimum blue standing threshold" % corp)
                    corp.is_blue = False
                    corp.save()
            else:
                if corp.alliance:
                    if corp.alliance.is_blue is False:
                        logger.info("Corp %s and its alliance %s are no longer blue" % (corp, corp.alliance))
                        corp.is_blue = False
                        corp.save()
                else:
                    logger.info("Corp %s is no longer blue" % corp)
                    corp.is_blue = False
                    corp.save()

        # delete unnecessary alliance models
        for alliance in EveAllianceInfo.objects.filter(is_blue=False):
            logger.debug("Checking to delete alliance %s" % alliance)
            if settings.IS_CORP is False:
                if alliance.alliance_id == settings.ALLIANCE_ID is False:
                    logger.info("Deleting unnecessary alliance model %s" % alliance)
                    alliance.delete()
            else:
                if alliance.evecorporationinfo_set.filter(corporation_id=settings.CORP_ID).exists() is False:
                    logger.info("Deleting unnecessary alliance model %s" % alliance)
                    alliance.delete()

        # delete unnecessary corp models
        for corp in EveCorporationInfo.objects.filter(is_blue=False):
            logger.debug("Checking to delete corp %s" % corp)
            if settings.IS_CORP is False:
                if corp.alliance:
                    logger.debug("Corp %s has alliance %s" % (corp, corp.alliance))
                    if corp.alliance.alliance_id == settings.ALLIANCE_ID is False:
                        logger.info("Deleting unnecessary corp model %s" % corp)
                        corp.delete()
                else:
                    logger.info("Deleting unnecessary corp model %s" % corp)
                    corp.delete()
            else:
                if corp.corporation_id != settings.CORP_ID:
                    logger.debug("Corp %s is not owning corp" % corp)
                    if corp.alliance:
                        logger.debug("Corp %s has alliance %s" % (corp, corp.alliance))
                        if corp.alliance.evecorporationinfo_set.filter(corporation_id=settings.CORP_ID).exists() is False:
                            logger.info("Deleting unnecessary corp model %s" % corp)
                            corp.delete()
                    else:
                        logger.info("Deleting unnecessary corp model %s" % corp)
                        corp.delete()
                else:
                    logger.debug("Corp %s is owning corp" % corp)
    except evelink.api.APIError as e:
        logger.error("Model update failed with error code %s" % e.code)
Пример #14
0
def run_api_refresh():
    users = User.objects.all()
    logger.debug("Running api refresh on %s users." % len(users))
    for user in users:
        # Check if the api server is online
        logger.debug("Running api refresh for user %s" % user)
        if EveApiManager.check_if_api_server_online():
            api_key_pairs = EveManager.get_api_key_pairs(user.id)
            logger.debug("User %s has api key pairs %s" % (user, api_key_pairs))
            if api_key_pairs:
                valid_key = False
                authserviceinfo = AuthServicesInfo.objects.get(user=user)

                logger.debug("User %s has api keys. Proceeding to refresh." % user)
                if authserviceinfo.main_char_id:
                    if authserviceinfo.main_char_id != "":
                        #preserve old corp ID for corp change test on members
                        oldcorp_id = 0
                        if EveManager.get_character_by_id(authserviceinfo.main_char_id):
                            oldcorp_id = EveCharacter.objects.get(character_id=authserviceinfo.main_char_id).corporation_id
                            logger.debug("Determined user %s current main corp id %s" % (user, oldcorp_id))
                        for api_key_pair in api_key_pairs:
                            logger.debug("Running update on api key %s" % api_key_pair.api_id)
                            if EveApiManager.api_key_is_valid(api_key_pair.api_id, api_key_pair.api_key):
                                #check to ensure API key meets min spec
                                logger.info("Determined api key %s is still active." % api_key_pair.api_id)
                                still_valid = True
                                if authserviceinfo.is_blue:
                                    if settings.BLUE_API_ACCOUNT:
                                        if not EveApiManager.check_api_is_type_account(api_key_pair.api_id, api_key_pair.api_key):
                                            logger.info("Determined api key %s for blue user %s is no longer type account as requred." % (api_key_pair.api_id, user))
                                            still_valid = False
                                    if not EveApiManager.check_blue_api_is_full(api_key_pair.api_id, api_key_pair.api_key):
                                            logger.info("Determined api key %s for blue user %s no longer meets minimum access mask as required." % (api_key_pair.api_id, user))
                                            still_valid = False
                                else:
                                    if settings.MEMBER_API_ACCOUNT:
                                        if not EveApiManager.check_api_is_type_account(api_key_pair.api_id, api_key_pair.api_key):
                                            logger.info("Determined api key %s for user %s is no longer type account as required." % (api_key_pair.api_id, user))
                                            still_valid = False
                                    if not EveApiManager.check_api_is_full(api_key_pair.api_id, api_key_pair.api_key):
                                            logger.info("Determined api key %s for user %s no longer meets minimum access mask as required." % (api_key_pair.api_id, user))
                                            still_valid = False
                                if still_valid is not True:
                                    logger.debug("API key %s has failed validation; it and its characters will be deleted." % api_key_pair.api_id)
                                    EveManager.delete_characters_by_api_id(api_key_pair.api_id, user.id)
                                    EveManager.delete_api_key_pair(api_key_pair.api_id, user.id)
                                else:
                                    logger.info("Determined api key %s still meets requirements." % api_key_pair.api_id)
                                    # Update characters
                                    characters = EveApiManager.get_characters_from_api(api_key_pair.api_id,
                                                                                       api_key_pair.api_key)
                                    EveManager.update_characters_from_list(characters)
                                    new_character = False
                                    for char in characters.result:
                                        # Ensure we have a model for all characters on key
                                        if not EveManager.check_if_character_exist(characters.result[char]['name']):
                                            new_character = True
                                            logger.debug("API key %s has a new character on the account: %s" % (api_key_pair.api_id, characters.result[char]['name']))
                                    if new_character:
                                        logger.debug("Creating new character %s from api key %s" % (characters.result[char]['name'], api_key_pair.api_id))
                                        EveManager.create_characters_from_list(characters, user, api_key_pair.api_key)
                                    valid_key = True
                            else:
                                logger.debug("API key %s is no longer active; it and its characters will be deleted." % api_key_pair.api_id)
                                EveManager.delete_characters_by_api_id(api_key_pair.api_id, user.id)
                                EveManager.delete_api_key_pair(api_key_pair.api_id, user.id)

                        if valid_key:
                            # Check our main character
                            character = EveManager.get_character_by_id(authserviceinfo.main_char_id)
                            logger.debug("User %s has valid api key, checking main character %s" % (user, character))
                            if character is not None and EveManager.check_if_corporation_exists_by_id(character.corporation_id):
                                corp = EveManager.get_corporation_info_by_id(character.corporation_id)
                                main_corp_id = EveManager.get_charater_corporation_id_by_id(authserviceinfo.main_char_id)
                                main_alliance_id = EveManager.get_charater_alliance_id_by_id(authserviceinfo.main_char_id)
                                logger.debug("User %s main character %s has corp %s with alliance id %s" % (user, character, corp, main_alliance_id))
                                if (settings.IS_CORP and main_corp_id == settings.CORP_ID) or (not settings.IS_CORP and main_alliance_id == settings.ALLIANCE_ID):
                                    logger.debug("User %s corp or alliance meets membership requirements. Ensuring has required permissions and groups." % user)
                                    if not check_if_user_has_permission(user, "member"):
                                        #transition from none or blue to member
                                        if check_if_user_has_permission(user, "blue_member"):
                                            #strip blue status
                                            logger.debug("Removing user %s blue permission and group to prepare for member transition." % user)
                                            remove_member_permission(user, "blue_member")
                                            remove_user_from_group(user, settings.DEFAULT_BLUE_GROUP)
                                            AuthServicesInfoManager.update_is_blue(False, user)
                                        #add to auth group
                                        add_member_permission(user, "member")
                                        add_user_to_group(user, settings.DEFAULT_AUTH_GROUP)
                                        #add to required corp group
                                        add_user_to_group(user, generate_corp_group_name(character.corporation_name))
                                        logger.info("User %s transitioned to full member during api refresh." % user)
                                    elif corp.corporation_id != oldcorp_id:
                                        #changed corps, both corps auth'd, need to change group assignment
                                        logger.debug("User %s main character changed corp from id %s to %s, both meet membership requirements. Updating corp group." % (user, oldcorp_id, corp.corporation_id))
                                        oldcorp = EveCorporationInfo.objects.get(corporation_id=oldcorp_id)
                                        remove_user_from_group(user, generate_corp_group_name(oldcorp.corporation_name))
                                        add_user_to_group(user, generate_corp_group_name(character.corporation_name))
                                        #reset services to force new mumble names and group assignments
                                        deactivate_services(user)
                                        logger.info("User %s transferred corps from member to member. Reassigned groups." % user)
                                elif corp is not None:
                                    logger.debug("User %s main corp %s does not meet membership requirements." % (user, corp))
                                    if corp.is_blue is not True:
                                        if check_if_user_has_permission(user, "member"):
                                            #transition from member to nobody
                                            disable_alliance_member(user, authserviceinfo.main_char_id)
                                            logger.info("User %s no longer member: main has left member corp/alliance." % user)
                                        elif check_if_user_has_permission(user, "blue_member"):
                                            #transition from blue to nobody
                                            disable_blue_member(user)
                                            logger.info("User %s no longer blue: main has left blue entities." % user)
                                        else:
                                            #stay nobody, make sure no services
                                            deactivate_services(user)
                                            logger.debug("Ensured non-member %s has no services." % user)
                                    else:
                                        if check_if_user_has_permission(user, "member"):
                                            #remove auth member to prepare for member to blue transition
                                            disable_alliance_member(user, authserviceinfo.main_char_id)
                                            logger.debug("Removed user %s member group/permissions to transition to blue." % user)
                                        if not check_if_user_has_permission(user, "blue_member"):
                                            #perform nobody to blue transition
                                            add_member_permission(user, "blue_member")
                                            add_user_to_group(user, settings.DEFAULT_BLUE_GROUP)
                                            AuthServicesInfoManager.update_is_blue(True, user)
                                            logger.info("User %s transitioned to blue member during api refresh." % user)

                                else:
                                    # disable accounts with missing corp model (not blue or member)
                                    if check_if_user_has_permission(user, "member"):
                                        disable_alliance_member(user, authserviceinfo.main_char_id)
                                        logger.info("User %s disabled (previously member) as unable to check missing corp model." % user)
                                    elif check_if_user_has_permission(user, "blue_member"):
                                        disable_blue_member(user)
                                        logger.info("User %s disabled (previously blue) as unable to check missing corp model." % user)
                                    else:
                                        deactivate_services(user)
                                        logger.debug("Ensured non-member %s has no services." % user)
                            else:
                                # nuke it, the hard way
                                disable_expired_member(user)                                
                                logger.info("User %s disabled due to missing main character or corp model." % user)
                        else:
                            # disable accounts with invalid keys
                            disable_expired_member(user)
                            logger.info("User %s has no valid api keys and has been disabled." % user)

                else:
                    logger.warn("User %s has no main character id, unable to validate membership.")
Пример #15
0
def run_corp_update():
    if not EveApiManager.check_if_api_server_online():
        logger.warn("Aborted updating corp and alliance models: API server unreachable")
        return

    # generate member corps
    for corp_id in settings.STR_CORP_IDS + settings.STR_BLUE_CORP_IDS:
        is_blue = True if corp_id in settings.STR_BLUE_CORP_IDS else False
        try:
            if EveCorporationInfo.objects.filter(corporation_id=corp_id).exists():
                update_corp.apply(args=(corp_id,), kwargs={'is_blue': is_blue})
            else:
                EveManager.create_corporation(corp_id, is_blue=is_blue)
        except ObjectNotFound:
            logger.warn('Bad corp ID in settings: %s' % corp_id)

    # generate member alliances
    for alliance_id in settings.STR_ALLIANCE_IDS + settings.STR_BLUE_ALLIANCE_IDS:
        is_blue = True if alliance_id in settings.STR_BLUE_ALLIANCE_IDS else False
        try:
            if EveAllianceInfo.objects.filter(alliance_id=alliance_id).exists():
                logger.debug("Updating existing owner alliance model with id %s" % alliance_id)
                update_alliance(alliance_id, is_blue=is_blue)
            else:
                EveManager.create_alliance(alliance_id, is_blue=is_blue)
                EveManager.populate_alliance(alliance_id)
        except ObjectNotFound:
            logger.warn('Bad alliance ID in settings: %s' % alliance_id)

    # update existing corp models
    for corp in EveCorporationInfo.objects.exclude(
            corporation_id__in=settings.STR_CORP_IDS + settings.STR_BLUE_CORP_IDS):
        update_corp.delay(corp.corporation_id)

    # update existing alliance models
    for alliance in EveAllianceInfo.objects.exclude(
            alliance_id__in=settings.STR_ALLIANCE_IDS + settings.STR_BLUE_ALLIANCE_IDS):
        update_alliance.delay(alliance.alliance_id)

    try:
        # create standings
        standings = EveApiManager.get_corp_standings()
        if standings:
            standings = standings[settings.STANDING_LEVEL]
            for standing in standings:
                if float(standings[standing]['standing']) >= settings.BLUE_STANDING:
                    logger.debug("Standing %s meets threshold" % standing)
                    if EveApiManager.check_if_id_is_alliance(standing):
                        logger.debug("Standing %s is an alliance" % standing)
                        if EveAllianceInfo.objects.filter(alliance_id=standing).exists():
                            alliance = EveAllianceInfo.objects.get(alliance_id=standing)
                            if alliance.is_blue is not True:
                                logger.info("Updating alliance %s as blue" % alliance)
                                alliance.is_blue = True
                                alliance.save()
                        else:
                            EveManager.create_alliance(standing, is_blue=True)
                    elif EveApiManager.check_if_id_is_corp(standing):
                        logger.debug("Standing %s is a corp" % standing)
                        if EveCorporationInfo.objects.filter(corporation_id=standing).exists():
                            corp = EveCorporationInfo.objects.get(corporation_id=standing)
                            if corp.is_blue is not True:
                                logger.info("Updating corp %s as blue" % corp)
                                corp.is_blue = True
                                corp.save()
                        else:
                            logger.info("Creating model for blue corp with id %s" % standing)
                            EveManager.create_corporation(standing, is_blue=True)

        # update alliance standings
        for alliance in EveAllianceInfo.objects.filter(is_blue=True):
            if int(alliance.alliance_id) in standings:
                if float(standings[int(alliance.alliance_id)]['standing']) < float(settings.BLUE_STANDING):
                    logger.info("Alliance %s no longer meets minimum blue standing threshold" % alliance)
                    alliance.is_blue = False
                    alliance.save()
            elif alliance.alliance_id not in settings.STR_BLUE_ALLIANCE_IDS:
                logger.info("Alliance %s no longer in standings" % alliance)
                alliance.is_blue = False
                alliance.save()

        # update corp standings
        for corp in EveCorporationInfo.objects.filter(is_blue=True):
            if int(corp.corporation_id) in standings:
                if float(standings[int(corp.corporation_id)]['standing']) < float(settings.BLUE_STANDING):
                    logger.info("Corp %s no longer meets minimum blue standing threshold" % corp)
                    corp.is_blue = False
                    corp.save()
            elif corp.corporation_id not in settings.STR_BLUE_CORP_IDS:
                if corp.alliance:
                    if not corp.alliance.is_blue:
                        logger.info("Corp %s and its alliance %s are no longer blue" % (corp, corp.alliance))
                        corp.is_blue = False
                        corp.save()
                else:
                    logger.info("Corp %s is no longer blue" % corp)
                    corp.is_blue = False
                    corp.save()
    except evelink.api.APIError as e:
        logger.error("Model update failed with error code %s" % e.code)

    # delete unnecessary alliance models
    EveAllianceInfo.objects.filter(is_blue=False).exclude(alliance_id__in=settings.STR_ALLIANCE_IDS).delete()

    # delete unnecessary corp models
    EveCorporationInfo.objects.filter(is_blue=False).exclude(corporation_id__in=settings.STR_CORP_IDS).exclude(
        alliance__alliance_id__in=settings.STR_ALLIANCE_IDS).delete()
Пример #16
0
def run_alliance_corp_update():
    # I am not proud of this block of code
    if EveApiManager.check_if_api_server_online():

        # Updated alliance info
        alliance_info = EveApiManager.get_alliance_information(
            settings.ALLIANCE_ID)

        # Populate alliance info
        if not EveManager.check_if_alliance_exists_by_id(settings.ALLIANCE_ID):
            EveManager.create_alliance_info(settings.ALLIANCE_ID,
                                            alliance_info['name'],
                                            alliance_info['ticker'],
                                            alliance_info['executor_id'],
                                            alliance_info['member_count'],
                                            False)

        alliance = EveManager.get_alliance_info_by_id(settings.ALLIANCE_ID)

        # Create the corps in the alliance
        for alliance_corp in alliance_info['member_corps']:
            corpinfo = EveApiManager.get_corporation_information(alliance_corp)
            if not EveManager.check_if_corporation_exists_by_id(
                    corpinfo['id']):
                EveManager.create_corporation_info(
                    corpinfo['id'], corpinfo['name'], corpinfo['ticker'],
                    corpinfo['members']['current'], False, alliance)

        # Create the corps in the standings
        alliance_standings = EveApiManager.get_alliance_standings()
        if alliance_standings:
            for standing_id in EveApiManager.get_alliance_standings(
            )['alliance']:
                if int(alliance_standings['alliance'][standing_id]
                       ['standing']) >= settings.ALLIANCE_BLUE_STANDING:
                    if EveApiManager.check_if_id_is_character(standing_id):
                        pass
                    elif EveApiManager.check_if_id_is_corp(standing_id):
                        corpinfo = EveApiManager.get_corporation_information(
                            standing_id)
                        if not EveManager.check_if_corporation_exists_by_id(
                                standing_id):
                            EveManager.create_corporation_info(
                                corpinfo['id'], corpinfo['name'],
                                corpinfo['ticker'],
                                corpinfo['members']['current'], True, None)
                    else:
                        # Alliance id create corps
                        blue_alliance_info = EveApiManager.get_alliance_information(
                            standing_id)

                        if not EveManager.check_if_alliance_exists_by_id(
                                standing_id):
                            EveManager.create_alliance_info(
                                standing_id, blue_alliance_info['name'],
                                blue_alliance_info['ticker'],
                                blue_alliance_info['executor_id'],
                                blue_alliance_info['member_count'], True)

                        blue_alliance = EveManager.get_alliance_info_by_id(
                            standing_id)

                        for blue_alliance_corp in blue_alliance_info[
                                'member_corps']:
                            blue_info = EveApiManager.get_corporation_information(
                                blue_alliance_corp)
                            if not EveManager.check_if_corporation_exists_by_id(
                                    blue_info['id']):
                                EveManager.create_corporation_info(
                                    blue_info['id'], blue_info['name'],
                                    blue_info['ticker'],
                                    blue_info['members']['current'], True,
                                    blue_alliance)

        # Update all allinace info's
        for all_alliance_info in EveManager.get_all_alliance_info():
            all_alliance_api_info = EveApiManager.get_alliance_information(
                all_alliance_info.alliance_id)
            if all_alliance_info.alliance_id == settings.ALLIANCE_ID:
                EveManager.update_alliance_info(
                    all_alliance_api_info['id'],
                    all_alliance_api_info['executor_id'],
                    all_alliance_api_info['member_count'], False)
            else:
                if 'alliance' in alliance_standings:
                    if int(all_alliance_info.alliance_id
                           ) in alliance_standings['alliance']:
                        if int(alliance_standings['alliance'][int(
                                all_alliance_info.alliance_id)]['standing']
                               ) >= settings.ALLIANCE_BLUE_STANDING:
                            EveManager.update_alliance_info(
                                all_alliance_api_info['id'],
                                all_alliance_api_info['executor_id'],
                                all_alliance_api_info['member_count'], True)
                        else:
                            EveManager.update_alliance_info(
                                all_alliance_api_info['id'],
                                all_alliance_api_info['executor_id'],
                                all_alliance_api_info['member_count'], False)

                    else:
                        EveManager.update_alliance_info(
                            all_alliance_api_info['id'],
                            all_alliance_api_info['executor_id'],
                            all_alliance_api_info['member_count'], False)
                else:
                    EveManager.update_alliance_info(
                        all_alliance_api_info['id'],
                        all_alliance_api_info['executor_id'],
                        all_alliance_api_info['member_count'], False)

        # Update corp infos
        for all_corp_info in EveManager.get_all_corporation_info():
            alliance = None
            corpinfo = EveApiManager.get_corporation_information(
                all_corp_info.corporation_id)
            if corpinfo['alliance']['id'] is not None:
                alliance = EveManager.get_alliance_info_by_id(
                    corpinfo['alliance']['id'])

            if alliance is not None and all_corp_info.alliance is not None:

                if all_corp_info.alliance.alliance_id == settings.ALLIANCE_ID:
                    EveManager.update_corporation_info(
                        corpinfo['id'], corpinfo['members']['current'],
                        alliance, False)
                else:
                    if int(alliance.alliance_id
                           ) in alliance_standings['alliance']:
                        if int(alliance_standings['alliance'][int(
                                alliance.alliance_id)]['standing']
                               ) >= settings.ALLIANCE_BLUE_STANDING:
                            EveManager.update_corporation_info(
                                corpinfo['id'], corpinfo['members']['current'],
                                alliance, True)
                        else:
                            EveManager.update_corporation_info(
                                corpinfo['id'], corpinfo['members']['current'],
                                alliance, False)
                    else:
                        EveManager.update_corporation_info(
                            corpinfo['id'], corpinfo['members']['current'],
                            alliance, False)
            else:
                if int(all_corp_info.corporation_id
                       ) in alliance_standings['alliance']:
                    if int(alliance_standings['alliance'][int(
                            all_corp_info.corporation_id)]
                           ['standing']) >= settings.ALLIANCE_BLUE_STANDING:
                        EveManager.update_corporation_info(
                            corpinfo['id'], corpinfo['members']['current'],
                            None, True)
                    else:
                        EveManager.update_corporation_info(
                            corpinfo['id'], corpinfo['members']['current'],
                            None, False)
                else:
                    EveManager.update_corporation_info(
                        corpinfo['id'], corpinfo['members']['current'], None,
                        False)

        # Nuke the none believers
        # Check the corps
        for all_corp_info in EveManager.get_all_corporation_info():
            if all_corp_info.alliance is not None:
                if all_corp_info.alliance.alliance_id is not None:
                    if all_corp_info.alliance.alliance_id != settings.ALLIANCE_ID:
                        if not all_corp_info.is_blue:
                            all_corp_info.delete()
            else:
                if not all_corp_info.is_blue:
                    all_corp_info.delete()

        # Check the alliances
        for all_alliance_info in EveManager.get_all_alliance_info():
            if all_alliance_info.alliance_id != settings.ALLIANCE_ID:
                if all_alliance_info.is_blue is not True:
                    all_alliance_info.delete()
Пример #17
0
def run_corp_update():
    if EveApiManager.check_if_api_server_online() is False:
        logger.warn(
            "Aborted updating corp and alliance models: API server unreachable"
        )
        return
    standing_level = 'alliance'
    try:
        # get corp info for owning corp if required
        ownercorpinfo = {}
        if settings.IS_CORP:
            standing_level = 'corp'
            logger.debug("Getting information for owning corp with id %s" %
                         settings.CORP_ID)
            ownercorpinfo = EveApiManager.get_corporation_information(
                settings.CORP_ID)
            if not ownercorpinfo:
                logger.error(
                    "Failed to retrieve corp info for owning corp id %s - bad corp id?"
                    % settings.CORP_ID)
                return

        # check if we need to update an alliance model
        alliance_id = ''
        if ownercorpinfo and ownercorpinfo['alliance']['id']:
            alliance_id = ownercorpinfo['alliance']['id']
        elif settings.IS_CORP is False:
            alliance_id = settings.ALLIANCE_ID

        # get and create alliance info for owning alliance if required
        alliance = None
        if alliance_id:
            logger.debug("Getting information for owning alliance with id %s" %
                         alliance_id)
            ownerallianceinfo = EveApiManager.get_alliance_information(
                alliance_id)
            if not ownerallianceinfo:
                logger.error(
                    "Failed to retrieve corp info for owning alliance id %s - bad alliance id?"
                    % alliance_id)
                return
            if EveAllianceInfo.objects.filter(
                    alliance_id=ownerallianceinfo['id']).exists():
                logger.debug(
                    "Updating existing owner alliance model with id %s" %
                    alliance_id)
                EveManager.update_alliance_info(
                    ownerallianceinfo['id'], ownerallianceinfo['executor_id'],
                    ownerallianceinfo['member_count'], False)
            else:
                populate_alliance(alliance_id)
                alliance = EveAllianceInfo.objects.get(alliance_id=alliance_id)

        # create corp info for owning corp if required
        if ownercorpinfo:
            if EveCorporationInfo.objects.filter(
                    corporation_id=ownercorpinfo['id']).exists():
                logger.debug("Updating existing owner corp model with id %s" %
                             ownercorpinfo['id'])
                EveManager.update_corporation_info(
                    ownercorpinfo['id'], ownercorpinfo['members']['current'],
                    alliance, False)
            else:
                logger.info("Creating model for owning corp with id %s" %
                            ownercorpinfo['id'])
                EveManager.create_corporation_info(
                    ownercorpinfo['id'], ownercorpinfo['name'],
                    ownercorpinfo['ticker'],
                    ownercorpinfo['members']['current'], False, alliance)

        # validate and create corp models for member corps of owning alliance
        if alliance:
            current_corps = EveCorporationInfo.objects.filter(
                alliance=alliance)
            for corp in current_corps:
                if corp.corporation_id in ownerallianceinfo[
                        'member_corps'] is False:
                    logger.info(
                        "Corp %s is no longer in owning alliance %s - updating model."
                        % (corp, alliance))
                    corp.alliance = None
                    corp.save()
            for member_corp in ownerallianceinfo['member_corps']:
                if EveCorporationInfo.objects.filter(
                        corporation_id=member_corp).exists():
                    corp = EveCorporationInfo.objects.get(
                        corporation_id=member_corp)
                    if corp.alliance == alliance is not True:
                        logger.info(
                            "Associating corp %s with owning alliance %s" %
                            (corp, alliance))
                        corp.alliance = alliance
                        corp.save()
                else:
                    corpinfo = EveApiManager.get_corporation_information(
                        member_corp)
                    logger.info(
                        "Creating model for owning alliance member corp with id %s"
                        % corpinfo['id'])
                    EveManager.create_corporation_info(
                        corpinfo['id'], corpinfo['name'], corpinfo['ticker'],
                        corpinfo['members']['current'], False, alliance)

        # update existing corp models
        for corp in EveCorporationInfo.objects.all():
            update_corp.delay(corp.corporation_id)

        # update existing alliance models
        for alliance in EveAllianceInfo.objects.all():
            update_alliance.delay(alliance.alliance_id)

        # create standings
        standings = EveApiManager.get_corp_standings()
        if standings:
            standings = standings[standing_level]
            for standing in standings:
                if int(standings[standing]
                       ['standing']) >= settings.BLUE_STANDING:
                    logger.debug("Standing %s meets threshold" % standing)
                    if EveApiManager.check_if_id_is_alliance(standing):
                        logger.debug("Standing %s is an alliance" % standing)
                        if EveAllianceInfo.objects.filter(
                                alliance_id=standing).exists():
                            alliance = EveAllianceInfo.objects.get(
                                alliance_id=standing)
                            if alliance.is_blue is not True:
                                logger.info("Updating alliance %s as blue" %
                                            alliance)
                                alliance.is_blue = True
                                alliance.save()
                        else:
                            populate_alliance(standing, blue=True)
                    elif EveApiManager.check_if_id_is_corp(standing):
                        logger.debug("Standing %s is a corp" % standing)
                        if EveCorporationInfo.objects.filter(
                                corporation_id=standing).exists():
                            corp = EveCorporationInfo.objects.get(
                                corporation_id=standing)
                            if corp.is_blue is not True:
                                logger.info("Updating corp %s as blue" % corp)
                                corp.is_blue = True
                                corp.save()
                        else:
                            logger.info(
                                "Creating model for blue corp with id %s" %
                                standing)
                            corpinfo = EveApiManager.get_corporation_information(
                                standing)
                            corp_alliance = None
                            if EveAllianceInfo.objects.filter(
                                    alliance_id=corpinfo['alliance']
                                ['id']).exists():
                                logger.debug(
                                    "New corp model for standing %s has existing alliance model"
                                    % standing)
                                corp_alliance = EveAllianceInfo.objects.get(
                                    alliance_id=corpinfo['alliance']['id'])
                            EveManager.create_corporation_info(
                                corpinfo['id'], corpinfo['name'],
                                corpinfo['ticker'],
                                corpinfo['members']['current'], True,
                                corp_alliance)

        # update alliance standings
        for alliance in EveAllianceInfo.objects.filter(is_blue=True):
            if int(alliance.alliance_id) in standings:
                if float(standings[int(
                        alliance.alliance_id)]['standing']) < float(
                            settings.BLUE_STANDING):
                    logger.info(
                        "Alliance %s no longer meets minimum blue standing threshold"
                        % alliance)
                    alliance.is_blue = False
                    alliance.save()
            else:
                logger.info("Alliance %s no longer in standings" % alliance)
                alliance.is_blue = False
                alliance.save()

        # update corp standings
        for corp in EveCorporationInfo.objects.filter(is_blue=True):
            if int(corp.corporation_id) in standings:
                if float(standings[int(
                        corp.corporation_id)]['standing']) < float(
                            settings.BLUE_STANDING):
                    logger.info(
                        "Corp %s no longer meets minimum blue standing threshold"
                        % corp)
                    corp.is_blue = False
                    corp.save()
            else:
                if corp.alliance:
                    if not corp.alliance.is_blue:
                        logger.info(
                            "Corp %s and its alliance %s are no longer blue" %
                            (corp, corp.alliance))
                        corp.is_blue = False
                        corp.save()
                else:
                    logger.info("Corp %s is no longer blue" % corp)
                    corp.is_blue = False
                    corp.save()

        # delete unnecessary alliance models
        for alliance in EveAllianceInfo.objects.filter(is_blue=False):
            logger.debug("Checking to delete alliance %s" % alliance)
            if not settings.IS_CORP:
                if not alliance.alliance_id == settings.ALLIANCE_ID:
                    logger.info("Deleting unnecessary alliance model %s" %
                                alliance)
                    alliance.delete()
            else:
                if not alliance.evecorporationinfo_set.filter(
                        corporation_id=settings.CORP_ID).exists():
                    logger.info("Deleting unnecessary alliance model %s" %
                                alliance)
                    alliance.delete()

        # delete unnecessary corp models
        for corp in EveCorporationInfo.objects.filter(is_blue=False):
            logger.debug("Checking to delete corp %s" % corp)
            if not settings.IS_CORP:
                if corp.alliance:
                    logger.debug("Corp %s has alliance %s" %
                                 (corp, corp.alliance))
                    if not corp.alliance.alliance_id == settings.ALLIANCE_ID:
                        logger.info("Deleting unnecessary corp model %s" %
                                    corp)
                        corp.delete()
                else:
                    logger.info("Deleting unnecessary corp model %s" % corp)
                    corp.delete()
            else:
                if corp.corporation_id != settings.CORP_ID:
                    logger.debug("Corp %s is not owning corp" % corp)
                    if corp.alliance:
                        logger.debug("Corp %s has alliance %s" %
                                     (corp, corp.alliance))
                        if not corp.alliance.evecorporationinfo_set.filter(
                                corporation_id=settings.CORP_ID).exists():
                            logger.info("Deleting unnecessary corp model %s" %
                                        corp)
                            corp.delete()
                    else:
                        logger.info("Deleting unnecessary corp model %s" %
                                    corp)
                        corp.delete()
                else:
                    logger.debug("Corp %s is owning corp" % corp)
    except evelink.api.APIError as e:
        logger.error("Model update failed with error code %s" % e.code)
Пример #18
0
def run_api_refresh():
    users = User.objects.all()
    logger.debug("Running api refresh on %s users." % len(users))
    for user in users:
        # Check if the api server is online
        logger.debug("Running api refresh for user %s" % user)
        if EveApiManager.check_if_api_server_online():
            api_key_pairs = EveManager.get_api_key_pairs(user.id)
            logger.debug("User %s has api key pairs %s" % (user, api_key_pairs))
            if api_key_pairs:
                authserviceinfo, c = AuthServicesInfo.objects.get_or_create(user=user)
                logger.debug("User %s has api keys. Proceeding to refresh." % user)
                for api_key_pair in api_key_pairs:
                    logger.debug("Running update on api key %s" % api_key_pair.api_id)
                    if EveApiManager.api_key_is_valid(api_key_pair.api_id, api_key_pair.api_key):
                        # check to ensure API key meets min spec
                        logger.info("Determined api key %s is still active." % api_key_pair.api_id)
                        still_valid = True
                        state = determine_membership_by_user(user)
                        if state == "BLUE":
                            if settings.BLUE_API_ACCOUNT:
                                type = EveApiManager.check_api_is_type_account(
                                    api_key_pair.api_id, api_key_pair.api_key
                                )
                                if type == None:
                                    api_key_pair.error_count += 1
                                    api_key_pair.save()
                                    logger.info(
                                        "API key %s incurred an error checking if type account. Error count is now %s"
                                        % (api_key_pair.api_id, api_key_pair.error_count)
                                    )
                                    still_valid = None
                                elif type == False:
                                    logger.info(
                                        "Determined api key %s for blue user %s is no longer type account as requred."
                                        % (api_key_pair.api_id, user)
                                    )
                                    still_valid = False
                            full = EveApiManager.check_blue_api_is_full(api_key_pair.api_id, api_key_pair.api_key)
                            if full == None:
                                api_key_pair.error_count += 1
                                api_key_pair.save()
                                logger.info(
                                    "API key %s incurred an error checking if meets mask requirements. Error count is now %s"
                                    % (api_key_pair.api_id, api_key_pair.error_count)
                                )
                                still_valid = None
                            elif full == False:
                                logger.info(
                                    "Determined api key %s for blue user %s no longer meets minimum access mask as required."
                                    % (api_key_pair.api_id, user)
                                )
                                still_valid = False
                        elif state == "MEMBER":
                            if settings.MEMBER_API_ACCOUNT:
                                type = EveApiManager.check_api_is_type_account(
                                    api_key_pair.api_id, api_key_pair.api_key
                                )
                                if type == None:
                                    api_key_pair.error_count += 1
                                    api_key_pair.save()
                                    logger.info(
                                        "API key %s incurred an error checking if type account. Error count is now %s"
                                        % (api_key_pair.api_id, api_key_pair.error_count)
                                    )
                                    still_valid = None
                                elif type == False:
                                    logger.info(
                                        "Determined api key %s for user %s is no longer type account as required."
                                        % (api_key_pair.api_id, user)
                                    )
                                    still_valid = False
                            full = EveApiManager.check_api_is_full(api_key_pair.api_id, api_key_pair.api_key)
                            if full == None:
                                api_key_pair.error_count += 1
                                api_key_pair.save()
                                logger.info(
                                    "API key %s incurred an error checking if meets mask requirements. Error count is now %s"
                                    % (api_key_pair.api_id, api_key_pair.error_count)
                                )
                                still_valid = None
                            elif full == False:
                                logger.info(
                                    "Determined api key %s for user %s no longer meets minimum access mask as required."
                                    % (api_key_pair.api_id, user)
                                )
                                still_valid = False
                        if still_valid == None:
                            if api_key_pair.error_count >= 3:
                                logger.info(
                                    "API key %s has incurred 3 or more errors. Assuming invalid." % api_key_pair.api_id
                                )
                                still_valid = False
                        if still_valid == False:
                            logger.debug(
                                "API key %s has failed validation; it and its characters will be deleted."
                                % api_key_pair.api_id
                            )
                            EveManager.delete_characters_by_api_id(api_key_pair.api_id, user.id)
                            EveManager.delete_api_key_pair(api_key_pair.api_id, user.id)
                        elif still_valid == True:
                            if api_key_pair.error_count != 0:
                                logger.info(
                                    "Clearing error count for api %s as it passed validation" % api_key_pair.api_id
                                )
                                api_key_pair.error_count = 0
                                api_key_pair.save()
                            logger.info("Determined api key %s still meets requirements." % api_key_pair.api_id)
                            # Update characters
                            characters = EveApiManager.get_characters_from_api(
                                api_key_pair.api_id, api_key_pair.api_key
                            )
                            EveManager.update_characters_from_list(characters)
                            new_character = False
                            for char in characters.result:
                                # Ensure we have a model for all characters on key
                                if not EveManager.check_if_character_exist(characters.result[char]["name"]):
                                    new_character = True
                                    logger.debug(
                                        "API key %s has a new character on the account: %s"
                                        % (api_key_pair.api_id, characters.result[char]["name"])
                                    )
                            if new_character:
                                logger.debug(
                                    "Creating new character %s from api key %s"
                                    % (characters.result[char]["name"], api_key_pair.api_id)
                                )
                                EveManager.create_characters_from_list(characters, user, api_key_pair.api_key)
                    else:
                        logger.debug(
                            "API key %s is no longer valid; it and its characters will be deleted."
                            % api_key_pair.api_id
                        )
                        EveManager.delete_characters_by_api_id(api_key_pair.api_id, user.id)
                        EveManager.delete_api_key_pair(api_key_pair.api_id, user.id)
                # Check our main character
                if EveCharacter.objects.filter(character_id=authserviceinfo.main_char_id).exists() is False:
                    logger.info(
                        "User %s main character id %s missing model. Clearning main character."
                        % (user, authserviceinfo.main_char_id)
                    )
                    authserviceinfo.main_char_id = ""
                    authserviceinfo.save()
                else:
                    logger.warn("User %s has no main character id, unable to validate membership.")
        set_state(user)
Пример #19
0
def prime_kills():
    if EveApiManager.check_if_api_server_online():
        kill_api = EveApiManager.get_corp_kills(settings.ALLIANCE_EXEC_CORP_ID, settings.ALLIANCE_EXEC_CORP_VCODE)
        for kill in kill_api.result:
            EveManager.create_corporation_kill(kill)
Пример #20
0
def run_corp_update():
    # I am not proud of this block of code
    if EveApiManager.check_if_api_server_online():
        logger.debug("API server online and reachable. Proceeding with corp update.")
        if settings.IS_CORP:
            # Create the corp
            logger.debug(
                "Ensuring corp model exists for owning corp id %s due to settings.IS_CORP %s"
                % (settings.CORP_ID, settings.IS_CORP)
            )
            ownercorpinfo = EveApiManager.get_corporation_information(settings.CORP_ID)
            logger.debug("Determined ownercorp info: %s" % ownercorpinfo)
            if not EveManager.check_if_corporation_exists_by_id(ownercorpinfo["id"]):
                logger.debug("Owning corp id %s does not have a model. Creating." % ownercorpinfo["id"])
                if ownercorpinfo["alliance"]["id"] is None:
                    logger.debug("Owning corp does not have an alliance. Creating model with alliance=None")
                    EveManager.create_corporation_info(
                        ownercorpinfo["id"],
                        ownercorpinfo["name"],
                        ownercorpinfo["ticker"],
                        ownercorpinfo["members"]["current"],
                        False,
                        None,
                    )
                else:
                    alliance_info = EveApiManager.get_alliance_information(ownercorpinfo["alliance"]["id"])
                    logger.debug("Owning corp has an alliance, got info: %s" % alliance_info)
                    if not EveManager.check_if_alliance_exists_by_id(ownercorpinfo["alliance"]["id"]):
                        logger.debug(
                            "Owning corp missing alliance model. Creating for id %s" % ownercorpinfo["alliance"]["id"]
                        )
                        EveManager.create_alliance_info(
                            ownercorpinfo["alliance"]["id"],
                            alliance_info["name"],
                            alliance_info["ticker"],
                            alliance_info["executor_id"],
                            alliance_info["member_count"],
                            False,
                        )
                    alliance = EveManager.get_alliance_info_by_id(ownercorpinfo["alliance"]["id"])
                    logger.debug("Got alliance model %s for owning corp. Creating corp model." % alliance)
                    EveManager.create_corporation_info(
                        ownercorpinfo["id"],
                        ownercorpinfo["name"],
                        ownercorpinfo["ticker"],
                        ownercorpinfo["members"]["current"],
                        False,
                        alliance,
                    )

        else:
            # Updated alliance info
            logger.debug("Getting info for owning alliance %s" % settings.ALLIANCE_ID)
            alliance_info = EveApiManager.get_alliance_information(settings.ALLIANCE_ID)
            logger.debug("Owning alliance info: %s" % alliance_info)
            # Populate alliance info
            if not EveManager.check_if_alliance_exists_by_id(settings.ALLIANCE_ID):
                logger.debug("Missing alliance model for owning alliance. Creating with id %s" % settings.ALLIANCE_ID)
                EveManager.create_alliance_info(
                    settings.ALLIANCE_ID,
                    alliance_info["name"],
                    alliance_info["ticker"],
                    alliance_info["executor_id"],
                    alliance_info["member_count"],
                    False,
                )
            alliance = EveManager.get_alliance_info_by_id(settings.ALLIANCE_ID)
            logger.debug("Got owning alliance model %s" % alliance)
            # Create the corps in the alliance
            for alliance_corp in alliance_info["member_corps"]:
                corpinfo = EveApiManager.get_corporation_information(alliance_corp)
                logger.debug("Got corpinfo for alliance member corp: %s" % corpinfo)
                if not EveManager.check_if_corporation_exists_by_id(corpinfo["id"]):
                    logger.debug("Alliance member corp id %s missing model - creating." % corpinfo["id"])
                    EveManager.create_corporation_info(
                        corpinfo["id"],
                        corpinfo["name"],
                        corpinfo["ticker"],
                        corpinfo["members"]["current"],
                        False,
                        alliance,
                    )

        # determine what level of standings to check
        # refer to https://github.com/eve-val/evelink/blob/master/evelink/parsing/contact_list.py#L43
        standing_level = "alliance"
        if settings.IS_CORP:
            logger.debug("Switching standings check to corp level.")
            standing_level = "corp"

        # Create the corps in the standings
        corp_standings = EveApiManager.get_corp_standings()
        logger.debug("Got %s corp standings." % len(corp_standings))
        if corp_standings:
            for standing_id in EveApiManager.get_corp_standings()[standing_level]:
                logger.debug("Processing standing id %s" % standing_id)
                if int(corp_standings[standing_level][standing_id]["standing"]) >= settings.BLUE_STANDING:
                    logger.debug("Standing %s meets or exceeds blue threshold." % standing_id)
                    if EveApiManager.check_if_id_is_character(standing_id):
                        logger.debug("Standing id %s is a character. Not creating model.")
                        pass
                    elif EveApiManager.check_if_id_is_corp(standing_id):
                        corpinfo = EveApiManager.get_corporation_information(standing_id)
                        logger.debug("Standing id %s is a corp. Got corpinfo: %s" % (standing_id, corpinfo))
                        if not EveManager.check_if_corporation_exists_by_id(standing_id):
                            logger.debug("Corp model for standing id %s does not exist. Creating" % standing_id)
                            EveManager.create_corporation_info(
                                corpinfo["id"],
                                corpinfo["name"],
                                corpinfo["ticker"],
                                corpinfo["members"]["current"],
                                True,
                                None,
                            )
                    else:
                        # Alliance id create corps
                        blue_alliance_info = EveApiManager.get_alliance_information(standing_id)
                        logger.debug(
                            "Standing id %s is alliance. Got alliance info: %s" % (standing_id, blue_alliance_info)
                        )
                        if not EveManager.check_if_alliance_exists_by_id(standing_id):
                            logger.debug("Alliance model for standing id %s does not exist. Creating" % standing_id)
                            EveManager.create_alliance_info(
                                standing_id,
                                blue_alliance_info["name"],
                                blue_alliance_info["ticker"],
                                blue_alliance_info["executor_id"],
                                blue_alliance_info["member_count"],
                                True,
                            )

                        blue_alliance = EveManager.get_alliance_info_by_id(standing_id)
                        logger.debug("Got alliance model %s for standing id %s" % (blue_alliance, standing_id))
                        for blue_alliance_corp in blue_alliance_info["member_corps"]:
                            blue_info = EveApiManager.get_corporation_information(blue_alliance_corp)
                            logger.debug(
                                "Got corpinfo for member corp id %s of blue alliance %s: %s"
                                % (blue_info["id"], blue_alliance, blue_info)
                            )
                            if not EveManager.check_if_corporation_exists_by_id(blue_info["id"]):
                                logger.debug(
                                    "Blue alliance %s member corp id %s missing model. Creating."
                                    % (blue_alliance, blue_info["id"])
                                )
                                EveManager.create_corporation_info(
                                    blue_info["id"],
                                    blue_info["name"],
                                    blue_info["ticker"],
                                    blue_info["members"]["current"],
                                    True,
                                    blue_alliance,
                                )

            # Update all allinace info's
            for all_alliance_info in EveManager.get_all_alliance_info():
                logger.debug("Validating alliance model %s" % all_alliance_info)
                if EveApiManager.check_if_alliance_exists(all_alliance_info.alliance_id):
                    all_alliance_api_info = EveApiManager.get_alliance_information(all_alliance_info.alliance_id)
                    logger.debug("Got alliance %s alliance info: %s" % (all_alliance_info, all_alliance_api_info))
                    if not settings.IS_CORP and all_alliance_info.alliance_id == settings.ALLIANCE_ID:
                        logger.debug("Alliance %s is owning alliance. Updating info." % all_alliance_info)
                        EveManager.update_alliance_info(
                            all_alliance_api_info["id"],
                            all_alliance_api_info["executor_id"],
                            all_alliance_api_info["member_count"],
                            False,
                        )
                    elif standing_level in corp_standings:
                        if int(all_alliance_info.alliance_id) in corp_standings[standing_level]:
                            if (
                                int(corp_standings[standing_level][int(all_alliance_info.alliance_id)]["standing"])
                                >= settings.BLUE_STANDING
                            ):
                                logger.debug("Alliance %s is blue. Updating." % all_alliance_info)
                                EveManager.update_alliance_info(
                                    all_alliance_api_info["id"],
                                    all_alliance_api_info["executor_id"],
                                    all_alliance_api_info["member_count"],
                                    True,
                                )
                            else:
                                logger.debug(
                                    "Alliance %s does not meet blue standing threshold. Updating as non-blue."
                                    % all_alliance_info
                                )
                                EveManager.update_alliance_info(
                                    all_alliance_api_info["id"],
                                    all_alliance_api_info["executor_id"],
                                    all_alliance_api_info["member_count"],
                                    False,
                                )
                        else:
                            logger.debug("Alliance %s not in standings. Updating as non-blue." % all_alliance_info)
                            EveManager.update_alliance_info(
                                all_alliance_api_info["id"],
                                all_alliance_api_info["executor_id"],
                                all_alliance_api_info["member_count"],
                                False,
                            )
                    else:
                        logger.debug("No standings found. Updating alliance %s as non-blue." % all_alliance_info)
                        EveManager.update_alliance_info(
                            all_alliance_api_info["id"],
                            all_alliance_api_info["executor_id"],
                            all_alliance_api_info["member_count"],
                            False,
                        )
                else:
                    logger.info("Alliance %s has closed. Deleting model." % all_alliance_info)
                    # alliance no longer exists
                    all_alliance_info.delete()

            # Update corp infos
            for all_corp_info in EveManager.get_all_corporation_info():
                logger.debug("Validating corp model %s" % all_corp_info)
                if EveApiManager.check_if_corp_exists(all_corp_info.corporation_id):
                    alliance = None
                    corpinfo = EveApiManager.get_corporation_information(all_corp_info.corporation_id)
                    if corpinfo["alliance"]["id"] is not None:
                        alliance = EveManager.get_alliance_info_by_id(corpinfo["alliance"]["id"])
                    logger.debug("Got corpinfo %s and allianceinfo %s" % (corpinfo, alliance))

                    if settings.IS_CORP and all_corp_info.corporation_id == settings.CORP_ID:
                        logger.debug("Corp %s is owning corp. Updating." % all_corp_info)
                        EveManager.update_corporation_info(corpinfo["id"], corpinfo["members"]["current"], None, False)
                    elif int(all_corp_info.corporation_id) in corp_standings[standing_level]:
                        if (
                            int(corp_standings[standing_level][int(all_corp_info.corporation_id)]["standing"])
                            >= settings.BLUE_STANDING
                        ):
                            logger.debug("Corp %s is blue. Updating." % all_corp_info)
                            EveManager.update_corporation_info(
                                corpinfo["id"], corpinfo["members"]["current"], None, True
                            )
                        else:
                            logger.debug(
                                "Corp %s does not meet blue standing threshold. Updating as non-blue." % all_corp_info
                            )
                            EveManager.update_corporation_info(
                                corpinfo["id"], corpinfo["members"]["current"], None, False
                            )
                    elif alliance is not None and all_corp_info.alliance is not None:
                        logger.debug(
                            "Corp %s not in standings - checking alliance with model %s" % (all_corp_info, alliance)
                        )
                        if (not settings.IS_CORP) and (all_corp_info.alliance.alliance_id == settings.ALLIANCE_ID):
                            logger.debug("Corp %s is member of owning alliance. Updating." % all_corp_info)
                            EveManager.update_corporation_info(
                                corpinfo["id"], corpinfo["members"]["current"], alliance, False
                            )
                        elif int(alliance.alliance_id) in corp_standings[standing_level]:
                            if (
                                int(corp_standings[standing_level][int(alliance.alliance_id)]["standing"])
                                >= settings.BLUE_STANDING
                            ):
                                logger.debug("Corp %s alliance %s is blue. Updating." % (all_corp_info, alliance))
                                EveManager.update_corporation_info(
                                    corpinfo["id"], corpinfo["members"]["current"], alliance, True
                                )
                            else:
                                logger.debug(
                                    "Corp %s alliance %s does not meet blue standing threshold. Updating as non-blue."
                                    % (all_corp_info, alliance)
                                )
                                EveManager.update_corporation_info(
                                    corpinfo["id"], corpinfo["members"]["current"], alliance, False
                                )
                        else:
                            logger.debug(
                                "Corp %s alliance %s not found in standings. Updating as non-blue."
                                % (all_corp_info, alliance)
                            )
                            EveManager.update_corporation_info(
                                corpinfo["id"], corpinfo["members"]["current"], alliance, False
                            )
                    else:
                        logger.info(
                            "Corp model %s is not owning, member of owning alliance, or in standings. Updating as non-blue."
                            % all_corp_info
                        )
                        EveManager.update_corporation_info(corpinfo["id"], corpinfo["members"]["current"], None, False)
                else:
                    # corp has closed
                    logger.info("Corp %s has closed. Deleting model." % all_corp_info)
                    all_corp_info.delete()

        # Remove irrelevent corp and alliance models
        # Check the corps
        for all_corp_info in EveManager.get_all_corporation_info():
            logger.debug("Checking to delete corp model %s" % all_corp_info)
            if settings.IS_CORP:
                if all_corp_info.corporation_id != settings.CORP_ID:
                    if not all_corp_info.is_blue:
                        logger.info("Corp model %s is not owning corp nor blue. Deleting." % all_corp_info)
                        all_corp_info.delete()
            else:
                if all_corp_info.alliance is not None:
                    if all_corp_info.alliance.alliance_id != settings.ALLIANCE_ID:
                        if not all_corp_info.is_blue:
                            logger.info("Corp model %s not in owning alliance nor blue. Deleting." % all_corp_info)
                            all_corp_info.delete()
                elif not all_corp_info.is_blue:
                    logger.info("Corp model %s has no alliance and is not blue. Deleting." % all_corp_info)
                    all_corp_info.delete()

        # Check the alliances
        for all_alliance_info in EveManager.get_all_alliance_info():
            logger.debug("Checking to delete alliance model %s" % all_alliance_info)
            if settings.IS_CORP:
                if all_alliance_info.is_blue is not True:
                    if ownercorpinfo["alliance"]["id"] is not None:
                        if int(all_alliance_info.alliance_id) != ownercorpinfo["alliance"]["id"]:
                            logger.info(
                                "Alliance model %s not owning corp alliance nor blue. Deleting." % all_alliance_info
                            )
                            all_alliance_info.delete()
                    else:
                        logger.info(
                            "Alliance model %s not blue to alliance-less owning corp. Deleting." % all_alliance_info
                        )
                        all_alliance_info.delete()
            elif all_alliance_info.alliance_id != settings.ALLIANCE_ID:
                if all_alliance_info.is_blue is not True:
                    logger.info("Alliance model %s not owning alliance nor blue. Deleting." % all_alliance_info)
                    all_alliance_info.delete()
Пример #21
0
def run_api_refresh():
    users = User.objects.all()

    for user in users:
        # Check if the api server is online
        if EveApiManager.check_if_api_server_online():
            api_key_pairs = EveManager.get_api_key_pairs(user.id)
            if api_key_pairs:
                valid_key = False
                authserviceinfo = AuthServicesInfo.objects.get(user=user)

                print 'Running update on user: '******'Running on ' + api_key_pair.api_id + ':' + api_key_pair.api_key
                            if EveApiManager.api_key_is_valid(api_key_pair.api_id, api_key_pair.api_key):
                                #check to ensure API key meets min spec
                                still_valid = True
                                if authserviceinfo.is_blue:
                                    if settings.BLUE_API_ACCOUNT:
                                        if not EveApiManager.check_api_is_type_account(api_key_pair.api_id, api_key_pair.api_key):
                                            still_valid = False
                                    if not EveApiManager.check_blue_api_is_full(api_key_pair.api_id, api_key_pair.api_key):
                                            still_valid = False
                                else:
                                    if settings.MEMBER_API_ACCOUNT:
                                        if not EveApiManager.check_api_is_type_account(api_key_pair.api_id, api_key_pair.api_key):
                                            still_valid = False
                                    if not EveApiManager.check_api_is_full(api_key_pair.api_id, api_key_pair.api_key):
                                            still_valid = False
                                if still_valid is not True:
                                    EveManager.delete_characters_by_api_id(api_key_pair.api_id, user.id)
                                    EveManager.delete_api_key_pair(api_key_pair.api_id, user.id)
                                else:                                    
                                    # Update characters
                                    characters = EveApiManager.get_characters_from_api(api_key_pair.api_id,
                                                                                       api_key_pair.api_key)
                                    EveManager.update_characters_from_list(characters)
                                    new_character = False
                                    for char in characters.result:
                                        # Ensure we have a model for all characters on key
                                        if not EveManager.check_if_character_exist(characters.result[char]['name']):
                                            new_character = True
                                    if new_character:
                                        EveManager.create_characters_from_list(characters, user, api_key_pair.api_key)
                                    valid_key = True
                            else:
                                EveManager.delete_characters_by_api_id(api_key_pair.api_id, user.id)
                                EveManager.delete_api_key_pair(api_key_pair.api_id, user.id)

                        if valid_key:
                            # Check our main character
                            character = EveManager.get_character_by_id(authserviceinfo.main_char_id)
                            if character is not None and EveManager.check_if_corporation_exists_by_id(character.corporation_id):
                                corp = EveManager.get_corporation_info_by_id(character.corporation_id)
                                main_corp_id = EveManager.get_charater_corporation_id_by_id(authserviceinfo.main_char_id)
                                main_alliance_id = EveManager.get_charater_alliance_id_by_id(authserviceinfo.main_char_id)
                                if (settings.IS_CORP and main_corp_id == settings.CORP_ID) or (not settings.IS_CORP and main_alliance_id == settings.ALLIANCE_ID):
                                    if not check_if_user_has_permission(user, "member"):
                                        #transition from none or blue to member
                                        if check_if_user_has_permission(user, "blue_member"):
                                            #strip blue status
                                            remove_member_permission(user, "blue_member")
                                            remove_user_from_group(user, settings.DEFAULT_BLUE_GROUP)
                                            AuthServicesInfoManager.update_is_blue(False, user)
                                        #add to auth group
                                        add_member_permission(user, "member")
                                        add_user_to_group(user, settings.DEFAULT_AUTH_GROUP)
                                        #add to required corp group
                                        add_user_to_group(user, generate_corp_group_name(character.corporation_name))
                                    elif corp.corporation_id != oldcorp_id:
                                        #changed corps, both corps auth'd, need to change group assignment
                                        oldcorp = EveCorporationInfo.objects.get(corporation_id=oldcorp_id)
                                        remove_user_from_group(user, generate_corp_group_name(oldcorp.corporation_name))
                                        add_user_to_group(user, generate_corp_group_name(character.corporation_name))
                                        #reset services to force new mumble names and group assignments
                                        deactivate_services(user)
                                elif corp is not None:
                                    if corp.is_blue is not True:
                                        if check_if_user_has_permission(user, "member"):
                                            #transition from member to nobody
                                            disable_alliance_member(user, authserviceinfo.main_char_id)
                                        elif check_if_user_has_permission(user, "blue_member"):
                                            #transition from blue to nobody
                                            disable_blue_member(user)
                                        else:
                                            #stay nobody, make sure no services
                                            deactivate_services(user)
                                    else:
                                        if check_if_user_has_permission(user, "member"):
                                            #remove auth member to prepare for member to blue transition
                                            disable_alliance_member(user, authserviceinfo.main_char_id)
                                        if not check_if_user_has_permission(user, "blue_member"):
                                            #perform nobody to blue transition
                                            add_member_permission(user, "blue_member")
                                            add_user_to_group(user, settings.DEFAULT_BLUE_GROUP)
                                            AuthServicesInfoManager.update_is_blue(True, user)

                                else:
                                    # disable accounts with missing corp model (not blue or member)
                                    if check_if_user_has_permission(user, "member"):
                                        disable_alliance_member(user, authserviceinfo.main_char_id)
                                    elif check_if_user_has_permission(user, "blue_member"):
                                        disable_blue_member(user)
                                    else:
                                        deactivate_services(user)
                            else:
                                # nuke it, the hard way
                                disable_expired_member(user)                                
                        else:
                            # disable accounts with invalid keys
                            disable_expired_member(user)

                else:
                    print 'No main_char_id set'
Пример #22
0
def run_corp_update():
    if not EveApiManager.check_if_api_server_online():
        logger.warn(
            "Aborted updating corp and alliance models: API server unreachable"
        )
        return

    # generate member corps
    for corp_id in settings.STR_CORP_IDS + settings.STR_BLUE_CORP_IDS:
        is_blue = True if corp_id in settings.STR_BLUE_CORP_IDS else False
        try:
            if EveCorporationInfo.objects.filter(
                    corporation_id=corp_id).exists():
                update_corp(corp_id, is_blue=is_blue)
            else:
                EveManager.create_corporation(corp_id, is_blue=is_blue)
        except ObjectNotFound:
            logger.warn('Bad corp ID in settings: %s' % corp_id)

    # generate member alliances
    for alliance_id in settings.STR_ALLIANCE_IDS + settings.STR_BLUE_ALLIANCE_IDS:
        is_blue = True if alliance_id in settings.STR_BLUE_ALLIANCE_IDS else False
        try:
            if EveAllianceInfo.objects.filter(
                    alliance_id=alliance_id).exists():
                logger.debug(
                    "Updating existing owner alliance model with id %s" %
                    alliance_id)
                update_alliance(alliance_id, is_blue=is_blue)
            else:
                EveManager.create_alliance(alliance_id, is_blue=is_blue)
                EveManager.populate_alliance(alliance_id)
        except ObjectNotFound:
            logger.warn('Bad alliance ID in settings: %s' % alliance_id)

    # update existing corp models
    for corp in EveCorporationInfo.objects.exclude(
            corporation_id__in=settings.STR_CORP_IDS +
            settings.STR_BLUE_CORP_IDS):
        update_corp.delay(corp.corporation_id)

    # update existing alliance models
    for alliance in EveAllianceInfo.objects.exclude(
            alliance_id__in=settings.STR_ALLIANCE_IDS +
            settings.STR_BLUE_ALLIANCE_IDS):
        update_alliance.delay(alliance.alliance_id)

    try:
        # create standings
        standings = EveApiManager.get_corp_standings()
        if standings:
            standings = standings[settings.STANDING_LEVEL]
            for standing in standings:
                if float(standings[standing]
                         ['standing']) >= settings.BLUE_STANDING:
                    logger.debug("Standing %s meets threshold" % standing)
                    if EveApiManager.check_if_id_is_alliance(standing):
                        logger.debug("Standing %s is an alliance" % standing)
                        if EveAllianceInfo.objects.filter(
                                alliance_id=standing).exists():
                            alliance = EveAllianceInfo.objects.get(
                                alliance_id=standing)
                            if alliance.is_blue is not True:
                                logger.info("Updating alliance %s as blue" %
                                            alliance)
                                alliance.is_blue = True
                                alliance.save()
                        else:
                            EveManager.create_alliance(standing, is_blue=True)
                    elif EveApiManager.check_if_id_is_corp(standing):
                        logger.debug("Standing %s is a corp" % standing)
                        if EveCorporationInfo.objects.filter(
                                corporation_id=standing).exists():
                            corp = EveCorporationInfo.objects.get(
                                corporation_id=standing)
                            if corp.is_blue is not True:
                                logger.info("Updating corp %s as blue" % corp)
                                corp.is_blue = True
                                corp.save()
                        else:
                            logger.info(
                                "Creating model for blue corp with id %s" %
                                standing)
                            EveManager.create_corporation(standing,
                                                          is_blue=True)

        # update alliance standings
        for alliance in EveAllianceInfo.objects.filter(is_blue=True):
            if int(alliance.alliance_id) in standings:
                if float(standings[int(
                        alliance.alliance_id)]['standing']) < float(
                            settings.BLUE_STANDING):
                    logger.info(
                        "Alliance %s no longer meets minimum blue standing threshold"
                        % alliance)
                    alliance.is_blue = False
                    alliance.save()
            elif alliance.alliance_id not in settings.STR_BLUE_ALLIANCE_IDS:
                logger.info("Alliance %s no longer in standings" % alliance)
                alliance.is_blue = False
                alliance.save()

        # update corp standings
        for corp in EveCorporationInfo.objects.filter(is_blue=True):
            if int(corp.corporation_id) in standings:
                if float(standings[int(
                        corp.corporation_id)]['standing']) < float(
                            settings.BLUE_STANDING):
                    logger.info(
                        "Corp %s no longer meets minimum blue standing threshold"
                        % corp)
                    corp.is_blue = False
                    corp.save()
            elif corp.corporation_id not in settings.STR_BLUE_CORP_IDS:
                if corp.alliance:
                    if not corp.alliance.is_blue:
                        logger.info(
                            "Corp %s and its alliance %s are no longer blue" %
                            (corp, corp.alliance))
                        corp.is_blue = False
                        corp.save()
                else:
                    logger.info("Corp %s is no longer blue" % corp)
                    corp.is_blue = False
                    corp.save()
    except evelink.api.APIError as e:
        logger.error("Model update failed with error code %s" % e.code)

    # delete unnecessary alliance models
    EveAllianceInfo.objects.filter(is_blue=False).exclude(
        alliance_id__in=settings.STR_ALLIANCE_IDS).delete()

    # delete unnecessary corp models
    EveCorporationInfo.objects.filter(is_blue=False).exclude(
        corporation_id__in=settings.STR_CORP_IDS).exclude(
            alliance__alliance_id__in=settings.STR_ALLIANCE_IDS).delete()
Пример #23
0
def run_corp_update():
    # I am not proud of this block of code
    if EveApiManager.check_if_api_server_online():

        if settings.IS_CORP:
            # Create the corp
            ownercorpinfo = EveApiManager.get_corporation_information(settings.CORP_ID)
            if not EveManager.check_if_corporation_exists_by_id(ownercorpinfo['id']):
                if ownercorpinfo['alliance']['id'] is None:
                    EveManager.create_corporation_info(ownercorpinfo['id'], ownercorpinfo['name'], ownercorpinfo['ticker'],
                                                       ownercorpinfo['members']['current'], False, None)
                else:
                    alliance_info = EveApiManager.get_alliance_information(ownercorpinfo['alliance']['id'])
                    if not EveManager.check_if_alliance_exists_by_id(settings.ALLIANCE_ID):
                        EveManager.create_alliance_info(settings.ALLIANCE_ID, alliance_info['name'], alliance_info['ticker'],
                                                        alliance_info['executor_id'], alliance_info['member_count'], False)
                    alliance = EveManager.get_alliance_info_by_id(ownercorpinfo['alliance']['id'])
                    EveManager.create_corporation_info(ownercorpinfo['id'], ownercorpinfo['name'], ownercorpinfo['ticker'],
                                                       ownercorpinfo['members']['current'], False, alliance)

        else:
            # Updated alliance info
            alliance_info = EveApiManager.get_alliance_information(settings.ALLIANCE_ID)
 
             # Populate alliance info
            if not EveManager.check_if_alliance_exists_by_id(settings.ALLIANCE_ID):
                EveManager.create_alliance_info(settings.ALLIANCE_ID, alliance_info['name'], alliance_info['ticker'],
                                             alliance_info['executor_id'], alliance_info['member_count'], False)
            alliance = EveManager.get_alliance_info_by_id(settings.ALLIANCE_ID)
            # Create the corps in the alliance
            for alliance_corp in alliance_info['member_corps']:
                corpinfo = EveApiManager.get_corporation_information(alliance_corp)
                if not EveManager.check_if_corporation_exists_by_id(corpinfo['id']):
                    EveManager.create_corporation_info(corpinfo['id'], corpinfo['name'], corpinfo['ticker'],
                                                    corpinfo['members']['current'], False, alliance)

        #determine what level of standings to check
        #refer to https://github.com/eve-val/evelink/blob/master/evelink/parsing/contact_list.py#L43
        standing_level = 'alliance'
        if settings.IS_CORP:
            standing_level = 'corp'

        # Create the corps in the standings
        corp_standings = EveApiManager.get_corp_standings()
        if corp_standings:
            for standing_id in EveApiManager.get_corp_standings()[standing_level]:
                if int(corp_standings[standing_level][standing_id]['standing']) >= settings.BLUE_STANDING:
                    if EveApiManager.check_if_id_is_character(standing_id):
                        pass
                    elif EveApiManager.check_if_id_is_corp(standing_id):
                        corpinfo = EveApiManager.get_corporation_information(standing_id)
                        if not EveManager.check_if_corporation_exists_by_id(standing_id):
                            EveManager.create_corporation_info(corpinfo['id'], corpinfo['name'], corpinfo['ticker'],
                                                               corpinfo['members']['current'], True, None)
                    else:
                        # Alliance id create corps
                        blue_alliance_info = EveApiManager.get_alliance_information(standing_id)

                        if not EveManager.check_if_alliance_exists_by_id(standing_id):
                            EveManager.create_alliance_info(standing_id, blue_alliance_info['name'],
                                                            blue_alliance_info['ticker'],
                                                            blue_alliance_info['executor_id'],
                                                            blue_alliance_info['member_count'], True)

                        blue_alliance = EveManager.get_alliance_info_by_id(standing_id)

                        for blue_alliance_corp in blue_alliance_info['member_corps']:
                            blue_info = EveApiManager.get_corporation_information(blue_alliance_corp)
                            if not EveManager.check_if_corporation_exists_by_id(blue_info['id']):
                                EveManager.create_corporation_info(blue_info['id'], blue_info['name'],
                                                                   blue_info['ticker'],
                                                                   blue_info['members']['current'], True, blue_alliance)

            # Update all allinace info's
            for all_alliance_info in EveManager.get_all_alliance_info():
                if EveApiManager.check_if_alliance_exists(all_alliance_info.alliance_id):
                    all_alliance_api_info = EveApiManager.get_alliance_information(all_alliance_info.alliance_id)
                    if (not settings.IS_CORP and all_alliance_info.alliance_id == settings.ALLIANCE_ID):
                        EveManager.update_alliance_info(all_alliance_api_info['id'], all_alliance_api_info['executor_id'],
                                                        all_alliance_api_info['member_count'], False)
                    elif standing_level in corp_standings:
                        if int(all_alliance_info.alliance_id) in corp_standings[standing_level]:
                            if int(corp_standings[standing_level][int(all_alliance_info.alliance_id)][
                                'standing']) >= settings.BLUE_STANDING:
                                EveManager.update_alliance_info(all_alliance_api_info['id'],
                                                                all_alliance_api_info['executor_id'],
                                                                all_alliance_api_info['member_count'], True)
                            else:
                                EveManager.update_alliance_info(all_alliance_api_info['id'],
                                                                all_alliance_api_info['executor_id'],
                                                                all_alliance_api_info['member_count'], False)
                        else:
                            EveManager.update_alliance_info(all_alliance_api_info['id'],
                                                            all_alliance_api_info['executor_id'],
                                                            all_alliance_api_info['member_count'], False)
                    else:
                        EveManager.update_alliance_info(all_alliance_api_info['id'],
                                                        all_alliance_api_info['executor_id'],
                                                        all_alliance_api_info['member_count'], False)
                else:
                    #alliance no longer exists
                    all_alliance_info.delete()

            # Update corp infos
            for all_corp_info in EveManager.get_all_corporation_info():
                if EveApiManager.check_if_corp_exists(all_corp_info.corporation_id):
                    alliance = None
                    corpinfo = EveApiManager.get_corporation_information(all_corp_info.corporation_id)
                    if corpinfo['alliance']['id'] is not None:
                        alliance = EveManager.get_alliance_info_by_id(corpinfo['alliance']['id'])

                    if alliance is not None and all_corp_info.alliance is not None:

                        if (not settings.IS_CORP) and (all_corp_info.alliance.alliance_id == settings.ALLIANCE_ID):
                            EveManager.update_corporation_info(corpinfo['id'], corpinfo['members']['current'], alliance, False)
                        elif int(alliance.alliance_id) in corp_standings[standing_level]:
                            if int(corp_standings[standing_level][int(alliance.alliance_id)][
                                'standing']) >= settings.BLUE_STANDING:
                                EveManager.update_corporation_info(corpinfo['id'], corpinfo['members']['current'], alliance,
                                                                   True)
                            else:
                                EveManager.update_corporation_info(corpinfo['id'], corpinfo['members']['current'], alliance,
                                                                   False)
                        else:
                            EveManager.update_corporation_info(corpinfo['id'], corpinfo['members']['current'], alliance,
                                                               False)
                    else:
                        if int(all_corp_info.corporation_id) in corp_standings[standing_level]:
                            if int(corp_standings[standing_level][int(all_corp_info.corporation_id)][
                                'standing']) >= settings.BLUE_STANDING:
                                EveManager.update_corporation_info(corpinfo['id'], corpinfo['members']['current'], None, True)
                            else:
                                EveManager.update_corporation_info(corpinfo['id'], corpinfo['members']['current'], None, False)
                        else:
                            EveManager.update_corporation_info(corpinfo['id'], corpinfo['members']['current'], None, False)
                else:
                    #corp has closed
                    all_corp_info.delete()

        # Remove irrelevent corp and alliance models
        # Check the corps
        for all_corp_info in EveManager.get_all_corporation_info():
            if settings.IS_CORP:
                if all_corp_info.corporation_id != settings.CORP_ID:
                    if not all_corp_info.is_blue:
                        all_corp_info.delete()
            else:
                if all_corp_info.alliance is not None:
                    if all_corp_info.alliance.alliance_id != settings.ALLIANCE_ID:
                        if not all_corp_info.is_blue:
                            all_corp_info.delete()
                elif not all_corp_info.is_blue:
                    all_corp_info.delete()

        # Check the alliances
        for all_alliance_info in EveManager.get_all_alliance_info():
            if settings.IS_CORP:
                if all_alliance_info.is_blue is not True:
                    if ownercorpinfo['alliance']['id'] is not None:
                        if int(all_alliance_info.alliance_id) != ownercorpinfo['alliance']['id']:
                            all_alliance_info.delete()
                    else:
                        all_alliance_info.delete()
            elif all_alliance_info.alliance_id != settings.ALLIANCE_ID:
                if all_alliance_info.is_blue is not True:
                    all_alliance_info.delete()