From 51d95fa455807d4d7e4f11c13733079129fd4165 Mon Sep 17 00:00:00 2001 From: Stavros Date: Mon, 2 Feb 2026 16:08:05 +0200 Subject: [PATCH] fix: do not append domains to users that have an email as the username --- frontend/src/index.css | 2 +- internal/controller/user_controller.go | 9 ++++----- internal/middleware/context_middleware.go | 5 ++--- internal/utils/string_utils_test.go | 8 ++++++++ internal/utils/user_utils.go | 12 ++++++++++++ 5 files changed, 27 insertions(+), 9 deletions(-) diff --git a/frontend/src/index.css b/frontend/src/index.css index e39d5fa..09e6538 100644 --- a/frontend/src/index.css +++ b/frontend/src/index.css @@ -160,7 +160,7 @@ code { } pre { - @apply bg-accent border border-border rounded-md p-2; + @apply bg-accent border border-border rounded-md p-2 whitespace-break-spaces; } .lead { diff --git a/internal/controller/user_controller.go b/internal/controller/user_controller.go index 35d60d3..161a520 100644 --- a/internal/controller/user_controller.go +++ b/internal/controller/user_controller.go @@ -2,7 +2,6 @@ package controller import ( "fmt" - "strings" "time" "github.com/steveiliop56/tinyauth/internal/repository" @@ -114,8 +113,8 @@ func (controller *UserController) loginHandler(c *gin.Context) { err := controller.auth.CreateSessionCookie(c, &repository.Session{ Username: user.Username, - Name: utils.Capitalize(req.Username), - Email: fmt.Sprintf("%s@%s", strings.ToLower(req.Username), controller.config.CookieDomain), + Name: utils.Capitalize(user.Username), + Email: utils.CompileUserEmail(user.Username, controller.config.CookieDomain), Provider: "local", TotpPending: true, }) @@ -141,7 +140,7 @@ func (controller *UserController) loginHandler(c *gin.Context) { sessionCookie := repository.Session{ Username: req.Username, Name: utils.Capitalize(req.Username), - Email: fmt.Sprintf("%s@%s", strings.ToLower(req.Username), controller.config.CookieDomain), + Email: utils.CompileUserEmail(req.Username, controller.config.CookieDomain), Provider: "local", } @@ -255,7 +254,7 @@ func (controller *UserController) totpHandler(c *gin.Context) { sessionCookie := repository.Session{ Username: user.Username, Name: utils.Capitalize(user.Username), - Email: fmt.Sprintf("%s@%s", strings.ToLower(user.Username), controller.config.CookieDomain), + Email: utils.CompileUserEmail(user.Username, controller.config.CookieDomain), Provider: "local", } diff --git a/internal/middleware/context_middleware.go b/internal/middleware/context_middleware.go index 00304a2..2067d82 100644 --- a/internal/middleware/context_middleware.go +++ b/internal/middleware/context_middleware.go @@ -1,7 +1,6 @@ package middleware import ( - "fmt" "slices" "strings" "time" @@ -186,7 +185,7 @@ func (m *ContextMiddleware) Middleware() gin.HandlerFunc { c.Set("context", &config.UserContext{ Username: user.Username, Name: utils.Capitalize(user.Username), - Email: fmt.Sprintf("%s@%s", strings.ToLower(user.Username), m.config.CookieDomain), + Email: utils.CompileUserEmail(user.Username, m.config.CookieDomain), Provider: "local", IsLoggedIn: true, TotpEnabled: user.TotpSecret != "", @@ -208,7 +207,7 @@ func (m *ContextMiddleware) Middleware() gin.HandlerFunc { c.Set("context", &config.UserContext{ Username: basic.Username, Name: utils.Capitalize(basic.Username), - Email: fmt.Sprintf("%s@%s", strings.ToLower(basic.Username), m.config.CookieDomain), + Email: utils.CompileUserEmail(basic.Username, m.config.CookieDomain), Provider: "ldap", IsLoggedIn: true, LdapGroups: strings.Join(ldapUser.Groups, ","), diff --git a/internal/utils/string_utils_test.go b/internal/utils/string_utils_test.go index 5ea1b47..b5e41f8 100644 --- a/internal/utils/string_utils_test.go +++ b/internal/utils/string_utils_test.go @@ -49,3 +49,11 @@ func TestCoalesceToString(t *testing.T) { // Test with nil input assert.Equal(t, "", utils.CoalesceToString(nil)) } + +func TestCompileUserEmail(t *testing.T) { + // Test with valid email + assert.Equal(t, "user@example.com", utils.CompileUserEmail("user@example.com", "example.com")) + + // Test with invalid email + assert.Equal(t, "user@example.com", utils.CompileUserEmail("user", "example.com")) +} diff --git a/internal/utils/user_utils.go b/internal/utils/user_utils.go index a56bd6e..e0254c0 100644 --- a/internal/utils/user_utils.go +++ b/internal/utils/user_utils.go @@ -2,6 +2,8 @@ package utils import ( "errors" + "fmt" + "net/mail" "strings" "github.com/steveiliop56/tinyauth/internal/config" @@ -90,3 +92,13 @@ func ParseUser(userStr string) (config.User, error) { return user, nil } + +func CompileUserEmail(username string, domain string) string { + _, err := mail.ParseAddress(username) + + if err != nil { + return fmt.Sprintf("%s@%s", strings.ToLower(username), domain) + } + + return username +}