Explorar o código

Making interface CSRF compliant

Andrej Studen %!s(int64=6) %!d(string=hai) anos
pai
achega
61913fb7c7
Modificáronse 1 ficheiros con 10 adicións e 0 borrados
  1. 10 0
      labkeySlicerPythonExtension/slicerNetwork.py

+ 10 - 0
labkeySlicerPythonExtension/slicerNetwork.py

@@ -238,6 +238,10 @@ class labkeyURIHandler(slicer.vtkURIHandler):
         #makes it a post
         r.add_data(data)
         r.add_header("Content-Type","application/json")
+        #add csrf
+        csrf=self.getCSRF()
+        r.add_header("X-LABKEY-CSRF",csrf)
+
         base64string = base64.b64encode('%s:%s' % (self.auth_name, self.auth_pass))
         r.add_header("Authorization", "Basic %s" % base64string)
         print "{}: {}".format(r.get_method(),r.get_full_url())
@@ -259,6 +263,12 @@ class labkeyURIHandler(slicer.vtkURIHandler):
         return self.opener.open(r)
         #f contains json as a return value
 
+    def getCSRF(self):
+        url=self.GetLabkeyUrl()+'/login/whoAmI.view'
+        jsonData=json.load(self.get(url))
+        return jsonData["CSRF"]
+
+
     def remoteDirExists(self,url):
         status,dirs=self.listRemoteDir(url);
         return status