WIP: Rewrite package with napi-go #18
2
go.mod
2
go.mod
@@ -5,7 +5,7 @@ go 1.24.2
|
|||||||
require (
|
require (
|
||||||
golang.zx2c4.com/wireguard v0.0.0-20231211153847-12269c276173
|
golang.zx2c4.com/wireguard v0.0.0-20231211153847-12269c276173
|
||||||
golang.zx2c4.com/wireguard/wgctrl v0.0.0-20241231184526-a9ab2273dd10
|
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 (
|
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=
|
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 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.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
|
//go:linkname wg sirherobrine23.com.br/Sirherobrine23/napi-go/entry.Register
|
||||||
func wg(env napi.EnvType, export *napi.Object) {
|
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)
|
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)
|
export.Set("setConfig", setConfig)
|
||||||
|
|
||||||
// deleteInterface, _ := napi.CreateFunction(env, "deleteInterface", DeleteInterface)
|
// deleteInterface, _ := napi.CreateFunction(env, "deleteInterface", DeleteInterface)
|
||||||
// export.Set("deleteInterface", deleteInterface)
|
// export.Set("deleteInterface", deleteInterface)
|
||||||
}
|
}
|
||||||
|
@@ -3,94 +3,64 @@
|
|||||||
package wg_addon
|
package wg_addon
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"net"
|
"net"
|
||||||
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"sirherobrine23.com.br/Sirherobrine23/napi-go"
|
"sirherobrine23.com.br/Sirherobrine23/napi-go"
|
||||||
"sirherobrine23.com.br/Sirherobrine23/napi-go/js"
|
|
||||||
|
|
||||||
"golang.zx2c4.com/wireguard/wgctrl"
|
"golang.zx2c4.com/wireguard/wgctrl"
|
||||||
"golang.zx2c4.com/wireguard/wgctrl/wgtypes"
|
"golang.zx2c4.com/wireguard/wgctrl/wgtypes"
|
||||||
)
|
)
|
||||||
|
|
||||||
var SetInterface = napi.Callback(func(env napi.EnvType, this napi.ValueType, args []napi.ValueType) (napi.ValueType, error) {
|
func SetInterface(wgDevConfig Config) error {
|
||||||
if len(args) == 0 {
|
if wgDevConfig.Name == "" {
|
||||||
return nil, fmt.Errorf("set interface config")
|
return fmt.Errorf("set wireguard config")
|
||||||
}
|
}
|
||||||
|
|
||||||
var wgDevConfig Config
|
devInfo, err := wgDevConfig.WgConfig()
|
||||||
if err := js.ValueFrom(args[0], &wgDevConfig); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
promise, err := napi.CreatePromise(env)
|
|
||||||
if err != nil {
|
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
|
return nil, err
|
||||||
}
|
}
|
||||||
_, err = napi.CreateAyncWorker(env, context.Background(), func(env napi.EnvType, ctx context.Context) {
|
defer client.Close()
|
||||||
devInfo, err := wgDevConfig.WgConfig()
|
|
||||||
if err != nil {
|
|
||||||
napiErr, _ := napi.CreateError(env, err.Error())
|
|
||||||
promise.Reject(napiErr)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get client to wireguard
|
// Get config
|
||||||
client, err := wgctrl.New()
|
var dev *wgtypes.Device
|
||||||
if err != nil {
|
if dev, err = client.Device(interfaceName); err != nil {
|
||||||
napiErr, _ := napi.CreateError(env, err.Error())
|
return nil, err
|
||||||
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")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var config Config
|
config = &Config{}
|
||||||
|
config.FromWg(dev)
|
||||||
{
|
return
|
||||||
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)
|
|
||||||
})
|
|
||||||
|
|
||||||
var DeleteInterface = napi.Callback(func(env napi.EnvType, this napi.ValueType, args []napi.ValueType) (napi.ValueType, error) {
|
var DeleteInterface = napi.Callback(func(env napi.EnvType, this napi.ValueType, args []napi.ValueType) (napi.ValueType, error) {
|
||||||
if len(args) == 0 {
|
if len(args) == 0 {
|
||||||
|
Reference in New Issue
Block a user