package main
import (
"fmt"
"html/template"
"log"
"net/http"
"os/exec"
"strings"
"github.com/joho/godotenv"
"github.com/labstack/echo/v4"
"github.com/labstack/echo/v4/middleware"
"github.com/namsral/flag"
)
var (
e *echo.Echo
t *Template
COMMIT_LONG_SHA string
COMMIT_SHORT_SHA string
VERSION string
PORT int
)
func execCmd(name string, args ...string) string {
cmd := exec.Command(name, args...)
stdout, err := cmd.Output()
if err != nil {
log.Fatal(err)
}
return strings.TrimSpace(string(stdout))
}
func init() {
err := godotenv.Load()
if err != nil {
log.Fatal("Error loading .env file")
}
flag.IntVar(&PORT, "PORT", 4321, "Server port")
flag.Parse()
e = echo.New()
t = &Template{
templates: template.Must(template.ParseGlob("template/*.html")),
}
COMMIT_LONG_SHA = execCmd("git", "rev-parse", "HEAD")
COMMIT_SHORT_SHA = execCmd("git", "rev-parse", "--short", "HEAD")
VERSION = fmt.Sprintf("v0.0.0+%s", COMMIT_SHORT_SHA)
log.Printf("Running commit %s", COMMIT_SHORT_SHA)
}
func main() {
e.Static("/", "public")
e.Renderer = t
e.GET("/", index)
e.GET("/login", login)
e.GET("/api/login", verifyLogin)
e.GET("/api/session", checkSession)
e.POST("/logout", logout)
e.Use(middleware.LoggerWithConfig(middleware.LoggerConfig{
Format: "${time_custom} ${method} ${uri} ${status}\n",
CustomTimeFormat: "2006-01-02 15:04:05.00000-0700",
}))
e.Use(sessionHandler)
e.HTTPErrorHandler = httpErrorHandler
err := e.Start(fmt.Sprintf("%s:%d", "127.0.0.1", PORT))
if err != http.ErrServerClosed {
log.Fatal(err)
}
}