クラウドストレージ
クラウドホームは、ユーザーがすでに所有しているストレージ内の 1 つの場所です。すべてのプロバイダーは coven の同じストレージインターフェイスを通じて操作されます。プロバイダーごとに異なるのは、認証と、2 台目のデバイスへアクセスを与える方法です。
プロバイダー
このセクションへのリンク| プロバイダー | 認証 | 新しいデバイスへのアクセス |
|---|---|---|
| S3-compatible | Access key + secret | 認証情報を招待に埋め込み |
| Google Drive | OAuth (PKCE) | フォルダーを参加者のアカウントへ共有 |
| Dropbox | OAuth (PKCE) | フォルダーを参加者のアカウントへ共有 |
| OneDrive | OAuth (PKCE) | フォルダーを参加者のアカウントへ共有 |
| iCloud (CloudKit) | Apple ID、サインインなし | 参加者が CloudKit 共有を受け入れ |
S3 互換は、AWS、Backblaze B2、Cloudflare R2、Wasabi、MinIO、API を話すその他すべてを含みます。バケット、リージョン、エンドポイント、キープレフィックスを設定でき、設定を保存する前にバケットを検査するため、タイプミスは初回同期ではなく設定時に失敗します。OAuth プロバイダーは完全版 bae エディションにだけ存在します。baeium ビルドではコンパイルされません。
OAuth
このセクションへのリンクサインインは、公開クライアントとしての PKCE 付き認可コードフローです。デスクトップでは、1 回のコールバック用にローカルポートへバインドしたループバックサーバーにリダイレクトが届きます。モバイルでは、アプリがカスタムスキームのリダイレクトを受け取ります。bae は、その仕事に必要な中でプロバイダーが提供する最も狭いスコープを要求します。Google Drive では、アプリ自身が作成したファイルへのアクセスだけです。トークンは OS のキーリングに保存され、プロバイダーのリフレッシュ権限で更新されます。リフレッシュが拒否された場合、静かな再試行ループではなく、再接続プロンプトとして表に出ます。
CloudKit にはフローが不要です。アプリに実装されてコアへ渡されるプラットフォームの CloudKit ドライバーが、サインイン済み Apple ID として動作します。
ホームの配置
このセクションへのリンクホームの中で、coven はデバイスごとの変更セットストリーム、スナップショット世代、メンバーシップレコード、blob 名前空間を配置します。bae は 3 つの blob 名前空間を提供します。release_files、covers、artist_images です。
オブジェクトのキー付けは、作成時に固定されるホームのストレージモードによって決まります。
- 불투명: オブジェクトは暗号化され、内容由来で何も明かさないキーの下に保存されます。暗号を信頼するモードです。暗号化 を参照してください。
- 탐색 가능: オブジェクトは平文で、アップロード時に blob ごとに記録された読みやすいパスに置かれます。
release_files/{artist}/{album}/{filename}、covers/{album}/{release}/cover.{ext}、artist_images/{artist}/artist.{ext}です。バケットはそのまま使えるファイルツリーにもなります。代わりに、暗号化もメンバーシップもないため、閲覧可能ホームは他の人と共有できません。
実際のネットワークでの動作
このセクションへのリンク再生の読み取りは範囲指定です。プレーヤーはファイル全体ではなく、必要なバイト範囲をストリーミングします。一定サイズを超えるアップロードは、プロバイダーが対応している場合 multipart になります。レート制限と一時的なプロバイダーエラーは指数バックオフで再試行され、retry-after が与えられた場合はそれに従います。期限切れの OAuth トークンはその場で更新されます。同期の送信待ちは再起動後も残ります。アプリ終了で中断されたアップロードは、最初からではなく途中から再開します。