from rest_framework.exceptions import AuthenticationFailed
from rest_framework_simplejwt.authentication import JWTAuthentication


class AccountJWTAuthentication(JWTAuthentication):
    def get_user(self, validated_token):
        user = super().get_user(validated_token)
        if not user.is_email_verified or validated_token.get("auth_version") != str(user.auth_version):
            raise AuthenticationFailed("Session expired. Please sign in again.", code="session_revoked")
        from .security_sessions import assert_session, touch
        assert_session(validated_token,user)
        touch(validated_token)
        return user
