.
,-. ,-. . . ,-. ,-. ,-.    ,-. ,-. ,-,-. ,-,-. . . ,-. . |- . .

`-. | | | | | | |-' | | | | | | | | | | | | | | | | |

`-' `-' `-^ ' `-' `-' :: `-' `-' ' ' ' ' ' ' `-^ ' ' ' `' `-|

/| `-'
Profile for ckaznocha

ckaznocha / cliftons-capsule

Clifton's personal Gemini Capsule.

git clone https://source.community/ckaznocha/cliftons-capsule.git
🐙 Branches
📝 Log
🌳 File Tree

/main.go (main)

↑ /

Blob

View raw contents of /main.go (main)
────╮
   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│ }
────╯

· · ·

🏡 Home
🙋 FAQs
🕵️ Privacy Policy
🤝 Terms & Conditions
💎 Official Gemlog
info@source.community

© 2025 source.community