Skip to content

Commit c313019

Browse files
Add nonce prop to Overlay component (#23)
1 parent acf4e7b commit c313019

File tree

4 files changed

+32
-11
lines changed

4 files changed

+32
-11
lines changed

src/overlay/template.jsx

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,11 @@ export type OverlayProps = {|
2222
continueMessage? : string
2323
|},
2424
autoResize? : boolean,
25-
hideCloseButton? : boolean
25+
hideCloseButton? : boolean,
26+
nonce : string
2627
|};
2728

28-
export function Overlay({ context, close, focus, event, frame, prerenderFrame, content = {}, autoResize, hideCloseButton } : OverlayProps) : ElementNode {
29-
29+
export function Overlay({ context, close, focus, event, frame, prerenderFrame, content = {}, autoResize, hideCloseButton, nonce } : OverlayProps) : ElementNode {
3030
const uid = `paypal-overlay-${ uniqueID() }`;
3131

3232
function closeCheckout(e) {
@@ -113,8 +113,7 @@ export function Overlay({ context, close, focus, event, frame, prerenderFrame, c
113113

114114
return (
115115
<div id={ uid } onRender={ setupAnimations('container') } class="paypal-checkout-sandbox">
116-
<style>{ getSandboxStyle({ uid }) }</style>
117-
116+
<style nonce={ nonce }>{ getSandboxStyle({ uid }) }</style>
118117
<iframe title="PayPal Checkout Overlay" name={ `__paypal_checkout_sandbox_${ uid }__` } scrolling="no" class="paypal-checkout-sandbox-iframe">
119118
<html>
120119
<body>
@@ -142,7 +141,7 @@ export function Overlay({ context, close, focus, event, frame, prerenderFrame, c
142141
{ outlet }
143142
</div>
144143

145-
<style>{ getContainerStyle({ uid }) }</style>
144+
<style nonce={ nonce }>{ getContainerStyle({ uid }) }</style>
146145
</div>
147146
</body>
148147
</html>

src/three-domain-secure/component.jsx

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import { node, dom } from 'jsx-pragmatic/src';
66
import { create, type ZoidComponent } from 'zoid/src';
77
import { inlineMemoize, noop } from 'belter/src';
8-
import { getSDKMeta, getClientID } from '@paypal/sdk-client/src';
8+
import { getSDKMeta, getClientID, getCSPNonce } from '@paypal/sdk-client/src';
99
import { ZalgoPromise } from 'zalgo-promise/src';
1010

1111
import { Overlay } from '../overlay';
@@ -33,14 +33,15 @@ export type TDSProps = {|
3333
windowMessage? : string,
3434
continueMessage? : string
3535
|},
36-
userType : ?$Values<typeof USER_TYPE>
36+
userType : ?$Values<typeof USER_TYPE>,
37+
nonce : string
3738
|};
3839

3940
export function getThreeDomainSecureComponent() : ZoidComponent<TDSProps> {
4041
return inlineMemoize(getThreeDomainSecureComponent, () => {
4142
const component = create({
42-
tag: 'three-domain-secure',
43-
url: getThreeDomainSecureUrl,
43+
tag: 'three-domain-secure',
44+
url: getThreeDomainSecureUrl,
4445

4546
attributes: {
4647
iframe: {
@@ -58,6 +59,7 @@ export function getThreeDomainSecureComponent() : ZoidComponent<TDSProps> {
5859
frame={ frame }
5960
prerenderFrame={ prerenderFrame }
6061
content={ props.content }
62+
nonce={ props.nonce }
6163
/>
6264
).render(dom({ doc }));
6365
},
@@ -115,6 +117,11 @@ export function getThreeDomainSecureComponent() : ZoidComponent<TDSProps> {
115117
userType: {
116118
type: 'string',
117119
required: false
120+
},
121+
nonce: {
122+
type: 'string',
123+
default: getCSPNonce
124+
118125
}
119126
}
120127
});

test/integration/tests/spinner-page/happy.jsx

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,4 +32,17 @@ describe(`paypal spinner component happy path`, () => {
3232
throw new Error(`Expected spinner to have child`);
3333
}
3434
});
35+
36+
it('should render the spinner component with nonce', () => {
37+
const nonce = '12345';
38+
const spinnerPage = (
39+
<SpinnerPage nonce={ nonce } />
40+
);
41+
42+
const domNode = spinnerPage.render(dom());
43+
44+
if (domNode.ownerDocument !== document) {
45+
throw new Error(`Expected spinner component to be rendered to current dom`);
46+
}
47+
});
3548
});

test/integration/tests/three-domain-secure/happy.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,13 @@ describe(`paypal 3ds component happy path`, () => {
77

88
it('should render the 3ds component', () => {
99
return wrapPromise(({ expect, avoid }) => {
10+
const nonce = '12345';
1011
return window.paypal.ThreeDomainSecure({
1112
createOrder: () => 'XXXXXXXXXXXXXXXXX',
1213
onSuccess: expect('onSuccess'),
1314
onCancel: avoid('onCancel'),
14-
onError: avoid('onError')
15+
onError: avoid('onError'),
16+
nonce
1517

1618
}).render('body');
1719
});

0 commit comments

Comments
 (0)