MCPcopy
hub / github.com/github/github-mcp-server / newGHESHost

Function newGHESHost

pkg/utils/api.go:142–198  ·  view source on GitHub ↗
(hostname string)

Source from the content-addressed store, hash-verified

140}
141
142func newGHESHost(hostname string) (APIHost, error) {
143 u, err := url.Parse(hostname)
144 if err != nil {
145 return APIHost{}, fmt.Errorf("failed to parse GHES URL: %w", err)
146 }
147
148 restURL, err := url.Parse(fmt.Sprintf("%s://%s/api/v3/", u.Scheme, u.Hostname()))
149 if err != nil {
150 return APIHost{}, fmt.Errorf("failed to parse GHES REST URL: %w", err)
151 }
152
153 gqlURL, err := url.Parse(fmt.Sprintf("%s://%s/api/graphql", u.Scheme, u.Hostname()))
154 if err != nil {
155 return APIHost{}, fmt.Errorf("failed to parse GHES GraphQL URL: %w", err)
156 }
157
158 // Check if subdomain isolation is enabled
159 // See https://docs.github.com/en/enterprise-server@3.17/admin/configuring-settings/hardening-security-for-your-enterprise/enabling-subdomain-isolation#about-subdomain-isolation
160 hasSubdomainIsolation := checkSubdomainIsolation(u.Scheme, u.Hostname())
161
162 var uploadURL *url.URL
163 if hasSubdomainIsolation {
164 // With subdomain isolation: https://uploads.hostname/
165 uploadURL, err = url.Parse(fmt.Sprintf("%s://uploads.%s/", u.Scheme, u.Hostname()))
166 } else {
167 // Without subdomain isolation: https://hostname/api/uploads/
168 uploadURL, err = url.Parse(fmt.Sprintf("%s://%s/api/uploads/", u.Scheme, u.Hostname()))
169 }
170 if err != nil {
171 return APIHost{}, fmt.Errorf("failed to parse GHES Upload URL: %w", err)
172 }
173
174 var rawURL *url.URL
175 if hasSubdomainIsolation {
176 // With subdomain isolation: https://raw.hostname/
177 rawURL, err = url.Parse(fmt.Sprintf("%s://raw.%s/", u.Scheme, u.Hostname()))
178 } else {
179 // Without subdomain isolation: https://hostname/raw/
180 rawURL, err = url.Parse(fmt.Sprintf("%s://%s/raw/", u.Scheme, u.Hostname()))
181 }
182 if err != nil {
183 return APIHost{}, fmt.Errorf("failed to parse GHES Raw URL: %w", err)
184 }
185
186 authorizationServerURL, err := url.Parse(fmt.Sprintf("%s://%s/login/oauth", u.Scheme, u.Hostname()))
187 if err != nil {
188 return APIHost{}, fmt.Errorf("failed to parse GHES Authorization Server URL: %w", err)
189 }
190
191 return APIHost{
192 restURL: restURL,
193 gqlURL: gqlURL,
194 uploadURL: uploadURL,
195 rawURL: rawURL,
196 authorizationServerURL: authorizationServerURL,
197 }, nil
198}
199

Callers 1

parseAPIHostFunction · 0.85

Calls 1

checkSubdomainIsolationFunction · 0.85

Tested by

no test coverage detected