GZ::CTF 开发日记

GZ::CTF是一个基于ASP.NET Core开发的CTF比赛平台

  • 16 Mar, 2021

    今天正式新建文件夹准备开始做这个工作,目标是制作一个用于校内比赛的CTF Server,参考的代码库主要有H::JudgehackergameCTFd以及自己以往开发的有关代码。

    下一步计划是做好整体架构设计,明确实现的功能和需求分析。

  • 17 Mar, 2021

    今天考虑了一下计分和flag验证的方法和系统,做了个基础的设计。MVC三大块也有了基本的框架,等待讨论和补充。
    确认了Hackergame的几个flag的末尾HexCode是用户特异的,进而可以得到有没有抄袭等现象,这个想法很聪明,借鉴了。

  • 18 Mar, 2021

    设计好了GZ::CTF Server的数据库,做好了EFCore的实体关系绑定。

  • 19 Mar, 2021

    做好了用户登录,注册以及第一次实现了验证邮件的发送。
    推荐将邮件内容作为模板保存,这是我第一次使用”嵌入的资源“,用起来效果很不错。
    Identity比想象中的好用太多了,也不知道之前自己那么畏惧它是因为什么。

  • 20 Mar, 2021

    和学长一起完善了几个数据对象的属性,如题目的难度、分类等。
    探讨了一部分接口的设计方案,完成了找回密码的相关页面和后端设计。

  • 21 Mar, 2021

    编写了有关Flag校验的逻辑,更改了一些代码为更加高效的样子。

  • 22 Mar, 2021

    添加了一血的判定和抄袭者的检查,添加了比赛分数的变化,并添加了比赛的“置顶”属性,用以展示主页面,在考虑是否将比赛与数据库分离,独立存放为Markdown等。绝大部分代码逻辑已经实现。

  • 25 Mar, 2021

    写了超多的代码,也开始做前端了,今天一天都在搞SignalR,还在搞……

  • 26 Mar, 2021

    又写了超多的代码,SignalR做好了,成功实现了日志主动推送。
    给NLog添加一个Target,并且将其初始化时静态存储在Instance属性中,然后添加一个Singleton的Service来保存SignalR Hub的上下文,并且让那个Hub加载的时候带着这个Service实例化,进而实现推送功能。

    这个过程中翻阅了很久SignalR的文档,查了很多博客和stackoverflow,才终于成功实现orz

    晚上和GrakePCH写了很多的前端和交互,持续工作,准备进入最核心功能的实现,另外是时候看看Markdown的渲染怎么做了。

  • 27 Mar, 2021

    今天大量更新了一些代码,对于Markdown的渲染决定使用Markdig库进行,同时使用prismjs进行前端的代码块渲染,公告的编辑已经实现,同时优化了很多的UI,继续往前推进。

    下一步是比赛的编辑、新建;题目的编辑、新建;广播的删除;通知的增删改查;比赛的显示;排行榜的显示;题目的显示及提交。
    对于排行榜,考虑使用echarts或者chartjs进行阶梯图绘制。排名、通知需要进行利用SignalR的实时推送。

  • 28 Mar, 2021

    今天我本人写了很少量的代码,因为忙于其他事情。添加了比赛的密码访问机制,并且实现了输入一次之后可以自动保存。
    GrakePCH写了不少前端,更新了登录、注册、找回密码等界面的UI样式。

  • 28 Mar, 2021

    因个人原因,计划停止开发两天,进行调整。

  • 31 Mar, 2021

    添加了广播的发布按钮、做了一些架构调整和优化,开始着手制作比赛详情页面的内容,Moke和比赛的密码验证做了微调,测试了多端同时推送信息的效果。

  • 1 Apr, 2021

    测试了Docker部署的可行性,写了Dockerfile,在阿里云容器服务上测试了一下。

  • 2 Apr, 2021

    题目列表的UI完工了,于是我也顺便将它的后端和适配完工了。
    晚上改进了一些代码,顺便把比赛密码key的明文显示改为了用户特异的一串Hex。

  • 3 Apr, 2021

    完工题目编辑界面的UI,去除比赛的Announcement表,减少工作量。

  • 6,7 Apr, 2021

    拿到了服务器。问题众多,解决了大半,还剩几个问题待解决。