WIP: Rewrite package with napi-go #18
2
go.mod
2
go.mod
@@ -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
6
go.sum
@@ -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=
|
||||
|
@@ -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)
|
||||
}
|
||||
|
@@ -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 {
|
||||
|
Reference in New Issue
Block a user