Received: from mail.netlandish.com (mail.netlandish.com [174.136.98.166])
	by code.netlandish.com (Postfix) with ESMTP id 50211BF
	for <~netlandish/links-dev@lists.code.netlandish.com>; Sat, 19 Sep 2026 01:10:40 +0000 (UTC)
Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=74.125.224.141; helo=mail-yx2-f13.google.com; envelope-from=peter@netlandish.com; receiver=<UNKNOWN> 
Authentication-Results: mail.netlandish.com;
	dkim=pass (1024-bit key; unprotected) header.d=netlandish.com header.i=@netlandish.com header.b=rQOHZx0J
Received: from mail-yx2-f13.google.com (mail-yx2-f13.google.com [74.125.224.141])
	by mail.netlandish.com (Postfix) with ESMTP id CA0451D8185
	for <~netlandish/links-dev@lists.code.netlandish.com>; Sat, 19 Sep 2026 01:11:21 +0000 (UTC)
Received: by mail-yx2-f13.google.com with SMTP id 00721157ae682-85d43ac6072so13335947b3.0
        for <~netlandish/links-dev@lists.code.netlandish.com>; Fri, 18 Sep 2026 18:11:21 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=netlandish.com; s=google; t=1789780281; x=1790385081; 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:content-type;
        bh=WzeL2vF3sZorq4pNvOjNOkvCxAp+yGOyjTyb+qj+rcQ=;
        b=rQOHZx0J/6pww/hhO4MSvN7Jtd5Gt6R1Jkr2dc7CybOpXrjb0AMNjzAjh9eKnD98mE
         gts+vgtFLaDYEBqMTGklHpyw2HSENvT8v14zfiOAFusT64XqNqbPaUfiR//6v0y808K+
         AzsflqXISSG0XeDZGgtVNHt2YFjw0zPtgoYHg=
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20260707; t=1789780281; x=1790385081;
        h=content-transfer-encoding:mime-version:message-id:date:subject:cc
         :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date
         :message-id:reply-to:content-type;
        bh=WzeL2vF3sZorq4pNvOjNOkvCxAp+yGOyjTyb+qj+rcQ=;
        b=pev9GvoF0ZeOJT5JHIx0Py3AQUmfyYrbRe8XN9IgBxLKsDHBpNDMigVN8FvPNJr1pG
         emaKkdczk3p7EBWAtiss6Co7MOkDSjaK4kfZNR+kypBZd4DeARXZuxTnZw9G/r+93BG9
         9Lcn3x/5DH/en23ouPLXz15a05ORrmOyR9jG0fAWo+qeiNchbIgottYgZgG7dXNhrVdZ
         lkr0qBkXBRtABtiCmdr0d4R21u0QcaAElhUBmsBIFS2ok7k3uczEcyLy/LVmYjk9lF7k
         s1H2u93I7JTZSaZ5440tj3MI4pzuBsZGZe7VAROUA1CUedd8kozCRVZTny35+PO2J0Vq
         9+Lg==
X-Gm-Message-State: AFuF++nKtPlOsRQVgk/JKX1kz+y47kyD9vOZ3UCt9G2K3BqC+w98umFf
	4CNAPJvaNIYW7AnKXknukLM3AUX+7gSUYIv7cbC7FFBTDXR8l+r3Cs4HEmTAkO+72/W4EYTrQkD
	hNwZjKJk=
X-Gm-Gg: AYBFou2zeSJaKM8z7xaPDHdsetNF3Uu8VSSOqaMYA1OD0AeeKJpzZZm+GLaYiF1MKBv
	1/T68RfBOSOYP3nBxbVBwNh3bvvi0UWgm5jXNeyxV8YqGKCZw/UqIY0Ii1i1EJ62lWgj3PZUNgH
	LjJrYK4rqJTPYtDo20mcHFtz/UrQFEP1rW5zl93hQz/V25uU7zfTILdgTJELyk/uNI6VDPgNViM
	+PWQSvozAiNeQ50qVd5uIaEhN04bF05hSSEAtxvaindj6bP8bupJ47xTc1soAiqXoC8B8si4am0
	ohgK48KBXfDQmTjlDL9sMs3bYrfyLu2ynLiftcMQEdFIJD4MC/LMNL0dM/oQ6oTziA4pfYAlTSQ
	tykhYqbOCdQHtYYE4zzYF+A7z0qBTYzTa5jQobV7w+/5wbFv52MCAq1OoCILVKAcGWNpGIvliUn
	0Sha40ecD2xDHFfgM5ZvCKFK/uCyUK19iRn65Zq03oCMSx5dEaxnf3KgnNt+hPQA7KJEs9
X-Received: by 2002:a05:690c:6e86:b0:897:73ed:dd25 with SMTP id 00721157ae682-89773eddf59mr13616777b3.27.1789780280387;
        Fri, 18 Sep 2026 18:11:20 -0700 (PDT)
Received: from localhost ([186.77.198.56])
        by smtp.gmail.com with ESMTPSA id 00721157ae682-89a45d8fb9asm5320507b3.17.2026.09.18.18.11.19
        (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
        Fri, 18 Sep 2026 18:11:19 -0700 (PDT)
From: Peter Sanchez <peter@netlandish.com>
To: ~netlandish/links-dev@lists.code.netlandish.com
Cc: Peter Sanchez <peter@netlandish.com>
Subject: [PATCH links] gobwebs bump
Date: Fri, 18 Sep 2026 19:11:14 -0600
Message-ID: <20260919011117.19575-1-peter@netlandish.com>
X-Mailer: git-send-email 2.54.0
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

---
 billing/routes.go    |  3 +-
 go.mod               | 42 ++++++++++++------------
 go.sum               | 76 ++++++++++++++++++++++----------------------
 mattermost/routes.go | 48 ++++++++++++++--------------
 4 files changed, 84 insertions(+), 85 deletions(-)

diff --git a/billing/routes.go b/billing/routes.go
index 524ce9e..527a6bb 100644
--- a/billing/routes.go
+++ b/billing/routes.go
@@ -1,6 +1,7 @@
 package billing
 
 import (
+	"errors"
 	"fmt"
 	"io"
 	"links"
@@ -484,7 +485,7 @@ func (s *Service) CreateSubscription(c echo.Context) error {
 		if plan == nil {
 			// Invalid method id given
 			err = validate.GetInputErrors(
-				[]error{fmt.Errorf(lt.Translate("Invalid subscription plan ID given"))},
+				[]error{errors.New(lt.Translate("Invalid subscription plan ID given"))},
 			)
 			gmap["errors"] = err
 			return s.Render(c, http.StatusOK, "billing_create_subscription.html", gmap)
diff --git a/go.mod b/go.mod
index 3b4fd36..a9cbc9e 100644
--- a/go.mod
+++ b/go.mod
@@ -1,8 +1,6 @@
 module links
 
-go 1.23.0
-
-toolchain go1.24.4
+go 1.25.0
 
 require (
 	git.sr.ht/~emersion/gqlclient v0.0.0-20230820050442-8873fe0204b9
@@ -13,7 +11,7 @@ require (
 	github.com/alexedwards/scs/v2 v2.8.0
 	github.com/emersion/go-message v0.18.2
 	github.com/jarcoal/httpmock v1.3.0
-	github.com/labstack/echo/v4 v4.13.3
+	github.com/labstack/echo/v4 v4.15.4
 	github.com/lib/pq v1.10.9
 	github.com/mattermost/mattermost-plugin-apps v1.1.0
 	github.com/mattermost/mattermost-server/v6 v6.6.0
@@ -21,24 +19,24 @@ require (
 	github.com/oschwald/geoip2-golang v1.9.0
 	github.com/segmentio/ksuid v1.0.4
 	github.com/shopspring/decimal v1.2.0
-	github.com/stretchr/testify v1.10.0
+	github.com/stretchr/testify v1.11.1
 	github.com/stripe/stripe-go/v76 v76.6.0
 	github.com/vektah/dataloaden v0.3.0
 	github.com/vektah/gqlparser/v2 v2.5.30
 	github.com/yeqown/go-qrcode/v2 v2.2.2
 	github.com/yeqown/go-qrcode/writer/standard v1.2.1
-	golang.org/x/crypto v0.40.0
+	golang.org/x/crypto v0.53.0
 	golang.org/x/image v0.0.0-20211028202545-6944b10bf410
-	golang.org/x/net v0.42.0
-	golang.org/x/text v0.27.0
-	golang.org/x/time v0.8.0
+	golang.org/x/net v0.56.0
+	golang.org/x/text v0.38.0
+	golang.org/x/time v0.15.0
 	hg.code.netlandish.com/~netlandish/sendygo v0.0.0-20230124192435-bbf347776232
-	netlandish.com/x/gobwebs v0.1.17
-	netlandish.com/x/gobwebs-auditlog v0.3.4
-	netlandish.com/x/gobwebs-formguard v0.3.2
-	netlandish.com/x/gobwebs-graphql v0.3.2
-	netlandish.com/x/gobwebs-oauth2 v0.2.15
-	netlandish.com/x/gobwebs-ses-feedback v0.2.15
+	netlandish.com/x/gobwebs v0.1.18
+	netlandish.com/x/gobwebs-auditlog v0.3.5
+	netlandish.com/x/gobwebs-formguard v0.3.3
+	netlandish.com/x/gobwebs-graphql v0.3.3
+	netlandish.com/x/gobwebs-oauth2 v0.2.16
+	netlandish.com/x/gobwebs-ses-feedback v0.2.16
 	petersanchez.com/x/carrier v0.2.6
 	petersanchez.com/x/carrier/ses v0.0.0-20260908210515-f3c6132b8e61
 	petersanchez.com/x/carrier/smtp v0.0.0-20260908210515-f3c6132b8e61
@@ -109,7 +107,7 @@ require (
 	github.com/json-iterator/go v1.1.12 // indirect
 	github.com/klauspost/compress v1.15.0 // indirect
 	github.com/klauspost/cpuid/v2 v2.0.11 // indirect
-	github.com/labstack/gommon v0.4.2 // indirect
+	github.com/labstack/gommon v0.5.0 // indirect
 	github.com/lann/builder v0.0.0-20180802200727-47ae307949d0 // indirect
 	github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 // indirect
 	github.com/leodido/go-urn v1.4.0 // indirect
@@ -117,8 +115,8 @@ require (
 	github.com/mattermost/ldap v0.0.0-20201202150706-ee0e6284187d // indirect
 	github.com/mattermost/logr/v2 v2.0.15 // indirect
 	github.com/mattermost/mattermost-plugin-api v0.0.22-0.20211210183909-beb4761e4bd3 // indirect
-	github.com/mattn/go-colorable v0.1.14 // indirect
-	github.com/mattn/go-isatty v0.0.20 // indirect
+	github.com/mattn/go-colorable v0.1.15 // indirect
+	github.com/mattn/go-isatty v0.0.22 // indirect
 	github.com/matttproud/golang_protobuf_extensions v1.0.2 // indirect
 	github.com/minio/md5-simd v1.1.2 // indirect
 	github.com/minio/minio-go/v7 v7.0.23 // indirect
@@ -159,11 +157,11 @@ require (
 	go.uber.org/multierr v1.7.0 // indirect
 	go.uber.org/zap v1.17.0 // indirect
 	golang.org/x/exp v0.0.0-20240112132812-db7319d0e0e3 // indirect
-	golang.org/x/mod v0.26.0 // indirect
+	golang.org/x/mod v0.36.0 // indirect
 	golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b // indirect
-	golang.org/x/sync v0.16.0 // indirect
-	golang.org/x/sys v0.34.0 // indirect
-	golang.org/x/tools v0.35.0 // indirect
+	golang.org/x/sync v0.21.0 // indirect
+	golang.org/x/sys v0.46.0 // indirect
+	golang.org/x/tools v0.45.0 // indirect
 	golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
 	google.golang.org/api v0.62.0 // indirect
 	google.golang.org/appengine v1.6.7 // indirect
diff --git a/go.sum b/go.sum
index 97447e0..a69bcc7 100644
--- a/go.sum
+++ b/go.sum
@@ -1033,11 +1033,11 @@ github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
 github.com/ktrysmt/go-bitbucket v0.6.4/go.mod h1:9u0v3hsd2rqCHRIpbir1oP7F58uo5dq19sBYvuMoyQ4=
 github.com/labstack/echo/v4 v4.1.11/go.mod h1:i541M3Fj6f76NZtHSj7TXnyM8n2gaodfvfxNnFqi74g=
 github.com/labstack/echo/v4 v4.5.0/go.mod h1:czIriw4a0C1dFun+ObrXp7ok03xON0N1awStJ6ArI7Y=
-github.com/labstack/echo/v4 v4.13.3 h1:pwhpCPrTl5qry5HRdM5FwdXnhXSLSY+WE+YQSeCaafY=
-github.com/labstack/echo/v4 v4.13.3/go.mod h1:o90YNEeQWjDozo584l7AwhJMHN0bOC4tAfg+Xox9q5g=
+github.com/labstack/echo/v4 v4.15.4 h1:DL45vVYa+BWE+XuW+zZNd9H0YEdZ80UAWJGcTVW4EVs=
+github.com/labstack/echo/v4 v4.15.4/go.mod h1:CuMetKIRwsuO/qlAgMq+KTAalwGoB/h4tC+yPdrTj1g=
 github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k=
-github.com/labstack/gommon v0.4.2 h1:F8qTUNXgG1+6WQmqoUWnz8WiEU60mXVVw0P4ht1WRA0=
-github.com/labstack/gommon v0.4.2/go.mod h1:QlUFxVM+SNXhDL/Z7YhocGIBYOiwB0mXm1+1bAPHPyU=
+github.com/labstack/gommon v0.5.0 h1:6VSQ2NOzsnEJ5W6+84E0RbcaDDmgB6NIAzWCczTEe6c=
+github.com/labstack/gommon v0.5.0/go.mod h1:Rzlg7HHy1maLfzBYGg9NZcVuz1sA68HHhLjhcEllYE0=
 github.com/lann/builder v0.0.0-20180802200727-47ae307949d0 h1:SOEGU9fKiNWd/HOJuq6+3iTQz8KNCLtVX6idSoTLdUw=
 github.com/lann/builder v0.0.0-20180802200727-47ae307949d0/go.mod h1:dXGbAdH5GtBTC4WfIxhKZfyBF/HBFgRZSWwZ9g/He9o=
 github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 h1:P6pPBnrTSX3DEVR4fDembhRWSsG5rVo6hYhAB/ADZrk=
@@ -1098,8 +1098,8 @@ github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope
 github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
 github.com/mattn/go-colorable v0.1.11/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4=
 github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4=
-github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE=
-github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8=
+github.com/mattn/go-colorable v0.1.15 h1:+u9SLTRGnXv73cEsnsmoZBom+dMU88B2M0aDcWy0/jY=
+github.com/mattn/go-colorable v0.1.15/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8=
 github.com/mattn/go-ieproxy v0.0.1/go.mod h1:pYabZ6IHcRpFh7vIaLfK7rdcWgFEb3SFJ6/gNWuh88E=
 github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
 github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
@@ -1111,8 +1111,8 @@ github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcME
 github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE=
 github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
 github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
-github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
-github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
+github.com/mattn/go-isatty v0.0.22 h1:j8l17JJ9i6VGPUFUYoTUKPSgKe/83EYU2zBC7YNKMw4=
+github.com/mattn/go-isatty v0.0.22/go.mod h1:ZXfXG4SQHsB/w3ZeOYbR0PrPwLy+n6xiMrJlRFqopa4=
 github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
 github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
 github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
@@ -1517,8 +1517,8 @@ github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81P
 github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
 github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
 github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
-github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
+github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
+github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
 github.com/stripe/stripe-go/v76 v76.6.0 h1:jG5VTzxZdwF1PFP2FAH6ThMFQRWJ/EVjY+17/Z8nCNQ=
 github.com/stripe/stripe-go/v76 v76.6.0/go.mod h1:rw1MxjlAKKcZ+3FOXgTHgwiOa2ya6CPq6ykpJ0Q6Po4=
 github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
@@ -1709,8 +1709,8 @@ golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2Uz
 golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU=
 golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4=
 golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4=
-golang.org/x/crypto v0.40.0 h1:r4x+VvoG5Fm+eJcxMaY8CQM7Lb0l1lsmjGBQ6s8BfKM=
-golang.org/x/crypto v0.40.0/go.mod h1:Qr1vMER5WyS2dfPHAlsOj01wgLbsyWtFn/aY+5+ZdxY=
+golang.org/x/crypto v0.53.0 h1:QZ4Muo8THX6CizN2vPPd5fBGHyogrdK9fG4wLPFUsto=
+golang.org/x/crypto v0.53.0/go.mod h1:DNLU434OwVakk9PzuwV8w62mAJpRJL3vsgcfp4Qnsio=
 golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
@@ -1769,8 +1769,8 @@ golang.org/x/mod v0.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro=
 golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro=
 golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
 golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
-golang.org/x/mod v0.26.0 h1:EGMPT//Ezu+ylkCijjPc+f4Aih7sZvaAr+O3EHBxvZg=
-golang.org/x/mod v0.26.0/go.mod h1:/j6NAhSk8iQ723BGAUyoAcn7SlD7s15Dp9Nd/SfeaFQ=
+golang.org/x/mod v0.36.0 h1:JJjpVx6myfUsUdAzZuOSTTmRE0PfZeNWzzvKrP7amb4=
+golang.org/x/mod v0.36.0/go.mod h1:moc6ELqsWcOw5Ef3xVprK5ul/MvtVvkIXLziUOICjUQ=
 golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180530234432-1e491301e022/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -1855,8 +1855,8 @@ golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY=
 golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
 golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
 golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
-golang.org/x/net v0.42.0 h1:jzkYrhi3YQWD6MLBJcsklgQsoAcw89EcZbJw8Z614hs=
-golang.org/x/net v0.42.0/go.mod h1:FF1RA5d3u7nAYA4z2TkclSCKh68eSXtiFwcWQpPXdt8=
+golang.org/x/net v0.56.0 h1:Rw8j/hFzGvJUZwNBXnAtf5sVDVt+65SK2C7IxCxZt5o=
+golang.org/x/net v0.56.0/go.mod h1:D3Ku6r+V6JROoZK144D2XfMHFcMq/0zSfLelVTCFKec=
 golang.org/x/oauth2 v0.0.0-20180227000427-d7d64896b5ff/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
@@ -1896,8 +1896,8 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJ
 golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw=
-golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
+golang.org/x/sync v0.21.0 h1:HLII4xRRTtCRkxYp4HNFF0Js/Og6q2i++KXbg0gHCwM=
+golang.org/x/sync v0.21.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0=
 golang.org/x/sys v0.0.0-20180224232135-f6cff0780e54/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -2035,8 +2035,8 @@ golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
-golang.org/x/sys v0.34.0 h1:H5Y5sJ2L2JRdyv7ROF1he/lPdvFsd0mJHFw2ThKHxLA=
-golang.org/x/sys v0.34.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
+golang.org/x/sys v0.46.0 h1:noSf2Fq6F8DBgS+LysIkx7rIExoNHJsxOAtPp4rthXw=
+golang.org/x/sys v0.46.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
 golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
 golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
@@ -2062,16 +2062,16 @@ golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
 golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
 golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
 golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
-golang.org/x/text v0.27.0 h1:4fGWRpyh641NLlecmyl4LOe6yDdfaYNrGb2zdfo4JV4=
-golang.org/x/text v0.27.0/go.mod h1:1D28KMCvyooCX9hBiosv5Tz/+YLxj0j7XhWjpSUF7CU=
+golang.org/x/text v0.38.0 h1:sXmwo9DwP3OK9EZ7PqAdaooSGozfl/3a6/xJcbzPRhE=
+golang.org/x/text v0.38.0/go.mod h1:YXZt3QhHUKYT53r2lLKFIVi6Ao1jdzrTR/KQ09qyxF4=
 golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
-golang.org/x/time v0.8.0 h1:9i3RxcPv3PZnitoVGMPDKZSq1xW1gK1Xy3ArNOGZfEg=
-golang.org/x/time v0.8.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
+golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U=
+golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno=
 golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@@ -2157,8 +2157,8 @@ golang.org/x/tools v0.1.7/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo=
 golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU=
 golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
 golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
-golang.org/x/tools v0.35.0 h1:mBffYraMEf7aa0sB+NuKnuCy8qI/9Bughn8dC2Gu5r0=
-golang.org/x/tools v0.35.0/go.mod h1:NKdj5HkL/73byiZSJjqJgKn3ep7KjFkBOkR/Hps3VPw=
+golang.org/x/tools v0.45.0 h1:18qN3FAooORvApf5XjCXgsuayZOEtXf6JK18I3+ONa8=
+golang.org/x/tools v0.45.0/go.mod h1:LuUGqqaXcXMEFEruIVJVm5mgDD8vww/z/SR1gQ4uE/0=
 golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@@ -2582,18 +2582,18 @@ modernc.org/z v1.0.1-0.20210308123920-1f282aa71362/go.mod h1:8/SRk5C/HgiQWCgXdfp
 modernc.org/z v1.0.1/go.mod h1:8/SRk5C/HgiQWCgXdfpb+1RvhORdkz5sw72d3jjtyqA=
 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.17 h1:NHTkicwy3CjlTgSdcgFMNHFpWtpgYwZ08pitL9y71S0=
-netlandish.com/x/gobwebs v0.1.17/go.mod h1:2jf9Zn0yiggw+lXtk+aP5PlXa19fExCOvAsxaJPhmv0=
-netlandish.com/x/gobwebs-auditlog v0.3.4 h1:1KltddWOgy34cHOGpdoCF8LBjsNN447kXs9rkjNtlQs=
-netlandish.com/x/gobwebs-auditlog v0.3.4/go.mod h1:ZHlBBkBGw5OyoHwQp3qiKDbs8EUhRIIdkIc8Nb2do/w=
-netlandish.com/x/gobwebs-formguard v0.3.2 h1:giooK4x7lo+4f8DnlWntS6UmAcvpCzeJO6fkTcVEO7U=
-netlandish.com/x/gobwebs-formguard v0.3.2/go.mod h1:0flzVl44Q6grobYq2eeEfTl7wtrNzoaOT9lkZQcyFGo=
-netlandish.com/x/gobwebs-graphql v0.3.2 h1:/PbHVB8UBSJ7Iv0aoCDatGGBTeflMxW3e5QSptDBchc=
-netlandish.com/x/gobwebs-graphql v0.3.2/go.mod h1:uqmWwIT7MFd9SPkmtNvr8OTSRFH2LLVHRwuq1FL9SA8=
-netlandish.com/x/gobwebs-oauth2 v0.2.15 h1:Ch/5WcEn3iGo2Ml5uLVRMqUYXVL3PkuTTuijJCebWPQ=
-netlandish.com/x/gobwebs-oauth2 v0.2.15/go.mod h1:fJoaihXFmZf8WtMZdTuhoMzBSywrVINnlhjBqWmUY2s=
-netlandish.com/x/gobwebs-ses-feedback v0.2.15 h1:GSdLOd89J1xarfpuadbdAL02z6/BqEiNsvZpy0OmsPI=
-netlandish.com/x/gobwebs-ses-feedback v0.2.15/go.mod h1:f9EvJCa9Zcy0a7o+zuGQ/h8WdLCaURk0RiASLh7Paes=
+netlandish.com/x/gobwebs v0.1.18 h1:AaYSrWFqY50AP3keme0GLJ37nzBTEu1oF2Bb8ycawkI=
+netlandish.com/x/gobwebs v0.1.18/go.mod h1:XiRorH2heI1yiH4l5KewNVN+y2Zobsw9APQyE7NTN0E=
+netlandish.com/x/gobwebs-auditlog v0.3.5 h1:JDyAgLGSFuIUtXDDYJxURXNisibxSTnXQEROnj932To=
+netlandish.com/x/gobwebs-auditlog v0.3.5/go.mod h1:IuYnP6JGmKtrkQyQUTE1mVONTVnQLBzrZ51sg3mr/Dc=
+netlandish.com/x/gobwebs-formguard v0.3.3 h1:6WL6rslCH4oJErgi3ODMMY8oyridU3CCuDSnaDzz0sE=
+netlandish.com/x/gobwebs-formguard v0.3.3/go.mod h1:EYme0oo1QedzAt08GNBvmY536AlC8Fsjs502snSyYjM=
+netlandish.com/x/gobwebs-graphql v0.3.3 h1:zua2k8WrCSsO6HbMdU1/U2TJ191rZ60GsSEiVBiwds4=
+netlandish.com/x/gobwebs-graphql v0.3.3/go.mod h1:RKbenG3Mk6+R+gNDzuy0LYhpX8/renwwNgcOHZMhpIQ=
+netlandish.com/x/gobwebs-oauth2 v0.2.16 h1:uFppAu8Cj3KFzVvmApN11+2x8AvgHhbY8Z9o8oH8IPk=
+netlandish.com/x/gobwebs-oauth2 v0.2.16/go.mod h1:706kdWKWwzZqOmvUbTHRhj3nXydKcFu4igAPho+k+7Y=
+netlandish.com/x/gobwebs-ses-feedback v0.2.16 h1:pibN64bcjAmzvqv4WLuoT5g4RTE6pH/YzH3870/awcI=
+netlandish.com/x/gobwebs-ses-feedback v0.2.16/go.mod h1:tartk7kSsMTbprPR6MAUydUWKs8oW9ZixVWTeaOxvZc=
 petersanchez.com/x/carrier v0.2.6 h1:3siN90JCjMbAdXZ1wh/SakPwwHb4gXj4IghzOSLjJcE=
 petersanchez.com/x/carrier v0.2.6/go.mod h1:GLiDI9OThDmruufk/VHlR6Ihvq/hIJQyA5beU6AFNYk=
 petersanchez.com/x/carrier/ses v0.0.0-20260908210515-f3c6132b8e61 h1:ZX535miQ/79f2IjOqNMhIkJF3nrbvTRaGp7OO7RSuVs=
diff --git a/mattermost/routes.go b/mattermost/routes.go
index 19ebef1..583b18b 100644
--- a/mattermost/routes.go
+++ b/mattermost/routes.go
@@ -239,7 +239,7 @@ func (s *Service) SearchCommand(c echo.Context) error {
 	}
 	lt := localizer.GetSessionLocalizer(c)
 	if len(mmConns) == 0 {
-		return c.JSON(http.StatusOK, apps.NewTextResponse(lt.Translate("No slack connection found")))
+		return c.JSON(http.StatusOK, apps.NewTextResponse("%s", lt.Translate("No slack connection found")))
 	}
 	mmConn := mmConns[0]
 
@@ -268,7 +268,7 @@ func (s *Service) SearchCommand(c echo.Context) error {
 		if err != nil {
 			return err
 		}
-		return c.JSON(http.StatusOK, apps.NewTextResponse(lt.Translate("We sent you a private msg")))
+		return c.JSON(http.StatusOK, apps.NewTextResponse("%s", lt.Translate("We sent you a private msg")))
 	}
 	opts = &database.FilterOptions{
 		Filter: sq.And{
@@ -287,7 +287,7 @@ func (s *Service) SearchCommand(c echo.Context) error {
 	org := orgs[0]
 	if links.BillingEnabled(gctx.Server.Config) && org.IsRestricted([]string{models.BillingStatusFree}) {
 		msg := lt.Translate("Sorry, free accounts do not support Mattermost Integration. Please upgrade to continue")
-		return c.JSON(http.StatusOK, apps.NewTextResponse(msg))
+		return c.JSON(http.StatusOK, apps.NewTextResponse("%s", msg))
 	}
 
 	user, err := models.GetUser(c.Request().Context(), org.OwnerID, true)
@@ -296,7 +296,7 @@ func (s *Service) SearchCommand(c echo.Context) error {
 	}
 	text, ok := creq.Values["text"].(string)
 	if !ok {
-		return c.JSON(http.StatusOK, apps.NewTextResponse(lt.Translate("The text to be searched is required")))
+		return c.JSON(http.StatusOK, apps.NewTextResponse("%s", lt.Translate("The text to be searched is required")))
 	}
 	ctx := c.Request().Context()
 	ctx = auth.Context(ctx, user)
@@ -347,7 +347,7 @@ func (s *Service) SearchCommand(c echo.Context) error {
 	err = links.Execute(ctx, op, &result)
 	if err != nil {
 		if graphError, ok := err.(*gqlclient.Error); ok {
-			return c.JSON(http.StatusOK, apps.NewTextResponse(graphError.Message))
+			return c.JSON(http.StatusOK, apps.NewTextResponse("%s", graphError.Message))
 		}
 		return err
 	}
@@ -359,7 +359,7 @@ func (s *Service) SearchCommand(c echo.Context) error {
 	} else {
 		attachmentLinks = lt.Translate("No links were found for %s", text)
 	}
-	return c.JSON(http.StatusOK, apps.NewTextResponse(attachmentLinks))
+	return c.JSON(http.StatusOK, apps.NewTextResponse("%s", attachmentLinks))
 
 }
 
@@ -378,7 +378,7 @@ func (s *Service) ShortCommand(c echo.Context) error {
 		return err
 	}
 	if len(mmConns) == 0 {
-		return c.JSON(http.StatusOK, apps.NewTextResponse(lt.Translate("No slack connection found")))
+		return c.JSON(http.StatusOK, apps.NewTextResponse("%s", lt.Translate("No slack connection found")))
 	}
 	mmConn := mmConns[0]
 
@@ -391,14 +391,14 @@ func (s *Service) ShortCommand(c echo.Context) error {
 		return err
 	}
 	if len(orgs) == 0 {
-		return c.JSON(http.StatusOK, apps.NewTextResponse(lt.Translate("No organization found")))
+		return c.JSON(http.StatusOK, apps.NewTextResponse("%s", lt.Translate("No organization found")))
 	}
 
 	gctx := c.(*server.Context)
 	org := orgs[0]
 	if links.BillingEnabled(gctx.Server.Config) && org.IsRestricted([]string{models.BillingStatusFree}) {
 		msg := lt.Translate("Sorry, free accounts do not support Mattermost Integration. Please upgrade to continue")
-		return c.JSON(http.StatusOK, apps.NewTextResponse(msg))
+		return c.JSON(http.StatusOK, apps.NewTextResponse("%s", msg))
 	}
 
 	opts = &database.FilterOptions{
@@ -425,7 +425,7 @@ func (s *Service) ShortCommand(c echo.Context) error {
 		if err != nil {
 			return err
 		}
-		return c.JSON(http.StatusOK, apps.NewTextResponse(lt.Translate("We sent you a private msg")))
+		return c.JSON(http.StatusOK, apps.NewTextResponse("%s", lt.Translate("We sent you a private msg")))
 	}
 	user, err := models.GetUser(c.Request().Context(), mmUsers[0].UserID, true)
 	if err != nil {
@@ -435,19 +435,19 @@ func (s *Service) ShortCommand(c echo.Context) error {
 	ctx = auth.Context(ctx, user)
 	title, ok := creq.Values["title"].(string)
 	if !ok {
-		return c.JSON(http.StatusOK, apps.NewTextResponse(lt.Translate("The title is required")))
+		return c.JSON(http.StatusOK, apps.NewTextResponse("%s", lt.Translate("The title is required")))
 	}
 	url, ok := creq.Values["url"].(string)
 	if !ok {
-		return c.JSON(http.StatusOK, apps.NewTextResponse(lt.Translate("The url is required")))
+		return c.JSON(http.StatusOK, apps.NewTextResponse("%s", lt.Translate("The url is required")))
 	}
 	shortCode, ok := creq.Values["code"].(string)
 	if !ok {
-		return c.JSON(http.StatusOK, apps.NewTextResponse(lt.Translate("The code is required")))
+		return c.JSON(http.StatusOK, apps.NewTextResponse("%s", lt.Translate("The code is required")))
 	}
 	domain, ok := creq.Values["domain"].(string)
 	if !ok {
-		return c.JSON(http.StatusOK, apps.NewTextResponse(lt.Translate("The domain is required")))
+		return c.JSON(http.StatusOK, apps.NewTextResponse("%s", lt.Translate("The domain is required")))
 	}
 
 	// Check that the domain exists, it is a short service domain
@@ -468,7 +468,7 @@ func (s *Service) ShortCommand(c echo.Context) error {
 		return err
 	}
 	if len(domains) == 0 {
-		return c.JSON(http.StatusOK, apps.NewTextResponse(lt.Translate("Domain not found")))
+		return c.JSON(http.StatusOK, apps.NewTextResponse("%s", lt.Translate("Domain not found")))
 	}
 
 	type GraphQLResponse struct {
@@ -497,11 +497,11 @@ func (s *Service) ShortCommand(c echo.Context) error {
 	err = links.Execute(ctx, op, &result)
 	if err != nil {
 		if graphError, ok := err.(*gqlclient.Error); ok {
-			return c.JSON(http.StatusOK, apps.NewTextResponse(graphError.Message))
+			return c.JSON(http.StatusOK, apps.NewTextResponse("%s", graphError.Message))
 		}
 		return err
 	}
-	return c.JSON(http.StatusOK, apps.NewTextResponse(lt.Translate("A new short was created succesfully")))
+	return c.JSON(http.StatusOK, apps.NewTextResponse("%s", lt.Translate("A new short was created succesfully")))
 }
 
 func (s *Service) AddCommand(c echo.Context) error {
@@ -519,7 +519,7 @@ func (s *Service) AddCommand(c echo.Context) error {
 	}
 	lt := localizer.GetSessionLocalizer(c)
 	if len(mmConns) == 0 {
-		return c.JSON(http.StatusOK, apps.NewTextResponse(lt.Translate("No slack connection found")))
+		return c.JSON(http.StatusOK, apps.NewTextResponse("%s", lt.Translate("No slack connection found")))
 	}
 	mmConn := mmConns[0]
 
@@ -540,7 +540,7 @@ func (s *Service) AddCommand(c echo.Context) error {
 	if links.BillingEnabled(gctx.Server.Config) && org.IsRestricted([]string{models.BillingStatusFree}) {
 		lt := localizer.GetSessionLocalizer(c)
 		msg := lt.Translate("Sorry, free accounts do not support Mattermost Integration. Please upgrade to continue")
-		return c.JSON(http.StatusOK, apps.NewTextResponse(msg))
+		return c.JSON(http.StatusOK, apps.NewTextResponse("%s", msg))
 	}
 
 	opts = &database.FilterOptions{
@@ -575,11 +575,11 @@ func (s *Service) AddCommand(c echo.Context) error {
 	}
 	linkURL, ok := creq.Values["url"].(string)
 	if !ok {
-		return c.JSON(http.StatusOK, apps.NewTextResponse(lt.Translate("Url is required")))
+		return c.JSON(http.StatusOK, apps.NewTextResponse("%s", lt.Translate("Url is required")))
 	}
 	title, ok := creq.Values["title"].(string)
 	if !ok {
-		return c.JSON(http.StatusOK, apps.NewTextResponse(lt.Translate("Title is required")))
+		return c.JSON(http.StatusOK, apps.NewTextResponse("%s", lt.Translate("Title is required")))
 	}
 	ctx := c.Request().Context()
 	ctx = auth.Context(ctx, user)
@@ -605,11 +605,11 @@ func (s *Service) AddCommand(c echo.Context) error {
 	err = links.Execute(ctx, op, &result)
 	if err != nil {
 		if graphError, ok := err.(*gqlclient.Error); ok {
-			return c.JSON(http.StatusOK, apps.NewTextResponse(graphError.Message))
+			return c.JSON(http.StatusOK, apps.NewTextResponse("%s", graphError.Message))
 		}
 		return err
 	}
-	return c.JSON(http.StatusOK, apps.NewTextResponse(lt.Translate("A new link was created succesfully")))
+	return c.JSON(http.StatusOK, apps.NewTextResponse("%s", lt.Translate("A new link was created succesfully")))
 }
 
 func (s *Service) ConnectCommand(c echo.Context) error {
@@ -638,7 +638,7 @@ func (s *Service) ConnectCommand(c echo.Context) error {
 	if err != nil {
 		return err
 	}
-	return c.JSON(http.StatusOK, apps.NewTextResponse(lt.Translate("We sent you a private msg")))
+	return c.JSON(http.StatusOK, apps.NewTextResponse("%s", lt.Translate("We sent you a private msg")))
 }
 
 func (s *Service) Ping(c echo.Context) error {
-- 
2.54.0

