Exemple #1
0
def get_characters(key_id, vcode):
    """
    Return all the user's characters
    """
    if len(vcode) != 64:
        return jsonify(error='Invalid vCode'), 400
    eve = EveTools(key_id=key_id, vcode=vcode, cache=True)
    try:
        characters = eve.get_characters(public=True)
    except EveException as e:
        return jsonify(error=e.value), 500
    except Exception as e:
        return jsonify(error=e.message), 400
    return jsonify(
        characters=[EveTools.element_to_dict(character)
                    for character in characters])
Exemple #2
0
def get_characters(key_id, vcode):
    """
    Return all the user's characters
    """
    if len(vcode) != 64:
        return jsonify(error='Invalid vCode'), 400
    eve = EveTools(key_id=key_id, vcode=vcode, cache=True)
    try:
        characters = eve.get_characters(public=True)
    except EveException as e:
        return jsonify(error=e.value), 500
    except Exception as e:
        return jsonify(error=e.message), 400
    return jsonify(characters=[
        EveTools.element_to_dict(character) for character in characters
    ])
Exemple #3
0
def check_key():
    """
    Check the API Key supplied
    """
    key_id, vcode = request.json['key_id'], request.json['vcode']
    try:
        key_id = int(key_id)
    except ValueError as e:
        return jsonify(error='Invalid Key ID'), 400
    if len(vcode) != 64:
        return jsonify(error='Invalid vCode'), 400
    eve = EveTools(key_id=key_id, vcode=vcode, cache=True)
    try:
        eve.check_key()
    except EveException as e:
        return jsonify(error=e.value), 500
    except Exception as e:
        return jsonify(error=e.message), 400
    return jsonify(valid=True)
Exemple #4
0
def update_outposts():
    '''Update Conquerable stations amd Outposts from Eve API'''
    api = EveTools()
    api_stations = api.client.eve.ConquerableStationList()
    stations = {}
    for station in api_stations.outposts:
        stations[str(station.stationID)] = station.stationName + \
            ' (%s)' % station.corporationName
    r = redis.StrictRedis(host=app.config['REDIS'])
    r.set('eve.stations', json.dumps(stations))
Exemple #5
0
def check_key():
    """
    Check the API Key supplied
    """
    key_id, vcode = request.json['key_id'], request.json['vcode']
    try:
        key_id = int(key_id)
    except ValueError as e:
        return jsonify(error='Invalid Key ID'), 400
    if len(vcode) != 64:
        return jsonify(error='Invalid vCode'), 400
    eve = EveTools(key_id=key_id, vcode=vcode, cache=True)
    try:
        eve.check_key()
    except EveException as e:
        return jsonify(error=e.value), 500
    except Exception as e:
        return jsonify(error=e.message), 400
    return jsonify(valid=True)
Exemple #6
0
def update_corporations():
    """Update corporations from alliance list."""
    corporations = []
    api = EveTools(app.config['EVE']['ALLIANCE_KEY_ID'],
                   app.config['EVE']['ALLIANCE_KEY_VCODE'],
                   cache=True)
    app.logger.info('Starting updating of alliance\'s corporations')
    alliances = api.client.eve.AllianceList().alliances
    # Looking for our alliance
    for api_alliance in alliances:
        if api_alliance.allianceID == app.config['EVE']['ALLIANCE_ID']:
            alliance = api_alliance
            break
    else:
        raise Exception('Alliance not found')
    app.logger.info(
        'Alliance "{alliance}" found, updating corporations"'.format(
            alliance=alliance.name))
    for member_corporation in alliance.memberCorporations:
        corporation_sheet = api.client.corp.CorporationSheet(
            corporationID=member_corporation.corporationID)
        corporation = dict(corporation_id=corporation_sheet.corporationID,
                           name=corporation_sheet.corporationName,
                           ticker=corporation_sheet.ticker,
                           members=corporation_sheet.memberCount,
                           reddit=False,
                           active=True)
        if member_corporation.corporationID in app.config['EVE'][
                'DISABLED_CORPORATIONS']:
            corporation['active'] = False
        if app.config['REDDIT']['ENABLED']:
            if member_corporation.corporationID in app.config['REDDIT'][
                    'CORPORATIONS']:
                corporation['reddit'] = True
        app.logger.info('Adding {}'.format(corporation['name']))
        corporations.append(corporation)
    with app.app_context():
        mongo.db.corporations.update({}, {'$set': {
            'active': False
        }},
                                     multi=True)
        for corporation in corporations:
            mongo.db.corporations.update(
                {'corporation_id': corporation['corporation_id']},
                corporation,
                upsert=True)
    app.logger.info('Corporations updated with success !')
Exemple #7
0
def new_application():
    """
    Create the new application
    """
    form_data = request.get_json()
    application_form = ApplicationForm(MultiDict(form_data))
    if not application_form.validate():
        return jsonify(error='Validation error, '
                       'we could not validate your application.'), 400

    # Form is valid, let's check everything is valid
    eve = EveTools(key_id=application_form.key_id.data,
                   vcode=application_form.vcode.data,
                   cache=True)
    try:
        eve.check_key()
        characters = eve.get_characters(public=True)
        for character in characters:
            if character.characterID == application_form.character_id.data:
                character_sheet = character
                break
        else:
            raise Exception('Character not found with provided API Key')
        corporation = mongo.db.corporations.find_one(
            {'corporation_id': application_form.corporation_id.data})
        if corporation is None or corporation['active'] is False:
            raise Exception('You cannot apply to this corporation')
    except EveException as e:
        return jsonify(error=e.value), 500
    except Exception as e:
        app.logger.exception(e)
        return jsonify(error=e.message), 400

    # Do we have a reddit key ?
    if all(['reddit_key' in form_data, 'reddit_username' in form_data]):
        r = redis.StrictRedis(host=app.config['REDIS'])
        reddit_username = r.get('hr2:reddit:{}'.format(
            form_data['reddit_key']))
        if reddit_username != form_data['reddit_username']:
            return jsonify(error='Invalid Reddit token, '
                           'maybe it has expired ?'), 403

    # Well, everything looks alright, let's create the application !
    user_id = application_form.character_name.data.replace(" ", "_").lower()
    application = {
        'applicant': {
            'user_id': user_id,
            'character_id': application_form.character_id.data,
            'character_name': application_form.character_name.data,
            'email': application_form.email.data,
            'key_id': application_form.key_id.data,
            'vcode': application_form.vcode.data,
            'reddit_username': form_data.get('reddit_username', None),
            'corporation_id': character_sheet.corporationID,
            'corporation_name': character_sheet.corporation,
            'alliance_id': character_sheet.__dict__.get('allianceID', None),
            'alliance_name': character_sheet.__dict__.get('alliance', None)
        },
        'corporation': {
            'corporation_id': application_form.corporation_id.data,
            'corporation_name': application_form.corporation_name.data
        },
        'motivation': application_form.motivation.data,
        'status': Status.Pending.value,
        'created_at': datetime.datetime.utcnow()
    }
    mongo.db.applications.insert(application)
    return jsonify(result='success'), 200
Exemple #8
0
def new_application():
    """
    Create the new application
    """
    form_data = request.get_json()
    application_form = ApplicationForm(MultiDict(form_data))
    if not application_form.validate():
        return jsonify(error='Validation error, '
                             'we could not validate your application.'), 400

    # Form is valid, let's check everything is valid
    eve = EveTools(key_id=application_form.key_id.data,
                   vcode=application_form.vcode.data, cache=True)
    try:
        eve.check_key()
        characters = eve.get_characters(public=True)
        for character in characters:
            if character.characterID == application_form.character_id.data:
                character_sheet = character
                break
        else:
            raise Exception('Character not found with provided API Key')
        corporation = mongo.db.corporations.find_one({'corporation_id': application_form.corporation_id.data})
        if corporation is None or corporation['active'] is False:
            raise Exception('You cannot apply to this corporation')
    except EveException as e:
        return jsonify(error=e.value), 500
    except Exception as e:
        app.logger.exception(e)
        return jsonify(error=e.message), 400

    # Do we have a reddit key ?
    if all(['reddit_key' in form_data, 'reddit_username' in form_data]):
        r = redis.StrictRedis(host=app.config['REDIS'])
        reddit_username = r.get('hr2:reddit:{}'.format(form_data['reddit_key']))
        if reddit_username != form_data['reddit_username']:
            return jsonify(error='Invalid Reddit token, '
                                 'maybe it has expired ?'), 403

    # Well, everything looks alright, let's create the application !
    user_id = application_form.character_name.data.replace(" ", "_").lower()
    application = {
        'applicant': {
            'user_id': user_id,
            'character_id': application_form.character_id.data,
            'character_name': application_form.character_name.data,
            'email': application_form.email.data,
            'key_id': application_form.key_id.data,
            'vcode': application_form.vcode.data,
            'reddit_username': form_data.get('reddit_username', None),
            'corporation_id': character_sheet.corporationID,
            'corporation_name': character_sheet.corporation,
            'alliance_id': character_sheet.__dict__.get('allianceID', None),
            'alliance_name': character_sheet.__dict__.get('alliance', None)
        },
        'corporation': {
            'corporation_id': application_form.corporation_id.data,
            'corporation_name': application_form.corporation_name.data
        },
        'motivation': application_form.motivation.data,
        'status': Status.Pending.value,
        'created_at': datetime.datetime.utcnow()
    }
    mongo.db.applications.insert(application)
    return jsonify(result='success'), 200
Exemple #9
0
def application_report(report):
    """
    Report that use the api given during the application process
    """

    # Creating EveTools object
    eve = EveTools(key_id=report['api']['key_id'],
                   vcode=report['api']['vcode'])

    # Resetting report
    report['characters'] = []
    report['errors'] = []

    # Let's start by checking the api key
    try:
        eve.check_key()
    except Exception as e:
        app.logger.exception(e)
        report['errors'].append(e.message)

    # Get full character info
    for eve_character in eve.get_characters():
        character = EveTools.auto_to_dict(eve_character)
        character['history'] = []
        for eve_corporation in eve_character.employmentHistory:
            corporation = EveTools.auto_to_dict(
                eve.safe_request(
                    'corp/CorporationSheet', True,
                    {'corporationID': eve_corporation.corporationID}))
            sleep(0.5)
            character['history'].append({
                'corporation_id':
                corporation['corporationID'],
                'corporation_name':
                corporation['corporationName'],
                'ticker':
                'BR',
                'alliance_id':
                corporation['allianceID']
                if 'allianceID' in corporation else None,
                'alliance_name':
                corporation['allianceName']
                if 'allianceName' in corporation else None,
                'start_date':
                datetime.datetime.utcfromtimestamp(eve_corporation.startDate)
            })

        # Contact list
        character['contacts'] = []
        contacts = eve.safe_request('char/ContactList', False, {
            'characterID': character['characterID']
        }).contactList
        for contact in contacts:
            if contact.contactID > 3020000:
                character['contacts'].append(EveTools.auto_to_dict(contact))

        # Standings
        standings = eve.safe_request('char/Standings', False,
                                     {'characterID': character['characterID']})
        character['standings'] = EveTools.auto_to_dict(
            standings.characterNPCStandings)

        # Wallet
        character['wallet'] = EveTools.auto_to_dict(
            eve.safe_request('char/WalletJournal', False, {
                'characterID': character['characterID'],
                'rowCount': 2560
            }).transactions)

        # Assets time !
        assets = eve.safe_request('char/AssetList', False, {
            'characterID': character['characterID']
        }).assets
        character['assets'] = EveTools.parse_assets(
            EveTools.auto_to_dict(assets))

        report['characters'].append(character)

    return report
Exemple #10
0
def auth_report(report):
    """
    Report that use the J4OAuth API to generate the report
    """

    eve = EveTools()

    # Resetting report
    report['characters'] = []
    report['errors'] = []
    # Get full character info
    auth_info = api_oauth.get('{base}user/{username}'.format(
        base=app.config['J4OAUTH']['base_url'],
        username=report['user_id'])).json()['user']
    if auth_info['auth_status'] != 'Internal':
        raise Exception(
            'User {user} is not a current member of the alliance, aborting...'.
            format(user=report['user_id']))

    for eve_character in auth_info['characters']:
        character = api_oauth.get(
            '{base}user/{username}/{character_id}/sheet'.format(
                base=app.config['J4OAUTH']['base_url'],
                username=report['user_id'],
                character_id=eve_character['character_id'])).json()['sheet']
        character['history'] = []
        for eve_corporation in character['employmentHistory']:
            corporation = EveTools.auto_to_dict(
                eve.safe_request(
                    'corp/CorporationSheet', True,
                    {'corporationID': eve_corporation['corporationID']}))
            sleep(1)
            character['history'].append({
                'corporation_id':
                corporation['corporationID'],
                'corporation_name':
                corporation['corporationName'],
                'ticker':
                'BR',
                'alliance_id':
                corporation['allianceID']
                if 'allianceID' in corporation else None,
                'alliance_name':
                corporation['allianceName']
                if 'allianceName' in corporation else None,
                'start_date':
                datetime.datetime.utcfromtimestamp(
                    eve_corporation['startDate'])
            })

        # Contact list
        contacts = api_oauth.get(
            '{base}user/{username}/{character_id}/contacts'.format(
                base=app.config['J4OAUTH']['base_url'],
                username=report['user_id'],
                character_id=character['characterID'])).json()['contacts']
        character['contacts'] = [
            contact for contact in contacts if contact['contactID'] > 3020000
        ]

        # Standings
        character['standings'] = api_oauth.get(
            '{base}user/{username}/{character_id}/standings'.format(
                base=app.config['J4OAUTH']['base_url'],
                username=report['user_id'],
                character_id=character['characterID'])).json()['standings']

        # Wallet
        character['wallet'] = api_oauth.get(
            '{base}user/{username}/{character_id}/wallet'.format(
                base=app.config['J4OAUTH']['base_url'],
                username=report['user_id'],
                character_id=character['characterID'])).json()['wallet']

        # Assets time !
        assets = api_oauth.get(
            '{base}user/{username}/{character_id}/assets'.format(
                base=app.config['J4OAUTH']['base_url'],
                username=report['user_id'],
                character_id=character['characterID'])).json()['assets']
        character['assets'] = EveTools.parse_assets(assets)

        report['characters'].append(character)

    return report
Exemple #11
0
def auth_report(report):
    """
    Report that use the J4OAuth API to generate the report
    """

    eve = EveTools()

    # Resetting report
    report['characters'] = []
    report['errors'] = []
    # Get full character info
    auth_info = api_oauth.get('{base}user/{username}'.format(
        base=app.config['J4OAUTH']['base_url'],
        username=report['user_id']
    )).json()['user']
    if auth_info['auth_status'] != 'Internal':
        raise Exception('User {user} is not a current member of the alliance, aborting...'.format(user=report['user_id']))

    for eve_character in auth_info['characters']:
        character = api_oauth.get('{base}user/{username}/{character_id}/sheet'.format(
            base=app.config['J4OAUTH']['base_url'],
            username=report['user_id'],
            character_id=eve_character['character_id']
        )).json()['sheet']
        character['history'] = []
        for eve_corporation in character['employmentHistory']:
            corporation = EveTools.auto_to_dict(eve.safe_request('corp/CorporationSheet', True, {'corporationID': eve_corporation['corporationID']}))
            sleep(1)
            character['history'].append({
                'corporation_id': corporation['corporationID'],
                'corporation_name': corporation['corporationName'],
                'ticker': 'BR',
                'alliance_id': corporation['allianceID'] if 'allianceID' in corporation else None,
                'alliance_name': corporation['allianceName'] if 'allianceName' in corporation else None,
                'start_date': datetime.datetime.utcfromtimestamp(eve_corporation['startDate'])
            })

        # Contact list
        contacts = api_oauth.get('{base}user/{username}/{character_id}/contacts'.format(
            base=app.config['J4OAUTH']['base_url'],
            username=report['user_id'],
            character_id=character['characterID']
        )).json()['contacts']
        character['contacts'] = [contact for contact in contacts
                                 if contact['contactID'] > 3020000]

        # Standings
        character['standings'] = api_oauth.get('{base}user/{username}/{character_id}/standings'.format(
            base=app.config['J4OAUTH']['base_url'],
            username=report['user_id'],
            character_id=character['characterID']
        )).json()['standings']

        # Wallet
        character['wallet'] = api_oauth.get('{base}user/{username}/{character_id}/wallet'.format(
            base=app.config['J4OAUTH']['base_url'],
            username=report['user_id'],
            character_id=character['characterID']
        )).json()['wallet']

        # Assets time !
        assets = api_oauth.get('{base}user/{username}/{character_id}/assets'.format(
            base=app.config['J4OAUTH']['base_url'],
            username=report['user_id'],
            character_id=character['characterID']
        )).json()['assets']
        character['assets'] = EveTools.parse_assets(assets)

        report['characters'].append(character)

    return report
Exemple #12
0
def application_report(report):
    """
    Report that use the api given during the application process
    """

    # Creating EveTools object
    eve = EveTools(key_id=report['api']['key_id'], vcode=report['api']['vcode'])

    # Resetting report
    report['characters'] = []
    report['errors'] = []

    # Let's start by checking the api key
    try:
        eve.check_key()
    except Exception as e:
        app.logger.exception(e)
        report['errors'].append(e.message)

    # Get full character info
    for eve_character in eve.get_characters():
        character = EveTools.auto_to_dict(eve_character)
        character['history'] = []
        for eve_corporation in eve_character.employmentHistory:
            corporation = EveTools.auto_to_dict(eve.safe_request('corp/CorporationSheet', True, {'corporationID': eve_corporation.corporationID}))
            sleep(0.5)
            character['history'].append({
                'corporation_id': corporation['corporationID'],
                'corporation_name': corporation['corporationName'],
                'ticker': 'BR',
                'alliance_id': corporation['allianceID'] if 'allianceID' in corporation else None,
                'alliance_name': corporation['allianceName'] if 'allianceName' in corporation else None,
                'start_date': datetime.datetime.utcfromtimestamp(eve_corporation.startDate)
            })

        # Contact list
        character['contacts'] = []
        contacts = eve.safe_request('char/ContactList', False, {'characterID': character['characterID']}).contactList
        for contact in contacts:
            if contact.contactID > 3020000:
                character['contacts'].append(EveTools.auto_to_dict(contact))

        # Standings
        standings = eve.safe_request('char/Standings', False, {'characterID': character['characterID']})
        character['standings'] = EveTools.auto_to_dict(standings.characterNPCStandings)

        # Wallet
        character['wallet'] = EveTools.auto_to_dict(eve.safe_request('char/WalletJournal', False, {'characterID': character['characterID'], 'rowCount': 2560}).transactions)

        # Assets time !
        assets = eve.safe_request('char/AssetList', False, {'characterID': character['characterID']}).assets
        character['assets'] = EveTools.parse_assets(EveTools.auto_to_dict(assets))

        report['characters'].append(character)

    return report