taolib.testing.oauth.providers.github#

GitHub OAuth 提供商实现模块。

实现 GitHub OAuth2 标准流程。

Attributes#

Classes#

GitHubOAuthProvider

GitHub OAuth 提供商。

Module Contents#

taolib.testing.oauth.providers.github.GITHUB_AUTH_URL = 'https://github.com/login/oauth/authorize'#
taolib.testing.oauth.providers.github.GITHUB_TOKEN_URL = 'https://github.com/login/oauth/access_token'#
taolib.testing.oauth.providers.github.GITHUB_USER_URL = 'https://api.github.com/user'#
taolib.testing.oauth.providers.github.GITHUB_EMAILS_URL = 'https://api.github.com/user/emails'#
taolib.testing.oauth.providers.github.GITHUB_DEFAULT_SCOPES = ['user:email', 'read:user']#
taolib.testing.oauth.providers.github.HTTP_TIMEOUT = 10.0#
class taolib.testing.oauth.providers.github.GitHubOAuthProvider#

GitHub OAuth 提供商。

provider_name: str#
get_authorize_url(client_id: str, redirect_uri: str, state: str, scopes: list[str]) str#

生成 GitHub 授权 URL。

参数:
  • client_id -- GitHub Client ID

  • redirect_uri -- 回调 URI

  • state -- CSRF 防护 state 参数

  • scopes -- 请求的权限范围

返回:

完整的 GitHub 授权 URL

async exchange_code(code: str, client_id: str, client_secret: str, redirect_uri: str) dict[str, Any]#

用授权码交换 GitHub Token。

参数:
  • code -- 授权码

  • client_id -- GitHub Client ID

  • client_secret -- GitHub Client Secret

  • redirect_uri -- 回调 URI

返回:

Token 响应字典

抛出:

OAuthCodeExchangeError -- 交换失败

async fetch_user_info(access_token: str) taolib.testing.oauth.models.profile.OAuthUserInfo#

获取 GitHub 用户信息。

如果用户信息中没有邮箱,会额外调用邮箱 API 获取主邮箱。

参数:

access_token -- GitHub Access Token

返回:

标准化的用户信息

抛出:

OAuthUserInfoError -- 获取失败

static _fetch_primary_email(client: httpx.AsyncClient, headers: dict[str, str]) str | None#
Async:

获取 GitHub 用户的主邮箱。

参数:
  • client -- httpx 异步客户端

  • headers -- 请求头

返回:

主邮箱地址,获取失败返回 None

async refresh_access_token(refresh_token: str, client_id: str, client_secret: str) dict[str, Any]#

GitHub 标准 OAuth 应用不支持 Token 刷新。

抛出:

OAuthRefreshNotSupported -- 总是抛出

async revoke_token(token: str, client_id: str, client_secret: str) bool#

撤销 GitHub Token。

参数:
  • token -- 要撤销的令牌

  • client_id -- GitHub Client ID

  • client_secret -- GitHub Client Secret

返回:

是否成功撤销