base.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package controllers
  2. import (
  3. "github.com/gin-gonic/gin"
  4. "github.com/langgenius/dify-plugin-daemon/internal/server/constants"
  5. "github.com/langgenius/dify-plugin-daemon/internal/types/entities"
  6. "github.com/langgenius/dify-plugin-daemon/internal/types/entities/plugin_entities"
  7. "github.com/langgenius/dify-plugin-daemon/internal/types/validators"
  8. )
  9. func BindRequest[T any](r *gin.Context, success func(T)) {
  10. var request T
  11. if r.Request.Header.Get("Content-Type") == "application/json" {
  12. r.ShouldBindJSON(&request)
  13. } else {
  14. r.ShouldBind(&request)
  15. }
  16. // bind uri
  17. r.ShouldBindUri(&request)
  18. // validate, we have customized some validators which are not supported by gin binding
  19. if err := validators.GlobalEntitiesValidator.Struct(request); err != nil {
  20. resp := entities.NewErrorResponse(-400, err.Error())
  21. r.JSON(400, resp)
  22. return
  23. }
  24. success(request)
  25. }
  26. func BindPluginDispatchRequest[T any](r *gin.Context, success func(
  27. plugin_entities.InvokePluginRequest[T],
  28. )) {
  29. BindRequest(r, func(req plugin_entities.InvokePluginRequest[T]) {
  30. plugin_unique_identifier_any, exists := r.Get(constants.CONTEXT_KEY_PLUGIN_UNIQUE_IDENTIFIER)
  31. if !exists {
  32. resp := entities.NewErrorResponse(-400, "Plugin unique identifier is required")
  33. r.JSON(400, resp)
  34. return
  35. }
  36. plugin_unique_identifier, ok := plugin_unique_identifier_any.(plugin_entities.PluginUniqueIdentifier)
  37. if !ok {
  38. resp := entities.NewErrorResponse(-400, "Plugin unique identifier is required")
  39. r.JSON(400, resp)
  40. return
  41. }
  42. // set plugin unique identifier
  43. req.UniqueIdentifier = plugin_unique_identifier
  44. success(req)
  45. })
  46. }