Skip to content

Commit

Permalink
Merge pull request #32 from yougotwill/fix/ses-2668/integration_test_…
Browse files Browse the repository at this point in the history
…fixes

fix: catch truncation errors when setting the display name
  • Loading branch information
Bilb authored Jan 15, 2025
2 parents cffbd48 + fd24a47 commit 252f982
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 9 deletions.
12 changes: 10 additions & 2 deletions ts/components/registration/stages/CreateAccount.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ import { resetRegistration } from '../RegistrationStages';
import { ContinueButton, OnboardDescription, OnboardHeading } from '../components';
import { BackButtonWithinContainer } from '../components/BackButton';
import { displayNameIsValid, sanitizeDisplayNameOrToast } from '../utils';
import { localize } from '../../../util/i18n/localizedString';
import { RetrieveDisplayNameError } from '../../../session/utils/errors';

export type AccountDetails = {
recoveryPassword: string;
Expand Down Expand Up @@ -106,9 +108,15 @@ export const CreateAccount = () => {
`[onboarding] create account: signUpWithDetails failed! Error: ${err.message || String(err)}`
);
dispatch(setAccountCreationStep(AccountCreation.DisplayName));
// Note: we have to assume here that libsession threw an error because the name was too long.

if (err instanceof RetrieveDisplayNameError) {
dispatch(setDisplayNameError(localize('displayNameErrorDescription').toString()));
return;
}

// Note: we have to assume here that libsession threw an error because the name was too long since we covered the other cases.
// The error reported by libsession is not localized
dispatch(setDisplayNameError(window.i18n('displayNameErrorDescriptionShorter')));
dispatch(setDisplayNameError(localize('displayNameErrorDescriptionShorter').toString()));
}
};

Expand Down
12 changes: 9 additions & 3 deletions ts/components/registration/stages/RestoreAccount.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { InvalidWordsError, NotEnoughWordsError } from '../../../session/crypto/
import { ProfileManager } from '../../../session/profile_manager/ProfileManager';
import { PromiseUtils } from '../../../session/utils';
import { TaskTimedOutError } from '../../../session/utils/Promise';
import { NotFoundError } from '../../../session/utils/errors';
import { NotFoundError, RetrieveDisplayNameError } from '../../../session/utils/errors';
import { trigger } from '../../../shims/events';
import {
AccountRestoration,
Expand Down Expand Up @@ -43,6 +43,7 @@ import { BackButtonWithinContainer } from '../components/BackButton';
import { useRecoveryProgressEffect } from '../hooks';
import { displayNameIsValid, sanitizeDisplayNameOrToast } from '../utils';
import { AccountDetails } from './CreateAccount';
import { localize } from '../../../util/i18n/localizedString';

type AccountRestoreDetails = AccountDetails & { dispatch: Dispatch; abortSignal?: AbortSignal };

Expand Down Expand Up @@ -197,9 +198,14 @@ export const RestoreAccount = () => {
);
dispatch(setAccountRestorationStep(AccountRestoration.DisplayName));

// Note: we have to assume here that libsession threw an error because the name was too long.
if (err instanceof RetrieveDisplayNameError) {
dispatch(setDisplayNameError(localize('displayNameErrorDescription').toString()));
return;
}

// Note: we have to assume here that libsession threw an error because the name was too long since we covered the other cases.
// The error reported by libsession is not localized
dispatch(setDisplayNameError(window.i18n('displayNameErrorDescriptionShorter')));
dispatch(setDisplayNameError(localize('displayNameErrorDescriptionShorter').toString()));
}
};

Expand Down
7 changes: 3 additions & 4 deletions ts/session/profile_manager/ProfileManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import { SyncUtils, UserUtils } from '../utils';
import { fromHexToArray, sanitizeSessionUsername, toHex } from '../utils/String';
import { AvatarDownload } from '../utils/job_runners/jobs/AvatarDownloadJob';
import { CONVERSATION_PRIORITIES, ConversationTypeEnum } from '../../models/types';
import { RetrieveDisplayNameError } from '../utils/errors';

export type Profile = {
displayName: string | undefined;
Expand Down Expand Up @@ -115,9 +116,7 @@ async function updateOurProfileDisplayNameOnboarding(newName: string) {
const appliedName = await UserConfigWrapperActions.getName();

if (isNil(appliedName)) {
throw new Error(
'updateOurProfileDisplayNameOnboarding failed to retrieve name after setting it'
);
throw new RetrieveDisplayNameError();
}

return appliedName;
Expand All @@ -143,7 +142,7 @@ async function updateOurProfileDisplayName(newName: string) {
await UserConfigWrapperActions.setNameTruncated(sanitizeSessionUsername(newName).trim());
const truncatedName = await UserConfigWrapperActions.getName();
if (isNil(truncatedName)) {
throw new Error('updateOurProfileDisplayName: failed to get truncated displayName back');
throw new RetrieveDisplayNameError();
}
await UserConfigWrapperActions.setPriority(dbPriority);
if (dbProfileUrl && !isEmpty(dbProfileKey)) {
Expand Down
8 changes: 8 additions & 0 deletions ts/session/utils/errors.ts
Original file line number Diff line number Diff line change
Expand Up @@ -74,3 +74,11 @@ export class SnodeResponseError extends Error {
Object.setPrototypeOf(this, SnodeResponseError.prototype);
}
}

export class RetrieveDisplayNameError extends Error {
constructor(message = 'failed to retrieve display name after setting it') {
super(message);
// restore prototype chain
Object.setPrototypeOf(this, SnodeResponseError.prototype);
}
}

0 comments on commit 252f982

Please sign in to comment.