Skip to content

Commit aea44b6

Browse files
palpatimtejas2008
authored andcommitted
Revert "fix: enable IAM auth for custom types (#2961)" (#2964)
This reverts commit 8fc24f3.
1 parent 99aecd9 commit aea44b6

File tree

12 files changed

+55
-257
lines changed

12 files changed

+55
-257
lines changed

packages/amplify-graphql-api-construct/src/__tests__/__functional__/disable-gen1-patterns.test.ts

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -161,22 +161,6 @@ describe('Deprecate Gen 1 patterns', () => {
161161
);
162162
});
163163

164-
test('does not allow implicit fields on @hasMany', () => {
165-
const stack = verifySchema(/* GraphQL */ `
166-
type Post @model {
167-
author: Author @belongsTo
168-
}
169-
170-
type Author @model {
171-
posts: [Post] @hasMany
172-
}
173-
`);
174-
Annotations.fromStack(stack).hasWarning(
175-
'/Default/TestApi/GraphQLAPI',
176-
'fields argument on @hasMany is deprecated. Modify Author.posts to use references instead. This functionality will be removed in the next major release.',
177-
);
178-
});
179-
180164
test('does not print warning when fields is not used on @hasMany', () => {
181165
const stack = verifySchema(/* GraphQL */ `
182166
type Post @model {

packages/amplify-graphql-auth-transformer/API.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,8 @@ export class AuthTransformer extends TransformerAuthBase implements TransformerA
110110
// (undocumented)
111111
addAutoGeneratedRelationalFields: (ctx: TransformerContextProvider, def: ObjectTypeDefinitionNode, allowedFields: Set<string>, fields: readonly string[]) => void;
112112
// (undocumented)
113+
addCustomOperationFieldsToAuthNonModelConfig: (ctx: TransformerTransformSchemaStepContextProvider) => void;
114+
// (undocumented)
113115
addFieldResolverForDynamicAuth: (ctx: TransformerContextProvider, def: ObjectTypeDefinitionNode, typeName: string, fieldName: string) => void;
114116
// (undocumented)
115117
addFieldsToObject: (ctx: TransformerTransformSchemaStepContextProvider, modelName: string, ownerFields: Array<string>) => void;

packages/amplify-graphql-auth-transformer/src/__tests__/iam-custom-operations.test.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -367,7 +367,8 @@ describe('Custom operations have @aws_iam directives when enableIamAuthorization
367367
expect(out.schema).not.toMatch(/onUpdateFooCustom: String.*@aws_iam/);
368368
});
369369

370-
test('Adds @aws_iam to non-model custom types when there is no model', () => {
370+
// TODO: Enable this test once we fix https://github.com/aws-amplify/amplify-category-api/issues/2929
371+
test.skip('Adds @aws_iam to non-model custom types when there is no model', () => {
371372
const strategy = makeStrategy(strategyType);
372373
const schema = /* GraphQL */ `
373374
type Foo {
@@ -402,7 +403,8 @@ describe('Custom operations have @aws_iam directives when enableIamAuthorization
402403
expect(out.schema).toMatch(/type Foo.*@aws_iam/);
403404
});
404405

405-
test('Adds @aws_iam to non-model custom types when there is a model', () => {
406+
// TODO: Enable this test once we fix https://github.com/aws-amplify/amplify-category-api/issues/2929
407+
test.skip('Adds @aws_iam to non-model custom types when there is a model', () => {
406408
const strategy = makeStrategy(strategyType);
407409
const schema = /* GraphQL */ `
408410
type Todo @model {

packages/amplify-graphql-auth-transformer/src/graphql-auth-transformer.ts

Lines changed: 15 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,10 @@ import {
66
getModelDataSourceNameForTypeName,
77
getSortKeyFieldNames,
88
getSubscriptionFilterInputName,
9-
hasDirectiveWithName,
109
InvalidDirectiveError,
1110
isBuiltInGraphqlNode,
1211
isDynamoDbModel,
1312
isModelType,
14-
isObjectTypeDefinitionNode,
1513
isSqlModel,
1614
MappingTemplate,
1715
TransformerAuthBase,
@@ -22,22 +20,22 @@ import {
2220
DataSourceProvider,
2321
MutationFieldType,
2422
QueryFieldType,
25-
TransformerAuthProvider,
26-
TransformerBeforeStepContextProvider,
23+
TransformerTransformSchemaStepContextProvider,
2724
TransformerContextProvider,
2825
TransformerResolverProvider,
2926
TransformerSchemaVisitStepContextProvider,
30-
TransformerTransformSchemaStepContextProvider,
27+
TransformerAuthProvider,
28+
TransformerBeforeStepContextProvider,
3129
} from '@aws-amplify/graphql-transformer-interfaces';
3230
import {
3331
DirectiveNode,
3432
FieldDefinitionNode,
33+
ObjectTypeDefinitionNode,
3534
InterfaceTypeDefinitionNode,
3635
Kind,
36+
TypeDefinitionNode,
3737
ListValueNode,
38-
ObjectTypeDefinitionNode,
3938
StringValueNode,
40-
TypeDefinitionNode,
4139
} from 'graphql';
4240
import { merge } from 'lodash';
4341
import {
@@ -105,7 +103,6 @@ import {
105103
isFieldRoleHavingAccessToBothSide,
106104
isDynamicAuthOrCustomAuth,
107105
isIdenticalAuthRole,
108-
addDirectivesToObject,
109106
} from './utils';
110107
import {
111108
defaultIdentityClaimWarning,
@@ -348,46 +345,30 @@ export class AuthTransformer extends TransformerAuthBase implements TransformerA
348345
};
349346

350347
/**
351-
* If needed, adds aws_iam auth directive to non-model types
348+
* Adds custom Queries, Mutations, and Subscriptions to the authNonModelConfig map to ensure they are included when adding implicit
349+
* aws_iam auth directives.
352350
*/
353-
private addIamAuthDirectiveToNonModelTypes = (ctx: TransformerTransformSchemaStepContextProvider): void => {
351+
addCustomOperationFieldsToAuthNonModelConfig = (ctx: TransformerTransformSchemaStepContextProvider): void => {
354352
if (!ctx.transformParameters.sandboxModeEnabled && !ctx.synthParameters.enableIamAccess) {
355353
return;
356354
}
357355

358-
const nonModelObjects = ctx.inputDocument.definitions
359-
.filter(isObjectTypeDefinitionNode)
360-
.filter((objectDef) => !isBuiltInGraphqlNode(objectDef))
361-
.filter((objectDef) => !hasDirectiveWithName(objectDef, 'model'))
362-
.filter((objectDef) => !hasDirectiveWithName(objectDef, 'aws_iam'));
363-
364-
nonModelObjects.forEach((object) => {
365-
const typeName = object.name.value;
366-
addDirectivesToObject(ctx, typeName, [makeDirective('aws_iam', [])]);
367-
});
368-
};
369-
370-
/**
371-
* If needed, adds aws_iam auth directive to custom operations (Queries, Mutations, Subscriptions)
372-
*/
373-
private addIamAuthDirectiveToCustomOperationFields = (ctx: TransformerTransformSchemaStepContextProvider): void => {
374-
if (!ctx.transformParameters.sandboxModeEnabled && !ctx.synthParameters.enableIamAccess) {
375-
return;
376-
}
356+
const hasAwsIamDirective = (field: FieldDefinitionNode): boolean => {
357+
return field.directives?.some((dir) => dir.name.value === 'aws_iam');
358+
};
377359

378-
const builtInObjects = ctx.inputDocument.definitions.filter(isBuiltInGraphqlNode);
379-
builtInObjects.forEach((object) => {
360+
const allObjects = ctx.inputDocument.definitions.filter(isBuiltInGraphqlNode);
361+
allObjects.forEach((object) => {
380362
const typeName = object.name.value;
381-
const fieldsWithoutIamDirective = object.fields.filter((field) => !hasDirectiveWithName(field, 'aws_iam'));
363+
const fieldsWithoutIamDirective = object.fields.filter((field) => !hasAwsIamDirective(field));
382364
fieldsWithoutIamDirective.forEach((field) => {
383365
addDirectivesToField(ctx, typeName, field.name.value, [makeDirective('aws_iam', [])]);
384366
});
385367
});
386368
};
387369

388370
transformSchema = (context: TransformerTransformSchemaStepContextProvider): void => {
389-
this.addIamAuthDirectiveToNonModelTypes(context);
390-
this.addIamAuthDirectiveToCustomOperationFields(context);
371+
this.addCustomOperationFieldsToAuthNonModelConfig(context);
391372

392373
const searchableAggregateServiceDirectives = new Set<AuthProvider>();
393374

packages/amplify-graphql-auth-transformer/src/utils/schema.ts

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ import { ObjectTypeDefinitionNode, FieldDefinitionNode, DirectiveNode, NamedType
1919
import {
2020
blankObjectExtension,
2121
extendFieldWithDirectives,
22-
extendObjectWithDirectives,
2322
extensionWithDirectives,
2423
graphqlName,
2524
isListType,
@@ -214,7 +213,7 @@ export const addDirectivesToField = (
214213
typeName: string,
215214
fieldName: string,
216215
directives: Array<DirectiveNode>,
217-
): void => {
216+
) => {
218217
const type = ctx.output.getType(typeName) as ObjectTypeDefinitionNode;
219218
if (type) {
220219
const field = type.fields?.find((f) => f.name.value === fieldName);
@@ -231,17 +230,6 @@ export const addDirectivesToField = (
231230
}
232231
};
233232

234-
export const addDirectivesToObject = (
235-
ctx: TransformerTransformSchemaStepContextProvider,
236-
typeName: string,
237-
directives: Array<DirectiveNode>,
238-
): void => {
239-
const type = ctx.output.getType(typeName) as ObjectTypeDefinitionNode;
240-
if (type) {
241-
ctx.output.putType(extendObjectWithDirectives(type, directives));
242-
}
243-
};
244-
245233
/**
246234
* addSubscriptionArguments
247235
*/

packages/amplify-graphql-transformer-core/API.md

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -362,9 +362,6 @@ export interface GraphQLTransformOptions {
362362
readonly userDefinedSlots?: Record<string, UserDefinedSlot[]>;
363363
}
364364

365-
// @public (undocumented)
366-
export const hasDirectiveWithName: (node: FieldDefinitionNode | InterfaceTypeDefinitionNode | ObjectTypeDefinitionNode, name: string) => boolean;
367-
368365
// @public (undocumented)
369366
export type ImportAppSyncAPIInputs = {
370367
apiName: string;

packages/amplify-graphql-transformer-core/src/index.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,6 @@ export {
5656
getSubscriptionFilterInputName,
5757
getTable,
5858
getType,
59-
hasDirectiveWithName,
6059
isAmplifyDynamoDbModelDataSourceStrategy,
6160
isBuiltInGraphqlNode,
6261
isDefaultDynamoDbModelDataSourceStrategy,

packages/amplify-graphql-transformer-core/src/utils/graphql-utils.ts

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -48,13 +48,3 @@ export const getField = (obj: ObjectTypeDefinitionNode, fieldName: string): Fiel
4848

4949
export const getType = (schema: DocumentNode, typeName: string): ObjectTypeDefinitionNode | undefined =>
5050
schema.definitions.find((def) => isObjectTypeDefinitionNode(def) && def.name.value === typeName) as ObjectTypeDefinitionNode | undefined;
51-
52-
/**
53-
* Returns true if the node has a directive named `name`
54-
*/
55-
export const hasDirectiveWithName = (
56-
node: FieldDefinitionNode | InterfaceTypeDefinitionNode | ObjectTypeDefinitionNode,
57-
name: string,
58-
): boolean => {
59-
return node.directives?.some((d) => d.name.value === name) ?? false;
60-
};

packages/graphql-transformer-common/API.md

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,6 @@ export const directiveExists: (definition: ObjectTypeDefinitionNode, name: strin
6363
// @public (undocumented)
6464
export function extendFieldWithDirectives(field: FieldDefinitionNode, directives: DirectiveNode[]): FieldDefinitionNode;
6565

66-
// @public (undocumented)
67-
export function extendObjectWithDirectives(object: ObjectTypeDefinitionNode, directives: DirectiveNode[]): ObjectTypeDefinitionNode;
68-
6966
// @public (undocumented)
7067
export function extensionWithDirectives(object: ObjectTypeExtensionNode, directives: DirectiveNode[]): ObjectTypeExtensionNode;
7168

packages/graphql-transformer-common/src/__tests__/definition.test.ts

Lines changed: 0 additions & 150 deletions
This file was deleted.

0 commit comments

Comments
 (0)