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}