Skip to content

Commit

Permalink
client: remove deprecated authenticatedUser.email (#46183)
Browse files Browse the repository at this point in the history
The `authenticatedUsers.email` field is deprecated - the equivalent can now be found with `authenticatedUsers.emails.find(email => email.isPrimary)`. This gives more details about the email as well, such as whether it is verified or not, which is required to implement verified email checks.

Co-authored-by: David Veszelovszki <veszelovszki@gmail.com>
  • Loading branch information
bobheadxi and vdavid committed Jan 6, 2023
1 parent 179254b commit 7ff8676
Show file tree
Hide file tree
Showing 31 changed files with 80 additions and 46 deletions.
2 changes: 1 addition & 1 deletion client/shared/src/auth.ts
Expand Up @@ -10,7 +10,6 @@ export const currentAuthStateQuery = gql`
databaseID
username
avatarURL
email
displayName
siteAdmin
tags
Expand All @@ -36,6 +35,7 @@ export const currentAuthStateQuery = gql`
emails {
email
verified
isPrimary
}
latestSettings {
id
Expand Down
7 changes: 4 additions & 3 deletions client/shared/src/util/url.ts
Expand Up @@ -594,16 +594,17 @@ export function buildGetStartedURL(cloudSignup?: boolean, authenticatedUser?: Au
* @returns signup UR string with relevant params attached
*/
export const buildCloudTrialURL = (
authenticatedUser: Pick<AuthenticatedUser, 'displayName' | 'email'> | null | undefined,
authenticatedUser: Pick<AuthenticatedUser, 'displayName' | 'emails'> | null | undefined,
product?: string
): string => {
const url = new URL('https://signup.sourcegraph.com/')

if (product) {
url.searchParams.append('p', product)
}
if (authenticatedUser?.email) {
url.searchParams.append('email', authenticatedUser.email)
const primaryEmail = authenticatedUser?.emails.find(email => email.isPrimary)
if (primaryEmail) {
url.searchParams.append('email', primaryEmail.email)
}
if (authenticatedUser?.displayName) {
url.searchParams.append('name', authenticatedUser.displayName)
Expand Down
9 changes: 8 additions & 1 deletion client/web/src/Layout.tsx
Expand Up @@ -201,7 +201,14 @@ export const Layout: React.FunctionComponent<React.PropsWithChildren<LayoutProps
onSubmit={handleSubmitFeedback}
modal={true}
openByDefault={true}
authenticatedUser={props.authenticatedUser}
authenticatedUser={
props.authenticatedUser
? {
username: props.authenticatedUser.username || '',
email: props.authenticatedUser.emails.find(email => email.isPrimary)?.email || '',
}
: null
}
onClose={() => setFeedbackModalOpen(false)}
/>
)}
Expand Down
2 changes: 1 addition & 1 deletion client/web/src/auth/SignInPage.test.tsx
Expand Up @@ -136,7 +136,7 @@ describe('SignInPage', () => {
const mockUser = {
id: 'userID',
username: 'username',
email: 'user@me.com',
emails: [{ email: 'user@me.com', isPrimary: true, verified: true }],
siteAdmin: true,
} as AuthenticatedUser

Expand Down
2 changes: 1 addition & 1 deletion client/web/src/auth/SignUpPage.test.tsx
Expand Up @@ -95,7 +95,7 @@ describe('SignUpPage', () => {
const mockUser = {
id: 'userID',
username: 'username',
email: 'user@me.com',
emails: [{ email: 'user@me.com', isPrimary: true, verified: true }],
siteAdmin: true,
} as AuthenticatedUser

Expand Down
Expand Up @@ -54,7 +54,6 @@ const PLATFORM_CONTEXT: CommunitySearchContextPageProps['platformContext'] = {
const authUser: AuthenticatedUser = {
__typename: 'User',
id: '0',
email: 'alice@sourcegraph.com',
username: 'alice',
avatarURL: null,
session: { canSignOut: true },
Expand All @@ -73,7 +72,7 @@ const authUser: AuthenticatedUser = {
databaseID: 0,
tosAccepted: true,
searchable: true,
emails: [],
emails: [{ email: 'alice@sourcegraph.com', isPrimary: true, verified: true }],
latestSettings: null,
}

Expand Down
2 changes: 1 addition & 1 deletion client/web/src/enterprise/batches/list/GettingStarted.tsx
Expand Up @@ -13,7 +13,7 @@ import { eventLogger } from '../../../tracking/eventLogger'

export interface GettingStartedProps {
isSourcegraphDotCom: boolean
authenticatedUser?: Pick<AuthenticatedUser, 'displayName' | 'email'> | null
authenticatedUser?: Pick<AuthenticatedUser, 'displayName' | 'emails'> | null
className?: string
}

Expand Down
Expand Up @@ -241,7 +241,7 @@ export const Create: Story = args => {
url: '/users/alice',
displayName: 'Alice',
username: 'alice',
email: 'alice@email.test',
emails: [{ email: 'alice@email.test', isPrimary: true, verified: true }],
}}
/>
</MockedTestProvider>
Expand All @@ -267,7 +267,7 @@ export const Update: Story = args => {
url: '/users/alice',
displayName: 'Alice',
username: 'alice',
email: 'alice@email.test',
emails: [{ email: 'alice@email.test', isPrimary: true, verified: true }],
}}
/>
</MockedTestProvider>
Expand All @@ -293,7 +293,7 @@ export const MissingCredentials: Story = args => {
url: '/users/alice',
displayName: 'Alice',
username: 'alice',
email: 'alice@email.test',
emails: [{ email: 'alice@email.test', isPrimary: true, verified: true }],
}}
/>
</MockedTestProvider>
Expand Down Expand Up @@ -321,7 +321,7 @@ export const SpecFile: Story = args => {
url: '/users/alice',
displayName: 'Alice',
username: 'alice',
email: 'alice@email.test',
emails: [{ email: 'alice@email.test', isPrimary: true, verified: true }],
}}
/>
</MockedTestProvider>
Expand Down Expand Up @@ -349,7 +349,7 @@ export const NoChangesets: Story = args => {
url: '/users/alice',
displayName: 'Alice',
username: 'alice',
email: 'alice@email.test',
emails: [{ email: 'alice@email.test', isPrimary: true, verified: true }],
}}
/>
</MockedTestProvider>
Expand Down Expand Up @@ -377,7 +377,7 @@ export const CreateNewStory: Story = args => {
url: '/users/alice',
displayName: 'Alice',
username: 'alice',
email: 'alice@email.test',
emails: [{ email: 'alice@email.test', isPrimary: true, verified: true }],
}}
/>
</MockedTestProvider>
Expand Down Expand Up @@ -405,7 +405,7 @@ export const ExceedsLicenseStory: Story = args => {
url: '/users/alice',
displayName: 'Alice',
username: 'alice',
email: 'alice@email.test',
emails: [{ email: 'alice@email.test', isPrimary: true, verified: true }],
}}
/>
</MockedTestProvider>
Expand Down
Expand Up @@ -25,7 +25,7 @@ import { BatchSpecInfoByline } from './BatchSpecInfoByline'
import { CreateUpdateBatchChangeAlert } from './CreateUpdateBatchChangeAlert'
import { PreviewList } from './list/PreviewList'

export type PreviewPageAuthenticatedUser = Pick<AuthenticatedUser, 'url' | 'displayName' | 'username' | 'email'>
export type PreviewPageAuthenticatedUser = Pick<AuthenticatedUser, 'url' | 'displayName' | 'username' | 'emails'>

export interface BatchChangePreviewPageProps extends BatchChangePreviewProps {
/** Used for testing. */
Expand Down
Expand Up @@ -40,7 +40,7 @@ export const Overview: Story = () => {
url: '/users/alice',
displayName: 'Alice',
username: 'alice',
email: 'alice@email.test',
emails: [{ email: 'alice@email.test', isPrimary: true, verified: true }],
}}
queryChangesetSpecFileDiffs={queryEmptyFileDiffs}
/>
Expand Down
Expand Up @@ -59,7 +59,7 @@ export const DefaultStory: Story = args => {
url: '/users/alice',
displayName: 'Alice',
username: 'alice',
email: 'alice@email.test',
emails: [{ email: 'alice@email.test', isPrimary: true, verified: true }],
}}
queryChangesetApplyPreview={queryChangesetApplyPreview}
queryChangesetSpecFileDiffs={queryEmptyFileDiffs}
Expand Down
Expand Up @@ -35,7 +35,7 @@ const Template: Story<{ node: VisibleChangesetApplyPreviewFields }> = ({ node })
url: '/users/alice',
displayName: 'Alice',
username: 'alice',
email: 'alice@email.test',
emails: [{ email: 'alice@email.test', isPrimary: true, verified: true }],
}}
queryChangesetSpecFileDiffs={queryEmptyFileDiffs}
/>
Expand Down
Expand Up @@ -384,7 +384,8 @@ const ExpandedSection: React.FunctionComponent<
node.targets.changeset.author
? node.targets.changeset.author
: {
email: authenticatedUser.email,
email:
authenticatedUser.emails.find(email => email.isPrimary)?.email || '',
displayName: authenticatedUser.displayName || authenticatedUser.username,
user: authenticatedUser,
}
Expand Down
Expand Up @@ -39,7 +39,11 @@ const generateMockFetchMonitors =
}

const additionalProps = {
authenticatedUser: { id: 'foobar', username: 'alice', email: 'alice@alice.com' } as AuthenticatedUser,
authenticatedUser: {
id: 'foobar',
username: 'alice',
emails: [{ email: 'alice@email.test', isPrimary: true, verified: true }],
} as AuthenticatedUser,
toggleCodeMonitorEnabled: sinon.fake(),
settingsCascade: EMPTY_SETTINGS_CASCADE,
}
Expand Down
Expand Up @@ -13,7 +13,11 @@ import { CodeMonitoringPage } from './CodeMonitoringPage'
import { mockCodeMonitorNodes } from './testing/util'

const additionalProps = {
authenticatedUser: { id: 'foobar', username: 'alice', email: 'alice@alice.com' } as AuthenticatedUser,
authenticatedUser: {
id: 'foobar',
username: 'alice',
emails: [{ email: 'alice@email.test', isPrimary: true, verified: true }],
} as AuthenticatedUser,
fetchUserCodeMonitors: ({ id, first, after }: ListUserCodeMonitorsVariables) =>
of({
nodes: mockCodeMonitorNodes,
Expand Down
Expand Up @@ -22,7 +22,13 @@ export const CreateCodeMonitorPageStory: Story = () => (
{props => (
<CreateCodeMonitorPage
{...props}
authenticatedUser={{ id: 'foobar', username: 'alice', email: 'alice@alice.com' } as AuthenticatedUser}
authenticatedUser={
{
id: 'foobar',
username: 'alice',
emails: [{ email: 'alice@alice.com', isPrimary: true, verified: true }],
} as AuthenticatedUser
}
createCodeMonitor={sinon.fake()}
isSourcegraphDotCom={false}
/>
Expand Down
Expand Up @@ -18,7 +18,7 @@ describe('CreateCodeMonitorPage', () => {
const mockUser = {
id: 'userID',
username: 'username',
email: 'user@me.com',
emails: [{ email: 'user@me.com', isPrimary: true, verified: true }],
siteAdmin: true,
} as AuthenticatedUser

Expand Down
Expand Up @@ -20,7 +20,12 @@ export const ManageCodeMonitorPageStory: Story = () => (
{props => (
<ManageCodeMonitorPage
{...props}
authenticatedUser={{ ...mockUser, id: 'foobar', username: 'alice', email: 'alice@alice.com' }}
authenticatedUser={{
...mockUser,
id: 'foobar',
username: 'alice',
emails: [{ email: 'alice@alice.com', isPrimary: true, verified: true }],
}}
updateCodeMonitor={fake()}
fetchCodeMonitor={fake(() => of(mockCodeMonitor))}
deleteCodeMonitor={fake(() => NEVER)}
Expand Down
Expand Up @@ -94,6 +94,8 @@ export const EmailAction: React.FunctionComponent<React.PropsWithChildren<Action
const testState = loading ? 'loading' : called && !error ? 'called' : error || undefined

const emailConfigured = window.context.emailEnabled
const userPrimaryEmail = authenticatedUser.emails.find(email => email.isPrimary)

const emailNotConfiguredMessage = !emailConfigured ? (
!action ? (
<>
Expand All @@ -116,7 +118,7 @@ export const EmailAction: React.FunctionComponent<React.PropsWithChildren<Action
idName="email"
disabled={disabledBasedOnEmailConfig}
completed={!!action}
completedSubtitle={authenticatedUser.email}
completedSubtitle={userPrimaryEmail?.email || ''}
actionEnabled={enabled}
toggleActionEnabled={toggleEmailNotificationEnabled}
includeResults={includeResults}
Expand All @@ -138,7 +140,7 @@ export const EmailAction: React.FunctionComponent<React.PropsWithChildren<Action
id="code-monitoring-form-actions-recipients"
className="mb-2"
label="Recipients"
value={`${authenticatedUser.email || ''} (you)`}
value={`${userPrimaryEmail?.email || ''} (you)`}
disabled={true}
autoFocus={true}
required={true}
Expand Down
5 changes: 2 additions & 3 deletions client/web/src/enterprise/code-monitoring/testing/util.ts
Expand Up @@ -10,7 +10,6 @@ export const mockUser: AuthenticatedUser = {
__typename: 'User',
id: 'userID',
username: 'username',
email: 'user@me.com',
siteAdmin: true,
databaseID: 0,
tags: [],
Expand All @@ -26,7 +25,7 @@ export const mockUser: AuthenticatedUser = {
session: { __typename: 'Session', canSignOut: true },
tosAccepted: true,
searchable: true,
emails: [],
emails: [{ email: 'user@me.com', isPrimary: true, verified: true }],
latestSettings: null,
}

Expand Down Expand Up @@ -304,7 +303,7 @@ export const mockCodeMonitorNodes: ListCodeMonitors['nodes'] = [
export const mockAuthenticatedUser: AuthenticatedUser = {
id: 'userID',
username: 'username',
email: 'user@me.com',
emails: [{ email: 'user@me.com', isPrimary: true, verified: true }],
siteAdmin: true,
} as AuthenticatedUser

Expand Down
Expand Up @@ -276,7 +276,6 @@ Policies.args = {
databaseID: 1,
username: 'string',
avatarURL: 'string',
email: 'string',
displayName: 'string',
siteAdmin: true,
tags: [],
Expand Down
Expand Up @@ -68,7 +68,6 @@ const searchContextToEdit: SearchContextFields = {
const authUser: AuthenticatedUser = {
__typename: 'User',
id: '0',
email: 'alice@sourcegraph.com',
username: 'alice',
avatarURL: null,
session: { canSignOut: true },
Expand All @@ -87,7 +86,7 @@ const authUser: AuthenticatedUser = {
databaseID: 0,
tosAccepted: true,
searchable: true,
emails: [],
emails: [{ email: 'alice@sourcegraph.com', isPrimary: true, verified: true }],
latestSettings: null,
}

Expand Down
3 changes: 1 addition & 2 deletions client/web/src/integration/graphQlResults.ts
Expand Up @@ -60,7 +60,6 @@ export const commonWebGraphQlResults: Partial<WebGraphQlOperations & SharedGraph
databaseID: 1,
username: 'test',
avatarURL: null,
email: 'felix@sourcegraph.com',
displayName: null,
siteAdmin: true,
tags: [],
Expand All @@ -71,7 +70,7 @@ export const commonWebGraphQlResults: Partial<WebGraphQlOperations & SharedGraph
session: { canSignOut: true },
viewerCanAdminister: true,
searchable: true,
emails: [],
emails: [{ email: 'felix@sourcegraph.com', isPrimary: true, verified: true }],
latestSettings: null,
},
}),
Expand Down
2 changes: 1 addition & 1 deletion client/web/src/marketing/toast/SurveyToast.test.tsx
Expand Up @@ -20,7 +20,7 @@ import { SurveyToast } from '.'
export const mockAuthenticatedUser: AuthenticatedUser = {
id: 'userID',
username: 'username',
email: 'user@me.com',
emails: [{ email: 'user@me.com', isPrimary: true, verified: true }],
} as AuthenticatedUser

describe('SurveyToast', () => {
Expand Down
2 changes: 1 addition & 1 deletion client/web/src/repo/RepoHeader.story.tsx
Expand Up @@ -21,7 +21,7 @@ import repoRevisionContainerStyles from './RepoRevisionContainer.module.scss'
const mockUser = {
id: 'userID',
username: 'username',
email: 'user@me.com',
emails: [{ email: 'user@me.com', isPrimary: true, verified: true }],
siteAdmin: true,
} as AuthenticatedUser

Expand Down
6 changes: 5 additions & 1 deletion client/web/src/search/results/SearchResultsInfoBar.test.tsx
Expand Up @@ -17,7 +17,11 @@ const COMMON_PROPS: Omit<SearchResultsInfoBarProps, 'enableCodeMonitoring'> = {
platformContext: { settings: NEVER, sourcegraphURL: 'https://sourcegraph.com' },
history,
location: createLocation('/search'),
authenticatedUser: { id: 'userID', displayName: 'Chuck Cheese', email: 'chuck@chuckeecheese.com' },
authenticatedUser: {
id: 'userID',
displayName: 'Chuck Cheese',
emails: [{ email: 'chuck@chuckeecheese.com', isPrimary: true, verified: true }],
},
allExpanded: true,
onExpandAllResultsToggle: noop,
onSaveQueryClick: noop,
Expand Down

0 comments on commit 7ff8676

Please sign in to comment.