|
@@ -8,37 +8,51 @@ import (
|
|
|
"log"
|
|
|
"os"
|
|
|
"path"
|
|
|
+ "strconv"
|
|
|
|
|
|
"github.com/gin-contrib/multitemplate"
|
|
|
"github.com/gin-gonic/gin"
|
|
|
|
|
|
"git.aetherial.dev/aeth/keiji/pkg/env"
|
|
|
- "git.aetherial.dev/aeth/keiji/pkg/helpers"
|
|
|
"git.aetherial.dev/aeth/keiji/pkg/routes"
|
|
|
+ "git.aetherial.dev/aeth/keiji/pkg/storage"
|
|
|
"git.aetherial.dev/aeth/keiji/pkg/webpages"
|
|
|
|
|
|
_ "github.com/mattn/go-sqlite3"
|
|
|
)
|
|
|
|
|
|
-var DOMAIN_NAME string
|
|
|
+var contentMode, envPath string
|
|
|
+var blank bool
|
|
|
+
|
|
|
+func printUsage() string {
|
|
|
+ return "wrong"
|
|
|
+}
|
|
|
|
|
|
func main() {
|
|
|
- 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.StringVar(&contentMode, "content", "", "pass the option to run the webserver using filesystem or embedded html")
|
|
|
+ flag.StringVar(&envPath, "env", ".env", "pass specific ..env file to the program startup")
|
|
|
+ flag.BoolVar(&blank, "blank", false, "create a blank .env template")
|
|
|
flag.Parse()
|
|
|
- err := env.LoadAndVerifyEnv(*envPtr, env.REQUIRED_VARS)
|
|
|
+ if blank {
|
|
|
+ env.WriteTemplate(".env.template")
|
|
|
+ fmt.Println("Blank template written to: .env.template")
|
|
|
+ os.Exit(0)
|
|
|
+ }
|
|
|
+ err := env.LoadAndVerifyEnv(envPath, env.REQUIRED_VARS)
|
|
|
if err != nil {
|
|
|
log.Fatal("Error when loading env file: ", err)
|
|
|
}
|
|
|
var srcOpt webpages.ServiceOption
|
|
|
- var htmlReader fs.FS
|
|
|
- if *embedPtr == true {
|
|
|
- srcOpt = webpages.EMBED
|
|
|
- }
|
|
|
- if *fsPtr == true {
|
|
|
+ switch contentMode {
|
|
|
+ case "fs":
|
|
|
srcOpt = webpages.FILESYSTEM
|
|
|
+ case "embed":
|
|
|
+ srcOpt = webpages.EMBED
|
|
|
+ default:
|
|
|
+ printUsage()
|
|
|
+ os.Exit(1)
|
|
|
}
|
|
|
+ var htmlReader fs.FS
|
|
|
htmlReader = webpages.NewContentLayer(srcOpt)
|
|
|
renderer := multitemplate.NewDynamic()
|
|
|
templateNames := []string{
|
|
@@ -55,13 +69,9 @@ func main() {
|
|
|
"writing",
|
|
|
"listing",
|
|
|
}
|
|
|
+ e := gin.Default()
|
|
|
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)
|
|
|
- }
|
|
|
+ e.LoadHTMLGlob(path.Join(os.Getenv("WEB_ROOT"), "html", "*.html"))
|
|
|
} else {
|
|
|
for i := range templateNames {
|
|
|
name := templateNames[i]
|
|
@@ -70,21 +80,24 @@ func main() {
|
|
|
webpages.ReadToString(htmlReader, path.Join("html", name+".html")),
|
|
|
)
|
|
|
}
|
|
|
+ e.HTMLRender = renderer
|
|
|
}
|
|
|
- e := gin.Default()
|
|
|
dbfile := "sqlite.db"
|
|
|
db, err := sql.Open("sqlite3", dbfile)
|
|
|
if err != nil {
|
|
|
log.Fatal(err)
|
|
|
}
|
|
|
- e.HTMLRender = renderer
|
|
|
- webserverDb := helpers.NewSQLiteRepo(db)
|
|
|
+ webserverDb := storage.NewSQLiteRepo(db)
|
|
|
err = webserverDb.Migrate()
|
|
|
if err != nil {
|
|
|
log.Fatal(err)
|
|
|
}
|
|
|
- routes.Register(e, DOMAIN_NAME, webserverDb, htmlReader)
|
|
|
- if os.Getenv("SSL_MODE") == "ON" {
|
|
|
+ routes.Register(e, os.Getenv("DOMAIN_NAME"), webserverDb, htmlReader)
|
|
|
+ ssl, err := strconv.ParseBool(os.Getenv("USE_SSL"))
|
|
|
+ if err != nil {
|
|
|
+ log.Fatal("Invalid option passed to USE_SSL: ", os.Getenv("USE_SSL"))
|
|
|
+ }
|
|
|
+ if ssl {
|
|
|
e.RunTLS(fmt.Sprintf("%s:%s", os.Getenv("HOST_ADDR"), os.Getenv("HOST_PORT")),
|
|
|
os.Getenv(env.CHAIN), os.Getenv(env.KEY))
|
|
|
}
|