package playground import ( "html/template" "net/http" "net/url" ) var page = template.Must(template.New("graphiql").Parse(` {{.title}}
Loading...
`)) // Handler responsible for setting up the playground func Handler(title string, endpoint string) http.HandlerFunc { return HandlerWithHeaders(title, endpoint, nil, nil) } // HandlerWithHeaders sets up the playground. // fetcherHeaders are used by the playground's fetcher instance and will not be visible in the UI. // uiHeaders are default headers that will show up in the UI headers editor. func HandlerWithHeaders(title string, endpoint string, fetcherHeaders map[string]string, uiHeaders map[string]string) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { w.Header().Add("Content-Type", "text/html; charset=UTF-8") err := page.Execute(w, map[string]interface{}{ "title": title, "endpoint": endpoint, "fetcherHeaders": fetcherHeaders, "uiHeaders": uiHeaders, "endpointIsAbsolute": endpointHasScheme(endpoint), "subscriptionEndpoint": getSubscriptionEndpoint(endpoint), "version": "3.0.6", "cssSRI": "sha256-wTzfn13a+pLMB5rMeysPPR1hO7x0SwSeQI+cnw7VdbE=", "jsSRI": "sha256-eNxH+Ah7Z9up9aJYTQycgyNuy953zYZwE9Rqf5rH+r4=", "reactSRI": "sha256-S0lp+k7zWUMk2ixteM6HZvu8L9Eh//OVrt+ZfbCpmgY=", "reactDOMSRI": "sha256-IXWO0ITNDjfnNXIu5POVfqlgYoop36bDzhodR6LW5Pc=", }) if err != nil { panic(err) } } } // endpointHasScheme checks if the endpoint has a scheme. func endpointHasScheme(endpoint string) bool { u, err := url.Parse(endpoint) return err == nil && u.Scheme != "" } // getSubscriptionEndpoint returns the subscription endpoint for the given // endpoint if it is parsable as a URL, or an empty string. func getSubscriptionEndpoint(endpoint string) string { u, err := url.Parse(endpoint) if err != nil { return "" } switch u.Scheme { case "https": u.Scheme = "wss" default: u.Scheme = "ws" } return u.String() }