Files
goSam/dest.go
urgentquest eebe8c5cb4 - Unbreak things by properly validate command topic
- Replace fmt.ErrorF() with errors.New() where no
actual formatting requested
- Hanle edge cases with no username/password in `Client.hello()`
- Make go-staticcheck happier
2025-05-09 00:41:20 +00:00

52 lines
1.0 KiB
Go

package gosam
import (
"fmt"
"strconv"
"strings"
)
func validateKindInner(kind string) string {
if strings.HasPrefix(kind, "SIGNATURE_TYPE=") {
return kind
}
return "SIGNATURE_TYPE=" + kind
}
func validateKind(kind string) (string, error) {
//convert kind to int
kint, err := strconv.Atoi(kind)
if err != nil {
for _, k := range SAMsigTypes {
if strings.HasSuffix(k, kind) {
return validateKindInner(kind), nil
}
}
}
if kint >= 0 && kint <= 7 {
return validateKindInner(kind), nil
}
return "SIGNATURE_TYPE=7", fmt.Errorf("invalid sigType: %s", kind)
}
// Generate a new destination and return the base64 encoded string
func (c *Client) NewDestination(kind ...string) (string, string, error) {
if len(kind) == 0 {
kind = []string{"7"}
} else {
var err error
kind[0], err = validateKind(kind[0])
if err != nil {
if c.debug {
fmt.Println(err)
}
}
}
r, err := c.sendCmd("DEST GENERATE %s\n", kind[0])
if err != nil {
return "", "", err
}
return r.Pairs["PRIV"], r.Pairs["PUB"], nil
}