Signed-off-by: brookjeynes me@brookjeynes.dev
+31
-26
internal/server/handlers/resource.go
+31
-26
internal/server/handlers/resource.go
···
3
import (
4
"errors"
5
"fmt"
6
-
"log"
7
"net/http"
8
"time"
9
···
63
}
64
65
func (h *Handler) HandleNewResourcePage(w http.ResponseWriter, r *http.Request) {
66
user, err := bsky.GetUserWithBskyProfile(h.Oauth, r)
67
if err != nil {
68
-
log.Println("failed to get logged-in user:", err)
69
htmx.HxRedirect(w, "/login")
70
return
71
}
···
79
case http.MethodPost:
80
client, err := h.Oauth.AuthorizedClient(r)
81
if err != nil {
82
-
log.Println("failed to get authorized client:", err)
83
htmx.HxRedirect(w, "/login")
84
return
85
}
86
87
newResource, err := parseResourceForm(r)
88
if err != nil {
89
-
log.Println("invalid resource form:", err)
90
htmx.HxError(w, http.StatusBadRequest, "Failed to create resource, ensure all fields contain valid data.")
91
return
92
}
···
95
newResource.CreatedAt = time.Now().UTC()
96
97
if err := db.ValidateResource(newResource); err != nil {
98
-
log.Println("invalid resource definition:", err)
99
switch {
100
case errors.Is(err, db.ErrResourceTitleEmpty):
101
htmx.HxError(w, http.StatusBadRequest, "Resource must have a title.")
···
118
if newResource.Link != nil {
119
linkCheckResult := google.CheckResourceLinkSafety(*newResource.Link)
120
if linkCheckResult.Err != nil {
121
-
log.Println("invalid resource definition:", linkCheckResult.Err)
122
switch {
123
case errors.Is(linkCheckResult.Err, google.ErrResourceLinkSketchy):
124
if !h.Config.Core.Dev {
···
186
},
187
})
188
if err != nil {
189
-
log.Println("failed to create resource record:", err)
190
htmx.HxError(w, http.StatusInternalServerError, "Failed to create resource, try again later.")
191
return
192
}
193
194
err = SavePendingCreate(h, w, r, PendingResourceCreation, newResource)
195
if err != nil {
196
-
log.Printf("failed to save yoten-session to add pending resource creation: %v", err)
197
}
198
199
if !h.Config.Core.Dev {
···
209
Set("link_provided", newResource.Link != nil),
210
})
211
if err != nil {
212
-
log.Println("failed to enqueue posthog event:", err)
213
}
214
}
215
···
218
}
219
220
func (h *Handler) HandleDeleteResource(w http.ResponseWriter, r *http.Request) {
221
user := h.Oauth.GetUser(r)
222
if user == nil {
223
-
log.Println("failed to get logged-in user")
224
htmx.HxRedirect(w, "/login")
225
return
226
}
227
client, err := h.Oauth.AuthorizedClient(r)
228
if err != nil {
229
-
log.Println("failed to get authorized client:", err)
230
htmx.HxError(w, http.StatusUnauthorized, "Failed to delete resource, try again later.")
231
return
232
}
···
236
rkey := chi.URLParam(r, "rkey")
237
resource, err := db.GetResourceByRkey(h.Db, user.Did, rkey)
238
if err != nil {
239
-
log.Println("failed to get resource from db:", err)
240
htmx.HxError(w, http.StatusInternalServerError, "Failed to delete resource, try again later.")
241
return
242
}
243
244
if user.Did != resource.Did {
245
-
log.Printf("user '%s' does not own record '%s'", user.Did, rkey)
246
htmx.HxError(w, http.StatusUnauthorized, "You do not have permissions to delete this resource.")
247
return
248
}
···
253
Rkey: resource.Rkey,
254
})
255
if err != nil {
256
-
log.Println("failed to delete resource from PDS:", err)
257
htmx.HxError(w, http.StatusInternalServerError, "Failed to delete resource, try again later.")
258
return
259
}
260
261
err = SavePendingDelete(h, w, r, PendingResourceDeletion, resource)
262
if err != nil {
263
-
log.Printf("failed to save yoten-session to add pending resource deletion: %v", err)
264
}
265
266
if !h.Config.Core.Dev {
···
272
Set("resource_type", resource.Type),
273
})
274
if err != nil {
275
-
log.Println("failed to enqueue posthog event:", err)
276
}
277
}
278
···
281
}
282
283
func (h *Handler) HandleEditResourcePage(w http.ResponseWriter, r *http.Request) {
284
user, err := bsky.GetUserWithBskyProfile(h.Oauth, r)
285
if err != nil {
286
-
log.Println("failed to get logged-in user:", err)
287
htmx.HxRedirect(w, "/login")
288
return
289
}
···
291
rkey := chi.URLParam(r, "rkey")
292
resource, err := db.GetResourceByRkey(h.Db, user.Did, rkey)
293
if err != nil {
294
-
log.Println("failed to get resource from db:", err)
295
htmx.HxError(w, http.StatusInternalServerError, "Failed to update resource, try again later.")
296
return
297
}
298
299
if user.Did != resource.Did {
300
-
log.Printf("user '%s' does not own record '%s'", user.Did, rkey)
301
htmx.HxError(w, http.StatusUnauthorized, "You do not have permissions to edit this resource.")
302
return
303
}
···
312
case http.MethodPost:
313
client, err := h.Oauth.AuthorizedClient(r)
314
if err != nil {
315
-
log.Println("failed to get authorized client:", err)
316
htmx.HxRedirect(w, "/login")
317
return
318
}
319
320
updatedResource, err := parseResourceForm(r)
321
if err != nil {
322
-
log.Println("invalid resource form:", err)
323
htmx.HxError(w, http.StatusBadRequest, "Failed to create resource, ensure all fields contain valid data.")
324
return
325
}
···
328
updatedResource.CreatedAt = resource.CreatedAt
329
330
if err := db.ValidateResource(updatedResource); err != nil {
331
-
log.Println("invalid resource definition:", err)
332
switch {
333
case errors.Is(err, db.ErrResourceTitleEmpty):
334
htmx.HxError(w, http.StatusBadRequest, "Resource must have a title.")
···
352
if updatedResource.Link != nil && (resource.Link == nil || *updatedResource.Link != *resource.Link) {
353
linkCheckResult := google.CheckResourceLinkSafety(*updatedResource.Link)
354
if linkCheckResult.Err != nil {
355
-
log.Println("invalid resource definition:", linkCheckResult.Err)
356
switch {
357
case errors.Is(linkCheckResult.Err, google.ErrResourceLinkSketchy):
358
if !h.Config.Core.Dev {
···
427
SwapRecord: cid,
428
})
429
if err != nil {
430
-
log.Println("failed to update resource record:", err)
431
htmx.HxError(w, http.StatusInternalServerError, "Failed to update resource, try again later.")
432
return
433
}
434
435
err = SavePendingUpdate(h, w, r, PendingResourceUpdates, updatedResource)
436
if err != nil {
437
-
log.Printf("failed to save yoten-session to add pending resource updates: %v", err)
438
}
439
440
if !h.Config.Core.Dev {
···
450
Set("link_provided", updatedResource.Link != nil),
451
})
452
if err != nil {
453
-
log.Println("failed to enqueue posthog event:", err)
454
}
455
}
456
···
3
import (
4
"errors"
5
"fmt"
6
"net/http"
7
"time"
8
···
62
}
63
64
func (h *Handler) HandleNewResourcePage(w http.ResponseWriter, r *http.Request) {
65
+
l := h.Logger.With("handler", "HandleNewResourcePage")
66
+
67
user, err := bsky.GetUserWithBskyProfile(h.Oauth, r)
68
if err != nil {
69
+
l.Error("failed to get logged-in user", "err", err)
70
htmx.HxRedirect(w, "/login")
71
return
72
}
···
80
case http.MethodPost:
81
client, err := h.Oauth.AuthorizedClient(r)
82
if err != nil {
83
+
l.Error("failed to get authorized client", "err", err)
84
htmx.HxRedirect(w, "/login")
85
return
86
}
87
88
newResource, err := parseResourceForm(r)
89
if err != nil {
90
+
l.Error("invalid resource form", "err", err)
91
htmx.HxError(w, http.StatusBadRequest, "Failed to create resource, ensure all fields contain valid data.")
92
return
93
}
···
96
newResource.CreatedAt = time.Now().UTC()
97
98
if err := db.ValidateResource(newResource); err != nil {
99
+
l.Error("invalid resource definition", "err", err)
100
switch {
101
case errors.Is(err, db.ErrResourceTitleEmpty):
102
htmx.HxError(w, http.StatusBadRequest, "Resource must have a title.")
···
119
if newResource.Link != nil {
120
linkCheckResult := google.CheckResourceLinkSafety(*newResource.Link)
121
if linkCheckResult.Err != nil {
122
+
l.Error("invalid resource definition", "err", linkCheckResult.Err)
123
switch {
124
case errors.Is(linkCheckResult.Err, google.ErrResourceLinkSketchy):
125
if !h.Config.Core.Dev {
···
187
},
188
})
189
if err != nil {
190
+
l.Error("failed to create resource record", "err", err)
191
htmx.HxError(w, http.StatusInternalServerError, "Failed to create resource, try again later.")
192
return
193
}
194
195
err = SavePendingCreate(h, w, r, PendingResourceCreation, newResource)
196
if err != nil {
197
+
l.Error("failed to save yoten-session to add pending resource creation", "err", err)
198
}
199
200
if !h.Config.Core.Dev {
···
210
Set("link_provided", newResource.Link != nil),
211
})
212
if err != nil {
213
+
l.Error("failed to enqueue posthog event", "err", err)
214
}
215
}
216
···
219
}
220
221
func (h *Handler) HandleDeleteResource(w http.ResponseWriter, r *http.Request) {
222
+
l := h.Logger.With("handler", "HandleDeleteResource")
223
+
224
user := h.Oauth.GetUser(r)
225
if user == nil {
226
+
l.Error("failed to get logged-in user")
227
htmx.HxRedirect(w, "/login")
228
return
229
}
230
client, err := h.Oauth.AuthorizedClient(r)
231
if err != nil {
232
+
l.Error("failed to get authorized client", "err", err)
233
htmx.HxError(w, http.StatusUnauthorized, "Failed to delete resource, try again later.")
234
return
235
}
···
239
rkey := chi.URLParam(r, "rkey")
240
resource, err := db.GetResourceByRkey(h.Db, user.Did, rkey)
241
if err != nil {
242
+
l.Error("failed to get resource from db", "err", err)
243
htmx.HxError(w, http.StatusInternalServerError, "Failed to delete resource, try again later.")
244
return
245
}
246
247
if user.Did != resource.Did {
248
+
l.Error("user does not own record", "did", user.Did, "resourceDid", resource.Did)
249
htmx.HxError(w, http.StatusUnauthorized, "You do not have permissions to delete this resource.")
250
return
251
}
···
256
Rkey: resource.Rkey,
257
})
258
if err != nil {
259
+
l.Error("failed to delete resource from PDS", "err", err)
260
htmx.HxError(w, http.StatusInternalServerError, "Failed to delete resource, try again later.")
261
return
262
}
263
264
err = SavePendingDelete(h, w, r, PendingResourceDeletion, resource)
265
if err != nil {
266
+
l.Error("failed to save yoten-session to add pending resource deletion", "err", err)
267
}
268
269
if !h.Config.Core.Dev {
···
275
Set("resource_type", resource.Type),
276
})
277
if err != nil {
278
+
l.Error("failed to enqueue posthog event", "err", err)
279
}
280
}
281
···
284
}
285
286
func (h *Handler) HandleEditResourcePage(w http.ResponseWriter, r *http.Request) {
287
+
l := h.Logger.With("handler", "HandleEditResourcePage")
288
+
289
user, err := bsky.GetUserWithBskyProfile(h.Oauth, r)
290
if err != nil {
291
+
l.Error("failed to get logged-in user", "err", err)
292
htmx.HxRedirect(w, "/login")
293
return
294
}
···
296
rkey := chi.URLParam(r, "rkey")
297
resource, err := db.GetResourceByRkey(h.Db, user.Did, rkey)
298
if err != nil {
299
+
l.Error("failed to get resource from db", "err", err)
300
htmx.HxError(w, http.StatusInternalServerError, "Failed to update resource, try again later.")
301
return
302
}
303
304
if user.Did != resource.Did {
305
+
l.Error("user does not own record", "did", user.Did, "resourceDid", resource.Did)
306
htmx.HxError(w, http.StatusUnauthorized, "You do not have permissions to edit this resource.")
307
return
308
}
···
317
case http.MethodPost:
318
client, err := h.Oauth.AuthorizedClient(r)
319
if err != nil {
320
+
l.Error("failed to get authorized client", "err", err)
321
htmx.HxRedirect(w, "/login")
322
return
323
}
324
325
updatedResource, err := parseResourceForm(r)
326
if err != nil {
327
+
l.Error("invalid resource form", "err", err)
328
htmx.HxError(w, http.StatusBadRequest, "Failed to create resource, ensure all fields contain valid data.")
329
return
330
}
···
333
updatedResource.CreatedAt = resource.CreatedAt
334
335
if err := db.ValidateResource(updatedResource); err != nil {
336
+
l.Error("invalid resource definition", "err", err)
337
switch {
338
case errors.Is(err, db.ErrResourceTitleEmpty):
339
htmx.HxError(w, http.StatusBadRequest, "Resource must have a title.")
···
357
if updatedResource.Link != nil && (resource.Link == nil || *updatedResource.Link != *resource.Link) {
358
linkCheckResult := google.CheckResourceLinkSafety(*updatedResource.Link)
359
if linkCheckResult.Err != nil {
360
+
l.Error("invalid resource link", "link", resource.Link, "threatType", linkCheckResult.ThreatType, "err", linkCheckResult.Err)
361
switch {
362
case errors.Is(linkCheckResult.Err, google.ErrResourceLinkSketchy):
363
if !h.Config.Core.Dev {
···
432
SwapRecord: cid,
433
})
434
if err != nil {
435
+
l.Error("failed to update resource record", "err", err)
436
htmx.HxError(w, http.StatusInternalServerError, "Failed to update resource, try again later.")
437
return
438
}
439
440
err = SavePendingUpdate(h, w, r, PendingResourceUpdates, updatedResource)
441
if err != nil {
442
+
l.Error("failed to save yoten-session to add pending resource updates", "err", err)
443
}
444
445
if !h.Config.Core.Dev {
···
455
Set("link_provided", updatedResource.Link != nil),
456
})
457
if err != nil {
458
+
l.Error("failed to enqueue posthog event", "err", err)
459
}
460
}
461
History
1 round
0 comments
brookjeynes.dev
submitted
#0
1 commit
expand
collapse
feat(handlers/resource): use slogger
Signed-off-by: brookjeynes <me@brookjeynes.dev>
expand 0 comments
pull request successfully merged