starting on frontend, auth finished for backend

This commit is contained in:
2021-08-22 22:24:59 -04:00
parent 59c2a7a0d5
commit 85d6c610f4
19 changed files with 1043 additions and 22 deletions

59
main.go
View File

@@ -1,16 +1,27 @@
package main
import (
"embed"
_ "embed"
"fmt"
"io/fs"
"log"
"net/http"
"os"
"github.com/asdine/storm/v3"
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/basicauth"
"github.com/gofiber/fiber/v2/middleware/filesystem"
"github.com/gofiber/fiber/v2/middleware/logger"
"github.com/rs/zerolog"
)
var (
//go:embed frontend/build
frontend embed.FS
)
type Server struct {
Config *Config
Database *storm.DB
@@ -20,6 +31,7 @@ type Server struct {
}
func main() {
server := Server{}
err := LoadConfig(&server)
if err != nil {
@@ -27,19 +39,54 @@ func main() {
}
fmt.Println("Server: ", server.Config)
app := fiber.New()
// Setup our logger
app.Use(logger.New(logger.Config{
Output: server.LogFile,
TimeZone: server.Config.Timezone,
Format: `{"logtype":"webserver", "pid":"${pid}", "requestid":"${locals:requestid}", "status":"${status}", "method":"${method}", "path":"${path}"}` + "\n",
}))
// Setup our basic authentication if defined
if server.Config.Authentication.BasicAuth {
app.Use(basicauth.New(basicauth.Config{
Users: map[string]string{
server.Config.Authentication.UserName: server.Config.Authentication.Password,
},
}))
}
server.WebServer = app
server.WebServer.Server().Logger.Printf("Webserver Started")
app.Server().Logger.Printf("HERE!")
defer server.LogFile.Close() // Close out our logfile when closing server.
server.Database = SetupDatabase(&server) // Setup our database
defer server.Database.Close()
server.WebServer.Get("/", func(c *fiber.Ctx) error {
return c.SendString("Hello, World 👋 RELOADED!")
server.Log.Info().Msg("Database and Config loaded, starting webserver...") // Send all good message
// Loading in the frontend files that were embedded
reactFE, err := fs.Sub(frontend, "frontend/build")
if err != nil {
server.Log.Fatal().Msgf("Unable to load frontend/build: ", err)
}
staticFE, err := fs.Sub(frontend, "frontend/build/static")
if err != nil {
server.Log.Fatal().Msgf("Unable to load static files: ", err)
}
// serve our frontend and static files from our embed
server.WebServer.Use("/", filesystem.New(filesystem.Config{
Root: http.FS(reactFE),
}))
server.WebServer.Use("/static", filesystem.New(filesystem.Config{
Root: http.FS(staticFE),
PathPrefix: "static",
}))
// Load in our routes
server.WebServer.Get("/hello", func(c *fiber.Ctx) error { // Basic Hello Route
return c.SendString("GoInventorize Backend Hello Route!")
})
// fmt.Println("Port listen on: ", os.Getenv("PORT"))
// fmt.Println("Timezone is: ", os.Getenv("TZ"))
// Location Routes
server.WebServer.Get("/locations", server.GetAllLocationsHandler)
server.WebServer.Post("/locations/new", server.AddNewLocationHandler)
server.WebServer.Delete("/locations/:locID", server.DeleteLocationHandler)
server.WebServer.Listen(fmt.Sprintf(":%s", server.Config.Server.Port))
}