67 lines
1.6 KiB
Go
67 lines
1.6 KiB
Go
package daemon
|
|
|
|
import (
|
|
"context"
|
|
"isle/bootstrap"
|
|
"isle/daemon/jsonrpc2"
|
|
"isle/nebula"
|
|
"net/http"
|
|
)
|
|
|
|
// RPC defines the methods which the Daemon exposes over RPC (via the RPCHandler
|
|
// or HTTPHandler methods). Method documentation can be found on the Daemon
|
|
// type.
|
|
type RPC interface {
|
|
CreateNetwork(
|
|
ctx context.Context,
|
|
name string,
|
|
domain string,
|
|
ipNet nebula.IPNet,
|
|
hostName nebula.HostName,
|
|
) error
|
|
|
|
JoinNetwork(context.Context, JoiningBootstrap) error
|
|
|
|
GetHosts(context.Context) ([]bootstrap.Host, error)
|
|
|
|
GetGarageClientParams(context.Context) (GarageClientParams, error)
|
|
|
|
GetNebulaCAPublicCredentials(
|
|
context.Context,
|
|
) (
|
|
nebula.CAPublicCredentials, error,
|
|
)
|
|
|
|
RemoveHost(ctx context.Context, hostName nebula.HostName) error
|
|
|
|
CreateHost(
|
|
context.Context, nebula.HostName, CreateHostOpts,
|
|
) (
|
|
JoiningBootstrap, error,
|
|
)
|
|
|
|
CreateNebulaCertificate(
|
|
context.Context, nebula.HostName, nebula.EncryptingPublicKey,
|
|
) (
|
|
nebula.Certificate, error,
|
|
)
|
|
}
|
|
|
|
// RPCHandler returns a jsonrpc2.Handler which will use the Daemon to serve all
|
|
// methods defined on the RPC interface.
|
|
func (d *Daemon) RPCHandler() jsonrpc2.Handler {
|
|
rpc := RPC(d)
|
|
return jsonrpc2.Chain(
|
|
jsonrpc2.NewMLogMiddleware(d.logger.WithNamespace("rpc")),
|
|
jsonrpc2.ExposeServerSideErrorsMiddleware,
|
|
)(
|
|
jsonrpc2.NewDispatchHandler(&rpc),
|
|
)
|
|
}
|
|
|
|
// HTTPRPCHandler returns an http.Handler which will use the Daemon to serve all
|
|
// methods defined on the RPC interface via the JSONRPC2 protocol.
|
|
func (d *Daemon) HTTPRPCHandler() http.Handler {
|
|
return jsonrpc2.NewHTTPHandler(d.RPCHandler())
|
|
}
|