apps/sipp/main.go 2.0 K raw
1
// Sipp CLI: minimal command dispatcher.
2
//
3
//	sipp                              launch the interactive TUI
4
//	sipp tui [-r URL] [-k KEY]        launch the interactive TUI
5
//	sipp auth                         save remote URL + API key to config
6
//	sipp server [--host H] [--port P] start the web server
7
//	sipp [-r URL] [-k KEY] <file>     upload a file to a remote sipp server
8
//	sipp --help
9
package main
10
11
import (
12
	"fmt"
13
	"os"
14
	"strconv"
15
16
	"github.com/stevedylandev/andromeda/apps/sipp/server"
17
	"github.com/stevedylandev/andromeda/apps/sipp/tui"
18
	"github.com/stevedylandev/andromeda/pkg/config"
19
)
20
21
const usage = `sipp — minimal code sharing CLI
22
23
usage:
24
  sipp                              launch interactive TUI
25
  sipp tui [-r URL] [-k KEY]        launch interactive TUI
26
  sipp auth                         save remote URL + API key to ~/.config/sipp/config.toml
27
  sipp server [--host HOST] [--port PORT]
28
  sipp [-r URL] [-k KEY] <file>     create a snippet from FILE on the remote server
29
  sipp --help
30
31
env:
32
  SIPP_REMOTE_URL  default remote URL
33
  SIPP_API_KEY     API key used for authenticated requests
34
  SIPP_DB_PATH     local sqlite path for TUI in local mode
35
`
36
37
func main() {
38
	args := os.Args[1:]
39
	if len(args) == 0 {
40
		runTUI(nil)
41
		return
42
	}
43
	switch args[0] {
44
	case "-h", "--help":
45
		fmt.Print(usage)
46
	case "server":
47
		runServer(args[1:])
48
	case "tui":
49
		runTUI(args[1:])
50
	case "auth":
51
		runAuth(args[1:])
52
	default:
53
		runUpload(args)
54
	}
55
}
56
57
func runServer(args []string) {
58
	config.LoadDotEnv(".env")
59
	host := config.Getenv("HOST", "127.0.0.1")
60
	port := config.GetenvInt("PORT", 3000)
61
	for i := 0; i < len(args); i++ {
62
		switch args[i] {
63
		case "--host":
64
			if i+1 < len(args) {
65
				host = args[i+1]
66
				i++
67
			}
68
		case "--port", "-p":
69
			if i+1 < len(args) {
70
				if n, err := strconv.Atoi(args[i+1]); err == nil {
71
					port = n
72
				}
73
				i++
74
			}
75
		}
76
	}
77
	if err := server.Run(host, port); err != nil {
78
		fmt.Fprintln(os.Stderr, err)
79
		os.Exit(1)
80
	}
81
}
82
83
func runTUI(args []string) {
84
	if err := tui.Run(tui.ParseArgs(args)); err != nil {
85
		fmt.Fprintln(os.Stderr, err)
86
		os.Exit(1)
87
	}
88
}