本站源代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

63 lines
1.9KB

  1. // Copyright 2015 go-swagger maintainers
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. /*Package middleware provides the library with helper functions for serving swagger APIs.
  15. Pseudo middleware handler
  16. import (
  17. "net/http"
  18. "github.com/go-openapi/errors"
  19. )
  20. func newCompleteMiddleware(ctx *Context) http.Handler {
  21. return http.HandlerFunc(func(rw http.ResponseWriter, r *http.Request) {
  22. // use context to lookup routes
  23. if matched, ok := ctx.RouteInfo(r); ok {
  24. if matched.NeedsAuth() {
  25. if _, err := ctx.Authorize(r, matched); err != nil {
  26. ctx.Respond(rw, r, matched.Produces, matched, err)
  27. return
  28. }
  29. }
  30. bound, validation := ctx.BindAndValidate(r, matched)
  31. if validation != nil {
  32. ctx.Respond(rw, r, matched.Produces, matched, validation)
  33. return
  34. }
  35. result, err := matched.Handler.Handle(bound)
  36. if err != nil {
  37. ctx.Respond(rw, r, matched.Produces, matched, err)
  38. return
  39. }
  40. ctx.Respond(rw, r, matched.Produces, matched, result)
  41. return
  42. }
  43. // Not found, check if it exists in the other methods first
  44. if others := ctx.AllowedMethods(r); len(others) > 0 {
  45. ctx.Respond(rw, r, ctx.spec.RequiredProduces(), nil, errors.MethodNotAllowed(r.Method, others))
  46. return
  47. }
  48. ctx.Respond(rw, r, ctx.spec.RequiredProduces(), nil, errors.NotFound("path %s was not found", r.URL.Path))
  49. })
  50. }
  51. */
  52. package middleware
上海开阖软件有限公司 沪ICP备12045867号-1