Skip to content

Commit e084d49

Browse files
Chase Coalwelltrivikr
Chase Coalwell
authored andcommitted
Feat: update and apply S3 middleware (#478)
* feat: migrate s3 middleware * feat: apply validate-bucket-name plugin
1 parent 9efac3e commit e084d49

File tree

3 files changed

+50
-20
lines changed

3 files changed

+50
-20
lines changed

codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AddBuiltinPlugins.java

+5
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,11 @@ public List<RuntimeClientPlugin> getClientPlugins() {
5757
.withConventions("@aws-sdk/middleware-sdk-api-gateway", "^0.1.0-preview.5",
5858
"AcceptsHeader", HAS_MIDDLEWARE)
5959
.servicePredicate((m,s) -> s.getId().getName().equals("BackplaneControlService"))
60+
.build(),
61+
RuntimeClientPlugin.builder()
62+
.withConventions("@aws-sdk/middleware-sdk-s3", "^0.1.0-preview.2",
63+
"validateBucketNameMiddleware", HAS_MIDDLEWARE)
64+
.servicePredicate((m,s) -> s.getId().getName().equals("AmazonS3"))
6065
.build()
6166
);
6267
}

packages/middleware-sdk-s3/src/validate-bucket-name.spec.ts

+6-8
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,18 @@
1-
import { validateBucketName } from "./validate-bucket-name";
2-
import { SerializeHandler } from "@aws-sdk/types";
1+
import { validateBucketNameMiddleware } from "./validate-bucket-name";
32

4-
describe("validateBucketName", () => {
3+
describe("validateBucketNameMiddleware", () => {
54
const mockNextHandler = jest.fn();
6-
const composedHandler: SerializeHandler<any, any> = validateBucketName(
7-
mockNextHandler
8-
);
95

106
beforeEach(() => {
117
jest.clearAllMocks();
128
});
139

1410
it("throws error if Bucket parameter contains '/'", async () => {
11+
const handler = validateBucketNameMiddleware()(mockNextHandler, {} as any);
1512
const bucket = "bucket/part/of/key";
1613
let error;
1714
try {
18-
await composedHandler({
15+
await handler({
1916
input: {
2017
Bucket: bucket
2118
}
@@ -31,12 +28,13 @@ describe("validateBucketName", () => {
3128
});
3229

3330
it("doesn't throw error if Bucket parameter has no '/'", async () => {
31+
const handler = validateBucketNameMiddleware()(mockNextHandler, {} as any);
3432
const args = {
3533
input: {
3634
Bucket: "bucket"
3735
}
3836
};
39-
await composedHandler(args);
37+
await handler(args);
4038
expect(mockNextHandler.mock.calls.length).toBe(1);
4139
expect(mockNextHandler.mock.calls[0][0]).toEqual(args);
4240
});
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,42 @@
1-
import { Handler, SerializeHandlerArguments } from "@aws-sdk/types";
1+
import {
2+
InitializeHandler,
3+
InitializeHandlerArguments,
4+
InitializeHandlerOptions,
5+
InitializeHandlerOutput,
6+
InitializeMiddleware,
7+
MetadataBearer,
8+
Pluggable
9+
} from "@aws-sdk/types";
210

3-
export const validateBucketName = (
4-
next: Handler<any, any>
5-
): Handler<any, any> => async (args: SerializeHandlerArguments<any, any>) => {
6-
const { input } = args;
7-
if (typeof input.Bucket === "string" && input.Bucket.indexOf("/") >= 0) {
8-
const err = new Error(
9-
`Bucket name shouldn't contain '/', received '${input.Bucket}'`
11+
export function validateBucketNameMiddleware(): InitializeMiddleware<any, any> {
12+
return <Output extends MetadataBearer>(
13+
next: InitializeHandler<any, Output>
14+
): InitializeHandler<any, Output> => async (
15+
args: InitializeHandlerArguments<any>
16+
): Promise<InitializeHandlerOutput<Output>> => {
17+
const { input } = args;
18+
if (typeof input.Bucket === "string" && input.Bucket.indexOf("/") >= 0) {
19+
const err = new Error(
20+
`Bucket name shouldn't contain '/', received '${input.Bucket}'`
21+
);
22+
err.name = "InvalidBucketName";
23+
throw err;
24+
}
25+
return next({ ...args });
26+
};
27+
}
28+
29+
export const validateBucketNameMiddlewareOptions: InitializeHandlerOptions = {
30+
step: "initialize",
31+
tags: ["SET_EXPECT_HEADER", "EXPECT_HEADER"],
32+
name: "addExpectContinueMiddleware"
33+
};
34+
35+
export const getValidateBucketNamePlugin = (): Pluggable<any, any> => ({
36+
applyToStack: clientStack => {
37+
clientStack.add(
38+
validateBucketNameMiddleware(),
39+
validateBucketNameMiddlewareOptions
1040
);
11-
err.name = "InvalidBucketName";
12-
throw err;
1341
}
14-
return next({ ...args });
15-
};
42+
});

0 commit comments

Comments
 (0)