Skip to content

Commit b1e7bbb

Browse files
committed
complete migration from useAuthProviders to useAuthProviderDescriptions
1 parent dd340f3 commit b1e7bbb

File tree

12 files changed

+115
-105
lines changed

12 files changed

+115
-105
lines changed

components/dashboard/src/components/AuthorizeGit.tsx

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,9 @@
44
* See License.AGPL.txt in the project root for license information.
55
*/
66

7-
import { AuthProviderInfo } from "@gitpod/gitpod-protocol";
87
import { FC, useCallback, useContext } from "react";
98
import { Link } from "react-router-dom";
10-
import { useAuthProviders } from "../data/auth-providers/auth-provider-query";
9+
import { useAuthProviderDescriptions } from "../data/auth-providers/auth-provider-query";
1110
import { openAuthorizeWindow } from "../provider-utils";
1211
import { getGitpodService } from "../service/service";
1312
import { UserContext, useCurrentUser } from "../user-context";
@@ -16,45 +15,43 @@ import { Heading2, Heading3, Subheading } from "./typography/headings";
1615
import classNames from "classnames";
1716
import { iconForAuthProvider, simplifyProviderName } from "../provider-utils";
1817
import { useIsOwner } from "../data/organizations/members-query";
18+
import { AuthProviderDescription } from "@gitpod/public-api/lib/gitpod/v1/authprovider_pb";
1919

2020
export function useNeedsGitAuthorization() {
21-
const authProviders = useAuthProviders();
21+
const authProviders = useAuthProviderDescriptions();
2222
const user = useCurrentUser();
2323
if (!user || !authProviders.data) {
2424
return false;
2525
}
26-
return !authProviders.data.some((ap) => user.identities.some((i) => ap.authProviderId === i.authProviderId));
26+
return !authProviders.data.some((ap) => user.identities.some((i) => ap.id === i.authProviderId));
2727
}
2828

2929
export const AuthorizeGit: FC<{ className?: string }> = ({ className }) => {
3030
const { setUser } = useContext(UserContext);
3131
const owner = useIsOwner();
32-
const authProviders = useAuthProviders();
32+
const { data: authProviders } = useAuthProviderDescriptions();
3333
const updateUser = useCallback(() => {
3434
getGitpodService().server.getLoggedInUser().then(setUser);
3535
}, [setUser]);
3636

3737
const connect = useCallback(
38-
(ap: AuthProviderInfo) => {
38+
(ap: AuthProviderDescription) => {
3939
openAuthorizeWindow({
4040
host: ap.host,
41-
scopes: ap.requirements?.default,
4241
overrideScopes: true,
4342
onSuccess: updateUser,
4443
});
4544
},
4645
[updateUser],
4746
);
4847

49-
if (authProviders.data === undefined) {
48+
if (authProviders === undefined) {
5049
return <></>;
5150
}
5251

53-
const verifiedProviders = authProviders.data.filter((ap) => ap.verified);
54-
5552
return (
5653
<div className={classNames("text-center p-4 m-4 py-10", className)}>
57-
{verifiedProviders.length === 0 ? (
54+
{authProviders.length === 0 ? (
5855
<>
5956
<Heading3 className="pb-2">No Git integrations</Heading3>
6057
{!!owner ? (
@@ -82,7 +79,7 @@ export const AuthorizeGit: FC<{ className?: string }> = ({ className }) => {
8279
Select one of the following available providers to access repositories for your account.
8380
</Subheading>
8481
<div className="flex flex-col items-center">
85-
{verifiedProviders.map((ap) => {
82+
{authProviders.map((ap) => {
8683
return (
8784
<Button
8885
onClick={() => connect(ap)}
@@ -91,7 +88,7 @@ export const AuthorizeGit: FC<{ className?: string }> = ({ className }) => {
9188
className="mt-3 btn-login flex-none w-56 px-0 py-0.5 inline-flex"
9289
>
9390
<div className="flex relative -left-4 w-56">
94-
{iconForAuthProvider(ap.authProviderType)}
91+
{iconForAuthProvider(ap.type)}
9592
<span className="pt-2 pb-2 mr-3 text-sm my-auto font-medium truncate overflow-ellipsis">
9693
Continue with {simplifyProviderName(ap.host)}
9794
</span>

components/dashboard/src/components/RepositoryFinder.tsx

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,9 @@ import { ReactComponent as RepositoryIcon } from "../icons/RepositoryWithColor.s
1111
import { SuggestedRepository } from "@gitpod/gitpod-protocol";
1212
import { MiddleDot } from "./typography/MiddleDot";
1313
import { useUnifiedRepositorySearch } from "../data/git-providers/unified-repositories-search-query";
14-
import { useAuthProviders } from "../data/auth-providers/auth-provider-query";
14+
import { useAuthProviderDescriptions } from "../data/auth-providers/auth-provider-query";
1515
import { ReactComponent as Exclamation2 } from "../images/exclamation2.svg";
16+
import { AuthProviderType } from "@gitpod/public-api/lib/gitpod/v1/authprovider_pb";
1617

1718
interface RepositoryFinderProps {
1819
selectedContextURL?: string;
@@ -39,7 +40,7 @@ export default function RepositoryFinder({
3940
hasMore,
4041
} = useUnifiedRepositorySearch({ searchString, excludeProjects });
4142

42-
const authProviders = useAuthProviders();
43+
const authProviders = useAuthProviderDescriptions();
4344

4445
const handleSelectionChange = useCallback(
4546
(selectedID: string) => {
@@ -115,7 +116,10 @@ export default function RepositoryFinder({
115116
isSelectable: false,
116117
} as ComboboxElement);
117118
}
118-
if (searchString.length >= 3 && authProviders.data?.some((p) => p.authProviderType === "BitbucketServer")) {
119+
if (
120+
searchString.length >= 3 &&
121+
authProviders.data?.some((p) => p.type === AuthProviderType.BITBUCKET_SERVER)
122+
) {
119123
// add an element that tells the user that the Bitbucket Server does only support prefix search
120124
result.push({
121125
id: "bitbucket-server",

components/dashboard/src/data/auth-providers/auth-provider-query.ts

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,25 +4,14 @@
44
* See License.AGPL.txt in the project root for license information.
55
*/
66

7-
import { AuthProviderInfo } from "@gitpod/gitpod-protocol";
87
import { useQuery } from "@tanstack/react-query";
9-
import { getGitpodService } from "../../service/service";
108
import { authProviderClient } from "../../service/public-api";
119
import { useCurrentUser } from "../../user-context";
1210
import {
1311
AuthProviderDescription,
1412
ListAuthProviderDescriptionsRequest,
1513
} from "@gitpod/public-api/lib/gitpod/v1/authprovider_pb";
1614

17-
export const useAuthProviders = () => {
18-
return useQuery<AuthProviderInfo[]>({
19-
queryKey: ["auth-providers"],
20-
queryFn: async () => {
21-
return await getGitpodService().server.getAuthProviders();
22-
},
23-
});
24-
};
25-
2615
export const useAuthProviderDescriptions = () => {
2716
const user = useCurrentUser();
2817
const query = useQuery<AuthProviderDescription[]>({

components/dashboard/src/data/git-providers/github-queries.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,9 @@
66

77
import { useQuery } from "@tanstack/react-query";
88
import { getGitpodService } from "../../service/service";
9-
import { useAuthProviders } from "../auth-providers/auth-provider-query";
9+
import { useAuthProviderDescriptions } from "../auth-providers/auth-provider-query";
1010
import { useCurrentUser } from "../../user-context";
11+
import { AuthProviderType } from "@gitpod/public-api/lib/gitpod/v1/authprovider_pb";
1112

1213
export const useIsGithubAppEnabled = () => {
1314
return useQuery(["github-app-enabled"], async () => {
@@ -16,7 +17,7 @@ export const useIsGithubAppEnabled = () => {
1617
};
1718

1819
export const useAreGithubWebhooksUnauthorized = (providerHost: string) => {
19-
const { data: authProviders } = useAuthProviders();
20+
const { data: authProviders } = useAuthProviderDescriptions();
2021
const { data: isGitHubAppEnabled } = useIsGithubAppEnabled();
2122
const { data: token } = useGetGitToken(providerHost);
2223

@@ -32,7 +33,7 @@ export const useAreGithubWebhooksUnauthorized = (providerHost: string) => {
3233

3334
// Find matching auth provider - if none, treat as authorized
3435
const ap = authProviders?.find((ap) => ap.host === providerHost);
35-
if (!ap || ap.authProviderType !== "GitHub") {
36+
if (!ap || ap.type !== AuthProviderType.GITHUB) {
3637
return false;
3738
}
3839

components/dashboard/src/data/git-providers/provider-repositories-query.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,10 @@ import { useQuery } from "@tanstack/react-query";
88
import { getGitpodService } from "../../service/service";
99
import { useCurrentUser } from "../../user-context";
1010
import { CancellationTokenSource } from "vscode-jsonrpc";
11-
import { useAuthProviders } from "../auth-providers/auth-provider-query";
11+
import { useAuthProviderDescriptions } from "../auth-providers/auth-provider-query";
1212
import { GetProviderRepositoriesParams } from "@gitpod/gitpod-protocol";
1313
import { useFeatureFlag } from "../featureflag-query";
14+
import { AuthProviderType } from "@gitpod/public-api/lib/gitpod/v1/authprovider_pb";
1415

1516
type UseProviderRepositoriesQueryArgs = {
1617
providerHost: string;
@@ -24,12 +25,12 @@ export const useProviderRepositoriesForUser = ({
2425
}: UseProviderRepositoriesQueryArgs) => {
2526
const user = useCurrentUser();
2627
const newProjectIncrementalRepoSearchBBS = useFeatureFlag("newProjectIncrementalRepoSearchBBS");
27-
const { data: authProviders } = useAuthProviders();
28+
const { data: authProviders } = useAuthProviderDescriptions();
2829
const selectedProvider = authProviders?.find((p) => p.host === providerHost);
2930

3031
const queryKey: any[] = ["provider-repositories", { userId: user?.id }, { providerHost, installationId }];
3132

32-
const isBitbucketServer = selectedProvider?.authProviderType === "BitbucketServer";
33+
const isBitbucketServer = selectedProvider?.type === AuthProviderType.BITBUCKET_SERVER;
3334
const enableIncrementalSearch = isBitbucketServer && newProjectIncrementalRepoSearchBBS;
3435
if (enableIncrementalSearch) {
3536
queryKey.push({ search });

components/dashboard/src/projects/NewProject.tsx

Lines changed: 18 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* See License.AGPL.txt in the project root for license information.
55
*/
66

7-
import { AuthProviderInfo, Project } from "@gitpod/gitpod-protocol";
7+
import { Project } from "@gitpod/gitpod-protocol";
88
import { FC, useCallback, useContext, useEffect, useMemo, useState } from "react";
99
import ErrorMessage from "../components/ErrorMessage";
1010
import { useCurrentOrg } from "../data/organizations/orgs-query";
@@ -13,19 +13,20 @@ import { iconForAuthProvider, openAuthorizeWindow, simplifyProviderName } from "
1313
import { getGitpodService } from "../service/service";
1414
import { UserContext, useCurrentUser } from "../user-context";
1515
import { Heading1, Subheading } from "../components/typography/headings";
16-
import { useAuthProviders } from "../data/auth-providers/auth-provider-query";
16+
import { useAuthProviderDescriptions } from "../data/auth-providers/auth-provider-query";
1717
import { AuthorizeGit, useNeedsGitAuthorization } from "../components/AuthorizeGit";
1818
import { NewProjectRepoSelection } from "./new-project/NewProjectRepoSelection";
1919
import { NewProjectSubheading } from "./new-project/NewProjectSubheading";
2020
import { Button } from "../components/Button";
21+
import { AuthProviderDescription, AuthProviderType } from "@gitpod/public-api/lib/gitpod/v1/authprovider_pb";
2122

2223
export default function NewProject() {
2324
const currentTeam = useCurrentOrg()?.data;
2425
const user = useCurrentUser();
25-
const authProviders = useAuthProviders();
26+
const authProviders = useAuthProviderDescriptions();
2627

2728
// State this component manages
28-
const [selectedProvider, setSelectedProvider] = useState<AuthProviderInfo>();
29+
const [selectedProvider, setSelectedProvider] = useState<AuthProviderDescription>();
2930
const [project, setProject] = useState<Project>();
3031

3132
// Defaults selectedProviderHost if not set yet
@@ -34,9 +35,7 @@ export default function NewProject() {
3435
for (let i = user.identities.length - 1; i >= 0; i--) {
3536
const candidate = user.identities[i];
3637
if (candidate) {
37-
const authProvider = authProviders.data.find(
38-
(ap) => ap.authProviderId === candidate.authProviderId,
39-
);
38+
const authProvider = authProviders.data.find((ap) => ap.id === candidate.authProviderId);
4039
if (authProvider) {
4140
setSelectedProvider(authProvider);
4241
break;
@@ -107,8 +106,8 @@ export default function NewProject() {
107106
}
108107

109108
type NewProjectMainContentProps = {
110-
selectedProvider?: AuthProviderInfo;
111-
onProviderSelected: (ap: AuthProviderInfo, updateUser?: boolean) => void;
109+
selectedProvider?: AuthProviderDescription;
110+
onProviderSelected: (ap: AuthProviderDescription, updateUser?: boolean) => void;
112111
onProjectCreated: (project: Project) => void;
113112
};
114113
const NewProjectMainContent: FC<NewProjectMainContentProps> = ({
@@ -117,12 +116,12 @@ const NewProjectMainContent: FC<NewProjectMainContentProps> = ({
117116
onProjectCreated,
118117
}) => {
119118
const { setUser } = useContext(UserContext);
120-
const authProviders = useAuthProviders();
119+
const authProviders = useAuthProviderDescriptions();
121120
const needsGitAuth = useNeedsGitAuthorization();
122121
const [showGitProviders, setShowGitProviders] = useState(false);
123122

124123
const onGitProviderSeleted = useCallback(
125-
async (ap: AuthProviderInfo, updateUser?: boolean) => {
124+
async (ap: AuthProviderDescription, updateUser?: boolean) => {
126125
// TODO: Can we push this down into where sends updateUser=true?
127126
if (updateUser) {
128127
setUser(await getGitpodService().server.getLoggedInUser());
@@ -151,23 +150,22 @@ const NewProjectMainContent: FC<NewProjectMainContentProps> = ({
151150
};
152151

153152
const GitProviders: FC<{
154-
authProviders: AuthProviderInfo[];
155-
onProviderSelected: (ap: AuthProviderInfo, updateUser?: boolean) => void;
153+
authProviders: AuthProviderDescription[];
154+
onProviderSelected: (ap: AuthProviderDescription, updateUser?: boolean) => void;
156155
}> = ({ authProviders, onProviderSelected }) => {
157156
const [errorMessage, setErrorMessage] = useState<string | undefined>(undefined);
158157

159158
const selectProvider = useCallback(
160-
async (ap: AuthProviderInfo) => {
159+
async (ap: AuthProviderDescription) => {
161160
setErrorMessage(undefined);
162161

163162
const token = await getGitpodService().server.getToken({ host: ap.host });
164-
if (token && !(ap.authProviderType === "GitHub" && !token.scopes.includes("repo"))) {
163+
if (token && !(ap.type === AuthProviderType.GITHUB && !token.scopes.includes("repo"))) {
165164
onProviderSelected(ap);
166165
return;
167166
}
168167
await openAuthorizeWindow({
169168
host: ap.host,
170-
scopes: ap.authProviderType === "GitHub" ? ["repo"] : ap.requirements?.default,
171169
onSuccess: async () => {
172170
onProviderSelected(ap, true);
173171
},
@@ -194,10 +192,10 @@ const GitProviders: FC<{
194192
() =>
195193
authProviders.filter(
196194
(p) =>
197-
p.authProviderType === "GitHub" ||
195+
p.type === AuthProviderType.GITHUB ||
198196
p.host === "bitbucket.org" ||
199-
p.authProviderType === "GitLab" ||
200-
p.authProviderType === "BitbucketServer",
197+
p.type === AuthProviderType.GITLAB ||
198+
p.type === AuthProviderType.BITBUCKET_SERVER,
201199
),
202200
[authProviders],
203201
);
@@ -216,7 +214,7 @@ const GitProviders: FC<{
216214
className="btn-login flex-none w-56 h-10 p-0 inline-flex"
217215
onClick={() => selectProvider(ap)}
218216
>
219-
{iconForAuthProvider(ap.authProviderType)}
217+
{iconForAuthProvider(ap.type)}
220218
<span className="pt-2 pb-2 mr-3 text-sm my-auto font-medium truncate overflow-ellipsis">
221219
Continue with {simplifyProviderName(ap.host)}
222220
</span>

components/dashboard/src/projects/new-project/NewProjectAuthRequired.tsx

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
*/
66

77
import { FC, useCallback } from "react";
8-
import { useAuthProviders } from "../../data/auth-providers/auth-provider-query";
8+
import { useAuthProviderDescriptions } from "../../data/auth-providers/auth-provider-query";
99
import { openAuthorizeWindow } from "../../provider-utils";
1010

1111
type Props = {
@@ -18,7 +18,7 @@ export const NewProjectAuthRequired: FC<Props> = ({
1818
areGitHubWebhooksUnauthorized = false,
1919
onReconfigure,
2020
}) => {
21-
const authProviders = useAuthProviders();
21+
const authProviders = useAuthProviderDescriptions();
2222

2323
const handleAuthorize = useCallback(() => {
2424
const ap = authProviders.data?.find((ap) => ap.host === selectedProviderHost);
@@ -27,12 +27,8 @@ export const NewProjectAuthRequired: FC<Props> = ({
2727
}
2828
openAuthorizeWindow({
2929
host: ap.host,
30-
scopes: ap.authProviderType === "GitHub" ? ["repo"] : ap.requirements?.default,
3130
onSuccess: async () => {
32-
// TODO: Verify this works correctly
33-
if (ap.authProviderType === "GitHub") {
34-
authProviders.refetch();
35-
}
31+
authProviders.refetch();
3632
},
3733
onError: (payload) => {
3834
console.error("Authorization failed", selectedProviderHost, payload);

components/dashboard/src/projects/new-project/NewProjectRepoSelection.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* See License.AGPL.txt in the project root for license information.
55
*/
66

7-
import { AuthProviderInfo, Project } from "@gitpod/gitpod-protocol";
7+
import { Project } from "@gitpod/gitpod-protocol";
88
import { FC, useCallback, useEffect, useMemo, useState } from "react";
99
import { useAreGithubWebhooksUnauthorized, useIsGithubAppEnabled } from "../../data/git-providers/github-queries";
1010
import { LinkButton } from "../../components/LinkButton";
@@ -22,9 +22,10 @@ import { NewProjectCreateFromURL } from "./NewProjectCreateFromURL";
2222
import { useStateWithDebounce } from "../../hooks/use-state-with-debounce";
2323
import { useFeatureFlag } from "../../data/featureflag-query";
2424
import Alert from "../../components/Alert";
25+
import { AuthProviderDescription, AuthProviderType } from "@gitpod/public-api/lib/gitpod/v1/authprovider_pb";
2526

2627
type Props = {
27-
selectedProvider?: AuthProviderInfo;
28+
selectedProvider?: AuthProviderDescription;
2829
onProjectCreated: (project: Project) => void;
2930
onChangeGitProvider: () => void;
3031
};
@@ -59,7 +60,7 @@ export const NewProjectRepoSelection: FC<Props> = ({ selectedProvider, onProject
5960
// Memoized & derived values
6061
const noReposAvailable = !!(reposInAccounts?.length === 0 || areGitHubWebhooksUnauthorized);
6162
const isGitHub = selectedProvider?.host === "github.com";
62-
const isBitbucketServer = selectedProvider?.authProviderType === "BitbucketServer";
63+
const isBitbucketServer = selectedProvider?.type === AuthProviderType.BITBUCKET_SERVER;
6364
const enableBBSIncrementalSearch = isBitbucketServer && newProjectIncrementalRepoSearchBBS;
6465

6566
const accounts = useMemo(() => {

0 commit comments

Comments
 (0)