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

host

package
v0.0.1 Latest Latest
Warning

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

Go to latest
Published: Oct 23, 2026 License: MIT Imports: 11 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/liujitcn/go-scripts/hostmodule"
    "github.com/liujitcn/go-scripts/lua/host"
)

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

host.RegisterLogger(L, hostmodule.NewKitLogger())            // 使用 kratos-kit/logger 适配器
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 hostmodule.Logger) lua.LGFunction

func LoaderHTTP

func LoaderHTTP(opts hostmodule.HTTPOptions) lua.LGFunction

func LoaderHook

func LoaderHook(engine HookEngine, logger hostmodule.Logger) lua.LGFunction

func LoaderLogger

func LoaderLogger(logger hostmodule.Logger) lua.LGFunction

func LoaderUtil

func LoaderUtil(logger hostmodule.Logger, maxSleep ...time.Duration) lua.LGFunction

func RegisterCrypto

func RegisterCrypto(L *lua.LState, logger hostmodule.Logger)

func RegisterHTTP

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

func RegisterHookAPI

func RegisterHookAPI(L *lua.LState, engine HookEngine, logger hostmodule.Logger)

func RegisterLogger

func RegisterLogger(L *lua.LState, logger hostmodule.Logger)

func RegisterUtilAPI

func RegisterUtilAPI(L *lua.LState, logger hostmodule.Logger)

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)
}

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
}

Jump to

Keyboard shortcuts

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