all repos — flounder @ 54e04e31ab9c15c8d6850b33bffd5515454df31d

A small site builder for the Gemini protocol

main.go (view raw)

 1package main
 2
 3import (
 4	"flag"
 5	"fmt"
 6	"github.com/gorilla/sessions"
 7	"io"
 8	"log"
 9	"os"
10	"sync"
11)
12
13var c Config // global var to hold static configuration
14
15const HIDDEN_FOLDER = ".hidden"
16
17func main() {
18	configPath := flag.String("c", "flounder.toml", "path to config file") // doesnt work atm
19	flag.Parse()
20	args := flag.Args()
21	if len(args) < 1 {
22		fmt.Println("expected 'admin' or 'serve' subcommand")
23		os.Exit(1)
24	}
25
26	var err error
27	c, err = getConfig(*configPath)
28	if err != nil {
29		log.Fatal(err)
30	}
31	logFile, err := os.OpenFile(c.LogFile, os.O_CREATE|os.O_APPEND|os.O_RDWR, 0644)
32	if err != nil {
33		panic(err)
34	}
35	mw := io.MultiWriter(os.Stdout, logFile)
36	log.SetOutput(mw)
37
38	if c.HttpsEnabled {
39		_, err1 := os.Stat(c.TLSCertFile)
40		_, err2 := os.Stat(c.TLSKeyFile)
41		if os.IsNotExist(err1) || os.IsNotExist(err2) {
42			log.Fatal("Keyfile or certfile does not exist.")
43		}
44	}
45
46	initializeDB()
47
48	cookie := generateCookieKeyIfDNE()
49	SessionStore = sessions.NewCookieStore(cookie)
50
51	switch args[0] {
52	case "serve":
53		wg := new(sync.WaitGroup)
54		wg.Add(2)
55		go func() {
56			runHTTPServer()
57			wg.Done()
58		}()
59		go func() {
60			runGeminiServer()
61			wg.Done()
62		}()
63		wg.Wait()
64	case "admin":
65		runAdminCommand()
66	}
67}