WIP: Rewrite package with napi-go #18

Draft
Sirherobrine23 wants to merge 3 commits from go-napi into main
4 changed files with 58 additions and 74 deletions
Showing only changes of commit 61dcda8662 - Show all commits

2
go.mod
View File

@@ -5,7 +5,7 @@ go 1.24.2
require (
golang.zx2c4.com/wireguard v0.0.0-20231211153847-12269c276173
golang.zx2c4.com/wireguard/wgctrl v0.0.0-20241231184526-a9ab2273dd10
sirherobrine23.com.br/Sirherobrine23/napi-go v0.1.1
sirherobrine23.com.br/Sirherobrine23/napi-go v0.1.2-0.20250428221559-379bd75a8e14
)
require (

6
go.sum
View File

@@ -32,3 +32,9 @@ gvisor.dev/gvisor v0.0.0-20230927004350-cbd86285d259 h1:TbRPT0HtzFP3Cno1zZo7yPzE
gvisor.dev/gvisor v0.0.0-20230927004350-cbd86285d259/go.mod h1:AVgIgHMwK63XvmAzWG9vLQ41YnVHN0du0tEC46fI7yY=
sirherobrine23.com.br/Sirherobrine23/napi-go v0.1.1 h1:qbAry0o+aR4ZPWqGu1LP2MzcAHL/JcwsOLK64ekLsFM=
sirherobrine23.com.br/Sirherobrine23/napi-go v0.1.1/go.mod h1:ou35usxSZyinNvaeRHPlnxglSrmc9Wg9cfJ4mE5/9kA=
sirherobrine23.com.br/Sirherobrine23/napi-go v0.1.2-0.20250428163922-3668cf5c7a3a h1:4DODPfHJMwvHzzNaldOuuUtsWG9zCKSPOEPypyy4KxA=
sirherobrine23.com.br/Sirherobrine23/napi-go v0.1.2-0.20250428163922-3668cf5c7a3a/go.mod h1:ou35usxSZyinNvaeRHPlnxglSrmc9Wg9cfJ4mE5/9kA=
sirherobrine23.com.br/Sirherobrine23/napi-go v0.1.2-0.20250428194608-42a0c9998ddd h1:bIfQ7cHjiRPX8BCne/tqhVAqOAZJcjwCEurGO6CfWu4=
sirherobrine23.com.br/Sirherobrine23/napi-go v0.1.2-0.20250428194608-42a0c9998ddd/go.mod h1:ou35usxSZyinNvaeRHPlnxglSrmc9Wg9cfJ4mE5/9kA=
sirherobrine23.com.br/Sirherobrine23/napi-go v0.1.2-0.20250428221559-379bd75a8e14 h1:UMNGes46f1fIZfC4S59lXJ2/pBl/pj8HJHkEBrkFJeQ=
sirherobrine23.com.br/Sirherobrine23/napi-go v0.1.2-0.20250428221559-379bd75a8e14/go.mod h1:ou35usxSZyinNvaeRHPlnxglSrmc9Wg9cfJ4mE5/9kA=

View File

@@ -12,10 +12,18 @@ import (
//go:linkname wg sirherobrine23.com.br/Sirherobrine23/napi-go/entry.Register
func wg(env napi.EnvType, export *napi.Object) {
getConfig, _ := napi.CreateFunction(env, "getConfig", GetInterface)
getConfig, err := napi.GoFuncOf(env, GetInterface)
if err != nil {
panic(err)
}
export.Set("getConfig", getConfig)
setConfig, _ := napi.CreateFunction(env, "setConfig", SetInterface)
setConfig, err := napi.GoFuncOf(env, SetInterface)
if err != nil {
panic(err)
}
export.Set("setConfig", setConfig)
// deleteInterface, _ := napi.CreateFunction(env, "deleteInterface", DeleteInterface)
// export.Set("deleteInterface", deleteInterface)
}

View File

@@ -3,94 +3,64 @@
package wg_addon
import (
"context"
"fmt"
"net"
"strings"
"time"
"sirherobrine23.com.br/Sirherobrine23/napi-go"
"sirherobrine23.com.br/Sirherobrine23/napi-go/js"
"golang.zx2c4.com/wireguard/wgctrl"
"golang.zx2c4.com/wireguard/wgctrl/wgtypes"
)
var SetInterface = napi.Callback(func(env napi.EnvType, this napi.ValueType, args []napi.ValueType) (napi.ValueType, error) {
if len(args) == 0 {
return nil, fmt.Errorf("set interface config")
func SetInterface(wgDevConfig Config) error {
if wgDevConfig.Name == "" {
return fmt.Errorf("set wireguard config")
}
var wgDevConfig Config
if err := js.ValueFrom(args[0], &wgDevConfig); err != nil {
return nil, err
}
promise, err := napi.CreatePromise(env)
devInfo, err := wgDevConfig.WgConfig()
if err != nil {
return err
}
// Get client to wireguard
client, err := wgctrl.New()
if err != nil {
return err
}
defer client.Close()
// Set Config
if err := client.ConfigureDevice(wgDevConfig.Name, devInfo); err != nil {
return err
}
return nil
}
func GetInterface(interfaceName string) (config *Config, err error) {
if interfaceName = strings.TrimSpace(interfaceName); interfaceName == "" {
return nil, fmt.Errorf("set interface name")
}
// Get client to wireguard
var client *wgctrl.Client
if client, err = wgctrl.New(); err != nil {
return nil, err
}
_, err = napi.CreateAyncWorker(env, context.Background(), func(env napi.EnvType, ctx context.Context) {
devInfo, err := wgDevConfig.WgConfig()
if err != nil {
napiErr, _ := napi.CreateError(env, err.Error())
promise.Reject(napiErr)
return
}
defer client.Close()
// Get client to wireguard
client, err := wgctrl.New()
if err != nil {
napiErr, _ := napi.CreateError(env, err.Error())
promise.Reject(napiErr)
return
}
defer client.Close()
// Set Config
if err := client.ConfigureDevice(wgDevConfig.Name, devInfo); err != nil {
napiErr, _ := napi.CreateError(env, err.Error())
promise.Reject(napiErr)
return
}
// Resolve promise
und, _ := env.Undefined()
promise.Resolve(und)
})
return promise, err
})
var GetInterface = napi.Callback(func(env napi.EnvType, this napi.ValueType, args []napi.ValueType) (napi.ValueType, error) {
if len(args) == 0 {
return nil, fmt.Errorf("set interface name")
}
interfaceName := napi.ToString(args[0])
typeof, err := interfaceName.Type()
if !(err == nil || typeof == napi.TypeString) {
return nil, fmt.Errorf("set interface name")
// Get config
var dev *wgtypes.Device
if dev, err = client.Device(interfaceName); err != nil {
return nil, err
}
var config Config
{
interfaceName, _ := interfaceName.Utf8Value()
// Get client to wireguard
var client *wgctrl.Client
if client, err = wgctrl.New(); err != nil {
return nil, err
}
defer client.Close()
// Get config
var dev *wgtypes.Device
if dev, err = client.Device(interfaceName); err != nil {
return nil, err
}
config.FromWg(dev)
}
return js.ValueOf(env, config)
})
config = &Config{}
config.FromWg(dev)
return
}
var DeleteInterface = napi.Callback(func(env napi.EnvType, this napi.ValueType, args []napi.ValueType) (napi.ValueType, error) {
if len(args) == 0 {