Package arcjobtool :: Module CertRequestWindow
[hide private]
[frames] | no frames]

Source Code for Module arcjobtool.CertRequestWindow

  1  # -*- coding: utf-8 -*- 
  2  # generated by wxGlade HG on Sat Apr  3 15:44:07 2010 
  3   
  4  import wx 
  5   
  6  # begin wxGlade: dependencies 
  7  # end wxGlade 
  8   
  9  # begin wxGlade: extracode 
 10   
 11  # end wxGlade 
 12   
 13  from wx.lib.dialogs import * 
 14   
 15  from CertUtils import CertificateRequest 
 16  from CertSignDialog import CertSignDialog 
 17  from CertInstallDialog import CertInstallDialog 
 18   
 19  import sys 
 20   
21 -class CertRequestWindow(wx.Frame):
22 - def __init__(self, *args, **kwds):
23 # begin wxGlade: CertRequestWindow.__init__ 24 kwds["style"] = wx.DEFAULT_FRAME_STYLE 25 wx.Frame.__init__(self, *args, **kwds) 26 self.mainPanel = wx.Panel(self, -1) 27 self.fullNameLabel = wx.StaticText(self.mainPanel, -1, "Full name") 28 self.fullNameText = wx.TextCtrl(self.mainPanel, -1, "") 29 self.domainLabel = wx.StaticText(self.mainPanel, -1, "Domain") 30 self.domainText = wx.TextCtrl(self.mainPanel, -1, "") 31 self.emailLabel = wx.StaticText(self.mainPanel, -1, "Email") 32 self.emailText = wx.TextCtrl(self.mainPanel, -1, "") 33 self.static_line_1 = wx.StaticLine(self.mainPanel, -1) 34 self.CALabel = wx.StaticText(self.mainPanel, -1, "CA") 35 self.CAText = wx.TextCtrl(self.mainPanel, -1, "", style=wx.TE_READONLY) 36 self.CAEmailLabel = wx.StaticText(self.mainPanel, -1, "CA Email") 37 self.CAEmailText = wx.TextCtrl(self.mainPanel, -1, "", style=wx.TE_READONLY) 38 self.static_line_2 = wx.StaticLine(self.mainPanel, -1) 39 self.certRequestFilenameLabel = wx.StaticText(self.mainPanel, -1, "Certificate request") 40 self.certRequestFilenameText = wx.TextCtrl(self.mainPanel, -1, "", style=wx.TE_READONLY) 41 self.certRequestViewButton = wx.Button(self.mainPanel, -1, "View") 42 self.certFilenameLabel = wx.StaticText(self.mainPanel, -1, "Certificate") 43 self.certFilenameText = wx.TextCtrl(self.mainPanel, -1, "", style=wx.TE_READONLY) 44 self.privateKeyFilenameLabel = wx.StaticText(self.mainPanel, -1, "Private key") 45 self.privateKeyFilenameText = wx.TextCtrl(self.mainPanel, -1, "", style=wx.TE_READONLY) 46 self.generateCertRequestButton = wx.Button(self.mainPanel, -1, "1. Generate") 47 self.signRequestButton = wx.Button(self.mainPanel, -1, "2. Sign") 48 self.installCertRequestButton = wx.Button(self.mainPanel, -1, "3. Install") 49 self.certRequestCloseButton = wx.Button(self.mainPanel, -1, "Close") 50 51 self.__set_properties() 52 self.__do_layout() 53 54 self.Bind(wx.EVT_BUTTON, self.onGenerateCertRequest, self.generateCertRequestButton) 55 self.Bind(wx.EVT_BUTTON, self.onSignRequest, self.signRequestButton) 56 self.Bind(wx.EVT_BUTTON, self.onInstallCertRequest, self.installCertRequestButton) 57 self.Bind(wx.EVT_BUTTON, self.onCertRequestClose, self.certRequestCloseButton)
58 # end wxGlade 59
60 - def __set_properties(self):
61 # begin wxGlade: CertRequestWindow.__set_properties 62 self.SetTitle("Certificate Request Tool") 63 self.SetSize((573, 346)) 64 self.fullNameLabel.SetMinSize((150, -1)) 65 self.domainLabel.SetMinSize((150, -1)) 66 self.emailLabel.SetMinSize((150, -1)) 67 self.CALabel.SetMinSize((150, -1)) 68 self.CAText.SetBackgroundColour(wx.SystemSettings_GetColour(wx.SYS_COLOUR_3DFACE)) 69 self.CAEmailLabel.SetMinSize((150, -1)) 70 self.CAEmailText.SetBackgroundColour(wx.SystemSettings_GetColour(wx.SYS_COLOUR_3DFACE)) 71 self.certRequestFilenameLabel.SetMinSize((150, -1)) 72 self.certRequestFilenameText.SetBackgroundColour(wx.SystemSettings_GetColour(wx.SYS_COLOUR_3DFACE)) 73 self.certRequestViewButton.SetMinSize((-1, 27)) 74 self.certFilenameLabel.SetMinSize((150, -1)) 75 self.certFilenameText.SetBackgroundColour(wx.SystemSettings_GetColour(wx.SYS_COLOUR_3DFACE)) 76 self.privateKeyFilenameLabel.SetMinSize((150, -1)) 77 self.privateKeyFilenameText.SetBackgroundColour(wx.SystemSettings_GetColour(wx.SYS_COLOUR_3DFACE)) 78 self.signRequestButton.Enable(False) 79 self.installCertRequestButton.Enable(False)
80 # end wxGlade 81
82 - def __do_layout(self):
83 # begin wxGlade: CertRequestWindow.__do_layout 84 mainSizer = wx.BoxSizer(wx.VERTICAL) 85 mainRequestSizer = wx.BoxSizer(wx.VERTICAL) 86 sizer_4 = wx.BoxSizer(wx.HORIZONTAL) 87 sizer_5 = wx.BoxSizer(wx.VERTICAL) 88 sizer_7_copy_copy_copy_copy_copy_copy = wx.BoxSizer(wx.HORIZONTAL) 89 sizer_7_copy_copy_copy_copy_copy = wx.BoxSizer(wx.HORIZONTAL) 90 sizer_7_copy_copy_copy_copy = wx.BoxSizer(wx.HORIZONTAL) 91 sizer_7_copy_copy_copy = wx.BoxSizer(wx.HORIZONTAL) 92 sizer_7_copy_copy = wx.BoxSizer(wx.HORIZONTAL) 93 sizer_7_copy = wx.BoxSizer(wx.HORIZONTAL) 94 sizer_7 = wx.BoxSizer(wx.HORIZONTAL) 95 sizer_6 = wx.BoxSizer(wx.HORIZONTAL) 96 sizer_6.Add(self.fullNameLabel, 0, wx.ALIGN_CENTER_VERTICAL, 0) 97 sizer_6.Add(self.fullNameText, 1, 0, 0) 98 sizer_5.Add(sizer_6, 0, wx.BOTTOM|wx.EXPAND, 4) 99 sizer_7.Add(self.domainLabel, 0, wx.ALIGN_CENTER_VERTICAL, 0) 100 sizer_7.Add(self.domainText, 1, 0, 0) 101 sizer_5.Add(sizer_7, 0, wx.BOTTOM|wx.EXPAND, 4) 102 sizer_7_copy.Add(self.emailLabel, 0, wx.ALIGN_CENTER_VERTICAL, 0) 103 sizer_7_copy.Add(self.emailText, 1, 0, 0) 104 sizer_5.Add(sizer_7_copy, 0, wx.BOTTOM|wx.EXPAND, 4) 105 sizer_5.Add(self.static_line_1, 0, wx.BOTTOM|wx.EXPAND, 4) 106 sizer_7_copy_copy.Add(self.CALabel, 0, wx.ALIGN_CENTER_VERTICAL, 0) 107 sizer_7_copy_copy.Add(self.CAText, 1, 0, 0) 108 sizer_5.Add(sizer_7_copy_copy, 0, wx.BOTTOM|wx.EXPAND, 4) 109 sizer_7_copy_copy_copy.Add(self.CAEmailLabel, 0, wx.ALIGN_CENTER_VERTICAL, 0) 110 sizer_7_copy_copy_copy.Add(self.CAEmailText, 1, 0, 0) 111 sizer_5.Add(sizer_7_copy_copy_copy, 0, wx.BOTTOM|wx.EXPAND, 4) 112 sizer_5.Add(self.static_line_2, 0, wx.BOTTOM|wx.EXPAND, 4) 113 sizer_7_copy_copy_copy_copy.Add(self.certRequestFilenameLabel, 0, wx.ALIGN_CENTER_VERTICAL, 0) 114 sizer_7_copy_copy_copy_copy.Add(self.certRequestFilenameText, 1, 0, 0) 115 sizer_7_copy_copy_copy_copy.Add(self.certRequestViewButton, 0, 0, 0) 116 sizer_5.Add(sizer_7_copy_copy_copy_copy, 0, wx.BOTTOM|wx.EXPAND, 4) 117 sizer_7_copy_copy_copy_copy_copy.Add(self.certFilenameLabel, 0, wx.ALIGN_CENTER_VERTICAL, 0) 118 sizer_7_copy_copy_copy_copy_copy.Add(self.certFilenameText, 1, 0, 0) 119 sizer_5.Add(sizer_7_copy_copy_copy_copy_copy, 0, wx.BOTTOM|wx.EXPAND, 4) 120 sizer_7_copy_copy_copy_copy_copy_copy.Add(self.privateKeyFilenameLabel, 0, wx.ALIGN_CENTER_VERTICAL, 0) 121 sizer_7_copy_copy_copy_copy_copy_copy.Add(self.privateKeyFilenameText, 1, 0, 0) 122 sizer_5.Add(sizer_7_copy_copy_copy_copy_copy_copy, 0, wx.BOTTOM|wx.EXPAND, 4) 123 mainRequestSizer.Add(sizer_5, 1, wx.ALL|wx.EXPAND, 4) 124 sizer_4.Add(self.generateCertRequestButton, 0, 0, 0) 125 sizer_4.Add(self.signRequestButton, 0, 0, 0) 126 sizer_4.Add(self.installCertRequestButton, 0, 0, 0) 127 sizer_4.Add(self.certRequestCloseButton, 0, 0, 0) 128 mainRequestSizer.Add(sizer_4, 0, wx.TOP|wx.BOTTOM|wx.ALIGN_CENTER_HORIZONTAL, 4) 129 self.mainPanel.SetSizer(mainRequestSizer) 130 mainSizer.Add(self.mainPanel, 1, wx.ALL|wx.EXPAND, 5) 131 self.SetSizer(mainSizer) 132 self.Layout() 133 self.Centre() 134 # end wxGlade 135 136 self.__initApp()
137
138 - def __initApp(self):
139 140 self.__certRequest = CertificateRequest() 141 if not self.__certRequest.isGlobusConfigOk(): 142 msg = "Could not find request configuration files:\n" 143 msg += "\n/etc/grid-security/directions or\n" 144 msg += "/etc/grid-security/grid-security.conf or\n" 145 msg += "/etc/grid-security/globus-user-ssl.conf or\n" 146 msg += "\nMake sure you have installed the request configuration packages." 147 wx.MessageBox(msg, "Certificate Request Tool") 148 sys.exit(-1) 149 150 requestList = self.__certRequest.checkPendingRequests() 151 152 if len(requestList)>0: 153 result = wx.MessageBox("Existing request(s) exists. Do you want to open existing request(s)?", "Certificate request", wx.YES_NO) 154 if result == wx.YES: 155 result = wx.GetSingleChoice("Select certificate request", "Certificate request", requestList) 156 if result!=-1: 157 self.__certRequest.loadRequest(result) 158 159 self.__updateControls()
160
161 - def __clearControls(self):
162 """ 163 Reset controls to initial values. 164 """ 165 self.fullNameText.SetValue("") 166 self.domainText.SetValue("") 167 self.emailText.SetValue("")
168 169
170 - def __updateControls(self):
171 """ 172 Update controls with values from certificate request class instance. 173 """ 174 self.CAText.SetValue(self.__certRequest.CAName) 175 self.CAEmailText.SetValue(self.__certRequest.CAEmail) 176 self.fullNameText.SetValue(self.__certRequest.name) 177 self.domainText.SetValue(self.__certRequest.domain) 178 self.emailText.SetValue(self.__certRequest.email) 179 self.certRequestFilenameText.SetValue(self.__certRequest.certRequestFilename) 180 self.certFilenameText.SetValue(self.__certRequest.certFilename) 181 self.privateKeyFilenameText.SetValue(self.__certRequest.keyFilename) 182 183 signingStatus = self.__certRequest.signingStatus() 184 185 # Update process buttons 186 187 if self.__certRequest.isUnknown(): 188 self.generateCertRequestButton.Enable(True) 189 self.signRequestButton.Enable(False) 190 self.installCertRequestButton.Enable(False) 191 elif self.__certRequest.isGenerated(): 192 self.generateCertRequestButton.Enable(False) 193 self.signRequestButton.Enable(True) 194 self.installCertRequestButton.Enable(True) 195 elif self.__certRequest.isSent(): 196 self.generateCertRequestButton.Enable(False) 197 self.signRequestButton.Enable(True) 198 self.installCertRequestButton.Enable(True) 199 elif self.__certRequest.isSigned(): 200 self.generateCertRequestButton.Enable(False) 201 self.signRequestButton.Enable(False) 202 self.installCertRequestButton.Enable(False) 203 else: 204 self.generateCertRequestButton.Enable(True) 205 self.signRequestButton.Enable(False) 206 self.installCertRequestButton.Enable(False)
207 208
209 - def onGenerateCertRequest(self, event): # wxGlade: CertRequestWindow.<event_handler>
210 """ 211 Initiate the certificate request process 212 """ 213 214 # Check dialog input 215 216 if self.fullNameText.GetValue() == "": 217 wx.MessageBox("Full name not given.", "Certificate request") 218 return 219 220 if self.domainText.GetValue() == "": 221 wx.MessageBox("Domain not given.", "Certificate request") 222 return 223 224 if self.emailText.GetValue() == "": 225 wx.MessageBox("Email not given.", "Certificate request") 226 return 227 228 self.__certRequest.name = self.fullNameText.GetValue() 229 self.__certRequest.domain = self.domainText.GetValue() 230 self.__certRequest.email = self.emailText.GetValue() 231 232 # Ask for private key passphrase. Make some basic checks for 233 # password complexity. 234 235 passphraseOk = False 236 237 while not passphraseOk: 238 239 passphrase = wx.GetPasswordFromUser("Enter private key password", "Certificate request", "") 240 241 if len(passphrase)==0: 242 wx.MessageBox("Certificate request cancelled.", "Certificate request") 243 return 244 245 if len(passphrase)<8: 246 wx.MessageBox("Passphrase too short (<8 characters)", "Certificate request") 247 continue 248 249 passphraseComplexity = self.__certRequest.checkPassphrase(passphrase) 250 251 if passphraseComplexity in ["Blank", "Very Weak", "Weak", "Medium"]: 252 result = wx.MessageBox("Passphrase strength is "+passphraseComplexity+". Enter a different passphrase?", "Certificate request", wx.YES_NO) 253 if result == wx.YES: 254 passphraseOk = False 255 else: 256 passphraseOk = True 257 else: 258 passphraseOk = True 259 260 261 self.__certRequest.generate(passphrase) 262 263 message = "A certificate request has been succesfully generated.\n" 264 message += "The request is stored in %s." % self.__certRequest.certRequestFilename 265 266 wx.MessageBox(message, "Certificate request") 267 268 self.__updateControls()
269
270 - def onInstallCertRequest(self, event): # wxGlade: CertRequestWindow.<event_handler>
271 """ 272 Installed signed certificate 273 """ 274 275 if self.__certRequest.isLoaded(): 276 if not self.__certRequest.isSigned(): 277 certInstallDialog = CertInstallDialog(self) 278 certInstallDialog.certRequest = self.__certRequest 279 certInstallDialog.ShowModal() 280 certInstallDialog.Close() 281 self.__clearControls() 282 self.__updateControls() 283 else: 284 wx.MessageBox("Certificate already signed.") 285 else: 286 wx.MessageBox("No request has been loaded or generated.") 287
288 - def onCertRequestClose(self, event): # wxGlade: CertRequestWindow.<event_handler>
289 """ 290 Close main window. 291 """ 292 self.Close() 293
294 - def onSignRequest(self, event): # wxGlade: CertRequestWindow.<event_handler>
295 """ 296 Show certificate signing dialog. 297 """ 298 299 if self.__certRequest.isLoaded(): 300 certSignDialog = CertSignDialog(self) 301 certSignDialog.certRequest = self.__certRequest 302 certSignDialog.ShowModal() 303 certSignDialog.Close() 304 self.__updateControls() 305 else: 306 wx.MessageBox("No request has been loaded or generated.") 307 308 # end of class CertRequestWindow 309