fix: delete totp pending session cookie on totp success

This commit is contained in:
Stavros
2026-05-06 16:14:12 +03:00
parent 04b2290d73
commit 0d9865793c
2 changed files with 24 additions and 2 deletions
+22
View File
@@ -329,6 +329,28 @@ func (controller *UserController) totpHandler(c *gin.Context) {
tlog.App.Info().Str("username", context.GetUsername()).Msg("TOTP verification successful") tlog.App.Info().Str("username", context.GetUsername()).Msg("TOTP verification successful")
tlog.AuditLoginSuccess(c, context.GetUsername(), "totp") tlog.AuditLoginSuccess(c, context.GetUsername(), "totp")
uuid, err := c.Cookie(controller.config.SessionCookieName)
if err != nil {
tlog.App.Error().Err(err).Msg("Failed to retrieve session cookie in TOTP handler")
c.JSON(500, gin.H{
"status": 500,
"message": "Internal Server Error",
})
return
}
_, err = controller.auth.DeleteSession(c, uuid)
if err != nil {
tlog.App.Error().Err(err).Msg("Failed to delete pending TOTP session")
c.JSON(500, gin.H{
"status": 500,
"message": "Internal Server Error",
})
return
}
controller.auth.RecordLoginAttempt(context.GetUsername(), true) controller.auth.RecordLoginAttempt(context.GetUsername(), true)
sessionCookie := repository.Session{ sessionCookie := repository.Session{
+2 -2
View File
@@ -27,7 +27,7 @@ func defaultExtractor(client *http.Client, url string) (*model.Claims, error) {
return simpleReq[model.Claims](client, url, nil) return simpleReq[model.Claims](client, url, nil)
} }
func githubExtractor(client *http.Client, url string) (*model.Claims, error) { func githubExtractor(client *http.Client, _ string) (*model.Claims, error) {
var user model.Claims var user model.Claims
userInfo, err := simpleReq[GithubUserInfoResponse](client, "https://api.github.com/user", map[string]string{ userInfo, err := simpleReq[GithubUserInfoResponse](client, "https://api.github.com/user", map[string]string{
@@ -49,7 +49,7 @@ func githubExtractor(client *http.Client, url string) (*model.Claims, error) {
} }
for _, email := range *userEmails { for _, email := range *userEmails {
if email.Primary { if email.Primary && email.Verified {
user.Email = email.Email user.Email = email.Email
break break
} }