36 lines
873 B
TypeScript
36 lines
873 B
TypeScript
import * as plugins from '../plugins.js';
|
|
import type { S3Context } from '../classes/context.js';
|
|
|
|
/**
|
|
* Service-level operations (root /)
|
|
*/
|
|
export class ServiceController {
|
|
/**
|
|
* GET / - List all buckets
|
|
*/
|
|
public static async listBuckets(
|
|
req: plugins.http.IncomingMessage,
|
|
res: plugins.http.ServerResponse,
|
|
ctx: S3Context,
|
|
params: Record<string, string>
|
|
): Promise<void> {
|
|
const buckets = await ctx.store.listBuckets();
|
|
|
|
await ctx.sendXML({
|
|
ListAllMyBucketsResult: {
|
|
'@_xmlns': 'http://s3.amazonaws.com/doc/2006-03-01/',
|
|
Owner: {
|
|
ID: '123456789000',
|
|
DisplayName: 'S3rver',
|
|
},
|
|
Buckets: {
|
|
Bucket: buckets.map((bucket) => ({
|
|
Name: bucket.name,
|
|
CreationDate: bucket.creationDate.toISOString(),
|
|
})),
|
|
},
|
|
},
|
|
});
|
|
}
|
|
}
|