Pārlūkot izejas kodu

Adding infrastructure to load certificates from a zip file

Andrej 4 gadi atpakaļ
vecāks
revīzija
51a901422d
1 mainītis faili ar 51 papildinājumiem un 4 dzēšanām
  1. 51 4
      labkeyBrowser/labkeyBrowser.py

+ 51 - 4
labkeyBrowser/labkeyBrowser.py

@@ -5,6 +5,8 @@ from slicer.ScriptedLoadableModule import *
 import slicerNetwork
 import loadDicom
 import json
+import zipfile
+import pathlib
 
 #
 # labkeySlicerPythonExtension
@@ -69,7 +71,8 @@ class labkeyBrowserWidget(ScriptedLoadableModuleWidget):
 
     self.privateKeyButton=qt.QPushButton("Load")
     self.privateKeyButton.toolTip="Load private key"
-    self.privateKeyButton.connect('clicked(bool)',self.onPrivateKeyButtonClicked)
+    self.privateKeyButton.connect('clicked(bool)',\
+            self.onPrivateKeyButtonClicked)
 
     connectionFormLayout.addRow("Private key:",self.privateKeyButton)
 
@@ -82,9 +85,17 @@ class labkeyBrowserWidget(ScriptedLoadableModuleWidget):
 
     self.loadConfigButton=qt.QPushButton("Load configuration")
     self.loadConfigButton.toolTip="Load configuration"
-    self.loadConfigButton.connect('clicked(bool)',self.onLoadConfigButtonClicked)
+    self.loadConfigButton.connect('clicked(bool)',\
+            self.onLoadConfigButtonClicked)
     connectionFormLayout.addRow("Configuration:",self.loadConfigButton)
 
+    self.loadZipButton=qt.QPushButton("Load certificates (.zip)")
+    self.loadZipButton.toolTip="Load certificates from zip file"
+    self.loadZipButton.connect('clicked(bool)',\
+            self.onLoadZipButtonClicked)
+    connectionFormLayout.addRow("Load certificates (merlin):",\
+            self.loadZipButton)
+    
     self.saveConfigButton=qt.QPushButton("Save configuration")
     self.saveConfigButton.toolTip="Save configuration"
     self.saveConfigButton.clicked.connect(self.onSaveConfigButtonClicked)
@@ -259,7 +270,39 @@ class labkeyBrowserWidget(ScriptedLoadableModuleWidget):
        #self.authPass.setText(self.network.auth_pass)
 
        self.loadConfigButton.setText(os.path.basename(filename))
-  
+ 
+  def onLoadZipButtonClicked(self):
+       filename=qt.QFileDialog.getOpenFileName(\
+               None,'Open certificate file (zip)',
+               self.configDir, '*.zip')
+       zpath=pathlib.Path(filename)
+       user=zpath.stem
+       userDir=os.path.join(os.path.expanduser('~'),'.labkey',user)
+       if not os.path.isdir(userDir):
+           os.mkdir(userDir)
+           
+       caName=None
+       with zipfile.ZipFile(filename,'r') as zipObj:
+           zipObj.extract(user+'.crt',userDir)
+           zipObj.extract(user+'.key',userDir)
+           zipList=zipObj.namelist()
+           for f in zipList:
+               if f.find('CA')>-1:
+                   caName=f
+                   zipObj.extract(f,userDir)
+
+       self.serverURL.setText('https://merlin.fmf.uni-lj.si')
+       self.privateKeyButton.setText(os.path.join(userDir,user+'.key'))
+       self.userCertButton.setText(os.path.join(userDir,user+'.crt'))
+       self.pwd='notUsed'
+       self.caCertButton.setText(os.path.join(userDir,caName))
+       self.authName.setText("guest")
+       self.authPass.setText("guest")
+
+
+
+
+
   def onSaveConfigButtonClicked(self):
       connectionConfig=self.generateConfig()
       fhome=os.path.expanduser('~')
@@ -288,8 +331,12 @@ class labkeyBrowserWidget(ScriptedLoadableModuleWidget):
             sslSetup['user']=self.userCertButton.text
             sslSetup['key']=self.privateKeyButton.text
             sslSetup['ca']=self.caCertButton.text
-            sslSetup['keyPwd']=self.pwd
+            try:
+                sslSetup['keyPwd']=self.pwd
+            except AttributeError:
+                sslSetup['keyPwd']='notUsed'
             connectionConfig['SSL']=sslSetup
+
       connectionConfig["host"]=self.serverURL.text
       connectionConfig["context"]="labkey"
       labkeySetup={}