Skip to content

Commit

Permalink
When authority is ghe.com, don't probe API to determine if enterprise (
Browse files Browse the repository at this point in the history
  • Loading branch information
alexr00 authored Sep 25, 2024
1 parent 1066de6 commit 6e3eed5
Showing 1 changed file with 11 additions and 7 deletions.
18 changes: 11 additions & 7 deletions src/authentication/githubServer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,9 @@ import { HostHelper } from './configuration';

export class GitHubManager {
private static readonly _githubDotComServers = new Set<string>().add('github.com').add('ssh.github.com');
private static readonly _gheServers = new Set<string>().add('ghe.com');
private static readonly _neverGitHubServers = new Set<string>().add('bitbucket.org').add('gitlab.com');
private _servers: Map<string, GitHubServerType> = new Map(Array.from(GitHubManager._githubDotComServers.keys()).map(key => [key, GitHubServerType.GitHubDotCom]));
private _knownServers: Map<string, GitHubServerType> = new Map([...Array.from(GitHubManager._githubDotComServers.keys()).map(key => [key, GitHubServerType.GitHubDotCom]), ...Array.from(GitHubManager._gheServers.keys()).map(key => [key, GitHubServerType.Enterprise])] as [string, GitHubServerType][]);

public static isGithubDotCom(host: string): boolean {
return this._githubDotComServers.has(host);
Expand All @@ -28,23 +29,26 @@ export class GitHubManager {
if (host === null) {
return GitHubServerType.None;
}
const authority = host.authority.toLowerCase();

// .wiki/.git repos are not supported
if (host.path.endsWith('.wiki') || host.authority.match(/gist[.]github[.]com/)) {
if (host.path.endsWith('.wiki') || authority.match(/gist[.]github[.]com/)) {
return GitHubServerType.None;
}

if (GitHubManager.isGithubDotCom(host.authority)) {
if (GitHubManager.isGithubDotCom(authority)) {
return GitHubServerType.GitHubDotCom;
}

const matchingKnownServer = Array.from(this._knownServers.keys()).find(server => authority.endsWith(server));

const knownEnterprise = getEnterpriseUri();
if ((host.authority.toLowerCase() === knownEnterprise?.authority.toLowerCase()) && (!this._servers.has(host.authority) || (this._servers.get(host.authority) === GitHubServerType.None))) {
if ((host.authority.toLowerCase() === knownEnterprise?.authority.toLowerCase()) && (!matchingKnownServer || (this._knownServers.get(matchingKnownServer) === GitHubServerType.None))) {
return GitHubServerType.Enterprise;
}

if (this._servers.has(host.authority)) {
return this._servers.get(host.authority) ?? GitHubServerType.None;
if (matchingKnownServer) {
return this._knownServers.get(matchingKnownServer) ?? GitHubServerType.None;
}

const [uri, options] = await GitHubManager.getOptions(host, 'HEAD', '/rate_limit');
Expand Down Expand Up @@ -85,7 +89,7 @@ export class GitHubManager {
return isGitHub;
} finally {
Logger.debug(`Host ${host} is associated with GitHub: ${isGitHub}`, 'GitHubServer');
this._servers.set(host.authority, isGitHub);
this._knownServers.set(authority, isGitHub);
}
}

Expand Down

0 comments on commit 6e3eed5

Please sign in to comment.