skipped 6 lines 7 7 from java.io import File 8 8 9 9 from table import LogEntry, UpdateTableEDT 10 - from helpers.http import IHttpRequestResponseImplementation 10 + from helpers.http import get_cookie_header_from_message , get_authorization_header_from_message , 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 24 lines 151 252 152 253 lastRow = self._extender._log.size() 153 254 if lastRow > 0: 154 - cookiesHeader = self._extender. get_cookie_header_from_message ( self._extender._log.get(lastRow - 1)._requestResponse) 255 + cookiesHeader = get_cookie_header_from_message ( self._extender, self._extender._log.get(lastRow - 1)._requestResponse) 155 256 if cookiesHeader: 156 257 self._extender.lastCookiesHeader = cookiesHeader 157 258 self._extender.fetchCookiesHeaderButton.setEnabled(True) 158 - authorizationHeader = self._extender. get_authorization_header_from_message ( self._extender._log.get(lastRow - 1)._requestResponse) 259 + authorizationHeader = get_authorization_header_from_message ( self._extender, self._extender._log.get(lastRow - 1)._requestResponse) 159 260 if authorizationHeader: 160 261 self._extender.lastAuthorizationHeader = authorizationHeader 161 262 self._extender.fetchAuthorizationHeaderButton.setEnabled(True) 162 263 163 -