Help us shape the future of Go! Take the 2026 Go Developer Survey

host

package
v0.0.12 Latest Latest
Warning

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

Go to latest
Published: Oct 15, 2026 License: MIT Imports: 13 Imported by: 0

README

Lua Host Bridges(gopher-lua 宿主模块桥)

把宿主能力以 require("kratos_*") 形态挂进 gopher-lua。提取自 go-wind-admin 脚本引擎的业务无关部分,与 hostmodule(语言无关 ModuleDef 框架)共享 HTTP 出站护栏实现。

五个模块

require 名 Go 侧入口 脚本侧函数面
kratos_logger RegisterLogger(L, logger) / LoaderLogger(logger) info / warn / error / debug 及 infof / warnf / errorf / debugf
kratos_crypto RegisterCrypto(L, logger) / LoaderCrypto(logger) encrypt / decrypt / is_encrypted / encrypt_json / decrypt_json(go-utils/crypto 全局加密器);encrypt_payload / decrypt_payload / has_encrypted_payload(AES-256-GCM 载荷封装:task_id / task_type 明文留外层供任务路由,其余字段加密)
kratos_util RegisterUtilAPI(L, logger) / LoaderUtil(logger, maxSleep...) sleep(默认上限 5s 可配)、time / timestamp / date;完整说明见 UTIL_API.md
kratos_hook RegisterHookAPI(L, engine, logger) / LoaderHook(engine, logger) register / add_script / list——宿主需实现 HookEngine 接口(RegisterHook / AddScript / ListHooks / RegisterCallback)把脚本挂载接到自身存储,注册表本体见 go-scripts/hook
kratos_http RegisterHTTP(L, opts) / LoaderHTTP(opts) request(url, options?) / get(url) / post(url, body, contentType?) → {status, body, headers};opts 为 hostmodule.HTTPOptions,护栏(fail-closed 白名单 / 环回硬禁 / 重定向逐跳复检 / 1MB / 超时)与 JS 侧完全一致

两套入口

  • Register*(L, ...):直接在指定 LState 上 PreloadModule,适合自管 VM 的宿主。
  • Loader*(...):返回 lua.LGFunction loader,适合引擎层统一注册。

用法

import (
    lua "github.com/yuin/gopher-lua"

    "github.com/tx7do/go-scripts/hostmodule"
    "github.com/tx7do/go-scripts/lua/host"
)

L := lua.NewState()
defer L.Close()

host.RegisterLogger(L, logger)                              // logger: kratos-bootstrap/logger Helper
host.RegisterHTTP(L, hostmodule.HTTPAllowlistFromEnv())     // 环境变量 SCRIPT_HTTP_ALLOWED_DOMAINS
local log  = require("kratos_logger")
local http = require("kratos_http")

log.info("hello from lua")
local resp = http.get("https://hooks.slack.com/services/xxx")
if resp.status == 200 then
    log.infof("got %d bytes", #resp.body)
end

依赖

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func LoaderCrypto

func LoaderCrypto(logger *bLogger.Helper) lua.LGFunction

LoaderCrypto 返回 crypto 模块(kratos_crypto)的 loader,供 go-scripts 引擎 RegisterModule 使用。

func LoaderHTTP

func LoaderHTTP(opts hostmodule.HTTPOptions) lua.LGFunction

LoaderHTTP 返回 http 模块(kratos_http)的 loader,供 go-scripts 引擎 RegisterModule 使用。 白名单为空时模块函数仍在,但所有请求都会被拒(fail-closed,报错信息指明白名单)。

func LoaderHook

func LoaderHook(engine HookEngine, logger *bLogger.Helper) lua.LGFunction

LoaderHook 返回 hook 模块(kratos_hook)的 loader,供 go-scripts 引擎 RegisterModule 使用。 engine 为 nil 时返回空模块。

func LoaderLogger

func LoaderLogger(logger *bLogger.Helper) lua.LGFunction

LoaderLogger 返回 logger 模块(kratos_logger)的 loader,供 go-scripts 引擎 RegisterModule 使用。

func LoaderUtil

func LoaderUtil(logger *bLogger.Helper, maxSleep ...time.Duration) lua.LGFunction

LoaderUtil 返回 util 模块(kratos_util)的 loader,供 go-scripts 引擎 RegisterModule 使用。 maxSleep 为 sleep 时长上限(防御脚本无限阻塞执行线程);未传时默认 5 秒。

func RegisterCrypto

func RegisterCrypto(L *lua.LState, logger *bLogger.Helper)

RegisterCrypto registers the Crypto API for Lua as a requireable module

func RegisterHTTP

func RegisterHTTP(L *lua.LState, opts hostmodule.HTTPOptions)

RegisterHTTP 注册 http 模块(Lua,preload 风格)。

func RegisterHookAPI

func RegisterHookAPI(L *lua.LState, engine HookEngine, logger *bLogger.Helper)

RegisterHookAPI registers the hook management API for Lua as a requireable module This allows Lua scripts to register themselves to hooks dynamically

func RegisterLogger

func RegisterLogger(L *lua.LState, logger *bLogger.Helper)

RegisterLogger registers the logger API for Lua as a requireable module RegisterLogger registers the logger API for Lua as a requireable module

func RegisterUtilAPI

func RegisterUtilAPI(L *lua.LState, logger *bLogger.Helper)

RegisterUtilAPI registers utility functions for Lua scripts Provides common utilities like sleep, time, etc.

Types

type HookEngine

type HookEngine interface {
	RegisterHook(name, description string) error
	AddScript(hookName string, script interface{}) error
	ListHooks() []string
	RegisterCallback(hookName string, L *lua.LState, fn *lua.LFunction)
}

HookEngine defines the interface for hook management This avoids circular dependency with the main lua package

type Script

type Script struct {
	ID          string
	Name        string
	Hook        string
	Source      string
	Enabled     bool
	Priority    int
	Description string
	Version     string
	Author      string
	Critical    bool
}

Script represents a Lua script for the hook engine

Jump to

Keyboard shortcuts

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