larc r13

99 lines ยท 1.8 KB Raw
1 package main
2
3 import (
4 "flag"
5 "fmt"
6 "log/slog"
7 "os"
8 "os/signal"
9 "syscall"
10
11 "larc.wejust.rest/larc/internal/server"
12 )
13
14 /* larcs - larc server
15 * Serves repositories over HTTP with README rendering and Basic Auth. */
16
17 var (
18 version = "0.1.0"
19 )
20
21 func main() {
22 configPath := flag.String("config", "", "path to config file")
23 showVersion := flag.Bool("version", false, "show version")
24 host := flag.String("host", "", "override server host")
25 port := flag.Int("port", 0, "override server port")
26 flag.Parse()
27
28 if *showVersion {
29 fmt.Printf("larcs version %s\n", version)
30 return
31 }
32
33 /* load config */
34 var cfg *server.Config
35 var err error
36
37 if *configPath != "" {
38 cfg, err = server.LoadConfig(*configPath)
39 if err != nil {
40 slog.Error("failed to load config", "path", *configPath, "error", err)
41 os.Exit(1)
42 }
43 } else {
44 /* try default paths */
45 paths := []string{
46 "./larcs.yaml",
47 "./config.yaml",
48 "/etc/larcs/config.yaml",
49 os.ExpandEnv("$HOME/.larcs/config.yaml"),
50 }
51
52 for _, p := range paths {
53 if _, err := os.Stat(p); err == nil {
54 cfg, err = server.LoadConfig(p)
55 if err == nil {
56 slog.Info("loaded config", "path", p)
57 break
58 }
59 }
60 }
61
62 if cfg == nil {
63 slog.Info("no config file found, using defaults")
64 cfg = server.DefaultConfig()
65 }
66 }
67
68 /* apply overrides */
69 if *host != "" {
70 cfg.Server.Host = *host
71 }
72 if *port != 0 {
73 cfg.Server.Port = *port
74 }
75
76 /* create server */
77 srv, err := server.New(cfg)
78 if err != nil {
79 slog.Error("failed to create server", "error", err)
80 os.Exit(1)
81 }
82
83 /* handle shutdown */
84 sigChan := make(chan os.Signal, 1)
85 signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM)
86
87 go func() {
88 <-sigChan
89 slog.Info("shutting down...")
90 srv.Shutdown()
91 }()
92
93 /* start server */
94 if err := srv.Start(); err != nil {
95 slog.Error("server error", "error", err)
96 os.Exit(1)
97 }
98 }
99