Projects STRLCPY autorize Commits 3e009ee8
🤬
  • ■ ■ ■ ■ ■
    gui/export.py
    skipped 73 lines
    74 74   actionPerformed=self.export)
    75 75   self.exportButton.setBounds(390, 50, 100, 30)
    76 76   
    77  - saveRestoreLabel = JLabel("State:")
     77 + saveRestoreLabel = JLabel("State (incl. Configuration):")
    78 78   saveRestoreLabel.setBounds(10, 160, 250, 30)
    79 79   saveRestoreLabel.setFont(boldFont)
    80 80   
    skipped 157 lines
    238 238   f.writelines(csvContent)
    239 239   f.close()
    240 240   
    241  - 
  • ■ ■ ■ ■ ■ ■
    gui/save_restore.py
    skipped 8 lines
    9 9  from table import LogEntry, UpdateTableEDT
    10 10  from helpers.http import IHttpRequestResponseImplementation
    11 11   
    12  -import csv, base64, sys
     12 +import csv, base64, json, re, sys
    13 13   
    14 14  # This code is necessary to maximize the csv field limit for the save and
    15 15  # restore functionality
    skipped 10 lines
    26 26  class SaveRestore():
    27 27   def __init__(self, extender):
    28 28   self._extender = extender
     29 + self._checkBoxes = [
     30 + "autoScroll",
     31 + "ignore304",
     32 + "prevent304",
     33 + "interceptRequestsfromRepeater",
     34 + "doUnauthorizedRequest",
     35 + "replaceQueryParam",
     36 + "showAuthBypassModified",
     37 + "showAuthPotentiallyEnforcedModified",
     38 + "showAuthEnforcedModified",
     39 + "showAuthBypassUnauthenticated",
     40 + "showAuthPotentiallyEnforcedUnauthenticated",
     41 + "showAuthEnforcedUnauthenticated",
     42 + "showDisabledUnauthenticated"
     43 + ]
    29 44   
    30 45   def saveState(self):
    31 46   parentFrame = JFrame()
    skipped 5 lines
    37 52   exportFile = fileChooser.getSelectedFile()
    38 53   with open(exportFile.getAbsolutePath(), 'wb') as csvfile:
    39 54   csvwriter = csv.writer(csvfile, delimiter='\t', quotechar='|', quoting=csv.QUOTE_MINIMAL)
     55 + 
     56 + # Configuration
     57 + tempRow = ["ReplaceString", base64.b64encode(self._extender.replaceString.getText())]
     58 + csvwriter.writerow(tempRow)
     59 + 
     60 + for EDFilter in self._extender.EDModel.toArray():
     61 + tempRow = ["EDFilter", base64.b64encode(EDFilter)]
     62 + csvwriter.writerow(tempRow)
     63 + 
     64 + for EDFilterUnauth in self._extender.EDModelUnauth.toArray():
     65 + tempRow = ["EDFilterUnauth", base64.b64encode(EDFilterUnauth)]
     66 + csvwriter.writerow(tempRow)
     67 + 
     68 + for IFFilter in self._extender.IFModel.toArray():
     69 + tempRow = ["IFFilter", base64.b64encode(IFFilter)]
     70 + csvwriter.writerow(tempRow)
     71 + 
     72 + for t in ["AndOrType", "AndOrTypeUnauth"]:
     73 + tempRow = [t, getattr(self._extender, t).getSelectedItem()]
     74 + csvwriter.writerow(tempRow)
     75 + 
     76 + for key in self._extender.badProgrammerMRModel:
     77 + d = dict(self._extender.badProgrammerMRModel[key])
     78 + d["regexMatch"] = d["regexMatch"] is not None
     79 + tempRow = ["MatchReplace", base64.b64encode(json.dumps(d))]
     80 + csvwriter.writerow(tempRow)
     81 + 
     82 + d = dict((c, getattr(self._extender, c).isSelected()) for c in self._checkBoxes)
     83 + tempRow = ["CheckBoxes", json.dumps(d)]
     84 + csvwriter.writerow(tempRow)
     85 + 
     86 + isSelected = self._extender.exportPnl.getComponents()[-1].isSelected()
     87 + tempRow = ["RemoveDuplicates", json.dumps(isSelected)]
     88 + csvwriter.writerow(tempRow)
     89 + 
     90 + # Request/response list
    40 91   for i in range(0,self._extender._log.size()):
    41 92   tempRequestResponseHost = self._extender._log.get(i)._requestResponse.getHttpService().getHost()
    42 93   tempRequestResponsePort = self._extender._log.get(i)._requestResponse.getHttpService().getPort()
    skipped 5 lines
    48 99   tempOriginalRequestResponsePort = self._extender._log.get(i)._originalrequestResponse.getHttpService().getPort()
    49 100   tempOriginalRequestResponseProtocol = self._extender._log.get(i)._originalrequestResponse.getHttpService().getProtocol()
    50 101   tempOriginalRequestResponseRequest = base64.b64encode(self._extender._log.get(i)._originalrequestResponse.getRequest())
    51  - tempOriginalRequestResponseResponse = base64.b64encode(self._extender._log.get(i)._originalrequestResponse.getResponse())
     102 + tempOriginalRequestResponseResponse = base64.b64encode(self._extender._log.get(i)._originalrequestResponse.getResponse())
    52 103   
    53 104   if self._extender._log.get(i)._unauthorizedRequestResponse is not None:
    54 105   tempUnauthorizedRequestResponseHost = self._extender._log.get(i)._unauthorizedRequestResponse.getHttpService().getHost()
    skipped 9 lines
    64 115   tempUnauthorizedRequestResponseResponse = None
    65 116   
    66 117   tempEnforcementStatus = self._extender._log.get(i)._enfocementStatus
    67  - tempEnforcementStatusUnauthorized = self._extender._log.get(i)._enfocementStatusUnauthorized
     118 + tempEnforcementStatusUnauthorized = self._extender._log.get(i)._enfocementStatusUnauthorized
    68 119   
    69 120   tempRow = [tempRequestResponseHost,tempRequestResponsePort,tempRequestResponseProtocol,tempRequestResponseRequest,tempRequestResponseResponse]
    70 121   tempRow.extend([tempOriginalRequestResponseHost,tempOriginalRequestResponsePort,tempOriginalRequestResponseProtocol,tempOriginalRequestResponseRequest,tempOriginalRequestResponseResponse])
    skipped 6 lines
    77 128   parentFrame = JFrame()
    78 129   fileChooser = JFileChooser()
    79 130   fileChooser.setDialogTitle("State import file")
    80  - userSelection = fileChooser.showDialog(parentFrame,"Restore")
     131 + userSelection = fileChooser.showDialog(parentFrame, "Restore")
     132 + modelMap = {
     133 + "IFFilter": self._extender.IFModel,
     134 + "EDFilter": self._extender.EDModel,
     135 + "EDFilterUnauth": self._extender.EDModelUnauth
     136 + }
    81 137   
    82 138   if userSelection == JFileChooser.APPROVE_OPTION:
    83 139   importFile = fileChooser.getSelectedFile()
    skipped 3 lines
    87 143   csvreader = csv.reader(csvfile, delimiter='\t', quotechar='|')
    88 144   
    89 145   for row in csvreader:
     146 + # Configuration
     147 + if row[0] == "ReplaceString":
     148 + self._extender.replaceString.setText(base64.b64decode(row[1]))
     149 + continue
    90 150   
     151 + if row[0] in modelMap:
     152 + f = base64.b64decode(row[1])
     153 + if f not in modelMap[row[0]].toArray():
     154 + modelMap[row[0]].addElement(f)
     155 + continue
     156 + 
     157 + if row[0] in {"AndOrType", "AndOrTypeUnauth"}:
     158 + getattr(self._extender, row[0]).setSelectedItem(row[1])
     159 + continue
     160 + 
     161 + if row[0] == "MatchReplace":
     162 + d = json.loads(base64.b64decode(row[1]))
     163 + key = d["type"] + " " + d["match"] + "->" + d["replace"]
     164 + if key in self._extender.badProgrammerMRModel:
     165 + continue
     166 + regexMatch = None
     167 + if d["regexMatch"]:
     168 + try:
     169 + d["regexMatch"] = re.compile(d["match"])
     170 + except re.error:
     171 + print("ERROR: Regex to restore is invalid:", d["match"])
     172 + continue
     173 + self._extender.badProgrammerMRModel[key] = d
     174 + self._extender.MRModel.addElement(key)
     175 + continue
     176 + 
     177 + if row[0] == "CheckBoxes":
     178 + d = json.loads(row[1])
     179 + for k in d:
     180 + getattr(self._extender, k).setSelected(d[k])
     181 + continue
     182 + 
     183 + if row[0] == "RemoveDuplicates":
     184 + isSelected = json.loads(row[1])
     185 + try:
     186 + self._extender.exportPnl.getComponents()[-1].setSelected(isSelected)
     187 + except TypeError: # suppress TypeError: None required for void return
     188 + pass
     189 + continue
     190 + 
     191 + # Request/response list
    91 192   tempRequestResponseHost = row[0]
    92 193   tempRequestResponsePort = row[1]
    93 194   tempRequestResponseProtocol = row[2]
    skipped 7 lines
    101 202   tempOriginalRequestResponsePort = row[6]
    102 203   tempOriginalRequestResponseProtocol = row[7]
    103 204   tempOriginalRequestResponseRequest = base64.b64decode(row[8])
    104  - tempOriginalRequestResponseResponse = base64.b64decode(row[9])
     205 + tempOriginalRequestResponseResponse = base64.b64decode(row[9])
    105 206   
    106 207   tempOriginalRequestResponseHttpService = self._extender._helpers.buildHttpService(tempOriginalRequestResponseHost,int(tempOriginalRequestResponsePort),tempOriginalRequestResponseProtocol)
    107 208   tempOriginalRequestResponse = IHttpRequestResponseImplementation(tempOriginalRequestResponseHttpService,tempOriginalRequestResponseRequest,tempOriginalRequestResponseResponse)
    skipped 12 lines
    120 221   tempUnauthorizedRequestResponse = None
    121 222   
    122 223   tempEnforcementStatus = row[15]
    123  - tempEnforcementStatusUnauthorized = row[16]
     224 + tempEnforcementStatusUnauthorized = row[16]
    124 225   
    125 226   self._extender._lock.acquire()
    126 227   
    skipped 33 lines
    160 261   self._extender.lastAuthorizationHeader = authorizationHeader
    161 262   self._extender.fetchAuthorizationHeaderButton.setEnabled(True)
    162 263   
    163  - 
Please wait...
Page is in error, reload to recover