Переглянути джерело

fix: updating settings for endpoint dose not work

Yeuoly 9 місяців тому
батько
коміт
4ca74a6c98

+ 6 - 6
internal/server/controllers/endpoint.go

@@ -44,17 +44,17 @@ func ListEndpoints(ctx *gin.Context) {
 
 func ListPluginEndpoints(ctx *gin.Context) {
 	BindRequest(ctx, func(request struct {
-		TenantID               string                                 `uri:"tenant_id" validate:"required"`
-		PluginUniqueIdentifier plugin_entities.PluginUniqueIdentifier `form:"plugin_unique_identifier" validate:"required,plugin_unique_identifier"`
-		Page                   int                                    `form:"page" validate:"required"`
-		PageSize               int                                    `form:"page_size" validate:"required,max=100"`
+		TenantID string `uri:"tenant_id" validate:"required"`
+		PluginID string `form:"plugin_id" validate:"required"`
+		Page     int    `form:"page" validate:"required"`
+		PageSize int    `form:"page_size" validate:"required,max=100"`
 	}) {
 		tenant_id := request.TenantID
-		plugin_unique_identifier := request.PluginUniqueIdentifier
+		plugin_id := request.PluginID
 		page := request.Page
 		page_size := request.PageSize
 
-		ctx.JSON(200, service.ListPluginEndpoints(tenant_id, plugin_unique_identifier, page, page_size))
+		ctx.JSON(200, service.ListPluginEndpoints(tenant_id, plugin_id, page, page_size))
 	})
 }
 

+ 19 - 2
internal/service/endpoint.go

@@ -260,9 +260,9 @@ func ListEndpoints(tenant_id string, page int, page_size int) *entities.Response
 	return entities.NewSuccessResponse(endpoints)
 }
 
-func ListPluginEndpoints(tenant_id string, plugin_unique_identifier plugin_entities.PluginUniqueIdentifier, page int, page_size int) *entities.Response {
+func ListPluginEndpoints(tenant_id string, plugin_id string, page int, page_size int) *entities.Response {
 	endpoints, err := db.GetAll[models.Endpoint](
-		db.Equal("plugin_id", plugin_unique_identifier.PluginID()),
+		db.Equal("plugin_id", plugin_id),
 		db.Equal("tenant_id", tenant_id),
 		db.OrderBy("created_at", true),
 		db.Page(page, page_size),
@@ -278,6 +278,23 @@ func ListPluginEndpoints(tenant_id string, plugin_unique_identifier plugin_entit
 
 	// decrypt settings
 	for i, endpoint := range endpoints {
+		// get installation
+		plugin_installation, err := db.GetOne[models.PluginInstallation](
+			db.Equal("plugin_id", plugin_id),
+			db.Equal("tenant_id", tenant_id),
+		)
+		if err != nil {
+			return entities.NewErrorResponse(-404, fmt.Sprintf("failed to find plugin installation: %v", err))
+		}
+
+		plugin_unique_identifier, err := plugin_entities.NewPluginUniqueIdentifier(
+			plugin_installation.PluginUniqueIdentifier,
+		)
+
+		if err != nil {
+			return entities.NewErrorResponse(-500, fmt.Sprintf("failed to parse plugin unique identifier: %v", err))
+		}
+
 		plugin_declaration, err := helper.CombinedGetPluginDeclaration(plugin_unique_identifier)
 		if err != nil {
 			return entities.NewErrorResponse(-500, fmt.Sprintf("failed to get plugin declaration: %v", err))

+ 4 - 2
internal/service/setup_endpoint.go

@@ -185,7 +185,7 @@ func UpdateEndpoint(endpoint_id string, tenant_id string, user_id string, name s
 			InvokeEncryptSchema: dify_invocation.InvokeEncryptSchema{
 				Opt:       dify_invocation.ENCRYPT_OPT_DECRYPT,
 				Namespace: dify_invocation.ENCRYPT_NAMESPACE_ENDPOINT,
-				Identity:  installation.ID,
+				Identity:  endpoint.ID,
 				Data:      endpoint.Settings,
 				Config:    plugin_declaration.Endpoint.Settings,
 			},
@@ -199,7 +199,7 @@ func UpdateEndpoint(endpoint_id string, tenant_id string, user_id string, name s
 
 	// check if settings is changed, replace the value is the same as masked_settings
 	for setting_name, value := range settings {
-		if masked_settings[setting_name] != value {
+		if masked_settings[setting_name] == value {
 			settings[setting_name] = original_settings[setting_name]
 		}
 	}
@@ -246,6 +246,8 @@ func UpdateEndpoint(endpoint_id string, tenant_id string, user_id string, name s
 			Opt:       dify_invocation.ENCRYPT_OPT_CLEAR,
 			Namespace: dify_invocation.ENCRYPT_NAMESPACE_ENDPOINT,
 			Identity:  endpoint.ID,
+			Data:      settings,
+			Config:    plugin_declaration.Endpoint.Settings,
 		},
 	}); err != nil {
 		return entities.NewErrorResponse(-500, fmt.Sprintf("failed to clear credentials cache: %v", err))