22import gui .mainFrame
33import webbrowser
44import gui .globalEvents as GE
5+ import config
6+ import time
7+
8+ from service .settings import EsiSettings
59
610_t = wx .GetTranslation
711
812
913class SsoLogin (wx .Dialog ):
1014
11- def __init__ (self ):
12- mainFrame = gui .mainFrame .MainFrame .getInstance ()
13-
15+ def __init__ (self , server : config . ApiServer , start_local_server = True ):
16+ self . mainFrame = gui .mainFrame .MainFrame .getInstance ()
17+ from service . esi import Esi
1418 super ().__init__ (
15- mainFrame , id = wx .ID_ANY , title = _t ("SSO Login" ), style = wx .DEFAULT_DIALOG_STYLE ,
19+ self . mainFrame , id = wx .ID_ANY , title = _t ("SSO Login" ), style = wx .DEFAULT_DIALOG_STYLE ,
1620 size = wx .Size (450 , 240 ) if "wxGTK" in wx .PlatformInfo else wx .Size (400 , 240 ))
1721
1822 bSizer1 = wx .BoxSizer (wx .VERTICAL )
1923
20- text = wx .StaticText (self , wx .ID_ANY , _t ("Copy and paste the block of text provided by pyfa.io" ))
21- bSizer1 .Add (text , 0 , wx .ALL | wx .EXPAND , 10 )
24+ if start_local_server :
25+ text = wx .StaticText (self , wx .ID_ANY , _t ("Waiting for character login through EVE Single Sign-On." ))
26+ bSizer1 .Add (text , 0 , wx .ALL | wx .EXPAND , 10 )
27+ bSizer1 .Add (wx .StaticLine (self , wx .ID_ANY ), 0 , wx .EXPAND , 15 )
28+ text = wx .StaticText (self , wx .ID_ANY , _t ("If auto-login fails, copy and paste the token provided by pyfa.io" ))
29+ bSizer1 .Add (text , 0 , wx .ALL | wx .EXPAND , 10 )
30+ elif server .name == "Serenity" :
31+ text = wx .StaticText (self , wx .ID_ANY , _t ("Please copy and paste the url when your authorization is completed" ))
32+ bSizer1 .Add (text , 0 , wx .ALL | wx .EXPAND , 10 )
33+
34+ else :
35+ text = wx .StaticText (self , wx .ID_ANY , _t ("Please copy and paste the token provided by pyfa.io" ))
36+ bSizer1 .Add (text , 0 , wx .ALL | wx .EXPAND , 10 )
2237
2338 self .ssoInfoCtrl = wx .TextCtrl (self , wx .ID_ANY , wx .EmptyString , wx .DefaultPosition , (- 1 , - 1 ), style = wx .TE_MULTILINE )
2439 self .ssoInfoCtrl .SetFont (wx .Font (8 , wx .FONTFAMILY_TELETYPE , wx .NORMAL , wx .NORMAL ))
2540 self .ssoInfoCtrl .Layout ()
41+ self .ssoInfoCtrl .Bind (wx .EVT_TEXT , self .OnTextEnter )
2642
2743 bSizer1 .Add (self .ssoInfoCtrl , 1 , wx .LEFT | wx .RIGHT | wx .EXPAND , 10 )
2844
45+ self .Esisettings = EsiSettings .getInstance ()
46+
2947 bSizer3 = wx .BoxSizer (wx .VERTICAL )
3048 bSizer3 .Add (wx .StaticLine (self , wx .ID_ANY ), 0 , wx .BOTTOM | wx .EXPAND , 10 )
3149
@@ -34,51 +52,43 @@ def __init__(self):
3452
3553 self .SetSizer (bSizer1 )
3654 self .Center ()
37-
38- from service .esi import Esi
39-
4055 self .sEsi = Esi .getInstance ()
41- uri = self .sEsi .get_login_uri (None )
42- webbrowser .open (uri )
4356
57+ serverAddr = self .sEsi .startServer (0 ) if start_local_server else None
58+ uri = self .sEsi .get_login_uri (serverAddr )
4459
45- class SsoLoginServer (wx .Dialog ):
60+ if server .name == "Serenity" :
61+ webbrowser .open (config .SSO_LOGOFF_SERENITY )
62+ time .sleep (1 )
4663
47- def __init__ (self , port ):
48- self .mainFrame = gui .mainFrame .MainFrame .getInstance ()
49- super ().__init__ (self .mainFrame , id = wx .ID_ANY , title = _t ("SSO Login" ), size = (- 1 , - 1 ), style = wx .DEFAULT_DIALOG_STYLE )
64+ self .okBtn = self .FindWindow (wx .ID_OK )
65+ self .okBtn .Enable (False )
66+ # Ensure we clean up once they hit the "OK" button
67+ self .okBtn .Bind (wx .EVT_BUTTON , self .OnDestroy )
5068
51- from service .esi import Esi
52-
53- self .sEsi = Esi .getInstance ()
54- serverAddr = self .sEsi .startServer (port )
55-
56- uri = self .sEsi .get_login_uri (serverAddr )
69+ webbrowser .open (uri )
5770
58- bSizer1 = wx .BoxSizer (wx .VERTICAL )
5971 self .mainFrame .Bind (GE .EVT_SSO_LOGIN , self .OnLogin )
72+ # Ensure we clean up if ESC is pressed
6073 self .Bind (wx .EVT_WINDOW_DESTROY , self .OnDestroy )
6174
62- text = wx .StaticText (self , wx .ID_ANY , _t ("Waiting for character login through EVE Single Sign-On." ))
63- bSizer1 .Add (text , 0 , wx .ALL | wx .EXPAND , 10 )
64-
65- bSizer3 = wx .BoxSizer (wx .VERTICAL )
66- bSizer3 .Add (wx .StaticLine (self , wx .ID_ANY ), 0 , wx .BOTTOM | wx .EXPAND , 10 )
67-
68- bSizer3 .Add (self .CreateStdDialogButtonSizer (wx .CANCEL ), 0 , wx .EXPAND )
69- bSizer1 .Add (bSizer3 , 0 , wx .BOTTOM | wx .RIGHT | wx .LEFT | wx .EXPAND , 10 )
70-
71- self .SetSizer (bSizer1 )
72- self .Fit ()
73- self .Center ()
74-
75- webbrowser .open (uri )
75+ def OnTextEnter (self , event ):
76+ t = event .String .strip ()
77+ if t == "" :
78+ self .okBtn .Enable (False )
79+ else :
80+ self .okBtn .Enable (True )
81+ event .Skip ()
7682
7783 def OnLogin (self , event ):
78- self .EndModal (wx .ID_OK )
84+ # This would normally happen if it was logged in via server auto-login. In this case, the modal is done, we effectively want to cancel out
85+ self .EndModal (wx .ID_CANCEL )
7986 event .Skip ()
8087
8188 def OnDestroy (self , event ):
89+ # Clean up by unbinding some events and stopping the server
8290 self .mainFrame .Unbind (GE .EVT_SSO_LOGIN , handler = self .OnLogin )
91+ if self :
92+ self .Unbind (wx .EVT_WINDOW_DESTROY , handler = self .OnDestroy )
8393 self .sEsi .stopServer ()
8494 event .Skip ()
0 commit comments