QCrypt/qcrypt-website

GitHub: QCrypt/qcrypt-website

QCrypt 国际量子密码学会议官方网站源码,基于 Hugo 构建,提供多年度学术会议内容的统一管理与自动化部署。

Stars: 1 | Forks: 1

# QCrypt 2025+ 网站 [![Netlify 状态](https://api.netlify.com/api/v1/badges/4fa2d41c-275c-4d5a-90ed-14db4a9accb5/deploy-status)](https://app.netlify.com/sites/qcrypt-website/deploys) 由 Hugo 驱动的 QCrypt 2025 及后续版本的网站,已上线于 https://qcrypt.net。QCrypt 是一年一度的国际科学会议,展示过去一年量子密码学领域的顶级研究成果。[Hugo](https://gohugo.io/) 是一个快速的静态网站生成器。https://qcrypt.net 由 [netlify](https://www.netlify.com/) 在其 [开源计划](https://www.netlify.com/legal/open-source-policy/) 下慷慨托管 :heart:! 该项目始于 2020 年,并由 [Christian Schaffner](https://github.com/cschaffner) 至今维护。 ## 历史 最初基于来自 https://github.com/GDGToulouse/devfest-theme-hugo 的 Hugo 模板 改编自 cloudnative-amsterdam 团队的分支:https://github.com/cloudnative-amsterdam/public-website 曾用于运行 https://2020.qcrypt.net, https://2021.qcrypt.net, https://2022.qcrypt.net。 自 2023 年起,theme 子模块已直接包含在此 git 仓库中。 为了筹备 2025 年版本,我们设想了一个更长期的解决方案:设立一个主页面,可以在其中添加更多年份的内容。其大致设计参考了 IACR 的旗舰网站,例如 https://eurocrypt.iacr.org/2024, https://eurocrypt.iacr.org/2025, https://crypto.iacr.org/2023/, https://asiacrypt.iacr.org/2024/,以及*在设计上独树一帜的* https://crypto.iacr.org/2024/。 ## 从头开始构建此会议网站 1. 安装 [Hugo](https://gohugo.io/installation/) 和 [Dart Sass](https://gohugo.io/functions/css/sass/#dart-sass) 2. 克隆此仓库: ``` $ git clone https://github.com/QCrypt/qcrypt-website.git ``` 3. 完成了。只需启动 Hugo server 即可查看实时网站! ``` $ cd qcrypt-website $ hugo server ``` 你可以使用 `--ignoreCache` 来忽略本地缓存文件,并使用 `--disableFastRender` 来禁用快速渲染模式(此模式在每次更改时不会重新构建所有文件),这对于调试非常有用。 5. 编辑位于 [/content/](/content/) 子目录中以 `.md` 结尾的 Markdown 源文件来更改网站内容。你可能还需要编辑 [/data/](/data/) 子目录中的 `.json` 和 `.yml` 文件。只要 Hugo server 正在运行,你的更改应该会立即在 http://localhost:1313/ 生效。 你可以通过在命令行中添加 `--bind ip.addr.1.1` 和 `--port 1234` 来更改此默认行为。 6. 使用合适的编辑器(如 [Visual Studio Code](https://code.visualstudio.com/))可以轻松地在所有源文件中进行搜索,并帮助你找到需要进行特定更改时所需编辑的正确文件。 7. 当你对结果满意时,将更改提交到 master 分支。然后,网站将自动部署到 https://qcrypt-website.netlify.com/ 并可通过 https://qcrypt.net 访问。如果你拥有适当的权限,可以在 [netlify](https://app.netlify.com/sites/qcrypt-website/deploys) 上查看部署日志。 ## 自定义主题 相关说明在主题的 [README.md ](https://github.com/QCrypt/qcrypt-website/blob/main/themes/devfest-theme-hugo/README.md) 中有所描述。 ## 高级概述 本网站采用现代 Web 技术构建: * **Hugo**:[Hugo](https://gohugo.io/) 是一个快速的网站构建器,可将简单的文本文件转换为完整的网站。它会监视你内容中的更改,并在你工作时即时更新网站。 * **JamStack 架构**:该网站遵循一种现代方法,即所有页面都是提前创建好的。由于无需在访问者到达时生成页面,这使得网站快速、安全且可靠。了解更多关于 [JamStack](https://jamstack.org/) 的信息。 * **内容管理**:内容使用 [Markdown](https://www.markdownguide.org/) 文件编写,易于编辑和跟踪更改。多人可以通过 [GitHub](https://github.com/) 共同协作开发网站,所有更改都会被安全地存储并可以进行审查。 * **使用 CSS/SASS 进行样式设计**:网站的外观通过 [CSS](https://developer.mozilla.org/en-US/docs/Web/CSS) 和 [SASS](https://sass-lang.com/) 样式文件控制,使得维护一致的视觉外观变得容易。每个会议年份都可以拥有自己的视觉主题,并且网站能在所有屏幕尺寸上良好显示。 * **Netlify 托管**:每当有更改提交到此仓库时,[Netlify](https://www.netlify.com/) 都会自动构建并发布网站。它通过其全球网络确保网站的安全性、快速访问和全球可用性。 这些工具组合创建了一个快速、安全且易于由会议组织者维护的网站。听起来很棒吗?查看 [此引导式讲解](https://github.com/QCrypt/qcrypt-website/tree/main/themes/devfest-theme-hugo#a-guided-walk-through-the-ingredients) 以详细了解其实际运作方式。 ## 基于前几年设置下一个年份 2025 ### 设计 1. 创建一个新 logo,带点绵羊元素的……参见[此处](https://qcrypt.net/2024/history/#websites--logos)寻找灵感。 2. 为主站选择一张背景图片,例如 [2024](/static/images/2024/background-2024.jpg) 或 [2023](/static/images/2023/background-2023.jpg) 3. 制作相关的 banner,例如 [2024](/static/images/2024/banner-2024.jpg) 或 [2023](/static/images/2023/banner-2023.jpg) 4. 挑选相关的主题颜色,如 `#0099cc` 或 `#ac191c`。 ### 为内容创建新的子目录 1. 最简单的方法可能是复制前一年如 [/content/2024](/content/2024) 的整个 content 文件夹,并从中开始调整 2. 在 [/static/images](/static/images) 中创建 2025 子文件夹 3. 将上述图片(logo、背景图、banner)放入此文件夹 ### 向主配置文件 [/hugo.toml](/hugo.toml) 添加信息 4. 在 `[params]` 中,保持当前的 currentYear 和 date 不变。仅当新的 2025 网站准备好时才更改此项。 5. 添加一个 `[params.2025]` 部分并提供所需信息 6. timeanddate_cityid 可以从 https://www.timeanddate.com/worldclock/personal.html 获取,方法是在点击“Share This Personal World Clock”后查看其链接 7. 在 `[menu]` 下,按照 2023 和 2024 的方式创建一个新的 `[[menu.2025]]` 结构。 ### 调整内容文件 1. 检查 [/content/2025](/content/2025) 中的所有 .md 文件以及子目录中的 `_index.md` 文件,并调整 front matter。 2. 将 `menu:` 子条目从 `2024` 更改为 `2025`。 3. 如果你暂时想禁用该页面,请添加 `draft: true`。 4. 通常情况下,当年份作为参数传递时,你可能需要更新它。因此,在 [/content/2025](/content/2025) 下搜索所有出现 2024 的地方,并将正确的那些替换为 2025,这可能是一个很好的策略。 ### 创建新的样式文件 1. 在 [/themes/devfest-theme-hugo/assets/style/] 中,复制 [theme-2024.css](/themes/devfest-theme-hugo/assets/style/theme-2024.css) 并将其重命名为 `theme-2025.css` 2. 调整最后一行,将 `root` 中的 `--primary:` 变量设置为你之前挑选的主题颜色。 ### 需要协助的步骤 1. 在 https://github.com/orgs/QCrypt/teams 上,创建一个新团队 ```QCrypt 2025``` 2. 添加管理员 https://github.com/orgs/QCrypt/teams/qcrypt-2025/members 3. 添加仓库 https://github.com/orgs/QCrypt/teams/qcrypt-2025/repositories 4. 在 netlify https://app.netlify.com/teams/qcrypt/members:将新管理员作为协作者添加到 qcrypt-website 5. 在 https://api.slack.com/apps/A01P06YNCCU/incoming-webhooks 上,创建一个新的 Webhook(位于页面底部) 6. 将 Webhook URL 粘贴到 netlify:https://app.netlify.com/sites/qcrypt2024/settings/deploys(用于部署成功和部署失败) 7. 将管理员添加到 Slack 频道 8. 我们可能需要新的电子邮件地址,例如 2025@qcrypt.net 和 pcchairs2025@qcrypt.net。 9. 将新管理员与去年的管理员对接 10. 是否到了更新 hugo 版本的时候?检查需要更新的内容。 ### 更新年份 一旦新站点准备好被“升级”为当前年份,请进行以下更改: 1. 在 hugo.toml 中的 [params] 下,更改 currentYear 和 date 2. 在 [[server.redirects]] 中,将 forward 更改为 = "/2025/" 3. 在 https://github.com/QCrypt/qcrypt-website/blob/main/netlify.toml 中,同样调整 redirect ## 后续更新 ### 征文、场地更新、注册 1. 调整 [/content/2025/](/content/2025/) 中相应的 `.md` 文件,可能需要将 "draft: false" 改回,并基于上一年的内容进行调整 2. **对网站的所有更改都应记录在类似 https://qcrypt.net/2023/ 上的“Website Updates”表格中**,以方便网站访问者 3. 主站上的行动号召按钮可以根据新闻动态进行调整。 ### 已知教程、受邀演讲者、小组成员 1. 更新 https://github.com/QCrypt/qcrypt-website/tree/main/content/2025/speakers 中的 `.md` 文件 2. 从 images 子目录中删除以前的图片,上传新图片,并确保演讲者的 `photoURL` 字段指向该位置。 3. 为 `.md` 文件使用合理的名称,如 `eleni_diamanti.md` 4. 为每位演讲者在 https://github.com/QCrypt/qcrypt-website/tree/main/content/2025/sessions 中创建相应的 session,参考前几年的示例。 ### 已知录用的论文和海报 1. 从 PC chair 获取从 hotcrp 导出的录用论文 JSON 文件 2. 运行 [此 Python 脚本](https://github.com/QCrypt/qcrypt-website/blob/main/static/python-scripts/sanitize_hotcrp_json.py) 清理输出,移除所有电子邮件、pc_conflicts 等。 3. 将生成的文件作为 accepted-papers-2025.json 放入 [data](https://github.com/QCrypt/qcrypt-website/tree/main/data) 中 对录用海报的列表进行类似处理。 ### 创建日程表 1. 复制 https://github.com/QCrypt/qcrypt-website/blob/main/data/schedule-2024.yml 并命名为 schedule-2025.yml 2. 确保所有 session 均存在 3. 在包含报告论文的 session 中调整录用论文的 id ## 各内容板块的详细说明 请查阅 [Hugo 文档](https://gohugo.io/documentation/),ChatGPT 也是相当精通的。 Hugo 最喜欢的[内容格式](https://gohugo.io/content-management/formats/)是 Markdown,我们在整个网站中都使用它。对于[数据源](https://gohugo.io/content-management/data-sources/)和配置文件,Hugo 支持 TOML、YAML、JSON、CSV、XML。我们仅使用前三种。 每个内容文件都包含一个 [front matter](https://gohugo.io/content-management/front-matter/),用于指定内容的元数据,通常采用 YAML 格式。重要参数包括 title、year、type、draft、menu。它们会影响内容的显示方式。 最初的 Hugo 模板支持多语言(法语/英语),但我们在此期间放弃了此功能,不过,那些时期的痕迹依然存在。 ### Hugo Shortcodes ### 文件名 ### 头部的菜单 参见 Hugo 文档中的 [菜单](https://gohugo.io/content-management/menus/)。我们混合使用了“在配置中定义”和“在 front matter 中定义”的菜单方式。 顶部菜单的基本结构参考自 IACR 旗舰会议网站(如 https://eurocrypt.iacr.org/2024)。基本菜单结构定义在 [/hugo.toml](/hugo.toml) 的 [menu] 下。我们为每年设置了菜单层级,但这些基本条目基本上在每年都应保持一致。“Technical Program”和“Attend”项不对应实际的页面,它们被用作其他页面的父级菜单项。 菜单中的其他项在内容页面的 front matter 中定义。 ### 页脚 页脚的内容在 [/data/footer.yml](/data/footer.yml) 中指定。“社交分享”选项目前已禁用,“社交关注”选项为 Twitter 和 YouTube。 页脚很少需要更改。它会自动链接到当前年份的章程、历史和行为准则。只需确保 currentYear 的内容目录中也包含以下三个文件: * `charter.md` * `history.md` * `code-of-conduct.md` 从上一年复制它们并确保它们是最新的! Netlify 开源计划要求链接到行为准则,因此请勿移除该部分! ### 主页 每年的主页面是 `/content/YEAR/_index.html`,例如 [/content/2024/_index.html](/content/2024/_index.html)。其 front matter 中包含 `type: home` 和 `layout: home`。 这是唯一一个顶部没有 banner 的页面,因为它以一个 [jumbo 元素](https://github.com/QCrypt/qcrypt-website/blob/main/themes/devfest-theme-hugo/README.md#jumbo-bloc) 开始,该元素接受背景图片、标签和 logo 作为参数。其内容日期,以及各种使用按钮链接的行动号召,而这些按钮链接又接受 label、url、icon 等参数。 接下来的元素是: * home-info:关于 QCrypt 的一些基本信息 * home-keydates:两个最重要的表格:一个是关键日期,另一个是网站更新,参见 [2023](https://qcrypt.net/2023/) 中的示例。同样,这是受 [IACR 页面](https://eurocrypt.iacr.org/2023/) 启发。 * home-location:场地的图片、地址和坐标 * partners:赞助商列表,或征集赞助 ### 团队 这是首要需要更新和展示的内容页面之一。请按照前几年的示例进行操作。 所有委员会都有自己的子文件夹,并且有一个用于存放所有肖像照片的图片文件夹。确保 photoURL front matter 条目指向正确的照片。在创建和命名新文件时,请遵循[合理的约定](#file-names)。 ### 合作伙伴 / 赞助商 子目录名为 `partners`,但在网站上,我们通常称其为“赞助商 (Sponsors)”。针对不同类别设有子文件夹。Logo 应放入 `logos/` 子文件夹中,并且 `logo` front matter 条目应引用该 logo 文件。 ### 演讲者 & Session 与[团队](#Team)的管理非常相似。 确保为所有演讲者创建 [session](/content/2024/sessions/)。在 session 的 front matter(例如[此示例](/content/2023/sessions/tutorial_yuen.md))中,指定一个或多个演讲者,引用演讲者 front matter(例如[此示例](/content/2023/speakers/tutorial/yuen.md))中的 `key` 条目(如 `yuen`)。 session 的 front matter 应指定 `year`、`format`(例如 `contributed`、`invited`、`industry`、`tutorial` 等)。为了正确渲染 session,`type` 必须为 `sessions`。 对于包含报告演讲的 session,一旦知晓论文 id,请进行指定。 这里有[演讲者概览](/content/2025/speakers/_index.html)(例如 [2024](https://qcrypt.net/2024/speakers/)),以及[session 概览](/content/2025/sessions/_index.html)(例如 [2024](https://qcrypt.net/2024/sessions/)),两者在准备好后都应添加到“Technical Program”菜单中。 ### 日程表 一旦日程表制定完毕,像前几年一样将 session 名称和开始时间插入到 [/data/schedule-2025.yml](/data/schedule-2025.yml) 中。日程表将随后自动生成,并可以通过在 [/content/2025/schedule/_index.html](/content/2025/schedule/_index.html) 中设置 `draft: false` 将其添加到“Technical Program”子菜单中 日程表页面由几个 session 组成。每个 session 包含以下元素: |元素|必需|描述| |---|---|---| |title|是|session 的标题| |format|否|session 的格式,例如 `contributed`、`invited`、`industry`、`tutorial` 等。| |type|是|应为 `sessions`| |year|是|session 的年份| |papers|否|录用论文或海报的 paper id(一个或多个)。Stuff session 可以留空| |chair|否|该 session 的主持| |draft|是|未发布的 session 应为 `false`,已发布的应为 `true`| |tags|否|session 的标签,这将影响网站中 session 元素的 class|
标签:Homebrew安装, Hugo, Python安全, 学术会议, 网站源码, 逆向工具, 量子密码学, 防御加固, 静态网站