Skip to content

Commit b66a0ce

Browse files
sam-gcavolkovi
authored andcommitted
Handle null auth events from the iframe (#3818)
* Add handling of null auth events * Formatting
1 parent 6c44e52 commit b66a0ce

File tree

2 files changed

+26
-2
lines changed

2 files changed

+26
-2
lines changed

packages-exp/auth-exp/src/platform_browser/popup_redirect.test.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,26 @@ describe('src/platform_browser/popup_redirect', () => {
247247
});
248248
});
249249

250+
it('errors with invalid event if null event', async () => {
251+
const manager = (await resolver._initialize(auth)) as AuthEventManager;
252+
sinon.stub(manager, 'onEvent').returns(true);
253+
254+
expect(() =>
255+
onIframeMessage({
256+
type: 'authEvent',
257+
authEvent: (null as unknown) as AuthEvent
258+
})
259+
).to.throw(FirebaseError, 'auth/invalid-auth-event');
260+
});
261+
262+
it('errors with invalid event if everything is null', async () => {
263+
const manager = (await resolver._initialize(auth)) as AuthEventManager;
264+
sinon.stub(manager, 'onEvent').returns(true);
265+
expect(() =>
266+
onIframeMessage((null as unknown) as GapiAuthEvent)
267+
).to.throw(FirebaseError, 'auth/invalid-auth-event');
268+
});
269+
250270
it('returns error to the iframe if the event was not handled', async () => {
251271
const manager = (await resolver._initialize(auth)) as AuthEventManager;
252272
sinon.stub(manager, 'onEvent').returns(false);

packages-exp/auth-exp/src/platform_browser/popup_redirect.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,9 +111,13 @@ class BrowserPopupRedirectResolver implements PopupRedirectResolver {
111111
const manager = new AuthEventManager(auth.name);
112112
iframe.register<GapiAuthEvent>(
113113
'authEvent',
114-
({ authEvent }: GapiAuthEvent) => {
114+
(iframeEvent: GapiAuthEvent | null) => {
115+
assert(iframeEvent?.authEvent, AuthErrorCode.INVALID_AUTH_EVENT, {
116+
appName: auth.name
117+
});
115118
// TODO: Consider splitting redirect and popup events earlier on
116-
const handled = manager.onEvent(authEvent);
119+
120+
const handled = manager.onEvent(iframeEvent.authEvent);
117121
return { status: handled ? GapiOutcome.ACK : GapiOutcome.ERROR };
118122
},
119123
gapi.iframes.CROSS_ORIGIN_IFRAMES_FILTER

0 commit comments

Comments
 (0)