143 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			143 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package swaggerui_handler
 | |
| 
 | |
| import (
 | |
| 	"embed"
 | |
| 	"html/template"
 | |
| 	"net/http"
 | |
| 	"path"
 | |
| 	"reflect"
 | |
| )
 | |
| 
 | |
| //go:embed *.js *.css *.html *.png
 | |
| var assets embed.FS
 | |
| 
 | |
| var (
 | |
| 	Handler = func(prefix string) http.HandlerFunc {
 | |
| 		return func(w http.ResponseWriter, r *http.Request) {
 | |
| 			if r.Method != http.MethodGet || path.Base(r.URL.Path) != "swagger-initializer.js" {
 | |
| 				http.StripPrefix(prefix, http.FileServer(http.FS(assets))).ServeHTTP(w, r)
 | |
| 				return
 | |
| 			}
 | |
| 			tpl := template.New("swagger-initializer.js").Funcs(TemplateFuncs)
 | |
| 			ptpl, err := tpl.Parse(Template)
 | |
| 			if err != nil {
 | |
| 				w.WriteHeader(http.StatusInternalServerError)
 | |
| 				_, _ = w.Write([]byte(err.Error()))
 | |
| 				return
 | |
| 			}
 | |
| 			if err := ptpl.Execute(w, Config); err != nil {
 | |
| 				w.WriteHeader(http.StatusInternalServerError)
 | |
| 				_, _ = w.Write([]byte(err.Error()))
 | |
| 				return
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 	TemplateFuncs = template.FuncMap{
 | |
| 		"isInt": func(i interface{}) bool {
 | |
| 			v := reflect.ValueOf(i)
 | |
| 			switch v.Kind() {
 | |
| 			case reflect.Int, reflect.Int8, reflect.Int32, reflect.Int64, reflect.Uint, reflect.Uint8, reflect.Uint32, reflect.Uint64, reflect.Float32, reflect.Float64:
 | |
| 				return true
 | |
| 			default:
 | |
| 				return false
 | |
| 			}
 | |
| 		},
 | |
| 		"isBool": func(i interface{}) bool {
 | |
| 			v := reflect.ValueOf(i)
 | |
| 			switch v.Kind() {
 | |
| 			case reflect.Bool:
 | |
| 				return true
 | |
| 			default:
 | |
| 				return false
 | |
| 			}
 | |
| 		},
 | |
| 		"isString": func(i interface{}) bool {
 | |
| 			v := reflect.ValueOf(i)
 | |
| 			switch v.Kind() {
 | |
| 			case reflect.String:
 | |
| 				return true
 | |
| 			default:
 | |
| 				return false
 | |
| 			}
 | |
| 		},
 | |
| 		"isSlice": func(i interface{}) bool {
 | |
| 			v := reflect.ValueOf(i)
 | |
| 			switch v.Kind() {
 | |
| 			case reflect.Slice:
 | |
| 				return true
 | |
| 			default:
 | |
| 				return false
 | |
| 			}
 | |
| 		},
 | |
| 		"isMap": func(i interface{}) bool {
 | |
| 			v := reflect.ValueOf(i)
 | |
| 			switch v.Kind() {
 | |
| 			case reflect.Map:
 | |
| 				return true
 | |
| 			default:
 | |
| 				return false
 | |
| 			}
 | |
| 		},
 | |
| 	}
 | |
| 	Template = `
 | |
| 	window.onload = function() {
 | |
| 		//<editor-fold desc="Changeable Configuration Block">
 | |
| 	
 | |
| 		window.ui = SwaggerUIBundle({
 | |
| 			{{- range $k, $v := . }}
 | |
| 			{{- if (eq (printf "%s" $v) "") -}}
 | |
| 			{{- continue -}}
 | |
| 			{{ end }}
 | |
| 			{{ $k }}: {{ if isBool $v -}}
 | |
| 			{{- $v -}},
 | |
| 			{{- else if isInt $v -}}
 | |
|       {{- $v -}},
 | |
| 			{{- else if isString $v -}}
 | |
| 			"{{- $v -}}",
 | |
| 			{{- else if and (isSlice $v) (or (eq (printf "%s" $k) "presets") (eq (printf "%s" $k) "plugins")) -}}
 | |
| 			[
 | |
| 			{{- range $v }}
 | |
| 				{{ . }},
 | |
| 			{{- end }}
 | |
| 			],
 | |
| 			{{- end -}} 
 | |
| 			{{ end }}
 | |
| 		});
 | |
| 	
 | |
| 		//</editor-fold>
 | |
| 	};`
 | |
| 	Config = map[string]interface{}{
 | |
| 		"configUrl": "",
 | |
| 		"dom_id":    "#swagger-ui",
 | |
| 		/*
 | |
| 				"domNode":     "",
 | |
| 			  "spec":        "",
 | |
| 				"urls": []interface{}{
 | |
| 					map[string]interface{}{
 | |
| 							"url":  "",
 | |
| 							"name": "",
 | |
| 						},
 | |
| 					},
 | |
| 				},
 | |
| 		*/
 | |
| 		"url":                      "https://petstore.swagger.io/v2/swagger.json",
 | |
| 		"deepLinking":              true,
 | |
| 		"displayOperationId":       false,
 | |
| 		"defaultModelsExpandDepth": 1,
 | |
| 		"defaultModelExpandDepth":  1,
 | |
| 		"displayRequestDuration":   true,
 | |
| 		"filter":                   true,
 | |
| 		"operationsSorter":         "alpha",
 | |
| 		"showExtensions":           true,
 | |
| 		"tryItOutEnabled":          true,
 | |
| 		"presets": []string{
 | |
| 			"SwaggerUIBundle.presets.apis",
 | |
| 			"SwaggerUIStandalonePreset",
 | |
| 		},
 | |
| 		"plugins": []string{
 | |
| 			"SwaggerUIBundle.plugins.DownloadUrl",
 | |
| 		},
 | |
| 		"layout": "StandaloneLayout",
 | |
| 	}
 | |
| )
 |