plugin

package
v0.1.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 8, 2025 License: Apache-2.0 Imports: 30 Imported by: 0

Documentation

Index

Constants

View Source
const (
	LuaInternal = iota
	LuaFlag
	LuaArg
	LuaReverse
)
View Source
const (
	LuaScript = "lua"
	GoPlugin  = "go"
	EmbedType = "embed"
)
View Source
const CMDSeq = ":"

Variables

View Source
var (
	ReservedARGS    = "args"
	ReservedCMDLINE = "cmdline"
	ReservedCMD     = "cmd"
	ReservedWords   = []string{ReservedCMDLINE, ReservedARGS, ReservedCMD}

	ProtoPackage = []string{"implantpb", "clientpb", "modulepb"}
)

Functions

func NewLuaVM

func NewLuaVM() *lua.LState

func NewYaegiInterpreter

func NewYaegiInterpreter() *interp.Interpreter

Types

type Command

type Command struct {
	Name    string
	Long    string
	Example string
	Command *cobra.Command
	Subs    Commands
	Parent  *Command
}

type Commands

type Commands map[string]*Command

func (Commands) Find

func (cs Commands) Find(name string) *Command

func (Commands) SetCommand

func (cs Commands) SetCommand(name string, cmd *cobra.Command)

type DefaultPlugin

type DefaultPlugin struct {
	*MalManiFest
	Enable  bool
	Content []byte
	Path    string
	CMDs    Commands
	Events  map[intermediate.EventCondition]intermediate.OnEventFunc
}

func LoadGlobalLuaPlugin

func LoadGlobalLuaPlugin() []*DefaultPlugin

func NewPlugin

func NewPlugin(manifest *MalManiFest) (*DefaultPlugin, error)

func (*DefaultPlugin) Commands

func (plug *DefaultPlugin) Commands() Commands

func (*DefaultPlugin) GetEvents

func (*DefaultPlugin) Manifest

func (plug *DefaultPlugin) Manifest() *MalManiFest

type EmbedPlugin

type EmbedPlugin struct {
	*LuaPlugin
	// 嵌入式插件特有的信息
	Level    MalLevel
	FS       embed.FS
	RootPath string // 在embed.FS中的根路径,如"community"、"professional"等
}

EmbedPlugin 嵌入式Lua插件,直接实现Plugin接口

func NewEmbedPlugin

func NewEmbedPlugin(malPath, malName string, level MalLevel) (*EmbedPlugin, error)

NewEmbedPlugin 创建嵌入式插件

func (*EmbedPlugin) FileExists

func (plug *EmbedPlugin) FileExists(filename string) bool

FileExists 检查文件是否存在

func (*EmbedPlugin) GetFileContent

func (plug *EmbedPlugin) GetFileContent(filename string) ([]byte, bool)

GetFileContent 获取文件内容 - 直接从embed.FS读取

func (*EmbedPlugin) GetLevel

func (plug *EmbedPlugin) GetLevel() MalLevel

GetLevel 获取插件级别

func (*EmbedPlugin) ReadDir

func (plug *EmbedPlugin) ReadDir(dirname string) ([]fs.DirEntry, error)

ReadDir 读取目录内容

func (*EmbedPlugin) Run

func (plug *EmbedPlugin) Run() error

type GoMalPlugin

type GoMalPlugin struct {
	*DefaultPlugin
	Interpreter *interp.Interpreter
}

func NewGoMalPlugin

func NewGoMalPlugin(manifest *MalManiFest) (*GoMalPlugin, error)

func (*GoMalPlugin) Destroy

func (plug *GoMalPlugin) Destroy() error

func (*GoMalPlugin) Run

func (plug *GoMalPlugin) Run() error

type LuaParam

type LuaParam struct {
	Name string
	Type int
}

type LuaPlugin

type LuaPlugin struct {
	*DefaultPlugin
	// contains filtered or unexported fields
}

func NewLuaMalPlugin

func NewLuaMalPlugin(manifest *MalManiFest) (*LuaPlugin, error)

func (*LuaPlugin) Acquire

func (plug *LuaPlugin) Acquire() (*LuaVMWrapper, error)

func (*LuaPlugin) Destroy

func (plug *LuaPlugin) Destroy() error

func (*LuaPlugin) InitLuaContext

func (plug *LuaPlugin) InitLuaContext(vm *lua.LState) error

func (*LuaPlugin) Release

func (plug *LuaPlugin) Release(wrapper *LuaVMWrapper)

func (*LuaPlugin) Run

func (plug *LuaPlugin) Run() error

type LuaVMPool

type LuaVMPool struct {
	// contains filtered or unexported fields
}

func NewLuaVMPool

func NewLuaVMPool(maxSize int, initScript string, plugName string) (*LuaVMPool, error)

func (*LuaVMPool) AcquireVM

func (p *LuaVMPool) AcquireVM() (*LuaVMWrapper, error)

func (*LuaVMPool) Destroy

func (p *LuaVMPool) Destroy()

func (*LuaVMPool) ReleaseVM

func (p *LuaVMPool) ReleaseVM(wrapper *LuaVMWrapper)

type LuaVMWrapper

type LuaVMWrapper struct {
	*lua.LState
	// contains filtered or unexported fields
}

func NewLuaVMWrapper

func NewLuaVMWrapper() *LuaVMWrapper

func (*LuaVMWrapper) Lock

func (w *LuaVMWrapper) Lock()

func (*LuaVMWrapper) Unlock

func (w *LuaVMWrapper) Unlock()

type MalLevel

type MalLevel int

MalLevel 表示mal插件的级别

const (
	CommunityLevel MalLevel = iota
	ProfessionalLevel
	CustomLevel
)

func (MalLevel) String

func (l MalLevel) String() string

type MalManager

type MalManager struct {
	// contains filtered or unexported fields
}

MalManager 统一的mal插件管理器,分别管理嵌入式和外部插件

func GetGlobalMalManager

func GetGlobalMalManager() *MalManager

GetGlobalMalManager 获取全局mal管理器(单例)

func (*MalManager) GetAllEmbeddedPlugins

func (mm *MalManager) GetAllEmbeddedPlugins() map[string]*EmbedPlugin

GetAllEmbeddedPlugins 获取所有嵌入式插件

func (*MalManager) GetAllExternalPlugins

func (mm *MalManager) GetAllExternalPlugins() map[string]Plugin

GetAllExternalPlugins 获取所有外部插件

func (*MalManager) GetEmbedPlugin

func (mm *MalManager) GetEmbedPlugin(name string) (*EmbedPlugin, bool)

GetEmbedPlugin 获取指定名称的嵌入式插件

func (*MalManager) GetExternalPlugin

func (mm *MalManager) GetExternalPlugin(name string) (Plugin, bool)

GetExternalPlugin 获取指定名称的外部插件

func (*MalManager) GetGlobalPlugin

func (mm *MalManager) GetGlobalPlugin(name string) (*DefaultPlugin, bool)

GetGlobalPlugin 获取指定名称的全局插件

func (*MalManager) GetGlobalPlugins

func (mm *MalManager) GetGlobalPlugins() []*DefaultPlugin

GetGlobalPlugins 获取所有全局插件

func (*MalManager) GetLoadedMals

func (mm *MalManager) GetLoadedMals() []string

GetLoadedMals 获取所有已加载的插件列表

func (*MalManager) GetPlugin

func (mm *MalManager) GetPlugin(name string) (Plugin, bool)

GetPlugin 获取指定名称的插件(先查找外部,再查找嵌入式)

func (*MalManager) GetPluginManifests

func (mm *MalManager) GetPluginManifests() []*MalManiFest

GetPluginManifests 获取所有外部插件清单

func (*MalManager) LoadExternalMal

func (mm *MalManager) LoadExternalMal(manifest *MalManiFest) (Plugin, error)

LoadExternalMal 加载单个外部mal插件

func (*MalManager) ReloadExternalMal

func (mm *MalManager) ReloadExternalMal(malName string) error

ReloadExternalMal 重新加载指定的外部mal插件

func (*MalManager) RemoveExternalMal

func (mm *MalManager) RemoveExternalMal(malName string) error

RemoveExternalMal 移除指定的外部mal插件

type MalManiFest

type MalManiFest struct {
	Name         string   `json:"name" yaml:"name"`
	Type         string   `json:"type" yaml:"type"` // lua, tcl
	Author       string   `json:"author" yaml:"author"`
	Version      string   `json:"version" yaml:"version"`
	EntryFile    string   `json:"entry" yaml:"entry"`
	Lib          bool     `json:"lib" yaml:"lib"`
	DependModule []string `json:"depend_module" yaml:"depend_modules"`
	DependArmory []string `json:"depend_armory" yaml:"depend_armory"`
}

func GetPluginManifest

func GetPluginManifest() []*MalManiFest

func LoadMalManiFest

func LoadMalManiFest(filename string) (*MalManiFest, error)

func ParseMalManifest

func ParseMalManifest(data []byte) (*MalManiFest, error)

type Plugin

type Plugin interface {
	Run() error
	Manifest() *MalManiFest
	Commands() Commands
	Destroy() error
	GetEvents() map[intermediate.EventCondition]intermediate.OnEventFunc
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL