Received: from mail.netlandish.com (mail.netlandish.com [174.136.98.166]) by code.netlandish.com (Postfix) with ESMTP id CCDA8111F for <~netlandish/links-dev@lists.code.netlandish.com>; Fri, 29 Aug 2025 14:23:49 +0000 (UTC) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=209.85.221.172; helo=mail-vk1-f172.google.com; envelope-from=peter@netlandish.com; receiver= Authentication-Results: mail.netlandish.com; dkim=pass (1024-bit key; unprotected) header.d=netlandish.com header.i=@netlandish.com header.b=Lf0z1bpN Received: from mail-vk1-f172.google.com (mail-vk1-f172.google.com [209.85.221.172]) by mail.netlandish.com (Postfix) with ESMTP id 25B171D642C for <~netlandish/links-dev@lists.code.netlandish.com>; Fri, 29 Aug 2025 14:24:47 +0000 (UTC) Received: by mail-vk1-f172.google.com with SMTP id 71dfb90a1353d-5449a71ff1fso72442e0c.1 for <~netlandish/links-dev@lists.code.netlandish.com>; Fri, 29 Aug 2025 07:24:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netlandish.com; s=google; t=1756477486; x=1757082286; darn=lists.code.netlandish.com; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=KYeJKfZ+EmNBbLkfsRYPz1GvnAE59DGcIqp0GQ4bmnk=; b=Lf0z1bpN/ALHFPLhXR3v2yGexuqzeFmAGWRF0lvDsaFUWj5xKEy7IHIYslopa8MEks N8p+4Ifgmn+9KHQeiOcr5JDjitj4i/9SVsP0/BhcsmZglq2sHJQq+XuGv/0g4bcc60D5 dbxtLRjdHbpOEhufP4qbBiz82hy8DSVbcXj1c= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756477486; x=1757082286; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=KYeJKfZ+EmNBbLkfsRYPz1GvnAE59DGcIqp0GQ4bmnk=; b=GS3m24UEdhNoDiGintpPcz0D6ar55/jvYdJWZMe3XtRiPjk4Xnbk2eG6Eb8BGu8lvA qdoI72+N2u3+A3bvmOpsSz5RwNJW4vJQpE7ZDvafn9+vjugjbyo5q5cttuHZpAzcRC41 ryx84hN5GKUR7nnDlD1n9zJurMbDzwne9apylI4PB+8zE0d3IdIUYADlifuWtabFW7sJ G9yCZmmAkCku5692MIPquiIB1HaYcotpoz7SX7rmWowG5JqZ1ioX/9knG37uHo54xgGL BbVVJIDeY6bSnda3Xmu3nrq8LAIRpJJ3GphzFdf1ojKEjuNc/sQAOSlIBnm+I5C06ZB/ 8q6w== X-Gm-Message-State: AOJu0YzCw+ItQRiEohGIf8GkB9qUqq5tbnMxq+vMMghVxTkvwgIvFqMQ IY2UYxROpd288wxLGcxmE7yGq5N6JlMM2rsQKRVEc9wFPGaDIUxO4o32ykP9eQT2/j4KNedsk1G u8dNvem0= X-Gm-Gg: ASbGncuKYCg/TFEDuB08lSRDbzAWPmq/8nJXnsd1zi0+L621XRWNW37JRZPlFyO0klu OI0ZHONY11oOnEHg+wGbf04vnyQwvhA6q3tZTWXB9HJ5ZffuHwElRDELXCiKvz8YTqrUETPUBeF z3ea4oP8PJyTfj4WJ5DKaUHu0ubJAgtG8O7Bs+tWwJzVCXxVg6ccZ3Q+cuWWzVALnnDG5xvmVwr YvtFNBKtr2EVNcY7/Uo0F09GuAGoq4wjk4di2Qo+oXOSNMT57CZTfYSrT/fXgRBYa5pvUTy3eiu jz/5QQmvYQqQlrNR53k+PQQmIzHn3U3OqfQtBIvoirh0yODztN05j26J2gd+9rIjc5kBwQzpU/e oQokXhYesI9WVeb2Jb9JTz/ReZ/FJHQFT/hMS1NEqkA91 X-Google-Smtp-Source: AGHT+IG1x91ho1scc8QYQPQdXU9zxnoIU9En+0PB+gYOkEubzzQTFsfc+ibpU+mSRzhXj+F3gRS/BA== X-Received: by 2002:a05:6122:6583:b0:531:2413:ce62 with SMTP id 71dfb90a1353d-53c8a3b12c7mr8560728e0c.11.1756477486316; Fri, 29 Aug 2025 07:24:46 -0700 (PDT) Received: from localhost ([2803:2d60:1107:87f:7a73:f96b:ede1:b448]) by smtp.gmail.com with UTF8SMTPSA id 71dfb90a1353d-54491464aebsm970565e0c.14.2025.08.29.07.24.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 29 Aug 2025 07:24:45 -0700 (PDT) From: Peter Sanchez To: ~netlandish/links-dev@lists.code.netlandish.com Cc: Peter Sanchez Subject: [PATCH links] Adding DBI transaction rollback when a domain error occurs. This helps prevernt a hanging process due to transaction leak early in the request cycle. Date: Fri, 29 Aug 2025 08:24:42 -0600 Message-ID: <20250829142443.23497-1-peter@netlandish.com> X-Mailer: git-send-email 2.49.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Also gobwebs bump. --- domain/middleware.go | 17 +++++++++++++++++ go.mod | 12 ++++++------ go.sum | 12 ++++++++++++ 3 files changed, 35 insertions(+), 6 deletions(-) diff --git a/domain/middleware.go b/domain/middleware.go index efe2e84..e60e915 100644 --- a/domain/middleware.go +++ b/domain/middleware.go @@ -2,6 +2,7 @@ package domain import ( "context" + "database/sql" "errors" "fmt" "links/models" @@ -10,6 +11,7 @@ import ( "strings" "github.com/labstack/echo/v4" + "netlandish.com/x/gobwebs/database" "netlandish.com/x/gobwebs/server" ) @@ -62,6 +64,21 @@ func DomainContext(service string) echo.MiddlewareFunc { req := c.Request() domains, err := ValidDomain(req.Context(), req.Host, service, false) if err != nil { + // Log the error for debugging + gctx := c.(*server.Context) + gctx.Echo().Logger.Printf( + "domain.DomainContext: Error validating domain %s: %v\n", req.Host, err) + + // Clean up any active transaction before returning error + // This prevents transaction leaks when domain validation fails + if dbi := database.DBIForContext(req.Context()); dbi != nil { + if dbi.HasActiveTransaction() { + if rbErr := dbi.RollbackTx(); rbErr != nil && rbErr != sql.ErrTxDone { + gctx.Echo().Logger.Printf( + "domain.DomainContext: Failed to rollback transaction after validation error: %v", rbErr) + } + } + } return err } if len(domains) != 1 { diff --git a/go.mod b/go.mod index 92eaa23..f1f6fb8 100644 --- a/go.mod +++ b/go.mod @@ -30,12 +30,12 @@ require ( golang.org/x/text v0.27.0 golang.org/x/time v0.8.0 hg.code.netlandish.com/~netlandish/sendygo v0.0.0-20230124192435-bbf347776232 - netlandish.com/x/gobwebs v0.1.6 - netlandish.com/x/gobwebs-auditlog v0.2.3 - netlandish.com/x/gobwebs-formguard v0.2.4 - netlandish.com/x/gobwebs-graphql v0.2.4 - netlandish.com/x/gobwebs-oauth2 v0.2.3 - netlandish.com/x/gobwebs-ses-feedback v0.2.4 + netlandish.com/x/gobwebs v0.1.7 + netlandish.com/x/gobwebs-auditlog v0.2.4 + netlandish.com/x/gobwebs-formguard v0.2.5 + netlandish.com/x/gobwebs-graphql v0.2.5 + netlandish.com/x/gobwebs-oauth2 v0.2.4 + netlandish.com/x/gobwebs-ses-feedback v0.2.5 petersanchez.com/x/carrier v0.2.3 petersanchez.com/x/carrier/ses v0.0.0-20250114214955-7f5d9b835a85 petersanchez.com/x/carrier/smtp v0.0.0-20250114214955-7f5d9b835a85 diff --git a/go.sum b/go.sum index ddd92c0..d16509f 100644 --- a/go.sum +++ b/go.sum @@ -2580,16 +2580,28 @@ modernc.org/z v1.2.20/go.mod h1:zU9FiF4PbHdOTUxw+IF8j7ArBMRPsHgq10uVPt6xTzo= modernc.org/zappy v1.0.0/go.mod h1:hHe+oGahLVII/aTTyWK/b53VDHMAGCBYYeZ9sn83HC4= netlandish.com/x/gobwebs v0.1.6 h1:/fXVU2hoS6FyIk/Refl1FqxCGJxjcCvCybnrxr2JYlI= netlandish.com/x/gobwebs v0.1.6/go.mod h1:RAf0VNiujzXen/pu0k6yyhvPWMgCY9tKD7ftXrkT53E= +netlandish.com/x/gobwebs v0.1.7 h1:YPqieX9F8lQpjBRq9mrhG4ZKA6SoWMZ0Inz2xu5ZSOM= +netlandish.com/x/gobwebs v0.1.7/go.mod h1:RAf0VNiujzXen/pu0k6yyhvPWMgCY9tKD7ftXrkT53E= netlandish.com/x/gobwebs-auditlog v0.2.3 h1:U9Kcbacy+6gUbm2wwXUKg4q7RpbRwHgaLXebQWiYlXk= netlandish.com/x/gobwebs-auditlog v0.2.3/go.mod h1:E5K6BDkD6BTgwGDz2GWOE/h/PfKuyswLDnhU1gDWNPQ= +netlandish.com/x/gobwebs-auditlog v0.2.4 h1:IloSnIc8yGKeEwX5ylKx0I3VoLoa9Bezf98XUnLFIN0= +netlandish.com/x/gobwebs-auditlog v0.2.4/go.mod h1:l1EJbQ79+vWc6l6yFnzRjE4NSRjGTAiwLPxUPQqzy/w= netlandish.com/x/gobwebs-formguard v0.2.4 h1:YkLudnPrwr9k/giURyohnjlfbuC+Ws8hnrrU+MY8vUc= netlandish.com/x/gobwebs-formguard v0.2.4/go.mod h1:0UZ/lWNAqHCwDYotp2WlX0XgfsF8PfV8XBr29kSJmP8= +netlandish.com/x/gobwebs-formguard v0.2.5 h1:+Fa5T2qeP2ldv+sIXCVqsLFzp8NXQyI8ZvxVD5TsOA4= +netlandish.com/x/gobwebs-formguard v0.2.5/go.mod h1:Qv+qymuUOCgKzhNmk31DOxT4PLu5bEwXFe2tMEBaljA= netlandish.com/x/gobwebs-graphql v0.2.4 h1:BWuWiTkTVJNdBITV36r42w7Uh+6HGgZvxOj3+XICsF4= netlandish.com/x/gobwebs-graphql v0.2.4/go.mod h1:vegE1Sb69L19qk/Urx7HWFhJ3FCjZZ5e0n5PlXDE1Qc= +netlandish.com/x/gobwebs-graphql v0.2.5 h1:h1tr7PP+PbKABD+gP58ldi6GMPRLjAzp6sjXpcozEKg= +netlandish.com/x/gobwebs-graphql v0.2.5/go.mod h1:nNGgCWC098JgaASCsvzZLl1rePzXgGcUtBEB+eJThhg= netlandish.com/x/gobwebs-oauth2 v0.2.3 h1:gtxVwa/TFquvPm7sL9CYPN6qF9dayovK09bhv8s/bkE= netlandish.com/x/gobwebs-oauth2 v0.2.3/go.mod h1:OXmkl1iL3MMy4CzdtAc9oOQbX/2kbR8/2t2GCahHBho= +netlandish.com/x/gobwebs-oauth2 v0.2.4 h1:B5V5HNCeRU3TNXK0/59Vnc5Dn7nOA54snxXDnBjn+0g= +netlandish.com/x/gobwebs-oauth2 v0.2.4/go.mod h1:LqCD8OZJkFr8rcDaNYeX8L6tsv/joAQ1k1iriCUlf+E= netlandish.com/x/gobwebs-ses-feedback v0.2.4 h1:0jSGszEAKxKOJrhiO/vQuuY6lQv7fcsP4s6Iw5EcOJk= netlandish.com/x/gobwebs-ses-feedback v0.2.4/go.mod h1:s7BCQ4lYPLdvzDuDvZmQn+7IHKsHNIkecs4jcjoZ0ZM= +netlandish.com/x/gobwebs-ses-feedback v0.2.5 h1:o/9aP9CkijohA61834S2AFPk8mN07SkytLvoSAybOeY= +netlandish.com/x/gobwebs-ses-feedback v0.2.5/go.mod h1:Nj7NSW936hRXq2QL1wa95C+g03GLhBIV5MN2K7zorGk= petersanchez.com/x/carrier v0.2.3 h1:6ScWG2HVFqeqafQp2D9kChNdXYkou4rduzppc3SDYMg= petersanchez.com/x/carrier v0.2.3/go.mod h1:GLiDI9OThDmruufk/VHlR6Ihvq/hIJQyA5beU6AFNYk= petersanchez.com/x/carrier/ses v0.0.0-20250114214955-7f5d9b835a85 h1:yy81/rrGdI+YWuTvv7JPvVnY104/g10vnloBnKxVAHk= -- 2.49.1