main.go

 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}