Browse Source

feat: support force verifying and avoid fork remote plugin

Yeuoly 9 months ago
parent
commit
6bdb1375e1
3 changed files with 42 additions and 18 deletions
  1. 4 0
      internal/service/install_plugin.go
  2. 26 18
      internal/service/manage_plugin.go
  3. 12 0
      internal/types/app/config.go

+ 4 - 0
internal/service/install_plugin.go

@@ -55,6 +55,10 @@ func InstallPluginFromIdentifier(
 		return entities.NewErrorResponse(-500, err.Error())
 	}
 
+	if plugin.InstallType == plugin_entities.PLUGIN_RUNTIME_TYPE_REMOTE {
+		return entities.NewErrorResponse(-500, "remote plugin not supported")
+	}
+
 	declaration := plugin.Declaration
 	// install to this workspace
 	if _, _, err := curd.InstallPlugin(tenant_id, plugin_unique_identifier, plugin.InstallType, &declaration); err != nil {

+ 26 - 18
internal/service/manage_plugin.go

@@ -12,15 +12,19 @@ import (
 
 func ListPlugins(tenant_id string, page int, page_size int) *entities.Response {
 	type installation struct {
-		ID             string                             `json:"id"`
-		Name           string                             `json:"name"`
-		PluginID       string                             `json:"plugin_id"`
-		InstallationID string                             `json:"installation_id"`
-		Description    *plugin_entities.PluginDeclaration `json:"description"`
-		RuntimeType    plugin_entities.PluginRuntimeType  `json:"runtime_type"`
-		Version        string                             `json:"version"`
-		CreatedAt      time.Time                          `json:"created_at"`
-		UpdatedAt      time.Time                          `json:"updated_at"`
+		ID                     string                             `json:"id"`
+		Name                   string                             `json:"name"`
+		PluginID               string                             `json:"plugin_id"`
+		TenantID               string                             `json:"tenant_id"`
+		PluginUniqueIdentifier string                             `json:"plugin_unique_identifier"`
+		EndpointsActive        int                                `json:"endpoints_active"`
+		EndpointsSetups        int                                `json:"endpoints_setups"`
+		InstallationID         string                             `json:"installation_id"`
+		Declaration            *plugin_entities.PluginDeclaration `json:"declaration"`
+		RuntimeType            plugin_entities.PluginRuntimeType  `json:"runtime_type"`
+		Version                string                             `json:"version"`
+		CreatedAt              time.Time                          `json:"created_at"`
+		UpdatedAt              time.Time                          `json:"updated_at"`
 	}
 
 	plugin_installations, err := db.GetAll[models.PluginInstallation](
@@ -48,15 +52,19 @@ func ListPlugins(tenant_id string, page int, page_size int) *entities.Response {
 		}
 
 		data = append(data, installation{
-			ID:             plugin_installation.ID,
-			Name:           plugin_declaration.Name,
-			PluginID:       plugin_unique_identifier.PluginID(),
-			InstallationID: plugin_installation.ID,
-			Description:    plugin_declaration,
-			RuntimeType:    plugin_entities.PluginRuntimeType(plugin_installation.RuntimeType),
-			Version:        plugin_declaration.Version,
-			CreatedAt:      plugin_installation.CreatedAt,
-			UpdatedAt:      plugin_installation.UpdatedAt,
+			ID:                     plugin_installation.ID,
+			Name:                   plugin_declaration.Name,
+			TenantID:               plugin_installation.TenantID,
+			PluginID:               plugin_unique_identifier.PluginID(),
+			PluginUniqueIdentifier: plugin_unique_identifier.String(),
+			InstallationID:         plugin_installation.ID,
+			Declaration:            plugin_declaration,
+			EndpointsSetups:        plugin_installation.EndpointsSetups,
+			EndpointsActive:        plugin_installation.EndpointsActive,
+			RuntimeType:            plugin_entities.PluginRuntimeType(plugin_installation.RuntimeType),
+			Version:                plugin_declaration.Version,
+			CreatedAt:              plugin_installation.CreatedAt,
+			UpdatedAt:              plugin_installation.UpdatedAt,
 		})
 	}
 

+ 12 - 0
internal/types/app/config.go

@@ -7,12 +7,15 @@ import (
 )
 
 type Config struct {
+	// server
 	ServerPort uint16 `envconfig:"SERVER_PORT" validate:"required"`
 	ServerKey  string `envconfig:"SERVER_KEY" validate:"required"`
 
+	// dify inner api
 	DifyInnerApiURL string `envconfig:"DIFY_INNER_API_URL" validate:"required"`
 	DifyInnerApiKey string `envconfig:"DIFY_INNER_API_KEY" validate:"required"`
 
+	// plugin remote installing
 	PluginRemoteInstallingHost             string `envconfig:"PLUGIN_REMOTE_INSTALLING_HOST"`
 	PluginRemoteInstallingPort             uint16 `envconfig:"PLUGIN_REMOTE_INSTALLING_PORT"`
 	PluginRemoteInstallingEnabled          bool   `envconfig:"PLUGIN_REMOTE_INSTALLING_ENABLED"`
@@ -29,14 +32,18 @@ type Config struct {
 
 	PluginMaxExecutionTimeout int `envconfig:"PLUGIN_MAX_EXECUTION_TIMEOUT" validate:"required"`
 
+	// platform like local or aws lambda
 	Platform PlatformType `envconfig:"PLATFORM" validate:"required"`
 
+	// routine pool
 	RoutinePoolSize int `envconfig:"ROUTINE_POOL_SIZE" validate:"required"`
 
+	// redis
 	RedisHost string `envconfig:"REDIS_HOST" validate:"required"`
 	RedisPort uint16 `envconfig:"REDIS_PORT" validate:"required"`
 	RedisPass string `envconfig:"REDIS_PASS" validate:"required"`
 
+	// database
 	DBUsername string `envconfig:"DB_USERNAME" validate:"required"`
 	DBPassword string `envconfig:"DB_PASSWORD" validate:"required"`
 	DBHost     string `envconfig:"DB_HOST" validate:"required"`
@@ -44,6 +51,7 @@ type Config struct {
 	DBDatabase string `envconfig:"DB_DATABASE" validate:"required"`
 	DBSslMode  string `envconfig:"DB_SSL_MODE" validate:"required,oneof=disable require"`
 
+	// persistence storage
 	PersistenceStorageType        string `envconfig:"PERSISTENCE_STORAGE_TYPE" validate:"required,oneof=local s3"`
 	PersistenceStorageLocalPath   string `envconfig:"PERSISTENCE_STORAGE_LOCAL_PATH"`
 	PersistenceStorageS3Region    string `envconfig:"PERSISTENCE_STORAGE_S3_REGION"`
@@ -51,6 +59,10 @@ type Config struct {
 	PersistenceStorageS3SecretKey string `envconfig:"PERSISTENCE_STORAGE_S3_SECRET_KEY"`
 	PersistenceStorageS3Bucket    string `envconfig:"PERSISTENCE_STORAGE_S3_BUCKET"`
 
+	// force verifying signature for all plugins, not allowing install plugin not signed
+	ForceVerifyingSignature bool `envconfig:"FORCE_VERIFYING_SIGNATURE"`
+
+	// lifetime state management
 	LifetimeCollectionHeartbeatInterval int `envconfig:"LIFETIME_COLLECTION_HEARTBEAT_INTERVAL"  validate:"required"`
 	LifetimeCollectionGCInterval        int `envconfig:"LIFETIME_COLLECTION_GC_INTERVAL" validate:"required"`
 	LifetimeStateGCInterval             int `envconfig:"LIFETIME_STATE_GC_INTERVAL" validate:"required"`