keiji.go 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  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. var srcOpt webpages.ServiceOption
  29. var htmlReader fs.FS
  30. if *embedPtr == true {
  31. srcOpt = webpages.EMBED
  32. }
  33. if *fsPtr == true {
  34. srcOpt = webpages.FILESYSTEM
  35. }
  36. htmlReader = webpages.NewContentLayer(srcOpt)
  37. renderer := multitemplate.NewDynamic()
  38. templateNames := []string{
  39. "home",
  40. "blogpost",
  41. "digital_art",
  42. "login",
  43. "admin",
  44. "blogpost_editor",
  45. "post_options",
  46. "unhandled_error",
  47. "upload",
  48. "upload_status",
  49. "writing",
  50. "listing",
  51. }
  52. if srcOpt == webpages.FILESYSTEM {
  53. for i := range templateNames {
  54. name := templateNames[i]
  55. filePath := path.Join(os.Getenv("WEB_ROOT"), "html", fmt.Sprintf("%s.html", name))
  56. fmt.Println(filePath)
  57. renderer.AddFromFiles(name, filePath)
  58. }
  59. } else {
  60. for i := range templateNames {
  61. name := templateNames[i]
  62. renderer.AddFromString(
  63. name,
  64. webpages.ReadToString(htmlReader, path.Join("html", name+".html")),
  65. )
  66. }
  67. }
  68. e := gin.Default()
  69. dbfile := "sqlite.db"
  70. db, err := sql.Open("sqlite3", dbfile)
  71. if err != nil {
  72. log.Fatal(err)
  73. }
  74. e.HTMLRender = renderer
  75. webserverDb := helpers.NewSQLiteRepo(db)
  76. err = webserverDb.Migrate()
  77. if err != nil {
  78. log.Fatal(err)
  79. }
  80. routes.Register(e, DOMAIN_NAME, webserverDb, htmlReader)
  81. if os.Getenv("SSL_MODE") == "ON" {
  82. e.RunTLS(fmt.Sprintf("%s:%s", os.Getenv("HOST_ADDR"), os.Getenv("HOST_PORT")),
  83. os.Getenv(env.CHAIN), os.Getenv(env.KEY))
  84. }
  85. e.Run(fmt.Sprintf("%s:%s", os.Getenv("HOST_ADDR"), os.Getenv("HOST_PORT")))
  86. }