feat(auth): Implement HMAC-SHA256 OCI JWTs; enhance PyPI & RubyGems uploads and normalize responses
This commit is contained in:
@@ -185,7 +185,7 @@ export class PypiRegistry extends BaseRegistry {
|
||||
'Content-Type': 'application/vnd.pypi.simple.v1+json',
|
||||
'Cache-Control': 'public, max-age=600'
|
||||
},
|
||||
body: Buffer.from(JSON.stringify(response)),
|
||||
body: response,
|
||||
};
|
||||
} else {
|
||||
// PEP 503: HTML response
|
||||
@@ -200,7 +200,7 @@ export class PypiRegistry extends BaseRegistry {
|
||||
'Content-Type': 'text/html; charset=utf-8',
|
||||
'Cache-Control': 'public, max-age=600'
|
||||
},
|
||||
body: Buffer.from(html),
|
||||
body: html,
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -218,7 +218,7 @@ export class PypiRegistry extends BaseRegistry {
|
||||
return {
|
||||
status: 404,
|
||||
headers: { 'Content-Type': 'text/html; charset=utf-8' },
|
||||
body: Buffer.from('<html><body><h1>404 Not Found</h1></body></html>'),
|
||||
body: '<html><body><h1>404 Not Found</h1></body></html>',
|
||||
};
|
||||
}
|
||||
|
||||
@@ -251,7 +251,7 @@ export class PypiRegistry extends BaseRegistry {
|
||||
'Content-Type': 'application/vnd.pypi.simple.v1+json',
|
||||
'Cache-Control': 'public, max-age=300'
|
||||
},
|
||||
body: Buffer.from(JSON.stringify(response)),
|
||||
body: response,
|
||||
};
|
||||
} else {
|
||||
// PEP 503: HTML response
|
||||
@@ -266,7 +266,7 @@ export class PypiRegistry extends BaseRegistry {
|
||||
'Content-Type': 'text/html; charset=utf-8',
|
||||
'Cache-Control': 'public, max-age=300'
|
||||
},
|
||||
body: Buffer.from(html),
|
||||
body: html,
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -327,11 +327,13 @@ export class PypiRegistry extends BaseRegistry {
|
||||
return this.errorResponse(400, 'Invalid upload request');
|
||||
}
|
||||
|
||||
// Extract required fields
|
||||
// Extract required fields - support both nested and flat body formats
|
||||
const packageName = formData.name;
|
||||
const version = formData.version;
|
||||
const filename = formData.content?.filename;
|
||||
const fileData = formData.content?.data as Buffer;
|
||||
// Support both: formData.content.filename (multipart parsed) and formData.filename (flat)
|
||||
const filename = formData.content?.filename || formData.filename;
|
||||
// Support both: formData.content.data (multipart parsed) and formData.content (Buffer directly)
|
||||
const fileData = (formData.content?.data || (Buffer.isBuffer(formData.content) ? formData.content : null)) as Buffer;
|
||||
const filetype = formData.filetype; // 'bdist_wheel' or 'sdist'
|
||||
const pyversion = formData.pyversion;
|
||||
|
||||
@@ -431,7 +433,7 @@ export class PypiRegistry extends BaseRegistry {
|
||||
});
|
||||
|
||||
return {
|
||||
status: 200,
|
||||
status: 201,
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: Buffer.from(JSON.stringify({
|
||||
message: 'Package uploaded successfully',
|
||||
|
||||
Reference in New Issue
Block a user