Skip to content

Commit e1e8256

Browse files
author
Steven Yuan
committed
fix(experimentalIdentityAndAuth): rename AWSSDKSigV4 to AwsSdkSigV4
1 parent 62c2ec4 commit e1e8256

File tree

8 files changed

+437
-42
lines changed

8 files changed

+437
-42
lines changed

codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/auth/http/integration/AwsSdkCustomizeSigV4Auth.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -154,30 +154,30 @@ public void customizeSupportedHttpAuthSchemes(
154154
}),""", s))
155155
.addResolveConfigFunction(ResolveConfigFunction.builder()
156156
.resolveConfigFunction(Symbol.builder()
157-
.name("resolveAWSSDKSigV4Config")
157+
.name("resolveAwsSdkSigV4Config")
158158
.namespace(AwsDependency.AWS_SDK_CORE.getPackageName(), "/")
159159
.addDependency(AwsDependency.AWS_SDK_CORE)
160160
.build())
161161
.inputConfig(Symbol.builder()
162-
.name("AWSSDKSigV4AuthInputConfig")
162+
.name("AwsSdkSigV4AuthInputConfig")
163163
.namespace(AwsDependency.AWS_SDK_CORE.getPackageName(), "/")
164164
.addDependency(AwsDependency.AWS_SDK_CORE)
165165
.build())
166166
.previouslyResolved(Symbol.builder()
167-
.name("AWSSDKSigV4PreviouslyResolved")
167+
.name("AwsSdkSigV4PreviouslyResolved")
168168
.namespace(AwsDependency.AWS_SDK_CORE.getPackageName(), "/")
169169
.addDependency(AwsDependency.AWS_SDK_CORE)
170170
.build())
171171
.resolvedConfig(Symbol.builder()
172-
.name("AWSSDKSigV4AuthResolvedConfig")
172+
.name("AwsSdkSigV4AuthResolvedConfig")
173173
.namespace(AwsDependency.AWS_SDK_CORE.getPackageName(), "/")
174174
.addDependency(AwsDependency.AWS_SDK_CORE)
175175
.build())
176176
.build())
177177
.putDefaultSigner(LanguageTarget.SHARED, w -> w
178178
.addDependency(AwsDependency.AWS_SDK_CORE)
179-
.addImport("AWSSDKSigV4Signer", null, AwsDependency.AWS_SDK_CORE)
180-
.write("new AWSSDKSigV4Signer()"))
179+
.addImport("AwsSdkSigV4Signer", null, AwsDependency.AWS_SDK_CORE)
180+
.write("new AwsSdkSigV4Signer()"))
181181
.build();
182182
supportedHttpAuthSchemesIndex.putHttpAuthScheme(authScheme.getSchemeId(), authScheme);
183183
}

packages/core/src/httpAuthSchemes/aws_sdk/AWSSDKSigV4Signer.ts renamed to packages/core/src/httpAuthSchemes/aws_sdk/AwsSdkSigV4Signer.ts

Lines changed: 29 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -11,21 +11,30 @@ import {
1111
} from "@smithy/types";
1212

1313
import { getDateHeader, getSkewCorrectedDate, getUpdatedSystemClockOffset } from "../utils";
14-
import { throwAWSSDKSigningPropertyError } from "./throwAWSSDKSigningPropertyError";
1514

1615
/**
1716
* @internal
1817
*/
19-
interface AWSSDKSigV4Config {
18+
const throwSigningPropertyError = <T>(name: string, property: T | undefined): T | never => {
19+
if (!property) {
20+
throw new Error(`Property \`${name}\` is not resolved for AWS SDK SigV4Auth`);
21+
}
22+
return property;
23+
};
24+
25+
/**
26+
* @internal
27+
*/
28+
interface AwsSdkSigV4Config {
2029
systemClockOffset: number;
2130
signer: (authScheme?: AuthScheme) => Promise<RequestSigner>;
2231
}
2332

2433
/**
2534
* @internal
2635
*/
27-
interface AWSSDKSigV4AuthSigningProperties {
28-
config: AWSSDKSigV4Config;
36+
interface AwsSdkSigV4AuthSigningProperties {
37+
config: AwsSdkSigV4Config;
2938
signer: RequestSigner;
3039
signingRegion?: string;
3140
signingName?: string;
@@ -34,7 +43,7 @@ interface AWSSDKSigV4AuthSigningProperties {
3443
/**
3544
* @internal
3645
*/
37-
interface AWSSDKSigV4Exception extends ServiceException {
46+
interface AwsSdkSigV4Exception extends ServiceException {
3847
ServerTime?: string;
3948
}
4049

@@ -43,14 +52,14 @@ interface AWSSDKSigV4Exception extends ServiceException {
4352
*/
4453
const validateSigningProperties = async (
4554
signingProperties: Record<string, unknown>
46-
): Promise<AWSSDKSigV4AuthSigningProperties> => {
47-
const context = throwAWSSDKSigningPropertyError(
55+
): Promise<AwsSdkSigV4AuthSigningProperties> => {
56+
const context = throwSigningPropertyError(
4857
"context",
4958
signingProperties.context as HandlerExecutionContext | undefined
5059
);
51-
const config = throwAWSSDKSigningPropertyError("config", signingProperties.config as AWSSDKSigV4Config | undefined);
60+
const config = throwSigningPropertyError("config", signingProperties.config as AwsSdkSigV4Config | undefined);
5261
const authScheme = context.endpointV2?.properties?.authSchemes?.[0];
53-
const signerFunction = throwAWSSDKSigningPropertyError(
62+
const signerFunction = throwSigningPropertyError(
5463
"signer",
5564
config.signer as ((authScheme?: AuthScheme) => Promise<RequestSigner>) | undefined
5665
);
@@ -68,7 +77,7 @@ const validateSigningProperties = async (
6877
/**
6978
* @internal
7079
*/
71-
export class AWSSDKSigV4Signer implements HttpSigner {
80+
export class AwsSdkSigV4Signer implements HttpSigner {
7281
async sign(
7382
httpRequest: IHttpRequest,
7483
/**
@@ -93,11 +102,11 @@ export class AWSSDKSigV4Signer implements HttpSigner {
93102
errorHandler(signingProperties: Record<string, unknown>): (error: Error) => never {
94103
return (error: Error) => {
95104
const serverTime: string | undefined =
96-
(error as AWSSDKSigV4Exception).ServerTime ?? getDateHeader((error as AWSSDKSigV4Exception).$response);
105+
(error as AwsSdkSigV4Exception).ServerTime ?? getDateHeader((error as AwsSdkSigV4Exception).$response);
97106
if (serverTime) {
98-
const config = throwAWSSDKSigningPropertyError(
107+
const config = throwSigningPropertyError(
99108
"config",
100-
signingProperties.config as AWSSDKSigV4Config | undefined
109+
signingProperties.config as AwsSdkSigV4Config | undefined
101110
);
102111
config.systemClockOffset = getUpdatedSystemClockOffset(serverTime, config.systemClockOffset);
103112
}
@@ -108,11 +117,16 @@ export class AWSSDKSigV4Signer implements HttpSigner {
108117
successHandler(httpResponse: HttpResponse | unknown, signingProperties: Record<string, unknown>): void {
109118
const dateHeader = getDateHeader(httpResponse);
110119
if (dateHeader) {
111-
const config = throwAWSSDKSigningPropertyError(
120+
const config = throwSigningPropertyError(
112121
"config",
113-
signingProperties.config as AWSSDKSigV4Config | undefined
122+
signingProperties.config as AwsSdkSigV4Config | undefined
114123
);
115124
config.systemClockOffset = getUpdatedSystemClockOffset(dateHeader, config.systemClockOffset);
116125
}
117126
}
118127
}
128+
129+
/**
130+
* @deprecated renamed to {@link AwsSdkSigV4Signer}
131+
*/
132+
export const AWSSDKSigV4Signer = AwsSdkSigV4Signer;
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
export * from "./AWSSDKSigV4Signer";
2-
export * from "./resolveAWSSDKSigV4Config";
1+
export * from "./AwsSdkSigV4Signer";
2+
export * from "./resolveAwsSdkSigV4Config";

packages/core/src/httpAuthSchemes/aws_sdk/resolveAWSSDKSigV4Config.ts renamed to packages/core/src/httpAuthSchemes/aws_sdk/resolveAwsSdkSigV4Config.ts

Lines changed: 30 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import {
2121
/**
2222
* @internal
2323
*/
24-
export interface AWSSDKSigV4AuthInputConfig {
24+
export interface AwsSdkSigV4AuthInputConfig {
2525
/**
2626
* The credentials used to sign requests.
2727
*/
@@ -60,7 +60,7 @@ export interface AWSSDKSigV4AuthInputConfig {
6060
/**
6161
* @internal
6262
*/
63-
export interface AWSSDKSigV4PreviouslyResolved {
63+
export interface AwsSdkSigV4PreviouslyResolved {
6464
credentialDefaultProvider?: (input: any) => MemoizedProvider<AwsCredentialIdentity>;
6565
region: string | Provider<string>;
6666
sha256: ChecksumConstructor | HashConstructor;
@@ -75,33 +75,33 @@ export interface AWSSDKSigV4PreviouslyResolved {
7575
/**
7676
* @internal
7777
*/
78-
export interface AWSSDKSigV4AuthResolvedConfig {
78+
export interface AwsSdkSigV4AuthResolvedConfig {
7979
/**
80-
* Resolved value for input config {@link AWSSDKSigV4AuthInputConfig.credentials}
80+
* Resolved value for input config {@link AwsSdkSigV4AuthInputConfig.credentials}
8181
* This provider MAY memoize the loaded credentials for certain period.
8282
* See {@link MemoizedProvider} for more information.
8383
*/
8484
credentials: AwsCredentialIdentityProvider;
8585
/**
86-
* Resolved value for input config {@link AWSSDKSigV4AuthInputConfig.signer}
86+
* Resolved value for input config {@link AwsSdkSigV4AuthInputConfig.signer}
8787
*/
8888
signer: (authScheme?: AuthScheme) => Promise<RequestSigner>;
8989
/**
90-
* Resolved value for input config {@link AWSSDKSigV4AuthInputConfig.signingEscapePath}
90+
* Resolved value for input config {@link AwsSdkSigV4AuthInputConfig.signingEscapePath}
9191
*/
9292
signingEscapePath: boolean;
9393
/**
94-
* Resolved value for input config {@link AWSSDKSigV4AuthInputConfig.systemClockOffset}
94+
* Resolved value for input config {@link AwsSdkSigV4AuthInputConfig.systemClockOffset}
9595
*/
9696
systemClockOffset: number;
9797
}
9898

9999
/**
100100
* @internal
101101
*/
102-
export const resolveAWSSDKSigV4Config = <T>(
103-
config: T & AWSSDKSigV4AuthInputConfig & AWSSDKSigV4PreviouslyResolved
104-
): T & AWSSDKSigV4AuthResolvedConfig => {
102+
export const resolveAwsSdkSigV4Config = <T>(
103+
config: T & AwsSdkSigV4AuthInputConfig & AwsSdkSigV4PreviouslyResolved
104+
): T & AwsSdkSigV4AuthResolvedConfig => {
105105
// Normalize credentials
106106
let normalizedCreds: AwsCredentialIdentityProvider | undefined;
107107
if (config.credentials) {
@@ -214,3 +214,23 @@ export const resolveAWSSDKSigV4Config = <T>(
214214
signer,
215215
};
216216
};
217+
218+
/**
219+
* @deprecated renamed to {@link AwsSdkSigV4AuthInputConfig}
220+
*/
221+
export interface AWSSDKSigV4AuthInputConfig extends AwsSdkSigV4AuthInputConfig {}
222+
223+
/**
224+
* @deprecated renamed to {@link AwsSdkSigV4PreviouslyResolved}
225+
*/
226+
export interface AWSSDKSigV4PreviouslyResolved extends AwsSdkSigV4PreviouslyResolved {}
227+
228+
/**
229+
* @deprecated renamed to {@link AwsSdkSigV4AuthResolvedConfig}
230+
*/
231+
export interface AWSSDKSigV4AuthResolvedConfig extends AwsSdkSigV4AuthResolvedConfig {}
232+
233+
/**
234+
* @deprecated renamed to {@link resolveAwsSdkSigV4Config}
235+
*/
236+
export const resolveAWSSDKSigV4Config = resolveAwsSdkSigV4Config;

packages/core/src/httpAuthSchemes/aws_sdk/throwAWSSDKSigningPropertyError.ts

Lines changed: 0 additions & 9 deletions
This file was deleted.
Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
import { HttpRequest } from "@smithy/protocol-http";
2+
import { ServiceException } from "@smithy/smithy-client";
3+
import {
4+
AuthScheme,
5+
AwsCredentialIdentity,
6+
HandlerExecutionContext,
7+
HttpRequest as IHttpRequest,
8+
HttpResponse,
9+
HttpSigner,
10+
RequestSigner,
11+
} from "@smithy/types";
12+
13+
import { getDateHeader, getSkewCorrectedDate, getUpdatedSystemClockOffset } from "../utils";
14+
15+
/**
16+
* @internal
17+
*/
18+
const throwSigningPropertyError = <T>(name: string, property: T | undefined): T | never => {
19+
if (!property) {
20+
throw new Error(`Property \`${name}\` is not resolved for AWS SDK SigV4Auth`);
21+
}
22+
return property;
23+
};
24+
25+
/**
26+
* @internal
27+
*/
28+
interface AwsSdkSigV4Config {
29+
systemClockOffset: number;
30+
signer: (authScheme?: AuthScheme) => Promise<RequestSigner>;
31+
}
32+
33+
/**
34+
* @internal
35+
*/
36+
interface AwsSdkSigV4AuthSigningProperties {
37+
config: AwsSdkSigV4Config;
38+
signer: RequestSigner;
39+
signingRegion?: string;
40+
signingName?: string;
41+
}
42+
43+
/**
44+
* @internal
45+
*/
46+
interface AwsSdkSigV4Exception extends ServiceException {
47+
ServerTime?: string;
48+
}
49+
50+
/**
51+
* @internal
52+
*/
53+
const validateSigningProperties = async (
54+
signingProperties: Record<string, unknown>
55+
): Promise<AwsSdkSigV4AuthSigningProperties> => {
56+
const context = throwSigningPropertyError(
57+
"context",
58+
signingProperties.context as HandlerExecutionContext | undefined
59+
);
60+
const config = throwSigningPropertyError("config", signingProperties.config as AwsSdkSigV4Config | undefined);
61+
const authScheme = context.endpointV2?.properties?.authSchemes?.[0];
62+
const signerFunction = throwSigningPropertyError(
63+
"signer",
64+
config.signer as ((authScheme?: AuthScheme) => Promise<RequestSigner>) | undefined
65+
);
66+
const signer = await signerFunction(authScheme);
67+
const signingRegion: string | undefined = signingProperties?.signingRegion as string | undefined;
68+
const signingName = signingProperties?.signingName as string | undefined;
69+
return {
70+
config,
71+
signer,
72+
signingRegion,
73+
signingName,
74+
};
75+
};
76+
77+
/**
78+
* @internal
79+
*/
80+
export class AwsSdkSigV4Signer implements HttpSigner {
81+
async sign(
82+
httpRequest: IHttpRequest,
83+
/**
84+
* `identity` is bound in {@link resolveAWSSDKSigV4Config}
85+
*/
86+
identity: AwsCredentialIdentity,
87+
signingProperties: Record<string, unknown>
88+
): Promise<IHttpRequest> {
89+
if (!HttpRequest.isInstance(httpRequest)) {
90+
throw new Error("The request is not an instance of `HttpRequest` and cannot be signed");
91+
}
92+
const { config, signer, signingRegion, signingName } = await validateSigningProperties(signingProperties);
93+
94+
const signedRequest = await signer.sign(httpRequest, {
95+
signingDate: getSkewCorrectedDate(config.systemClockOffset),
96+
signingRegion: signingRegion,
97+
signingService: signingName,
98+
});
99+
return signedRequest;
100+
}
101+
102+
errorHandler(signingProperties: Record<string, unknown>): (error: Error) => never {
103+
return (error: Error) => {
104+
const serverTime: string | undefined =
105+
(error as AwsSdkSigV4Exception).ServerTime ?? getDateHeader((error as AwsSdkSigV4Exception).$response);
106+
if (serverTime) {
107+
const config = throwSigningPropertyError(
108+
"config",
109+
signingProperties.config as AwsSdkSigV4Config | undefined
110+
);
111+
config.systemClockOffset = getUpdatedSystemClockOffset(serverTime, config.systemClockOffset);
112+
}
113+
throw error;
114+
};
115+
}
116+
117+
successHandler(httpResponse: HttpResponse | unknown, signingProperties: Record<string, unknown>): void {
118+
const dateHeader = getDateHeader(httpResponse);
119+
if (dateHeader) {
120+
const config = throwSigningPropertyError(
121+
"config",
122+
signingProperties.config as AwsSdkSigV4Config | undefined
123+
);
124+
config.systemClockOffset = getUpdatedSystemClockOffset(dateHeader, config.systemClockOffset);
125+
}
126+
}
127+
}
128+
129+
/**
130+
* @deprecated renamed to {@link AwsSdkSigV4Signer}
131+
*/
132+
export const AWSSDKSigV4Signer = AwsSdkSigV4Signer;
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
export * from "./AwsSdkSigV4Signer";
2+
export * from "./resolveAwsSdkSigV4Config";

0 commit comments

Comments
 (0)