webserver.go 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. package main
  2. import (
  3. "database/sql"
  4. "flag"
  5. "fmt"
  6. "io/fs"
  7. "log"
  8. "os"
  9. "path"
  10. "github.com/gin-contrib/multitemplate"
  11. "github.com/gin-gonic/gin"
  12. "git.aetherial.dev/aeth/keiji/pkg/env"
  13. "git.aetherial.dev/aeth/keiji/pkg/helpers"
  14. "git.aetherial.dev/aeth/keiji/pkg/routes"
  15. "git.aetherial.dev/aeth/keiji/pkg/webpages"
  16. _ "github.com/mattn/go-sqlite3"
  17. )
  18. var DOMAIN_NAME string
  19. func main() {
  20. embedPtr := flag.Bool("embed", false, "Force the server to serve embedded content, for production use")
  21. fsPtr := flag.Bool("fs", false, "Force the server to serve embedded content, for production use")
  22. envPtr := flag.String("env", ".env", "pass specific ..env file to the program startup")
  23. flag.Parse()
  24. err := env.LoadAndVerifyEnv(*envPtr, env.REQUIRED_VARS)
  25. if err != nil {
  26. log.Fatal("Error when loading env file: ", err)
  27. }
  28. REDIS_PORT := os.Getenv("REDIS_PORT")
  29. REDIS_ADDR := os.Getenv("REDIS_ADDR")
  30. var srcOpt webpages.ServiceOption
  31. var htmlReader fs.FS
  32. if *embedPtr == true {
  33. srcOpt = webpages.EMBED
  34. }
  35. if *fsPtr == true {
  36. srcOpt = webpages.FILESYSTEM
  37. }
  38. htmlReader = webpages.NewContentLayer(srcOpt)
  39. renderer := multitemplate.NewDynamic()
  40. templateNames := []string{
  41. "home",
  42. "blogpost",
  43. "digital_art",
  44. "login",
  45. "admin",
  46. "blogpost_editor",
  47. "post_options",
  48. "unhandled_error",
  49. "upload",
  50. "upload_status",
  51. "writing",
  52. "listing",
  53. }
  54. if srcOpt == webpages.FILESYSTEM {
  55. for i := range templateNames {
  56. name := templateNames[i]
  57. filePath := path.Join(os.Getenv("WEB_ROOT"), "html", fmt.Sprintf("%s.html", name))
  58. fmt.Println(filePath)
  59. renderer.AddFromFiles(name, filePath)
  60. }
  61. } else {
  62. for i := range templateNames {
  63. name := templateNames[i]
  64. renderer.AddFromString(
  65. name,
  66. webpages.ReadToString(htmlReader, path.Join("html", name+".html")),
  67. )
  68. }
  69. }
  70. e := gin.Default()
  71. dbfile := "sqlite.db"
  72. db, err := sql.Open("sqlite3", dbfile)
  73. if err != nil {
  74. log.Fatal(err)
  75. }
  76. e.HTMLRender = renderer
  77. webserverDb := helpers.NewSQLiteRepo(db)
  78. err = webserverDb.Migrate()
  79. if err != nil {
  80. log.Fatal(err)
  81. }
  82. routes.Register(e, DOMAIN_NAME, REDIS_PORT, REDIS_ADDR, webserverDb, htmlReader)
  83. if os.Getenv("SSL_MODE") == "ON" {
  84. e.RunTLS(fmt.Sprintf("%s:%s", os.Getenv("HOST_ADDR"), os.Getenv("HOST_PORT")),
  85. os.Getenv(env.CHAIN), os.Getenv(env.KEY))
  86. }
  87. e.Run(fmt.Sprintf("%s:%s", os.Getenv("HOST_ADDR"), os.Getenv("HOST_PORT")))
  88. }