Expand description
Phase 7 外部連携: OAuth2 + Google Drive / GitHub の REST クライアント。
ヘッドレス OS のため OAuth2 は デバイスフロー(ブラウザ無しで user_code を表示し、
別端末で認可 → token をポーリング取得)を用いる。リクエスト構築と JSON レスポンス解析は
純関数として cloud::selftest() で検証する。実際の HTTPS 呼び出しは tls::https_request
経由で行う(実機/ネットワーク必須のため QEMU 自己テストでは解析部のみを確認)。
Structs§
- Device
Code - Drive
File - Gdrive
Auth - ディスクに保存する Drive 認証状態。client_id/secret はユーザーが Google Cloud で 発行したものを事前に書き込んでおく(このアプリからは編集しない)。token 類は デバイスフロー成功後に書き戻す。
- GitHub
User - Github
Auth - ディスクに保存する GitHub 認証状態。GitHub のデバイスフローは client_secret を 要求しないため GdriveAuth と異なり client_id + token のみ。device_code は login → poll の間、CUI の別呼び出しをまたいで引き継ぐために保存する。
- MsAuth
- ディスクに保存する OneDrive 認証状態。Microsoft の device flow はパブリック クライアント向けで client_secret 不要のため GdriveAuth より単純。
- OneDrive
File - Repo
- Token
Response
Constants§
- AUTH_
FILE 🔒 - DRIVE_
SCOPE - Drive 読み書きフルスコープ。
- GH_
AUTH_ 🔒FILE - GITHUB_
DEFAULT_ SCOPE - User情報 + リポジトリ一覧に必要な最小スコープ。
- GITHUB_
HOST 🔒 - GOOGLE_
API_ 🔒HOST - GOOGLE_
OAUTH_ 🔒HOST - GRAPH_
API_ 🔒HOST - MIME_
FOLDER - Google Drive のフォルダ MIME。
- MIME_
GOOGLE_ DOC - Google ネイティブ Docs の MIME(本文取得は export が必要)。
- MS_
AUTH_ 🔒FILE - MS_
OAUTH_ 🔒HOST - ONEDRIVE_
SCOPE - OneDrive 読み書き + オフラインアクセス(refresh_token 発行)に必要な最小スコープ。
Functions§
- api_get
- Bearer トークン付き API GET。
- api_
send 🔒 - Bearer トークン付き API 送信(GET 以外の任意メソッド + ボディ)。
- auth_
to_ json - drive_
cat - file_id だけから本文を取得する(mime_type をまず問い合わせてから分岐)。
CUI コマンド(
drive cat <id>)向けの一括ヘルパー。 - drive_
create_ text - 新規ファイルをアップロード(multipart:メタデータ + 本文)。成功時は作成された file id。
- drive_
delete - ファイルを削除。
- drive_
download_ binary - ファイル本文を生バイト列でダウンロード(
alt=media)。画像/zip 等のバイナリ用。HttpsGetResult.body_bytesを使うため lossy UTF-8 変換によるデータ破損が起きない。 - drive_
download_ text - 通常ファイル(text/plain 等)の本文をダウンロード(
alt=media)。 バイナリは https_request が UTF-8 lossy になるため、テキスト用途のみ想定。 - drive_
export_ doc_ text - Google ネイティブ Docs をプレーンテキストとして export して取得。
- drive_
get_ mime_ type - ファイルの mimeType のみを取得(CUI の
drive cat <id>のように mime_type を 事前に知らない呼び出し元向け。mime に応じた export/download 分岐に使う)。 - drive_
get_ text - MIME に応じて Docs は export、それ以外は alt=media でダウンロード。
- drive_
list_ files - Google Drive のファイル一覧(live)。
- drive_
list_ files_ in_ folder - 指定フォルダ直下のファイル一覧。
folder_idが None なら Drive ルート直下。 フォルダ階層ナビゲーション用(drive アプリの Enter でフォルダに入る操作)。 - drive_
multipart_ body - multipart/related ボディを組み立てる(メタデータ JSON + メディア本文)。 返り値は (boundary, body_bytes)。Content-Type に boundary を載せる必要がある。
- drive_
poll_ token - device_code でトークンを1回ポーリングする。
authorization_pendingの間は TokenResponse.error にコードが入る(成功時は access_token が埋まる)。 - drive_
refresh_ token - refresh_token から access_token を更新する。
- drive_
request_ device_ code - デバイスコードを要求(ユーザーに user_code と verification_url を提示するため)。
- drive_
update_ text - 既存ファイルの本文を上書き(メディアのみ PATCH)。
- field_
bool 🔒 - field_
i64 🔒 - field_
str 🔒 - field_
str_ 🔒any - 複数キー候補のうち最初に見つかった文字列。
- form_
encode application/x-www-form-urlencodedボディを組み立てる。- gh_
auth_ to_ json - github_
device_ code_ body - github_
get_ user - GitHub の認証ユーザ情報(live)。GitHub API は User-Agent 必須(https_request が付与)。
- github_
list_ repos - github_
poll_ token - device_code でトークンを1回ポーリングする。
authorization_pendingの間は TokenResponse.error にコードが入る(成功時は access_token が埋まる)。 - github_
request_ device_ code - デバイスコードを要求(ユーザーに user_code と verification_url を提示するため)。
- github_
token_ body - google_
device_ code_ body - google_
refresh_ body - google_
token_ body - hex_
digit 🔒 - json_
escape 🔒 - JSON 文字列値のエスケープ(メタデータ部のファイル名用、最小限)。
- load_
auth gdrive_auth.jsonを読む(無ければ default)。- load_
gh_ auth gh_auth.jsonを読む(無ければ default)。- load_
ms_ auth onedrive_auth.jsonを読む(無ければ default)。- ms_
auth_ to_ json - ms_
device_ code_ body - ms_
refresh_ body - ms_
token_ body - oauth_
post - OAuth2 トークン/デバイスコードエンドポイントへ form POST し、レスポンス本文を返す。
- obj_get 🔒
- ok_
or_ 🔒status - HTTP ステータスが 2xx かを判定。失敗時はステータスを含むエラーにしたいが
&'static str制約のため、代表的なケースを分岐する。 - onedrive_
delete - ファイルを削除。
- onedrive_
download_ binary - ファイル本文を生バイト列でダウンロード。Graph API はしばしば 302 で 署名付きCDN URLへリダイレクトするため、その場合は Authorization ヘッダを付けずに リダイレクト先へ再取得する(署名済みURLは通常トークン不要かつ拒否されることがある)。
- onedrive_
list_ files_ in_ folder - 指定フォルダ直下のアイテム一覧。
folder_idが None なら OneDrive ルート直下。 - onedrive_
poll_ token - device_code でトークンを1回ポーリングする。Google 版と同じ挙動(pending 中は TokenResponse.error にコードが入る)。
- onedrive_
refresh_ token - onedrive_
request_ device_ code - onedrive_
upload_ binary - 新規ファイルをアップロード(4MB未満の単純 PUT。folder_id=None ならルート直下)。 同名ファイルが既にあれば上書きされる(Graph API のデフォルト挙動)。成功時は item id。
- parse_
auth - parse_
device_ code - parse_
drive_ file_ list - parse_
gh_ auth - parse_
github_ repos - parse_
github_ user - parse_
ms_ auth - parse_
onedrive_ 🔒file_ list - parse_
token_ response - save_
auth gdrive_auth.jsonに書き戻す。- save_
gh_ auth gh_auth.jsonに書き戻す。- save_
ms_ auth onedrive_auth.jsonに書き戻す。- selftest
- split_
https_ 🔒url https://host/path形式の絶対URLを (host, path) に分解する(リダイレクト追従用の簡易パーサ)。- url_
encode - パーセントエンコード(unreserved 以外を %XX に)。
- val_
to_ 🔒string