Beispiel #1
0
def get_alliance(name=None, allianceid=None):
    api = apiroot()
    try:
        if name is None:
            name = api.eve.CharacterName(ids=allianceid).characters[0].name
        if allianceid is None:
            allianceid = api.eve.CharacterID(names=name).characters[0].characterID
        alliance_list = api.eve.AllianceList().alliances
    except Exception as e:
        raise UnknownAllianceError("Error getting alliance list for alliance "
                                   "%s (%s): %s" %
                                   (name, allianceid, str(e)))
    found = False
    for alliance in alliance_list:
        if allianceid is not None and alliance.allianceID == allianceid:
            if name is None:
                name = alliance.name
            found = True
        if name is not None and alliance.name == name:
            if allianceid is None:
                allianceid = alliance.allianceID
            found = True
    if not found:
        raise UnknownAllianceError('Alliance %s (%s) not found in API' %
                                   (name, allianceid))
    alliance, created = Alliance.objects.get_or_create(
        allianceid=allianceid,
        defaults={'name': name})
    if not created:
        alliance.name = name
        alliance.save()
    return alliance
Beispiel #2
0
def view_topstats(request):
    api = apiroot()
    fwts = api.eve.FacWarTopStats()

    vplastweek = Bag(characters=[],
                     corporations=[],
                     factions=[])
    for rank, entry in enumerate(fwts.characters.VictoryPointsLastWeek):
        image, corp = pilot_image_and_corp(entry.characterID)
        vplastweek.characters.append(Bag(rank=rank + 1,
                                         id=entry.characterID,
                                         name=entry.characterName,
                                         points=entry.victoryPoints,
                                         igb=igb.ShowInfoCharacter(entry.characterID),
                                         faction=image,
                                         corp="(Unknown)" if corp is None else corp.name,
                                         corpigb="" if corp is None else igb.ShowInfoCorp(corp.corporationid)))
    for rank, entry in enumerate(fwts.corporations.VictoryPointsLastWeek):
        vplastweek.corporations.append(Bag(rank=rank + 1,
                                           id=entry.corporationID,
                                           name=entry.corporationName,
                                           points=entry.victoryPoints,
                                           igb=igb.ShowInfoCorp(entry.corporationID),
                                           faction=corp_image(entry.corporationID)))
    for rank, entry in enumerate(fwts.factions.VictoryPointsLastWeek):
        vplastweek.factions.append(Bag(rank=rank + 1,
                                       id=entry.factionID,
                                       name=entry.factionName,
                                       points=entry.victoryPoints,
                                       igb="",
                                       faction=factionname_image(entry.factionName)))
    return direct_to_template(request, 'fw/topstats.html',
                              extra_context={'tab': 'topstats',
                                             'vplastweek': vplastweek,
                                             'cacheduntil': datetime.datetime.utcfromtimestamp(fwts._meta.cachedUntil)})
Beispiel #3
0
def view_submitpilots(request):
    if request.method == 'POST':
        names = request.POST.get("names", "")
        if "I found" in names and "for you" in names:
            messages.add_message(request, messages.ERROR,
                                 'You are trying to submit a locator trace. '
                                 'Please do that under "Submit Trace", use '
                                 'this form to submit pilot names.')
            return HttpResponseRedirect('/intel/submit/pilots/')
        names = [name.strip() for name in names.split("\n") if name != '']
        api = apiroot()
        charids = api.eve.CharacterID(names=",".join(names))
        charname2id = dict([(char.name, char.characterID)
                            for char in charids.characters])
        for name in names:
            if name in charname2id and charname2id[name] == 0:
                messages.add_message(request, messages.ERROR,
                                     "Pilot %s not found" % name)
                continue
            try:
                get_pilot(name, charname2id[name])
            except:
                messages.add_message(request, messages.ERROR,
                                     "Pilot %s not found" % name)
                continue
            messages.add_message(request, messages.INFO,
                                 "Pilot %s added" % name)
        return HttpResponseRedirect('/intel/submit/pilots/')
    return direct_to_template(request, 'intel/submitpilots.html',
                              extra_context={'tab': 'submitpilots'})
def get_membername(charid):
    grd = APIKey.objects.get(name='Gradient').corp()
    for row in grd.MemberTracking().members:
        if row.characterID == charid:
            return row.name
    api = apiroot()
    return api.eve.CharacterName(ids=charid).characters[0].name
Beispiel #5
0
 def apicheck(self):
     if self.corporationid is None:
         return
     api = apiroot()
     corpinfo = api.corp.CorporationSheet(corporationID=self.corporationid)
     lastapi = datetime.datetime.utcfromtimestamp(
         corpinfo._meta.currentTime)
     if corpinfo.ceoID >= 90000000: # Not an NPC
         ceo, created = Pilot.objects.get_or_create_from_api(
             characterid=corpinfo.ceoID)
         if not created:
             ceo.apicheck()
     if hasattr(corpinfo, 'allianceID') and corpinfo.allianceID > 0:
         ally, created = Alliance.objects.get_or_create_from_api(
             allianceid=corpinfo.allianceID)
         self.update_intel(lastapi, faction=None)
     else:
         ally = None
     # Corp 1028105327 has no ticker ...
     if not isinstance(corpinfo.ticker, (basestring, int)):
         corpinfo.ticker = ''
     self.update_intel(
         lastapi,
         name=corpinfo.corporationName,
         alliance=ally,
         ticker=corpinfo.ticker,
         members=corpinfo.memberCount,
         lastapi=lastapi,
         do_api_check=False
         )
Beispiel #6
0
def corp_size(corpid):
    api = apiroot()
    try:
        result = api.corp.CorporationSheet(corporationID=corpid)
        return result.memberCount
    except:
        return 0
Beispiel #7
0
 def from_request(cls, request):
     if cls.SESSIONVAR in request.session:
         return request.session[cls.SESSIONVAR]
     else:
         applicant = cls()
         charid = request.user.profile.characterid
         api = apiroot()
         applicant.charinfo = api.eve.CharacterInfo(characterID=charid)
         request.session[cls.SESSIONVAR] = applicant
         request.session.set_expiry(60 * 60 * 24 * 365)
         return applicant
Beispiel #8
0
    def recheck(self):
        api = apiroot()
        info = api.eve.CharacterInfo(characterID=self.characterid)
        self.name = info.characterName
        self.corpid = info.corporationID
        self.corpname = info.corporation
        self.allianceid = getattr(info, 'allianceID', None)
        self.alliancename = getattr(info, 'alliance', '')

        em = APIKey.objects.get(name='Gradient').corp()
        cl = em.ContactList()
        self.standing = 0
        for contact in cl.allianceContactList:
            if contact.contactID in [self.corpid, self.allianceid]:
                self.standing = contact.standing
                break
        self.lastchecked = datetime.datetime.utcnow()
def get_ownerid(arg):
    if '<' in arg or '>' in arg:
        return None
    api = apiroot()
    try:
        charid = api.eve.CharacterID(names=arg).characters[0].characterID
        if charid == 0:
            return None
        return charid
    except eveapi.Error as e:
        if e.code == 122: # Invalid or missing list of names
            return None
        raise
    except NameError: # Encoding error
        return None
    except UnicodeEncodeError:
        return None
Beispiel #10
0
def get_standings():
    alliance_corps = {}
    standings = {}
    api = apiroot()
    for ally in api.eve.AllianceList().alliances:
        alliance_corps[ally.allianceID] = set()
        for corp in ally.memberCorporations:
            alliance_corps[ally.allianceID].add(corp.corporationID)
    grd = APIKey.objects.get(name="Gradient").corp()
    try:
        gcl = grd.ContactList()
    except:
        return standings
    for contact in gcl.allianceContactList:
        standings[contact.contactID] = "%+i" % contact.standing
        for corpid in alliance_corps.get(contact.contactID, []):
            standings[corpid] = "%+i" % contact.standing
    return standings
Beispiel #11
0
def update_all():
    """
    Update all intel information.
    """
    api = apiroot()
    apicorp = APIKey.objects.get(name="Gradient").corp()
    alliances = set()
    # Alliance list
    for alliance in api.eve.AllianceList().alliances:
        alliances.add(alliance.allianceID)
        ally = get_alliance(alliance.name, alliance.allianceID)
        ally.ticker = alliance.shortName
        ally.members = alliance.memberCount
        ally.save()
        if ally.trackedentity_set.count() != 0:
            for corp in alliance.memberCorporations:
                get_corp(corpid=corp.corporationID)
    # Alliance standings
    # Bugged: contact.contactID can be dead alliance
    # for contact in apicorp.ContactList().allianceContactList:
    #     try:
    #         if contact.contactID in alliances:
    #             entity = get_alliance(allianceid=contact.contactID)
    #         else:
    #             entity = get_corp(corpid=contact.contactID)
    #     except UnknownEntityError:
    #         continue
    #     entity.standing = contact.standing
    #     entity.save()
    # Tracked entities
    for tracked in TrackedEntity.objects.all():
        if tracked.corporation:
            get_corp(tracked.corporation.name,
                     tracked.corporation.corporationid)
        if tracked.alliance:
            get_alliance(tracked.alliance.name,
                         tracked.alliance.allianceid)
    # Tracked pilots
    for pilot in Pilot.objects.all():
        if (pilot.corporation.trackedentity_set.count() > 0 or
            (pilot.alliance is not None and pilot.alliance.trackedentity_set.count() > 0)):
            get_pilot(pilot.name, pilot.characterid)
Beispiel #12
0
 def apicheck(self):
     if self.allianceid is None:
         return
     api = apiroot()
     allyapi = api.eve.AllianceList()
     lastapi = datetime.datetime.utcfromtimestamp(
         allyapi._meta.currentTime)
     for allyinfo in allyapi.alliances:
         if self.allianceid == allyinfo.allianceID:
             self.update_intel(lastapi,
                               name=allyinfo.name,
                               ticker=allyinfo.shortName,
                               members=allyinfo.memberCount,
                               lastapi=lastapi,
                               do_api_check=False)
             return
     self.update_intel(lastapi,
                       members=0,
                       lastapi=lastapi,
                       do_api_check=False)
Beispiel #13
0
def get_pilot(name=None, charid=None):
    api = apiroot()
    try:
        if charid is None:
            charid = api.eve.CharacterID(names=name).characters[0].characterID
        charinfo = api.eve.CharacterInfo(characterID=charid)
    except Exception as e:
        raise UnknownPilotError("Unknown pilot %s (%s): %s" %
                                (name, charid, str(e)))
    if hasattr(charinfo, 'allianceID'):
        alliance = get_alliance(charinfo.alliance, charinfo.allianceID)
    else:
        alliance = None

    corp = get_corp(charinfo.corporation, charinfo.corporationID)

    pilot, created = Pilot.objects.get_or_create(
        name=charinfo.characterName,
        characterid=charinfo.characterID,
        defaults={'corporation': corp,
                  'alliance': alliance,
                  'security': charinfo.securityStatus})
    if created:
        ChangeLog.objects.create(pilot=pilot,
                                 oldcorp=None,
                                 oldalliance=None,
                                 newcorp=corp,
                                 newalliance=alliance)
    else:
        if pilot.corporation != corp or pilot.alliance != alliance:
            ChangeLog.objects.create(pilot=pilot,
                                     oldcorp=pilot.corporation,
                                     oldalliance=pilot.alliance,
                                     newcorp=corp,
                                     newalliance=alliance)
        pilot.corporation = corp
        pilot.alliance = alliance
        pilot.security = charinfo.securityStatus
        pilot.save()
    return pilot
Beispiel #14
0
def get_corp(name=None, corpid=None):
    api = apiroot()
    try:
        if corpid is None:
            corpid = api.eve.CharacterID(names=name).characters[0].characterID
        corpsheet = api.corp.CorporationSheet(corporationID=corpid)
        if name is None:
            name = corpsheet.corporationName
    except Exception as e:
        raise UnknownCorporationError("Unknown corporation %s (%s): %s" %
                                      (name, corpid, str(e)))
    if hasattr(corpsheet, 'allianceName'):
        alliance = get_alliance(corpsheet.allianceName,
                                corpsheet.allianceID)
    else:
        alliance = None
    corp, created = Corporation.objects.get_or_create(
        corporationid=corpid,
        defaults={'name': name,
                  'alliance': alliance,
                  'ticker': corpsheet.ticker,
                  'members': corpsheet.memberCount})
    if not created:
        # Corp existed. If the alliance changed, all pilots change.
        if corp.alliance != alliance:
            for pilot in corp.pilot_set.all():
                ChangeLog.objects.create(pilot=pilot,
                                         oldcorp=corp,
                                         oldalliance=corp.alliance,
                                         newcorp=corp,
                                         newalliance=alliance)
                pilot.alliance = alliance
                pilot.save()
        # Update in any case to change the timestamp
        corp.name = name
        corp.alliance = alliance
        corp.ticker = corpsheet.ticker
        corp.members = corpsheet.memberCount
        corp.save()
    return corp
Beispiel #15
0
def handle_messages_view(request, characterid=None):
    api = apiroot()
    if characterid is not None:
        name = api.eve.CharacterName(ids=characterid).characters[0].name
    else:
        name = None
    if request.method == 'POST':
        if characterid is not None:
            Message.objects.create(
                characterid=characterid,
                name=name,
                read_by_customer=False,
                read_by_handler=True,
                handler=request.user,
                text=request.POST.get('text', '')
            )
        return HttpResponseRedirect('/shop/handle/messages/%s/' % characterid)
    message_list = Message.objects.all()
    if characterid is not None:
        message_list = message_list.filter(characterid=characterid)
    paginator = Paginator(message_list, 10)
    try:
        pagenum = int(request.GET.get('page', None))
    except (ValueError, TypeError):
        pagenum = paginator.num_pages
    try:
        page = paginator.page(pagenum)
    except (EmptyPage, InvalidPage):
        page = paginator.page(paginator.num_pages)
    context = {}
    context['is_paginated'] = True
    context['page_obj'] = page
    context['message_list'] = page.object_list
    context['characterid'] = characterid
    context['charactername'] = name
    for message in page.object_list:
        message.read_by_handler = True
        message.save()
    return direct_to_template(request, 'shop/handle-messages.html',
                              extra_context=context)
Beispiel #16
0
def view_corps(request):
    corp_lists = {}
    known_members = {}
    amarr_standings = 0
    qs = Corporation.objects.exclude(
        faction=None
        ).exclude(
        members=0
        ).order_by("-members", "name")
    for corp in qs:
        corp_lists.setdefault(corp.faction.name, [])
        corp_lists[corp.faction.name].append(corp)
        known_members.setdefault(corp.faction.name, 0)
        if corp.members is not None:
            known_members[corp.faction.name] += corp.members
        if (corp.faction.name == 'Amarr Empire' and
            corp.standing is not None and corp.standing == -10):
            amarr_standings += corp.members
    api = apiroot()
    fws = api.eve.FacWarStats()
    all_members = dict((row.factionName, row.pilots)
                       for row in fws.factions)
    return direct_to_template(request, 'fw/corps.html',
                              extra_context={
            'tab': 'corps',
            'amarr_standings': amarr_standings,
            'amarr_percentage': 100 * (amarr_standings /
                                       float(all_members['Amarr Empire'])),
            'corp_lists': [(name, corp_lists[name], image,
                            known_members[name], all_members[name],
                            100 * (known_members[name] /
                                   float(all_members[name])),
                            )
                           for (name, image) in
                           [('Amarr Empire', '/media/img/icons/amarr.png'),
                            ('Minmatar Republic', '/media/img/icons/minmatar.png'),
                            ('Caldari State', '/media/img/icons/caldari.png'),
                            ('Gallente Federation', '/media/img/icons/gallente.png')]
                           ]})
def get_evsco_feeds(entities_per_feed=1):
    """
    Generate EVSCO feeds from our standings and all entities active in
    the Republic in the last 28 days.
    """
    key = APIKey.objects.get(name='Gradient')
    cl = key.corp().ContactList()
    api = apiroot()
    al = api.eve.AllianceList()
    all_alliances = set(a.allianceID for a in al.alliances)
    corpids = set()
    allianceids = set()
    for contact in cl.allianceContactList:
        if contact.contactID in all_alliances:
            allianceids.add(contact.contactID)
        else:
            corpids.add(contact.contactID)
    feeds = []
    for corpid in corpids:
        feeds.append("http://eve-kill.net/?a=idfeed&corp=%s" % corpid)
    for allianceid in allianceids:
        feeds.append("http://eve-kill.net/?a=idfeed&alliance=%s" % allianceid)
    return feeds
Beispiel #18
0
 def apicheck(self):
     if self.characterid is None:
         return
     api = apiroot()
     charinfo = api.eve.CharacterInfo(characterID=self.characterid)
     corp, created = Corporation.objects.get_or_create(
         corporationid=charinfo.corporationID)
     if hasattr(charinfo, 'allianceID'):
         ally, created = Alliance.objects.get_or_create(
             allianceid=charinfo.allianceID)
     else:
         ally = None
     lastapi = datetime.datetime.utcfromtimestamp(
         charinfo._meta.currentTime)
     self.update_intel(
         lastapi,
         name=charinfo.characterName,
         corporation=corp,
         alliance=ally,
         security=charinfo.securityStatus,
         lastapi=lastapi,
         do_api_check=False,
         )
Beispiel #19
0
gmt = grd.MemberTracking()
prospects = [m.name for m in gms.members
             if "Prospect" in [t.titleName for t in m.titles]]
non_prospects = [m.name for m in gms.members
                 if "Prospect" not in [t.titleName for t in m.titles]]
everyone = [m.name for m in gms.members]

c.execute("UPDATE vote SET allowed_voters = %s WHERE id IN (163, 164)",
          ["".join((name + "\n") for name in non_prospects)])
for name in everyone:
    c.execute("INSERT INTO vote_option (vote_id, name) "
              "VALUES (%s, %s)",
              [163, name])

from emtools.ccpeve.models import apiroot
api = apiroot()

old = time.time() - (60*60*24*365*2)

younger_than_two_years = []
for m in gmt.members:
    cs = api.eve.CharacterInfo(characterID=m.characterID)
    license = cs.employmentHistory[-1].startDate
    if license > old:
        younger_than_two_years.append(m.name)


for name in younger_than_two_years:
    c.execute("INSERT INTO vote_option (vote_id, name) "
              "VALUES (%s, %s)",
              [164, name])
Beispiel #20
0
def add_transaction_info(grd):
    api = apiroot()
    standingmap = dict((row.contactID, row.standing)
                       for row in grd.ContactList().allianceContactList)
    for entry in Transaction.objects.filter(info=None):
        info = TransactionInfo()
        info.transaction = entry
        info.account = Account.objects.get(accountkey=entry.accountkey)
        info.typename = get_typename(entry.typeid)
        if info.typename is None:
            continue
        try:
            pl = PriceList.objects.get(typeid=entry.typeid)
            info.cost = pl.productioncost
            info.safetymargin = pl.safetymargin
        except PriceList.DoesNotExist:
            try:
                index = Index.objects.filter(typeid=entry.typeid)[0:1].get()
                info.cost = index.republic
                info.safetymargin = 1.0
            except Index.DoesNotExist:
                info.cost = 0.0
                info.safetymargin = 1.1
        info.stationname = get_itemname(entry.stationid)
        if entry.characterid is not None:
            info.charactername = get_membername(entry.characterid)
        try:
            charinfo = api.eve.CharacterInfo(characterID=entry.clientid)
        except:
            pass
        else:
            info.clientname = charinfo.characterName
            info.clientstanding = standingmap.get(charinfo.characterID, None)
            info.clientcorp = charinfo.corporation
            info.clientcorpid = charinfo.corporationID
            info.clientcorpstanding = standingmap.get(charinfo.corporationID,
                                                      None)
            if hasattr(charinfo, 'allianceID'):
                info.clientalliance = charinfo.alliance
                info.clientallianceid = charinfo.allianceID
                info.clientalliancestanding = standingmap.get(
                    charinfo.allianceID,
                    None)
            info.save()
            transaction.commit()
            continue
        # It's a CorporationID!
        info.clientname = None
        info.clientstanding = None
        info.clientcorpid = entry.clientid
        name = get_itemname(entry.clientid)
        if name is not None: # NPC corp
            info.clientcorp = name
            info.clientcorpstanding = standingmap.get(entry.clientid, None)
            info.save()
            transaction.commit()
            continue
        # Player corp
        try:
            corpinfo = api.eve.CorporationSheet(corporationID=entry.clientid)
        except: # Something bad happened, ignore this
            transaction.rollback()
            continue
        info.clientcorp = corpinfo.corporationName
        info.clientcorpstanding = standingmap.get(corpinfo.corporationID,
                                                  None)
        if hasattr(corpinfo, 'allianceID'):
            info.clientalliance = corpinfo.allianceName
            info.clientallianceid = corpinfo.allianceID
            info.clientalliancestanding = standingmap.get(corpinfo.allianceID,
                                                          None)
        info.save()
        transaction.commit()
Beispiel #21
0
def auth_view(request):
    shopuser = ShopUser.from_request(request)
    shopinfo = ShopInfo()
    context = {'shopinfo': shopinfo,
               'shopuser': shopuser}

    if request.method == 'GET':
        context['next_url'] = request.GET.get('next', '/shop/')
        return direct_to_template(request, 'shop/auth.html',
                                  extra_context=context)
    # POST
    context['next_url'] = request.POST.get('next')
    keyid = request.POST.get('keyid')
    vcode = request.POST.get('vcode')
    characterid = request.POST.get('characterid')
    if keyid is None or vcode is None:
        return direct_to_template(request, 'shop/auth.html',
                                  extra_context=context)
    context['keyid'] = keyid
    context['vcode'] = vcode
    if 'grdshop' not in vcode:
        context['error'] = 'bad-vcode'
        return direct_to_template(request, 'shop/auth.html',
                                  extra_context=context)
    # Check API key
    api = apiroot()
    api = api.auth(keyID=keyid, vCode=vcode)
    try:
        keyinfo = api.account.APIKeyInfo()
    except Exception as e:
        context['error'] = 'api-error'
        context['message'] = ('Error %s during API call: %s' %
                              (e.__class__.__name__, str(e)))
        return direct_to_template(request, 'shop/auth.html',
                                  extra_context=context)
    context['characters'] = keyinfo.key.characters
    if len(keyinfo.key.characters) == 1:
        char = keyinfo.key.characters[0]
    elif len(keyinfo.key.characters) > 1 and characterid is None:
        return direct_to_template(request, 'shop/auth.html',
                                  extra_context=context)
    else:
        char = None
        for char_entry in keyinfo.key.characters:
            if str(char_entry.characterID) == characterid:
                char = char_entry
                break
        if char is None:
            context['error'] = 'char-not-found'
            return direct_to_template(request, 'shop/auth.html',
                                      extra_context=context)
    user = shopuser
    user.characterid = char.characterID
    user.name = char.characterName
    try:
        user.recheck()
    except Exception as e:
        context['error'] = 'api-error'
        context['message'] = ('Error %s during API call: %s' %
                              (e.__class__.__name__, str(e)))
        return direct_to_template(request, 'shop/auth.html',
                                  extra_context=context)
    request.session.set_expiry(60 * 60 * 24 * 365)
    user.save(request)
    return HttpResponseRedirect(context['next_url'])
Beispiel #22
0
def authenticate_users(user=None):
    """
    Authenticate all users.

    Go through MyBB users. If they do not have a profile, drop groups.
    If they have a profile, if it's not active, drop groups.
    Go through groups.
    """
    start = datetime.datetime.utcnow()
    db = utils.connect('emforum')

    # dict of name -> (titles, freeformtitle)
    grddetails = get_gradient_details()
    # set of entityID
    allies = get_allies()

    if user is None:
        users = get_mybbusers(db)
    else:
        users = get_mybbusers(db, user.profile.mybb_uid)

    api = apiroot()
    totalcount = 0
    activecount = 0

    for mybbuser in users:
        if mybbuser.has_group('Banned'):
            continue
        totalcount += 1
        oldcorp = None
        if mybbuser.profile:
            oldcorp = mybbuser.profile.corp
        reason = update_single_user(api, mybbuser, grddetails, allies)
        if len(mybbuser.toadd) == 0:
            active = False
        else:
            active = True
            activecount += 1
        if mybbuser.profile:
            if mybbuser.profile.usertitle:
                usertitle = '<b>%s</b><br />' % mybbuser.profile.usertitle
            elif mybbuser.has_group('Council'):
                usertitle = '<b>Council Member</b><br />'
            elif mybbuser.has_group('Diplomats'):
                usertitle = '<b>Alliance Diplomat</b><br />'
            else:
                usertitle = ''
            if mybbuser.profile.alliance:
                usertitle += '%s<br />%s' % (mybbuser.profile.corp,
                                             mybbuser.profile.alliance)
            elif mybbuser.profile.corp:
                usertitle += mybbuser.profile.corp
            mybbuser.usertitle = usertitle
        mybbuser.save()
        if mybbuser.profile:
            mybbuser.profile.active = active
            mybbuser.profile.save()
            newcorp = mybbuser.profile.corp
        change_description = mybbuser.change_description()
        if change_description is not None:
            message = "User %s %s: %s" % (mybbuser.username,
                                          change_description,
                                          reason)
            if not active:
                message += ", marking inactive"
            log.info("%s" % (message,))
            if mybbuser.profile:
                for corp in set([oldcorp, newcorp]):
                    if corp is not None:
                        AuthLog.objects.create(corp=corp, message=message)
            else:
                AuthLog.objects.create(corp=None, message=message)
    db.commit()
    end = datetime.datetime.utcnow()
    if user is None:
        log.info("Authenticated %i active users of %i in %s" %
                 (activecount, totalcount, str(end - start)))
Beispiel #23
0
def main_handle_apikey(request):
    profile = request.user.profile
    keyid = request.POST.get('keyID', None)
    vcode = request.POST.get('vCode', None)
    selected_charid = request.POST.get('characterID', None)
    dorename = request.POST.get('dorename', False)
    api = apiroot()
    if vcode is not None and not 'emforum' in vcode:
        messages.add_message(request, messages.ERROR,
                             "Please change your Verification Code so "
                             "it contains the string 'emforum'")
        return HttpResponseRedirect('/auth/')
    try:
        chars = api.account.Characters(keyID=keyid, vCode=vcode)
        chars = [(row.name, row.characterID) for row in chars.characters]
    except Exception as e:
        messages.add_message(request, messages.ERROR,
                             "Error during API call: %s" % str(e))
        return HttpResponseRedirect('/auth/')
    if len(chars) == 1:
        charname, charid = chars[0]
    else:
        charname = None
        charid = None
        for thischarname, thischarid in chars:
            if (str(thischarid) == selected_charid or
                thischarname.lower() == profile.mybb_username.lower()):
                charname = thischarname
                charid = thischarid
                break
        if charname is None:
            return direct_to_template(
                request, 'emauth/main.html',
                extra_context={'state': 'select_character',
                               'character_list': sorted(chars),
                               'keyID': keyid,
                               'vCode': vcode,
                               'tab': 'auth'})
    if charname != profile.mybb_username:
        if not dorename:
            return direct_to_template(
                request, 'emauth/main.html',
                extra_context={'state': 'ask_rename',
                               'keyID': keyid,
                               'vCode': vcode,
                               'characterID': charid,
                               'forum_name': profile.mybb_username,
                               'char_name': charname,
                               'tab': 'auth'})
        else:
            db = utils.connect('emforum')
            c = db.cursor()
            if not userauth.mybb_setusername(c, profile.mybb_uid, charname):
                db.rollback()
                messages.add_message(request, messages.ERROR,
                                     "That username already exists. Please "
                                     "contact a forum administrator to "
                                     "resolve this conflict.")
                return HttpResponseRedirect('/auth/')
            db.commit()
            messages.add_message(request, messages.INFO,
                                 "Forum username changed to %s" % charname)
    # Forum username is correct now
    # Set the profile info
    charinfo = api.eve.CharacterInfo(characterID=charid)
    profile.name = charinfo.characterName
    profile.characterid = charinfo.characterID
    profile.corp = charinfo.corporation
    profile.corpid = charinfo.corporationID
    profile.alliance = getattr(charinfo, 'alliance', None)
    profile.allianceid = getattr(charinfo, 'allianceID', None)
    profile.active = True
    profile.save()
    try:
        userauth.authenticate_users(profile.user)
        messages.add_message(request, messages.INFO,
                             "Authentication successful.")
    except userauth.AuthenticationError as e:
        messages.add_message(request, messages.ERROR,
                             str(e))
    return HttpResponseRedirect('/auth/')
Beispiel #24
0
def audit_apikey(request, userid, apikey, visibility):
    try:
        api = apiroot().auth(keyID=userid, vCode=apikey)
        characters = api.account.Characters()
    except Exception as e:
        messages.add_message(request, messages.ERROR,
                             "Error during API call: %s" % (str(e),))
        return None

    user = User(userid=userid,
                visibility=visibility)
    user.save()
    for row in characters.characters:
        try:
            charapi = api.character(row.characterID)
            sheet = charapi.CharacterSheet()
            standings = charapi.Standings()
            info = api.eve.CharacterInfo(characterID=row.characterID)
        except Exception as e:
            messages.add_message(request, messages.ERROR,
                                 "Error during API call: %s" % (str(e),))
            return None
        char = Character(user=user,
                         characterid=row.characterID,
                         name=row.name,
                         gender=sheet.gender,
                         race=sheet.race,
                         bloodline=sheet.bloodLine,
                         security=info.securityStatus,
                         graduation=utc(sheet.DoB),
                         skillpoints=sum(skill.skillpoints for skill
                                          in sheet.skills),
                         wallet=sheet.balance,
                         corpid=sheet.corporationID,
                         corpname=sheet.corporationName,
                         corpjoin=utc(info.corporationDate))
        if hasattr(sheet, 'allianceID') and sheet.allianceID > 0:
            char.allianceid = sheet.allianceID
            char.alliancename = sheet.allianceName
            if hasattr(info, 'allianceDate'):
                char.alliancejoin = utc(info.allianceDate)
        char.save()
        for skill in sheet.skills:
            typename = get_typename(skill.typeID)
            if typename is None:
                typename = "<TypeID %s>" % skill.typeID
            Skill.objects.create(character=char,
                                 typeid=skill.typeID,
                                 typename=typename,
                                 skillpoints=skill.skillpoints,
                                 level=skill.level,
                                 published=skill.published)
        for bonus in ['charismaBonus', 'intelligenceBonus', 'memoryBonus',
                      'perceptionBonus', 'willpowerBonus']:
            if not hasattr(sheet.attributeEnhancers, bonus):
                continue
            name = bonus[:-5].title()
            obj = getattr(sheet.attributeEnhancers, bonus)
            Implant.objects.create(character=char,
                                   attribute=name,
                                   augmentor=obj.augmentatorName,
                                   value=obj.augmentatorValue)
        for faction in standings.characterNPCStandings.factions:
            Standing.objects.create(character=char,
                                    entitytype="faction",
                                    fromid=faction.fromID,
                                    fromname=faction.fromName,
                                    standing=faction.standing)
        for corp in standings.characterNPCStandings.NPCCorporations:
            Standing.objects.create(character=char,
                                    entitytype="corp",
                                    fromid=corp.fromID,
                                    fromname=corp.fromName,
                                    standing=corp.standing)
        for agent in standings.characterNPCStandings.agents:
            Standing.objects.create(character=char,
                                    entitytype="agent",
                                    fromid=agent.fromID,
                                    fromname=agent.fromName,
                                    standing=agent.standing)
    return user
Beispiel #25
0
def get_charname(charid):
    api = apiroot()
    try:
        return api.eve.CharacterName(ids=charid).characters[0].name
    except:
        return None