(request, log)
| 136 | } |
| 137 | |
| 138 | function _checkMultipleBackendRequest(request, log) { |
| 139 | const { headers, query } = request; |
| 140 | const storageType = headers['x-scal-storage-type']; |
| 141 | const { operation } = query; |
| 142 | let errMessage; |
| 143 | if (storageType === undefined) { |
| 144 | errMessage = 'bad request: missing x-scal-storage-type header'; |
| 145 | log.error(errMessage); |
| 146 | return errorInstances.BadRequest.customizeDescription(errMessage); |
| 147 | } |
| 148 | if (operation === 'putpart' && headers['x-scal-part-number'] === undefined) { |
| 149 | errMessage = 'bad request: missing part-number header'; |
| 150 | log.error(errMessage); |
| 151 | return errorInstances.BadRequest.customizeDescription(errMessage); |
| 152 | } |
| 153 | const isMPUOperation = ['putpart', 'completempu', 'abortmpu'].includes(operation); |
| 154 | if (isMPUOperation && headers['x-scal-upload-id'] === undefined) { |
| 155 | errMessage = 'bad request: missing upload-id header'; |
| 156 | log.error(errMessage); |
| 157 | return errorInstances.BadRequest.customizeDescription(errMessage); |
| 158 | } |
| 159 | if (operation === 'putobject' && headers['x-scal-canonical-id'] === undefined) { |
| 160 | errMessage = 'bad request: missing x-scal-canonical-id header'; |
| 161 | log.error(errMessage); |
| 162 | return errorInstances.BadRequest.customizeDescription(errMessage); |
| 163 | } |
| 164 | // Ensure the external backend has versioning before asserting version ID. |
| 165 | if ( |
| 166 | !constants.versioningNotImplBackends[storageType] && |
| 167 | (operation === 'puttagging' || operation === 'deletetagging') |
| 168 | ) { |
| 169 | if (headers['x-scal-data-store-version-id'] === undefined) { |
| 170 | errMessage = 'bad request: missing x-scal-data-store-version-id header'; |
| 171 | log.error(errMessage); |
| 172 | return errorInstances.BadRequest.customizeDescription(errMessage); |
| 173 | } |
| 174 | if (headers['x-scal-source-bucket'] === undefined) { |
| 175 | errMessage = 'bad request: missing x-scal-source-bucket header'; |
| 176 | log.error(errMessage); |
| 177 | return errorInstances.BadRequest.customizeDescription(errMessage); |
| 178 | } |
| 179 | if (headers['x-scal-replication-endpoint-site'] === undefined) { |
| 180 | errMessage = 'bad request: missing ' + 'x-scal-replication-endpoint-site'; |
| 181 | log.error(errMessage); |
| 182 | return errorInstances.BadRequest.customizeDescription(errMessage); |
| 183 | } |
| 184 | } |
| 185 | if (operation === 'putobject' && headers['content-md5'] === undefined) { |
| 186 | errMessage = 'bad request: missing content-md5 header'; |
| 187 | log.error(errMessage); |
| 188 | return errorInstances.BadRequest.customizeDescription(errMessage); |
| 189 | } |
| 190 | if (headers['x-scal-storage-class'] === undefined) { |
| 191 | errMessage = 'bad request: missing x-scal-storage-class header'; |
| 192 | log.error(errMessage); |
| 193 | return errorInstances.BadRequest.customizeDescription(errMessage); |
| 194 | } |
| 195 | const location = locationConstraints[headers['x-scal-storage-class']]; |
no test coverage detected