Initial commit
[bloat] / main.go
1 package main
2
3 import (
4         "database/sql"
5         "log"
6         "math/rand"
7         "net/http"
8         "os"
9         "time"
10
11         "web/config"
12         "web/renderer"
13         "web/repository"
14         "web/service"
15
16         _ "github.com/mattn/go-sqlite3"
17 )
18
19 func init() {
20         rand.Seed(time.Now().Unix())
21 }
22
23 func main() {
24         config, err := config.ParseFile("default.conf")
25         if err != nil {
26                 log.Fatal(err)
27         }
28
29         if !config.IsValid() {
30                 log.Fatal("invalid config")
31         }
32
33         renderer, err := renderer.NewRenderer(config.TemplatesGlobPattern)
34         if err != nil {
35                 log.Fatal(err)
36         }
37
38         db, err := sql.Open("sqlite3", config.DatabasePath)
39         if err != nil {
40                 log.Fatal(err)
41         }
42         defer db.Close()
43
44         sessionRepo, err := repository.NewSessionRepository(db)
45         if err != nil {
46                 log.Fatal(err)
47         }
48
49         appRepo, err := repository.NewAppRepository(db)
50         if err != nil {
51                 log.Fatal(err)
52         }
53
54         var logger *log.Logger
55         if len(config.Logfile) < 1 {
56                 logger = log.New(os.Stdout, "", log.LstdFlags)
57         } else {
58                 lf, err := os.Open(config.Logfile)
59                 if err != nil {
60                         log.Fatal(err)
61                 }
62                 defer lf.Close()
63                 logger = log.New(lf, "", log.LstdFlags)
64         }
65
66         s := service.NewService(config.ClientName, config.ClientScope, config.ClientWebsite, renderer, sessionRepo, appRepo)
67         s = service.NewAuthService(sessionRepo, appRepo, s)
68         s = service.NewLoggingService(logger, s)
69         handler := service.NewHandler(s, config.StaticDirectory)
70
71         log.Println("listening on", config.ListenAddress)
72         err = http.ListenAndServe(config.ListenAddress, handler)
73         if err != nil {
74                 log.Fatal(err)
75         }
76 }