import re from datetime import datetime from piston.handler import BaseHandler from piston.utils import rc, throttle from django.contrib.auth import login, logout, authenticate from django.contrib.auth.models import User from django.http import HttpResponse from django.core.urlresolvers import reverse from django.shortcuts import get_object_or_404 from api.models import AuthAPIKey, AuthAPILog from eve_proxy.models import CachedDocument from eve_api.models import EVEAccount from sso.models import ServiceAccount, Service from settings import FULL_API_USER_ID from settings import FULL_API_CHARACTER_ID from xml.dom import minidom class UserHandler(BaseHandler): allowed_methods = ('GET') def read(self, request, id=None): if id: try: u = User.objects.get(id=id) except (User.DoesNotExist, ValueError): return rc.NOT_HERE elif 'user' in request.GET: try: u = User.objects.get(username=request.GET['user']) except User.DoesNotExist: return rc.NOT_HERE elif 'serviceuid' in request.GET: try: u = ServiceAccount.objects.get(service_uid=request.get['serviceuid']).user except ServiceAccount.DoesNotExist: return rc.NOT_HERE elif request.user: u = request.user chars = [] for a in u.eveaccount_set.all(): chars.append(a.characters.all()) d = { 'id': u.id, 'username': u.username, 'email': u.email, 'serviceaccounts': u.serviceaccount_set.all(), 'characters': chars, 'groups': u.groups.all(), 'staff': u.is_staff, 'superuser': u.is_superuser } return d class LoginHandler(BaseHandler): allowed_methods = ('GET') def read(self, request, id=None): if id: try: u = User.objects.get(id=id) except (User.DoesNotExist, ValueError): return rc.NOT_HERE if request.GET.get('user', None): try: u = User.objects.get(username=request.GET['user']) except User.DoesNotExist: return rc.NOT_HERE d = { 'auth': 'ok', 'id': u.id, 'username': u.username, 'email': u.email, 'groups': u.groups.all(), 'staff': u.is_staff, 'superuser': u.is_superuser } if request.GET.get('pass', None) and request.GET['pass'] == u.get_profile().api_service_password: return d return { 'auth': 'failed' } class EveAPIHandler(BaseHandler): allowed_methods = ('GET') exclude = ('api_key') def read(self, request): if request.GET.get('id', None): s = get_object_or_404(EVEAccount, pk=id) elif request.GET.get('userid', None): s = EVEAccount.objects.filter(user=request.GET['userid']) elif request.GET.get('corpid', None): s = EVEAccount.objects.filter(characters__corporation__id=request.GET['corpid']) elif request.GET.get('allianceid', None): s = EVEAccount.objects.filter(characters__corporation__alliance__id=request.GET['allianceid']) return { 'keys': s.values('id', 'user_id', 'api_status', 'api_last_updated') } class EveAPIProxyHandler(BaseHandler): allowed_methods = ('GET') def read(self, request): url_path = request.META['PATH_INFO'].replace(reverse('api-eveapiproxy'),"/") params = {} for key,value in request.GET.items(): params[key.lower()] = value if 'userid' in params: obj = get_object_or_404(EVEAccount, pk=params['userid']) params['apikey'] = obj.api_key print params cached_doc = CachedDocument.objects.api_query(url_path, params, exceptions=False) return HttpResponse(cached_doc.body) class OpTimerHandler(BaseHandler): allowed_methods = ('GET') def read(self, request, id=None): obj = get_object_or_404(EVEAccount, id=FULL_API_USER_ID) params = {'userID':obj.id,'apiKey':obj.api_key,'characterID':FULL_API_CHARACTER_ID} cached_doc = CachedDocument.objects.api_query('/char/UpcomingCalendarEvents.xml.aspx', params, exceptions=False) dom = minidom.parseString(cached_doc.body.encode('utf-8')) enode = dom.getElementsByTagName('error') if enode: return {'ops':[{ 'startsIn': -1, 'eventID': 0, 'ownerName': '', 'eventDate': '', 'eventTitle': '
The EVE API is currently down
', 'duration': 0, 'isImportant': 0, 'eventText': 'Fuck CCP tbqh imho srsly', 'endsIn':-1 }]} events = [] events_node_children = dom.getElementsByTagName('rowset')[0].childNodes for node in events_node_children: if node.nodeType == 1: ownerID = node.getAttribute('ownerID') if ownerID != '1': date = node.getAttribute('eventDate') dt = datetime.strptime(date,'%Y-%m-%d %H:%M:%S') now = datetime.utcnow() startsIn = int(dt.strftime('%s')) - int(now.strftime('%s')) duration = int(node.getAttribute('duration')) #In case people forget to set a duration, we'll give a default of 1 hour if duration == 0: duration = 60 endsIn = startsIn + (duration * 60) if startsIn < 0: startsIn = 0 if endsIn > 0: event = { 'startsIn': startsIn, 'eventID': node.getAttribute('eventID'), 'ownerName': node.getAttribute('ownerName'), 'eventDate': date, 'eventTitle': node.getAttribute('eventTitle'), 'duration': duration, 'isImportant': node.getAttribute('importance'), 'eventText': node.getAttribute('eventText'), 'endsIn':endsIn } events.append(event) if len(events) == 0: return {'ops':[{ 'startsIn': -1, 'eventID': 0, 'ownerName': '', 'eventDate': '', 'eventTitle': '
No ops are currently scheduled
', 'duration': 0, 'isImportant': 0, 'eventText': 'Add ops using EVE-Gate or the in-game calendar', 'endsIn':-1 }]} else: return {'ops':events}