main.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. package main
  2. import (
  3. "github.com/kataras/iris"
  4. "github.com/kataras/go-template/html"
  5. "fmt"
  6. "git.mmnx.de/Moe/databaseutils"
  7. "git.mmnx.de/Moe/usermanager"
  8. "git.mmnx.de/Moe/configutils"
  9. )
  10. type pageParams struct{
  11. HasError string
  12. Error string
  13. ReqDir string
  14. IsAdmin string
  15. } // {Error: ""}
  16. type pageUserParams struct{
  17. HasError string
  18. Error string
  19. ReqDir string
  20. Username string
  21. Email string
  22. IsAdmin string
  23. } // {Error: ""}
  24. func main() {
  25. conf := configutils.ReadConfig("config.json") // read config
  26. configutils.Conf = &conf // store conf globally accessible
  27. databaseutils.DBUtil = &databaseutils.DBUtils{configutils.Conf.DBUser, configutils.Conf.DBPass, configutils.Conf.DBHost, configutils.Conf.DBName, nil} // init dbutils
  28. databaseutils.DBUtil.Connect() // connect to db
  29. users := make([]usermanager.User, 0) // users list
  30. usermanager.Users = &users // store globally accessible
  31. fmt.Print("") // for not needing to remove fmt ...
  32. iris.Config.IsDevelopment = true
  33. //iris.Config.Render.Template.Gzip = true
  34. /** HELPER FUNCTION EXAMPLE **/
  35. /*config := html.DefaultConfig()
  36. config.Layout = "layouts/main.html"
  37. config.Helpers["boldme"] = func(input string) raymond.SafeString {
  38. return raymond.SafeString("<b> " + input + "</b>")
  39. }*/
  40. /** ROUTING **/
  41. iris.Static("/js", "./static/js", 1)
  42. iris.Static("/css", "./static/css", 1)
  43. iris.Static("/img", "./static/img", 1)
  44. iris.Post("/login", loginHandler) // login form handler
  45. iris.Get("/", usermanager.AuthHandler, func(ctx *iris.Context) {
  46. params := pageParams{"0", "", "", "0"}
  47. if err := ctx.Render("home_boxes.html", params); err != nil {
  48. println(err.Error())
  49. }
  50. })
  51. iris.Get("/account", usermanager.AuthHandler, func(ctx *iris.Context) {
  52. params := pageUserParams{"0", "", "account", "moe", "moritz@mmnx.de", "0"}
  53. if err := ctx.Render("account_box.html", params); err != nil {
  54. println(err.Error())
  55. }
  56. })
  57. iris.Get("/login", func(ctx *iris.Context) {
  58. params := pageParams{"0", "", "login", "0"}
  59. if err := ctx.Render("login.html", params); err != nil { // no error for normal login screen, struct{ Error string }{Error: ""}
  60. println(err.Error())
  61. }
  62. })
  63. iris.Get("/test", usermanager.AuthHandler, testHandler)
  64. // remove the layout for a specific route
  65. iris.Get("/nolayout", func(ctx *iris.Context) {
  66. if err := ctx.Render("page1.html", nil, iris.RenderOptions{"layout": iris.NoLayout}); err != nil {
  67. println(err.Error())
  68. }
  69. })
  70. iris.UseTemplate(html.New(html.Config{
  71. Layout: "layouts/main.html",
  72. }))
  73. /** OTHER **/
  74. iris.Listen(":8080")
  75. }
  76. func loginHandler(ctx *iris.Context) {
  77. username := ctx.FormValueString("username") // POST values
  78. password := ctx.FormValueString("password")
  79. user := usermanager.User{} // new user
  80. tokenString, err := user.Login(username, password) // try to login
  81. if err != nil { // TODO: template compatible error handling
  82. ctx.Render("login.html", pageParams{"1", err.Error(), "login", "0"})
  83. } else {
  84. ctx.SetCookieKV("token", tokenString)
  85. ctx.Redirect("/")
  86. //ctx.Render("home.html", nil) // TODO: error-alternative success (main.html)
  87. }
  88. }
  89. func testHandler(ctx *iris.Context) {
  90. userID := ctx.Get("userID")
  91. ctx.Write("Test %d", userID);
  92. }