Skip to Main Content
404Back to Top

24 June 2026, 12:00 (CST)

2026年06月24日 12:00(东八区 / 北京时间)

站点更新总结:Umami 统计 · 文章加解密 · 管理员特权 · 访客随机解密 · 编辑按钮门控

概述

本轮迭代围绕 可观测性(Umami)内容保护(构建期加密 + 运行时解密)特权与访客双模式 以及 编辑类按钮的可见性控制 展开。所有改动均在站点根目录 templates/static/scripts/zola.toml 完成,未修改 themes/

构建入口统一为:

./build-site.sh   # encrypt-content.mjs → zola build → patch-search-index.mjs

1. Umami 流量统计

1.1 问题与根因

现象原因
Umami 控制台长期无数据self_hosted_url 误填为博客域名,脚本指向不存在的 /script.js
控制台 CSP 报错script-src / connect-src 未放行 Umami Cloud
gateway.umami.is/api/send 被拦截Umami 新版上报端点未加入 CSP

1.2 修复要点

配置 / 文件说明
zola.toml [extra.analytics]service = "umami"留空 self_hosted_url(走 Umami Cloud)
zola.toml [extra.csp] connect-src新增 gateway.umami.is
static/analytic/umami.js全站幂等加载器;zola.tomlscripts = ["analytic/umami.js"]
static/js/nanolog.js合并重复副本,统一路径

主题 build 模式仍会注入 cloud.umami.is/script.js;站点层脚本作兜底,避免漏统计。

1.3 验证

更细的调用链见同目录较早条目:2026-06-23T12:00:00Z.md


2. 文章加解密(底层通用能力)

2.1 设计原则

2.2 启用方式(单篇文章)

[extra.encryption]
encrypt = true

建议 [extra] 写在 [extra.encryption] 之前,避免 TOML 表顺序导致解析异常。

2.3 文件结构

层级路径
站点配置zola.toml[extra.encryption]
构建脚本scripts/encrypt-content.mjsscripts/encryption-lib.mjs
密文输出static/encryption/pages/<相对路径>.json
清单static/encryption/manifest.json
全站注入templates/base.htmlpartials/encryption_config.html
加密文章 UItemplates/partials/encrypted_article.html
文章模板templates/article.html(判断 encrypt 后 include)
前端static/encryption/config.jsadmin.jsvisitor.jscrypto.jsarticle.js
样式static/encryption/admin.cssarticle.css

2.4 构建与 CSP

2.5 测试文章

路径说明
content/00Read_blog_Math/2026-06-03-First Base Chater/数学板块加密试点
content/02Engineer_blog_Debug/2026-06-23-Chrome-ReOpen/Debug 板块加密验证

3. 管理员特权模式

3.1 进入方式

连续点击左上角 #site-sidebar-header(站点图标)6 次

点击次数反馈
第 3–5 次Toast:「再点击 N 次可进入管理员模式」
第 6 次Toast:「你已经是管理员,可浏览所有加密博客啦」
已是管理员鼠标悬停图标显示「你已经是管理员」

状态保存在 sessionStorageblog-encryption-admin-until)。

3.2 有效期(admin_ttl_secs

admin_ttl_secs = 60   # 秒,到期自动恢复访客

3.3 管理员能力


4. 访客模式与随机解密

4.1 默认展示

4.2 随机解密逻辑(static/encryption/visitor.js

visitor_refresh_min = 9
visitor_refresh_max = 20

5. 编辑类按钮门控(交互隐藏)

原则:访客只见只读;编辑入口仅在管理员特权下出现。

位置访客管理员
Nanolog 列表隐藏 ReDeplog、Edit Post、发布按钮显示
看板明细锁定按钮固定「🔒 只读」,不可解锁有效期内可解锁;显示工具栏;截止日 23:00 后变「只读(已过期)」
加密文侧边栏 TOC非管理员隐藏管理员显示

实现:元素加 class encryption-admin-onlyhtml.encryption-admin-active 时由 admin.css 显示。看板逻辑在 kanban-board.js 中额外校验 EncryptionAdmin.isAdminActive()


6. 关联改动(本轮一并收敛)

说明
看板数据源统一为 content/kanban/,构建时内嵌 MD,移除多余 kanban/ 副本
Nanolog 列表宽度sass/nanolog/style.scss 调至与正文同宽
nanolog.js移除不存在的 save-token-btn 控制台警告

7. 配置速查(zola.toml

[extra]
scripts = ["analytic/umami.js"]

[extra.analytics]
service = "umami"
id = "cdf54193-b449-4454-884b-029e82434c32"
exclude_hash = true

[extra.encryption]
enabled = true
algorithm = "AES-GCM"
key = "rocky-blog-dev-key-change-in-production"   # 生产环境请更换
admin_ttl_secs = 60
visitor_refresh_min = 9
visitor_refresh_max = 20

CSP connect-src 需包含:gateway.umami.is(以及主题自动合并的 cloud.umami.is*.umami.dev)。


8. 自测清单


9. 看板列表 / 热力图 · 编辑窗口判定(追加)

9.1 列表页与热力图

说明
页头移除大标题「周计划」;副标题居中加粗;补充「单个看板时间跨度 1 ~ 14 天」
年份 / 月份下拉修复脚本重复加载导致菜单无法展开;月份含全年 + 1–12 月
年度视图1–6 月 / 7–12 月两行;月份块间距 + 虚线分隔
周格填充有效天数 / 7 比例自下而上着色;未满 7 天为部分填充
月份视图切换具体月份后展开为按天网格,直观显示哪些日期纳入看板
验证数据content/kanban/2026-06-22.md(06-22 ~ 06-23,2 天)

涉及文件:templates/kanban_list.htmlstatic/js/kanban-heatmap.jsstatic/css/heatmap.csssass/kanban/style.scss

9.2 只读 / 可编辑判定(截止日 23:00)

原先按日历日比较 week_end,导致截止日当天 0 点起即只读。现改为:

例:截止 06-23,则 6 月 23 日 22:59 仍可编辑,23:00 起变只读。

位置行为
明细页锁定按钮访客:🔒 只读;超期:只读(已过期);管理员且未超期:可锁定 / 解锁
列表剩余天数截止日 23:00 前显示「今天」;当日 23:00 后显示「已截止」

公共逻辑:KanbanRules.isEditableWindow()daysRemainingLabel()static/js/kanban-rules.js);看板页 data-timezonetemplates/kanban.html,列表页在 #kanban-week-list

# zola.toml
[extra]
timezone = "Asia/Shanghai"

参考: daudix.one · Umami 控制台

23 June 2026, 20:00 (CST)