summaryrefslogtreecommitdiff
path: root/command.go
diff options
context:
space:
mode:
Diffstat (limited to 'command.go')
-rw-r--r--command.go79
1 files changed, 76 insertions, 3 deletions
diff --git a/command.go b/command.go
index d6d896f..758b764 100644
--- a/command.go
+++ b/command.go
@@ -73,6 +73,14 @@ func ParseCommand(line string) (*Command, error) {
}
}
+ case 'i':
+ if strings.HasPrefix("identity", cmd) {
+ args, err := parseIdentityArgs(rest)
+ if err != nil {
+ return nil, err
+ }
+ return &Command{Name: "identity", Args: args}, nil
+ }
case 'n':
if strings.HasPrefix("next", cmd) {
return &Command{Name: "next"}, nil
@@ -157,11 +165,11 @@ func ParseCommand(line string) (*Command, error) {
}
func parseMarkArgs(line string) ([]string, error) {
- if line == "" {
- return nil, ErrInvalidArgs
+ fields := strings.Fields(line)
+ if len(fields) == 0 {
+ return []string{"list"}, nil
}
- fields := strings.Fields(line)
switch fields[0][0] {
case 'a':
if strings.HasPrefix("add", fields[0]) {
@@ -291,6 +299,69 @@ func parseTourArgs(line string) ([]string, error) {
return append([]string{"add"}, fields...), nil
}
+func parseIdentityArgs(line string) ([]string, error) {
+ fields := strings.Fields(line)
+ if len(fields) == 0 {
+ return []string{"list"}, nil
+ }
+
+ switch fields[0][0] {
+ case 'c':
+ if strings.HasPrefix("create", fields[0]) {
+ fields[0] = "create"
+ if len(fields) != 2 {
+ return nil, ErrInvalidArgs
+ }
+ return fields, nil
+ }
+ case 'l':
+ if strings.HasPrefix("list", fields[0]) {
+ if len(fields) != 1 {
+ return nil, ErrInvalidArgs
+ }
+ return []string{"list"}, nil
+ }
+ case 'd':
+ if strings.HasPrefix("delete", fields[0]) {
+ fields[0] = "delete"
+ if len(fields) != 2 {
+ return nil, ErrInvalidArgs
+ }
+ return fields, nil
+ }
+ case 'u':
+ if strings.HasPrefix("use", fields[0]) {
+ fields[0] = "use"
+ if len(fields) != 4 {
+ return nil, ErrInvalidArgs
+ }
+ switch fields[2][0] {
+ case 'd':
+ if !strings.HasPrefix("domain", fields[2]) {
+ return nil, ErrInvalidArgs
+ }
+ fields[2] = "domain"
+ case 'f':
+ if !strings.HasPrefix("folder", fields[2]) {
+ return nil, ErrInvalidArgs
+ }
+ fields[2] = "folder"
+ case 'p':
+ if !strings.HasPrefix("page", fields[2]) {
+ return nil, ErrInvalidArgs
+ }
+ fields[2] = "page"
+ default:
+ return nil, ErrInvalidArgs
+ }
+
+ return fields, nil
+ }
+ }
+
+ return nil, ErrInvalidArgs
+}
+
func RunCommand(conf *Config, cmd *Command, state *BrowserState) error {
switch cmd.Name {
case "about":
@@ -337,6 +408,8 @@ func RunCommand(conf *Config, cmd *Command, state *BrowserState) error {
return Mark(state, cmd.Args, conf)
case "tour":
return TourCmd(state, cmd.Args, conf)
+ case "identity":
+ return IdentityCmd(state, cmd.Args)
case "quit":
os.Exit(0)
}