-
Notifications
You must be signed in to change notification settings - Fork 4k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Niranjan Jayakar
committed
May 22, 2020
1 parent
05a9e53
commit 00ce0d5
Showing
8 changed files
with
193 additions
and
173 deletions.
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
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
58 changes: 58 additions & 0 deletions
58
packages/@aws-cdk/aws-cognito/lib/user-pool-idps/amazon.ts
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,58 @@ | ||
import { Construct, Resource } from '@aws-cdk/core'; | ||
import { CfnUserPoolIdentityProvider } from '../cognito.generated'; | ||
import { IUserPool } from '../user-pool'; | ||
import { IUserPoolIdentityProvider } from '../user-pool-idp'; | ||
|
||
/** | ||
* Properties to initialize UserPoolAmazonIdentityProvider | ||
*/ | ||
export interface UserPoolIdentityProviderAmazonProps { | ||
/** | ||
* The user pool to which this construct provides identities. | ||
*/ | ||
readonly userPool: IUserPool; | ||
|
||
/** | ||
* The client id recognized by 'Login with Amazon' APIs. | ||
* @see https://developer.amazon.com/docs/login-with-amazon/security-profile.html#client-identifier | ||
*/ | ||
readonly clientId: string; | ||
/** | ||
* The client secret to be accompanied with clientId for 'Login with Amazon' APIs to authenticate the client. | ||
* @see https://developer.amazon.com/docs/login-with-amazon/security-profile.html#client-identifier | ||
*/ | ||
readonly clientSecret: string; | ||
/** | ||
* The types of user profile data to obtain for the Amazon profile. | ||
* @see https://developer.amazon.com/docs/login-with-amazon/customer-profile.html | ||
* @default [ profile ] | ||
*/ | ||
readonly scopes?: string[]; | ||
} | ||
|
||
/** | ||
* Represents a identity provider that integrates with 'Login with Amazon' | ||
* @resource AWS::Cognito::UserPoolIdentityProvider | ||
*/ | ||
export class UserPoolIdentityProviderAmazon extends Resource implements IUserPoolIdentityProvider { | ||
public readonly providerName: string; | ||
|
||
constructor(scope: Construct, id: string, props: UserPoolIdentityProviderAmazonProps) { | ||
super(scope, id); | ||
|
||
const scopes = props.scopes ?? [ 'profile' ]; | ||
|
||
const resource = new CfnUserPoolIdentityProvider(this, 'Resource', { | ||
userPoolId: props.userPool.userPoolId, | ||
providerName: 'LoginWithAmazon', // must be 'LoginWithAmazon' when the type is 'LoginWithAmazon' | ||
providerType: 'LoginWithAmazon', | ||
providerDetails: { | ||
client_id: props.clientId, | ||
client_secret: props.clientSecret, | ||
authorize_scopes: scopes.join(' '), | ||
}, | ||
}); | ||
|
||
this.providerName = super.getResourceNameAttribute(resource.ref); | ||
} | ||
} |
63 changes: 63 additions & 0 deletions
63
packages/@aws-cdk/aws-cognito/lib/user-pool-idps/facebook.ts
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,63 @@ | ||
import { Construct, Resource } from '@aws-cdk/core'; | ||
import { CfnUserPoolIdentityProvider } from '../cognito.generated'; | ||
import { IUserPool } from '../user-pool'; | ||
import { IUserPoolIdentityProvider } from '../user-pool-idp'; | ||
|
||
/** | ||
* Properties to initialize UserPoolFacebookIdentityProvider | ||
*/ | ||
export interface UserPoolIdentityProviderFacebookProps { | ||
/** | ||
* The user pool to which this construct provides identities. | ||
*/ | ||
readonly userPool: IUserPool; | ||
|
||
/** | ||
* The client id recognized by Facebook APIs. | ||
*/ | ||
readonly clientId: string; | ||
/** | ||
* The client secret to be accompanied with clientUd for Facebook to authenticate the client. | ||
* @see https://developers.facebook.com/docs/facebook-login/security#appsecret | ||
*/ | ||
readonly clientSecret: string; | ||
/** | ||
* The list of facebook permissions to obtain for getting access to the Facebook profile. | ||
* @see https://developers.facebook.com/docs/facebook-login/permissions | ||
* @default [ public_profile ] | ||
*/ | ||
readonly scopes?: string[]; | ||
/** | ||
* The Facebook API version to use | ||
* @default - to the oldest version supported by Facebook | ||
*/ | ||
readonly apiVersion?: string; | ||
} | ||
|
||
/** | ||
* Represents a identity provider that integrates with 'Facebook Login' | ||
* @resource AWS::Cognito::UserPoolIdentityProvider | ||
*/ | ||
export class UserPoolIdentityProviderFacebook extends Resource implements IUserPoolIdentityProvider { | ||
public readonly providerName: string; | ||
|
||
constructor(scope: Construct, id: string, props: UserPoolIdentityProviderFacebookProps) { | ||
super(scope, id); | ||
|
||
const scopes = props.scopes ?? [ 'public_profile' ]; | ||
|
||
const resource = new CfnUserPoolIdentityProvider(this, 'Resource', { | ||
userPoolId: props.userPool.userPoolId, | ||
providerName: 'Facebook', // must be 'Facebook' when the type is 'Facebook' | ||
providerType: 'Facebook', | ||
providerDetails: { | ||
client_id: props.clientId, | ||
client_secret: props.clientSecret, | ||
authorize_scopes: scopes.join(','), | ||
api_version: props.apiVersion, | ||
}, | ||
}); | ||
|
||
this.providerName = super.getResourceNameAttribute(resource.ref); | ||
} | ||
} |
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,2 @@ | ||
export * from './amazon'; | ||
export * from './facebook'; |
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
54 changes: 54 additions & 0 deletions
54
packages/@aws-cdk/aws-cognito/test/user-pool-idps/amazon.test.ts
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,54 @@ | ||
import '@aws-cdk/assert/jest'; | ||
import { Stack } from '@aws-cdk/core'; | ||
import { UserPool, UserPoolIdentityProvider } from '../../lib'; | ||
|
||
describe('UserPoolIdentityProvider', () => { | ||
describe('amazon', () => { | ||
test('defaults', () => { | ||
// GIVEN | ||
const stack = new Stack(); | ||
const pool = new UserPool(stack, 'userpool'); | ||
|
||
// WHEN | ||
UserPoolIdentityProvider.amazon(stack, 'userpoolidp', { | ||
userPool: pool, | ||
clientId: 'amzn-client-id', | ||
clientSecret: 'amzn-client-secret', | ||
}); | ||
|
||
expect(stack).toHaveResource('AWS::Cognito::UserPoolIdentityProvider', { | ||
ProviderName: 'LoginWithAmazon', | ||
ProviderType: 'LoginWithAmazon', | ||
ProviderDetails: { | ||
client_id: 'amzn-client-id', | ||
client_secret: 'amzn-client-secret', | ||
authorize_scopes: 'profile', | ||
}, | ||
}); | ||
}); | ||
|
||
test('scopes', () => { | ||
// GIVEN | ||
const stack = new Stack(); | ||
const pool = new UserPool(stack, 'userpool'); | ||
|
||
// WHEN | ||
UserPoolIdentityProvider.amazon(stack, 'userpoolidp', { | ||
userPool: pool, | ||
clientId: 'amzn-client-id', | ||
clientSecret: 'amzn-client-secret', | ||
scopes: [ 'scope1', 'scope2' ], | ||
}); | ||
|
||
expect(stack).toHaveResource('AWS::Cognito::UserPoolIdentityProvider', { | ||
ProviderName: 'LoginWithAmazon', | ||
ProviderType: 'LoginWithAmazon', | ||
ProviderDetails: { | ||
client_id: 'amzn-client-id', | ||
client_secret: 'amzn-client-secret', | ||
authorize_scopes: 'scope1 scope2', | ||
}, | ||
}); | ||
}); | ||
}); | ||
}); |
Oops, something went wrong.