=> {
+ const sessionResponse = await authedFetch('/get-session');
+ if (sessionResponse.status !== 200) {
+ return null;
+ }
+
+ const { sessionID, guilds, user }: ServerSession = await sessionResponse.json();
+ return {
+ sessionID,
+ guilds,
+ user,
+ };
};
+
+const saveSessionData = (data: SavedSession) =>
+ sessionStorage.setItem('rp_session_data', JSON.stringify(data));
+const getSessionData = (): SavedSession | null =>
+ JSON.parse(sessionStorage.getItem('rp_session_data') || 'null');
diff --git a/packages/web/src/pages/machinery/new-session.spec.tsx b/packages/web/src/pages/machinery/new-session.spec.tsx
new file mode 100644
index 0000000..00d5c6c
--- /dev/null
+++ b/packages/web/src/pages/machinery/new-session.spec.tsx
@@ -0,0 +1,34 @@
+import { render, screen } from '@testing-library/react';
+import { useSessionContext } from '../../contexts/session/SessionContext';
+import NewSession from './new-session';
+
+const setupSessionMock = jest.fn();
+(useSessionContext as jest.Mock) = jest.fn(() => ({
+ setupSession: setupSessionMock,
+ isAuthenticated: true,
+}));
+
+const testSessionID = 'sessionid1234';
+
+it('sets up the session', () => {
+ render();
+
+ expect(useSessionContext).toBeCalled();
+ expect(setupSessionMock).toBeCalledWith('sessionid1234');
+});
+
+it('redirects to the correct location when rp_postauth_redirect is set', async () => {
+ localStorage.setItem('rp_postauth_redirect', '/hello_world');
+ render();
+
+ const bounceLink = screen.getByText("If you aren't redirected soon, click here.");
+ expect(bounceLink.getAttribute('href')).toBe('/hello_world');
+});
+
+it('redirects to the correct location by default', async () => {
+ localStorage.setItem('rp_postauth_redirect', '/servers');
+ render();
+
+ const bounceLink = screen.getByText("If you aren't redirected soon, click here.");
+ expect(bounceLink.getAttribute('href')).toBe('/servers');
+});
diff --git a/packages/web/src/pages/machinery/new-session.tsx b/packages/web/src/pages/machinery/new-session.tsx
index 0e47224..4cc009e 100644
--- a/packages/web/src/pages/machinery/new-session.tsx
+++ b/packages/web/src/pages/machinery/new-session.tsx
@@ -5,23 +5,23 @@ import { useSessionContext } from '../../contexts/session/SessionContext';
import { Title } from '../../utils/metaTitle';
const NewSession = (props: { sessionID: string }) => {
- const session = useSessionContext();
+ const { setupSession, isAuthenticated } = useSessionContext();
const [postauthUrl, setPostauthUrl] = React.useState('/servers');
React.useEffect(() => {
- const url = new URL(window.location.href);
- const id = props.sessionID || url.searchParams.get('session_id');
- if (id) {
- localStorage.setItem('rp_session_key', id);
- // session.setSession({ sessionID: id });
-
- const storedPostauthUrl = localStorage.getItem('rp_postauth_redirect');
- if (storedPostauthUrl) {
- setPostauthUrl(storedPostauthUrl);
- localStorage.removeItem('rp_postauth_redirect');
- }
+ const storedPostauthUrl = localStorage.getItem('rp_postauth_redirect');
+ if (storedPostauthUrl) {
+ setPostauthUrl(storedPostauthUrl);
+ localStorage.removeItem('rp_postauth_redirect');
}
- }, [setPostauthUrl, props.sessionID, session]);
+ }, [setPostauthUrl]);
+
+ React.useCallback(
+ (sessionID) => {
+ setupSession(sessionID);
+ },
+ [setupSession]
+ )(props.sessionID);
return (
<>
@@ -30,7 +30,7 @@ const NewSession = (props: { sessionID: string }) => {
If you aren't redirected soon, click here.
- {session.isAuthenticated && }
+ {isAuthenticated && }
>
);
};