From 245a41f1fa992fefb396fc4591a2bbdd6858e525 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Fri, 4 Aug 2017 23:41:08 +0200 Subject: Split names --- names.go | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 names.go (limited to 'names.go') diff --git a/names.go b/names.go new file mode 100644 index 0000000..278f54e --- /dev/null +++ b/names.go @@ -0,0 +1,72 @@ +package main + +import ( + "errors" + "os" + "path" + "path/filepath" + "strings" +) + +var ErrNames = errors.New("please use naming scheme of keyname.pub and keyname.sec") + +const ( + extPub = ".pub" + extSec = ".sec" + extSig = ".sig" + verifyWith = "verify with " +) + +func splitNameExt(fname string) (string, string) { + _, file := path.Split(fname) + ext := filepath.Ext(file) + return file[:len(file)-len(ext)], ext +} + +func ValidateNames(pubFile, secFile string) error { + pubName, pubExt := splitNameExt(pubFile) + secName, secExt := splitNameExt(secFile) + if pubExt != extPub || secExt != extSec || pubName != secName { + return ErrNames + } + return nil +} + +func PubName(secFile string) string { + ext := filepath.Ext(secFile) + return filepath.Base(secFile[:len(ext)-1] + extPub) +} + +func SigName(msgFile string) string { + return msgFile + extSig +} + +func CommentPubFile(comment string) string { + if strings.HasPrefix(comment, verifyWith) { + file := comment[len(verifyWith):] + if strings.HasSuffix(file, extPub) { + return FindFile(file) + } + } + return "" +} + +func VerifyWith(secFile string) string { + return verifyWith + PubName(secFile) +} + +var safePath = []string{ + "/etc/signify", + "$HOME/.signify", +} + +// FindFile locates keys in safe path. Falls back to current dir. +func FindFile(fname string) string { + for _, v := range safePath { + p := path.Join(os.Expand(v, os.Getenv), fname) + if _, err := os.Stat(p); err == nil { + return p + } + } + return fname +} -- cgit v1.2.3