# BONE FLOW #024 v1.0.315 — 同期APIを使わないWebDAV構成

**本版は未完成Candidateです。同期API（Python/Node独自HTTP API）を使用しません。**

## 動作上の重要事項

- Calendar HTML/JS/CSSは従来どおり `install.bat -> install.ps1` で WebRoot にコピーします。
- QRに記録するのは実サーバーのCalendar URLだけです。サーバー名は固定しません。QRに秘密鍵・パスワード・SQLiteは入れません。
- スマホの標準カメラでもURLを読み取れます。Web画面内カメラ読み取りにはブラウザの `BarcodeDetector` が必要です。非対応端末では標準カメラで読み取ります。
- QRを読み取っただけでは端末登録は完了しません。サーバーの認証後、Web画面の「この端末を登録」を押し、WebDAVに端末IDを保存します。
- SQLiteの競合検査と統合計算は**ブラウザ側**、保存先は**Apache WebDAV**です。サーバープロセス内でSQLをマージする仕組みではありません。
- DBバックアップは `snapshots/端末ID-日時-乱数.sqlite` に新しいファイルとして保存します。統合ファイルは `merged.sqlite`、同時更新はHTTP条件付き書込 `If-Match/If-None-Match` で保護します。
- 取り込み前に別名の端末DBバックアップをブラウザIndexedDBに保存します。競合時は書き込みを停止します。
- HTMLの静的コピーだけでサーバーへ書き込みはできません。DBの双方向同期には以下の認証付きWebDAVが必要です。

## Apache 2.4側の準備（サーバー管理者作業）

ユーザーが既に設定しているApache/認証を勝手に上書きしないため、インストーラはApacheの設定を改変しません。
サーバー上のWebRootと**異なる場所**、例 `C:/work/pcsr/boneflow-private/bf024/` を作り、Apacheの `Alias` と `DAV On`、HTTPS、Basic認証、書込権限を設定します。
同梱の `apache-webdav-v315.conf.example` は参考例です。適用前に実ディレクトリ、既存認証、モジュールと証明書を合わせて調整してください。

管理用アカウントの認証はApache標準の `htpasswd`（bcrypt）を推奨します。パスワードはQRにもHTMLにも埋め込まず、WebDAV保存領域を公開WebRoot外に置いてください。

デフォルトWebDAV URL：`https://<実サーバー名>/boneflow-private/bf024/`

`PROPFIND /boneflow-private/bf024/` が HTTP 207 を返し、認証できる場合だけ端末登録処理へ進みます。
`PUT/GET/MKCOL` と `If-Match/If-None-Match` の条件付き書込をサポートすることが必要です。

## 利用手順

1. サーバーにCalendarをコピーし、認証付きWebDAVを設定します。
2. そのサーバーの `boneflow/sample/024/calendar/sqlite-merge.html` をPCブラウザで開きます。
3. QRを表示し、スマホのカメラで読み取り、サーバーの同じページを開きます。
4. サーバー認証後「この端末を登録」を押します。PCとスマホで各々異なる端末IDを登録します。
5. 各端末の既存SQLiteを読み込み、DBをサーバーへ保存・統合、統合結果を各端末へ反映します。

`localhost` のIndexedDBと `https://<実サーバー>` のIndexedDBはブラウザ仕様上別領域です。移行時は、元のlocalhostでSQLiteバックアップを出力し、実サーバーのCalendarで既存のSQLite復元機能を利用してください。無断移行・初期化は行いません。

**制限**：実Windows PowerShell 5.1、ユーザー環境のHTTPS Apache、Edge・スマホ実機は未検証。サーバー側自動SQLマージは実装していません。
