all repos — honk @ a6f22b5cf327ef39fbb7ee4d976cb7cfbd61d631

my fork of honk

cli.go (view raw)

  1package main
  2
  3import (
  4	"fmt"
  5	"os"
  6	"strconv"
  7)
  8
  9type cmd struct {
 10	help     string
 11	callback func(args []string)
 12}
 13
 14var commands = map[string]cmd{
 15	"init": {
 16		help: "initialize honk",
 17		callback: func(args []string) {
 18			initdb()
 19		},
 20	},
 21	"upgrade": {
 22		help: "upgrade honk",
 23		callback: func(args []string) {
 24			upgradedb()
 25		},
 26	},
 27	"version": {
 28		help: "print version",
 29		callback: func(args []string) {
 30			fmt.Println(softwareVersion)
 31			os.Exit(0)
 32		},
 33	},
 34	"admin": {
 35		help: "admin interface",
 36		callback: func(args []string) {
 37			adminscreen()
 38		},
 39	},
 40	"import": {
 41		help: "import data into honk",
 42		callback: func(args []string) {
 43			if len(args) != 4 {
 44				errx("import username honk|mastodon|twitter srcdir")
 45			}
 46			importMain(args[1], args[2], args[3])
 47		},
 48	},
 49	"export": {
 50		help: "export data from honk",
 51		callback: func(args []string) {
 52			if len(args) != 3 {
 53				errx("export username destdir")
 54			}
 55			export(args[1], args[2])
 56		},
 57	},
 58	"devel": {
 59		help: "turn devel on/off",
 60		callback: func(args []string) {
 61			if len(args) != 2 {
 62				errx("need an argument: devel (on|off)")
 63			}
 64			switch args[1] {
 65			case "on":
 66				setconfig("devel", 1)
 67			case "off":
 68				setconfig("devel", 0)
 69			default:
 70				errx("argument must be on or off")
 71			}
 72		},
 73	},
 74	"setconfig": {
 75		help: "set honk config",
 76		callback: func(args []string) {
 77			if len(args) != 3 {
 78				errx("need an argument: setconfig key val")
 79			}
 80			var val interface{}
 81			var err error
 82			if val, err = strconv.Atoi(args[2]); err != nil {
 83				val = args[2]
 84			}
 85			setconfig(args[1], val)
 86		},
 87	},
 88	"adduser": {
 89		help: "add a user to honk",
 90		callback: func(args []string) {
 91			adduser()
 92		},
 93	},
 94	"deluser": {
 95		help: "delete a user from honk",
 96		callback: func(args []string) {
 97			if len(args) < 2 {
 98				errx("usage: honk deluser username")
 99			}
100			deluser(args[1])
101		},
102	},
103	"chpass": {
104		help: "change password of an account",
105		callback: func(args []string) {
106			if len(args) < 2 {
107				errx("usage: honk chpass username")
108			}
109			chpass(args[1])
110		},
111	},
112	"follow": {
113		help: "follow an account",
114		callback: func(args []string) {
115			if len(args) < 3 {
116				errx("usage: honk follow username url")
117			}
118			user, err := butwhatabout(args[1])
119			if err != nil {
120				errx("user %s not found", args[1])
121			}
122			var meta HonkerMeta
123			mj, _ := jsonify(&meta)
124			honkerid, flavor, err := savehonker(user, args[2], "", "presub", "", mj)
125			if err != nil {
126				errx("had some trouble with that: %s", err)
127			}
128			if flavor == "presub" {
129				followyou(user, honkerid, true)
130			}
131		},
132	},
133	"unfollow": {
134		help: "unfollow an account",
135		callback: func(args []string) {
136			if len(args) < 3 {
137				errx("usage: honk unfollow username url")
138			}
139			user, err := butwhatabout(args[1])
140			if err != nil {
141				errx("user not found")
142			}
143
144			honkerid, err := gethonker(user.ID, args[2])
145			if err != nil {
146				errx("sorry couldn't find them")
147			}
148			unfollowyou(user, honkerid, true)
149		},
150	},
151	"sendmsg": {
152		help: "send a raw activity",
153		callback: func(args []string) {
154			if len(args) < 4 {
155				errx("usage: honk sendmsg username filename rcpt")
156			}
157			user, err := butwhatabout(args[1])
158			if err != nil {
159				errx("user %s not found", args[1])
160			}
161			data, err := os.ReadFile(args[2])
162			if err != nil {
163				errx("can't read file: %s", err)
164			}
165			deliverate(user.ID, args[3], data)
166		},
167	},
168	"cleanup": {
169		help: "clean up stale data from database",
170		callback: func(args []string) {
171			arg := "30"
172			if len(args) > 1 {
173				arg = args[1]
174			}
175			cleanupdb(arg)
176		},
177	},
178	"unplug": {
179		help: "disconnect from a dead server",
180		callback: func(args []string) {
181			if len(args) < 2 {
182				errx("usage: honk unplug servername")
183			}
184			name := args[1]
185			unplugserver(name)
186		},
187	},
188	"backup": {
189		help: "backup honk",
190		callback: func(args []string) {
191			if len(args) < 2 {
192				errx("usage: honk backup dirname")
193			}
194			name := args[1]
195			svalbard(name)
196		},
197	},
198	"ping": {
199		help: "ping from user to user/url",
200		callback: func(args []string) {
201			if len(args) < 3 {
202				errx("usage: honk ping (from username) (to username or url)")
203			}
204			name := args[1]
205			targ := args[2]
206			user, err := butwhatabout(name)
207			if err != nil {
208				errx("unknown user %s", name)
209			}
210			ping(user, targ)
211		},
212	},
213	"run": {
214		help: "run honk",
215		callback: func(args []string) {
216			serve()
217		},
218	},
219	"backend": {
220		help: "run backend",
221		callback: func(args []string) {
222			backendServer()
223		},
224	},
225	"test": {
226		help: "run test",
227		callback: func(args []string) {
228			ElaborateUnitTests()
229		},
230	},
231}