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])
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 ])
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)
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))
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 !')
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
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
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
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
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
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