Setting to change server for CREST, and some other improvements.

This commit is contained in:
blitzmann
2015-10-31 13:20:13 -04:00
parent 24f770aa7b
commit ccb9e085b2
8 changed files with 79 additions and 35 deletions

View File

@@ -24,8 +24,6 @@ expansionName = "Vanguard"
expansionVersion = "1.0"
evemonMinVersion = "4081"
clientID = 'af87365240d644f7950af563b8418bad'
pyfaPath = None
savePath = None
saveDB = None

View File

@@ -5,6 +5,7 @@ from gui.bitmapLoader import BitmapLoader
import gui.mainFrame
import service
from service.crest import CrestModes
class PFCrestPref ( PreferenceView):
title = "CREST"
@@ -30,24 +31,28 @@ class PFCrestPref ( PreferenceView):
self.stInfo.Wrap(dlgWidth - 50)
mainSizer.Add( self.stInfo, 0, wx.EXPAND|wx.TOP|wx.BOTTOM, 5 )
self.grantRadioBtn1 = wx.RadioButton( panel, wx.ID_ANY, u"Implicit Grant", wx.DefaultPosition, wx.DefaultSize, 0 )
mainSizer.Add( self.grantRadioBtn1, 0, wx.ALL, 5 )
rbSizer = wx.BoxSizer(wx.HORIZONTAL)
self.rbMode = wx.RadioBox(panel, -1, "Mode", wx.DefaultPosition, wx.DefaultSize, ['Implicit', 'User-supplied details'], 1, wx.RA_SPECIFY_COLS)
self.rbServer = wx.RadioBox(panel, -1, "Server", wx.DefaultPosition, wx.DefaultSize, ['Tranquility', 'Singularity'], 1, wx.RA_SPECIFY_COLS)
self.grantRadioBtn2 = wx.RadioButton( panel, wx.ID_ANY, u"User-supplied details", wx.DefaultPosition, wx.DefaultSize, 0 )
mainSizer.Add( self.grantRadioBtn2, 0, wx.ALL, 5 )
self.rbMode.SetSelection(self.settings.get('mode'))
self.rbServer.SetSelection(self.settings.get('server'))
proxyTitle = wx.StaticText( panel, wx.ID_ANY, "CREST client details", wx.DefaultPosition, wx.DefaultSize, 0 )
proxyTitle.Wrap( -1 )
proxyTitle.SetFont( wx.Font( 12, 70, 90, 90, False, wx.EmptyString ) )
rbSizer.Add(self.rbMode, 1, wx.TOP | wx.RIGHT, 5 )
rbSizer.Add(self.rbServer, 1, wx.ALL, 5 )
mainSizer.Add( proxyTitle, 0, wx.ALL, 5 )
self.rbMode.Bind(wx.EVT_RADIOBOX, self.OnModeChange)
self.rbServer.Bind(wx.EVT_RADIOBOX, self.OnServerChange)
mainSizer.Add(rbSizer, 1, wx.ALL|wx.EXPAND, 0)
detailsTitle = wx.StaticText( panel, wx.ID_ANY, "CREST client details", wx.DefaultPosition, wx.DefaultSize, 0 )
detailsTitle.Wrap( -1 )
detailsTitle.SetFont( wx.Font( 12, 70, 90, 90, False, wx.EmptyString ) )
mainSizer.Add( detailsTitle, 0, wx.ALL, 5 )
mainSizer.Add( wx.StaticLine( panel, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL ), 0, wx.EXPAND, 5 )
self.grantRadioBtn1.SetValue(self.settings.get('mode') == 0)
self.grantRadioBtn2.SetValue(self.settings.get('mode') == 1)
self.grantRadioBtn1.Bind(wx.EVT_RADIOBUTTON, self.OnRadioChange)
self.grantRadioBtn2.Bind(wx.EVT_RADIOBUTTON, self.OnRadioChange)
fgAddrSizer = wx.FlexGridSizer( 2, 2, 0, 0 )
fgAddrSizer.AddGrowableCol( 1 )
@@ -82,9 +87,14 @@ class PFCrestPref ( PreferenceView):
panel.SetSizer( mainSizer )
panel.Layout()
def OnRadioChange(self, event):
self.settings.set('mode', 0 if self.grantRadioBtn1.Value else 1)
def OnModeChange(self, event):
self.settings.set('mode', event.GetInt())
self.ToggleProxySettings(self.settings.get('mode'))
service.Crest.restartService()
def OnServerChange(self, event):
self.settings.set('server', event.GetInt())
service.Crest.restartService()
def OnBtnApply(self, event):
self.settings.set('clientID', self.inputClientID.GetValue())

View File

@@ -7,6 +7,7 @@ from wx.lib.pubsub import setupkwargs
from wx.lib.pubsub import pub
import service
from service.crest import CrestModes
import gui.display as d
from eos.types import Cargo
from eos.db import getItem
@@ -24,7 +25,7 @@ class CrestFittings(wx.Frame):
characterSelectSizer = wx.BoxSizer( wx.HORIZONTAL )
if sCrest.settings.get('mode') == 0:
if sCrest.settings.get('mode') == CrestModes.IMPLICIT:
self.stLogged = wx.StaticText(self, wx.ID_ANY, "Currently logged in as %s"%sCrest.implicitCharacter.name, wx.DefaultPosition, wx.DefaultSize)
self.stLogged.Wrap( -1 )
@@ -107,7 +108,7 @@ class CrestFittings(wx.Frame):
def getActiveCharacter(self):
sCrest = service.Crest.getInstance()
if sCrest.settings.get('mode') == 0:
if sCrest.settings.get('mode') == CrestModes.IMPLICIT:
return sCrest.implicitCharacter.ID
selection = self.charChoice.GetCurrentSelection()
@@ -159,7 +160,7 @@ class ExportToEve(wx.Frame):
mainSizer = wx.BoxSizer(wx.VERTICAL)
hSizer = wx.BoxSizer(wx.HORIZONTAL)
if sCrest.settings.get('mode') == 0:
if sCrest.settings.get('mode') == CrestModes.IMPLICIT:
self.stLogged = wx.StaticText(self, wx.ID_ANY, "Currently logged in as %s"%sCrest.implicitCharacter.name, wx.DefaultPosition, wx.DefaultSize)
self.stLogged.Wrap( -1 )
@@ -207,7 +208,7 @@ class ExportToEve(wx.Frame):
def getActiveCharacter(self):
sCrest = service.Crest.getInstance()
if sCrest.settings.get('mode') == 0:
if sCrest.settings.get('mode') == CrestModes.IMPLICIT:
return sCrest.implicitCharacter.ID
selection = self.charChoice.GetCurrentSelection()

View File

@@ -58,6 +58,8 @@ from gui.updateDialog import UpdateDialog
from gui.builtinViews import *
from time import gmtime, strftime
from service.crest import CrestModes
from wx.lib.pubsub import setupkwargs
from wx.lib.pubsub import pub
@@ -518,7 +520,7 @@ class MainFrame(wx.Frame):
def ssoLogin(self, event):
sCrest = service.Crest.getInstance()
if sCrest.settings.get('mode') == 0: # Implicit, go directly to login
if sCrest.settings.get('mode') == CrestModes.IMPLICIT:
if sCrest.implicitCharacter is not None:
sCrest.logout()
else:

View File

@@ -24,6 +24,7 @@ import gui.mainFrame
import gui.graphFrame
import gui.globalEvents as GE
import service
from service.crest import CrestModes
from wx.lib.pubsub import setupkwargs
from wx.lib.pubsub import pub
@@ -113,14 +114,14 @@ class MainMenuBar(wx.MenuBar):
# CREST Menu
crestMenu = wx.Menu()
self.Append(crestMenu, "&CREST")
if self.sCrest.settings.get('mode') != 0:
if self.sCrest.settings.get('mode') != CrestModes.IMPLICIT:
crestMenu.Append(self.ssoLoginId, "Manage Characters")
else:
crestMenu.Append(self.ssoLoginId, "Login to EVE")
crestMenu.Append(self.eveFittingsId, "Browse EVE Fittings")
crestMenu.Append(self.exportToEveId, "Export To EVE")
if self.sCrest.settings.get('mode') == 0 or len(self.sCrest.getCrestCharacters()) == 0:
if self.sCrest.settings.get('mode') == CrestModes.IMPLICIT or len(self.sCrest.getCrestCharacters()) == 0:
self.Enable(self.eveFittingsId, False)
self.Enable(self.exportToEveId, False)
@@ -157,13 +158,13 @@ class MainMenuBar(wx.MenuBar):
event.Skip()
def ssoLogin(self, type):
if self.sCrest.settings.get('mode') == 0:
if self.sCrest.settings.get('mode') == CrestModes.IMPLICIT:
self.SetLabel(self.ssoLoginId, "Logout Character")
self.Enable(self.eveFittingsId, True)
self.Enable(self.exportToEveId, True)
def ssoLogout(self, message):
if self.sCrest.settings.get('mode') == 0:
if self.sCrest.settings.get('mode') == CrestModes.IMPLICIT:
self.SetLabel(self.ssoLoginId, "Login to EVE")
self.Enable(self.eveFittingsId, False)
self.Enable(self.exportToEveId, False)

View File

@@ -10,13 +10,27 @@ import time
from wx.lib.pubsub import pub
import eos.db
from eos.enum import Enum
from eos.types import CrestChar
import service
logger = logging.getLogger(__name__)
class Servers(Enum):
TQ = 0
SISI = 1
class CrestModes(Enum):
IMPLICIT = 0
USER = 1
class Crest():
clientIDs = {
Servers.TQ: 'f9be379951c046339dc13a00e6be7704',
Servers.SISI: 'af87365240d644f7950af563b8418bad'
}
# @todo: move this to settings
clientCallback = 'http://localhost:6461'
clientTest = True
@@ -29,7 +43,17 @@ class Crest():
return cls._instance
@classmethod
def restartService(cls):
# This is hear to reseed pycrest values when changing preferences
# We first stop the server n case one is running, as creating a new
# instance doesn't do this.
cls._instance.stopServer()
cls._instance = Crest()
return cls._instance
def __init__(self):
print "init crest"
self.settings = service.settings.CRESTSettings.getInstance()
self.scopes = ['characterFittingsRead', 'characterFittingsWrite']
@@ -40,10 +64,11 @@ class Crest():
# Base EVE connection that is copied to all characters
self.eve = service.pycrest.EVE(
client_id=self.settings.get('clientID') if self.settings.get('mode') == 1 else config.clientID,
api_key=self.settings.get('clientSecret') if self.settings.get('mode') == 1 else None,
redirect_uri=self.clientCallback,
testing=self.clientTest)
client_id=self.settings.get('clientID') if self.settings.get('mode') == CrestModes.USER else self.clientIDs.get(self.settings.get('server')),
api_key=self.settings.get('clientSecret') if self.settings.get('mode') == CrestModes.USER else None,
redirect_uri=self.clientCallback,
testing=self.isTestServer
)
self.implicitCharacter = None
@@ -52,6 +77,10 @@ class Crest():
self.charCache = {}
pub.subscribe(self.handleLogin, 'sso_login')
@property
def isTestServer(self):
return self.settings.get('server') == Servers.SISI
def delCrestCharacter(self, charID):
char = eos.db.getCrestCharacter(charID)
eos.db.remove(char)
@@ -72,7 +101,7 @@ class Crest():
'''
Get character, and modify to include the eve connection
'''
if self.settings.get('mode') == 0:
if self.settings.get('mode') == CrestModes.IMPLICIT:
if self.implicitCharacter.ID != charID:
raise ValueError("CharacterID does not match currently logged in character.")
return self.implicitCharacter
@@ -148,7 +177,7 @@ class Crest():
self.implicitCharacter.eve = eve
#self.implicitCharacter.fetchImage()
wx.CallAfter(pub.sendMessage, 'login_success', type=0)
wx.CallAfter(pub.sendMessage, 'login_success', type=CrestModes.IMPLICIT)
elif 'code' in message:
eve = copy.deepcopy(self.eve)
eve.authorize(message['code'][0])
@@ -167,6 +196,6 @@ class Crest():
self.charCache[int(info['CharacterID'])] = char
eos.db.save(char)
wx.CallAfter(pub.sendMessage, 'login_success', type=1)
wx.CallAfter(pub.sendMessage, 'login_success', type=CrestModes.USER)
self.stopServer()

View File

@@ -88,7 +88,10 @@ class StoppableHTTPServer(BaseHTTPServer.HTTPServer):
def serve(self):
while self.run:
self.handle_request()
try:
self.handle_request()
except TypeError:
pass
if __name__ == "__main__":
httpd = StoppableHTTPServer(('', 6461), AuthHandler)

View File

@@ -278,7 +278,7 @@ class CRESTSettings():
# mode
# 0 - Implicit authentication
# 1 - User-supplied client details
serviceCRESTDefaultSettings = {"mode": 0, "clientID": "", "clientSecret": ""}
serviceCRESTDefaultSettings = {"mode": 0, "server": 0, "clientID": "", "clientSecret": ""}
self.serviceCRESTSettings = SettingsProvider.getInstance().getSettings("pyfaServiceCRESTSettings", serviceCRESTDefaultSettings)