|
@@ -4,8 +4,10 @@ import (
|
|
"database/sql"
|
|
"database/sql"
|
|
"flag"
|
|
"flag"
|
|
"fmt"
|
|
"fmt"
|
|
|
|
+ "io/fs"
|
|
"log"
|
|
"log"
|
|
"os"
|
|
"os"
|
|
|
|
+ "path"
|
|
|
|
|
|
"github.com/gin-contrib/multitemplate"
|
|
"github.com/gin-contrib/multitemplate"
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/gin-gonic/gin"
|
|
@@ -21,82 +23,56 @@ import (
|
|
var DOMAIN_NAME string
|
|
var DOMAIN_NAME string
|
|
|
|
|
|
func main() {
|
|
func main() {
|
|
- htmlSrc := flag.String("html-src", "", "Force the server to serve embedded content, for production use")
|
|
|
|
|
|
+ embedPtr := flag.Bool("embed", false, "Force the server to serve embedded content, for production use")
|
|
|
|
+ fsPtr := flag.Bool("fs", false, "Force the server to serve embedded content, for production use")
|
|
|
|
+ envPtr := flag.String("env", ".env", "pass specific ..env file to the program startup")
|
|
flag.Parse()
|
|
flag.Parse()
|
|
- args := os.Args
|
|
|
|
- err := env.LoadAndVerifyEnv(args[1], env.REQUIRED_VARS)
|
|
|
|
|
|
+ err := env.LoadAndVerifyEnv(*envPtr, env.REQUIRED_VARS)
|
|
if err != nil {
|
|
if err != nil {
|
|
log.Fatal("Error when loading env file: ", err)
|
|
log.Fatal("Error when loading env file: ", err)
|
|
}
|
|
}
|
|
REDIS_PORT := os.Getenv("REDIS_PORT")
|
|
REDIS_PORT := os.Getenv("REDIS_PORT")
|
|
REDIS_ADDR := os.Getenv("REDIS_ADDR")
|
|
REDIS_ADDR := os.Getenv("REDIS_ADDR")
|
|
var srcOpt webpages.ServiceOption
|
|
var srcOpt webpages.ServiceOption
|
|
- if *htmlSrc == "filesystem" {
|
|
|
|
- srcOpt = webpages.FILESYSTEM
|
|
|
|
- }
|
|
|
|
- if *htmlSrc == "embed" {
|
|
|
|
|
|
+ var htmlReader fs.FS
|
|
|
|
+ if *embedPtr == true {
|
|
srcOpt = webpages.EMBED
|
|
srcOpt = webpages.EMBED
|
|
}
|
|
}
|
|
- fmt.Println(srcOpt, *htmlSrc)
|
|
|
|
- // htmlReader := webpages.NewContentLayer(webpages.ServiceOption(webpages.FILESYSTEM))
|
|
|
|
- htmlReader := webpages.FilesystemWebpages{Webroot: os.Getenv("WEB_ROOT")}
|
|
|
|
|
|
+ if *fsPtr == true {
|
|
|
|
+ srcOpt = webpages.FILESYSTEM
|
|
|
|
+ }
|
|
|
|
+ htmlReader = webpages.NewContentLayer(srcOpt)
|
|
renderer := multitemplate.NewDynamic()
|
|
renderer := multitemplate.NewDynamic()
|
|
- renderer.AddFromString(
|
|
|
|
- "head",
|
|
|
|
- webpages.ReadToString(htmlReader, "head.html"),
|
|
|
|
- )
|
|
|
|
- renderer.AddFromString(
|
|
|
|
- "navigation",
|
|
|
|
- webpages.ReadToString(htmlReader, "navigation.html"),
|
|
|
|
- )
|
|
|
|
- renderer.AddFromString(
|
|
|
|
|
|
+ templateNames := []string{
|
|
"home",
|
|
"home",
|
|
- webpages.ReadToString(htmlReader, "home.html"),
|
|
|
|
- )
|
|
|
|
- renderer.AddFromString(
|
|
|
|
"blogpost",
|
|
"blogpost",
|
|
- webpages.ReadToString(htmlReader, "blogpost.html"),
|
|
|
|
- )
|
|
|
|
- renderer.AddFromString(
|
|
|
|
"digital_art",
|
|
"digital_art",
|
|
- webpages.ReadToString(htmlReader, "digital_art.html"),
|
|
|
|
- )
|
|
|
|
- renderer.AddFromString(
|
|
|
|
"login",
|
|
"login",
|
|
- webpages.ReadToString(htmlReader, "login.html"),
|
|
|
|
- )
|
|
|
|
- renderer.AddFromString(
|
|
|
|
"admin",
|
|
"admin",
|
|
- webpages.ReadToString(htmlReader, "admin.html"),
|
|
|
|
- )
|
|
|
|
- renderer.AddFromString(
|
|
|
|
"blogpost_editor",
|
|
"blogpost_editor",
|
|
- webpages.ReadToString(htmlReader, "blogpost_editor.html"),
|
|
|
|
- )
|
|
|
|
- renderer.AddFromString(
|
|
|
|
"new_blogpost",
|
|
"new_blogpost",
|
|
- webpages.ReadToString(htmlReader, "new_blogpost.html"),
|
|
|
|
- )
|
|
|
|
- renderer.AddFromString(
|
|
|
|
- "upload_status",
|
|
|
|
- webpages.ReadToString(htmlReader, "upload_status.html"),
|
|
|
|
- )
|
|
|
|
- renderer.AddFromString(
|
|
|
|
"unhandled_error",
|
|
"unhandled_error",
|
|
- webpages.ReadToString(htmlReader, "unhandled_error.html"),
|
|
|
|
- )
|
|
|
|
- renderer.AddFromString(
|
|
|
|
"upload",
|
|
"upload",
|
|
- webpages.ReadToString(htmlReader, "upload.html"),
|
|
|
|
- )
|
|
|
|
- renderer.AddFromString(
|
|
|
|
|
|
+ "upload_status",
|
|
"writing",
|
|
"writing",
|
|
- webpages.ReadToString(htmlReader, "writing.html"),
|
|
|
|
- )
|
|
|
|
- renderer.AddFromString(
|
|
|
|
"listing",
|
|
"listing",
|
|
- webpages.ReadToString(htmlReader, "listing.html"),
|
|
|
|
- )
|
|
|
|
|
|
+ }
|
|
|
|
+ if srcOpt == webpages.FILESYSTEM {
|
|
|
|
+ for i := range templateNames {
|
|
|
|
+ name := templateNames[i]
|
|
|
|
+ filePath := path.Join(os.Getenv("WEB_ROOT"), "html", fmt.Sprintf("%s.html", name))
|
|
|
|
+ fmt.Println(filePath)
|
|
|
|
+ renderer.AddFromFiles(name, filePath)
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ for i := range templateNames {
|
|
|
|
+ name := templateNames[i]
|
|
|
|
+ renderer.AddFromString(
|
|
|
|
+ name,
|
|
|
|
+ webpages.ReadToString(htmlReader, path.Join("html", name+".html")),
|
|
|
|
+ )
|
|
|
|
+ }
|
|
|
|
+ }
|
|
e := gin.Default()
|
|
e := gin.Default()
|
|
dbfile := "sqlite.db"
|
|
dbfile := "sqlite.db"
|
|
db, err := sql.Open("sqlite3", dbfile)
|
|
db, err := sql.Open("sqlite3", dbfile)
|
|
@@ -104,13 +80,12 @@ func main() {
|
|
log.Fatal(err)
|
|
log.Fatal(err)
|
|
}
|
|
}
|
|
e.HTMLRender = renderer
|
|
e.HTMLRender = renderer
|
|
- // e.LoadHTMLGlob("pkg/webpages/html/*.html")
|
|
|
|
webserverDb := helpers.NewSQLiteRepo(db)
|
|
webserverDb := helpers.NewSQLiteRepo(db)
|
|
err = webserverDb.Migrate()
|
|
err = webserverDb.Migrate()
|
|
if err != nil {
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
log.Fatal(err)
|
|
}
|
|
}
|
|
- routes.Register(e, DOMAIN_NAME, REDIS_PORT, REDIS_ADDR, webserverDb)
|
|
|
|
|
|
+ routes.Register(e, DOMAIN_NAME, REDIS_PORT, REDIS_ADDR, webserverDb, htmlReader)
|
|
if os.Getenv("SSL_MODE") == "ON" {
|
|
if os.Getenv("SSL_MODE") == "ON" {
|
|
e.RunTLS(fmt.Sprintf("%s:%s", os.Getenv("HOST_ADDR"), os.Getenv("HOST_PORT")),
|
|
e.RunTLS(fmt.Sprintf("%s:%s", os.Getenv("HOST_ADDR"), os.Getenv("HOST_PORT")),
|
|
os.Getenv(env.CHAIN), os.Getenv(env.KEY))
|
|
os.Getenv(env.CHAIN), os.Getenv(env.KEY))
|