Skip to content

Commit c05c9e3

Browse files
committed
Updated api
1 parent 6376053 commit c05c9e3

File tree

3 files changed

+31
-18
lines changed

3 files changed

+31
-18
lines changed

cmd/api/bitwarden.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,8 @@ func bwRegister(flags *Flags) {
6060
{Name: "auth", Description: "Authenticate with Bitwarden", Call: bwAuth},
6161
{Name: "sync", Description: "Sync items from Bitwarden", Call: bwSync},
6262
{Name: "folders", Description: "Retrieve folders", Call: bwFolders},
63-
{Name: "logins", Description: "Retrieve login items", Call: bwLogins},
64-
{Name: "password", Description: "Print a password to stdout", Call: bwGetPassword},
63+
{Name: "logins", Description: "Retrieve login items", Call: bwLogins, MaxArgs: 1},
64+
{Name: "password", Description: "Print a password to stdout", Call: bwGetPassword, MinArgs: 1, MaxArgs: 1},
6565
},
6666
})
6767
}

cmd/api/cmd.go

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -20,25 +20,32 @@ type Cmd struct {
2020
type Fn struct {
2121
Name string
2222
Description string
23+
MinArgs uint
24+
MaxArgs uint
2325
Call func(*tablewriter.TableWriter) error
2426
}
2527

2628
///////////////////////////////////////////////////////////////////////////////
2729
// PUBLIC METHODS
2830

29-
func (c *Cmd) Get(args []string) *Fn {
31+
func (c *Cmd) Get(args []string) (*Fn, error) {
3032
if len(args) == 0 {
31-
return nil
33+
return nil, fmt.Errorf("missing command")
3234
}
33-
fmt.Println("TODO: %q", args)
34-
return nil
35-
/*
36-
for _, fn := range c.Fn {
37-
if fn.Name == match {
38-
return &fn
39-
}
40-
}
41-
42-
return nil
43-
*/
35+
name := args[0]
36+
nargs := uint(len(args[1:]))
37+
for _, fn := range c.Fn {
38+
if fn.Name != name {
39+
continue
40+
}
41+
// Check number of arguments
42+
if fn.MinArgs != 0 && nargs < fn.MinArgs {
43+
return nil, fmt.Errorf("not enough arguments for %q", fn.Name)
44+
} else if nargs > fn.MaxArgs {
45+
return nil, fmt.Errorf("too many arguments for %q", fn.Name)
46+
}
47+
// Return the command
48+
return &fn, nil
49+
}
50+
return nil, fmt.Errorf("unknown command: %q", name)
4451
}

cmd/api/main.go

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,14 +37,20 @@ func main() {
3737
os.Exit(-1)
3838
}
3939

40-
fn := cmd.Get(flags.Args()[1:])
40+
// Get function
41+
fn, err := cmd.Get(flags.Args()[1:])
42+
if err != nil {
43+
fmt.Fprintln(os.Stderr, err)
44+
os.Exit(-1)
45+
}
46+
47+
// Run function
4148
if fn != nil {
4249
if err := Run(fn); err != nil {
4350
fmt.Fprintln(os.Stderr, err)
4451
os.Exit(-2)
4552
}
46-
}
47-
if flags.NArg() == 1 {
53+
} else if flags.NArg() == 1 {
4854
flags.PrintCommandUsage(cmd)
4955
} else {
5056
fmt.Fprintf(os.Stderr, "Unknown command: %q\n", flags.Args()[1:])

0 commit comments

Comments
 (0)