mirror of
https://github.com/nikdoof/test-auth.git
synced 2025-12-14 06:42:16 +00:00
Initial work on eve_api for Django 1.4
This commit is contained in:
@@ -1,7 +1,9 @@
|
|||||||
from django.db import models
|
from django.db import models
|
||||||
from django.contrib.auth.models import Group
|
from django.contrib.auth.models import Group
|
||||||
|
|
||||||
from eve_api.models import EVEAPIModel
|
from eve_api.models import EVEAPIModel
|
||||||
|
|
||||||
|
|
||||||
class EVEPlayerAlliance(EVEAPIModel):
|
class EVEPlayerAlliance(EVEAPIModel):
|
||||||
"""
|
"""
|
||||||
Represents a player-controlled alliance. Updated from the alliance
|
Represents a player-controlled alliance. Updated from the alliance
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
from django.db import models
|
from django.db import models
|
||||||
from django.core.exceptions import ObjectDoesNotExist
|
from django.core.exceptions import ObjectDoesNotExist
|
||||||
|
|
||||||
from eve_api.app_defines import *
|
from eve_api.app_defines import *
|
||||||
from eve_api.models import EVEAPIModel
|
from eve_api.models import EVEAPIModel
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,12 @@
|
|||||||
from django.db import models
|
from django.db import models
|
||||||
from django.contrib.auth.models import Group
|
from django.contrib.auth.models import Group
|
||||||
|
|
||||||
from gargoyle import gargoyle
|
from gargoyle import gargoyle
|
||||||
|
|
||||||
from eve_api.models import EVEAPIModel
|
from eve_api.models import EVEAPIModel
|
||||||
from eve_api.app_defines import *
|
from eve_api.app_defines import *
|
||||||
|
|
||||||
|
|
||||||
class EVEPlayerCorporation(EVEAPIModel):
|
class EVEPlayerCorporation(EVEAPIModel):
|
||||||
"""
|
"""
|
||||||
Represents a player-controlled corporation. Updated from a mixture of
|
Represents a player-controlled corporation. Updated from a mixture of
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ from eve_api.tasks.corporation import import_corp_members, import_corp_details
|
|||||||
from sso.tasks import update_user_access
|
from sso.tasks import update_user_access
|
||||||
|
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
|
from django.utils.timezone import now, utc
|
||||||
|
|
||||||
@task(ignore_result=True, expires=120)
|
@task(ignore_result=True, expires=120)
|
||||||
def queue_apikey_updates(update_delay=86400, batch_size=50):
|
def queue_apikey_updates(update_delay=86400, batch_size=50):
|
||||||
@@ -40,9 +41,9 @@ def queue_apikey_updates(update_delay=86400, batch_size=50):
|
|||||||
log.info("Updating APIs older than %s" % (datetime.now() - delta))
|
log.info("Updating APIs older than %s" % (datetime.now() - delta))
|
||||||
|
|
||||||
if gargoyle.is_active('eve-cak'):
|
if gargoyle.is_active('eve-cak'):
|
||||||
accounts = EVEAccount.objects.filter(api_last_updated__lt=(datetime.now() - delta)).exclude(api_status__in=[API_STATUS_ACC_EXPIRED, API_STATUS_KEY_EXPIRED, API_STATUS_AUTH_ERROR]).order_by('api_last_updated')[:batch_size]
|
accounts = EVEAccount.objects.filter(api_last_updated__lt=(now() - delta)).exclude(api_status__in=[API_STATUS_ACC_EXPIRED, API_STATUS_KEY_EXPIRED, API_STATUS_AUTH_ERROR]).order_by('api_last_updated')[:batch_size]
|
||||||
else:
|
else:
|
||||||
accounts = EVEAccount.objects.filter(api_last_updated__lt=(datetime.now() - delta)).exclude(api_status__in=[API_STATUS_ACC_EXPIRED, API_STATUS_KEY_EXPIRED, API_STATUS_AUTH_ERROR]).exclude(api_keytype__gt=2).order_by('api_last_updated')[:batch_size]
|
accounts = EVEAccount.objects.filter(api_last_updated__lt=(now() - delta)).exclude(api_status__in=[API_STATUS_ACC_EXPIRED, API_STATUS_KEY_EXPIRED, API_STATUS_AUTH_ERROR]).exclude(api_keytype__gt=2).order_by('api_last_updated')[:batch_size]
|
||||||
log.info("%s account(s) to update" % accounts.count())
|
log.info("%s account(s) to update" % accounts.count())
|
||||||
for acc in accounts:
|
for acc in accounts:
|
||||||
log.debug("Queueing UserID %s for update" % acc.pk)
|
log.debug("Queueing UserID %s for update" % acc.pk)
|
||||||
@@ -115,7 +116,7 @@ def import_apikey_func(api_userid, api_key, user=None, force_cache=False, log=lo
|
|||||||
account.api_keytype = API_KEYTYPE_ACCOUNT
|
account.api_keytype = API_KEYTYPE_ACCOUNT
|
||||||
account.api_accessmask = int(keydoc['accessMask'])
|
account.api_accessmask = int(keydoc['accessMask'])
|
||||||
if not keydoc['expires'] == '':
|
if not keydoc['expires'] == '':
|
||||||
account.api_expiry = datetime.strptime(keydoc['expires'], '%Y-%m-%d %H:%M:%S')
|
account.api_expiry = datetime.strptime(keydoc['expires'], '%Y-%m-%d %H:%M:%S').replace(tzinfo=utc)
|
||||||
|
|
||||||
# Checks account status to see if the account is still active
|
# Checks account status to see if the account is still active
|
||||||
if not account.api_keytype == API_KEYTYPE_CORPORATION:
|
if not account.api_keytype == API_KEYTYPE_CORPORATION:
|
||||||
@@ -124,8 +125,8 @@ def import_apikey_func(api_userid, api_key, user=None, force_cache=False, log=lo
|
|||||||
status = CachedDocument.objects.api_query('/account/AccountStatus.xml.aspx', params=auth_params, no_cache=True)
|
status = CachedDocument.objects.api_query('/account/AccountStatus.xml.aspx', params=auth_params, no_cache=True)
|
||||||
status = basic_xml_parse_doc(status)['eveapi']
|
status = basic_xml_parse_doc(status)['eveapi']
|
||||||
if not status.get('error', None):
|
if not status.get('error', None):
|
||||||
paiddate = datetime.strptime(status['result']['paidUntil'], '%Y-%m-%d %H:%M:%S')
|
paiddate = datetime.strptime(status['result']['paidUntil'], '%Y-%m-%d %H:%M:%S').replace(tzinfo=utc)
|
||||||
if paiddate <= datetime.utcnow():
|
if paiddate <= now():
|
||||||
account.api_status = API_STATUS_ACC_EXPIRED
|
account.api_status = API_STATUS_ACC_EXPIRED
|
||||||
else:
|
else:
|
||||||
account.api_status = API_STATUS_OK
|
account.api_status = API_STATUS_OK
|
||||||
@@ -236,7 +237,7 @@ def import_apikey_func(api_userid, api_key, user=None, force_cache=False, log=lo
|
|||||||
if account.user:
|
if account.user:
|
||||||
update_user_access.delay(account.user.id)
|
update_user_access.delay(account.user.id)
|
||||||
|
|
||||||
account.api_last_updated = datetime.utcnow()
|
account.api_last_updated = now()
|
||||||
account.save()
|
account.save()
|
||||||
return account
|
return account
|
||||||
|
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ from eve_api.utils import basic_xml_parse_doc
|
|||||||
from eve_api.tasks.corporation import import_corp_details, import_corp_details_result
|
from eve_api.tasks.corporation import import_corp_details, import_corp_details_result
|
||||||
|
|
||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
|
from django.utils.timezone import now, utc
|
||||||
|
|
||||||
@task(ignore_result=True, default_retry_delay=10 * 60)
|
@task(ignore_result=True, default_retry_delay=10 * 60)
|
||||||
def import_alliance_details():
|
def import_alliance_details():
|
||||||
@@ -32,10 +33,10 @@ def import_alliance_details():
|
|||||||
allobj, created = EVEPlayerAlliance.objects.get_or_create(pk=alliance['allianceID'])
|
allobj, created = EVEPlayerAlliance.objects.get_or_create(pk=alliance['allianceID'])
|
||||||
allobj.name = alliance['name']
|
allobj.name = alliance['name']
|
||||||
allobj.ticker = alliance['shortName']
|
allobj.ticker = alliance['shortName']
|
||||||
allobj.date_founded = datetime.strptime(alliance['startDate'], "%Y-%m-%d %H:%M:%S")
|
allobj.date_founded = datetime.strptime(alliance['startDate'], "%Y-%m-%d %H:%M:%S").replace(tzinfo=utc)
|
||||||
allobj.executor, created = EVEPlayerCorporation.objects.get_or_create(id=alliance['executorCorpID'])
|
allobj.executor, created = EVEPlayerCorporation.objects.get_or_create(id=alliance['executorCorpID'])
|
||||||
allobj.member_count = alliance['memberCount']
|
allobj.member_count = alliance['memberCount']
|
||||||
allobj.api_last_updated = datetime.utcnow()
|
allobj.api_last_updated = now()
|
||||||
allobj.save()
|
allobj.save()
|
||||||
|
|
||||||
members = [int(corp['corporationID']) for corp in alliance['memberCorporations']]
|
members = [int(corp['corporationID']) for corp in alliance['memberCorporations']]
|
||||||
|
|||||||
@@ -2,6 +2,8 @@ from datetime import datetime, timedelta
|
|||||||
from xml.dom import minidom
|
from xml.dom import minidom
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
|
from django.utils.timezone import now, utc
|
||||||
|
|
||||||
from celery.task import task
|
from celery.task import task
|
||||||
from celery.task.sets import subtask
|
from celery.task.sets import subtask
|
||||||
from gargoyle import gargoyle
|
from gargoyle import gargoyle
|
||||||
@@ -85,11 +87,11 @@ def import_eve_character_func(character_id, key_id=None, logger=logging.getLogge
|
|||||||
# Set corporation and join date
|
# Set corporation and join date
|
||||||
corp, created = EVEPlayerCorporation.objects.get_or_create(pk=values['corporationID'])
|
corp, created = EVEPlayerCorporation.objects.get_or_create(pk=values['corporationID'])
|
||||||
from eve_api.tasks.corporation import import_corp_details
|
from eve_api.tasks.corporation import import_corp_details
|
||||||
if created or not corp.name or corp.api_last_updated < (datetime.utcnow() - timedelta(hours=12)):
|
if created or not corp.name or corp.api_last_updated < (now() - timedelta(hours=12)):
|
||||||
import_corp_details.delay(values['corporationID'])
|
import_corp_details.delay(values['corporationID'])
|
||||||
|
|
||||||
pchar.corporation = corp
|
pchar.corporation = corp
|
||||||
pchar.corporation_date = values['corporationDate']
|
pchar.corporation_date = datetime.strptime(values['corporationDate'], "%Y-%m-%d %H:%M:%S").replace(tzinfo=utc)
|
||||||
|
|
||||||
# Derrive Race value from the choices
|
# Derrive Race value from the choices
|
||||||
for v in API_RACES_CHOICES:
|
for v in API_RACES_CHOICES:
|
||||||
@@ -106,7 +108,8 @@ def import_eve_character_func(character_id, key_id=None, logger=logging.getLogge
|
|||||||
corp, created = EVEPlayerCorporation.objects.get_or_create(pk=emp['corporationID'])
|
corp, created = EVEPlayerCorporation.objects.get_or_create(pk=emp['corporationID'])
|
||||||
if created:
|
if created:
|
||||||
import_corp_details.delay(emp['corporationID'])
|
import_corp_details.delay(emp['corporationID'])
|
||||||
eobj, created = EVEPlayerCharacterEmploymentHistory.objects.get_or_create(pk=emp['recordID'], corporation=corp, character=pchar, start_date=emp['startDate'])
|
startdate = datetime.strptime(emp['startDate'], "%Y-%m-%d %H:%M:%S").replace(tzinfo=utc)
|
||||||
|
eobj, created = EVEPlayerCharacterEmploymentHistory.objects.get_or_create(pk=emp['recordID'], corporation=corp, character=pchar, start_date=startdate)
|
||||||
|
|
||||||
# We've been passed a Key ID, try and work with it
|
# We've been passed a Key ID, try and work with it
|
||||||
if key_id:
|
if key_id:
|
||||||
@@ -183,7 +186,7 @@ def import_eve_character_func(character_id, key_id=None, logger=logging.getLogge
|
|||||||
else:
|
else:
|
||||||
pchar.gender = API_GENDER_FEMALE
|
pchar.gender = API_GENDER_FEMALE
|
||||||
|
|
||||||
pchar.api_last_updated = datetime.utcnow()
|
pchar.api_last_updated = now()
|
||||||
pchar.save()
|
pchar.save()
|
||||||
|
|
||||||
if acc:
|
if acc:
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ def import_corp_details_result(corp_id, callback=None):
|
|||||||
def import_corp_details_func(corp_id, log=logging.getLogger(__name__)):
|
def import_corp_details_func(corp_id, log=logging.getLogger(__name__)):
|
||||||
|
|
||||||
corpobj, created = EVEPlayerCorporation.objects.get_or_create(id=corp_id)
|
corpobj, created = EVEPlayerCorporation.objects.get_or_create(id=corp_id)
|
||||||
if created or not corpobj.api_last_updated or corpobj.api_last_updated < (datetime.utcnow() - timedelta(hours=12)):
|
if created or not corpobj.api_last_updated or corpobj.api_last_updated < (now() - timedelta(hours=12)):
|
||||||
|
|
||||||
try:
|
try:
|
||||||
doc = CachedDocument.objects.api_query('/corp/CorporationSheet.xml.aspx', {'corporationID': corp_id})
|
doc = CachedDocument.objects.api_query('/corp/CorporationSheet.xml.aspx', {'corporationID': corp_id})
|
||||||
@@ -98,7 +98,7 @@ def import_corp_details_func(corp_id, log=logging.getLogger(__name__)):
|
|||||||
if int(d['allianceID']):
|
if int(d['allianceID']):
|
||||||
corpobj.alliance, created = EVEPlayerAlliance.objects.get_or_create(id=d['allianceID'])
|
corpobj.alliance, created = EVEPlayerAlliance.objects.get_or_create(id=d['allianceID'])
|
||||||
|
|
||||||
corpobj.api_last_updated = datetime.utcnow()
|
corpobj.api_last_updated = now()
|
||||||
corpobj.save()
|
corpobj.save()
|
||||||
|
|
||||||
# Skip looking up the CEOs for NPC corps and ones with no CEO defined (dead corps)
|
# Skip looking up the CEOs for NPC corps and ones with no CEO defined (dead corps)
|
||||||
@@ -159,10 +159,10 @@ def import_corp_members(key_id, character_id):
|
|||||||
if created:
|
if created:
|
||||||
charobj.name = character['name']
|
charobj.name = character['name']
|
||||||
charobj.corporation = corp
|
charobj.corporation = corp
|
||||||
charobj.corporation_date = character['startDateTime']
|
charobj.corporation_date = datetime.strptime(character['startDateTime'], "%Y-%m-%d %H:%M:%S").replace(tzinfo=utc)
|
||||||
if 'logonDateTime' in character:
|
if 'logonDateTime' in character:
|
||||||
charobj.last_login = character['logonDateTime']
|
charobj.last_login = datetime.strptime(character['logonDateTime'], "%Y-%m-%d %H:%M:%S").replace(tzinfo=utc)
|
||||||
charobj.last_logoff = character['logoffDateTime']
|
charobj.last_logoff = datetime.strptime(character['logoffDateTime'], "%Y-%m-%d %H:%M:%S").replace(tzinfo=utc)
|
||||||
charobj.current_location_id = int(character['locationID'])
|
charobj.current_location_id = int(character['locationID'])
|
||||||
else:
|
else:
|
||||||
charobj.last_login = None
|
charobj.last_login = None
|
||||||
|
|||||||
@@ -1,4 +1,8 @@
|
|||||||
|
from datetime import datetime
|
||||||
from xml.dom import minidom
|
from xml.dom import minidom
|
||||||
|
|
||||||
|
from django.utils.timezone import utc
|
||||||
|
|
||||||
from eve_proxy.models import CachedDocument
|
from eve_proxy.models import CachedDocument
|
||||||
|
|
||||||
def basic_xml_parse(nodes):
|
def basic_xml_parse(nodes):
|
||||||
@@ -51,3 +55,7 @@ def basic_xml_parse_doc(doc):
|
|||||||
return basic_xml_parse(dom.childNodes)
|
return basic_xml_parse(dom.childNodes)
|
||||||
|
|
||||||
return {}
|
return {}
|
||||||
|
|
||||||
|
|
||||||
|
def parse_eveapi_date(datestring):
|
||||||
|
return datetime.strptime(datestring, "%Y-%m-%d %H:%M:%S").replace(tzinfo=utc)
|
||||||
@@ -6,7 +6,6 @@ from django.http import HttpResponse, Http404
|
|||||||
from django.shortcuts import render_to_response, get_object_or_404, redirect
|
from django.shortcuts import render_to_response, get_object_or_404, redirect
|
||||||
from django.template import RequestContext
|
from django.template import RequestContext
|
||||||
from django.views.generic import DetailView, ListView
|
from django.views.generic import DetailView, ListView
|
||||||
|
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from django.contrib.auth.decorators import login_required
|
from django.contrib.auth.decorators import login_required
|
||||||
|
|
||||||
@@ -22,6 +21,7 @@ from eve_api.tasks import import_apikey_result
|
|||||||
from eve_api.utils import basic_xml_parse_doc
|
from eve_api.utils import basic_xml_parse_doc
|
||||||
from eve_api.views.mixins import DetailPaginationMixin
|
from eve_api.views.mixins import DetailPaginationMixin
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def eveapi_add(request, post_save_redirect='/', template='eve_api/add.html'):
|
def eveapi_add(request, post_save_redirect='/', template='eve_api/add.html'):
|
||||||
""" Add a EVE API key to a user's account """
|
""" Add a EVE API key to a user's account """
|
||||||
|
|||||||
Reference in New Issue
Block a user