.
,-. ,-. . . ,-. ,-. ,-. ,-. ,-. ,-,-. ,-,-. . . ,-. . |- . .
`-. | | | | | | |-' | | | | | | | | | | | | | | | | |
`-' `-' `-^ ' `-' `-' :: `-' `-' ' ' ' ' ' ' `-^ ' ' ' `' `-|
/|
`-'
ckaznocha / cliftons-capsule
Clifton's personal Gemini Capsule.
git clone https://source.community/ckaznocha/cliftons-capsule.git
/main.go (main)
Blob
────╮
1│ package main
2│
3│ import (
4│ "context"
5│ "crypto/tls"
6│ "embed"
7│ "flag"
8│ "fmt"
9│ "log"
10│ "os"
11│ "os/signal"
12│
13│ "source.community/ckaznocha/gemini"
14│ )
15│
16│ //go:embed templates
17│ var templateFS embed.FS
18│
19│ func main() {
20│ logger := log.New(os.Stdout, "[Gemini Capsule] ", log.LstdFlags)
21│
22│ cert := flag.String("tls_cert", "cert.pem", "path to the tls cert file")
23│ key := flag.String("tls_key", "key.pem", "path to the tls key file")
24│ addr := flag.String("listen_addr", ":1965", "address to listen on")
25│ assets := flag.String("assets", "assets", "path to assets dir")
26│ flag.Parse()
27│
28│ logger.Println("Server starting")
29│
30│ app, err := newApp(logger, os.DirFS(*assets), templateFS)
31│ if err != nil {
32│ logger.Fatal(err)
33│ }
34│
35│ mux := gemini.NewServeMux()
36│ mux.HandleFunc("/", app.indexHandler)
37│ mux.HandleFunc("/gemlog", app.gemlogHandler)
38│
39│ s := &gemini.Server{
40│ Handler: mux,
41│ LogHandler: func(message string, isError bool) {
42│ if isError {
43│ logger.Printf("gemini server: %s", message)
44│ }
45│ },
46│ TLSConfig: &tls.Config{MinVersion: tls.VersionTLS12},
47│ }
48│
49│ s.RegisterOnShutdown(func() {
50│ s.LogHandler("shutting down", false)
51│ })
52│
53│ ctx, cancel := context.WithCancel(context.Background())
54│ defer cancel()
55│
56│ logger.Println("Server started")
57│
58│ go func() {
59│ defer cancel()
60│
61│ s.LogHandler("starting", false)
62│ err := s.ListenAndServeTLS(*addr, *cert, *key)
63│ s.LogHandler(fmt.Sprintf("exited: %s\n", err), true)
64│ }()
65│
66│ ctx, stop := signal.NotifyContext(ctx, os.Interrupt)
67│ defer stop()
68│
69│ <-ctx.Done()
70│
71│ fmt.Fprint(logger.Writer(), "\n")
72│
73│ logger.Println("Shutdown starting")
74│ defer logger.Println("Shutdown complete")
75│
76│ if err := s.Shutdown(context.Background()); err != nil {
77│ logger.Printf("Error during shutdown: %s\n", err)
78│ }
79│ }
────╯
· · ·
© 2025 source.community