//EditTaskFunc is used to edit tasks, handles "/edit/" URL func EditTaskFunc(w http.ResponseWriter, r *http.Request) { if r.Method != "GET" { http.Redirect(w, r, "/", http.StatusBadRequest) return } id, err := strconv.Atoi(r.URL.Path[len("/edit/"):]) if err != nil { log.Println(err) http.Redirect(w, r, "/", http.StatusBadRequest) return } redirectURL := utils.GetRedirectUrl(r.Referer()) username := sessions.GetCurrentUserName(r) task, err := db.GetTaskByID(username, id) categories := db.GetCategories(username) task.Categories = categories task.Referer = redirectURL if err != nil { task.Message = "Error fetching Tasks" } editTemplate.Execute(w, task) }
//ShowCompleteTasksFunc is used to populate the "/completed/" URL func ShowCompleteTasksFunc(w http.ResponseWriter, r *http.Request) { if r.Method == "GET" { username := sessions.GetCurrentUserName(r) categories := db.GetCategories(username) context, err := db.GetTasks(username, "completed", "") context.Categories = categories if err != nil { http.Redirect(w, r, "/completed", http.StatusInternalServerError) } completedTemplate.Execute(w, context) } }
//ShowCompleteTasksFunc is used to populate the "/completed/" URL func ShowCompleteTasksFunc(w http.ResponseWriter, r *http.Request) { if r.Method == "GET" { context, err := db.GetTasks("completed", "") categories := db.GetCategories() context.Categories = categories if err != nil { http.Redirect(w, r, "/completed", http.StatusInternalServerError) } completedTemplate.Execute(w, context) } else { message = "Method not allowed" http.Redirect(w, r, "/", http.StatusFound) } }
//ShowTrashTaskFunc is used to handle the "/trash" URL which is used to show the deleted tasks func ShowTrashTaskFunc(w http.ResponseWriter, r *http.Request) { if r.Method == "GET" { username := sessions.GetCurrentUserName(r) categories := db.GetCategories(username) context, err := db.GetTasks(username, "deleted", "") context.Categories = categories if err != nil { http.Redirect(w, r, "/trash", http.StatusInternalServerError) } if message != "" { context.Message = message message = "" } err = deletedTemplate.Execute(w, context) if err != nil { log.Fatal(err) } } }
//SearchTaskFunc is used to handle the /search/ url, handles the search function func SearchTaskFunc(w http.ResponseWriter, r *http.Request) { if r.Method != "POST" { http.Redirect(w, r, "/", http.StatusBadRequest) return } r.ParseForm() query := r.Form.Get("query") username := sessions.GetCurrentUserName(r) context, err := db.SearchTask(username, query) if err != nil { log.Println("error fetching search results") } categories := db.GetCategories(username) context.Categories = categories searchTemplate.Execute(w, context) }
//EditTaskFunc is used to edit tasks, handles "/edit/" URL func EditTaskFunc(w http.ResponseWriter, r *http.Request) { if r.Method == "GET" { id, err := strconv.Atoi(r.URL.Path[len("/edit/"):]) if err != nil { log.Println(err) http.Redirect(w, r, "/", http.StatusBadRequest) } else { task, err := db.GetTaskByID(id) categories := db.GetCategories() task.Categories = categories if err != nil { task.Message = "Error fetching Tasks" } editTemplate.Execute(w, task) } } else { message = "Method not allowed" http.Redirect(w, r, "/", http.StatusFound) } }
//ShowAllTasksFunc is used to handle the "/" URL which is the default ons //TODO add http404 error func ShowAllTasksFunc(w http.ResponseWriter, r *http.Request) { if r.Method == "GET" { context, err := db.GetTasks("pending", "") categories := db.GetCategories() if err != nil { http.Redirect(w, r, "/", http.StatusInternalServerError) } if message != "" { context.Message = message } context.CSRFToken = "abcd" context.Categories = categories message = "" expiration := time.Now().Add(365 * 24 * time.Hour) cookie := http.Cookie{Name: "csrftoken", Value: "abcd", Expires: expiration} http.SetCookie(w, &cookie) homeTemplate.Execute(w, context) } else { message = "Method not allowed" http.Redirect(w, r, "/", http.StatusFound) } }
//ShowCategoryFunc will populate the /category/<id> URL which shows all the tasks related // to that particular category func ShowCategoryFunc(w http.ResponseWriter, r *http.Request) { if r.Method == "GET" && sessions.IsLoggedIn(r) { category := r.URL.Path[len("/category/"):] username := sessions.GetCurrentUserName(r) context, err := db.GetTasks(username, "", category) categories := db.GetCategories(username) if err != nil { http.Redirect(w, r, "/", http.StatusInternalServerError) } if message != "" { context.Message = message } context.CSRFToken = "abcd" context.Categories = categories message = "" expiration := time.Now().Add(365 * 24 * time.Hour) cookie := http.Cookie{Name: "csrftoken", Value: "abcd", Expires: expiration} http.SetCookie(w, &cookie) homeTemplate.Execute(w, context) } }
//GetCategoryFuncAPI will return the categories for the user //depends on the ID that we get, if we get all, then return all categories of the user func GetCategoryFuncAPI(w http.ResponseWriter, r *http.Request) { if r.Method == "GET" { var err error var message string var status types.Status token := r.Header["Token"][0] w.Header().Set("Content-Type", "application/json; charset=UTF-8") IsTokenValid, username := ValidateToken(token) //When the token is not valid show the default error JSON document if !IsTokenValid { status = types.Status{StatusCode: http.StatusInternalServerError, Message: message} w.WriteHeader(http.StatusInternalServerError) err = json.NewEncoder(w).Encode(status) if err != nil { panic(err) } return } log.Println("token is valid " + username + " is logged in") categories := db.GetCategories(username) w.Header().Set("Content-Type", "application/json; charset=UTF-8") w.WriteHeader(http.StatusOK) err = json.NewEncoder(w).Encode(categories) if err != nil { panic(err) } } }