mirror of
https://github.com/Without-Proper-Instructions/GoatCTF
synced 2025-10-08 07:40:46 +00:00
Merge pull request #22 from GoatCTF/feature-admin
[Fix #19] Feature admin
This commit is contained in:
commit
d75ec164e0
@ -1,10 +1,13 @@
|
||||
from django.contrib import admin
|
||||
from core.models import Challenge
|
||||
from core.models import Challenge, Team, Player, Solution
|
||||
from core.forms import ChallengeAdminForm
|
||||
|
||||
|
||||
class ChallengeAdmin(admin.ModelAdmin):
|
||||
fields = ['points', 'category', 'flag', 'description_markdown']
|
||||
fields = ['name', 'points', 'category', 'flag', 'description_markdown']
|
||||
form = ChallengeAdminForm
|
||||
|
||||
admin.site.register(Challenge, ChallengeAdmin)
|
||||
admin.site.register(Team)
|
||||
admin.site.register(Player)
|
||||
admin.site.register(Solution)
|
||||
|
@ -7,9 +7,21 @@ from core.settings import CHALLENGE_NAME_LENGTH, FLAG_LENGTH, TEAM_NAME_LENGTH
|
||||
|
||||
class Challenge(models.Model):
|
||||
"""A challenge represents an individual problem to be solved."""
|
||||
|
||||
CATEGORY_CHOICES = (
|
||||
('be', 'Beer'),
|
||||
('cr', 'Crypto'),
|
||||
('ex', 'Exploitation'),
|
||||
('fo', 'Forensics'),
|
||||
('rn', 'Recon'),
|
||||
('re', 'Reversing'),
|
||||
('we', 'Web'),
|
||||
('mi', 'Miscellaneous'),
|
||||
)
|
||||
|
||||
name = models.CharField(max_length=CHALLENGE_NAME_LENGTH)
|
||||
points = models.IntegerField()
|
||||
category = models.CharField(max_length=2)
|
||||
category = models.CharField(max_length=2, choices=CATEGORY_CHOICES)
|
||||
flag = models.CharField(max_length=FLAG_LENGTH)
|
||||
description_markdown = models.TextField()
|
||||
description_html = models.TextField()
|
||||
@ -18,16 +30,23 @@ class Challenge(models.Model):
|
||||
self.description_html = markdown.markdown(self.description_markdown)
|
||||
super(Challenge, self).save(*args, **kwargs)
|
||||
|
||||
def __str__(self):
|
||||
return "{} {}: {}".format(
|
||||
self.get_category_display(), self.points, self.name)
|
||||
|
||||
|
||||
class Team(models.Model):
|
||||
"""A team is a collection of players."""
|
||||
name = models.CharField(max_length=TEAM_NAME_LENGTH)
|
||||
creator = models.ForeignKey("Player", related_name="created_teams")
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
|
||||
class Player(User):
|
||||
"""A player is a user with a team."""
|
||||
team = models.ForeignKey("Team")
|
||||
team = models.ForeignKey("Team", blank=True, null=True)
|
||||
|
||||
|
||||
class Solution(models.Model):
|
||||
@ -35,3 +54,6 @@ class Solution(models.Model):
|
||||
challenge = models.ForeignKey("Challenge")
|
||||
solved_at = models.DateTimeField(auto_now_add=True)
|
||||
solver = models.ForeignKey("Player")
|
||||
|
||||
def __str__(self):
|
||||
return "{} by {}".format(self.challenge, self.solver)
|
||||
|
Loading…
x
Reference in New Issue
Block a user