コンテンツへ移動

クラウドストレージ

クラウドホームは、ユーザーがすでに所有しているストレージ内の 1 つの場所です。すべてのプロバイダーは coven の同じストレージインターフェイスを通じて操作されます。プロバイダーごとに異なるのは、認証と、2 台目のデバイスへアクセスを与える方法です。

プロバイダー認証新しいデバイスへのアクセス
S3-compatibleAccess key + secret認証情報を招待に埋め込み
Google DriveOAuth (PKCE)フォルダーを参加者のアカウントへ共有
DropboxOAuth (PKCE)フォルダーを参加者のアカウントへ共有
OneDriveOAuth (PKCE)フォルダーを参加者のアカウントへ共有
iCloud (CloudKit)Apple ID、サインインなし参加者が CloudKit 共有を受け入れ

S3 互換は、AWS、Backblaze B2、Cloudflare R2、Wasabi、MinIO、API を話すその他すべてを含みます。バケット、リージョン、エンドポイント、キープレフィックスを設定でき、設定を保存する前にバケットを検査するため、タイプミスは初回同期ではなく設定時に失敗します。OAuth プロバイダーは完全版 bae エディションにだけ存在します。baeium ビルドではコンパイルされません。

サインインは、公開クライアントとしての PKCE 付き認可コードフローです。デスクトップでは、1 回のコールバック用にローカルポートへバインドしたループバックサーバーにリダイレクトが届きます。モバイルでは、アプリがカスタムスキームのリダイレクトを受け取ります。bae は、その仕事に必要な中でプロバイダーが提供する最も狭いスコープを要求します。Google Drive では、アプリ自身が作成したファイルへのアクセスだけです。トークンは OS のキーリングに保存され、プロバイダーのリフレッシュ権限で更新されます。リフレッシュが拒否された場合、静かな再試行ループではなく、再接続プロンプトとして表に出ます。

CloudKit にはフローが不要です。アプリに実装されてコアへ渡されるプラットフォームの CloudKit ドライバーが、サインイン済み Apple ID として動作します。

ホームの中で、coven はデバイスごとの変更セットストリーム、スナップショット世代、メンバーシップレコード、blob 名前空間を配置します。bae は 3 つの blob 名前空間を提供します。release_filescoversartist_images です。

オブジェクトのキー付けは、作成時に固定されるホームのストレージモードによって決まります。

  • 불투명: オブジェクトは暗号化され、内容由来で何も明かさないキーの下に保存されます。暗号を信頼するモードです。暗号化 を参照してください。
  • 탐색 가능: オブジェクトは平文で、アップロード時に blob ごとに記録された読みやすいパスに置かれます。release_files/{artist}/{album}/{filename}covers/{album}/{release}/cover.{ext}artist_images/{artist}/artist.{ext} です。バケットはそのまま使えるファイルツリーにもなります。代わりに、暗号化もメンバーシップもないため、閲覧可能ホームは他の人と共有できません。

実際のネットワークでの動作

このセクションへのリンク

再生の読み取りは範囲指定です。プレーヤーはファイル全体ではなく、必要なバイト範囲をストリーミングします。一定サイズを超えるアップロードは、プロバイダーが対応している場合 multipart になります。レート制限と一時的なプロバイダーエラーは指数バックオフで再試行され、retry-after が与えられた場合はそれに従います。期限切れの OAuth トークンはその場で更新されます。同期の送信待ちは再起動後も残ります。アプリ終了で中断されたアップロードは、最初からではなく途中から再開します。