MCPcopy Create free account
hub / github.com/ChrisFeldmeier/OpenCodeRust / get_token

Method get_token

crates/opencode-mcp/src/oauth.rs:289–322  ·  view source on GitHub ↗

Return a valid access token, refreshing if necessary. Returns `None` if no tokens are stored (the caller should initiate the auth flow).

(&self)

Source from the content-addressed store, hash-verified

287 /// Returns `None` if no tokens are stored (the caller should initiate the
288 /// auth flow).
289 pub async fn get_token(&self) -> Result<Option<String>, OAuthError> {
290 let entry = match auth::get_for_url(&self.mcp_name, &self.server_url).await {
291 Some(e) => e,
292 None => return Ok(None),
293 };
294
295 let tokens = match &entry.tokens {
296 Some(t) => t,
297 None => return Ok(None),
298 };
299
300 // Check expiry (with a 60-second buffer).
301 if let Some(exp) = tokens.expires_at {
302 let now = std::time::SystemTime::now()
303 .duration_since(std::time::UNIX_EPOCH)
304 .unwrap_or_default()
305 .as_secs_f64();
306 if exp < now + 60.0 {
307 if tokens.refresh_token.is_some() {
308 self.refresh_token().await?;
309 if let Some(refreshed) =
310 auth::get_for_url(&self.mcp_name, &self.server_url).await
311 {
312 if let Some(t) = refreshed.tokens {
313 return Ok(Some(t.access_token));
314 }
315 }
316 }
317 return Ok(None);
318 }
319 }
320
321 Ok(Some(tokens.access_token.clone()))
322 }
323
324 /// Remove all stored OAuth credentials for this server.
325 pub async fn remove_auth(&self) -> Result<(), OAuthError> {

Callers 2

connect_http_innerMethod · 0.80
connect_sse_innerMethod · 0.80

Calls 3

get_for_urlFunction · 0.85
refresh_tokenMethod · 0.80
cloneMethod · 0.45

Tested by

no test coverage detected