web/main.go

96 lines
1.8 KiB
Go

package main
import (
"flag"
"html/template"
"net/http"
"github.com/CyCoreSystems/cycore-web/db"
"github.com/labstack/echo"
"github.com/labstack/echo/middleware"
"go.uber.org/zap"
)
var addr string
var debug bool
// Error indicates an error from processing
type Error struct {
Message string `json:"message"`
}
// NewError converts a standard error to an error response
func NewError(err error) *Error {
return &Error{
Message: err.Error(),
}
}
func init() {
flag.StringVar(&addr, "addr", ":9000", "listen address")
flag.BoolVar(&debug, "debug", false, "run with debug logging")
}
func main() {
flag.Parse()
var err error
var logger *zap.Logger
if debug {
logger, err = zap.NewDevelopment()
} else {
logger, err = zap.NewProduction()
}
if err != nil {
panic("failed to create logger: " + err.Error())
}
defer logger.Sync() // nolint
log := logger.Sugar()
err = db.Connect()
if err != nil {
log.Panicf("failed to open database: %v", err)
}
defer db.Get().Close() // nolint
e := echo.New()
//e.Use(middleware.CSRF())
e.Use(middleware.Gzip())
e.Use(middleware.Logger())
e.Use(middleware.Recover())
//e.Use(middleware.Secure())
// Create custom context
e.Use(func(h echo.HandlerFunc) echo.HandlerFunc {
return func(c echo.Context) error {
cc := &Context{
Context: c,
DB: db.Get(),
Log: log,
}
return h(cc)
}
})
e.Renderer = &Template{
templates: template.Must(template.ParseGlob("views/*.html")),
}
e.Static("/css/*", "css")
e.Static("/js/*", "js")
e.Static("/img/*", "img")
e.File("/scm.asc", "public/scm.asc")
e.GET("/", home)
e.POST("/contact/request", contactRequest)
log.Fatal(e.Start(addr))
}
func home(c echo.Context) error {
return c.Render(http.StatusOK, "index.html", nil)
}