隐私政策
最近更新:2026-05-31
本《隐私政策》解释 ByWave Calendar(以下简称"本服务"或"我们")通过网页、PWA、iOS / Android / 桌面 APP、CalDAV、API、邮件、ICS 订阅、嵌入式 widget 等渠道收集、使用、存储和保护您信息的方式。本服务是自托管的开源软件(MIT 许可)—— 这意味着您的数据存放在本服务的运营者所控制的服务器上(具体见页脚联系方式),不经过任何第三方 SaaS 云端,也不会传给本软件的作者。本政策与配套的 《数据处理政策》 和 《使用条款》 一并构成完整说明。
1. 我们收集的信息
1.1 账号信息
- 邮箱地址:注册账号时由您提供,用于登录、找回密码、接收邀请、登录提醒、事件提醒。
- 密码哈希:我们仅存储 bcrypt(cost 12)哈希后的不可逆密文,永远不存储明文密码。
- 显示名(可选):您在个人资料里设置的昵称。
- Passkey / WebAuthn 凭据:当您启用 Passkey 登录时,仅存储公钥;私钥永远只在您的设备里。
- TOTP / 备用码(二次验证):当您启用 MFA 时,存储 TOTP secret 和加密的备用码。
- SSO 身份(可选):当您通过运营者配置的 SSO(OIDC,例如 Keycloak、Authelia)登录时,存储与该身份提供方关联的标识。
1.2 日历内容
- 日历元数据:日历名、颜色、时区、分享设置。
- 事件:标题、描述、地点、链接(会议/文档 URL)、开始/结束时间、重复规则、与会人 email、提醒(VALARM)、时区。
- 事件邀请:受邀人 email、RSVP 状态、邀请 token。
- 软删除事件:删除后 90 天内仍保留在数据库中,便于通过"撤销删除"恢复;之后由 cron 物理删除。
1.3 设备 + 会话信息
- 登录历史:每次成功登录的时间、IP、User-Agent,用于在「设置 → 我的登录」展示,便于您审计可疑访问。
- 会话 cookie:网页登录后服务器会签发 HttpOnly cookie 以保持登录状态。
- 设备配对信息(APP):当您把 iOS / Android / 桌面 APP 绑定到服务器时,存储设备名、平台、APP 版本、首次/最近一次连接的 IP + User-Agent。
- 推送订阅 token:
- 网页 Web Push:当您在浏览器上同意推送通知时,存储浏览器签发的推送订阅 endpoint。
- 移动端 APNs / FCM:服务器具备向移动设备推送的能力;当某台设备注册推送时,会存储该设备的推送 token。当前发布的 iOS APP 并未声明推送能力、不会获取或上传 APNs token,仅使用前台刷新与后台轮询同步事件;后续版本若启用推送,会在升级说明中另行公告。
- 多账号档案(iOS APP):当您在 iOS APP 中绑定多个服务器时,每个账号档案(服务器地址、邮箱、显示名)独立存储在本机 Keychain 中。这些档案本身不会被同步到服务器;iCloud Keychain 端到端加密可选地同步到您自己的其它 Apple 设备。
- API token / 应用密码:仅哈希存储,明文只在签发时显示一次。
1.4 操作 / 审计日志
- 管理员操作(启用/停用账号、撤销 token、修改设置等)会写入审计日志,包含操作类型、操作者、对象、IP。
- 外部 Webhook 投递记录(HTTP 状态、响应正文前 1KB、是否成功)。
- 服务器运行日志用于排障;访问 token、推送 token、密码等敏感凭据不会写入日志。
2. 我们不收集的信息
- 我们不会主动收集您的位置、设备 IMEI/MAC、通讯录、相册、社交关系等任何与日历功能无关的信息。
- iOS / Android APP 的相机权限仅用于扫描登录二维码;图像不会被上传或保存。
- APP 的日历权限(如果您启用「同步到系统日历」)仅用于将本服务的事件写入您指定的系统日历子日历,不读取您 iCloud / Google / 其他日历的内容。
- APP 的通知权限仅用于事件开始前的本地提醒。
- 我们不使用任何广告 SDK、行为追踪 SDK、第三方分析 SDK;前端引用的第三方资源全部本地化托管,不加载任何国外 CDN。
3. 我们如何使用这些信息
- 提供日历功能:显示、编辑、提醒事件,管理日历分享。
- 账号安全:检测异常登录、风险登录验证、防止暴力破解、停用账号时立即吊销所有 token。
- 邮件通知:邀请、取消、提醒、登录提醒、密码重置、二次验证(通过运营者自行配置的 SMTP 发送)。
- 外部集成:当您在 admin 后台配置 Webhook 时,事件变更会推送到您指定的 URL。
- 多设备同步:APP 通过定期后台轮询与应用前台刷新拉取服务器的事件变更,仅同步您自己有权访问的事件。
4. 数据存储与安全
- 所有数据存放于本服务运营者的服务器,使用 PostgreSQL 数据库,受 Linux 文件权限保护。
- 传输层强制 HTTPS / TLS 全程加密,HSTS 已启用。
- 密码 bcrypt(cost 12)哈希,访问令牌 HMAC-SHA256 JWT 签名,CSRF token 防跨站请求伪造,Helmet CSP 防 XSS。
- 登录尝试失败 5 次后临时锁定账号 15 分钟。
- 站点支持双因素验证(TOTP)、Passkey、SSO(OIDC)。
- 设备本地保护:iOS 把凭证存入 Keychain;Android 用 EncryptedSharedPreferences(Android Keystore 加密);桌面端把凭证文件写为 0600(仅属主可读)权限;各端 token 均不写入本地日志。
- 定期数据库备份由运营者负责。
5. 数据共享
我们不会把您的数据卖给第三方,也不会用作广告投放。下列场景会发生数据传输,且都在您主动操作或运营者主动配置的范围内:
- 事件邀请:您邀请某人参加事件时,对方会通过邮件收到事件标题、时间、地点、描述、组织者邮箱。
- 日历分享:您主动生成的订阅链接(ICS / 嵌入 widget)会暴露相应日历的事件,链接持有者均可访问。
- 第三方集成:您在 admin 后台启用的 Webhook / OAuth 应用 / API token 会按您的配置访问您的数据。
- 邮件发送(SMTP):通过运营者自行配置的 SMTP 服务器发送通知邮件。
- 推送服务(APNs / FCM):当移动端推送启用时,推送内容会经苹果 APNs / 谷歌 FCM 网关投递到您的设备。
- SSO:当您选择第三方登录(Keycloak、Authelia 等)时,您的邮箱会传给该 IdP 完成身份验证。
以上第三方仅限运营者自行配置启用的基础设施(SMTP、APNs/FCM、SSO 提供方),不包含任何分析、广告或追踪服务。详见 《数据处理政策》。
6. 您的权利
- 查看:进入网页设置查看您的账号信息、登录历史、绑定的设备、API token 等。
- 修改:随时修改邮箱、密码、显示名、二次验证设置。
- 删除:在 web 或 APP 的「设置 → 危险区」永久删除账号。删除会清空您的所有日历、事件、订阅、绑定的设备、API token。此操作不可恢复。
- 导出 / 可携:admin 可在「管理后台 → 备份」导出全站 JSON;您也可以通过 .ics 订阅链接下载单个日历,或经 CalDAV 对接其它客户端。
- 解绑设备:在「设置 → 我的设备」随时解除某台 APP 的绑定,对应设备立即失去访问权限。
7. Cookie 使用
- bwc_session:登录会话,HttpOnly + Secure + SameSite=Lax。
- bwc_csrf:CSRF token,用于防御跨站请求伪造。
- bwc_login_chall:邮件验证码挑战会话,10 分钟过期。
- 以上均为维持基本功能所必需的会话型 Cookie;我们不使用第三方追踪 cookie,也无广告 cookie。
8. 数据留存
- 账号 + 日历 + 事件:在账号存续期间持续保留,直到您删除事件或注销账号。
- 软删除事件:删除后保留 90 天供恢复,到期物理删除。
- 登录历史 / 审计日志:由运营者按其运维策略保留,用于安全审计。
- 注销账号后:账号及其关联数据被永久清除;运营者的定期数据库备份中可能仍残留至备份按其轮换策略到期为止。
9. 跨境数据传输
数据是否跨境,取决于运营者把服务器部署在何处,以及运营者所配置的 SMTP / 推送 / SSO 基础设施所在地。本软件本身不规定服务器位置。若您对数据存储与处理的具体地理位置有疑问,请咨询本站运营者。
10. 儿童隐私
本服务不针对 13 岁以下儿童。如发现您是儿童,请勿提交个人信息。如运营者发现错误收集了儿童信息,会主动删除。
11. 政策变更
我们可能不定期更新本政策,更新后会显示在本页面顶部"最近更新"日期。重大变更我们会通过邮件通知。
12. 联系
对本政策、您的数据有任何疑问:
- 本站账号 / 数据 / 服务器层面的问题:联系本站运营者(联系方式见站点页脚或 技术支持页;由运营者填写)。
- 软件 / APP / 项目层面的问题:联系项目方 info@by-wave.com,或到 GitHub 提 issue。
本服务基于开源软件 by-wave-calendar 自托管,软件源码完全开放(MIT)。