Create basic server
Includes app config and some initialization
This commit is contained in:
81
app.go
Normal file
81
app.go
Normal file
@@ -0,0 +1,81 @@
|
||||
package writefreely
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
_ "github.com/go-sql-driver/mysql"
|
||||
"net/http"
|
||||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
|
||||
"github.com/gorilla/mux"
|
||||
"github.com/gorilla/sessions"
|
||||
"github.com/writeas/web-core/log"
|
||||
"github.com/writeas/writefreely/config"
|
||||
)
|
||||
|
||||
const (
|
||||
staticDir = "static/"
|
||||
)
|
||||
|
||||
type app struct {
|
||||
router *mux.Router
|
||||
cfg *config.Config
|
||||
keys *keychain
|
||||
sessionStore *sessions.CookieStore
|
||||
}
|
||||
|
||||
var shttp = http.NewServeMux()
|
||||
|
||||
func Serve() {
|
||||
log.Info("Initializing...")
|
||||
|
||||
log.Info("Loading configuration...")
|
||||
cfg, err := config.Load()
|
||||
if err != nil {
|
||||
log.Error("Unable to load configuration: %v", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
app := &app{
|
||||
cfg: cfg,
|
||||
}
|
||||
|
||||
// Load keys
|
||||
log.Info("Loading encryption keys...")
|
||||
err = initKeys(app)
|
||||
if err != nil {
|
||||
log.Error("\n%s\n", err)
|
||||
}
|
||||
|
||||
// Initialize modules
|
||||
r := mux.NewRouter()
|
||||
handler := NewHandler(app.sessionStore)
|
||||
|
||||
// Handle app routes
|
||||
initRoutes(handler, r, app.cfg)
|
||||
|
||||
// Handle static files
|
||||
fs := http.FileServer(http.Dir(staticDir))
|
||||
shttp.Handle("/", fs)
|
||||
r.PathPrefix("/").Handler(fs)
|
||||
|
||||
// Handle shutdown
|
||||
c := make(chan os.Signal, 2)
|
||||
signal.Notify(c, os.Interrupt, syscall.SIGTERM)
|
||||
go func() {
|
||||
<-c
|
||||
log.Info("Shutting down...")
|
||||
shutdown(app)
|
||||
log.Info("Done.")
|
||||
os.Exit(0)
|
||||
}()
|
||||
|
||||
// Start web application server
|
||||
http.Handle("/", r)
|
||||
log.Info("Serving on http://localhost:%d\n", app.cfg.Server.Port)
|
||||
log.Info("---")
|
||||
http.ListenAndServe(fmt.Sprintf(":%d", app.cfg.Server.Port), nil)
|
||||
}
|
||||
|
||||
func shutdown(app *app) {
|
||||
}
|
Reference in New Issue
Block a user