cacert-gosigner/signer/command_processor.go

90 lines
2.1 KiB
Go

package signer
import (
"errors"
"fmt"
"unsafe"
log "github.com/sirupsen/logrus"
"golang.org/x/sys/unix"
"git.cacert.org/cacert-gosigner/datastructures"
"git.cacert.org/cacert-gosigner/shared"
)
// The CommandProcessor takes parsed protocol data and executes the actual
// functionality.
type CommandProcessor struct {
}
// Process the signer request
func (p *CommandProcessor) Process(command datastructures.SignerRequest) (
response *datastructures.SignerResponse,
err error,
) {
log.Infof("analyze %+v", command)
switch command.Action {
case shared.ActionNul:
response, err = p.handleNulAction(command)
return
case shared.ActionSign:
response, err = p.handleSignAction(command)
return
case shared.ActionRevoke:
response, err = p.handleRevokeAction(command)
return
default:
return nil, errors.New(fmt.Sprintf(
"unsupported Action 0x%02x %s",
int(command.Action),
command.Action,
))
}
}
func (*CommandProcessor) handleNulAction(command datastructures.SignerRequest) (
*datastructures.SignerResponse,
error,
) {
var timeSpec unix.Timespec
err := unix.ClockGettime(unix.CLOCK_REALTIME, &timeSpec)
if err != nil {
log.Errorf("could not get system time: %v", err)
}
log.Debugf("current system time is %v", timeSpec)
// TODO: calculate the actual system time from the payload
_, _, e1 := unix.Syscall(
unix.SYS_CLOCK_SETTIME,
uintptr(unix.CLOCK_REALTIME),
uintptr(unsafe.Pointer(&timeSpec)),
0,
)
if e1 != 0 {
log.Errorf("could not set system time: %v", e1)
}
return &datastructures.SignerResponse{
Version: command.Version, Action: command.Action,
Content1: "", Content2: "", Content3: ""}, nil
}
func (p *CommandProcessor) handleSignAction(
command datastructures.SignerRequest,
) (
*datastructures.SignerResponse,
error,
) {
log.Debugf("handle sign call: %v", command)
return nil, errors.New("not implemented yet")
}
func (p *CommandProcessor) handleRevokeAction(
command datastructures.SignerRequest,
) (
*datastructures.SignerResponse,
error,
) {
log.Debugf("handle revoke call: %v", command)
return nil, errors.New("not implemented yet")
}