github.com/circl-dev/go-swagger@v0.31.0/examples/file-server/restapi/operations/file_upload_api.go (about)

     1  // Code generated by go-swagger; DO NOT EDIT.
     2  
     3  package operations
     4  
     5  // This file was generated by the swagger tool.
     6  // Editing this file might prove futile when you re-run the swagger generate command
     7  
     8  import (
     9  	"fmt"
    10  	"net/http"
    11  	"strings"
    12  
    13  	"github.com/go-openapi/errors"
    14  	"github.com/go-openapi/strfmt"
    15  	"github.com/go-openapi/swag"
    16  	"github.com/circl-dev/runtime"
    17  	"github.com/circl-dev/runtime/middleware"
    18  	"github.com/circl-dev/runtime/security"
    19  	"github.com/circl-dev/spec"
    20  	"github.com/circl-dev/loads"
    21  
    22  	"github.com/circl-dev/go-swagger/examples/file-server/restapi/operations/uploads"
    23  )
    24  
    25  // NewFileUploadAPI creates a new FileUpload instance
    26  func NewFileUploadAPI(spec *loads.Document) *FileUploadAPI {
    27  	return &FileUploadAPI{
    28  		handlers:            make(map[string]map[string]http.Handler),
    29  		formats:             strfmt.Default,
    30  		defaultConsumes:     "application/json",
    31  		defaultProduces:     "application/json",
    32  		customConsumers:     make(map[string]runtime.Consumer),
    33  		customProducers:     make(map[string]runtime.Producer),
    34  		PreServerShutdown:   func() {},
    35  		ServerShutdown:      func() {},
    36  		spec:                spec,
    37  		useSwaggerUI:        false,
    38  		ServeError:          errors.ServeError,
    39  		BasicAuthenticator:  security.BasicAuth,
    40  		APIKeyAuthenticator: security.APIKeyAuth,
    41  		BearerAuthenticator: security.BearerAuth,
    42  
    43  		JSONConsumer:          runtime.JSONConsumer(),
    44  		MultipartformConsumer: runtime.DiscardConsumer,
    45  
    46  		JSONProducer: runtime.JSONProducer(),
    47  
    48  		UploadsUploadFileHandler: uploads.UploadFileHandlerFunc(func(params uploads.UploadFileParams) middleware.Responder {
    49  			return middleware.NotImplemented("operation uploads.UploadFile has not yet been implemented")
    50  		}),
    51  	}
    52  }
    53  
    54  /*FileUploadAPI Example server uploading a file */
    55  type FileUploadAPI struct {
    56  	spec            *loads.Document
    57  	context         *middleware.Context
    58  	handlers        map[string]map[string]http.Handler
    59  	formats         strfmt.Registry
    60  	customConsumers map[string]runtime.Consumer
    61  	customProducers map[string]runtime.Producer
    62  	defaultConsumes string
    63  	defaultProduces string
    64  	Middleware      func(middleware.Builder) http.Handler
    65  	useSwaggerUI    bool
    66  
    67  	// BasicAuthenticator generates a runtime.Authenticator from the supplied basic auth function.
    68  	// It has a default implementation in the security package, however you can replace it for your particular usage.
    69  	BasicAuthenticator func(security.UserPassAuthentication) runtime.Authenticator
    70  
    71  	// APIKeyAuthenticator generates a runtime.Authenticator from the supplied token auth function.
    72  	// It has a default implementation in the security package, however you can replace it for your particular usage.
    73  	APIKeyAuthenticator func(string, string, security.TokenAuthentication) runtime.Authenticator
    74  
    75  	// BearerAuthenticator generates a runtime.Authenticator from the supplied bearer token auth function.
    76  	// It has a default implementation in the security package, however you can replace it for your particular usage.
    77  	BearerAuthenticator func(string, security.ScopedTokenAuthentication) runtime.Authenticator
    78  
    79  	// JSONConsumer registers a consumer for the following mime types:
    80  	//   - application/json
    81  	JSONConsumer runtime.Consumer
    82  	// MultipartformConsumer registers a consumer for the following mime types:
    83  	//   - multipart/form-data
    84  	MultipartformConsumer runtime.Consumer
    85  
    86  	// JSONProducer registers a producer for the following mime types:
    87  	//   - application/json
    88  	JSONProducer runtime.Producer
    89  
    90  	// UploadsUploadFileHandler sets the operation handler for the upload file operation
    91  	UploadsUploadFileHandler uploads.UploadFileHandler
    92  
    93  	// ServeError is called when an error is received, there is a default handler
    94  	// but you can set your own with this
    95  	ServeError func(http.ResponseWriter, *http.Request, error)
    96  
    97  	// PreServerShutdown is called before the HTTP(S) server is shutdown
    98  	// This allows for custom functions to get executed before the HTTP(S) server stops accepting traffic
    99  	PreServerShutdown func()
   100  
   101  	// ServerShutdown is called when the HTTP(S) server is shut down and done
   102  	// handling all active connections and does not accept connections any more
   103  	ServerShutdown func()
   104  
   105  	// Custom command line argument groups with their descriptions
   106  	CommandLineOptionsGroups []swag.CommandLineOptionsGroup
   107  
   108  	// User defined logger function.
   109  	Logger func(string, ...interface{})
   110  }
   111  
   112  // UseRedoc for documentation at /docs
   113  func (o *FileUploadAPI) UseRedoc() {
   114  	o.useSwaggerUI = false
   115  }
   116  
   117  // UseSwaggerUI for documentation at /docs
   118  func (o *FileUploadAPI) UseSwaggerUI() {
   119  	o.useSwaggerUI = true
   120  }
   121  
   122  // SetDefaultProduces sets the default produces media type
   123  func (o *FileUploadAPI) SetDefaultProduces(mediaType string) {
   124  	o.defaultProduces = mediaType
   125  }
   126  
   127  // SetDefaultConsumes returns the default consumes media type
   128  func (o *FileUploadAPI) SetDefaultConsumes(mediaType string) {
   129  	o.defaultConsumes = mediaType
   130  }
   131  
   132  // SetSpec sets a spec that will be served for the clients.
   133  func (o *FileUploadAPI) SetSpec(spec *loads.Document) {
   134  	o.spec = spec
   135  }
   136  
   137  // DefaultProduces returns the default produces media type
   138  func (o *FileUploadAPI) DefaultProduces() string {
   139  	return o.defaultProduces
   140  }
   141  
   142  // DefaultConsumes returns the default consumes media type
   143  func (o *FileUploadAPI) DefaultConsumes() string {
   144  	return o.defaultConsumes
   145  }
   146  
   147  // Formats returns the registered string formats
   148  func (o *FileUploadAPI) Formats() strfmt.Registry {
   149  	return o.formats
   150  }
   151  
   152  // RegisterFormat registers a custom format validator
   153  func (o *FileUploadAPI) RegisterFormat(name string, format strfmt.Format, validator strfmt.Validator) {
   154  	o.formats.Add(name, format, validator)
   155  }
   156  
   157  // Validate validates the registrations in the FileUploadAPI
   158  func (o *FileUploadAPI) Validate() error {
   159  	var unregistered []string
   160  
   161  	if o.JSONConsumer == nil {
   162  		unregistered = append(unregistered, "JSONConsumer")
   163  	}
   164  	if o.MultipartformConsumer == nil {
   165  		unregistered = append(unregistered, "MultipartformConsumer")
   166  	}
   167  
   168  	if o.JSONProducer == nil {
   169  		unregistered = append(unregistered, "JSONProducer")
   170  	}
   171  
   172  	if o.UploadsUploadFileHandler == nil {
   173  		unregistered = append(unregistered, "uploads.UploadFileHandler")
   174  	}
   175  
   176  	if len(unregistered) > 0 {
   177  		return fmt.Errorf("missing registration: %s", strings.Join(unregistered, ", "))
   178  	}
   179  
   180  	return nil
   181  }
   182  
   183  // ServeErrorFor gets a error handler for a given operation id
   184  func (o *FileUploadAPI) ServeErrorFor(operationID string) func(http.ResponseWriter, *http.Request, error) {
   185  	return o.ServeError
   186  }
   187  
   188  // AuthenticatorsFor gets the authenticators for the specified security schemes
   189  func (o *FileUploadAPI) AuthenticatorsFor(schemes map[string]spec.SecurityScheme) map[string]runtime.Authenticator {
   190  	return nil
   191  }
   192  
   193  // Authorizer returns the registered authorizer
   194  func (o *FileUploadAPI) Authorizer() runtime.Authorizer {
   195  	return nil
   196  }
   197  
   198  // ConsumersFor gets the consumers for the specified media types.
   199  // MIME type parameters are ignored here.
   200  func (o *FileUploadAPI) ConsumersFor(mediaTypes []string) map[string]runtime.Consumer {
   201  	result := make(map[string]runtime.Consumer, len(mediaTypes))
   202  	for _, mt := range mediaTypes {
   203  		switch mt {
   204  		case "application/json":
   205  			result["application/json"] = o.JSONConsumer
   206  		case "multipart/form-data":
   207  			result["multipart/form-data"] = o.MultipartformConsumer
   208  		}
   209  
   210  		if c, ok := o.customConsumers[mt]; ok {
   211  			result[mt] = c
   212  		}
   213  	}
   214  	return result
   215  }
   216  
   217  // ProducersFor gets the producers for the specified media types.
   218  // MIME type parameters are ignored here.
   219  func (o *FileUploadAPI) ProducersFor(mediaTypes []string) map[string]runtime.Producer {
   220  	result := make(map[string]runtime.Producer, len(mediaTypes))
   221  	for _, mt := range mediaTypes {
   222  		switch mt {
   223  		case "application/json":
   224  			result["application/json"] = o.JSONProducer
   225  		}
   226  
   227  		if p, ok := o.customProducers[mt]; ok {
   228  			result[mt] = p
   229  		}
   230  	}
   231  	return result
   232  }
   233  
   234  // HandlerFor gets a http.Handler for the provided operation method and path
   235  func (o *FileUploadAPI) HandlerFor(method, path string) (http.Handler, bool) {
   236  	if o.handlers == nil {
   237  		return nil, false
   238  	}
   239  	um := strings.ToUpper(method)
   240  	if _, ok := o.handlers[um]; !ok {
   241  		return nil, false
   242  	}
   243  	if path == "/" {
   244  		path = ""
   245  	}
   246  	h, ok := o.handlers[um][path]
   247  	return h, ok
   248  }
   249  
   250  // Context returns the middleware context for the file upload API
   251  func (o *FileUploadAPI) Context() *middleware.Context {
   252  	if o.context == nil {
   253  		o.context = middleware.NewRoutableContext(o.spec, o, nil)
   254  	}
   255  
   256  	return o.context
   257  }
   258  
   259  func (o *FileUploadAPI) initHandlerCache() {
   260  	o.Context() // don't care about the result, just that the initialization happened
   261  	if o.handlers == nil {
   262  		o.handlers = make(map[string]map[string]http.Handler)
   263  	}
   264  
   265  	if o.handlers["POST"] == nil {
   266  		o.handlers["POST"] = make(map[string]http.Handler)
   267  	}
   268  	o.handlers["POST"]["/upload"] = uploads.NewUploadFile(o.context, o.UploadsUploadFileHandler)
   269  }
   270  
   271  // Serve creates a http handler to serve the API over HTTP
   272  // can be used directly in http.ListenAndServe(":8000", api.Serve(nil))
   273  func (o *FileUploadAPI) Serve(builder middleware.Builder) http.Handler {
   274  	o.Init()
   275  
   276  	if o.Middleware != nil {
   277  		return o.Middleware(builder)
   278  	}
   279  	if o.useSwaggerUI {
   280  		return o.context.APIHandlerSwaggerUI(builder)
   281  	}
   282  	return o.context.APIHandler(builder)
   283  }
   284  
   285  // Init allows you to just initialize the handler cache, you can then recompose the middleware as you see fit
   286  func (o *FileUploadAPI) Init() {
   287  	if len(o.handlers) == 0 {
   288  		o.initHandlerCache()
   289  	}
   290  }
   291  
   292  // RegisterConsumer allows you to add (or override) a consumer for a media type.
   293  func (o *FileUploadAPI) RegisterConsumer(mediaType string, consumer runtime.Consumer) {
   294  	o.customConsumers[mediaType] = consumer
   295  }
   296  
   297  // RegisterProducer allows you to add (or override) a producer for a media type.
   298  func (o *FileUploadAPI) RegisterProducer(mediaType string, producer runtime.Producer) {
   299  	o.customProducers[mediaType] = producer
   300  }
   301  
   302  // AddMiddlewareFor adds a http middleware to existing handler
   303  func (o *FileUploadAPI) AddMiddlewareFor(method, path string, builder middleware.Builder) {
   304  	um := strings.ToUpper(method)
   305  	if path == "/" {
   306  		path = ""
   307  	}
   308  	o.Init()
   309  	if h, ok := o.handlers[um][path]; ok {
   310  		o.handlers[method][path] = builder(h)
   311  	}
   312  }