mirror of
				https://github.com/juanfont/headscale.git
				synced 2025-10-28 10:51:44 +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)
 | |
| }
 |