Skip to content

Commit cf001a3

Browse files
committed
CCM-7465: use JWT sub as owner field in ddb
1 parent 88ccc21 commit cf001a3

File tree

9 files changed

+47
-50
lines changed

9 files changed

+47
-50
lines changed

lambdas/authorizer/src/index.ts

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ const $AccessToken = z.object({
2222
const generatePolicy = (
2323
Resource: string,
2424
Effect: 'Allow' | 'Deny',
25-
context?: { username: string; email: string }
25+
context?: { user: string }
2626
) => ({
2727
principalId: 'api-caller',
2828
policyDocument: {
@@ -110,18 +110,15 @@ export const handler: APIGatewayRequestAuthorizerHandler = async ({
110110
return generatePolicy(methodArn, 'Deny');
111111
}
112112

113-
const emailAddress = UserAttributes.find(
114-
({ Name }) => Name === 'email'
115-
)?.Value;
113+
const sub = UserAttributes.find(({ Name }) => Name === 'sub')?.Value;
116114

117-
if (!emailAddress) {
118-
logger.warn('Missing user email address');
115+
if (!sub) {
116+
logger.warn('Missing user subject');
119117
return generatePolicy(methodArn, 'Deny');
120118
}
121119

122120
return generatePolicy(methodArn, 'Allow', {
123-
username: Username,
124-
email: emailAddress,
121+
user: sub,
125122
});
126123
} catch (error) {
127124
logger.error(error);

lambdas/backend-api/src/__tests__/templates/api/create.test.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@ const createMock = jest.spyOn(TemplateClient.prototype, 'createTemplate');
1616
describe('Template API - Create', () => {
1717
beforeEach(jest.resetAllMocks);
1818

19-
test('should return 400 - Invalid request when, no email in requestContext', async () => {
19+
test('should return 400 - Invalid request when, no user in requestContext', async () => {
2020
const event = mock<APIGatewayProxyEvent>({
21-
requestContext: { authorizer: { email: undefined } },
21+
requestContext: { authorizer: { user: undefined } },
2222
body: JSON.stringify({ id: 1 }),
2323
});
2424

@@ -48,7 +48,7 @@ describe('Template API - Create', () => {
4848
});
4949

5050
const event = mock<APIGatewayProxyEvent>({
51-
requestContext: { authorizer: { email: 'email' } },
51+
requestContext: { authorizer: { user: 'sub' } },
5252
body: undefined,
5353
});
5454

@@ -65,7 +65,7 @@ describe('Template API - Create', () => {
6565
}),
6666
});
6767

68-
expect(TemplateClient).toHaveBeenCalledWith('email');
68+
expect(TemplateClient).toHaveBeenCalledWith('sub');
6969

7070
expect(createMock).toHaveBeenCalledWith({});
7171
});
@@ -79,7 +79,7 @@ describe('Template API - Create', () => {
7979
});
8080

8181
const event = mock<APIGatewayProxyEvent>({
82-
requestContext: { authorizer: { email: 'email' } },
82+
requestContext: { authorizer: { user: 'sub' } },
8383
body: JSON.stringify({ id: 1 }),
8484
});
8585

@@ -93,7 +93,7 @@ describe('Template API - Create', () => {
9393
}),
9494
});
9595

96-
expect(TemplateClient).toHaveBeenCalledWith('email');
96+
expect(TemplateClient).toHaveBeenCalledWith('sub');
9797

9898
expect(createMock).toHaveBeenCalledWith({ id: 1 });
9999
});
@@ -117,7 +117,7 @@ describe('Template API - Create', () => {
117117
});
118118

119119
const event = mock<APIGatewayProxyEvent>({
120-
requestContext: { authorizer: { email: 'email' } },
120+
requestContext: { authorizer: { user: 'sub' } },
121121
body: JSON.stringify(create),
122122
});
123123

@@ -128,7 +128,7 @@ describe('Template API - Create', () => {
128128
body: JSON.stringify({ statusCode: 201, template: response }),
129129
});
130130

131-
expect(TemplateClient).toHaveBeenCalledWith('email');
131+
expect(TemplateClient).toHaveBeenCalledWith('sub');
132132

133133
expect(createMock).toHaveBeenCalledWith(create);
134134
});

lambdas/backend-api/src/__tests__/templates/api/get.test.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@ const getTemplateMock = jest.spyOn(TemplateClient.prototype, 'getTemplate');
1515
describe('Template API - Get', () => {
1616
beforeEach(jest.resetAllMocks);
1717

18-
test('should return 400 - Invalid request when, no email in requestContext', async () => {
18+
test('should return 400 - Invalid request when, no user in requestContext', async () => {
1919
const event = mock<APIGatewayProxyEvent>({
20-
requestContext: { authorizer: { email: undefined } },
20+
requestContext: { authorizer: { user: undefined } },
2121
pathParameters: { templateId: '1' },
2222
});
2323

@@ -36,7 +36,7 @@ describe('Template API - Get', () => {
3636

3737
test('should return 400 - Invalid request when, no templateId', async () => {
3838
const event = mock<APIGatewayProxyEvent>({
39-
requestContext: { authorizer: { email: 'email' } },
39+
requestContext: { authorizer: { user: 'sub' } },
4040
pathParameters: { templateId: undefined },
4141
});
4242

@@ -62,7 +62,7 @@ describe('Template API - Get', () => {
6262
});
6363

6464
const event = mock<APIGatewayProxyEvent>({
65-
requestContext: { authorizer: { email: 'email' } },
65+
requestContext: { authorizer: { user: 'sub' } },
6666
pathParameters: { templateId: '1' },
6767
});
6868

@@ -76,7 +76,7 @@ describe('Template API - Get', () => {
7676
}),
7777
});
7878

79-
expect(TemplateClient).toHaveBeenCalledWith('email');
79+
expect(TemplateClient).toHaveBeenCalledWith('sub');
8080
expect(getTemplateMock).toHaveBeenCalledWith('1');
8181
});
8282

@@ -96,7 +96,7 @@ describe('Template API - Get', () => {
9696
});
9797

9898
const event = mock<APIGatewayProxyEvent>({
99-
requestContext: { authorizer: { email: 'email' } },
99+
requestContext: { authorizer: { user: 'sub' } },
100100
pathParameters: { templateId: '1' },
101101
});
102102

@@ -107,7 +107,7 @@ describe('Template API - Get', () => {
107107
body: JSON.stringify({ statusCode: 200, template }),
108108
});
109109

110-
expect(TemplateClient).toHaveBeenCalledWith('email');
110+
expect(TemplateClient).toHaveBeenCalledWith('sub');
111111
expect(getTemplateMock).toHaveBeenCalledWith('1');
112112
});
113113
});

lambdas/backend-api/src/__tests__/templates/api/list.test.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@ const listTemplatesMock = jest.spyOn(TemplateClient.prototype, 'listTemplates');
1515
describe('Template API - List', () => {
1616
beforeEach(jest.resetAllMocks);
1717

18-
test('should return 400 - Invalid request when, no email in requestContext', async () => {
18+
test('should return 400 - Invalid request when, no user in requestContext', async () => {
1919
const event = mock<APIGatewayProxyEvent>({
20-
requestContext: { authorizer: { email: undefined } },
20+
requestContext: { authorizer: { user: undefined } },
2121
});
2222

2323
const result = await handler(event, mock<Context>(), jest.fn());
@@ -42,7 +42,7 @@ describe('Template API - List', () => {
4242
});
4343

4444
const event = mock<APIGatewayProxyEvent>({
45-
requestContext: { authorizer: { email: 'email' } },
45+
requestContext: { authorizer: { user: 'sub' } },
4646
pathParameters: { templateId: '1' },
4747
});
4848

@@ -56,7 +56,7 @@ describe('Template API - List', () => {
5656
}),
5757
});
5858

59-
expect(TemplateClient).toHaveBeenCalledWith('email');
59+
expect(TemplateClient).toHaveBeenCalledWith('sub');
6060

6161
expect(listTemplatesMock).toHaveBeenCalled();
6262
});
@@ -77,7 +77,7 @@ describe('Template API - List', () => {
7777
});
7878

7979
const event = mock<APIGatewayProxyEvent>({
80-
requestContext: { authorizer: { email: 'email' } },
80+
requestContext: { authorizer: { user: 'sub' } },
8181
});
8282

8383
const result = await handler(event, mock<Context>(), jest.fn());
@@ -87,7 +87,7 @@ describe('Template API - List', () => {
8787
body: JSON.stringify({ statusCode: 200, templates: [template] }),
8888
});
8989

90-
expect(TemplateClient).toHaveBeenCalledWith('email');
90+
expect(TemplateClient).toHaveBeenCalledWith('sub');
9191

9292
expect(listTemplatesMock).toHaveBeenCalled();
9393
});

lambdas/backend-api/src/__tests__/templates/api/update.test.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ const updateTemplateMock = jest.spyOn(
1919
describe('Template API - Update', () => {
2020
beforeEach(jest.resetAllMocks);
2121

22-
test('should return 400 - Invalid request when, no email in requestContext', async () => {
22+
test('should return 400 - Invalid request when, no user in requestContext', async () => {
2323
const event = mock<APIGatewayProxyEvent>({
24-
requestContext: { authorizer: { email: undefined } },
24+
requestContext: { authorizer: { user: undefined } },
2525
body: JSON.stringify({ name: 'test' }),
2626
pathParameters: { templateId: '1-2-3' },
2727
});
@@ -52,7 +52,7 @@ describe('Template API - Update', () => {
5252
});
5353

5454
const event = mock<APIGatewayProxyEvent>({
55-
requestContext: { authorizer: { email: 'email' } },
55+
requestContext: { authorizer: { user: 'sub' } },
5656
pathParameters: { templateId: '1-2-3' },
5757
body: undefined,
5858
});
@@ -70,14 +70,14 @@ describe('Template API - Update', () => {
7070
}),
7171
});
7272

73-
expect(TemplateClient).toHaveBeenCalledWith('email');
73+
expect(TemplateClient).toHaveBeenCalledWith('sub');
7474

7575
expect(updateTemplateMock).toHaveBeenCalledWith('1-2-3', {});
7676
});
7777

7878
test('should return 400 - Invalid request when, no templateId', async () => {
7979
const event = mock<APIGatewayProxyEvent>({
80-
requestContext: { authorizer: { email: 'email' } },
80+
requestContext: { authorizer: { user: 'sub' } },
8181
body: JSON.stringify({ name: 'test' }),
8282
pathParameters: { templateId: undefined },
8383
});
@@ -104,7 +104,7 @@ describe('Template API - Update', () => {
104104
});
105105

106106
const event = mock<APIGatewayProxyEvent>({
107-
requestContext: { authorizer: { email: 'email' } },
107+
requestContext: { authorizer: { user: 'sub' } },
108108
body: JSON.stringify({ name: 'name' }),
109109
pathParameters: { templateId: '1-2-3' },
110110
});
@@ -119,7 +119,7 @@ describe('Template API - Update', () => {
119119
}),
120120
});
121121

122-
expect(TemplateClient).toHaveBeenCalledWith('email');
122+
expect(TemplateClient).toHaveBeenCalledWith('sub');
123123

124124
expect(updateTemplateMock).toHaveBeenCalledWith('1-2-3', { name: 'name' });
125125
});
@@ -144,7 +144,7 @@ describe('Template API - Update', () => {
144144
});
145145

146146
const event = mock<APIGatewayProxyEvent>({
147-
requestContext: { authorizer: { email: 'email' } },
147+
requestContext: { authorizer: { user: 'sub' } },
148148
body: JSON.stringify(update),
149149
pathParameters: { templateId: '1-2-3' },
150150
});
@@ -156,7 +156,7 @@ describe('Template API - Update', () => {
156156
body: JSON.stringify({ statusCode: 200, template: response }),
157157
});
158158

159-
expect(TemplateClient).toHaveBeenCalledWith('email');
159+
expect(TemplateClient).toHaveBeenCalledWith('sub');
160160

161161
expect(updateTemplateMock).toHaveBeenCalledWith('1-2-3', update);
162162
});

lambdas/backend-api/src/templates/api/create.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@ import { TemplateClient } from '@backend-api/templates/app/template-client';
33
import { apiFailure, apiSuccess } from './responses';
44

55
export const handler: APIGatewayProxyHandler = async (event) => {
6-
const email = event.requestContext.authorizer?.email;
6+
const user = event.requestContext.authorizer?.user;
77

88
const dto = JSON.parse(event.body || '{}');
99

10-
if (!email) {
10+
if (!user) {
1111
return apiFailure(400, 'Invalid request');
1212
}
1313

14-
const client = new TemplateClient(email);
14+
const client = new TemplateClient(user);
1515

1616
const { data, error } = await client.createTemplate(dto);
1717

lambdas/backend-api/src/templates/api/get.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@ import { TemplateClient } from '@backend-api/templates/app/template-client';
33
import { apiFailure, apiSuccess } from './responses';
44

55
export const handler: APIGatewayProxyHandler = async (event) => {
6-
const email = event.requestContext.authorizer?.email;
6+
const user = event.requestContext.authorizer?.user;
77

88
const templateId = event.pathParameters?.templateId;
99

10-
if (!email || !templateId) {
10+
if (!user || !templateId) {
1111
return apiFailure(400, 'Invalid request');
1212
}
1313

14-
const client = new TemplateClient(email);
14+
const client = new TemplateClient(user);
1515

1616
const { data, error } = await client.getTemplate(templateId);
1717

lambdas/backend-api/src/templates/api/list.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@ import { TemplateClient } from '@backend-api/templates/app/template-client';
33
import { apiFailure, apiSuccess } from './responses';
44

55
export const handler: APIGatewayProxyHandler = async (event) => {
6-
const email = event.requestContext.authorizer?.email;
6+
const user = event.requestContext.authorizer?.user;
77

8-
if (!email) {
8+
if (!user) {
99
return apiFailure(400, 'Invalid request');
1010
}
1111

12-
const client = new TemplateClient(email);
12+
const client = new TemplateClient(user);
1313

1414
const { data, error } = await client.listTemplates();
1515

lambdas/backend-api/src/templates/api/update.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,17 @@ import { TemplateClient } from '@backend-api/templates/app/template-client';
33
import { apiFailure, apiSuccess } from './responses';
44

55
export const handler: APIGatewayProxyHandler = async (event) => {
6-
const email = event.requestContext.authorizer?.email;
6+
const user = event.requestContext.authorizer?.user;
77

88
const templateId = event.pathParameters?.templateId;
99

1010
const dto = JSON.parse(event.body || '{}');
1111

12-
if (!email || !templateId) {
12+
if (!user || !templateId) {
1313
return apiFailure(400, 'Invalid request');
1414
}
1515

16-
const client = new TemplateClient(email);
16+
const client = new TemplateClient(user);
1717

1818
const { data, error } = await client.updateTemplate(templateId, dto);
1919

0 commit comments

Comments
 (0)