Skip to content

Commit 16dda27

Browse files
committed
feat(twitter_plugin): add an auth gate during initialization
1 parent b7e1180 commit 16dda27

File tree

1 file changed

+26
-3
lines changed

1 file changed

+26
-3
lines changed

plugins/twitter/twitter_plugin_gamesdk/twitter_plugin.py

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,20 @@ def __init__(self, options: Dict[str, Any]) -> None:
6161
credentials = options.get("credentials")
6262
if not credentials:
6363
raise ValueError("Twitter API credentials are required.")
64+
65+
# Capture token for internal use
66+
self.game_twitter_access_token = credentials.get("gameTwitterAccessToken")
67+
68+
# Auth gate: require EITHER gameTwitterAccessToken OR full credential set
69+
has_api_credentials = all(
70+
credentials.get(key) for key in ["bearerToken", "apiKey", "apiSecretKey", "accessToken", "accessTokenSecret"]
71+
)
72+
73+
if not self.game_twitter_access_token and not has_api_credentials:
74+
raise ValueError(
75+
"Missing valid authentication. Provide either a 'gameTwitterAccessToken' or all required Twitter API credentials."
76+
)
77+
6478
# Init Tweepy client
6579
self.twitter_client: virtuals_tweepy.Client = virtuals_tweepy.Client(
6680
bearer_token = credentials.get("bearerToken"),
@@ -74,7 +88,16 @@ def __init__(self, options: Dict[str, Any]) -> None:
7488
# Configure logging
7589
logging.basicConfig(level=logging.INFO)
7690
self.logger: logging.Logger = logging.getLogger(__name__)
77-
78-
self.game_twitter_access_token = credentials.get("gameTwitterAccessToken")
79-
8091

92+
self._check_authentication()
93+
94+
def _check_authentication(self) -> None:
95+
"""
96+
Check if the credentials provided are valid by calling the /me endpoint or fetching user info.
97+
"""
98+
try:
99+
user = self.twitter_client.get_me(user_fields=["public_metrics"]).get('data')
100+
self.logger.info(f"Authenticated as: {user.get('name')} (@{user.get('username')})")
101+
except virtuals_tweepy.TweepyException as e:
102+
self.logger.error(f"Authentication failed: {e}")
103+
raise ValueError("Invalid Twitter credentials or failed authentication.")

0 commit comments

Comments
 (0)