Handle a get request with resource.
(self, resource=None)
| 92 | return True |
| 93 | |
| 94 | def get(self, resource=None): |
| 95 | """Handle a get request with resource.""" |
| 96 | testcase = None |
| 97 | testcase_id = request.args.get('testcase_id') |
| 98 | if not testcase_id and not resource: |
| 99 | raise helpers.EarlyExitError('No file requested.', 400) |
| 100 | |
| 101 | if testcase_id: |
| 102 | try: |
| 103 | testcase = data_handler.get_testcase_by_id(testcase_id) |
| 104 | except errors.InvalidTestcaseError: |
| 105 | raise helpers.EarlyExitError('Invalid testcase.', 400) |
| 106 | |
| 107 | if not resource: |
| 108 | if testcase.minimized_keys and testcase.minimized_keys != 'NA': |
| 109 | resource = testcase.minimized_keys |
| 110 | else: |
| 111 | resource = testcase.fuzzed_keys |
| 112 | |
| 113 | fuzzer_binary_name = None |
| 114 | if testcase: |
| 115 | fuzzer_binary_name = testcase.get_metadata('fuzzer_binary_name') |
| 116 | |
| 117 | resource = str(urllib.parse.unquote(resource)) |
| 118 | blob_info = blobs.get_blob_info(resource) |
| 119 | if not blob_info: |
| 120 | raise helpers.EarlyExitError('File does not exist.', 400) |
| 121 | |
| 122 | if (testcase and testcase.fuzzed_keys != blob_info.key() and |
| 123 | testcase.minimized_keys != blob_info.key()): |
| 124 | raise helpers.EarlyExitError('Invalid testcase.', 400) |
| 125 | |
| 126 | if (utils.is_oss_fuzz() and testcase and |
| 127 | self.check_public_testcase(blob_info, testcase)): |
| 128 | # Public OSS-Fuzz testcase. |
| 129 | return self._send_blob( |
| 130 | blob_info, |
| 131 | testcase.key.id(), |
| 132 | is_minimized=True, |
| 133 | fuzzer_binary_name=fuzzer_binary_name) |
| 134 | |
| 135 | is_minimized = testcase and blob_info.key() == testcase.minimized_keys |
| 136 | |
| 137 | # Testcase blobs require testcase-level access (which enforces the |
| 138 | # security_flag privileged-access requirement); general access alone is |
| 139 | # only sufficient for non-testcase blobs. |
| 140 | if testcase: |
| 141 | if not access.can_user_access_testcase(testcase): |
| 142 | raise helpers.AccessDeniedError() |
| 143 | return self._send_blob(blob_info, testcase_id, is_minimized, |
| 144 | fuzzer_binary_name) |
| 145 | |
| 146 | if access.has_access(): |
| 147 | return self._send_blob(blob_info, testcase_id, is_minimized, |
| 148 | fuzzer_binary_name) |
| 149 | |
| 150 | raise helpers.AccessDeniedError() |
nothing calls this directly
no test coverage detected