Skip to content

Commit

Permalink
fix: OAuth login issues (#30041)
Browse files Browse the repository at this point in the history
  • Loading branch information
pierre-lehnen-rc committed Aug 10, 2023
1 parent 2cf2643 commit f5a886a
Show file tree
Hide file tree
Showing 6 changed files with 46 additions and 32 deletions.
5 changes: 5 additions & 0 deletions .changeset/fast-yaks-collect.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@rocket.chat/meteor': patch
---

fixed an issue where 2fa was not working after an OAuth redirect
5 changes: 5 additions & 0 deletions .changeset/quiet-phones-sell.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@rocket.chat/meteor': patch
---

fixed an issue where oauth login was not working with some providers
5 changes: 5 additions & 0 deletions .changeset/tiny-turkeys-burn.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@rocket.chat/meteor': patch
---

fixed an issue on oauth login that caused missing emails to be detected as changed data
4 changes: 2 additions & 2 deletions apps/meteor/app/custom-oauth/server/custom_oauth_server.js
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ export class CustomOAuth {
const request = await fetch(`${this.tokenPath}`, {
method: 'POST',
headers,
params,
body: params,
});

if (!request.ok) {
Expand Down Expand Up @@ -355,7 +355,7 @@ export class CustomOAuth {
user.services[serviceName] &&
user.services[serviceName].id === serviceData.id &&
user.name === serviceData.name &&
(this.keyField === 'email' || user.emails?.find(({ address }) => address === serviceData.email))
(this.keyField === 'email' || !serviceData.email || user.emails?.find(({ address }) => address === serviceData.email))
) {
return;
}
Expand Down
35 changes: 29 additions & 6 deletions apps/meteor/client/providers/ModalProvider.tsx
Original file line number Diff line number Diff line change
@@ -1,15 +1,32 @@
import { ModalContext } from '@rocket.chat/ui-contexts';
import type { ReactNode, ReactElement } from 'react';
import React, { useState, useMemo, memo } from 'react';
import type { ReactNode } from 'react';
import React, { useState, useMemo, memo, Suspense, createElement, useEffect } from 'react';

import { useImperativeModal } from '../views/hooks/useImperativeModal';
import { imperativeModal } from '../lib/imperativeModal';

const mapCurrentModal = (descriptor: typeof imperativeModal.current): ReactNode => {
if (descriptor === null) {
return null;
}

if ('component' in descriptor) {
return (
<Suspense fallback={<div />}>
{createElement(descriptor.component, {
key: Math.random(),
...descriptor.props,
})}
</Suspense>
);
}
};

type ModalProviderProps = {
children?: ReactNode;
};

const ModalProvider = ({ children }: ModalProviderProps): ReactElement => {
const [currentModal, setCurrentModal] = useState<ReactNode>(null);
const ModalProvider = ({ children }: ModalProviderProps) => {
const [currentModal, setCurrentModal] = useState<ReactNode>(() => mapCurrentModal(imperativeModal.current));

const contextValue = useMemo(
() => ({
Expand All @@ -21,7 +38,13 @@ const ModalProvider = ({ children }: ModalProviderProps): ReactElement => {
[currentModal],
);

useImperativeModal(setCurrentModal);
useEffect(
() =>
imperativeModal.on('update', (descriptor) => {
setCurrentModal(mapCurrentModal(descriptor));
}),
[],
);

return <ModalContext.Provider value={contextValue} children={children} />;
};
Expand Down
24 changes: 0 additions & 24 deletions apps/meteor/client/views/hooks/useImperativeModal.tsx

This file was deleted.

0 comments on commit f5a886a

Please sign in to comment.