diff --git a/Backend/endpoints/team.go b/Backend/endpoints/team.go index 9b214ea..3526085 100644 --- a/Backend/endpoints/team.go +++ b/Backend/endpoints/team.go @@ -17,13 +17,10 @@ func TeamHandler(w http.ResponseWriter, r *http.Request) { switch r.Method { case http.MethodPost: submitReport(w, r) - break case http.MethodGet: showWeeks(w, r) - break default: http.Error(w, "Method not allowed!", http.StatusMethodNotAllowed) - break } } @@ -47,10 +44,8 @@ func submitReport(w http.ResponseWriter, r *http.Request) { switch r.FormValue("method") { case "send": err = workWeek.Send() - break case "accept": err = workWeek.Accept() - break default: break } diff --git a/Backend/endpoints/team_presence.go b/Backend/endpoints/team_presence.go index 5ca18e0..b313627 100644 --- a/Backend/endpoints/team_presence.go +++ b/Backend/endpoints/team_presence.go @@ -8,24 +8,21 @@ import ( "net/http" ) -func TeamPresenceHandler(w http.ResponseWriter, r *http.Request){ +func TeamPresenceHandler(w http.ResponseWriter, r *http.Request) { helper.RequiresLogin(Session, w, r) helper.SetCors(w) switch r.Method { case http.MethodGet: teamPresence(w, r) - break case http.MethodOptions: // just support options header for non GET Requests from SWAGGER w.WriteHeader(http.StatusOK) - break default: http.Error(w, "Method not allowed!", http.StatusMethodNotAllowed) - break } } -func teamPresence(w http.ResponseWriter, r *http.Request){ +func teamPresence(w http.ResponseWriter, r *http.Request) { user, err := (*models.User).GetUserFromSession(nil, Session, r.Context()) if err != nil { log.Println("Error getting user!", err) @@ -37,8 +34,7 @@ func teamPresence(w http.ResponseWriter, r *http.Request){ teamPresence[present] = append(teamPresence[present], user) } - - if(err != nil){ + if err != nil { log.Println("Error getting team", err) } templates.TeamPresencePage(teamPresence).Render(r.Context(), w) diff --git a/Backend/endpoints/time-create.go b/Backend/endpoints/time-create.go index 7dd0e29..05edd1c 100644 --- a/Backend/endpoints/time-create.go +++ b/Backend/endpoints/time-create.go @@ -16,17 +16,13 @@ func TimeCreateHandler(w http.ResponseWriter, r *http.Request) { switch r.Method { case http.MethodPut: createBooking(w, r) - break case http.MethodGet: createBooking(w, r) - break case http.MethodOptions: // just support options header for non GET Requests from SWAGGER w.WriteHeader(http.StatusOK) - break default: http.Error(w, "Method not allowed", http.StatusMethodNotAllowed) - break } } diff --git a/Backend/endpoints/time.go b/Backend/endpoints/time.go index 9dae1a3..eef7537 100644 --- a/Backend/endpoints/time.go +++ b/Backend/endpoints/time.go @@ -20,17 +20,13 @@ func TimeHandler(w http.ResponseWriter, r *http.Request) { switch r.Method { case http.MethodGet: getBookings(w, r) - break case http.MethodPost: updateBooking(w, r) - break case http.MethodOptions: // just support options header for non GET Requests from SWAGGER w.WriteHeader(http.StatusOK) - break default: http.Error(w, "Method not allowed!", http.StatusMethodNotAllowed) - break } } @@ -120,7 +116,6 @@ func updateBooking(w http.ResponseWriter, r *http.Request) { if err != nil { log.Println("Error inserting booking", err) } - break case "change": absenceType, err := strconv.Atoi(r.FormValue("absence")) if err != nil { @@ -151,9 +146,7 @@ func updateBooking(w http.ResponseWriter, r *http.Request) { booking.UpdateTime(parsedTime) } } - break } - getBookings(w, r) } diff --git a/Backend/endpoints/user-login.go b/Backend/endpoints/user-session.go similarity index 87% rename from Backend/endpoints/user-login.go rename to Backend/endpoints/user-session.go index ee19238..9b9084c 100644 --- a/Backend/endpoints/user-login.go +++ b/Backend/endpoints/user-session.go @@ -21,20 +21,6 @@ func CreateSessionManager(lifetime time.Duration) *scs.SessionManager { return Session } -func LoginHandler(w http.ResponseWriter, r *http.Request) { - switch r.Method { - case http.MethodGet: - showLoginPage(w, r, false) - break - case http.MethodPost: - loginUser(w, r) - break - default: - http.Error(w, "Method not allowed!", http.StatusMethodNotAllowed) - break - } -} - func showLoginPage(w http.ResponseWriter, r *http.Request, failed bool) { r = r.WithContext(context.WithValue(r.Context(), "session", Session)) if helper.GetEnv("GO_ENV", "production") == "debug" { @@ -83,5 +69,13 @@ func loginUser(w http.ResponseWriter, r *http.Request) { return } showLoginPage(w, r, false) - return +} + +func logoutUser(w http.ResponseWriter, r *http.Request) { + log.Println("Loggin out user!") + err := Session.Destroy(r.Context()) + if err != nil { + log.Println("Error destroying session!", err) + } + http.Redirect(w, r, "/user/login", http.StatusSeeOther) } diff --git a/Backend/endpoints/user-settings.go b/Backend/endpoints/user-settings.go index 7524f81..d8509a0 100644 --- a/Backend/endpoints/user-settings.go +++ b/Backend/endpoints/user-settings.go @@ -1,36 +1,12 @@ package endpoints import ( - "arbeitszeitmessung/helper" "arbeitszeitmessung/models" "arbeitszeitmessung/templates" "log" "net/http" ) -func UserSettingsHandler(w http.ResponseWriter, r *http.Request) { - helper.RequiresLogin(Session, w, r) - switch r.Method { - case http.MethodGet: - showUserPage(w, r, 0) - break - case http.MethodPost: - switch r.FormValue("action") { - case "change-pass": - changePassword(w, r) - break - case "logout-user": - logoutUser(w, r) - break - } - - break - default: - http.Error(w, "Method not allowed!", http.StatusMethodNotAllowed) - break - } -} - // change user password and store salted hash in db func changePassword(w http.ResponseWriter, r *http.Request) { err := r.ParseForm() @@ -61,16 +37,6 @@ func changePassword(w http.ResponseWriter, r *http.Request) { showUserPage(w, r, http.StatusUnauthorized) } -func logoutUser(w http.ResponseWriter, r *http.Request) { - - err := Session.Destroy(r.Context()) - if err != nil { - log.Println("Error destroying session!", err) - } - http.Redirect(w, r, "/user/login", http.StatusSeeOther) -} - func showUserPage(w http.ResponseWriter, r *http.Request, status int) { templates.UserPage(status).Render(r.Context(), w) - return } diff --git a/Backend/endpoints/user.go b/Backend/endpoints/user.go new file mode 100644 index 0000000..540d117 --- /dev/null +++ b/Backend/endpoints/user.go @@ -0,0 +1,45 @@ +package endpoints + +import ( + "arbeitszeitmessung/helper" + "net/http" +) + +func UserHandler(w http.ResponseWriter, r *http.Request) { + switch r.PathValue("action") { + case "login": + LoginHandler(w, r) + case "settings": + UserSettingsHandler(w, r) + case "logout": + logoutUser(w, r) + } +} + +func LoginHandler(w http.ResponseWriter, r *http.Request) { + switch r.Method { + case http.MethodGet: + showLoginPage(w, r, false) + case http.MethodPost: + loginUser(w, r) + default: + http.Error(w, "Method not allowed!", http.StatusMethodNotAllowed) + } +} + +func UserSettingsHandler(w http.ResponseWriter, r *http.Request) { + helper.RequiresLogin(Session, w, r) + switch r.Method { + case http.MethodGet: + showUserPage(w, r, 0) + case http.MethodPost: + switch r.FormValue("action") { + case "change-pass": + changePassword(w, r) + case "logout-user": + logoutUser(w, r) + } + default: + http.Error(w, "Method not allowed!", http.StatusMethodNotAllowed) + } +} diff --git a/Backend/main.go b/Backend/main.go index 969ab60..3d2aee2 100644 --- a/Backend/main.go +++ b/Backend/main.go @@ -22,17 +22,15 @@ func main() { if err != nil { log.Println("No .env file found in directory!") } - if(helper.GetEnv("GO_ENV", "production") == "debug") { + if helper.GetEnv("GO_ENV", "production") == "debug" { log.Println("Debug mode enabled") log.Println("Environment Variables") envs := os.Environ() - for _, e := range envs { - fmt.Println(e) - } + for _, e := range envs { + fmt.Println(e) + } } - - models.DB, err = OpenDatabase() if err != nil { log.Fatal(err) @@ -48,8 +46,9 @@ func main() { server.HandleFunc("/time/new", endpoints.TimeCreateHandler) server.Handle("/time", ParamsMiddleware(endpoints.TimeHandler)) server.HandleFunc("/logout", endpoints.LogoutHandler) - server.HandleFunc("/user/login", endpoints.LoginHandler) - server.HandleFunc("/user/settings", endpoints.UserSettingsHandler) + server.HandleFunc("/user/{action}", endpoints.UserHandler) + // server.HandleFunc("/user/login", endpoints.LoginHandler) + // server.HandleFunc("/user/settings", endpoints.UserSettingsHandler) server.HandleFunc("/team", endpoints.TeamHandler) server.HandleFunc("/team/presence", endpoints.TeamPresenceHandler) server.Handle("/", http.RedirectHandler("/time", http.StatusPermanentRedirect)) diff --git a/Backend/static/script.js b/Backend/static/script.js index 5bc2abb..520ec52 100644 --- a/Backend/static/script.js +++ b/Backend/static/script.js @@ -1,7 +1,5 @@ function editDay(element, event, formId) { - var form = element - .closest(".grid-sub") - .querySelector(".all-booking-component > form"); + var form = element.closest(".grid-sub").querySelector(".all-booking-component > form"); form.classList.toggle("edit"); element.classList.toggle("edit"); if (element.classList.contains("edit")) { @@ -15,9 +13,7 @@ function editDay(element, event, formId) { } function editAbwesenheit(element, event) { - var newBookingComponent = element - .closest(".grid-sub") - .querySelector(".new-booking-component"); + var newBookingComponent = element.closest(".grid-sub").querySelector(".new-booking-component"); if (element.value == 0) { newBookingComponent.style.display = ""; } else { @@ -32,3 +28,7 @@ function navigateWeek(element, event, direction) { date.setHours(10); dateInput.valueAsDate = date; } + +function logoutUser() { + fetch("/user/logout", {}).then(() => window.location.reload()); +} diff --git a/Backend/templates/headerComponent.templ b/Backend/templates/headerComponent.templ index bfb040f..ec2d673 100644 --- a/Backend/templates/headerComponent.templ +++ b/Backend/templates/headerComponent.templ @@ -1,14 +1,13 @@ package templates - - templ headerComponent() { -
Nutzer von Weboberfläche abmelden.