main.go 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. package main
  2. import (
  3. "github.com/kataras/iris"
  4. "github.com/kataras/go-template/html"
  5. "fmt"
  6. "git.mmnx.de/Moe/usermanager"
  7. "git.mmnx.de/Moe/databaseutils"
  8. "git.mmnx.de/Moe/configutils"
  9. "git.mmnx.de/Moe/templatehelpers"
  10. // "errors"
  11. )
  12. type pageUserParams struct { // TODO outsource
  13. HasError string
  14. Error string
  15. ReqDir string
  16. Username string
  17. Email string
  18. Admin string
  19. }
  20. func main() {
  21. conf := configutils.ReadConfig("config.json") // read config
  22. configutils.Conf = &conf // store conf globally accessible
  23. databaseutils.DBUtil = &databaseutils.DBUtils{configutils.Conf.DBUser, configutils.Conf.DBPass, configutils.Conf.DBHost, configutils.Conf.DBName, nil} // init dbutils
  24. databaseutils.DBUtil.Connect() // connect to db
  25. users := make([]usermanager.User, 0) // users list
  26. usermanager.Users = &users // store globally accessible
  27. fmt.Print("") // for not needing to remove fmt ...
  28. iris.Config.IsDevelopment = true
  29. //iris.Config.Render.Template.Gzip = true
  30. /** HELPER FUNCTION EXAMPLE **/
  31. /*config := html.DefaultConfig()
  32. config.Layout = "layouts/main.html"
  33. config.Helpers["boldme"] = func(input string) raymond.SafeString {
  34. return raymond.SafeString("<b> " + input + "</b>")
  35. }*/
  36. /** ROUTING **/
  37. iris.UseTemplate(html.New(html.Config{ // main layout for all pages (like a wrapper for boxes we register downwards)
  38. Layout: "layouts/main.html",
  39. }))
  40. iris.Static("/js", "./static/js", 1) // make js files in static/js available via /js
  41. iris.Static("/css", "./static/css", 1)
  42. iris.Static("/img", "./static/img", 1)
  43. iris.Static("/static", "./static/static", 1)
  44. iris.Post("/login", loginHandler) // login form handler
  45. iris.Post("/register", usermanager.CanBeAuthedHandler, usermanager.RegisterHandler, usermanager.LogoutHandler) // handles registration, logs user out
  46. iris.Post("/account", usermanager.AuthHandler, accountUpdateHandler, usermanager.LogoutHandler) // account management
  47. iris.Post("/admin", usermanager.AuthHandler, usermanager.AdminHandler, adminPostHandler) // admin panel
  48. iris.Get("/login", templateHandler) // TODO not when logged in
  49. iris.Get("/logout", usermanager.AuthHandler, usermanager.LogoutHandler)
  50. iris.Get("/register", templateHandler) // TODO not when logged in
  51. iris.Get("/", usermanager.AuthHandler, templateHandler)
  52. iris.Get("/account", usermanager.AuthHandler, templateHandler)
  53. iris.Get("/help", usermanager.AuthHandler, templateHandler)
  54. iris.Get("/admin", usermanager.AuthHandler, usermanager.AdminHandler, templateHandler)
  55. /** OTHER **/
  56. iris.Listen(":8080")
  57. }
  58. func loginHandler(ctx *iris.Context) {
  59. username := ctx.FormValueString("username") // POST values from login form
  60. password := ctx.FormValueString("password")
  61. user := usermanager.User{} // new user
  62. tokenString, err := user.Login(username, password) // try to login
  63. if err != nil {
  64. templatehelpers.ShowError(err.Error(), ctx, "login")
  65. } else {
  66. ctx.SetCookieKV("token", tokenString)
  67. templatehelpers.ShowNotification("Login successfull", ctx, "home")
  68. }
  69. }
  70. func accountUpdateHandler(ctx *iris.Context) {
  71. username := ctx.FormValueString("username") // POST values
  72. password := ctx.FormValueString("password")
  73. userID := ctx.GetString("userID")
  74. if err := usermanager.UserUpdateProcessor(username, password, userID); err != nil {
  75. templatehelpers.ShowError(err.Error(), ctx, "account")
  76. return
  77. }
  78. templatehelpers.ShowNotification("updated successfull", ctx, "account")
  79. }
  80. func adminPostHandler(ctx *iris.Context) {
  81. _ = usermanager.GenerateTokens(5) // generate tokens and store in db, we don't need them now
  82. templatehelpers.ShowNotification("tokens generated", ctx, "admin")
  83. }
  84. func templateHandler(ctx *iris.Context) {
  85. var params usermanager.PageUserParams
  86. userID := ctx.GetString("userID")
  87. user, err := usermanager.GetUser(userID)
  88. if err != nil {
  89. if err.Error() != "User not logged in" {
  90. fmt.Println(err.Error())
  91. }
  92. }
  93. template := ""
  94. switch ctx.RequestPath(false) {
  95. default:
  96. template = "home"
  97. params = usermanager.PageUserParams{"0", "", template, user.Username, user.Admin, []string{}}
  98. case "/":
  99. template = "home"
  100. params = usermanager.PageUserParams{"0", "", template, user.Username, user.Admin, []string{}}
  101. case "/account":
  102. template = "account"
  103. params = usermanager.PageUserParams{"0", "", template, user.Username, user.Admin, []string{}}
  104. case "/help":
  105. template = "help"
  106. params = usermanager.PageUserParams{"0", "", template, user.Username, user.Admin, []string{}}
  107. case "/admin":
  108. template = "admin"
  109. tokens := usermanager.GetTokens(false)
  110. params = usermanager.PageUserParams{"0", "", template, user.Username, user.Admin, tokens}
  111. case "/login":
  112. template = "login"
  113. params = usermanager.PageUserParams{"0", "", template, "", "0", []string{}}
  114. case "/register":
  115. template = "register"
  116. params = usermanager.PageUserParams{"0", "", template, "", "0", []string{}}
  117. }
  118. ctx.MustRender(template + "_box.html", params);
  119. }