1package main
2
3import (
4 "fmt"
5 "log"
6 "soft-serve/tui"
7 "time"
8
9 "github.com/charmbracelet/wish"
10 bm "github.com/charmbracelet/wish/bubbletea"
11 gm "github.com/charmbracelet/wish/git"
12 lm "github.com/charmbracelet/wish/logging"
13
14 "github.com/meowgorithm/babyenv"
15)
16
17type Config struct {
18 Port int `env:"SOFT_SERVE_PORT" default:"23231"`
19 Host string `env:"SOFT_SERVE_HOST" default:""`
20 KeyPath string `env:"SOFT_SERVE_KEY_PATH" default:".ssh/soft_serve_server_ed25519"`
21 RepoAuth string `env:"SOFT_SERVE_REPO_KEYS" default:""`
22 RepoAuthFile string `env:"SOFT_SERVE_REPO_KEYS_PATH" default:".ssh/soft_serve_git_authorized_keys"`
23 RepoPath string `env:"SOFT_SERVE_REPO_PATH" default:".repos"`
24}
25
26func main() {
27 var cfg Config
28 err := babyenv.Parse(&cfg)
29 if err != nil {
30 log.Fatalln(err)
31 }
32 s, err := wish.NewServer(
33 fmt.Sprintf("%s:%d", cfg.Host, cfg.Port),
34 cfg.KeyPath,
35 bm.Middleware(tui.SessionHandler(cfg.RepoPath, time.Second*5)),
36 gm.Middleware(cfg.RepoPath, cfg.RepoAuth, cfg.RepoAuthFile),
37 lm.Middleware(),
38 )
39 if err != nil {
40 log.Fatalln(err)
41 }
42 log.Printf("Starting SSH server on %s:%d\n", cfg.Host, cfg.Port)
43 err = s.ListenAndServe()
44 if err != nil {
45 log.Fatalln(err)
46 }
47}