feat(auth): Add logout route

This commit is contained in:
Björn Benouarets
2026-01-19 09:23:25 +01:00
parent 88dadab6a2
commit 9d7adb740c
4 changed files with 122 additions and 0 deletions

51
app/services/logout.go Normal file
View File

@@ -0,0 +1,51 @@
package services
import (
"errors"
"fmt"
"git.secnex.io/secnex/auth-api/config"
"git.secnex.io/secnex/auth-api/repositories"
"github.com/golang-jwt/jwt/v5"
"github.com/google/uuid"
)
func Logout(sessionToken string) error {
claims, err := jwt.ParseWithClaims(sessionToken, &jwt.MapClaims{}, func(token *jwt.Token) (interface{}, error) {
return []byte(config.CONFIG.JwtSecret), nil
})
if err != nil {
return err
}
if !claims.Valid {
return errors.New("invalid token")
}
mapClaims := claims.Claims.(*jwt.MapClaims)
subValue, ok := (*mapClaims)["sub"]
if !ok {
return errors.New("sub claim not found")
}
var sessionID string
switch v := subValue.(type) {
case string:
sessionID = v
case uuid.UUID:
sessionID = v.String()
default:
sessionID = fmt.Sprintf("%v", v)
}
err = repositories.DeleteSessionCache(sessionID)
if err != nil {
return err
}
err = repositories.DeleteSession(sessionID)
if err != nil {
return err
}
return nil
}