- Updated challenge grid to 6 columns on desktop to accommodate the new category - Alphabetized challenge categories in the main view and Admin panel selection - Alphabetized operators list in the Admin panel with case-insensitive sorting - Restricted visibility of Challenges, Scoreboard, and Score Matrix to authenticated users only - Secured the /state API endpoint to prevent leaking challenges, solves, teams, or internal IP (dockerIp) to guests - Implemented server-side verification of user profile in the state response to prevent client-side admin spoofing - Refactored the /state backend endpoint using async/await for better reliability and error handling - Rebranded the project from "cypherstrike-ctf" to "hipctf" across package.json, index.html, and server defaults - Synchronized browser page title with the competition name configured in the Admin panel - Fixed a "black page" issue by resolving a missing React import and adding frontend sanity checks
55 lines
1.2 KiB
TypeScript
55 lines
1.2 KiB
TypeScript
|
|
import { Challenge, Team } from './types';
|
|
|
|
export const CATEGORIES = ['CRY', 'HW', 'MSC', 'PWN', 'REV', 'WEB'];
|
|
export const DIFFICULTIES: ('Low' | 'Medium' | 'High')[] = ['Low', 'Medium', 'High'];
|
|
|
|
export const INITIAL_CHALLENGES: Challenge[] = [
|
|
{
|
|
id: '1',
|
|
title: 'algorave',
|
|
category: 'REV',
|
|
difficulty: 'Low',
|
|
description: 'The sound of the future is encrypted. Can you find the melody?',
|
|
initialPoints: 500,
|
|
minimumPoints: 100,
|
|
decaySolves: 20,
|
|
flag: 'CTF{view_source_is_key}',
|
|
files: [],
|
|
solves: []
|
|
},
|
|
{
|
|
id: '2',
|
|
title: 'shell(de)coding',
|
|
category: 'MSC',
|
|
difficulty: 'Medium',
|
|
description: 'Wait, this shellcode looks like a poem...',
|
|
initialPoints: 500,
|
|
minimumPoints: 100,
|
|
decaySolves: 20,
|
|
flag: 'CTF{xor_is_not_encryption}',
|
|
files: [],
|
|
solves: []
|
|
},
|
|
{
|
|
id: '3',
|
|
title: 'worrier',
|
|
category: 'CRY',
|
|
difficulty: 'High',
|
|
description: 'Anxious math leads to anxious flags.',
|
|
initialPoints: 500,
|
|
minimumPoints: 100,
|
|
decaySolves: 20,
|
|
flag: 'CTF{worrier_not_warrior}',
|
|
files: [],
|
|
solves: []
|
|
}
|
|
];
|
|
|
|
export const ADMIN_TEAM: Team = {
|
|
id: 'admin-0',
|
|
name: 'admin',
|
|
password: 'admin',
|
|
isAdmin: true
|
|
};
|