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()) }