From cb7d2138cd47c6553d1a8e6a5583b6c36363b893 Mon Sep 17 00:00:00 2001 From: Tatiana Lopaeva Date: Mon, 4 Mar 2024 12:14:19 +0300 Subject: [PATCH] Web: Fixed name encoding. --- .../Confirm/sub-components/createUser.js | 26 +++++++++++++------ .../login/src/client/components/Login.tsx | 17 +++++++++--- 2 files changed, 32 insertions(+), 11 deletions(-) diff --git a/packages/client/src/pages/Confirm/sub-components/createUser.js b/packages/client/src/pages/Confirm/sub-components/createUser.js index 4fcd187436..874203fe8f 100644 --- a/packages/client/src/pages/Confirm/sub-components/createUser.js +++ b/packages/client/src/pages/Confirm/sub-components/createUser.js @@ -158,14 +158,22 @@ const CreateUserForm = (props) => { const headerKey = linkData.confirmHeader; try { + const toBinaryStr = (str) => { + const encoder = new TextEncoder(); + const charCodes = encoder.encode(str); + return String.fromCharCode(...charCodes); + }; + const loginData = window.btoa( - JSON.stringify({ - type: "invitation", - email, - roomName, - firstName: user.firstName, - lastName: user.lastName, - }), + toBinaryStr( + JSON.stringify({ + type: "invitation", + email, + roomName, + firstName: user.firstName, + lastName: user.lastName, + }), + ), ); await getUserByEmail(email, headerKey); @@ -176,6 +184,8 @@ const CreateUserForm = (props) => { `?loginData=${loginData}`, ); } catch (err) { + console.error(err); + const status = err?.response?.status; const isNotExistUser = status === 404; @@ -463,7 +473,7 @@ const CreateUserForm = (props) => { - +
{!registrationForm && ( diff --git a/packages/login/src/client/components/Login.tsx b/packages/login/src/client/components/Login.tsx index db86feb764..5977c664c0 100644 --- a/packages/login/src/client/components/Login.tsx +++ b/packages/login/src/client/components/Login.tsx @@ -58,13 +58,24 @@ const Login: React.FC = ({ useEffect(() => { if (search) { - const isInviteInfo = search.indexOf("loginData="); + const firstIndex = search.indexOf("loginData="); - if (isInviteInfo === -1) return; + if (firstIndex === -1) return; + const fromBinaryStr = (encodeString: string) => { + const decodeStr = atob(encodeString); + + const decoder = new TextDecoder(); + const charCodeArray = Uint8Array.from( + { length: decodeStr.length }, + (element, index) => decodeStr.charCodeAt(index) + ); + + return decoder.decode(charCodeArray); + }; const encodeString = search.slice(search.indexOf("=") + 1); - const decodeString = atob(encodeString); + const decodeString = fromBinaryStr(encodeString); const queryParams = JSON.parse(decodeString); setInvitationLinkData(queryParams);