-
Notifications
You must be signed in to change notification settings - Fork 485
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add AWS AppSyncEvent #1939
Open
PankajRawat333
wants to merge
7
commits into
aws:master
Choose a base branch
from
PankajRawat333:add-aws-appsync-event
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
+577
−17
Open
Add AWS AppSyncEvent #1939
Changes from all commits
Commits
Show all changes
7 commits
Select commit
Hold shift + click to select a range
64d401c
Initial changes for AppSyncEvent
4335914
Added AppSyncEvent class, and respective test cases
ankushjain358 f287562
Updated README
ankushjain358 1bb2045
Update readme
033f1e8
Update Arguments type in event
204e17a
Update schema
87f899a
fix review comment
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
20 changes: 20 additions & 0 deletions
20
Libraries/src/Amazon.Lambda.AppSyncEvents/Amazon.Lambda.AppSyncEvents.csproj
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
<Project Sdk="Microsoft.NET.Sdk"> | ||
|
||
<Import Project="..\..\..\buildtools\common.props" /> | ||
|
||
<PropertyGroup> | ||
<Description>Amazon Lambda .NET Core support - AWS AppSync package.</Description> | ||
<TargetFrameworks>netstandard2.0;netcoreapp3.1;net8.0</TargetFrameworks> | ||
<AssemblyTitle>Amazon.Lambda.AppSyncEvents</AssemblyTitle> | ||
<Version>1.0.0</Version> | ||
<AssemblyName>Amazon.Lambda.AppSyncEvents</AssemblyName> | ||
<PackageId>Amazon.Lambda.AppSyncEvents</PackageId> | ||
<PackageTags>AWS;Amazon;Lambda</PackageTags> | ||
</PropertyGroup> | ||
|
||
<PropertyGroup Condition="'$(TargetFramework)' == 'net8.0'"> | ||
<WarningsAsErrors>IL2026,IL2067,IL2075</WarningsAsErrors> | ||
<IsTrimmable>true</IsTrimmable> | ||
<EnableTrimAnalyzer>true</EnableTrimAnalyzer> | ||
</PropertyGroup> | ||
</Project> |
46 changes: 46 additions & 0 deletions
46
Libraries/src/Amazon.Lambda.AppSyncEvents/AppSyncCognitoIdentity.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
using System.Collections.Generic; | ||
|
||
namespace Amazon.Lambda.AppSyncEvents | ||
{ | ||
/// <summary> | ||
/// Represents Amazon Cognito User Pools authorization identity for AppSync | ||
/// </summary> | ||
public class AppSyncCognitoIdentity | ||
{ | ||
/// <summary> | ||
/// The source IP address of the caller received by AWS AppSync | ||
/// </summary> | ||
public List<string> SourceIp { get; set; } | ||
|
||
/// <summary> | ||
/// The username of the authenticated user | ||
/// </summary> | ||
public string Username { get; set; } | ||
|
||
/// <summary> | ||
/// The UUID of the authenticated user | ||
/// </summary> | ||
public string Sub { get; set; } | ||
|
||
/// <summary> | ||
/// The claims that the user has | ||
/// </summary> | ||
public Dictionary<string, object> Claims { get; set; } | ||
|
||
/// <summary> | ||
/// The default authorization strategy for this caller (ALLOW or DENY) | ||
/// </summary> | ||
public string DefaultAuthStrategy { get; set; } | ||
|
||
/// <summary> | ||
/// List of OIDC groups | ||
/// </summary> | ||
public List<string> Groups { get; set; } | ||
|
||
/// <summary> | ||
/// The token issuer | ||
/// </summary> | ||
public string Issuer { get; set; } | ||
} | ||
|
||
} |
50 changes: 50 additions & 0 deletions
50
Libraries/src/Amazon.Lambda.AppSyncEvents/AppSyncIamIdentity.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
using System.Collections.Generic; | ||
|
||
namespace Amazon.Lambda.AppSyncEvents | ||
{ | ||
/// <summary> | ||
/// Represents AWS IAM authorization identity for AppSync | ||
/// </summary> | ||
public class AppSyncIamIdentity | ||
{ | ||
/// <summary> | ||
/// The source IP address of the caller received by AWS AppSync | ||
/// </summary> | ||
public List<string> SourceIp { get; set; } | ||
|
||
/// <summary> | ||
/// The username of the authenticated user (IAM user principal) | ||
/// </summary> | ||
public string Username { get; set; } | ||
|
||
/// <summary> | ||
/// The AWS account ID of the caller | ||
/// </summary> | ||
public string AccountId { get; set; } | ||
|
||
/// <summary> | ||
/// The Amazon Cognito identity pool ID associated with the caller | ||
/// </summary> | ||
public string CognitoIdentityPoolId { get; set; } | ||
|
||
/// <summary> | ||
/// The Amazon Cognito identity ID of the caller | ||
/// </summary> | ||
public string CognitoIdentityId { get; set; } | ||
|
||
/// <summary> | ||
/// The ARN of the IAM user | ||
/// </summary> | ||
public string UserArn { get; set; } | ||
|
||
/// <summary> | ||
/// Either authenticated or unauthenticated based on the identity type | ||
/// </summary> | ||
public string CognitoIdentityAuthType { get; set; } | ||
|
||
/// <summary> | ||
/// A comma separated list of external identity provider information used in obtaining the credentials used to sign the request | ||
/// </summary> | ||
public string CognitoIdentityAuthProvider { get; set; } | ||
} | ||
} |
103 changes: 103 additions & 0 deletions
103
Libraries/src/Amazon.Lambda.AppSyncEvents/AppSyncResolverEvent.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,103 @@ | ||
using System.Collections.Generic; | ||
|
||
namespace Amazon.Lambda.AppSyncEvents | ||
{ | ||
/// <summary> | ||
/// Represents the event payload received from AWS AppSync. | ||
/// </summary> | ||
public class AppSyncResolverEvent<TArguments> | ||
{ | ||
/// <summary> | ||
/// Gets or sets the input arguments for the GraphQL operation. | ||
/// </summary> | ||
public TArguments Arguments { get; set; } | ||
|
||
/// <summary> | ||
/// An object that contains information about the caller. | ||
/// Returns null for API_KEY authorization. | ||
/// Returns AppSyncIamIdentity for AWS_IAM authorization. | ||
/// Returns AppSyncCognitoIdentity for AMAZON_COGNITO_USER_POOLS authorization. | ||
/// For AWS_LAMBDA authorization, returns the object returned by your Lambda authorizer function. | ||
/// </summary> | ||
/// <remarks> | ||
/// The Identity object type depends on the authorization mode: | ||
/// - For API_KEY: null | ||
/// - For AWS_IAM: <see cref="AppSyncIamIdentity"/> | ||
/// - For AMAZON_COGNITO_USER_POOLS: <see cref="AppSyncCognitoIdentity"/> | ||
/// - For AWS_LAMBDA: Dynamic object returned by Lambda authorizer | ||
/// </remarks> | ||
public object Identity { get; set; } | ||
|
||
/// <summary> | ||
/// Gets or sets information about the data source that originated the event. | ||
/// </summary> | ||
public object Source { get; set; } | ||
|
||
/// <summary> | ||
/// Gets or sets information about the HTTP request that triggered the event. | ||
/// </summary> | ||
public RequestContext Request { get; set; } | ||
|
||
/// <summary> | ||
/// Gets or sets information about the previous state of the data before the operation was executed. | ||
/// </summary> | ||
public object Prev { get; set; } | ||
|
||
/// <summary> | ||
/// Gets or sets information about the GraphQL operation being executed. | ||
/// </summary> | ||
public Information Info { get; set; } | ||
|
||
/// <summary> | ||
/// Gets or sets additional information that can be passed between Lambda functions during an AppSync pipeline. | ||
/// </summary> | ||
public Dictionary<string, object> Stash { get; set; } | ||
|
||
/// <summary> | ||
/// Represents information about the HTTP request that triggered the event. | ||
/// </summary> | ||
public class RequestContext | ||
{ | ||
/// <summary> | ||
/// Gets or sets the headers of the HTTP request. | ||
/// </summary> | ||
public Dictionary<string, string> Headers { get; set; } | ||
|
||
/// <summary> | ||
/// Gets or sets the domain name associated with the request. | ||
/// </summary> | ||
public string DomainName { get; set; } | ||
} | ||
|
||
/// <summary> | ||
/// Represents information about the GraphQL operation being executed. | ||
/// </summary> | ||
public class Information | ||
{ | ||
/// <summary> | ||
/// Gets or sets the name of the GraphQL field being executed. | ||
/// </summary> | ||
public string FieldName { get; set; } | ||
|
||
/// <summary> | ||
/// Gets or sets a list of fields being selected in the GraphQL operation. | ||
/// </summary> | ||
public List<string> SelectionSetList { get; set; } | ||
|
||
/// <summary> | ||
/// Gets or sets the GraphQL selection set for the operation. | ||
/// </summary> | ||
public string SelectionSetGraphQL { get; set; } | ||
|
||
/// <summary> | ||
/// Gets or sets the variables passed to the GraphQL operation. | ||
/// </summary> | ||
public Dictionary<string, object> Variables { get; set; } | ||
|
||
/// <summary> | ||
/// Gets or sets the parent type name for the GraphQL operation. | ||
/// </summary> | ||
public string ParentTypeName { get; set; } | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
# Amazon.Lambda.AppSyncEvents | ||
|
||
This package contains classes that can be used as input types for Lambda functions that process AppSync events. | ||
|
||
# Sample Function | ||
|
||
The following is a sample class and Lambda function that receives AppSync event record data as an `appSyncResolverEvent` and logs some of the incoming event data. (Note that by default anything written to Console will be logged as CloudWatch Logs events.) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Please change |
||
|
||
```csharp | ||
public void Handler(AppSyncResolverEvent<Dictionary<string, object>> appSyncResolverEvent, ILambdaContext context) | ||
{ | ||
foreach (var item in appSyncResolverEvent.Arguments) | ||
{ | ||
Console.WriteLine($"AppSync request key - {item.Key}."); | ||
} | ||
|
||
if (appSyncResolverEvent.Identity != null) | ||
{ | ||
// Create an instance of the serializer | ||
var lambdaSerializer = new DefaultLambdaJsonSerializer(); | ||
|
||
using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(appSyncResolverEvent.Identity.ToString()!))) | ||
{ | ||
// When using AMAZON_COGNITO_USER_POOLS authorization | ||
var cognitoIdentity = lambdaSerializer.Deserialize<AppSyncCognitoIdentity>(stream); | ||
|
||
// When using AWS_IAM authorization | ||
var iamIdentity = lambdaSerializer.Deserialize<AppSyncIamIdentity>(stream); | ||
} | ||
} | ||
} | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why we didn't implement
AppSyncOidcIdentity
andAppSyncLambdaIdentity
? Please refer below links:There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@PankajRawat333 Please advise on this.