diff options
Diffstat (limited to 'main.go')
-rw-r--r-- | main.go | 76 |
1 files changed, 76 insertions, 0 deletions
@@ -0,0 +1,76 @@ +package main + +import ( + "database/sql" + "log" + "math/rand" + "net/http" + "os" + "time" + + "web/config" + "web/renderer" + "web/repository" + "web/service" + + _ "github.com/mattn/go-sqlite3" +) + +func init() { + rand.Seed(time.Now().Unix()) +} + +func main() { + config, err := config.ParseFile("default.conf") + if err != nil { + log.Fatal(err) + } + + if !config.IsValid() { + log.Fatal("invalid config") + } + + renderer, err := renderer.NewRenderer(config.TemplatesGlobPattern) + if err != nil { + log.Fatal(err) + } + + db, err := sql.Open("sqlite3", config.DatabasePath) + if err != nil { + log.Fatal(err) + } + defer db.Close() + + sessionRepo, err := repository.NewSessionRepository(db) + if err != nil { + log.Fatal(err) + } + + appRepo, err := repository.NewAppRepository(db) + if err != nil { + log.Fatal(err) + } + + var logger *log.Logger + if len(config.Logfile) < 1 { + logger = log.New(os.Stdout, "", log.LstdFlags) + } else { + lf, err := os.Open(config.Logfile) + if err != nil { + log.Fatal(err) + } + defer lf.Close() + logger = log.New(lf, "", log.LstdFlags) + } + + s := service.NewService(config.ClientName, config.ClientScope, config.ClientWebsite, renderer, sessionRepo, appRepo) + s = service.NewAuthService(sessionRepo, appRepo, s) + s = service.NewLoggingService(logger, s) + handler := service.NewHandler(s, config.StaticDirectory) + + log.Println("listening on", config.ListenAddress) + err = http.ListenAndServe(config.ListenAddress, handler) + if err != nil { + log.Fatal(err) + } +} |