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		wish.WithAddress(fmt.Sprintf("%s:%d", cfg.Host, cfg.Port)),
34		wish.WithHostKeyPath(cfg.KeyPath),
35		wish.WithMiddlewares(
36			bm.Middleware(tui.SessionHandler(cfg.RepoPath, time.Second*5)),
37			gm.Middleware(cfg.RepoPath, cfg.RepoAuth, cfg.RepoAuthFile),
38			lm.Middleware(),
39		),
40	)
41	if err != nil {
42		log.Fatalln(err)
43	}
44	log.Printf("Starting SSH server on %s:%d\n", cfg.Host, cfg.Port)
45	err = s.ListenAndServe()
46	if err != nil {
47		log.Fatalln(err)
48	}
49}