20 rand.Seed(time.Now().Unix())
24 config, err := config.ParseFile("default.conf")
29 if !config.IsValid() {
30 log.Fatal("invalid config")
33 renderer, err := renderer.NewRenderer(config.TemplatesGlobPattern)
38 err = os.Mkdir(config.DatabasePath, 0755)
39 if err != nil && !os.IsExist(err) {
43 sessionDB, err := kv.NewDatabse(filepath.Join(config.DatabasePath, "session"))
48 appDB, err := kv.NewDatabse(filepath.Join(config.DatabasePath, "app"))
53 sessionRepo := repository.NewSessionRepository(sessionDB)
54 appRepo := repository.NewAppRepository(appDB)
56 customCSS := config.CustomCSS
57 if !strings.HasPrefix(customCSS, "http://") &&
58 !strings.HasPrefix(customCSS, "https://") {
59 customCSS = "/static/" + customCSS
62 var logger *log.Logger
63 if len(config.Logfile) < 1 {
64 logger = log.New(os.Stdout, "", log.LstdFlags)
66 lf, err := os.Open(config.Logfile)
71 logger = log.New(lf, "", log.LstdFlags)
74 s := service.NewService(config.ClientName, config.ClientScope, config.ClientWebsite,
75 customCSS, config.PostFormats, renderer, sessionRepo, appRepo)
76 s = service.NewAuthService(sessionRepo, appRepo, s)
77 s = service.NewLoggingService(logger, s)
78 handler := service.NewHandler(s, config.StaticDirectory)
80 log.Println("listening on", config.ListenAddress)
81 err = http.ListenAndServe(config.ListenAddress, handler)