-
-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathmain.go
More file actions
81 lines (65 loc) · 2.27 KB
/
main.go
File metadata and controls
81 lines (65 loc) · 2.27 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
package main
import (
"embed"
"flag"
"fmt"
"io/fs"
"log"
"path/filepath"
"github.com/skarlso/kube_adventures/voting/backend/server"
)
// version is set at build time via -ldflags.
var version string
// Frontend embeds the frontend directory at compile time.
//
//go:embed frontend
var frontendFS embed.FS
func main() {
addr := flag.String("addr", ":8080", "HTTP server address")
contentDir := flag.String("content", "content/chapters", "Path to content directory")
storyFile := flag.String("story", "content/story.yaml", "Path to story.yaml file")
presenterSecret := flag.String("presenter-secret", "", "Presenter authentication secret (optional, disables auth if empty)")
voterURL := flag.String("voter-url", "", "Public voter URL for QR codes (optional, derived from request when empty)")
authorMode := flag.Bool("author", false, "Enable story authoring endpoints (writes to content directory)")
versionFlag := flag.Bool("version", false, "Print version and exit")
flag.Parse()
if *versionFlag {
if version == "" {
version = "0.0.0-dev"
}
fmt.Println(version) //nolint:forbidigo // version printing
return
}
absContentDir, err := filepath.Abs(*contentDir)
if err != nil {
log.Fatalf("Failed to resolve content directory: %v", err)
}
absStoryFile, err := filepath.Abs(*storyFile)
if err != nil {
log.Fatalf("Failed to resolve story file: %v", err)
}
// frontend filesystem with "frontend" prefix stripped
embeddedFS, err := fs.Sub(frontendFS, "frontend")
if err != nil {
log.Fatalf("Failed to get embedded frontend: %v", err)
}
srv, err := server.NewServer(absStoryFile, absContentDir, embeddedFS, *presenterSecret, *voterURL, *authorMode)
if err != nil {
log.Fatalf("Failed to create server: %v", err)
}
log.Printf("Adventure server starting...")
log.Printf("Content: %s", absContentDir)
log.Printf("Story: %s", absStoryFile)
log.Printf("Static: embedded")
log.Printf("Server: http://localhost%s", *addr)
log.Printf("Voter: http://localhost%s/voter", *addr)
log.Printf("Presenter: http://localhost%s/presenter", *addr)
if *presenterSecret != "" {
log.Printf("Presenter authentication: ENABLED")
} else {
log.Printf("Presenter authentication: DISABLED")
}
if err := srv.Start(*addr); err != nil {
log.Fatalf("Server failed: %v", err)
}
}