github.com/percona-lab/go-swagger@v0.19.0/generator/templates/server/configureapi.gotmpl (about) 1 // This file is safe to edit. Once it exists it will not be overwritten 2 3 {{ if .Copyright -}}// {{ comment .Copyright -}}{{ end }} 4 5 6 package {{ .APIPackage }} 7 8 import ( 9 "context" 10 "crypto/tls" 11 "net/http" 12 "log" 13 14 errors "github.com/go-openapi/errors" 15 runtime "github.com/go-openapi/runtime" 16 middleware "github.com/go-openapi/runtime/middleware" 17 security "github.com/go-openapi/runtime/security" 18 19 {{range .DefaultImports}}{{printf "%q" .}} 20 {{end}} 21 {{range $key, $value := .Imports}}{{$key}} {{ printf "%q" $value}} 22 {{end}} 23 ) 24 {{ $package := .Package }} 25 26 {{ with .GenOpts }} 27 //go:generate swagger generate server --target {{ .TargetPath }} --name {{ .Name }} --spec {{ .SpecPath }} 28 {{- if .APIPackage }}{{ if ne .APIPackage "operations" }} --api-package {{ .APIPackage }}{{ end }}{{ end }} 29 {{- if .ModelPackage }}{{ if ne .ModelPackage "models" }} --model-package {{ .ModelPackage }}{{ end }}{{ end }} 30 {{- if .ServerPackage }}{{ if ne .ServerPackage "restapi"}} --server-package {{ .ServerPackage }}{{ end }}{{ end }} 31 {{- if .ClientPackage }}{{ if ne .ClientPackage "client" }} --client-package {{ .ClientPackage }}{{ end }}{{ end }} 32 {{- if .TemplateDir }} --template-dir {{ .TemplateDir }}{{ end }} 33 {{- range .Operations }} --operation {{ . }}{{ end }} 34 {{- range .Tags }} --tags {{ . }}{{ end }} 35 {{- if .Principal }} --principal {{ .Principal }}{{ end }} 36 {{- if .DefaultScheme }}{{ if ne .DefaultScheme "http" }} --default-scheme {{ .DefaultScheme }}{{ end }}{{ end }} 37 {{- range .Models }} --model {{ . }}{{ end }} 38 {{- if or (not .IncludeModel) (not .IncludeValidator) }} --skip-models{{ end }} 39 {{- if or (not .IncludeHandler) (not .IncludeParameters ) (not .IncludeResponses) }} --skip-operations{{ end }} 40 {{- if not .IncludeSupport }} --skip-support{{ end }} 41 {{- if not .IncludeMain }} --exclude-main{{ end }} 42 {{- if .ExcludeSpec }} --exclude-spec{{ end }} 43 {{- if .DumpData }} --dump-data{{ end }} 44 {{ end }} 45 func configureFlags(api *{{.Package}}.{{ pascalize .Name }}API) { 46 // api.CommandLineOptionsGroups = []swag.CommandLineOptionsGroup{ ... } 47 } 48 49 func configureAPI(api *{{.Package}}.{{ pascalize .Name }}API) http.Handler { 50 // configure the api here 51 api.ServeError = errors.ServeError 52 53 // Set your custom logger if needed. Default one is log.Printf 54 // Expected interface func(string, ...interface{}) 55 // 56 // Example: 57 // api.Logger = log.Printf 58 59 {{ range .Consumes }}{{ if .Implementation }}api.{{ pascalize .Name }}Consumer = {{ .Implementation }} 60 {{else}}api.{{ pascalize .Name }}Consumer = runtime.ConsumerFunc(func(r io.Reader, target interface{}) error { 61 return errors.NotImplemented("{{.Name}} consumer has not yet been implemented") 62 }){{end}} 63 {{end}} 64 {{ range .Produces }}{{ if .Implementation }}api.{{ pascalize .Name }}Producer = {{ .Implementation }} 65 {{else}}api.{{ pascalize .Name }}Producer = runtime.ProducerFunc(func(w io.Writer, data interface{}) error { 66 return errors.NotImplemented("{{.Name}} producer has not yet been implemented") 67 }){{end}} 68 {{end}} 69 {{ range .SecurityDefinitions }} 70 {{- if .IsBasicAuth }} 71 // Applies when the Authorization header is set with the Basic scheme 72 api.{{ pascalize .ID }}Auth = func(user string, pass string) ({{if not ( eq .Principal "interface{}" )}}*{{ end }}{{.Principal}}, error) { 73 return nil, errors.NotImplemented("basic auth ({{ .ID }}) has not yet been implemented") 74 } 75 {{- else if .IsAPIKeyAuth }} 76 // Applies when the "{{ .Name }}" {{ .Source }} is set 77 api.{{ pascalize .ID }}Auth = func(token string) ({{if not ( eq .Principal "interface{}" )}}*{{ end }}{{.Principal}}, error) { 78 return nil, errors.NotImplemented("api key auth ({{ .ID }}) {{.Name}} from {{.Source}} param [{{ .Name }}] has not yet been implemented") 79 } 80 {{- else if .IsOAuth2 }} 81 api.{{ pascalize .ID }}Auth = func(token string, scopes []string) ({{if not ( eq .Principal "interface{}" )}}*{{ end }}{{.Principal}}, error) { 82 return nil, errors.NotImplemented("oauth2 bearer auth ({{ .ID }}) has not yet been implemented") 83 } 84 {{- end }} 85 {{- end }} 86 {{- if .SecurityDefinitions }} 87 88 // Set your custom authorizer if needed. Default one is security.Authorized() 89 // Expected interface runtime.Authorizer 90 // 91 // Example: 92 // api.APIAuthorizer = security.Authorized() 93 {{- end }} 94 {{range .Operations}}if api.{{if ne .Package $package}}{{pascalize .Package}}{{end}}{{ pascalize .Name }}Handler == nil { 95 api.{{if ne .Package $package}}{{pascalize .Package}}{{end}}{{ pascalize .Name }}Handler = {{.Package}}.{{ pascalize .Name }}HandlerFunc(func(params {{.Package}}.{{ pascalize .Name }}Params{{if .Authorized}}, principal {{if not ( eq .Principal "interface{}" )}}*{{ end }}{{.Principal}}{{end}}) middleware.Responder { 96 return middleware.NotImplemented("operation {{if ne .Package $package}}{{ .Package}}{{end}}.{{pascalize .Name}} has not yet been implemented") 97 }) 98 } 99 {{end}} 100 101 api.ServerShutdown = func() { } 102 103 return setupGlobalMiddleware(api.Serve(setupMiddlewares)) 104 } 105 106 // The TLS configuration before HTTPS server starts. 107 func configureTLS(tlsConfig *tls.Config) { 108 // Make all necessary changes to the TLS configuration here. 109 } 110 111 // As soon as server is initialized but not run yet, this function will be called. 112 // If you need to modify a config, store server instance to stop it individually later, this is the place. 113 // This function can be called multiple times, depending on the number of serving schemes. 114 // scheme value will be set accordingly: "http", "https" or "unix" 115 func configureServer(s *http.Server, scheme, addr string) { 116 } 117 118 // The middleware configuration is for the handler executors. These do not apply to the swagger.json document. 119 // The middleware executes after routing but before authentication, binding and validation 120 func setupMiddlewares(handler http.Handler) http.Handler { 121 return handler 122 } 123 124 // The middleware configuration happens before anything, this middleware also applies to serving the swagger.json document. 125 // So this is a good place to plug in a panic handling middleware, logging and metrics 126 func setupGlobalMiddleware(handler http.Handler) http.Handler { 127 return handler 128 }