+
Skip to content

Move enabling challenge server to settings #269

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Apr 16, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 46 additions & 1 deletion src/andromeda/tests.py
Original file line number Diff line number Diff line change
@@ -1 +1,46 @@
# Create your tests here.
from django.urls import reverse
from rest_framework.test import APITestCase
from config import config

from team.tests import TeamSetupMixin
from requests.exceptions import ConnectionError


class AndromedaTestCase(TeamSetupMixin, APITestCase):
def test_get_instance_disabled_challenge_server(self):
with self.settings(
CHALLENGE_SERVER_ENABLED=False,
):
self.client.force_authenticate(user=self.user)
response = self.client.get(reverse("get-instance", args=["1"]))
self.assertContains(response, "challenge_server_disabled", status_code=403)

def test_request_new_instance_disabled_challenge_server(self):
with self.settings(
CHALLENGE_SERVER_ENABLED=False,
):
self.client.force_authenticate(user=self.user)
response = self.client.get(reverse("request-new-instance", args=["1"]))
self.assertContains(response, "challenge_server_disabled", status_code=403)

def test_get_instance_no_team(self):
with self.settings(
CHALLENGE_SERVER_ENABLED=True,
):
self.client.force_authenticate(user=self.user)
config.set("enable_team_leave", True)
self.client.post(reverse("team-leave"))
response = self.client.get(reverse("get-instance", args=["1"]))
self.assertContains(response, "challenge_server_team_required", status_code=403)

def test_get_instance(self):
# This is a bad test but we need a stub service
with self.settings(
CHALLENGE_SERVER_ENABLED=True,
ANDROMEDA_URL="http://andromeda",
ANDROMEDA_API_KEY="andromeda",
ANDROMEDA_TIMEOUT=0.1,
):
with self.assertRaises(ConnectionError):
self.client.force_authenticate(user=self.user)
self.client.get(reverse("get-instance", args=["1"]))
6 changes: 3 additions & 3 deletions src/andromeda/views.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from django.conf import settings
from rest_framework.generics import get_object_or_404
from rest_framework.permissions import IsAdminUser, IsAuthenticated
from rest_framework.status import HTTP_403_FORBIDDEN
Expand All @@ -8,15 +9,14 @@
from backend.response import FormattedResponse
from challenge.models import Challenge
from challenge.permissions import CompetitionOpen
from config import config


class GetInstanceView(APIView):
permission_classes = (IsAuthenticated, CompetitionOpen)
throttle_scope = "challenge_instance_get"

def get(self, request, job_id):
if not config.get("enable_challenge_server"):
if not settings.CHALLENGE_SERVER_ENABLED:
return FormattedResponse(m="challenge_server_disabled", status=HTTP_403_FORBIDDEN)
if not request.user.team:
return FormattedResponse(m="challenge_server_team_required", status=HTTP_403_FORBIDDEN)
Expand All @@ -28,7 +28,7 @@ class ResetInstanceView(APIView):
throttle_scope = "challenge_instance_reset"

def get(self, request, job_id):
if not config.get("enable_challenge_server"):
if not settings.CHALLENGE_SERVER_ENABLED:
return FormattedResponse(m="challenge_server_disabled", status=HTTP_403_FORBIDDEN)
return FormattedResponse(client.request_reset(request.user.team.id, job_id))

Expand Down
9 changes: 6 additions & 3 deletions src/backend/settings/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,6 @@
"token_provider": "basic_auth",
"enable_bot_users": True,
"enable_caching": True,
"enable_challenge_server": True,
"enable_ctftime": True,
"enable_flag_submission": True,
"enable_flag_submission_after_competition": True,
Expand Down Expand Up @@ -283,15 +282,19 @@
"NUM_PROXIES": int(os.getenv("NUM_PROXIES", 0)),
}

if os.getenv("CHALLENGE_SERVER_TYPE") == "POLARIS":
if os.getenv("CHALLENGE_SERVER_TYPE") == "POLARIS": # pragma: no cover
CHALLENGE_SERVER_ENABLED = True
POLARIS_URL = os.getenv("POLARIS_URL")
POLARIS_USERNAME = os.getenv("POLARIS_USERNAME")
POLARIS_PASSWORD = os.getenv("POLARIS_PASSWORD")
else:
elif os.getenv("ANDROMEDA_URL") or os.getenv("CHALLENGE_SERVER_TYPE") == "ANDROMEDA": # Backwards compatability with old Docker Compose files
CHALLENGE_SERVER_ENABLED = True
ANDROMEDA_URL = os.getenv("ANDROMEDA_URL")
ANDROMEDA_API_KEY = os.getenv("ANDROMEDA_API_KEY")
ANDROMEDA_SERVER_IP = os.getenv("ANDROMEDA_IP") # shown to participants
ANDROMEDA_TIMEOUT = float(os.getenv("ANDROMEDA_TIMEOUT", 5))
else:
CHALLENGE_SERVER_ENABLED = False

INSTALLED_PLUGINS = [
"plugins.flag.hashed",
Expand Down
点击 这是indexloc提供的php浏览器服务,不要输入任何密码和下载