Skip to main content

Module cloud

Module cloud 

Source
Expand description

Phase 7 外部連携: OAuth2 + Google Drive / GitHub の REST クライアント。

ヘッドレス OS のため OAuth2 は デバイスフロー(ブラウザ無しで user_code を表示し、 別端末で認可 → token をポーリング取得)を用いる。リクエスト構築と JSON レスポンス解析は 純関数として cloud::selftest() で検証する。実際の HTTPS 呼び出しは tls::https_request 経由で行う(実機/ネットワーク必須のため QEMU 自己テストでは解析部のみを確認)。

Structs§

DeviceCode
DriveFile
GdriveAuth
ディスクに保存する Drive 認証状態。client_id/secret はユーザーが Google Cloud で 発行したものを事前に書き込んでおく(このアプリからは編集しない)。token 類は デバイスフロー成功後に書き戻す。
GitHubUser
GithubAuth
ディスクに保存する GitHub 認証状態。GitHub のデバイスフローは client_secret を 要求しないため GdriveAuth と異なり client_id + token のみ。device_code は login → poll の間、CUI の別呼び出しをまたいで引き継ぐために保存する。
MsAuth
ディスクに保存する OneDrive 認証状態。Microsoft の device flow はパブリック クライアント向けで client_secret 不要のため GdriveAuth より単純。
OneDriveFile
Repo
TokenResponse

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 🔒