From ab519020fcdf1acdacf3d8020f876b3b240d0483 Mon Sep 17 00:00:00 2001 From: Eli Ribble Date: Wed, 1 Apr 2026 16:57:33 +0000 Subject: [PATCH] Swap out the rest of chi We're now chi-free. Not bug-free. --- api/api.go | 96 ++++++++++++++++++++++++++++++++--------------- api/audio.go | 11 +++--- api/compliance.go | 5 ++- api/district.go | 18 ++++----- api/image.go | 16 ++++---- api/tile.go | 9 +++-- api/types.go | 20 +--------- api/upload.go | 11 ++++-- api/user.go | 5 ++- go.mod | 10 ++--- go.sum | 9 ----- rmo/district.go | 5 ++- rmo/email.go | 5 ++- rmo/image.go | 5 ++- rmo/mailer.go | 23 ++++++++---- rmo/mock.go | 17 +++++---- rmo/report.go | 2 +- rmo/scss.go | 5 ++- rmo/status.go | 5 ++- sync/cell.go | 5 ++- sync/dash.go | 8 ++-- sync/mailer.go | 8 ++-- sync/qr.go | 8 ++-- sync/sms.go | 5 ++- 24 files changed, 172 insertions(+), 139 deletions(-) diff --git a/api/api.go b/api/api.go index e612b195..4cbac3a1 100644 --- a/api/api.go +++ b/api/api.go @@ -10,15 +10,59 @@ import ( "github.com/Gleipnir-Technology/nidus-sync/db" "github.com/Gleipnir-Technology/nidus-sync/platform" - "github.com/go-chi/render" + //"github.com/gorilla/mux" "github.com/rs/zerolog/log" ) +/* +type renderer struct { +} +func (ren *renderer) Render(w http.ResponseWriter, r *http.Request) error { + return nil +} +*/ +// In the best case scenario, the excellent github.com/pkg/errors package +// helps reveal information on the error, setting it on Err, and in the Render() +// method, using it to set the application-specific error code in AppCode. +type ResponseErr struct { + Error error `json:"-"` // low-level runtime error + HTTPStatusCode int `json:"-"` // http response status code + + StatusText string `json:"status"` // user-level status message + AppCode int64 `json:"code,omitempty"` // application-specific error code + ErrorText string `json:"error,omitempty"` // application-level error message, for debugging +} + +func (e *ResponseErr) Render(w http.ResponseWriter, r *http.Request) error { + http.Error(w, e.StatusText, e.HTTPStatusCode) + return nil +} + +func errRender(err error) *ResponseErr { + log.Error().Err(err).Msg("Rendering error") + return &ResponseErr{ + Error: err, + HTTPStatusCode: 500, + StatusText: "Error rendering response", + ErrorText: err.Error(), + } +} + +type Renderable interface { + Render(http.ResponseWriter, *http.Request) error +} + +func renderShim(w http.ResponseWriter, r *http.Request, renderer Renderable) error { + return renderer.Render(w, r) +} +func renderList(w http.ResponseWriter, r *http.Request, data []Renderable) error { + return nil +} func handleClientIos(w http.ResponseWriter, r *http.Request, u platform.User) { var sinceStr string err := r.ParseForm() if err != nil { - render.Render(w, r, errRender(fmt.Errorf("Failed to parse GET form: %w", err))) + renderShim(w, r, errRender(fmt.Errorf("Failed to parse GET form: %w", err))) return } else { sinceStr = r.FormValue("since") @@ -30,14 +74,14 @@ func handleClientIos(w http.ResponseWriter, r *http.Request, u platform.User) { } else { since, err = parseTime(sinceStr) if err != nil { - render.Render(w, r, errRender(fmt.Errorf("Failed to parse 'since' value: %w", err))) + renderShim(w, r, errRender(fmt.Errorf("Failed to parse 'since' value: %w", err))) return } } csync, err := platform.ContentClientIos(r.Context(), u, since) if err != nil { - render.Render(w, r, errRender(err)) + renderShim(w, r, errRender(err)) return } @@ -51,8 +95,8 @@ func handleClientIos(w http.ResponseWriter, r *http.Request, u platform.User) { Fieldseeker: toResponseFieldseeker(csync.Fieldseeker), Since: since_used, } - if err := render.Render(w, r, response); err != nil { - render.Render(w, r, errRender(err)) + if err := renderShim(w, r, response); err != nil { + renderShim(w, r, errRender(err)) return } } @@ -60,7 +104,7 @@ func handleClientIos(w http.ResponseWriter, r *http.Request, u platform.User) { func apiMosquitoSource(w http.ResponseWriter, r *http.Request, u platform.User) { bounds, err := parseBounds(r) if err != nil { - render.Render(w, r, errRender(err)) + renderShim(w, r, errRender(err)) return } @@ -69,23 +113,23 @@ func apiMosquitoSource(w http.ResponseWriter, r *http.Request, u platform.User) query.Limit = 100 sources, err := platform.MosquitoSourceQuery() if err != nil { - render.Render(w, r, errRender(err)) + renderShim(w, r, errRender(err)) return } - data := []render.Renderer{} + data := []Renderable{} for _, s := range sources { data = append(data, NewResponseMosquitoSource(s)) } - if err := render.RenderList(w, r, data); err != nil { - render.Render(w, r, errRender(err)) + if err := renderList(w, r, data); err != nil { + renderShim(w, r, errRender(err)) } } func apiTrapData(w http.ResponseWriter, r *http.Request, u platform.User) { bounds, err := parseBounds(r) if err != nil { - render.Render(w, r, errRender(err)) + renderShim(w, r, errRender(err)) return } @@ -94,23 +138,23 @@ func apiTrapData(w http.ResponseWriter, r *http.Request, u platform.User) { query.Limit = 100 trap_data, err := platform.TrapDataQuery() if err != nil { - render.Render(w, r, errRender(err)) + renderShim(w, r, errRender(err)) return } - data := []render.Renderer{} + data := []Renderable{} for _, td := range trap_data { data = append(data, NewResponseTrapDatum(td)) } - if err := render.RenderList(w, r, data); err != nil { - render.Render(w, r, errRender(err)) + if err := renderList(w, r, data); err != nil { + renderShim(w, r, errRender(err)) } } func apiServiceRequest(w http.ResponseWriter, r *http.Request, u platform.User) { bounds, err := parseBounds(r) if err != nil { - render.Render(w, r, errRender(err)) + renderShim(w, r, errRender(err)) return } query := db.NewGeoQuery() @@ -118,16 +162,16 @@ func apiServiceRequest(w http.ResponseWriter, r *http.Request, u platform.User) query.Limit = 100 requests, err := platform.ServiceRequestQuery() if err != nil { - render.Render(w, r, errRender(err)) + renderShim(w, r, errRender(err)) return } - data := []render.Renderer{} + data := []Renderable{} for _, sr := range requests { data = append(data, NewResponseServiceRequest(sr)) } - if err := render.RenderList(w, r, data); err != nil { - render.Render(w, r, errRender(err)) + if err := renderList(w, r, data); err != nil { + renderShim(w, r, errRender(err)) } } @@ -168,16 +212,6 @@ func parseBounds(r *http.Request) (*db.GeoBounds, error) { return &bounds, nil } -func errRender(err error) render.Renderer { - log.Error().Err(err).Msg("Rendering error") - return &ResponseErr{ - Error: err, - HTTPStatusCode: 500, - StatusText: "Error rendering response", - ErrorText: err.Error(), - } -} - func webhookFieldseeker(w http.ResponseWriter, r *http.Request) { // Create or open the log file file, err := os.OpenFile("webhook/request.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644) diff --git a/api/audio.go b/api/audio.go index e546bae4..efed92b8 100644 --- a/api/audio.go +++ b/api/audio.go @@ -12,14 +12,14 @@ import ( "github.com/Gleipnir-Technology/nidus-sync/platform/file" "github.com/aarondl/opt/omit" "github.com/aarondl/opt/omitnull" - "github.com/go-chi/chi/v5" - "github.com/go-chi/render" "github.com/google/uuid" + "github.com/gorilla/mux" "github.com/rs/zerolog/log" ) func apiAudioPost(w http.ResponseWriter, r *http.Request, u platform.User) { - id := chi.URLParam(r, "uuid") + vars := mux.Vars(r) + id := vars["uuid"] noteUUID, err := uuid.Parse(id) if err != nil { http.Error(w, "Failed to decode the uuid", http.StatusBadRequest) @@ -51,14 +51,15 @@ func apiAudioPost(w http.ResponseWriter, r *http.Request, u platform.User) { UUID: omit.From(noteUUID), } if err := platform.NoteAudioCreate(ctx, u, setter); err != nil { - render.Render(w, r, errRender(err)) + renderShim(w, r, errRender(err)) return } w.WriteHeader(http.StatusAccepted) } func apiAudioContentPost(w http.ResponseWriter, r *http.Request, user platform.User) { - u_str := chi.URLParam(r, "uuid") + vars := mux.Vars(r) + u_str := vars["uuid"] u, err := uuid.Parse(u_str) if err != nil { http.Error(w, "Failed to parse image UUID", http.StatusBadRequest) diff --git a/api/compliance.go b/api/compliance.go index ae85d302..0620980c 100644 --- a/api/compliance.go +++ b/api/compliance.go @@ -13,14 +13,15 @@ import ( "github.com/Gleipnir-Technology/bob/dialect/psql/sm" "github.com/Gleipnir-Technology/nidus-sync/db" "github.com/Gleipnir-Technology/nidus-sync/platform" - "github.com/go-chi/chi/v5" + "github.com/gorilla/mux" "github.com/paulmach/orb/geojson" "github.com/rs/zerolog/log" "github.com/stephenafamo/scan" ) func getComplianceRequestImagePool(w http.ResponseWriter, r *http.Request) { - code := chi.URLParam(r, "public_id") + vars := mux.Vars(r) + code := vars["public_id"] if code == "" { http.Error(w, "empty public_id", http.StatusBadRequest) return diff --git a/api/district.go b/api/district.go index 1d890396..6f47ab28 100644 --- a/api/district.go +++ b/api/district.go @@ -9,15 +9,14 @@ import ( "github.com/Gleipnir-Technology/nidus-sync/db/models" "github.com/Gleipnir-Technology/nidus-sync/platform" "github.com/Gleipnir-Technology/nidus-sync/platform/file" - "github.com/go-chi/chi/v5" - "github.com/go-chi/render" + "github.com/gorilla/mux" ) func apiGetDistrict(w http.ResponseWriter, r *http.Request) { var latStr, lngStr string err := r.ParseForm() if err != nil { - render.Render(w, r, errRender(fmt.Errorf("Failed to parse GET form: %w", err))) + renderShim(w, r, errRender(fmt.Errorf("Failed to parse GET form: %w", err))) return } else { latStr = r.FormValue("lat") @@ -25,17 +24,17 @@ func apiGetDistrict(w http.ResponseWriter, r *http.Request) { } lat, err := strconv.ParseFloat(latStr, 64) if err != nil { - render.Render(w, r, errRender(fmt.Errorf("Failed to parse lat as float: %w", err))) + renderShim(w, r, errRender(fmt.Errorf("Failed to parse lat as float: %w", err))) return } lng, err := strconv.ParseFloat(lngStr, 64) if err != nil { - render.Render(w, r, errRender(fmt.Errorf("Failed to parse lng as float: %w", err))) + renderShim(w, r, errRender(fmt.Errorf("Failed to parse lng as float: %w", err))) return } org, err := platform.DistrictForLocation(r.Context(), lng, lat) if err != nil { - render.Render(w, r, errRender(fmt.Errorf("Failed to get district: %w", err))) + renderShim(w, r, errRender(fmt.Errorf("Failed to get district: %w", err))) return } if org == nil { @@ -48,13 +47,14 @@ func apiGetDistrict(w http.ResponseWriter, r *http.Request) { Phone: org.OfficePhone.GetOr(""), Website: org.Website.GetOr(""), } - if err := render.Render(w, r, d); err != nil { - render.Render(w, r, errRender(err)) + if err := renderShim(w, r, d); err != nil { + renderShim(w, r, errRender(err)) } } func apiGetDistrictLogo(w http.ResponseWriter, r *http.Request) { - slug := chi.URLParam(r, "slug") + vars := mux.Vars(r) + slug := vars["slug"] ctx := r.Context() rows, err := models.Organizations.Query( models.SelectWhere.Organizations.Slug.EQ(slug), diff --git a/api/image.go b/api/image.go index caeabaa9..b326af0b 100644 --- a/api/image.go +++ b/api/image.go @@ -11,14 +11,14 @@ import ( "github.com/Gleipnir-Technology/nidus-sync/platform/file" "github.com/aarondl/opt/omit" "github.com/aarondl/opt/omitnull" - "github.com/go-chi/chi/v5" - "github.com/go-chi/render" "github.com/google/uuid" + "github.com/gorilla/mux" "github.com/rs/zerolog/log" ) func apiImagePost(w http.ResponseWriter, r *http.Request, u platform.User) { - id := chi.URLParam(r, "uuid") + vars := mux.Vars(r) + id := vars["uuid"] noteUUID, err := uuid.Parse(id) if err != nil { http.Error(w, "Failed to decode the uuid", http.StatusBadRequest) @@ -48,14 +48,15 @@ func apiImagePost(w http.ResponseWriter, r *http.Request, u platform.User) { } err = platform.NoteImageCreate(ctx, u, setter) if err != nil { - render.Render(w, r, errRender(err)) + renderShim(w, r, errRender(err)) return } w.WriteHeader(http.StatusAccepted) } func apiImageContentGet(w http.ResponseWriter, r *http.Request, u platform.User) { - u_str := chi.URLParam(r, "uuid") + vars := mux.Vars(r) + u_str := vars["uuid"] imageUUID, err := uuid.Parse(u_str) if err != nil { log.Error().Err(err).Msg("Failed to parse image UUID") @@ -65,7 +66,8 @@ func apiImageContentGet(w http.ResponseWriter, r *http.Request, u platform.User) w.WriteHeader(http.StatusOK) } func apiImageContentPost(w http.ResponseWriter, r *http.Request, u platform.User) { - u_str := chi.URLParam(r, "uuid") + vars := mux.Vars(r) + u_str := vars["uuid"] imageUUID, err := uuid.Parse(u_str) if err != nil { log.Error().Err(err).Msg("Failed to parse image UUID") @@ -73,7 +75,7 @@ func apiImageContentPost(w http.ResponseWriter, r *http.Request, u platform.User } err = file.ImageFileContentWrite(imageUUID, r.Body) if err != nil { - render.Render(w, r, errRender(err)) + renderShim(w, r, errRender(err)) return } w.WriteHeader(http.StatusOK) diff --git a/api/tile.go b/api/tile.go index 4f37af1c..8926e24e 100644 --- a/api/tile.go +++ b/api/tile.go @@ -5,14 +5,15 @@ import ( "strconv" "github.com/Gleipnir-Technology/nidus-sync/platform" - "github.com/go-chi/chi/v5" + "github.com/gorilla/mux" "github.com/rs/zerolog/log" ) func getTile(w http.ResponseWriter, r *http.Request, user platform.User) { - x_str := chi.URLParam(r, "x") - y_str := chi.URLParam(r, "y") - z_str := chi.URLParam(r, "z") + vars := mux.Vars(r) + x_str := vars["x"] + y_str := vars["y"] + z_str := vars["z"] x, err := strconv.Atoi(x_str) if err != nil { diff --git a/api/types.go b/api/types.go index eebc2855..bd76f664 100644 --- a/api/types.go +++ b/api/types.go @@ -8,7 +8,7 @@ import ( "github.com/Gleipnir-Technology/nidus-sync/h3utils" "github.com/Gleipnir-Technology/nidus-sync/platform" "github.com/aarondl/opt/null" - "github.com/go-chi/render" + //"github.com/gorilla/mux" "github.com/rs/zerolog/log" ) @@ -95,7 +95,6 @@ type ResponseFieldseeker struct { TrapData []ResponseTrapData `json:"traps"` } -// ResponseErr renderer type for handling all sorts of errors. type ResponseClientIos struct { Fieldseeker ResponseFieldseeker `json:"fieldseeker"` Since time.Time `json:"since"` @@ -105,23 +104,6 @@ func (i ResponseClientIos) Render(w http.ResponseWriter, r *http.Request) error return nil } -// In the best case scenario, the excellent github.com/pkg/errors package -// helps reveal information on the error, setting it on Err, and in the Render() -// method, using it to set the application-specific error code in AppCode. -type ResponseErr struct { - Error error `json:"-"` // low-level runtime error - HTTPStatusCode int `json:"-"` // http response status code - - StatusText string `json:"status"` // user-level status message - AppCode int64 `json:"code,omitempty"` // application-specific error code - ErrorText string `json:"error,omitempty"` // application-level error message, for debugging -} - -func (e *ResponseErr) Render(w http.ResponseWriter, r *http.Request) error { - render.Status(r, e.HTTPStatusCode) - return nil -} - type ResponseMosquitoInspection struct { ActionTaken string `json:"action_taken"` Comments string `json:"comments"` diff --git a/api/upload.go b/api/upload.go index 36749983..2e262abe 100644 --- a/api/upload.go +++ b/api/upload.go @@ -11,12 +11,13 @@ import ( nhttp "github.com/Gleipnir-Technology/nidus-sync/http" "github.com/Gleipnir-Technology/nidus-sync/platform" "github.com/Gleipnir-Technology/nidus-sync/platform/file" - "github.com/go-chi/chi/v5" + "github.com/gorilla/mux" "github.com/rs/zerolog/log" ) func getUploadByID(ctx context.Context, r *http.Request, u platform.User, query queryParams) (*platform.Upload, *nhttp.ErrorWithStatus) { - file_id_str := chi.URLParam(r, "id") + vars := mux.Vars(r) + file_id_str := vars["id"] file_id_, err := strconv.ParseInt(file_id_str, 10, 32) if err != nil { return nil, nhttp.NewError("Failed to parse file_id: %w", err) @@ -76,7 +77,8 @@ func getUploadPoolCustomCreate(ctx context.Context, r *http.Request, u platform. type FormUploadCommit struct{} func postUploadCommit(ctx context.Context, r *http.Request, u platform.User, f FormUploadCommit) (string, *nhttp.ErrorWithStatus) { - file_id_str := chi.URLParam(r, "id") + vars := mux.Vars(r) + file_id_str := vars["id"] file_id_, err := strconv.ParseInt(file_id_str, 10, 32) if err != nil { return "", nhttp.NewError("Failed to parse file_id: %w", err) @@ -92,7 +94,8 @@ func postUploadCommit(ctx context.Context, r *http.Request, u platform.User, f F type FormUploadDiscard struct{} func postUploadDiscard(ctx context.Context, r *http.Request, u platform.User, f FormUploadDiscard) (string, *nhttp.ErrorWithStatus) { - file_id_str := chi.URLParam(r, "id") + vars := mux.Vars(r) + file_id_str := vars["id"] file_id_, err := strconv.ParseInt(file_id_str, 10, 32) if err != nil { return "", nhttp.NewError("Failed to parse file_id: %w", err) diff --git a/api/user.go b/api/user.go index 4c7ade50..4b3fc02e 100644 --- a/api/user.go +++ b/api/user.go @@ -9,7 +9,7 @@ import ( "github.com/Gleipnir-Technology/nidus-sync/html" nhttp "github.com/Gleipnir-Technology/nidus-sync/http" "github.com/Gleipnir-Technology/nidus-sync/platform" - "github.com/go-chi/chi/v5" + "github.com/gorilla/mux" "github.com/rs/zerolog/log" ) @@ -101,7 +101,8 @@ func listUserSuggestion(ctx context.Context, r *http.Request, user platform.User func userPut(ctx context.Context, r *http.Request, user platform.User, updates platform.UserChangeRequest) (string, *nhttp.ErrorWithStatus) { log.Info().Str("avatar", updates.Avatar).Msg("doing updates") - user_id_str := chi.URLParam(r, "id") + vars := mux.Vars(r) + user_id_str := vars["id"] user_id, err := strconv.Atoi(user_id_str) if err != nil { return "", nhttp.NewErrorStatus(http.StatusBadRequest, "user update: %w", err) diff --git a/go.mod b/go.mod index 6e9eb46d..218cb6e0 100644 --- a/go.mod +++ b/go.mod @@ -12,13 +12,12 @@ require ( github.com/alitto/pond/v2 v2.5.0 github.com/chromedp/cdproto v0.0.0-20250724212937-08a3db8b4327 github.com/chromedp/chromedp v0.14.2 + github.com/disintegration/imaging v1.6.2 github.com/getsentry/sentry-go v0.42.0 github.com/getsentry/sentry-go/zerolog v0.42.0 - github.com/go-chi/chi/v5 v5.2.3 - github.com/go-chi/hostrouter v0.3.0 - github.com/go-chi/render v1.0.3 github.com/google/go-querystring v1.2.0 github.com/google/uuid v1.6.0 + github.com/gorilla/mux v1.8.1 github.com/gorilla/schema v1.4.1 github.com/gorilla/websocket v1.5.3 github.com/jackc/pgx/v5 v5.7.6 @@ -32,6 +31,7 @@ require ( github.com/rwcarlsen/goexif v0.0.0-20190401172101-9e8deecbddbd github.com/shopspring/decimal v1.4.0 github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e + github.com/stephenafamo/bob v0.42.0 github.com/stephenafamo/scan v0.7.0 github.com/tidwall/geojson v1.4.5 github.com/twilio/twilio-go v1.29.1 @@ -42,13 +42,11 @@ require ( ) require ( - github.com/ajg/form v1.5.1 // indirect github.com/andybalholm/brotli v1.2.0 // indirect github.com/bahlo/generic-list-go v0.2.0 // indirect github.com/beevik/etree v1.1.0 // indirect github.com/buger/jsonparser v1.1.1 // indirect github.com/chromedp/sysutil v1.1.0 // indirect - github.com/disintegration/imaging v1.6.2 // indirect github.com/dustin/go-humanize v1.0.1 // indirect github.com/go-ini/ini v1.67.0 // indirect github.com/go-json-experiment/json v0.0.0-20250725192818-e39067aee2d2 // indirect @@ -57,7 +55,6 @@ require ( github.com/gobwas/ws v1.4.0 // indirect github.com/golang-jwt/jwt/v5 v5.2.2 // indirect github.com/golang/mock v1.6.0 // indirect - github.com/gorilla/mux v1.8.1 // indirect github.com/invopop/jsonschema v0.13.0 // indirect github.com/jackc/pgpassfile v1.0.0 // indirect github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect @@ -78,7 +75,6 @@ require ( github.com/qdm12/reprint v0.0.0-20200326205758-722754a53494 // indirect github.com/rs/xid v1.6.0 // indirect github.com/sethvargo/go-retry v0.3.0 // indirect - github.com/stephenafamo/bob v0.42.0 // indirect github.com/tidwall/geoindex v1.4.4 // indirect github.com/tidwall/gjson v1.12.1 // indirect github.com/tidwall/match v1.1.1 // indirect diff --git a/go.sum b/go.sum index a0fc122e..3555967b 100644 --- a/go.sum +++ b/go.sum @@ -12,8 +12,6 @@ github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERo github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/aarondl/opt v0.0.0-20250607033636-982744e1bd65 h1:lbdPe4LBNmNDzeQFwNhEc88w90841qv737MI4+aXSYU= github.com/aarondl/opt v0.0.0-20250607033636-982744e1bd65/go.mod h1:+xKBXrTAUOvrDXO5PRwIr4E1wciHY3Glgl+6OkCXknU= -github.com/ajg/form v1.5.1 h1:t9c7v8JUKu/XxOGBU0yjNpaMloxGEJhUkqFRq0ibGeU= -github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= github.com/alecthomas/assert/v2 v2.10.0 h1:jjRCHsj6hBJhkmhznrCzoNpbA3zqy0fYiUcYZP/GkPY= github.com/alecthomas/assert/v2 v2.10.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k= github.com/alecthomas/repr v0.4.0 h1:GhI2A8MACjfegCPVq9f1FLvIBS+DrQ2KQBFZP1iFzXc= @@ -75,13 +73,6 @@ github.com/getsentry/sentry-go v0.42.0 h1:eeFMACuZTbUQf90RE8dE4tXeSe4CZyfvR1MBL7 github.com/getsentry/sentry-go v0.42.0/go.mod h1:eRXCoh3uvmjQLY6qu63BjUZnaBu5L5WhMV1RwYO8W5s= github.com/getsentry/sentry-go/zerolog v0.42.0 h1:FDvGyxz7IGW8bzomAJuEFiEToq89PrOLsxQ28XYLsDc= github.com/getsentry/sentry-go/zerolog v0.42.0/go.mod h1:cY2lSFOu3cJXhvJuUfcBeyq19QRPYt6OIAvpdwhKkfE= -github.com/go-chi/chi/v5 v5.2.0/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= -github.com/go-chi/chi/v5 v5.2.3 h1:WQIt9uxdsAbgIYgid+BpYc+liqQZGMHRaUwp0JUcvdE= -github.com/go-chi/chi/v5 v5.2.3/go.mod h1:L2yAIGWB3H+phAw1NxKwWM+7eUH/lU8pOMm5hHcoops= -github.com/go-chi/hostrouter v0.3.0 h1:75it1eO3FvkG8te1CvU6Kvr3WzAZNEBbo8xIrxUKLOQ= -github.com/go-chi/hostrouter v0.3.0/go.mod h1:KLB+7PH/ceOr6FCmMyWD2Dmql/clpOe+y7I7CUeTkaQ= -github.com/go-chi/render v1.0.3 h1:AsXqd2a1/INaIfUSKq3G5uA8weYx20FOsM7uSoCyyt4= -github.com/go-chi/render v1.0.3/go.mod h1:/gr3hVkmYR0YlEy3LxCuVRFzEu9Ruok+gFqbIofjao0= github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= github.com/go-ini/ini v1.67.0 h1:z6ZrTEZqSWOTyH2FlglNbNgARyHG8oLW9gMELqKr06A= diff --git a/rmo/district.go b/rmo/district.go index 25ce2cbe..7d3c864d 100644 --- a/rmo/district.go +++ b/rmo/district.go @@ -8,7 +8,7 @@ import ( "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/gorilla/mux" ) type ContentDistrict struct { @@ -23,7 +23,8 @@ type ContentDistrictList struct { } func districtBySlug(r *http.Request) (*models.Organization, error) { - slug := chi.URLParam(r, "slug") + vars := mux.Vars(r) + slug := vars["slug"] district, err := models.Organizations.Query( models.SelectWhere.Organizations.Slug.EQ(slug), ).One(r.Context(), db.PGInstance.BobDB) diff --git a/rmo/email.go b/rmo/email.go index 473adbfc..2cd4f7f7 100644 --- a/rmo/email.go +++ b/rmo/email.go @@ -8,7 +8,7 @@ import ( "github.com/Gleipnir-Technology/nidus-sync/html" "github.com/Gleipnir-Technology/nidus-sync/platform/email" "github.com/aarondl/opt/omit" - "github.com/go-chi/chi/v5" + "github.com/gorilla/mux" ) type ContentEmail struct { @@ -16,7 +16,8 @@ type ContentEmail struct { } func getEmailByCode(w http.ResponseWriter, r *http.Request) { - id := chi.URLParam(r, "code") + vars := mux.Vars(r) + id := vars["code"] //id := r.FormValue("id") if id == "" { http.Error(w, "You must specify an id", http.StatusBadRequest) diff --git a/rmo/image.go b/rmo/image.go index f0c908d2..faa64a04 100644 --- a/rmo/image.go +++ b/rmo/image.go @@ -4,13 +4,14 @@ import ( "net/http" "github.com/Gleipnir-Technology/nidus-sync/platform/file" - "github.com/go-chi/chi/v5" "github.com/google/uuid" + "github.com/gorilla/mux" ) // ServeImageByUUID reads an image with the given UUID from disk and writes it to the HTTP response func getImageByUUID(w http.ResponseWriter, r *http.Request) { - u := chi.URLParam(r, "uuid") + vars := mux.Vars(r) + u := vars["uuid"] if u == "" { http.NotFound(w, r) return diff --git a/rmo/mailer.go b/rmo/mailer.go index a7b67118..3518d11d 100644 --- a/rmo/mailer.go +++ b/rmo/mailer.go @@ -11,7 +11,7 @@ import ( "github.com/Gleipnir-Technology/nidus-sync/db" "github.com/Gleipnir-Technology/nidus-sync/html" nhttp "github.com/Gleipnir-Technology/nidus-sync/http" - "github.com/go-chi/chi/v5" + "github.com/gorilla/mux" "github.com/rs/zerolog/log" "github.com/stephenafamo/scan" //"github.com/Gleipnir-Technology/nidus-sync/config" @@ -34,7 +34,8 @@ type contentMailer struct { } func getMailer(ctx context.Context, r *http.Request) (*html.Response[contentMailer], *nhttp.ErrorWithStatus) { - public_id := chi.URLParam(r, "public_id") + vars := mux.Vars(r) + public_id := vars["public_id"] if public_id == "" { return nil, nhttp.NewErrorStatus(http.StatusBadRequest, "No 'public_id' in the url params") } @@ -81,7 +82,8 @@ func getMailer(ctx context.Context, r *http.Request) (*html.Response[contentMail } func getMailerConfirm(ctx context.Context, r *http.Request) (*html.Response[contentMailer], *nhttp.ErrorWithStatus) { - public_id := chi.URLParam(r, "public_id") + vars := mux.Vars(r) + public_id := vars["public_id"] if public_id == "" { return nil, nhttp.NewErrorStatus(http.StatusBadRequest, "No 'public_id' in the url params") } @@ -92,7 +94,8 @@ func getMailerConfirm(ctx context.Context, r *http.Request) (*html.Response[cont ), nil } func getMailerContribute(ctx context.Context, r *http.Request) (*html.Response[contentMailer], *nhttp.ErrorWithStatus) { - public_id := chi.URLParam(r, "public_id") + vars := mux.Vars(r) + public_id := vars["public_id"] if public_id == "" { return nil, nhttp.NewErrorStatus(http.StatusBadRequest, "No 'public_id' in the url params") } @@ -103,7 +106,8 @@ func getMailerContribute(ctx context.Context, r *http.Request) (*html.Response[c ), nil } func getMailerEvidence(ctx context.Context, r *http.Request) (*html.Response[contentMailer], *nhttp.ErrorWithStatus) { - public_id := chi.URLParam(r, "public_id") + vars := mux.Vars(r) + public_id := vars["public_id"] if public_id == "" { return nil, nhttp.NewErrorStatus(http.StatusBadRequest, "No 'public_id' in the url params") } @@ -114,7 +118,8 @@ func getMailerEvidence(ctx context.Context, r *http.Request) (*html.Response[con ), nil } func getMailerSchedule(ctx context.Context, r *http.Request) (*html.Response[contentMailer], *nhttp.ErrorWithStatus) { - public_id := chi.URLParam(r, "public_id") + vars := mux.Vars(r) + public_id := vars["public_id"] if public_id == "" { return nil, nhttp.NewErrorStatus(http.StatusBadRequest, "No 'public_id' in the url params") } @@ -125,7 +130,8 @@ func getMailerSchedule(ctx context.Context, r *http.Request) (*html.Response[con ), nil } func getMailerUpdate(ctx context.Context, r *http.Request) (*html.Response[contentMailer], *nhttp.ErrorWithStatus) { - public_id := chi.URLParam(r, "public_id") + vars := mux.Vars(r) + public_id := vars["public_id"] if public_id == "" { return nil, nhttp.NewErrorStatus(http.StatusBadRequest, "No 'public_id' in the url params") } @@ -140,7 +146,8 @@ type formMailerConfirm struct{} func postMailerConfirm(ctx context.Context, r *http.Request, form formMailerConfirm) (string, *nhttp.ErrorWithStatus) { log.Info().Msg("Fake confirm location") - public_id := chi.URLParam(r, "public_id") + vars := mux.Vars(r) + public_id := vars["public_id"] if public_id == "" { return "", nhttp.NewErrorStatus(http.StatusBadRequest, "No 'public_id' in the url params") } diff --git a/rmo/mock.go b/rmo/mock.go index df1d7320..c099e3cf 100644 --- a/rmo/mock.go +++ b/rmo/mock.go @@ -5,7 +5,7 @@ import ( "github.com/Gleipnir-Technology/nidus-sync/config" "github.com/Gleipnir-Technology/nidus-sync/html" - "github.com/go-chi/chi/v5" + "github.com/gorilla/mux" ) type ContentMock struct { @@ -14,12 +14,12 @@ type ContentMock struct { URL ContentURL } -func addMockRoutes(r chi.Router) { - r.Get("/", renderMock("rmo/mock/root.html")) - r.Get("/district/{slug}", renderMock("rmo/mock/district-root.html")) - r.Get("/district/{slug}/nuisance-submit-complete", renderMock("rmo/mock/nuisance-submit-complete.html")) - r.Get("/nuisance", renderMock("rmo/mock/nuisance.html")) - r.Get("/nuisance-submit-complete", renderMock("rmo/mock/nuisance-submit-complete.html")) +func addMockRoutes(r *mux.Router) { + r.HandleFunc("/", renderMock("rmo/mock/root.html")) + r.HandleFunc("/district/{slug}", renderMock("rmo/mock/district-root.html")) + r.HandleFunc("/district/{slug}/nuisance-submit-complete", renderMock("rmo/mock/nuisance-submit-complete.html")) + r.HandleFunc("/nuisance", renderMock("rmo/mock/nuisance.html")) + r.HandleFunc("/nuisance-submit-complete", renderMock("rmo/mock/nuisance-submit-complete.html")) } func makeContentURLMock(slug string) ContentURL { @@ -35,7 +35,8 @@ func makeURLMock(slug, p string) string { } func renderMock(t string) func(http.ResponseWriter, *http.Request) { return func(w http.ResponseWriter, r *http.Request) { - slug := chi.URLParam(r, "slug") + vars := mux.Vars(r) + slug := vars["slug"] if slug == "" { slug = "delta-mvcd" } diff --git a/rmo/report.go b/rmo/report.go index 670be3f2..207b994e 100644 --- a/rmo/report.go +++ b/rmo/report.go @@ -14,8 +14,8 @@ import ( "github.com/Gleipnir-Technology/nidus-sync/db" "github.com/Gleipnir-Technology/nidus-sync/db/enums" "github.com/Gleipnir-Technology/nidus-sync/platform" + //"github.com/gorilla/mux" "github.com/stephenafamo/scan" - //"github.com/go-chi/chi/v5" //"github.com/rs/zerolog/log" ) diff --git a/rmo/scss.go b/rmo/scss.go index e58c89c5..d71cd849 100644 --- a/rmo/scss.go +++ b/rmo/scss.go @@ -6,12 +6,13 @@ import ( "net/http" "os" - "github.com/go-chi/chi/v5" + "github.com/gorilla/mux" "github.com/rs/zerolog/log" ) func getScssDebug(w http.ResponseWriter, r *http.Request) { - path := chi.URLParam(r, "*") + vars := mux.Vars(r) + path := vars["*"] full_path := "scss/" + path //log.Debug().Str("path", path).Str("full_path", full_path).Msg("working on SCSS debug") file, err := os.Open(full_path) diff --git a/rmo/status.go b/rmo/status.go index 629964f7..65b3d0c8 100644 --- a/rmo/status.go +++ b/rmo/status.go @@ -14,8 +14,8 @@ import ( "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/google/uuid" + "github.com/gorilla/mux" //"github.com/rs/zerolog/log" "github.com/stephenafamo/scan" "golang.org/x/text/cases" @@ -270,7 +270,8 @@ func addContentFromWater(result *ContentStatusByID, water *models.PublicreportWa } func getStatusByID(w http.ResponseWriter, r *http.Request) { - report_id := chi.URLParam(r, "report_id") + vars := mux.Vars(r) + report_id := vars["report_id"] ctx := r.Context() report, err := models.PublicreportReports.Query( diff --git a/sync/cell.go b/sync/cell.go index 989601c4..06afbe2c 100644 --- a/sync/cell.go +++ b/sync/cell.go @@ -8,7 +8,7 @@ import ( "github.com/Gleipnir-Technology/nidus-sync/html" nhttp "github.com/Gleipnir-Technology/nidus-sync/http" "github.com/Gleipnir-Technology/nidus-sync/platform" - "github.com/go-chi/chi/v5" + "github.com/gorilla/mux" "github.com/uber/h3-go/v4" ) @@ -21,7 +21,8 @@ type contentCell struct { } func getCellDetails(ctx context.Context, r *http.Request, user platform.User) (*html.Response[contentCell], *nhttp.ErrorWithStatus) { - cell_str := chi.URLParam(r, "cell") + vars := mux.Vars(r) + cell_str := vars["cell"] if cell_str == "" { return nil, nhttp.NewErrorStatus(http.StatusBadRequest, "There should always be a cell") } diff --git a/sync/dash.go b/sync/dash.go index a953f4e3..d0e27a52 100644 --- a/sync/dash.go +++ b/sync/dash.go @@ -7,8 +7,8 @@ import ( "github.com/Gleipnir-Technology/nidus-sync/html" nhttp "github.com/Gleipnir-Technology/nidus-sync/http" "github.com/Gleipnir-Technology/nidus-sync/platform" - "github.com/go-chi/chi/v5" "github.com/google/uuid" + "github.com/gorilla/mux" ) type contentSource struct { @@ -44,7 +44,8 @@ func getRoot(w http.ResponseWriter, r *http.Request) { } func getSource(ctx context.Context, r *http.Request, user platform.User) (*html.Response[contentSource], *nhttp.ErrorWithStatus) { - globalid_s := chi.URLParam(r, "globalid") + vars := mux.Vars(r) + globalid_s := vars["globalid"] if globalid_s == "" { return nil, nhttp.NewError("No globalid provided: %w", nil) } @@ -86,7 +87,8 @@ func getTemplateTest(w http.ResponseWriter, r *http.Request) { html.RenderOrError(w, "sync/template-test.html", nil) } func getTrap(ctx context.Context, r *http.Request, user platform.User) (*html.Response[contentTrap], *nhttp.ErrorWithStatus) { - globalid_s := chi.URLParam(r, "globalid") + vars := mux.Vars(r) + globalid_s := vars["globalid"] if globalid_s == "" { return nil, nhttp.NewError("No globalid provided: %w", nil) } diff --git a/sync/mailer.go b/sync/mailer.go index 121a5bc5..b60d6c66 100644 --- a/sync/mailer.go +++ b/sync/mailer.go @@ -12,8 +12,8 @@ import ( "github.com/Gleipnir-Technology/nidus-sync/html" "github.com/Gleipnir-Technology/nidus-sync/platform" "github.com/Gleipnir-Technology/nidus-sync/platform/pdf" - "github.com/go-chi/chi/v5" "github.com/google/uuid" + "github.com/gorilla/mux" "github.com/rs/zerolog/log" ) @@ -54,7 +54,8 @@ func getMailer2(w http.ResponseWriter, r *http.Request) { } } func getMailer3(w http.ResponseWriter, r *http.Request) { - code := chi.URLParam(r, "code") + vars := mux.Vars(r) + code := vars["code"] if code == "" { http.Error(w, "empty code", http.StatusBadRequest) return @@ -102,7 +103,8 @@ func getMailer2Preview(w http.ResponseWriter, r *http.Request) { }) } func getMailer3Preview(w http.ResponseWriter, r *http.Request) { - code := chi.URLParam(r, "code") + vars := mux.Vars(r) + code := vars["code"] if code == "" { http.Error(w, "empty code", http.StatusBadRequest) return diff --git a/sync/qr.go b/sync/qr.go index a63a67b1..807a9889 100644 --- a/sync/qr.go +++ b/sync/qr.go @@ -6,11 +6,12 @@ import ( "strconv" "github.com/Gleipnir-Technology/nidus-sync/config" - "github.com/go-chi/chi/v5" + "github.com/gorilla/mux" ) func getQRCodeMailer(w http.ResponseWriter, r *http.Request) { - code := chi.URLParam(r, "code") + vars := mux.Vars(r) + code := vars["code"] if code == "" { respondError(w, "There should always be a id", nil, http.StatusBadRequest) } @@ -23,7 +24,8 @@ func getQRCodeMarketing(w http.ResponseWriter, r *http.Request) { } func getQRCodeReport(w http.ResponseWriter, r *http.Request) { - code := chi.URLParam(r, "code") + vars := mux.Vars(r) + code := vars["code"] if code == "" { respondError(w, "There should always be a code", nil, http.StatusBadRequest) } diff --git a/sync/sms.go b/sync/sms.go index 4bb6d439..45ab4cc1 100644 --- a/sync/sms.go +++ b/sync/sms.go @@ -11,7 +11,7 @@ import ( "strings" "time" - "github.com/go-chi/chi/v5" + "github.com/gorilla/mux" "github.com/rs/zerolog/log" ) @@ -184,7 +184,8 @@ func postSMS(w http.ResponseWriter, r *http.Request) { w.Write([]byte("ok")) } func getSMS(w http.ResponseWriter, r *http.Request) { - org := chi.URLParam(r, "org") + vars := mux.Vars(r) + org := vars["org"] to := r.URL.Query().Get("error") from := r.URL.Query().Get("error")