-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathurl.go
139 lines (115 loc) · 3.74 KB
/
url.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
package main
import (
"fmt"
"os"
"strings"
. "github.com/dirtman/sitepkg"
)
// Implement the "url" command.
var urlRequest string
func commandURL(invokedAs []string) error {
commands := Commands{
"get": getURL,
"delete": deleteURL,
"add": addURL,
"update": updateURL,
}
var args []string
var err error
if len(os.Args) < 2 {
commandHelp(invokedAs, commands, "need a subcommand", 1)
}
if strings.HasPrefix(os.Args[1], "-") || strings.EqualFold(os.Args[1], "help") {
commandHelp(invokedAs, commands, "", 0)
}
command := strings.ToLower(os.Args[1])
os.Args[0] += " " + os.Args[1]
os.Args = append(os.Args[:1], os.Args[2:]...)
function, ok := commands[command]
if !ok {
commandHelp(invokedAs, commands, fmt.Sprintf("unrecognized command \"%s\"", command), 1)
}
// Set API-related options:
if err = SetAPIOptions(); err != nil {
Warn("Failure setting API options: %v", err)
os.Exit(1)
}
// Set any other common options:
SetBoolOpt("Debug", "", false, false, "Debug mode.")
// Set command specific options:
if command == "get" {
SetStringOpt("rFieldsplus", "R", true, "", "Specify fields to show in additional to the default")
SetStringOpt("rFields", "r", true, "", "Specify the fields to show")
}
// Now that all our options have been specified, configure them, initialize
// the API, and process user input..
if args, err = ConfigureOptions(); err != nil {
return Error("Failure initializing program: %s\n", err)
} else if err = InitAPI(); err != nil {
return Error("Failure initializing API: %s", err)
} else if len(args) == 0 {
return Error("no URL specified")
} else if len(args) > 1 {
return Error("only one URL allowed")
}
if urlRequest = args[0]; !strings.HasPrefix(urlRequest, "/") {
urlRequest = "/" + urlRequest
}
// Run the func for the specified command:
invokedAs = append(invokedAs, command)
err = function(invokedAs)
if err != nil {
err = Error("Failure running \"%s\": %v", strings.Join(invokedAs, " "), err)
}
return err
}
// Implement the "get" command.
func getURL(invokedAs []string) error {
var rfplus, rf, fields string
var err error
if rfplus, err = GetStringOpt("rFieldsplus"); err != nil {
return Error("failure getting rFieldsplus option: %v", err)
} else if rf, err = GetStringOpt("rFields"); err != nil {
return Error("failure getting rFields option: %v", err)
} else if rfplus != "" && rf != "" {
return Error("rfieldplus and rfield not allowed together")
} else if rfplus != "" {
fields = "_return_fields%2b=" + rfplus
} else if rf != "" {
fields = "_return_fields=" + rf
}
if fields != "" {
urlRequest += "&" + fields
}
body, api_err := IBAPIRequest("GET", urlRequest, nil)
if api_err != nil {
Print("%s: %s\n", strings.Join(invokedAs, " "), "Failed")
return Error("GET request failed: %s", api_err)
}
Print("%s: %s\n%s\n", strings.Join(invokedAs, " "), "Success", body)
return nil
}
func deleteURL(invokedAs []string) error {
if _, err := IBAPIRequest("DELETE", urlRequest, nil); err != nil {
Print("%s: %s\n", strings.Join(invokedAs, " "), "Failed")
return Error("DELETE request failed: %s", err)
}
Print("%s: %s\n", strings.Join(invokedAs, " "), "Success")
return nil
}
func addURL(invokedAs []string) error {
if _, err := IBAPIRequest("POST", urlRequest, nil); err != nil {
Print("%s: %s\n", strings.Join(invokedAs, " "), "Failed")
return Error("POST request failed: %s", err)
}
Print("%s: %s\n", strings.Join(invokedAs, " "), "Success")
return nil
}
func updateURL(invokedAs []string) error {
if _, err := IBAPIRequest("PUT", urlRequest, nil); err != nil {
Print("%s: %s\n", strings.Join(invokedAs, " "), "Failed")
return Error("PUT request failed: %s", err)
}
Print("%s: %s\n", strings.Join(invokedAs, " "), "Success")
return nil
}