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