A container registry that uses the AT Protocol for manifest storage and S3 for blob storage. atcr.io
docker container atproto go

more lint cleanup

evan.jarrett.net 56dd5222 9704fe09

verified
Changed files
+27 -10
pkg
appview
handlers
jetstream
middleware
storage
-3
.golangci.yml
··· 26 - errcheck 27 28 # TODO: fix issues and remove these paths one by one 29 - - path: cmd/credential-helper 30 - linters: 31 - - errcheck 32 33 formatters: 34 enable:
··· 26 - errcheck 27 28 # TODO: fix issues and remove these paths one by one 29 30 formatters: 31 enable:
+12 -3
pkg/appview/handlers/device.go
··· 362 } 363 364 w.Header().Set("Content-Type", "text/html; charset=utf-8") 365 - tmpl.Execute(w, data) 366 } 367 368 func (h *DeviceApprovalPageHandler) renderSuccess(w http.ResponseWriter, deviceName string) { ··· 374 } 375 376 w.Header().Set("Content-Type", "text/html; charset=utf-8") 377 - tmpl.Execute(w, data) 378 } 379 380 func (h *DeviceApprovalPageHandler) renderError(w http.ResponseWriter, message string) { ··· 387 388 w.Header().Set("Content-Type", "text/html; charset=utf-8") 389 w.WriteHeader(http.StatusBadRequest) 390 - tmpl.Execute(w, data) 391 } 392 393 func getClientIP(r *http.Request) string {
··· 362 } 363 364 w.Header().Set("Content-Type", "text/html; charset=utf-8") 365 + if err := tmpl.Execute(w, data); err != nil { 366 + http.Error(w, "failed to render template", http.StatusInternalServerError) 367 + return 368 + } 369 } 370 371 func (h *DeviceApprovalPageHandler) renderSuccess(w http.ResponseWriter, deviceName string) { ··· 377 } 378 379 w.Header().Set("Content-Type", "text/html; charset=utf-8") 380 + if err := tmpl.Execute(w, data); err != nil { 381 + http.Error(w, "failed to render template", http.StatusInternalServerError) 382 + return 383 + } 384 } 385 386 func (h *DeviceApprovalPageHandler) renderError(w http.ResponseWriter, message string) { ··· 393 394 w.Header().Set("Content-Type", "text/html; charset=utf-8") 395 w.WriteHeader(http.StatusBadRequest) 396 + if err := tmpl.Execute(w, data); err != nil { 397 + http.Error(w, "failed to render template", http.StatusInternalServerError) 398 + return 399 + } 400 } 401 402 func getClientIP(r *http.Request) string {
+8 -2
pkg/appview/jetstream/worker.go
··· 132 }) 133 134 // Set initial read deadline 135 - conn.SetReadDeadline(time.Now().Add(90 * time.Second)) 136 137 // Create zstd decoder for decompressing messages 138 decoder, err := zstd.NewReader(nil) ··· 178 } 179 180 // Send ping with write deadline 181 - conn.SetWriteDeadline(time.Now().Add(10 * time.Second)) 182 if err := conn.WriteMessage(websocket.PingMessage, nil); err != nil { 183 slog.Warn("Jetstream failed to send ping", "error", err) 184 conn.Close()
··· 132 }) 133 134 // Set initial read deadline 135 + if err := conn.SetReadDeadline(time.Now().Add(90 * time.Second)); err != nil { 136 + return fmt.Errorf("failed to set read deadline: %w", err) 137 + } 138 139 // Create zstd decoder for decompressing messages 140 decoder, err := zstd.NewReader(nil) ··· 180 } 181 182 // Send ping with write deadline 183 + if err := conn.SetWriteDeadline(time.Now().Add(10 * time.Second)); err != nil { 184 + slog.Warn("Jetstream failed to set write deadline", "error", err) 185 + conn.Close() 186 + return 187 + } 188 if err := conn.WriteMessage(websocket.PingMessage, nil); err != nil { 189 slog.Warn("Jetstream failed to send ping", "error", err) 190 conn.Close()
+3 -1
pkg/appview/middleware/registry.go
··· 204 205 func init() { 206 // Register the name resolution middleware 207 - registrymw.Register("atproto-resolver", initATProtoResolver) 208 } 209 210 // NamespaceResolver wraps a namespace and resolves names
··· 204 205 func init() { 206 // Register the name resolution middleware 207 + if err := registrymw.Register("atproto-resolver", initATProtoResolver); err != nil { 208 + panic("failed to register atproto-resolver middleware: " + err.Error()) 209 + } 210 } 211 212 // NamespaceResolver wraps a namespace and resolves names
+4 -1
pkg/appview/storage/proxy_blob_store.go
··· 8 "io" 9 "log/slog" 10 "net/http" 11 "sync" 12 "time" 13 ··· 170 // Return a minimal descriptor with size from Content-Length if available 171 size := int64(0) 172 if contentLength := resp.Header.Get("Content-Length"); contentLength != "" { 173 - fmt.Sscanf(contentLength, "%d", &size) 174 } 175 176 return distribution.Descriptor{
··· 8 "io" 9 "log/slog" 10 "net/http" 11 + "strconv" 12 "sync" 13 "time" 14 ··· 171 // Return a minimal descriptor with size from Content-Length if available 172 size := int64(0) 173 if contentLength := resp.Header.Get("Content-Length"); contentLength != "" { 174 + if parsed, err := strconv.ParseInt(contentLength, 10, 64); err == nil { 175 + size = parsed 176 + } 177 } 178 179 return distribution.Descriptor{