|
|
@@ -45,127 +45,45 @@ func main() {
|
|
|
|
|
|
/** ROUTING **/
|
|
|
|
|
|
+ iris.UseTemplate(html.New(html.Config{
|
|
|
+ Layout: "layouts/main.html",
|
|
|
+ }))
|
|
|
+
|
|
|
iris.Static("/js", "./static/js", 1)
|
|
|
iris.Static("/css", "./static/css", 1)
|
|
|
iris.Static("/img", "./static/img", 1)
|
|
|
iris.Static("/static", "./static/static", 1)
|
|
|
|
|
|
iris.Post("/login", loginHandler) // login form handler
|
|
|
- iris.Post("/account", usermanager.AuthHandler, accountUpdateHandler) // Account update handler TODO implement
|
|
|
- iris.Post("/admin", usermanager.AuthHandler, adminPostHandler)
|
|
|
+ iris.Post("/account", usermanager.AuthHandler, accountUpdateHandler)
|
|
|
+ iris.Post("/admin", usermanager.AuthHandler, usermanager.AdminHandler, adminPostHandler)
|
|
|
|
|
|
- // TODO register with token
|
|
|
- // TODO reset pw with token
|
|
|
+ iris.Get("/login", templateHandler)
|
|
|
+ iris.Get("/", usermanager.AuthHandler, templateHandler)
|
|
|
+ iris.Get("/account", usermanager.AuthHandler, templateHandler)
|
|
|
+ iris.Get("/help", usermanager.AuthHandler, templateHandler)
|
|
|
|
|
|
- iris.Get("/", usermanager.AuthHandler, func(ctx *iris.Context) {
|
|
|
- params := usermanager.PageParams{"0", "", "", "0"}
|
|
|
- if err := ctx.Render("home_boxes.html", params); err != nil {
|
|
|
- println(err.Error())
|
|
|
- }
|
|
|
- })
|
|
|
-
|
|
|
- iris.Get("/account", usermanager.AuthHandler, func(ctx *iris.Context) { // todo outsource all those
|
|
|
- err := errors.New(""); err = nil
|
|
|
- // TODO: OUTSOURCE THIS IN FUNCTION
|
|
|
+ iris.Get("/admin", usermanager.AuthHandler, usermanager.AdminHandler, func(ctx *iris.Context) { // TODO integrate in outsource (templateHandler)
|
|
|
userID := ctx.GetString("userID")
|
|
|
+ user, err := usermanager.GetUser(userID)
|
|
|
|
|
|
- usersArrayID := usermanager.SearchUser(userID)
|
|
|
-
|
|
|
- if usersArrayID == -1 { // TODO check if unneccessary (AuthHandler)
|
|
|
- err = errors.New("User not logged in WTF")
|
|
|
- ctx.Render("account_box.html", pageUserParams{"1", err.Error(), "account", "", "", "0"})
|
|
|
- return
|
|
|
- }
|
|
|
-
|
|
|
- user := (*usermanager.Users)[usersArrayID] // user must be logged in to do this -> get from users list
|
|
|
-
|
|
|
- params := usermanager.PageUserParams{"0", "", "account", user.Username, "", user.Admin}
|
|
|
- if err := ctx.Render("account_box.html", params); err != nil {
|
|
|
- println(err.Error())
|
|
|
- }
|
|
|
- })
|
|
|
-
|
|
|
- iris.Get("/help", usermanager.AuthHandler, func(ctx *iris.Context) { // todo outsource all those
|
|
|
- err := errors.New(""); err = nil
|
|
|
- // TODO: OUTSOURCE THIS IN FUNCTION
|
|
|
- userID := ctx.GetString("userID")
|
|
|
-
|
|
|
- usersArrayID := usermanager.SearchUser(userID)
|
|
|
-
|
|
|
- if usersArrayID == -1 { // TODO check if unneccessary (AuthHandler)
|
|
|
- err = errors.New("User not logged in WTF")
|
|
|
- ctx.Render("account_box.html", pageUserParams{"1", err.Error(), "account", "", "", "0"})
|
|
|
- return
|
|
|
- }
|
|
|
-
|
|
|
- user := (*usermanager.Users)[usersArrayID] // user must be logged in to do this -> get from users list
|
|
|
-
|
|
|
- params := usermanager.PageUserParams{"0", "", "help", user.Username, "", user.Admin}
|
|
|
- if err := ctx.Render("help_box.html", params); err != nil {
|
|
|
- println(err.Error())
|
|
|
- }
|
|
|
- })
|
|
|
-
|
|
|
- iris.Get("/admin", usermanager.AuthHandler, func(ctx *iris.Context) { // todo outsource all those
|
|
|
- err := errors.New(""); err = nil
|
|
|
- // TODO: OUTSOURCE THIS IN FUNCTION
|
|
|
- userID := ctx.GetString("userID")
|
|
|
-
|
|
|
- usersArrayID := usermanager.SearchUser(userID)
|
|
|
-
|
|
|
- if usersArrayID == -1 { // TODO check if unneccessary (AuthHandler)
|
|
|
- err = errors.New("User not logged in WTF")
|
|
|
- //ctx.Render("account_box.html", pageUserParams{"1", err.Error(), "account", "", "", "0"})
|
|
|
- fmt.Println("Errors: ", err.Error())
|
|
|
- ctx.Redirect("/")
|
|
|
- return
|
|
|
- }
|
|
|
-
|
|
|
- user := (*usermanager.Users)[usersArrayID] // user must be logged in to do this -> get from users list
|
|
|
-
|
|
|
- if user.Admin != "1" { // check if user is admin // TODO check if useless / add adminAreaHandler
|
|
|
- err = errors.New("User no Admin")
|
|
|
- ctx.Redirect("/")
|
|
|
- return
|
|
|
+ tokens, err := databaseutils.DBUtil.GetRows("*", "tokens", "used", "0") // get unused tokens
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println(err.Error()) // TODO: nicer
|
|
|
}
|
|
|
|
|
|
- tokens, err := databaseutils.DBUtil.GetRows("*", "tokens", "used", "0") // get unused tokens
|
|
|
message := "" // string for textarea output in /admin
|
|
|
|
|
|
for i, _ := range tokens {
|
|
|
message += tokens[i][1] + "\n"
|
|
|
}
|
|
|
|
|
|
- if err != nil {
|
|
|
- fmt.Println(err.Error()) // TODO: nice
|
|
|
- }
|
|
|
-
|
|
|
params := usermanager.PageUserParamsMessage{"0", "", "admin", user.Username, "", user.Admin, message}
|
|
|
if err := ctx.Render("admin_box.html", params); err != nil {
|
|
|
println(err.Error())
|
|
|
}
|
|
|
})
|
|
|
|
|
|
- iris.Get("/login", func(ctx *iris.Context) {
|
|
|
- params := usermanager.PageParams{"0", "", "login", "0"}
|
|
|
- if err := ctx.Render("login.html", params); err != nil { // no error for normal login screen, struct{ Error string }{Error: ""}
|
|
|
- println(err.Error())
|
|
|
- }
|
|
|
- })
|
|
|
-
|
|
|
- iris.Get("/test", usermanager.AuthHandler, testHandler)
|
|
|
-
|
|
|
- // remove the layout for a specific route
|
|
|
- iris.Get("/nolayout", func(ctx *iris.Context) {
|
|
|
- if err := ctx.Render("page1.html", nil, iris.RenderOptions{"layout": iris.NoLayout}); err != nil {
|
|
|
- println(err.Error())
|
|
|
- }
|
|
|
- })
|
|
|
-
|
|
|
- iris.UseTemplate(html.New(html.Config{
|
|
|
- Layout: "layouts/main.html",
|
|
|
- }))
|
|
|
-
|
|
|
/** OTHER **/
|
|
|
|
|
|
iris.Listen(":8080")
|
|
|
@@ -179,27 +97,20 @@ func loginHandler(ctx *iris.Context) {
|
|
|
tokenString, err := user.Login(username, password) // try to login
|
|
|
|
|
|
if err != nil {
|
|
|
- ctx.Render("login.html", usermanager.PageParams{"1", err.Error(), "login", "0"})
|
|
|
+ ctx.Render("login_box.html", usermanager.PageParams{"1", err.Error(), "login", "0"})
|
|
|
} else {
|
|
|
ctx.SetCookieKV("token", tokenString)
|
|
|
ctx.Redirect("/")
|
|
|
- //ctx.Render("home.html", nil) // TODO: error-alternative success (main.html)
|
|
|
+ // TODO: error-alternative success (main.html)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-func accountUpdateHandler(ctx *iris.Context) {
|
|
|
+func accountUpdateHandler(ctx *iris.Context) { // TODO tidy up?
|
|
|
err := errors.New(""); err = nil
|
|
|
username := ctx.FormValueString("username") // POST values
|
|
|
password := ctx.FormValueString("password")
|
|
|
userID := ctx.GetString("userID")
|
|
|
usersArrayID := usermanager.SearchUser(userID)
|
|
|
-
|
|
|
- if usersArrayID == -1 { // TODO check if this can never happen (routing ...)
|
|
|
- err = errors.New("User not logged in WTF")
|
|
|
- ctx.Render("account_box.html", usermanager.PageUserParams{"1", err.Error(), "account", "", "", "0"})
|
|
|
- return
|
|
|
- }
|
|
|
-
|
|
|
user := (*usermanager.Users)[usersArrayID] // user must be logged in to do this -> get from users list
|
|
|
|
|
|
if username != "" && usermanager.SearchUserByUsername(username) != -1 && username != user.Username { // username can't be changed as there already exists a user with that name or it's the old name
|
|
|
@@ -248,7 +159,7 @@ func accountUpdateHandler(ctx *iris.Context) {
|
|
|
|
|
|
// TODO success notifications
|
|
|
|
|
|
- if err != nil { // TODO: template compatible error handling
|
|
|
+ if err != nil {
|
|
|
ctx.Render("account_box.html", usermanager.PageUserParams{"1", err.Error(), "account", user.Username, user.Mail, user.Admin}) // TODO dynamic
|
|
|
} else {
|
|
|
ctx.Render("account_box.html", usermanager.PageUserParams{"0", "", "account", user.Username, user.Mail, user.Admin}) // TODO dynamic
|
|
|
@@ -260,22 +171,47 @@ func adminPostHandler(ctx *iris.Context) {
|
|
|
userID := ctx.GetString("userID")
|
|
|
usersArrayID := usermanager.SearchUser(userID)
|
|
|
|
|
|
- if usersArrayID == -1 { // TODO check if this can never happen (routing ...)
|
|
|
- err = errors.New("User not logged in WTF")
|
|
|
+ err = usermanager.GenerateTokens(5) // tokens
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ ctx.Render("admin_box.html", usermanager.PageUserParams{"1", err.Error(), "admin", user.Username, user.Mail, user.Admin}) // TODO dynamic
|
|
|
fmt.Println(err.Error())
|
|
|
- ctx.Redirect("/")
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- _ = usermanager.GenerateTokens(5) // tokens
|
|
|
-
|
|
|
ctx.Redirect("/admin") // just redirect so that we see old+new tokens
|
|
|
|
|
|
// TODO success notifications
|
|
|
|
|
|
}
|
|
|
|
|
|
-func testHandler(ctx *iris.Context) {
|
|
|
+func templateHandler(ctx *iris.Context) {
|
|
|
+ template := ""
|
|
|
+ switch ctx.RequestPath(false) {
|
|
|
+ case "/":
|
|
|
+ template = "home"
|
|
|
+ case "/account":
|
|
|
+ template = "account"
|
|
|
+ case "/help":
|
|
|
+ template = "help"
|
|
|
+ case "/admin":
|
|
|
+ template = "admin"
|
|
|
+ case "/login":
|
|
|
+ template = "login"
|
|
|
+ }
|
|
|
+
|
|
|
+ // fmt.Println(ctx.RequestPath(false))
|
|
|
+
|
|
|
+ // fmt.Println(template)
|
|
|
+
|
|
|
userID := ctx.GetString("userID")
|
|
|
- ctx.Write("Test %d", userID);
|
|
|
+ user, err := usermanager.GetUser(userID)
|
|
|
+ if err != nil { // user is apparently not logged in -> login
|
|
|
+ ctx.MustRender("login_box.html", pageUserParams{"1", err.Error(), template, "", "", "0"})
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ params := usermanager.PageUserParams{"0", "", template, user.Username, "", user.Admin}
|
|
|
+ ctx.MustRender(template + "_box.html", params);
|
|
|
+
|
|
|
}
|