-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcmd_user.go
138 lines (114 loc) · 2.59 KB
/
cmd_user.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
package main
import (
"fmt"
"net/http"
"os"
"strings"
"text/tabwriter"
"github.com/Urethramancer/signor/opt"
)
// CmdUser options.
type CmdUser struct {
opt.DefaultHelp
Add CmdUserAdd `command:"add" help:"Add a user."`
Remove CmdUserRemove `command:"remove" aliases:"rm" help:"Remove a user."`
List CmdUserList `command:"list" aliases:"ls" help:"List users."`
}
// Run user help.
func (cmd *CmdUser) Run(in []string) error {
return opt.ErrUsage
}
//
// Add
//
// CmdUserAdd options.
type CmdUserAdd struct {
opt.DefaultHelp
Name string `placeholder:"NAME" help:"Username of the new user."`
Email string `placeholder:"EMAIL" help:"E-mail address ofr alerts to the user."`
}
// Run add.
func (cmd *CmdUserAdd) Run(in []string) error {
if cmd.Help || cmd.Email == "" {
return opt.ErrUsage
}
headers := map[string]string{
"username": cmd.Name,
"email": cmd.Email,
}
res, err := Request(http.MethodPost, "user", headers)
if err != nil {
pr("Error adding user: %s\n", err.Error())
return err
}
if res.StatusCode != http.StatusCreated {
pr("Error adding user: %s\n", http.StatusText(res.StatusCode))
return nil
}
println("User created.")
return nil
}
//
// Remove
//
// CmdUserRemove options.
type CmdUserRemove struct {
opt.DefaultHelp
Name string `placeholder:"NAME" help:"Username of the user to be removed."`
}
// Run remove.
func (cmd *CmdUserRemove) Run(in []string) error {
if cmd.Help {
return opt.ErrUsage
}
headers := map[string]string{
"username": cmd.Name,
}
res, err := Request(http.MethodDelete, "user", headers)
if err != nil {
pr("Error removing user: %s\n", err.Error())
return err
}
if res.StatusCode != http.StatusOK {
pr("Error removing user: %s\n", http.StatusText(res.StatusCode))
return nil
}
println("User removed.")
return nil
}
//
// List
//
// CmdUserList options.
type CmdUserList struct {
opt.DefaultHelp
}
// Run list.
func (cmd *CmdUserList) Run(in []string) error {
if cmd.Help {
return opt.ErrUsage
}
var list []User
headers := make(map[string]string)
res, err := RequestJSON(http.MethodGet, "users", headers, &list)
if err != nil {
pr("Error fetching data: %s\nStatus: %d\n", err.Error(), res.StatusCode)
return err
}
if res.StatusCode != http.StatusOK || len(list) == 0 {
println("No users.")
return nil
}
buf := strings.Builder{}
buf.WriteString("Username:\tE-mail:\n")
for _, u := range list {
buf.WriteString(u.Name)
buf.WriteByte('\t')
buf.WriteString(u.Email)
buf.WriteByte('\n')
}
w := tabwriter.NewWriter(os.Stdout, 0, 0, 4, ' ', 0)
fmt.Fprint(w, buf.String())
w.Flush()
return nil
}