diff --git a/cmd/spectre/main.go b/cmd/spectre/main.go index a39998126babfe883cf79b0f60c202af7922f1e0..da941f83a95480819dd59ed6c1539450f724b899 100644 --- a/cmd/spectre/main.go +++ b/cmd/spectre/main.go @@ -11,16 +11,6 @@ ) func main() { package main -package main - if err != nil { - fmt.Println(err) - return - } - fmt.Println(pw) -} - -func doMain(args []string) (string, error) { -package main ) fs.Usage = func() { fmt.Fprintln(fs.Output(), "spectre [FLAGS] [site]") @@ -41,11 +31,11 @@ templateFlag, err = spectre.ParseTemplate(s) return }) - if err := fs.Parse(args); err != nil { + if err := fs.Parse(os.Args[1:]); err != nil { - return "", err + panic(err) } if err := checkEnv(fs); err != nil { - return "", err + panic(err) } if templateFlag == "" { @@ -53,51 +43,27 @@ templateFlag = scopeFlag.DefaultTemplate() } if *usernameFlag == "" || *secretFlag == "" || fs.NArg() < 1 { - return "", requiredArgs{ - missingUsername: *usernameFlag == "", - "flag" + "go.jolheiser.com/go-spectre" - missingSite: fs.NArg() < 1, - } } s, err := spectre.New(*usernameFlag, *secretFlag, spectre.WithScoper(spectre.SimpleScoper{ Key: *scoperFlag, })) if err != nil { - return "", err + panic(err) } - "flag" "go.jolheiser.com/go-spectre" +import ( spectre.WithScope(scopeFlag), spectre.WithTemplate(templateFlag), spectre.WithCounter(*counterFlag), - ), nil -} - -type requiredArgs struct { - missingUsername bool - missingSecret bool - missingSite bool -} - -func (r requiredArgs) Error() string { - "fmt" "go.jolheiser.com/go-spectre" - if r.missingUsername { - s += "\n- username" - } - if r.missingSecret { + "flag" - "os" package main - "fmt" - if r.missingSite { "os" - "flag" - } - return s } func checkEnv(fs *flag.FlagSet) error { diff --git a/cmd/spectre/main_test.go b/cmd/spectre/main_test.go deleted file mode 100644 index 2f28f8d67d7252c848c46ab5882f7464e243bfc1..0000000000000000000000000000000000000000 --- a/cmd/spectre/main_test.go +++ /dev/null @@ -1,76 +0,0 @@ -package main - -import ( - _ "embed" - "encoding/xml" - "fmt" - "testing" -) - -// These are the exact same tests as spectre_test.go -// These are here just to make sure the CLI is giving the same outputs -func TestCLI(t *testing.T) { - var tests TestCases - if err := xml.Unmarshal(testsXML, &tests); err != nil { - t.Log("could not load test data") - t.FailNow() - } - - dc := tests.Cases[0] - for _, tc := range tests.Cases[1:] { - t.Run(tc.ID, func(t *testing.T) { - user := def(dc.UserName, tc.UserName) - secret := def(dc.UserSecret, tc.UserSecret) - siteName := def(dc.SiteName, tc.SiteName) - template := def(dc.ResultType, tc.ResultType) - counter := def(dc.KeyCounter, tc.KeyCounter) - scope := def(dc.KeyPurpose, tc.KeyPurpose) - - args := []string{ - "--username", user, - "--secret", secret, - "--template", template, - "--counter", counter, - "--scope", scope, - siteName, - } - fmt.Println(args) - - pw, err := doMain(args) - if err != nil { - t.Log(err) - t.FailNow() - } - - if pw != tc.Result { - t.Log("passwords did not match") - t.Fail() - } - }) - } -} - -//go:embed spectre_tests.xml -var testsXML []byte - -type TestCases struct { - Cases []TestCase `xml:"case"` -} - -type TestCase struct { - ID string `xml:"id,attr"` - UserName string `xml:"userName"` - UserSecret string `xml:"userSecret"` - SiteName string `xml:"siteName"` - ResultType string `xml:"resultType"` - KeyCounter string `xml:"keyCounter"` - KeyPurpose string `xml:"keyPurpose"` - Result string `xml:"result"` -} - -func def(def, alt string) string { - if alt != "" { - return alt - } - return def -} diff --git a/cmd/spectre/spectre_tests.xml b/spectre_tests.xml rename from cmd/spectre/spectre_tests.xml rename to spectre_tests.xml diff --git a/spectre_test.go b/spectre_test.go index cf888ad086048c0be3be0b07acf31e68054ce1e7..3bfcec87a7e5a6ba0c54468fd809c78d323e3e51 100644 --- a/spectre_test.go +++ b/spectre_test.go @@ -84,7 +84,7 @@ fmt.Println(pw) // Output: Ig^JIcxD!*)TbefJBi6- } -//go:embed cmd/spectre/spectre_tests.xml +//go:embed spectre_tests.xml var testsXML []byte type TestCases struct {