fix(oci): Prefer raw request body for content-addressable OCI operations and expose rawBody on request context
This commit is contained in:
@@ -62,7 +62,9 @@ export class OciRegistry extends BaseRegistry {
|
||||
const manifestMatch = path.match(/^\/v2\/([^\/]+(?:\/[^\/]+)*)\/manifests\/([^\/]+)$/);
|
||||
if (manifestMatch) {
|
||||
const [, name, reference] = manifestMatch;
|
||||
return this.handleManifestRequest(context.method, name, reference, token, context.body, context.headers);
|
||||
// Prefer rawBody for content-addressable operations to preserve exact bytes
|
||||
const bodyData = context.rawBody || context.body;
|
||||
return this.handleManifestRequest(context.method, name, reference, token, bodyData, context.headers);
|
||||
}
|
||||
|
||||
// Blob operations: /v2/{name}/blobs/{digest}
|
||||
@@ -76,7 +78,9 @@ export class OciRegistry extends BaseRegistry {
|
||||
const uploadInitMatch = path.match(/^\/v2\/([^\/]+(?:\/[^\/]+)*)\/blobs\/uploads\/?$/);
|
||||
if (uploadInitMatch && context.method === 'POST') {
|
||||
const [, name] = uploadInitMatch;
|
||||
return this.handleUploadInit(name, token, context.query, context.body);
|
||||
// Prefer rawBody for content-addressable operations to preserve exact bytes
|
||||
const bodyData = context.rawBody || context.body;
|
||||
return this.handleUploadInit(name, token, context.query, bodyData);
|
||||
}
|
||||
|
||||
// Blob upload operations: /v2/{name}/blobs/uploads/{uuid}
|
||||
@@ -261,11 +265,14 @@ export class OciRegistry extends BaseRegistry {
|
||||
return this.createUnauthorizedResponse(session.repository, 'push');
|
||||
}
|
||||
|
||||
// Prefer rawBody for content-addressable operations to preserve exact bytes
|
||||
const bodyData = context.rawBody || context.body;
|
||||
|
||||
switch (method) {
|
||||
case 'PATCH':
|
||||
return this.uploadChunk(uploadId, context.body, context.headers['content-range']);
|
||||
return this.uploadChunk(uploadId, bodyData, context.headers['content-range']);
|
||||
case 'PUT':
|
||||
return this.completeUpload(uploadId, context.query['digest'], context.body);
|
||||
return this.completeUpload(uploadId, context.query['digest'], bodyData);
|
||||
case 'GET':
|
||||
return this.getUploadStatus(uploadId);
|
||||
default:
|
||||
|
||||
Reference in New Issue
Block a user