From 0f0f566e1806a4005b3463e4328b163c3cda9148 Mon Sep 17 00:00:00 2001 From: Sean Date: Tue, 7 May 2024 20:01:15 -0700 Subject: [PATCH 01/12] switch page language to english to avoid the google translate thing --- src/GZCTF/ClientApp/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/GZCTF/ClientApp/index.html b/src/GZCTF/ClientApp/index.html index 1770ea71..d2947e94 100644 --- a/src/GZCTF/ClientApp/index.html +++ b/src/GZCTF/ClientApp/index.html @@ -1,5 +1,5 @@ - + From 4071771a197817d29862e53ef9f4c90a46db1125 Mon Sep 17 00:00:00 2001 From: Sean Date: Thu, 9 May 2024 15:54:30 -0700 Subject: [PATCH 02/12] link to upstream repo --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 4b3e5c40..321ac455 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,8 @@ # GZ::CTF +[Upstream repository (GZTimeWalker/GZCTF)](https://github.com/GZTimeWalker/GZCTF) + [![publish](https://github.com/GZTimeWalker/GZCTF/actions/workflows/ci.yml/badge.svg)](https://github.com/GZTimeWalker/GZCTF/actions/workflows/ci.yml) ![version](https://img.shields.io/github/v/release/GZTimeWalker/GZCTF?include_prereleases&label=version) ![license](https://img.shields.io/github/license/GZTimeWalker/GZCTF?color=FF5531) From 12e2159418172eedfe4320be98bce55df5dc08d8 Mon Sep 17 00:00:00 2001 From: Sean Date: Thu, 9 May 2024 16:31:15 -0700 Subject: [PATCH 03/12] Switch branding to SDCTF --- src/GZCTF/ClientApp/.env | 2 +- src/GZCTF/ClientApp/index.html | 9 ++-- src/GZCTF/ClientApp/public/favicon.png | Bin 0 -> 54626 bytes .../ClientApp/src/components/AppFooter.tsx | 4 +- .../ClientApp/src/components/LogoHeader.tsx | 5 +- .../src/components/icon/MainIcon.tsx | 50 +++++------------- src/GZCTF/ClientApp/src/pages/About.tsx | 4 +- .../ClientApp/src/utils/ThemeOverride.ts | 20 +++---- 8 files changed, 34 insertions(+), 60 deletions(-) create mode 100644 src/GZCTF/ClientApp/public/favicon.png diff --git a/src/GZCTF/ClientApp/.env b/src/GZCTF/ClientApp/.env index c796058a..5761d95c 100644 --- a/src/GZCTF/ClientApp/.env +++ b/src/GZCTF/ClientApp/.env @@ -1 +1 @@ -VITE_BACKEND_URL="http://localhost:55000/" +VITE_BACKEND_URL="https://ctf.sdc.tf/" diff --git a/src/GZCTF/ClientApp/index.html b/src/GZCTF/ClientApp/index.html index 3ddbb8c1..6f02b40c 100644 --- a/src/GZCTF/ClientApp/index.html +++ b/src/GZCTF/ClientApp/index.html @@ -3,10 +3,11 @@ - - - - GZ::CTF + + + + + SDCTF 2024
diff --git a/src/GZCTF/ClientApp/public/favicon.png b/src/GZCTF/ClientApp/public/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..bfe839f62a60f4bf0e277f18dd71b1b21d999bcc GIT binary patch literal 54626 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 wBqSE_b?^evJpcQ`|6=KXS>yj%dAJL3i>NfhrSE {
- + - GZ::CTF + SDCTF diff --git a/src/GZCTF/ClientApp/src/components/LogoHeader.tsx b/src/GZCTF/ClientApp/src/components/LogoHeader.tsx index d5a71fe7..d1aad110 100644 --- a/src/GZCTF/ClientApp/src/components/LogoHeader.tsx +++ b/src/GZCTF/ClientApp/src/components/LogoHeader.tsx @@ -35,10 +35,7 @@ export const LogoHeader = forwardRef((props, ref) => return ( - - {config?.title ?? 'GZ'} - <span className={classes.brand}>::</span>CTF - + {config?.title ?? 'GZ'}CTF ) }) diff --git a/src/GZCTF/ClientApp/src/components/icon/MainIcon.tsx b/src/GZCTF/ClientApp/src/components/icon/MainIcon.tsx index 7ce54508..3db5144f 100644 --- a/src/GZCTF/ClientApp/src/components/icon/MainIcon.tsx +++ b/src/GZCTF/ClientApp/src/components/icon/MainIcon.tsx @@ -10,43 +10,19 @@ const MainIcon: FC = (props: MainIconProps) => { const { ignoreTheme, ...svgProps } = props return ( - - {ignoreTheme ? ( - - ) : ( - - )} - - - - - + + + ) } diff --git a/src/GZCTF/ClientApp/src/pages/About.tsx b/src/GZCTF/ClientApp/src/pages/About.tsx index c208c0da..714b1a90 100644 --- a/src/GZCTF/ClientApp/src/pages/About.tsx +++ b/src/GZCTF/ClientApp/src/pages/About.tsx @@ -20,7 +20,7 @@ const About: FC = () => {
- GZ::CTF + SDCTF > {config?.slogan ?? t('common.content.about.slogan')} @@ -55,7 +55,7 @@ const About: FC = () => { }} className={classes.title} > - GZ::CTF + SDCTF Date: Thu, 9 May 2024 16:45:06 -0700 Subject: [PATCH 04/12] get rid of all colons for reals --- src/GZCTF/ClientApp/src/utils/usePageTitle.ts | 2 +- src/GZCTF/Services/MailSender.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/GZCTF/ClientApp/src/utils/usePageTitle.ts b/src/GZCTF/ClientApp/src/utils/usePageTitle.ts index a57b52ef..bfe439bb 100644 --- a/src/GZCTF/ClientApp/src/utils/usePageTitle.ts +++ b/src/GZCTF/ClientApp/src/utils/usePageTitle.ts @@ -4,7 +4,7 @@ import { useConfig } from '@Utils/useConfig' export const usePageTitle = (title?: string) => { const { config, error } = useConfig() - const platform = error ? 'GZ::CTF' : `${config?.title ?? 'GZ'}::CTF` + const platform = error ? 'GZ::CTF' : `${config?.title ?? 'GZ'}CTF` useDocumentTitle( typeof title === 'string' && title.trim().length > 0 ? `${title} - ${platform}` : platform diff --git a/src/GZCTF/Services/MailSender.cs b/src/GZCTF/Services/MailSender.cs index 0bb20bbe..72174127 100644 --- a/src/GZCTF/Services/MailSender.cs +++ b/src/GZCTF/Services/MailSender.cs @@ -268,5 +268,5 @@ public class MailContent( /// /// 平台名称 /// - public string Platform { get; } = $"{globalConfig.Value.Title}::CTF"; + public string Platform { get; } = $"{globalConfig.Value.Title}CTF"; } From d366b86bf5df76fe93a57304b749861012625a7e Mon Sep 17 00:00:00 2001 From: Sean Date: Thu, 9 May 2024 16:47:58 -0700 Subject: [PATCH 05/12] Rename posts -> announcements, remove About page --- .../ClientApp/src/components/AppNavbar.tsx | 5 +++-- .../ClientApp/src/locales/en_US/common.json | 2 +- .../ClientApp/src/locales/en_US/post.json | 22 +++++++++---------- 3 files changed, 15 insertions(+), 14 deletions(-) diff --git a/src/GZCTF/ClientApp/src/components/AppNavbar.tsx b/src/GZCTF/ClientApp/src/components/AppNavbar.tsx index 9fe0292c..a1d08a9a 100644 --- a/src/GZCTF/ClientApp/src/components/AppNavbar.tsx +++ b/src/GZCTF/ClientApp/src/components/AppNavbar.tsx @@ -14,6 +14,7 @@ import { createStyles, getStylesRef } from '@mantine/emotion' import { mdiAccountCircleOutline, mdiAccountGroupOutline, + mdiBullhornOutline, mdiCached, mdiFlagOutline, mdiHomeVariantOutline, @@ -133,10 +134,10 @@ const AppNavbar: FC = () => { const items: NavbarItem[] = [ { icon: mdiHomeVariantOutline, label: 'common.tab.home', link: '/' }, - { icon: mdiNoteTextOutline, label: 'common.tab.post', link: '/posts' }, + { icon: mdiBullhornOutline, label: 'common.tab.post', link: '/posts' }, { icon: mdiFlagOutline, label: 'common.tab.game', link: '/games' }, { icon: mdiAccountGroupOutline, label: 'common.tab.team', link: '/teams' }, - { icon: mdiInformationOutline, label: 'common.tab.about', link: '/about' }, + // { icon: mdiInformationOutline, label: 'common.tab.about', link: '/about' }, { icon: mdiWrenchOutline, label: 'common.tab.admin', link: '/admin/games', admin: true }, ] diff --git a/src/GZCTF/ClientApp/src/locales/en_US/common.json b/src/GZCTF/ClientApp/src/locales/en_US/common.json index 0f478d3c..12888325 100644 --- a/src/GZCTF/ClientApp/src/locales/en_US/common.json +++ b/src/GZCTF/ClientApp/src/locales/en_US/common.json @@ -93,7 +93,7 @@ "admin": "Admin", "game": "Games", "home": "Home", - "post": "Posts", + "post": "Announcements", "team": "Team", "theme": { "dark": "dark mode", diff --git a/src/GZCTF/ClientApp/src/locales/en_US/post.json b/src/GZCTF/ClientApp/src/locales/en_US/post.json index 3f3eccd9..a4436371 100644 --- a/src/GZCTF/ClientApp/src/locales/en_US/post.json +++ b/src/GZCTF/ClientApp/src/locales/en_US/post.json @@ -7,27 +7,27 @@ "summary": "Summary" }, "title": { - "index": "Posts" + "index": "Announcements" }, "button": { - "new": "New Post", - "edit": "Edit Post", - "goto": "Go to Post", - "save": "Save Post", - "delete": "Delete Post" + "new": "New Announcement", + "edit": "Edit Announcement", + "goto": "Go to Announcement", + "save": "Save Announcement", + "delete": "Delete Announcement" }, "content": { "metadata": "{{author}} published on {{date}}", "pinned": "[Pinned]", "details": "View Details", - "delete": "Are you sure you want to delete post {{title}}?", + "delete": "Are you sure you want to delete announcement {{title}}?", "updated": { - "title": "Post has been changed", - "content": "The post has been changed. Save it?" + "title": "Announcement has been changed", + "content": "The announcement has been changed. Save it?" } }, "notification": { - "saved": "Post has been saved", - "created": "Post has been created" + "saved": "Announcement has been saved", + "created": "Announcement has been created" } } From 88b8d95ffdddb10c8234854cc6e1d8b8e1e076ca Mon Sep 17 00:00:00 2001 From: Sean Date: Thu, 9 May 2024 20:57:56 -0700 Subject: [PATCH 06/12] better mobile support don't remove features from mobile, even if it breaks the site --- .../ClientApp/src/components/AppHeader.tsx | 30 ++++++++++--- .../ClientApp/src/components/IconTabs.tsx | 2 +- .../ClientApp/src/components/TeamCard.tsx | 2 +- .../ClientApp/src/components/TeamRank.tsx | 44 +++++++++---------- .../ClientApp/src/components/WithNavbar.tsx | 2 +- src/GZCTF/ClientApp/src/pages/Index.tsx | 36 +++++++-------- .../ClientApp/src/pages/games/[id]/Index.tsx | 13 +++--- .../src/pages/posts/[postId]/edit.tsx | 17 +++---- 8 files changed, 76 insertions(+), 70 deletions(-) diff --git a/src/GZCTF/ClientApp/src/components/AppHeader.tsx b/src/GZCTF/ClientApp/src/components/AppHeader.tsx index cc67d484..110546eb 100644 --- a/src/GZCTF/ClientApp/src/components/AppHeader.tsx +++ b/src/GZCTF/ClientApp/src/components/AppHeader.tsx @@ -3,7 +3,10 @@ import { createStyles } from '@mantine/emotion' import { mdiAccountCircleOutline, mdiAccountGroupOutline, + mdiBullhornOutline, mdiCached, + mdiFlagOutline, + mdiHomeVariantOutline, mdiLogout, mdiTranslate, mdiWeatherNight, @@ -94,6 +97,27 @@ const AppHeader: FC = () => { {user && !error ? ( <> + } + > + {t('common.tab.home')} + + } + > + {t('common.tab.post')} + + } + > + {t('common.tab.game')} + { > {t('common.tab.account.profile')} - } - > - {t('common.tab.account.clean_cache')} - = (props) => { )) return ( - + {aside} {withIcon && ( = (props) => { - + {team.name?.slice(0, 1) ?? 'T'} diff --git a/src/GZCTF/ClientApp/src/components/TeamRank.tsx b/src/GZCTF/ClientApp/src/components/TeamRank.tsx index 71229c98..98673d4d 100644 --- a/src/GZCTF/ClientApp/src/components/TeamRank.tsx +++ b/src/GZCTF/ClientApp/src/components/TeamRank.tsx @@ -60,7 +60,7 @@ const TeamRank: FC = (props) => { - + {teamInfo?.rank?.name?.slice(0, 1) ?? 'T'} @@ -105,28 +105,26 @@ const TeamRank: FC = (props) => { - {!isMobile && ( - } - variant="unstyled" - onClick={() => { - clipboard.copy(teamInfo?.teamToken) - showNotification({ - color: 'teal', - message: t('team.notification.token.copied'), - icon: , - }) - }} - styles={{ - innerInput: { - cursor: 'copy', - fontFamily: theme.fontFamilyMonospace, - }, - }} - /> - )} + } + variant="unstyled" + onClick={() => { + clipboard.copy(teamInfo?.teamToken) + showNotification({ + color: 'teal', + message: t('team.notification.token.copied'), + icon: , + }) + }} + styles={{ + innerInput: { + cursor: 'copy', + fontFamily: theme.fontFamilyMonospace, + }, + }} + /> ) diff --git a/src/GZCTF/ClientApp/src/components/WithNavbar.tsx b/src/GZCTF/ClientApp/src/components/WithNavbar.tsx index 419aa518..cd5854e9 100644 --- a/src/GZCTF/ClientApp/src/components/WithNavbar.tsx +++ b/src/GZCTF/ClientApp/src/components/WithNavbar.tsx @@ -40,7 +40,7 @@ const WithNavBar: FC = ({ const isMobile = useIsMobile() return ( - + { ))} - {!isMobile && ( - - )} + diff --git a/src/GZCTF/ClientApp/src/pages/games/[id]/Index.tsx b/src/GZCTF/ClientApp/src/pages/games/[id]/Index.tsx index 673a89ff..369219e9 100644 --- a/src/GZCTF/ClientApp/src/pages/games/[id]/Index.tsx +++ b/src/GZCTF/ClientApp/src/pages/games/[id]/Index.tsx @@ -213,14 +213,11 @@ const GameDetail: FC = () => { {t('game.button.leave')} )} - {status === ParticipationStatus.Accepted && - started && - !isMobile && - (!finished || game?.practiceMode) && ( - - )} + {status === ParticipationStatus.Accepted && started && (!finished || game?.practiceMode) && ( + + )} ) diff --git a/src/GZCTF/ClientApp/src/pages/posts/[postId]/edit.tsx b/src/GZCTF/ClientApp/src/pages/posts/[postId]/edit.tsx index 59b1ea5d..7892a3cc 100644 --- a/src/GZCTF/ClientApp/src/pages/posts/[postId]/edit.tsx +++ b/src/GZCTF/ClientApp/src/pages/posts/[postId]/edit.tsx @@ -160,17 +160,12 @@ const PostEdit: FC = () => { - {!isMobile && ( - - {`> ${postId === 'new' ? t('post.button.new') : t('post.button.edit')}`} - - )} + + {`> ${postId === 'new' ? t('post.button.new') : t('post.button.edit')}`} + {postId?.length === 8 && ( <> From a9bd9b9df261bc8e54c870fdd224c67a697b1588 Mon Sep 17 00:00:00 2001 From: xia0o0o0o <22996989+KpwnZ@users.noreply.github.com> Date: Thu, 9 May 2024 22:00:21 -0700 Subject: [PATCH 07/12] ci: push to ghcr --- .github/workflows/ci.yml | 7 ------- 1 file changed, 7 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4051e18b..0e127a55 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -51,12 +51,6 @@ jobs: - name: Docker setup Buildx uses: docker/setup-buildx-action@v3 - - name: Login to Docker Hub - uses: docker/login-action@v3 - with: - username: gztime - password: ${{ secrets.DOCKER_PASSWORD }} - - name: Login to GitHub Container Registry uses: docker/login-action@v3 with: @@ -70,7 +64,6 @@ jobs: with: images: | ghcr.io/${{ github.repository_owner }}/${{ github.event.repository.name }}/gzctf - gztime/gzctf flavor: | latest=${{ startsWith(github.ref, 'refs/tags/v') && !contains(github.ref, '-') }} tags: | From 355b71ed0e5ab28b50340778e2a7b7786eec7623 Mon Sep 17 00:00:00 2001 From: xia0o0o0o <22996989+KpwnZ@users.noreply.github.com> Date: Thu, 9 May 2024 22:06:01 -0700 Subject: [PATCH 08/12] chore: don't prune for now --- .github/workflows/ci.yml | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0e127a55..3a9558a9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -80,18 +80,3 @@ jobs: labels: ${{ steps.meta.outputs.labels }} platforms: linux/amd64,linux/arm64 push: true - - - name: Prune old packages - uses: vlaurin/action-ghcr-prune@v0.6.0 - with: - dry-run: false - token: ${{ secrets.PACKAGE_TOKEN }} - container: ${{ github.event.repository.name }}/gzctf - keep-tags-regexes: ^v\d+\.\d+\.\d+$ - prune-tags-regexes: ^[0-9a-f]{6,40} - keep-tags: | - latest - main - develop - keep-last: 20 - prune-untagged: false From 2416726a18cd02234895012277a637e5deb27888 Mon Sep 17 00:00:00 2001 From: Sean Date: Thu, 9 May 2024 22:13:11 -0700 Subject: [PATCH 09/12] Make challenges list work on mobile --- .../src/components/ChallengePanel.tsx | 22 ++++++++----------- .../src/components/GameNoticePanel.tsx | 4 ++-- .../src/pages/games/[id]/Challenges.tsx | 13 +++++++++-- 3 files changed, 22 insertions(+), 17 deletions(-) diff --git a/src/GZCTF/ClientApp/src/components/ChallengePanel.tsx b/src/GZCTF/ClientApp/src/components/ChallengePanel.tsx index c25e3a3f..693f34c0 100644 --- a/src/GZCTF/ClientApp/src/components/ChallengePanel.tsx +++ b/src/GZCTF/ClientApp/src/components/ChallengePanel.tsx @@ -25,6 +25,7 @@ import ChallengeDetailModal from '@Components/ChallengeDetailModal' import Empty from '@Components/Empty' import WriteupSubmitModal from '@Components/WriteupSubmitModal' import { useChallengeTagLabelMap, SubmissionTypeIconMap } from '@Utils/Shared' +import { useIsMobile } from '@Utils/ThemeOverride' import { useGame, useGameTeamInfo } from '@Utils/useGame' import { ChallengeInfo, ChallengeTag, SubmissionType } from '@Api' @@ -63,16 +64,12 @@ const ChallengePanel: FC = () => { const challengeTagLabelMap = useChallengeTagLabelMap() const { t } = useTranslation() + const isMobile = useIsMobile(1300) + // skeleton for loading if (!challenges) { return ( - + {Array(10) .fill(null) @@ -88,7 +85,6 @@ const ChallengePanel: FC = () => { pt={0} spacing="sm" pos="relative" - w="calc(100% - 9rem)" cols={{ base: 3, w18: 4, w24: 6, w30: 8, w36: 10, w42: 12, w48: 14 }} > {Array(8) @@ -139,9 +135,9 @@ const ChallengePanel: FC = () => { wrap="nowrap" justify="space-between" align="flex-start" - miw="calc(100% - 20rem)" + style={{ flex: '100% 1' }} > - + {game?.writeupRequired && ( <>