main.go

 1package main
 2
 3import (
 4	"fmt"
 5	"log"
 6	"soft-serve/config"
 7	"soft-serve/git"
 8	"soft-serve/tui"
 9
10	"github.com/charmbracelet/wish"
11	bm "github.com/charmbracelet/wish/bubbletea"
12	gm "github.com/charmbracelet/wish/git"
13	lm "github.com/charmbracelet/wish/logging"
14	"github.com/gliderlabs/ssh"
15
16	"github.com/meowgorithm/babyenv"
17)
18
19type serverConfig struct {
20	Port     int    `env:"SOFT_SERVE_PORT" default:"23231"`
21	Host     string `env:"SOFT_SERVE_HOST" default:""`
22	InitKey  string `env:"SOFT_SERVE_REPO_KEY" default:""`
23	KeyPath  string `env:"SOFT_SERVE_KEY_PATH" default:".ssh/soft_serve_server_ed25519"`
24	RepoPath string `env:"SOFT_SERVE_REPO_PATH" default:".repos"`
25}
26
27func main() {
28	var scfg serverConfig
29	var cfg *config.Config
30	var err error
31	err = babyenv.Parse(&scfg)
32	if err != nil {
33		log.Fatalln(err)
34	}
35	rs := git.NewRepoSource(scfg.RepoPath)
36	cfg, err = config.NewConfig(scfg.Host, scfg.Port, scfg.InitKey, rs)
37	if err != nil {
38		log.Fatalln(err)
39	}
40	s, err := wish.NewServer(
41		ssh.PublicKeyAuth(cfg.PublicKeyHandler),
42		ssh.PasswordAuth(cfg.PasswordHandler),
43		wish.WithAddress(fmt.Sprintf("%s:%d", scfg.Host, scfg.Port)),
44		wish.WithHostKeyPath(scfg.KeyPath),
45		wish.WithMiddlewares(
46			bm.Middleware(tui.SessionHandler(cfg)),
47			gm.MiddlewareWithPushCallback(scfg.RepoPath, cfg, cfg.Pushed),
48			lm.Middleware(),
49		),
50	)
51	if err != nil {
52		log.Fatalln(err)
53	}
54	log.Printf("Starting SSH server on %s:%d\n", scfg.Host, scfg.Port)
55	err = s.ListenAndServe()
56	if err != nil {
57		log.Fatalln(err)
58	}
59}