GZ::CTF开发日志
GZ::CTF 开发日记
GZ::CTF是一个基于ASP.NET Core开发的CTF比赛平台
16 Mar, 2021
今天正式新建文件夹准备开始做这个工作,目标是制作一个用于校内比赛的CTF Server,参考的代码库主要有H::Judge、hackergame、CTFd以及自己以往开发的有关代码。
下一步计划是做好整体架构设计,明确实现的功能和需求分析。
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
拿到了服务器。问题众多,解决了大半,还剩几个问题待解决。