func (controller *sitesController) newPost(rw http.ResponseWriter, req *http.Request) (int, error) { err := req.ParseForm() if err != nil { return http.StatusInternalServerError, err } decoder := schema.NewDecoder() // Ignore unknown keys to prevent errors from the CSRF token. decoder.IgnoreUnknownKeys(true) formSite := new(viewmodels.SitesEditViewModel) err = decoder.Decode(formSite, req.PostForm) if err != nil { return http.StatusInternalServerError, err } valErrors := validateSiteForm(formSite) if len(valErrors) > 0 { isAuthenticated, user := getCurrentUser(rw, req, controller.authorizer) var contacts database.Contacts err = contacts.GetContacts(controller.DB) if err != nil { return http.StatusInternalServerError, err } vm := viewmodels.NewSiteViewModel(formSite, contacts, isAuthenticated, user, valErrors) vm.CsrfField = csrf.TemplateField(req) return http.StatusOK, controller.newTemplate.Execute(rw, vm) } site := database.Site{} viewmodels.MapSiteVMtoDB(formSite, &site) err = site.CreateSite(controller.DB) if err != nil { return http.StatusInternalServerError, err } //Add any selected contacts for _, contactSelID := range formSite.SelectedContacts { err = site.AddContactToSite(controller.DB, contactSelID) if err != nil { return http.StatusInternalServerError, err } } // Refresh the pinger with the changes. err = controller.pinger.UpdateSiteSettings() if err != nil { return http.StatusInternalServerError, err } http.Redirect(rw, req, "/settings", http.StatusSeeOther) return http.StatusSeeOther, nil }
func (controller *sitesController) newGet(rw http.ResponseWriter, req *http.Request) (int, error) { isAuthenticated, user := getCurrentUser(rw, req, controller.authorizer) siteNew := new(viewmodels.SitesEditViewModel) siteNew.IsActive = true // Get all of the contacts to display in the table. var contacts database.Contacts err := contacts.GetContacts(controller.DB) if err != nil { return http.StatusInternalServerError, err } // These are strings in the ViewModel. siteNew.PingIntervalSeconds = "60" siteNew.TimeoutSeconds = "15" siteNew.SelectedContacts = []int64{} vm := viewmodels.NewSiteViewModel(siteNew, contacts, isAuthenticated, user, make(map[string]string)) vm.CsrfField = csrf.TemplateField(req) return http.StatusOK, controller.newTemplate.Execute(rw, vm) }