Skip to content

Commit e8ab358

Browse files
jankeromnesroboquat
authored andcommitted
Allow integrating with 'github.com' without a GitHub App
1 parent 9cbc72a commit e8ab358

File tree

7 files changed

+24
-18
lines changed

7 files changed

+24
-18
lines changed

components/dashboard/src/projects/NewProject.tsx

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ export default function NewProject() {
2929
const [reposInAccounts, setReposInAccounts] = useState<ProviderRepository[]>([]);
3030
const [repoSearchFilter, setRepoSearchFilter] = useState<string>("");
3131
const [selectedAccount, setSelectedAccount] = useState<string | undefined>(undefined);
32-
const [showGitProviders, setShowGitProviders] = useState<boolean>(false);
32+
const [showGitProviders, setShowGitProviders] = useState<boolean>(true);
3333
const [selectedRepo, setSelectedRepo] = useState<ProviderRepository | undefined>(undefined);
3434
const [selectedTeamOrUser, setSelectedTeamOrUser] = useState<Team | User | undefined>(undefined);
3535

@@ -41,11 +41,16 @@ export default function NewProject() {
4141
const [sourceOfConfig, setSourceOfConfig] = useState<"repo" | "db" | undefined>();
4242

4343
const [authProviders, setAuthProviders] = useState<AuthProviderInfo[]>([]);
44+
const [isGitHubAppEnabled, setIsGitHubAppEnabled] = useState<boolean>();
45+
46+
console.log("isGitHubAppEnabled", isGitHubAppEnabled);
4447

4548
useEffect(() => {
46-
(async () => {
47-
setAuthProviders(await getGitpodService().server.getAuthProviders());
48-
})();
49+
const { server } = getGitpodService();
50+
Promise.all([
51+
server.getAuthProviders().then((v) => () => setAuthProviders(v)),
52+
server.isGitHubAppEnabled().then((v) => () => setIsGitHubAppEnabled(v)),
53+
]).then((setters) => setters.forEach((s) => s()));
4954
}, []);
5055

5156
useEffect(() => {
@@ -275,7 +280,7 @@ export default function NewProject() {
275280
onClick: () => setSelectedAccount(account),
276281
});
277282
}
278-
if (isGitHub()) {
283+
if (isGitHub() && isGitHubAppEnabled) {
279284
result.push({
280285
title: "Add another GitHub account",
281286
customContent: renderItemContent("Add GitHub Orgs or Account", Plus),
@@ -437,7 +442,7 @@ export default function NewProject() {
437442
)}
438443
</div>
439444
</div>
440-
{reposInAccounts.length > 0 && isGitHub() && (
445+
{reposInAccounts.length > 0 && isGitHub() && isGitHubAppEnabled && (
441446
<div>
442447
<div className="text-gray-500 text-center w-96 mx-8">
443448
Repository not found?{" "}
@@ -634,14 +639,13 @@ function GitProviders(props: {
634639
setErrorMessage(undefined);
635640

636641
const token = await getGitpodService().server.getToken({ host: ap.host });
637-
const isGitHubEnterprise = AuthProviderInfo.isGitHubEnterprise(ap);
638-
if (token && !(isGitHubEnterprise && !token.scopes.includes("repo"))) {
642+
if (token && !(ap.authProviderType === "GitHub" && !token.scopes.includes("repo"))) {
639643
props.onHostSelected(ap.host);
640644
return;
641645
}
642646
await openAuthorizeWindow({
643647
host: ap.host,
644-
scopes: isGitHubEnterprise ? ["repo"] : ap.requirements?.default,
648+
scopes: ap.authProviderType === "GitHub" ? ["repo"] : ap.requirements?.default,
645649
onSuccess: async () => {
646650
props.onHostSelected(ap.host, true);
647651
},

components/gitpod-protocol/src/gitpod-service.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,7 @@ export interface GitpodServer extends JsonRpcServer<GitpodClient>, AdminServer,
189189

190190
// misc
191191
sendFeedback(feedback: string): Promise<string | undefined>;
192+
isGitHubAppEnabled(): Promise<boolean>;
192193
registerGithubApp(installationId: string): Promise<void>;
193194

194195
/**

components/gitpod-protocol/src/protocol.ts

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1159,12 +1159,6 @@ export interface AuthProviderInfo {
11591159
};
11601160
}
11611161

1162-
export namespace AuthProviderInfo {
1163-
export function isGitHubEnterprise(info?: AuthProviderInfo): boolean {
1164-
return !!info && info.authProviderType === "GitHub" && info.host !== "github.com";
1165-
}
1166-
}
1167-
11681162
export interface AuthProviderEntry {
11691163
readonly id: string;
11701164
readonly type: AuthProviderEntry.Type;

components/server/ee/src/workspace/gitpod-server-impl.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1781,7 +1781,7 @@ export class GitpodServerEEImpl extends GitpodServerImpl {
17811781
const providerHost = params.provider;
17821782
const provider = (await this.getAuthProviders(ctx)).find((ap) => ap.host === providerHost);
17831783

1784-
if (providerHost === "github.com") {
1784+
if (providerHost === "github.com" && this.config.githubApp?.enabled) {
17851785
repositories.push(...(await this.githubAppSupport.getProviderRepositoriesForUser({ user, ...params })));
17861786
} else if (provider?.authProviderType === "GitHub") {
17871787
const hostContext = this.hostContextProvider.get(providerHost);

components/server/src/auth/rate-limiter.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@ function getConfig(config: RateLimiterConfig): RateLimiterConfig {
121121
generateNewGitpodToken: { group: "default", points: 1 },
122122
deleteGitpodToken: { group: "default", points: 1 },
123123
sendFeedback: { group: "default", points: 1 },
124+
isGitHubAppEnabled: { group: "default", points: 1 },
124125
registerGithubApp: { group: "default", points: 1 },
125126
takeSnapshot: { group: "default", points: 1 },
126127
waitForSnapshot: { group: "default", points: 1 },

components/server/src/projects/projects-service.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
import { inject, injectable } from "inversify";
88
import { DBWithTracing, ProjectDB, TeamDB, TracedWorkspaceDB, UserDB, WorkspaceDB } from "@gitpod/gitpod-db/lib";
99
import {
10-
AuthProviderInfo,
1110
Branch,
1211
PrebuildWithStatus,
1312
CreateProjectParams,
@@ -20,6 +19,7 @@ import { HostContextProvider } from "../auth/host-context-provider";
2019
import { RepoURL } from "../repohost";
2120
import { log } from "@gitpod/gitpod-protocol/lib/util/logging";
2221
import { PartialProject, ProjectUsage } from "@gitpod/gitpod-protocol/src/teams-projects-protocol";
22+
import { Config } from "../config";
2323

2424
@injectable()
2525
export class ProjectsService {
@@ -28,6 +28,7 @@ export class ProjectsService {
2828
@inject(UserDB) protected readonly userDB: UserDB;
2929
@inject(TracedWorkspaceDB) protected readonly workspaceDb: DBWithTracing<WorkspaceDB>;
3030
@inject(HostContextProvider) protected readonly hostContextProvider: HostContextProvider;
31+
@inject(Config) protected readonly config: Config;
3132

3233
async getProject(projectId: string): Promise<Project | undefined> {
3334
return this.projectDB.findProjectById(projectId);
@@ -154,7 +155,7 @@ export class ProjectsService {
154155
type === "GitLab" ||
155156
type === "Bitbucket" ||
156157
type === "BitbucketServer" ||
157-
AuthProviderInfo.isGitHubEnterprise(authProvider)
158+
(type === "GitHub" && (authProvider?.host !== "github.com" || !this.config.githubApp?.enabled))
158159
) {
159160
const repositoryService = hostContext?.services?.repositoryService;
160161
if (repositoryService) {

components/server/src/workspace/gitpod-server-impl.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1710,6 +1710,11 @@ export class GitpodServerImpl implements GitpodServerWithTracing, Disposable {
17101710
throw new ResponseError(ErrorCodes.EE_FEATURE, "Sending feedback is not implemented");
17111711
}
17121712

1713+
async isGitHubAppEnabled(ctx: TraceContext): Promise<boolean> {
1714+
this.checkAndBlockUser();
1715+
return !!this.config.githubApp?.enabled;
1716+
}
1717+
17131718
async registerGithubApp(ctx: TraceContext, installationId: string): Promise<void> {
17141719
traceAPIParams(ctx, { installationId });
17151720

0 commit comments

Comments
 (0)