MCPcopy Create free account
hub / github.com/supabase/auth / findUserWithRefreshToken

Function findUserWithRefreshToken

internal/models/user.go:653–694  ·  view source on GitHub ↗
(tx *storage.Connection, dbEncryption conf.DatabaseEncryptionConfiguration, token string, forUpdate bool)

Source from the content-addressed store, hash-verified

651}
652
653func findUserWithRefreshToken(tx *storage.Connection, dbEncryption conf.DatabaseEncryptionConfiguration, token string, forUpdate bool) (*User, *crypto.RefreshToken, *Session, error) {
654 refreshToken, err := crypto.ParseRefreshToken(token)
655 if err != nil {
656 // refresh token is not valid
657 return nil, nil, nil, SessionNotFoundError{}
658 }
659
660 session, err := FindSessionByID(tx, refreshToken.SessionID, forUpdate)
661 if err != nil {
662 return nil, nil, nil, err
663 }
664
665 if session.RefreshTokenHmacKey == nil || session.RefreshTokenCounter == nil {
666 // if the session is not set up to support these encoded refresh tokens it's as if it doesn't exist
667 // meaning someone is hand-crafting tokens for uuids that exist
668 return nil, nil, nil, SessionNotFoundError{}
669 }
670
671 key, shouldReEncrypt, err := session.GetRefreshTokenHmacKey(dbEncryption)
672 if err != nil {
673 return nil, nil, nil, err
674 }
675
676 if !refreshToken.CheckSignature(key) {
677 // refresh token signature is not valid for this session
678 return nil, nil, nil, SessionNotFoundError{}
679 }
680
681 if shouldReEncrypt && forUpdate {
682 err := session.ReEncryptRefreshTokenHmacKey(tx, dbEncryption)
683 if err != nil {
684 return nil, nil, nil, err
685 }
686 }
687
688 user, err := FindUserByID(tx, session.UserID)
689 if err != nil {
690 return nil, nil, nil, err
691 }
692
693 return user, refreshToken, session, nil
694}
695
696func findUserWithLegacyRefreshToken(tx *storage.Connection, token string, forUpdate bool) (*User, any, *Session, error) {
697 refreshToken := &RefreshToken{}

Callers 1

FindUserWithRefreshTokenFunction · 0.85

Calls 6

ParseRefreshTokenFunction · 0.92
FindSessionByIDFunction · 0.85
FindUserByIDFunction · 0.85
CheckSignatureMethod · 0.80

Tested by

no test coverage detected