nidus-sync/rmo/root.go

120 lines
2.6 KiB
Go

package rmo
import (
"fmt"
"net/http"
"github.com/Gleipnir-Technology/nidus-sync/config"
"github.com/Gleipnir-Technology/nidus-sync/db"
"github.com/Gleipnir-Technology/nidus-sync/db/models"
"github.com/Gleipnir-Technology/nidus-sync/html"
"github.com/go-chi/chi/v5"
"github.com/rs/zerolog/log"
)
type ContentPrivacy struct {
Address string
Company string
Site string
URLReport string
}
type ContentRoot struct {
District *ContentDistrict
URL ContentURL
}
type ContentURL struct {
Nuisance string
NuisanceSubmit string
NuisanceSubmitComplete string
Status string
Tegola string
Water string
}
var (
PrivacyT = buildTemplate("privacy", "base")
RootT = buildTemplate("root", "base")
TermsT = buildTemplate("terms", "base")
)
func boolFromForm(r *http.Request, k string) bool {
s := r.PostFormValue(k)
if s == "on" {
return true
}
return false
}
func getPrivacy(w http.ResponseWriter, r *http.Request) {
html.RenderOrError(
w,
PrivacyT,
ContentPrivacy{
Address: "2726 S Quinn Ave, Gilbert, AZ, USA",
Company: "Gleipnir LLC",
Site: "Report Mosquitoes Online",
URLReport: config.MakeURLReport("/"),
},
)
}
func getRoot(w http.ResponseWriter, r *http.Request) {
html.RenderOrError(
w,
RootT,
ContentRoot{
URL: makeContentURL(),
},
)
}
func getRootDistrict(w http.ResponseWriter, r *http.Request) {
slug := chi.URLParam(r, "slug")
district, err := models.Organizations.Query(
models.SelectWhere.Organizations.Slug.EQ(slug),
).One(r.Context(), db.PGInstance.BobDB)
if err != nil {
respondError(w, "Failed to lookup organization", err, http.StatusBadRequest)
return
}
html.RenderOrError(
w,
RootT,
ContentRoot{
District: newContentDistrict(district),
URL: makeContentURL(),
},
)
}
func getRobots(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "User-agent: *\n")
fmt.Fprint(w, "Allow: /\n")
}
func getTerms(w http.ResponseWriter, r *http.Request) {
html.RenderOrError(
w,
TermsT,
ContentRoot{
URL: makeContentURL(),
},
)
}
func makeContentURL() ContentURL {
return ContentURL{
Nuisance: makeURL("nuisance"),
NuisanceSubmit: makeURL("nuisance"),
Status: makeURL("status"),
Tegola: config.MakeURLTegola("/"),
Water: makeURL("water"),
}
}
func makeURL(p string) string {
return config.MakeURLReport("/%s", p)
}
// Respond with an error that is visible to the user
func respondError(w http.ResponseWriter, m string, e error, s int) {
log.Warn().Int("status", s).Err(e).Str("user message", m).Msg("Responding with an error")
http.Error(w, m, s)
}