|
1 | 1 | package main |
2 | 2 |
|
3 | 3 | import ( |
| 4 | + "context" |
4 | 5 | "fmt" |
5 | 6 | "log" |
6 | 7 | "net/http" |
7 | 8 | "net/url" |
8 | 9 | "os" |
9 | 10 | "regexp" |
10 | 11 |
|
11 | | - "github.com/urfave/cli/v2" |
| 12 | + "github.com/urfave/cli/v3" |
12 | 13 |
|
13 | 14 | "github.com/sensiblecodeio/hookbot/pkg/hookbot" |
14 | 15 | "github.com/sensiblecodeio/hookbot/pkg/router/github" |
15 | 16 | ) |
16 | 17 |
|
17 | 18 | func main() { |
18 | | - app := cli.NewApp() |
19 | | - app.Name = "hookbot" |
20 | | - app.Usage = "turn webhooks into websockets" |
21 | | - app.Version = "0.16.0" |
22 | | - |
23 | | - app.Flags = []cli.Flag{ |
24 | | - &cli.StringFlag{ |
25 | | - Name: "key", |
26 | | - Usage: "secret known only for hookbot for URL access control", |
27 | | - Value: "<unset>", |
28 | | - EnvVars: []string{"HOOKBOT_KEY"}, |
29 | | - }, |
30 | | - &cli.StringFlag{ |
31 | | - Name: "github-secret", |
32 | | - Usage: "secret known by github for signing messages", |
33 | | - Value: "<unset>", |
34 | | - EnvVars: []string{"HOOKBOT_GITHUB_SECRET"}, |
| 19 | + cmd := cli.Command{ |
| 20 | + Name: "hookbot", |
| 21 | + Usage: "turn webhooks into websockets", |
| 22 | + Version: "0.16.0", |
| 23 | + Flags: []cli.Flag{ |
| 24 | + &cli.StringFlag{ |
| 25 | + Name: "key", |
| 26 | + Usage: "secret known only for hookbot for URL access control", |
| 27 | + Value: "<unset>", |
| 28 | + Sources: cli.EnvVars("HOOKBOT_KEY"), |
| 29 | + }, |
| 30 | + &cli.StringFlag{ |
| 31 | + Name: "github-secret", |
| 32 | + Usage: "secret known by github for signing messages", |
| 33 | + Value: "<unset>", |
| 34 | + Sources: cli.EnvVars("HOOKBOT_GITHUB_SECRET"), |
| 35 | + }, |
35 | 36 | }, |
36 | | - } |
37 | 37 |
|
38 | | - app.Commands = []*cli.Command{ |
39 | | - { |
40 | | - Name: "serve", |
41 | | - Usage: "start a hookbot instance, listening on http", |
42 | | - Action: ActionServe, |
43 | | - Flags: []cli.Flag{ |
44 | | - &cli.StringFlag{ |
45 | | - Name: "bind, b", |
46 | | - Value: ":8080", |
47 | | - Usage: "address to listen on", |
48 | | - }, |
49 | | - &cli.StringFlag{ |
50 | | - Name: "sslkey, k", |
51 | | - Value: "<unset>", |
52 | | - Usage: "path to the SSL secret key", |
53 | | - }, |
54 | | - &cli.StringFlag{ |
55 | | - Name: "sslcrt, c", |
56 | | - Value: "<unset>", |
57 | | - Usage: "path to the SSL compound certificate", |
58 | | - }, |
59 | | - &cli.StringSliceFlag{ |
60 | | - Name: "router", |
61 | | - Value: cli.NewStringSlice(""), |
62 | | - Usage: "list of routers to enable", |
| 38 | + Commands: []*cli.Command{ |
| 39 | + { |
| 40 | + Name: "serve", |
| 41 | + Usage: "start a hookbot instance, listening on http", |
| 42 | + Action: ActionServe, |
| 43 | + Flags: []cli.Flag{ |
| 44 | + &cli.StringFlag{ |
| 45 | + Name: "bind, b", |
| 46 | + Value: ":8080", |
| 47 | + Usage: "address to listen on", |
| 48 | + }, |
| 49 | + &cli.StringFlag{ |
| 50 | + Name: "sslkey, k", |
| 51 | + Value: "<unset>", |
| 52 | + Usage: "path to the SSL secret key", |
| 53 | + }, |
| 54 | + &cli.StringFlag{ |
| 55 | + Name: "sslcrt, c", |
| 56 | + Value: "<unset>", |
| 57 | + Usage: "path to the SSL compound certificate", |
| 58 | + }, |
| 59 | + &cli.StringSliceFlag{ |
| 60 | + Name: "router", |
| 61 | + Usage: "list of routers to enable", |
| 62 | + }, |
63 | 63 | }, |
64 | 64 | }, |
65 | | - }, |
66 | | - { |
67 | | - Name: "make-tokens", |
68 | | - Aliases: []string{"t"}, |
69 | | - Usage: "given a list of URIs, generate tokens one per line", |
70 | | - Action: ActionMakeTokens, |
71 | | - Flags: []cli.Flag{ |
72 | | - &cli.BoolFlag{ |
73 | | - Name: "bare", |
74 | | - Usage: "print only tokens (not as basic-auth URLs)", |
75 | | - }, |
76 | | - &cli.StringFlag{ |
77 | | - Name: "url-base, U", |
78 | | - Value: "http://localhost:8080", |
79 | | - Usage: "base URL to generate for (not included in hmac)", |
80 | | - EnvVars: []string{"HOOKBOT_URL_BASE"}, |
| 65 | + { |
| 66 | + Name: "make-tokens", |
| 67 | + Aliases: []string{"t"}, |
| 68 | + Usage: "given a list of URIs, generate tokens one per line", |
| 69 | + Action: ActionMakeTokens, |
| 70 | + Flags: []cli.Flag{ |
| 71 | + &cli.BoolFlag{ |
| 72 | + Name: "bare", |
| 73 | + Usage: "print only tokens (not as basic-auth URLs)", |
| 74 | + }, |
| 75 | + &cli.StringFlag{ |
| 76 | + Name: "url-base, U", |
| 77 | + Value: "http://localhost:8080", |
| 78 | + Usage: "base URL to generate for (not included in hmac)", |
| 79 | + Sources: cli.EnvVars("HOOKBOT_URL_BASE"), |
| 80 | + }, |
81 | 81 | }, |
82 | 82 | }, |
83 | | - }, |
84 | | - { |
85 | | - Name: "route-github", |
86 | | - Usage: "route github requests", |
87 | | - Action: github.ActionRoute, |
88 | | - Flags: []cli.Flag{ |
89 | | - &cli.StringFlag{ |
90 | | - Name: "monitor-url, u", |
91 | | - Usage: "URL to monitor", |
92 | | - }, |
93 | | - &cli.StringFlag{ |
94 | | - Name: "origin", |
95 | | - Value: "samehost", |
96 | | - Usage: "URL to use for the origin header ('samehost' is special)", |
97 | | - EnvVars: []string{"HOOKBOT_ORIGIN"}, |
98 | | - }, |
99 | | - &cli.StringSliceFlag{ |
100 | | - Name: "header, H", |
101 | | - Usage: "headers to pass to the remote", |
102 | | - Value: cli.NewStringSlice(""), |
103 | | - EnvVars: []string{"HOOKBOT_HEADER"}, |
| 83 | + { |
| 84 | + Name: "route-github", |
| 85 | + Usage: "route github requests", |
| 86 | + Action: github.ActionRoute, |
| 87 | + Flags: []cli.Flag{ |
| 88 | + &cli.StringFlag{ |
| 89 | + Name: "monitor-url, u", |
| 90 | + Usage: "URL to monitor", |
| 91 | + }, |
| 92 | + &cli.StringFlag{ |
| 93 | + Name: "origin", |
| 94 | + Value: "samehost", |
| 95 | + Usage: "URL to use for the origin header ('samehost' is special)", |
| 96 | + Sources: cli.EnvVars("HOOKBOT_ORIGIN"), |
| 97 | + }, |
| 98 | + &cli.StringSliceFlag{ |
| 99 | + Name: "header, H", |
| 100 | + Usage: "headers to pass to the remote", |
| 101 | + Sources: cli.EnvVars("HOOKBOT_HEADER"), |
| 102 | + }, |
104 | 103 | }, |
105 | 104 | }, |
106 | 105 | }, |
107 | 106 | } |
108 | 107 |
|
109 | | - app.RunAndExitOnError() |
| 108 | + if err := cmd.Run(context.Background(), os.Args); err != nil { |
| 109 | + log.Fatal(err) |
| 110 | + } |
110 | 111 | } |
111 | 112 |
|
112 | 113 | var SubscribeURIRE = regexp.MustCompile("^(?:/unsafe)?/sub") |
113 | 114 |
|
114 | | -func ActionMakeTokens(c *cli.Context) error { |
| 115 | +func ActionMakeTokens(_ context.Context, c *cli.Command) error { |
115 | 116 | key := c.String("key") |
116 | 117 | if key == "<unset>" { |
117 | 118 | log.Fatalln("HOOKBOT_KEY not set") |
@@ -181,7 +182,7 @@ func ActionMakeTokens(c *cli.Context) error { |
181 | 182 | return nil |
182 | 183 | } |
183 | 184 |
|
184 | | -func ActionServe(c *cli.Context) error { |
| 185 | +func ActionServe(_ context.Context, c *cli.Command) error { |
185 | 186 | key := c.String("key") |
186 | 187 | if key == "<unset>" { |
187 | 188 | log.Fatalln("HOOKBOT_KEY not set") |
|
0 commit comments