Download test_supabase_auth.py from UNI12345/ARCHIVISE: direct link, hf CLI and curl.
- Browser
- Download file 5.14 kB
-
https://huggingface.co/spaces/UNI12345/ARCHIVISE/resolve/main/test_supabase_auth.py
- Command line
-
hf download hf://spaces/UNI12345/ARCHIVISE/test_supabase_auth.py
-
curl -L -o test_supabase_auth.py https://huggingface.co/spaces/UNI12345/ARCHIVISE/resolve/main/test_supabase_auth.py
5.14 kB
| import sys | |
| import time | |
| import jwt | |
| import pytest | |
| from app.config import settings | |
| from app.utils.auth import verify_supabase_jwt | |
| # Ensure settings has a valid secret key | |
| if not hasattr(settings, "SUPABASE_JWT_SECRET") or not settings.SUPABASE_JWT_SECRET: | |
| settings.SUPABASE_JWT_SECRET = "supabase-jwt-secret-placeholder-2026-secure-random" | |
| def test_verify_valid_token(): | |
| # Generate a valid token | |
| payload = { | |
| "sub": "test-user-123", | |
| "email": "test@example.com", | |
| "aud": "authenticated", | |
| "exp": int(time.time()) + 3600, | |
| "user_metadata": { | |
| "full_name": "Test User", | |
| "avatar_url": "https://example.com/avatar.jpg" | |
| } | |
| } | |
| token = jwt.encode(payload, settings.SUPABASE_JWT_SECRET, algorithm="HS256") | |
| decoded = verify_supabase_jwt(token) | |
| assert decoded["uid"] == "test-user-123" | |
| assert decoded["email"] == "test@example.com" | |
| assert decoded["name"] == "Test User" | |
| assert decoded["picture"] == "https://example.com/avatar.jpg" | |
| assert decoded["exp"] == payload["exp"] | |
| def test_verify_token_fallback_keys(): | |
| # Test fallback name/picture in claims | |
| payload = { | |
| "sub": "test-user-fallback", | |
| "email": "fallback@example.com", | |
| "aud": "authenticated", | |
| "exp": int(time.time()) + 3600, | |
| "name": "Fallback Name", | |
| "picture": "https://example.com/fallback.jpg" | |
| } | |
| token = jwt.encode(payload, settings.SUPABASE_JWT_SECRET, algorithm="HS256") | |
| decoded = verify_supabase_jwt(token) | |
| assert decoded["uid"] == "test-user-fallback" | |
| assert decoded["name"] == "Fallback Name" | |
| assert decoded["picture"] == "https://example.com/fallback.jpg" | |
| # Test fallback name/picture in user_metadata as 'name'/'picture' | |
| payload_metadata = { | |
| "sub": "test-user-metadata-fallback", | |
| "email": "meta@example.com", | |
| "aud": "authenticated", | |
| "exp": int(time.time()) + 3600, | |
| "user_metadata": { | |
| "name": "Metadata Name", | |
| "picture": "https://example.com/meta.jpg" | |
| } | |
| } | |
| token_metadata = jwt.encode(payload_metadata, settings.SUPABASE_JWT_SECRET, algorithm="HS256") | |
| decoded_metadata = verify_supabase_jwt(token_metadata) | |
| assert decoded_metadata["uid"] == "test-user-metadata-fallback" | |
| assert decoded_metadata["name"] == "Metadata Name" | |
| assert decoded_metadata["picture"] == "https://example.com/meta.jpg" | |
| def test_expired_token(): | |
| # Token expired in the past | |
| payload = { | |
| "sub": "test-expired", | |
| "email": "expired@example.com", | |
| "aud": "authenticated", | |
| "exp": int(time.time()) - 100 | |
| } | |
| token = jwt.encode(payload, settings.SUPABASE_JWT_SECRET, algorithm="HS256") | |
| with pytest.raises(jwt.ExpiredSignatureError): | |
| verify_supabase_jwt(token) | |
| def test_invalid_signature(): | |
| # Signed with wrong secret | |
| payload = { | |
| "sub": "test-invalid-sig", | |
| "email": "sig@example.com", | |
| "aud": "authenticated", | |
| "exp": int(time.time()) + 3600 | |
| } | |
| token = jwt.encode(payload, "wrong-secret-key-123456", algorithm="HS256") | |
| with pytest.raises(jwt.InvalidSignatureError): | |
| verify_supabase_jwt(token) | |
| def test_malformed_token(): | |
| # Entirely malformed token string | |
| with pytest.raises(jwt.InvalidTokenError): | |
| verify_supabase_jwt("not-a-valid-jwt-token-string") | |
| if __name__ == "__main__": | |
| print("Running Supabase Auth offline verification tests manually...") | |
| try: | |
| test_verify_valid_token() | |
| print("- test_verify_valid_token: PASSED") | |
| test_verify_token_fallback_keys() | |
| print("- test_verify_token_fallback_keys: PASSED") | |
| try: | |
| test_expired_token() | |
| print("- test_expired_token: PASSED") | |
| except AssertionError: | |
| print("- test_expired_token: FAILED (assert failed)") | |
| except jwt.ExpiredSignatureError: | |
| print("- test_expired_token: PASSED (raised ExpiredSignatureError)") | |
| except Exception as e: | |
| print(f"- test_expired_token: FAILED ({type(e).__name__}: {e})") | |
| try: | |
| test_invalid_signature() | |
| print("- test_invalid_signature: PASSED") | |
| except AssertionError: | |
| print("- test_invalid_signature: FAILED (assert failed)") | |
| except jwt.InvalidSignatureError: | |
| print("- test_invalid_signature: PASSED (raised InvalidSignatureError)") | |
| except Exception as e: | |
| print(f"- test_invalid_signature: FAILED ({type(e).__name__}: {e})") | |
| try: | |
| test_malformed_token() | |
| print("- test_malformed_token: PASSED") | |
| except AssertionError: | |
| print("- test_malformed_token: FAILED (assert failed)") | |
| except jwt.InvalidTokenError: | |
| print("- test_malformed_token: PASSED (raised InvalidTokenError)") | |
| except Exception as e: | |
| print(f"- test_malformed_token: FAILED ({type(e).__name__}: {e})") | |
| print("All manual tests PASSED successfully!") | |
| except Exception as e: | |
| print(f"Test run failed with error: {e}") | |
| sys.exit(1) | |