1
0
mirror of https://github.com/ssh-vault/ssh-vault.git synced 2025-08-09 00:02:06 +03:00
Files
ssh-vault/parser.go
2016-09-29 20:23:17 +02:00

107 lines
2.0 KiB
Go

package sshvault
import (
"flag"
"fmt"
"os"
"sort"
)
// Parser interface
type Parser interface {
Parse(fs *flag.FlagSet) (*Flags, error)
isDir(path string) bool
isFile(path string) bool
}
// Parse implements parser
type Parse struct {
Flags
}
// Parse parse the command line flags
func (p *Parse) Parse(fs *flag.FlagSet) (*Flags, error) {
fs.BoolVar(&p.Flags.Version, "v", false, "Print version")
fs.StringVar(&p.Flags.Create, "c", "", "create vault")
err := fs.Parse(os.Args[1:])
if err != nil {
return nil, err
}
return &p.Flags, nil
}
func (p *Parse) Usage(fs *flag.FlagSet) func() {
return func() {
fmt.Fprintf(os.Stderr, "Usage: %s [create|decrypt|edit|encrypt|view] [-k key] [-u user] vault\n\n", os.Args[0])
var flags []string
fs.VisitAll(func(f *flag.Flag) {
flags = append(flags, f.Name)
})
sort.Strings(flags)
for _, v := range flags {
f := fs.Lookup(v)
s := fmt.Sprintf(" -%s", f.Name)
name, usage := flag.UnquoteUsage(f)
if len(name) > 0 {
s += " " + name
}
if len(s) <= 4 {
s += "\t"
} else {
s += "\n \t"
}
s += usage
fmt.Fprintf(os.Stderr, "%s\n", s)
}
}
}
func (p *Parse) isDir(path string) bool {
f, err := os.Stat(path)
if err != nil {
return false
}
if m := f.Mode(); m.IsDir() && m&400 != 0 {
return true
}
return false
}
func (p *Parse) isFile(path string) bool {
f, err := os.Stat(path)
if err != nil {
return false
}
if m := f.Mode(); !m.IsDir() && m.IsRegular() && m&400 != 0 {
return true
}
return false
}
func (p *Parse) checkWrkdir(dir string) (err error) {
if !p.isDir(dir) {
err = fmt.Errorf("-d %q does not exist or has wrong permissions, use (\"%s -h\") for help.", dir, os.Args[0])
}
return
}
// ParseArgs parse command arguments
func ParseArgs(p Parser, fs *flag.FlagSet) (err error) {
flags, err := p.Parse(fs)
if err != nil {
return
}
// if -v
if flags.Version {
return
}
// if no args
if len(fs.Args()) < 1 {
err = fmt.Errorf("Missing user, use (\"%s -h\") for help.", os.Args[0])
return
}
return
}