# cdrop（drop.<your-domain>）的 Caddy 接线示例。换上你的域名、cdrop 服务名（NN-cdrop）、
# broker 内网地址（BROKER-IP:PORT）。
#
# cdrop 迁移到 Auth Broker（路径 A）后，边缘由 broker /verify 终结鉴权并注入 X-Auth-* 头：
#   - 含 Authorization: Bearer 的请求 → 机器分支（QR 配对设备 / iOS / 桌面，持 broker 机器令牌）
#   - 不含 Bearer 的请求       → 人类分支（全新浏览器全局 SSO，带 broker 域 cookie）
#   - 一组公开端点必须放行不鉴权，否则未登录设备无从登录 / 刷新。
#
# 前置：用 xcaddy 把 caddybroker 编进 caddy-custom，并在全局块声明
#     { order broker before reverse_proxy }
# 否则 `handle { broker ... }` 报 "not an ordered HTTP handler"。
#
# 关键开关：
#   - flush_interval -1 ：禁用 reverse_proxy 对 SSE 长响应的缓冲，否则 /api/hub/events 看似无事件
#   - copy_headers 须含 X-Auth-Meta（cdrop 据它定位托管设备）；caddybroker 默认已含，
#     但旧 caddy-custom 镜像须**重建**才生效——接 cdrop 那次必须连带重建。

drop.your-domain.example {
    import tls_min

    # 公开端点（放行不鉴权）：登录引导（302 跳 broker）/ 原生取 broker 坐标 / 令牌刷新代理 /
    # 扫码公开端点（新设备未登录，凭 poll_secret 自证）。
    @public path /api/auth/login /api/auth/config /api/auth/refresh /api/auth/qr/start /api/auth/qr/status
    handle @public {
        reverse_proxy NN-cdrop:8080 {
            flush_interval -1
        }
    }

    # 受控 /api/* 机器分支：含 Bearer → broker /verify 验机器令牌 → 注入 X-Auth-*。
    @apiBearer {
        path /api/*
        header Authorization Bearer*
    }
    handle @apiBearer {
        broker BROKER-IP:8080 {
            app cdrop
            copy_headers X-Auth-Subject X-Auth-Name X-Auth-Roles X-Auth-Scope X-Auth-Kind X-Auth-Meta
        }
        reverse_proxy NN-cdrop:8080 {
            flush_interval -1
        }
    }

    # 受控 /api/* 人类分支：无 Bearer → broker /verify 验全局 SSO cookie → 注入 X-Auth-*。
    @api path /api/*
    handle @api {
        broker BROKER-IP:8080 {
            app cdrop
            copy_headers X-Auth-Subject X-Auth-Name X-Auth-Roles X-Auth-Scope X-Auth-Kind X-Auth-Meta
        }
        reverse_proxy NN-cdrop:8080 {
            flush_interval -1
        }
    }

    # 静态 SPA 壳（其余路径）：放行不鉴权，前端自行引导登录。
    handle {
        encode gzip
        reverse_proxy NN-cdrop:8080 {
            flush_interval -1
        }
    }
}
