diff --git a/auth/auth.go b/auth/auth.go index ae8e12ac..7d55ddc9 100644 --- a/auth/auth.go +++ b/auth/auth.go @@ -163,7 +163,10 @@ func SigninUser(r *http.Request, username string, password string) (*platform.Us func SignoutUser(r *http.Request, user platform.User) { sessionManager.Put(r.Context(), "user_id", "") sessionManager.Put(r.Context(), "username", "") - sessionManager.Destroy(r.Context()) + err := sessionManager.Destroy(r.Context()) + if err != nil { + log.Error().Err(err).Msg("failed to destroy session for user on signout") + } log.Info().Str("username", user.Username).Int("user_id", (user.ID)).Msg("Ended user session") } diff --git a/db/connection.go b/db/connection.go index fe84d47e..8f207e37 100644 --- a/db/connection.go +++ b/db/connection.go @@ -76,7 +76,12 @@ func doMigrations(connection_string string) error { if err != nil { return fmt.Errorf("Failed to open database connection: %w", err) } - defer db.Close() + defer func() { + err := db.Close() + if err != nil { + log.Error().Err(err).Msg("failed to close database connection") + } + }() row := db.QueryRowContext(context.Background(), "SELECT version()") var val string if err := row.Scan(&val); err != nil { @@ -157,7 +162,12 @@ func needsMigrations(connection_string string) (*bool, error) { if err != nil { return nil, fmt.Errorf("Failed to open database connection: %w", err) } - defer db.Close() + defer func() { + err := db.Close() + if err != nil { + log.Error().Err(err).Msg("failed to close database connection") + } + }() row := db.QueryRowContext(context.Background(), "SELECT version()") var val string if err := row.Scan(&val); err != nil { diff --git a/html/embed.go b/html/embed.go index f7ac9389..e7b5b39b 100644 --- a/html/embed.go +++ b/html/embed.go @@ -120,7 +120,10 @@ func (ts templateSystemEmbed) renderOrError(w http.ResponseWriter, template_name return } - buf.WriteTo(w) + _, err = buf.WriteTo(w) + if err != nil { + log.Error().Err(err).Msg("failed to write buffer on render") + } } func loadTemplateEmbedded(sourceFS fs.FS, path string) (*template.Template, error) { content, err := fs.ReadFile(sourceFS, "template/"+path) diff --git a/html/filesystem.go b/html/filesystem.go index bb186ded..fc45dbd0 100644 --- a/html/filesystem.go +++ b/html/filesystem.go @@ -55,7 +55,10 @@ func (ts templateSystemDisk) renderOrError(w http.ResponseWriter, template_name RespondError(w, "Failed to render template", err, http.StatusInternalServerError) return } - buf.WriteTo(w) + _, err = buf.WriteTo(w) + if err != nil { + log.Error().Err(err).Msg("failed to write buffer") + } } /* diff --git a/label-studio/client.go b/label-studio/client.go index c8513e0b..a4b13660 100644 --- a/label-studio/client.go +++ b/label-studio/client.go @@ -7,6 +7,8 @@ import ( "io" "net/http" "time" + + "github.com/rs/zerolog/log" ) // Client represents a Label Studio API client @@ -58,7 +60,12 @@ func (c *Client) GetAccessToken() error { if err != nil { return fmt.Errorf("failed to send request: %w", err) } - defer resp.Body.Close() + defer func() { + err := resp.Body.Close() + if err != nil { + log.Error().Err(err).Msg("failed to close body") + } + }() // Check for successful response if resp.StatusCode != http.StatusOK { @@ -110,7 +117,12 @@ func (c *Client) makeRequest(method string, path string, payload []byte) (*http. // Check for successful response if resp.StatusCode > http.StatusBadRequest { - defer resp.Body.Close() + defer func() { + err := resp.Body.Close() + if err != nil { + log.Error().Err(err).Msg("Failed to close body") + } + }() bodyBytes, err := io.ReadAll(resp.Body) if err != nil { return nil, fmt.Errorf("Got status code %d and failed to read response body: %v", resp.StatusCode, err) diff --git a/label-studio/import_tasks.go b/label-studio/import_tasks.go index 3e2b6bae..64eaa618 100644 --- a/label-studio/import_tasks.go +++ b/label-studio/import_tasks.go @@ -4,6 +4,8 @@ import ( "encoding/json" "fmt" "net/http" + + "github.com/rs/zerolog/log" ) // TaskImportResponse represents the response from the import tasks endpoint @@ -62,7 +64,12 @@ func (c *Client) ImportTasks(projectID int, tasks interface{}) (*TaskImportRespo if err != nil { return nil, fmt.Errorf("Failed to POST %s: %v", path, err) } - defer resp.Body.Close() + defer func() { + err := resp.Body.Close() + if err != nil { + log.Error().Err(err).Msg("Failed to close body") + } + }() // Check for successful response if resp.StatusCode != http.StatusCreated && resp.StatusCode != http.StatusOK { diff --git a/middleware/recoverer.go b/middleware/recoverer.go index 0e75b55c..ae2c2f02 100644 --- a/middleware/recoverer.go +++ b/middleware/recoverer.go @@ -56,10 +56,16 @@ func PrintPrettyStack(rvr interface{}) { s := prettyStack{} out, err := s.parse(debugStack, rvr) if err == nil { - recovererErrorWriter.Write(out) + _, err = recovererErrorWriter.Write(out) + if err != nil { + os.Exit(101) + } } else { // print stdlib output as a fallback - os.Stderr.Write(debugStack) + _, err = os.Stderr.Write(debugStack) + if err != nil { + os.Exit(102) + } } }