Bläddra i källkod

Adding save configuration and button coloring to check configuration viability

Andrej 4 år sedan
förälder
incheckning
1340a582c8
2 ändrade filer med 84 tillägg och 7 borttagningar
  1. 62 5
      labkeyBrowser/labkeyBrowser.py
  2. 22 2
      labkeyBrowser/slicerNetwork.py

+ 62 - 5
labkeyBrowser/labkeyBrowser.py

@@ -83,8 +83,13 @@ class labkeyBrowserWidget(ScriptedLoadableModuleWidget):
     self.loadConfigButton=qt.QPushButton("Load configuration")
     self.loadConfigButton.toolTip="Load configuration"
     self.loadConfigButton.connect('clicked(bool)',self.onLoadConfigButtonClicked)
-    connectionFormLayout.addRow("Connection:",self.loadConfigButton)
+    connectionFormLayout.addRow("Configuration:",self.loadConfigButton)
 
+    self.saveConfigButton=qt.QPushButton("Save configuration")
+    self.saveConfigButton.toolTip="Save configuration"
+    self.saveConfigButton.clicked.connect(self.onSaveConfigButtonClicked)
+    connectionFormLayout.addRow("Configuration:",self.saveConfigButton)
+    
     self.initButton=qt.QPushButton("Init")
     self.initButton.toolTip="Initialize connection to the server"
     self.initButton.connect('clicked(bool)',self.onInitButtonClicked)
@@ -99,6 +104,9 @@ class labkeyBrowserWidget(ScriptedLoadableModuleWidget):
     self.authPass.textChanged.connect(self.updateAuthPass)
     connectionFormLayout.addRow("Labkey password: ", self.authPass)
 
+    
+
+
     fileDialogCollapsibleButton = ctk.ctkCollapsibleButton()
     fileDialogCollapsibleButton.text = "Remote files"
     self.layout.addWidget(fileDialogCollapsibleButton)
@@ -240,12 +248,57 @@ class labkeyBrowserWidget(ScriptedLoadableModuleWidget):
   def onLoadConfigButtonClicked(self):
        filename=qt.QFileDialog.getOpenFileName(None,'Open configuration file (JSON)',
             self.configDir, '*.json')
-       self.network.parseConfig(filename)
-       self.serverURL.setText(self.network.hostname)
-       self.authName.setText(self.network.auth_name)
-       self.authPass.setText(self.network.auth_pass)
+       self.network.parseConfig(filename,self)
+       #self.serverURL.setText(self.network.hostname)
+       #self.authName.setText(self.network.auth_name)
+       #self.authPass.setText(self.network.auth_pass)
 
        self.loadConfigButton.setText(os.path.basename(filename))
+  
+  def onSaveConfigButtonClicked(self):
+      connectionConfig={}
+       
+       #setup SSL
+      if self.privateKeyButton.text=="Load" or\
+        self.userCertButton.text=="Load" or\
+        self.caCertButton.text=="Load":
+            #no ssl
+            pass
+      else:
+            sslSetup={}
+            sslSetup['user']=self.userCertButton.text
+            sslSetup['key']=self.privateKeyButton.text
+            sslSetup['ca']=self.caCertButton.text
+            sslSetup['keyPwd']=self.pwd
+            connectionConfig['SSL']=sslSetup
+      connectionConfig["host"]=self.serverURL.text
+      connectionConfig["context"]="labkey"
+      labkeySetup={}
+      labkeySetup['user']=self.authName.text
+      labkeySetup['password']=self.authPass.text
+      connectionConfig['labkey']=labkeySetup
+
+      orthancSetup={}
+      if self.serverURL.text.find('merlin')>-1:
+            orthancSetup['server']='https://orthanc.fmf.uni-lj.si'
+      if self.serverURL.text.find('onko-nix')>-1:
+            orthancSetup['server']='http://onko-nix.onko-i.si:8042'
+      orthancSetup['user']='ask'
+      orthancSetup['password']='askPassword'
+      connectionConfig['orthanc']=orthancSetup
+
+
+      fhome=os.path.expanduser('~')
+      labkeyDir=os.path.join(fhome,".labkey")
+      if not os.path.isdir(labkeyDir):
+          os.mkdir(labkeyDir)
+      fconfig=os.path.join(labkeyDir,'network.json')
+
+      with open(fconfig,'w') as f:
+            json.dump(connectionConfig,f,indent=3)
+
+      print("Done")
+
 
   def onInitButtonClicked(self):
       if self.serverURL.text.find("https")==0:
@@ -260,6 +313,10 @@ class labkeyBrowserWidget(ScriptedLoadableModuleWidget):
         
 
       self.network.initRemote()
+      if self.network.getCSRF()==None:
+          self.initButton.setStyleSheet("background-color: red")
+      else:
+          self.initButton.setStyleSheet("background-color: green")
 
   def updateAuthName(self,txt):
       self.network.auth_name=txt

+ 22 - 2
labkeyBrowser/slicerNetwork.py

@@ -111,7 +111,7 @@ class labkeyURIHandler(slicer.vtkURIHandler):
             return
         self.initRemote()
 
-    def parseConfig(self,fname):
+    def parseConfig(self,fname,parent=None):
         try:
             f=open(fname)
         except OSError as e:
@@ -127,9 +127,20 @@ class labkeyURIHandler(slicer.vtkURIHandler):
                 dt['SSL']['keyPwd'],
                 dt['SSL']['ca']
                 )
+            if not parent==None:
+                parent.userCertButton.setText(dt['SSL']['user'])
+                parent.caCertButton.setText(dt['SSL']['ca'])
+                parent.privateKeyButton.setText(dt['SSL']['key'])
+                parent.pwd=dt['SSL']['keyPwd']
+
+
         self.hostname=dt['host']
         self.auth_name=dt['labkey']['user']
         self.auth_pass=dt['labkey']['password']
+        if not parent==None:
+            parent.serverURL.setText(dt['host'])
+            parent.authName.setText(dt['labkey']['user'])
+            parent.authPass.setText(dt['labkey']['password'])
 
 
     #path convention
@@ -213,6 +224,10 @@ class labkeyURIHandler(slicer.vtkURIHandler):
             print e.code
             print e.read()
             return e
+        except urllib2.URLError as e:
+            print("Handling URLError")
+            print e
+            return None
     
     #a HEAD request
     def head(self,url):
@@ -277,7 +292,12 @@ class labkeyURIHandler(slicer.vtkURIHandler):
 
     def getCSRF(self):
         url=self.GetLabkeyUrl()+'/login/whoAmI.view'
-        jsonData=json.load(self.get(url))
+        try:
+            jsonData=json.load(self.get(url))
+        except AttributeError:
+            print("Failed")
+            return None
+        
         return jsonData["CSRF"]