mirror of
				https://github.com/juanfont/headscale.git
				synced 2025-11-04 10:01:05 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			70 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package headscale
 | 
						|
 | 
						|
import (
 | 
						|
	"bytes"
 | 
						|
	_ "embed"
 | 
						|
	"html/template"
 | 
						|
	"net/http"
 | 
						|
 | 
						|
	"github.com/gin-gonic/gin"
 | 
						|
	"github.com/rs/zerolog/log"
 | 
						|
)
 | 
						|
 | 
						|
//go:embed gen/openapiv2/headscale/v1/headscale.swagger.json
 | 
						|
var apiV1JSON []byte
 | 
						|
 | 
						|
func SwaggerUI(ctx *gin.Context) {
 | 
						|
	swaggerTemplate := template.Must(template.New("swagger").Parse(`
 | 
						|
<html>
 | 
						|
	<head>
 | 
						|
	<link rel="stylesheet" type="text/css" href="https://unpkg.com/swagger-ui-dist@3/swagger-ui.css">
 | 
						|
 | 
						|
	<script src="https://unpkg.com/swagger-ui-dist@3/swagger-ui-standalone-preset.js"></script>
 | 
						|
	<script src="https://unpkg.com/swagger-ui-dist@3/swagger-ui-bundle.js" charset="UTF-8"></script>
 | 
						|
	</head>
 | 
						|
	<body>
 | 
						|
	<div id="swagger-ui"></div>
 | 
						|
	<script>
 | 
						|
		window.addEventListener('load', (event) => {
 | 
						|
			const ui = SwaggerUIBundle({
 | 
						|
			    url: "/swagger/v1/openapiv2.json",
 | 
						|
			    dom_id: '#swagger-ui',
 | 
						|
			    presets: [
 | 
						|
			      SwaggerUIBundle.presets.apis,
 | 
						|
			      SwaggerUIBundle.SwaggerUIStandalonePreset
 | 
						|
			    ],
 | 
						|
				plugins: [
 | 
						|
                	SwaggerUIBundle.plugins.DownloadUrl
 | 
						|
            	],
 | 
						|
				deepLinking: true,
 | 
						|
				// TODO(kradalby): Figure out why this does not work
 | 
						|
				// layout: "StandaloneLayout",
 | 
						|
			  })
 | 
						|
			window.ui = ui
 | 
						|
		});
 | 
						|
	</script>
 | 
						|
	</body>
 | 
						|
</html>`))
 | 
						|
 | 
						|
	var payload bytes.Buffer
 | 
						|
	if err := swaggerTemplate.Execute(&payload, struct{}{}); err != nil {
 | 
						|
		log.Error().
 | 
						|
			Caller().
 | 
						|
			Err(err).
 | 
						|
			Msg("Could not render Swagger")
 | 
						|
		ctx.Data(
 | 
						|
			http.StatusInternalServerError,
 | 
						|
			"text/html; charset=utf-8",
 | 
						|
			[]byte("Could not render Swagger"),
 | 
						|
		)
 | 
						|
 | 
						|
		return
 | 
						|
	}
 | 
						|
 | 
						|
	ctx.Data(http.StatusOK, "text/html; charset=utf-8", payload.Bytes())
 | 
						|
}
 | 
						|
 | 
						|
func SwaggerAPIv1(ctx *gin.Context) {
 | 
						|
	ctx.Data(http.StatusOK, "application/json; charset=utf-8", apiV1JSON)
 | 
						|
}
 |