pkiadm/client.go
Gibheer 039f72c3d5 initial commit
The basic server and client are working and it is possible to add, list,
show, set and remove subjects.

Locations are not yet written to the filesystem yet and need to be
fixed.
2017-05-28 11:33:04 +02:00

55 lines
1.3 KiB
Go

package pkiadm
import (
"fmt"
"net/rpc"
)
const (
// ProtoIdent is the name of the resource container provided by the server.
ProtoIdent = "pkiadm"
)
type (
Client struct {
c *rpc.Client
}
)
// Create a new Client instance using the provided configuration.
func NewClient(cfg Config) (*Client, error) {
conn, err := rpc.Dial("unix", cfg.Path)
if err != nil {
return nil, err
}
return &Client{conn}, nil
}
// Close the client connection with the server. When the Connection is already
// closed, the returned error will be net.rpc.ErrShutdown.
func (c *Client) Close() error {
return c.c.Close()
}
// Exec sends `cmd` to the server with the given input and evaluates the
// standard Result for error messages.
// When one is found, the error is returned.
func (c *Client) exec(cmd string, input interface{}) error {
result := &Result{}
if err := c.c.Call(fmt.Sprintf("%s.%s", ProtoIdent, cmd), input, result); err != nil {
return err
}
if result.HasError {
return result.Error
}
return nil
}
// query can be used to call a function returning a result set.
func (c *Client) query(cmd string, input interface{}, result interface{}) error {
if err := c.c.Call(fmt.Sprintf("%s.%s", ProtoIdent, cmd), input, result); err != nil {
return err
}
return nil
}