smegmesh/pkg/ctrlserver/ctrlserver.go

64 lines
1.7 KiB
Go
Raw Normal View History

2023-09-29 16:00:20 +02:00
/*
* ctrlserver controls the WireGuard mesh. Contains an IpcHandler for
* handling commands fired by wgmesh command.
* Contains an RpcHandler for handling commands fired by another server.
*/
package ctrlserver
import (
"github.com/tim-beatham/wgmesh/pkg/conf"
2023-10-01 20:01:35 +02:00
"github.com/tim-beatham/wgmesh/pkg/conn"
2023-10-05 18:48:54 +02:00
"github.com/tim-beatham/wgmesh/pkg/manager"
"github.com/tim-beatham/wgmesh/pkg/rpc"
2023-09-19 14:45:49 +02:00
"golang.zx2c4.com/wireguard/wgctrl"
)
type NewCtrlServerParams struct {
WgClient *wgctrl.Client
Conf *conf.WgMeshConfiguration
AuthProvider rpc.AuthenticationServer
CtrlProvider rpc.MeshCtrlServerServer
}
/*
2023-09-29 16:00:20 +02:00
* NewCtrlServer creates a new instance of the ctrlserver.
* It is associated with a WireGuard client and an interface.
* wgClient: Represents the WireGuard control client.
* ifName: WireGuard interface name
*/
func NewCtrlServer(params *NewCtrlServerParams) (*MeshCtrlServer, error) {
ctrlServer := new(MeshCtrlServer)
ctrlServer.Client = params.WgClient
2023-10-06 12:52:51 +02:00
ctrlServer.MeshManager = manager.NewMeshManager(*params.WgClient)
2023-10-10 21:14:40 +02:00
ctrlServer.Conf = params.Conf
2023-10-05 18:48:54 +02:00
connManagerParams := conn.NewJwtConnectionManagerParams{
CertificatePath: params.Conf.CertificatePath,
PrivateKey: params.Conf.PrivateKeyPath,
SkipCertVerification: params.Conf.SkipCertVerification,
}
2023-10-05 18:48:54 +02:00
connMgr, err := conn.NewJwtConnectionManager(&connManagerParams)
if err != nil {
return nil, err
}
ctrlServer.ConnectionManager = connMgr
connServerParams := conn.NewConnectionServerParams{
2023-10-10 21:14:40 +02:00
Conf: params.Conf,
AuthProvider: params.AuthProvider,
CtrlProvider: params.CtrlProvider,
}
connServer, err := conn.NewConnectionServer(&connServerParams)
if err != nil {
return nil, err
}
ctrlServer.ConnectionServer = connServer
return ctrlServer, nil
}