From eb60468a8cf881b0a0b72e4ac873f3724c17bc41 Mon Sep 17 00:00:00 2001 From: Rupak Biswas Date: Fri, 3 Mar 2023 17:43:53 +0530 Subject: [PATCH] New feature initiated. Challenge Section unlocked - All the section should be dockerized. - No need to create individual endpoint for challenge - Now its easy to add challenge just by adding in the db - DB is not pushed in database, so the challenges are stored in a json file at `pygoat/challenge/challenge.json` - For populating challenges to db, use the command `python3 manage.py populate_challenge` --- app.log | 780 ++++++++++++++++++ temp.py => challenge/__init__.py | 0 challenge/admin.py | 16 + challenge/apps.py | 6 + challenge/challenge.json | 12 + .../management/commands/populate_challenge.py | 22 + challenge/migrations/0001_initial.py | 47 ++ .../migrations/0002_challenge_docker_port.py | 19 + ...ocker_image_alter_challenge_id_and_more.py | 28 + challenge/migrations/__init__.py | 0 challenge/models.py | 46 ++ challenge/templates/chal-not-found.html | 8 + challenge/templates/challenge.html | 81 ++ challenge/tests.py | 3 + challenge/urls.py | 6 + challenge/utility.py | 10 + challenge/views.py | 88 ++ ...3~f1cf11156c656314790387c2c9eb7f187a3d480e | Bin 290816 -> 0 bytes introduction/static/css/dark-challenges.css | 16 + introduction/templates/introduction/base.html | 8 +- pygoat/settings.py | 1 + pygoat/urls.py | 1 + 22 files changed, 1191 insertions(+), 7 deletions(-) rename temp.py => challenge/__init__.py (100%) create mode 100644 challenge/admin.py create mode 100644 challenge/apps.py create mode 100644 challenge/challenge.json create mode 100644 challenge/management/commands/populate_challenge.py create mode 100644 challenge/migrations/0001_initial.py create mode 100644 challenge/migrations/0002_challenge_docker_port.py create mode 100644 challenge/migrations/0003_alter_challenge_docker_image_alter_challenge_id_and_more.py create mode 100644 challenge/migrations/__init__.py create mode 100644 challenge/models.py create mode 100644 challenge/templates/chal-not-found.html create mode 100644 challenge/templates/challenge.html create mode 100644 challenge/tests.py create mode 100644 challenge/urls.py create mode 100644 challenge/utility.py create mode 100644 challenge/views.py delete mode 100644 db.sqlite3~f1cf11156c656314790387c2c9eb7f187a3d480e create mode 100644 introduction/static/css/dark-challenges.css diff --git a/app.log b/app.log index d4b150802..a1af6c37d 100644 --- a/app.log +++ b/app.log @@ -615,3 +615,783 @@ WARNING:django.request:Not Found: /introduction/home.html INFO:django.utils.autoreload:/home/toxin/Project/gsoc/pygoat/introduction/views.py changed, reloading. INFO:django.utils.autoreload:/home/toxin/Project/gsoc/pygoat/introduction/forms.py changed, reloading. WARNING:django.security.csrf:Forbidden (CSRF token missing or incorrect.): /admin/auth/user/ +ERROR:django.request:Internal Server Error: /login/ +Traceback (most recent call last): + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/core/handlers/exception.py", line 55, in inner + response = get_response(request) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/core/handlers/base.py", line 197, in _get_response + response = wrapped_callback(request, *callback_args, **callback_kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/views/generic/base.py", line 84, in view + return self.dispatch(request, *args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/utils/decorators.py", line 46, in _wrapper + return bound_method(*args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/views/decorators/debug.py", line 92, in sensitive_post_parameters_wrapper + return view(request, *args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/utils/decorators.py", line 46, in _wrapper + return bound_method(*args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/utils/decorators.py", line 133, in _wrapped_view + response = view_func(request, *args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/utils/decorators.py", line 46, in _wrapper + return bound_method(*args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/views/decorators/cache.py", line 62, in _wrapped_view_func + response = view_func(request, *args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/contrib/auth/views.py", line 67, in dispatch + return super().dispatch(request, *args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/views/generic/base.py", line 119, in dispatch + return handler(request, *args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/views/generic/edit.py", line 144, in get + return self.render_to_response(self.get_context_data()) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/contrib/auth/views.py", line 103, in get_context_data + current_site = get_current_site(self.request) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/contrib/sites/shortcuts.py", line 14, in get_current_site + return Site.objects.get_current(request) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/contrib/sites/models.py", line 59, in get_current + return self._get_site_by_id(site_id) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/contrib/sites/models.py", line 30, in _get_site_by_id + site = self.get(pk=site_id) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/db/models/manager.py", line 85, in manager_method + return getattr(self.get_queryset(), name)(*args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/db/models/query.py", line 496, in get + raise self.model.DoesNotExist( +django.contrib.sites.models.Site.DoesNotExist: Site matching query does not exist. +ERROR:django.request:Internal Server Error: /login/ +Traceback (most recent call last): + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/core/handlers/exception.py", line 55, in inner + response = get_response(request) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/core/handlers/base.py", line 197, in _get_response + response = wrapped_callback(request, *callback_args, **callback_kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/views/generic/base.py", line 84, in view + return self.dispatch(request, *args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/utils/decorators.py", line 46, in _wrapper + return bound_method(*args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/views/decorators/debug.py", line 92, in sensitive_post_parameters_wrapper + return view(request, *args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/utils/decorators.py", line 46, in _wrapper + return bound_method(*args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/utils/decorators.py", line 133, in _wrapped_view + response = view_func(request, *args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/utils/decorators.py", line 46, in _wrapper + return bound_method(*args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/views/decorators/cache.py", line 62, in _wrapped_view_func + response = view_func(request, *args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/contrib/auth/views.py", line 67, in dispatch + return super().dispatch(request, *args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/views/generic/base.py", line 119, in dispatch + return handler(request, *args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/views/generic/edit.py", line 144, in get + return self.render_to_response(self.get_context_data()) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/contrib/auth/views.py", line 103, in get_context_data + current_site = get_current_site(self.request) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/contrib/sites/shortcuts.py", line 14, in get_current_site + return Site.objects.get_current(request) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/contrib/sites/models.py", line 59, in get_current + return self._get_site_by_id(site_id) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/contrib/sites/models.py", line 30, in _get_site_by_id + site = self.get(pk=site_id) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/db/models/manager.py", line 85, in manager_method + return getattr(self.get_queryset(), name)(*args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/db/models/query.py", line 496, in get + raise self.model.DoesNotExist( +django.contrib.sites.models.Site.DoesNotExist: Site matching query does not exist. +ERROR:django.request:Internal Server Error: /login/ +Traceback (most recent call last): + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/core/handlers/exception.py", line 55, in inner + response = get_response(request) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/core/handlers/base.py", line 197, in _get_response + response = wrapped_callback(request, *callback_args, **callback_kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/views/generic/base.py", line 84, in view + return self.dispatch(request, *args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/utils/decorators.py", line 46, in _wrapper + return bound_method(*args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/views/decorators/debug.py", line 92, in sensitive_post_parameters_wrapper + return view(request, *args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/utils/decorators.py", line 46, in _wrapper + return bound_method(*args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/utils/decorators.py", line 133, in _wrapped_view + response = view_func(request, *args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/utils/decorators.py", line 46, in _wrapper + return bound_method(*args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/views/decorators/cache.py", line 62, in _wrapped_view_func + response = view_func(request, *args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/contrib/auth/views.py", line 67, in dispatch + return super().dispatch(request, *args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/views/generic/base.py", line 119, in dispatch + return handler(request, *args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/views/generic/edit.py", line 144, in get + return self.render_to_response(self.get_context_data()) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/contrib/auth/views.py", line 103, in get_context_data + current_site = get_current_site(self.request) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/contrib/sites/shortcuts.py", line 14, in get_current_site + return Site.objects.get_current(request) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/contrib/sites/models.py", line 59, in get_current + return self._get_site_by_id(site_id) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/contrib/sites/models.py", line 30, in _get_site_by_id + site = self.get(pk=site_id) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/db/models/manager.py", line 85, in manager_method + return getattr(self.get_queryset(), name)(*args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/db/models/query.py", line 496, in get + raise self.model.DoesNotExist( +django.contrib.sites.models.Site.DoesNotExist: Site matching query does not exist. +WARNING:django.request:Not Found: /admin. +ERROR:django.request:Internal Server Error: /admin/login/ +Traceback (most recent call last): + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/core/handlers/exception.py", line 55, in inner + response = get_response(request) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/core/handlers/base.py", line 197, in _get_response + response = wrapped_callback(request, *callback_args, **callback_kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/utils/decorators.py", line 46, in _wrapper + return bound_method(*args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/views/decorators/cache.py", line 62, in _wrapped_view_func + response = view_func(request, *args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/contrib/admin/sites.py", line 440, in login + return LoginView.as_view(**defaults)(request) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/views/generic/base.py", line 84, in view + return self.dispatch(request, *args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/utils/decorators.py", line 46, in _wrapper + return bound_method(*args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/views/decorators/debug.py", line 92, in sensitive_post_parameters_wrapper + return view(request, *args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/utils/decorators.py", line 46, in _wrapper + return bound_method(*args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/utils/decorators.py", line 133, in _wrapped_view + response = view_func(request, *args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/utils/decorators.py", line 46, in _wrapper + return bound_method(*args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/views/decorators/cache.py", line 62, in _wrapped_view_func + response = view_func(request, *args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/contrib/auth/views.py", line 67, in dispatch + return super().dispatch(request, *args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/views/generic/base.py", line 119, in dispatch + return handler(request, *args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/views/generic/edit.py", line 144, in get + return self.render_to_response(self.get_context_data()) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/contrib/auth/views.py", line 103, in get_context_data + current_site = get_current_site(self.request) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/contrib/sites/shortcuts.py", line 14, in get_current_site + return Site.objects.get_current(request) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/contrib/sites/models.py", line 59, in get_current + return self._get_site_by_id(site_id) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/contrib/sites/models.py", line 30, in _get_site_by_id + site = self.get(pk=site_id) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/db/models/manager.py", line 85, in manager_method + return getattr(self.get_queryset(), name)(*args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/db/models/query.py", line 496, in get + raise self.model.DoesNotExist( +django.contrib.sites.models.Site.DoesNotExist: Site matching query does not exist. +ERROR:django.request:Internal Server Error: /login/ +Traceback (most recent call last): + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/core/handlers/exception.py", line 55, in inner + response = get_response(request) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/core/handlers/base.py", line 197, in _get_response + response = wrapped_callback(request, *callback_args, **callback_kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/views/generic/base.py", line 84, in view + return self.dispatch(request, *args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/utils/decorators.py", line 46, in _wrapper + return bound_method(*args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/views/decorators/debug.py", line 92, in sensitive_post_parameters_wrapper + return view(request, *args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/utils/decorators.py", line 46, in _wrapper + return bound_method(*args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/utils/decorators.py", line 133, in _wrapped_view + response = view_func(request, *args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/utils/decorators.py", line 46, in _wrapper + return bound_method(*args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/views/decorators/cache.py", line 62, in _wrapped_view_func + response = view_func(request, *args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/contrib/auth/views.py", line 67, in dispatch + return super().dispatch(request, *args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/views/generic/base.py", line 119, in dispatch + return handler(request, *args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/views/generic/edit.py", line 144, in get + return self.render_to_response(self.get_context_data()) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/contrib/auth/views.py", line 103, in get_context_data + current_site = get_current_site(self.request) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/contrib/sites/shortcuts.py", line 14, in get_current_site + return Site.objects.get_current(request) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/contrib/sites/models.py", line 59, in get_current + return self._get_site_by_id(site_id) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/contrib/sites/models.py", line 30, in _get_site_by_id + site = self.get(pk=site_id) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/db/models/manager.py", line 85, in manager_method + return getattr(self.get_queryset(), name)(*args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/db/models/query.py", line 496, in get + raise self.model.DoesNotExist( +django.contrib.sites.models.Site.DoesNotExist: Site matching query does not exist. +ERROR:django.request:Internal Server Error: /login/ +Traceback (most recent call last): + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/core/handlers/exception.py", line 55, in inner + response = get_response(request) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/core/handlers/base.py", line 197, in _get_response + response = wrapped_callback(request, *callback_args, **callback_kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/views/generic/base.py", line 84, in view + return self.dispatch(request, *args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/utils/decorators.py", line 46, in _wrapper + return bound_method(*args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/views/decorators/debug.py", line 92, in sensitive_post_parameters_wrapper + return view(request, *args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/utils/decorators.py", line 46, in _wrapper + return bound_method(*args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/utils/decorators.py", line 133, in _wrapped_view + response = view_func(request, *args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/utils/decorators.py", line 46, in _wrapper + return bound_method(*args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/views/decorators/cache.py", line 62, in _wrapped_view_func + response = view_func(request, *args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/contrib/auth/views.py", line 67, in dispatch + return super().dispatch(request, *args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/views/generic/base.py", line 119, in dispatch + return handler(request, *args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/views/generic/edit.py", line 144, in get + return self.render_to_response(self.get_context_data()) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/contrib/auth/views.py", line 103, in get_context_data + current_site = get_current_site(self.request) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/contrib/sites/shortcuts.py", line 14, in get_current_site + return Site.objects.get_current(request) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/contrib/sites/models.py", line 59, in get_current + return self._get_site_by_id(site_id) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/contrib/sites/models.py", line 30, in _get_site_by_id + site = self.get(pk=site_id) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/db/models/manager.py", line 85, in manager_method + return getattr(self.get_queryset(), name)(*args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/db/models/query.py", line 496, in get + raise self.model.DoesNotExist( +django.contrib.sites.models.Site.DoesNotExist: Site matching query does not exist. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/urls.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/urls.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/urls.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/urls.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/urls.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/urls.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/urls.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/urls.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/urls.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/urls.py changed, reloading. +ERROR:django.request:Internal Server Error: /challenge/do-it-fast +Traceback (most recent call last): + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/core/handlers/exception.py", line 55, in inner + response = get_response(request) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/core/handlers/base.py", line 197, in _get_response + response = wrapped_callback(request, *callback_args, **callback_kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/views/generic/base.py", line 84, in view + return self.dispatch(request, *args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/views/generic/base.py", line 119, in dispatch + return handler(request, *args, **kwargs) + File "/home/rupax/GSOC/pygoat/challenge/views.py", line 7, in get + return render(request, 'challenge/do-it-fast.html') + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/shortcuts.py", line 24, in render + content = loader.render_to_string(template_name, context, request, using=using) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/template/loader.py", line 61, in render_to_string + template = get_template(template_name, using=using) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/template/loader.py", line 19, in get_template + raise TemplateDoesNotExist(template_name, chain=chain) +django.template.exceptions.TemplateDoesNotExist: challenge/do-it-fast.html +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +ERROR:django.request:Internal Server Error: /challenge/do-it-fast +Traceback (most recent call last): + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/template/base.py", line 505, in parse + compile_func = self.tags[command] +KeyError: 'static' + +During handling of the above exception, another exception occurred: + +Traceback (most recent call last): + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/core/handlers/exception.py", line 55, in inner + response = get_response(request) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/core/handlers/base.py", line 197, in _get_response + response = wrapped_callback(request, *callback_args, **callback_kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/views/generic/base.py", line 84, in view + return self.dispatch(request, *args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/views/generic/base.py", line 119, in dispatch + return handler(request, *args, **kwargs) + File "/home/rupax/GSOC/pygoat/challenge/views.py", line 7, in get + return render(request, 'do-it-fast.html') + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/shortcuts.py", line 24, in render + content = loader.render_to_string(template_name, context, request, using=using) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/template/loader.py", line 61, in render_to_string + template = get_template(template_name, using=using) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/template/loader.py", line 15, in get_template + return engine.get_template(template_name) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/template/backends/django.py", line 34, in get_template + return Template(self.engine.get_template(template_name), self) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/template/engine.py", line 176, in get_template + template, origin = self.find_template(template_name) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/template/engine.py", line 158, in find_template + template = loader.get_template(name, skip=skip) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/template/loaders/base.py", line 28, in get_template + return Template( + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/template/base.py", line 154, in __init__ + self.nodelist = self.compile_nodelist() + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/template/base.py", line 200, in compile_nodelist + return parser.parse() + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/template/base.py", line 507, in parse + self.invalid_block_tag(token, command, parse_until) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/template/base.py", line 568, in invalid_block_tag + raise self.error( +django.template.exceptions.TemplateSyntaxError: Invalid block tag on line 8: 'static'. Did you forget to register or load this tag? +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +WARNING:django.request:Not Found: /event/myevents +WARNING:django.security.csrf:Forbidden (CSRF token missing.): /challenge/do-it-fast +WARNING:django.security.csrf:Forbidden (CSRF token missing.): /challenge/do-it-fast +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +WARNING:django.security.csrf:Forbidden (CSRF token missing.): /challenge/do-it-fast +WARNING:django.security.csrf:Forbidden (CSRF token missing.): /challenge/do-it-fast +WARNING:django.security.csrf:Forbidden (CSRF token missing.): /challenge/do-it-fast +WARNING:django.security.csrf:Forbidden (CSRF token missing.): /challenge/do-it-fast +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +WARNING:django.security.csrf:Forbidden (CSRF token missing.): /challenge/do-it-fast +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/admin.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/admin.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/admin.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/admin.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/admin.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/admin.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/admin.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/admin.py changed, reloading. +WARNING:django.request:Not Found: /favicon.ico +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/models.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/models.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/urls.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/urls.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/urls.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/urls.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/urls.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/urls.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +ERROR:django.request:Internal Server Error: /challenge/do-it-fast +Traceback (most recent call last): + File "/home/rupax/GSOC/pygoat/challenge/views.py", line 15, in get + chal = Challenge.objects.get(name=challange) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/db/models/manager.py", line 85, in manager_method + return getattr(self.get_queryset(), name)(*args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/db/models/query.py", line 496, in get + raise self.model.DoesNotExist( +challenge.models.Challenge.DoesNotExist: Challenge matching query does not exist. + +During handling of the above exception, another exception occurred: + +Traceback (most recent call last): + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/core/handlers/exception.py", line 55, in inner + response = get_response(request) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/core/handlers/base.py", line 197, in _get_response + response = wrapped_callback(request, *callback_args, **callback_kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/views/generic/base.py", line 84, in view + return self.dispatch(request, *args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/views/generic/base.py", line 119, in dispatch + return handler(request, *args, **kwargs) + File "/home/rupax/GSOC/pygoat/challenge/views.py", line 17, in get + return render(request, 'chal-not-found.html') + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/shortcuts.py", line 24, in render + content = loader.render_to_string(template_name, context, request, using=using) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/template/loader.py", line 61, in render_to_string + template = get_template(template_name, using=using) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/template/loader.py", line 15, in get_template + return engine.get_template(template_name) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/template/backends/django.py", line 34, in get_template + return Template(self.engine.get_template(template_name), self) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/template/engine.py", line 176, in get_template + template, origin = self.find_template(template_name) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/template/engine.py", line 158, in find_template + template = loader.get_template(name, skip=skip) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/template/loaders/base.py", line 28, in get_template + return Template( + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/template/base.py", line 154, in __init__ + self.nodelist = self.compile_nodelist() + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/template/base.py", line 200, in compile_nodelist + return parser.parse() + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/template/base.py", line 513, in parse + raise self.error(token, e) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/template/base.py", line 511, in parse + compiled_result = compile_func(self, token) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/template/loader_tags.py", line 293, in do_extends + nodelist = parser.parse() + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/template/base.py", line 513, in parse + raise self.error(token, e) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/template/base.py", line 511, in parse + compiled_result = compile_func(self, token) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/template/loader_tags.py", line 232, in do_block + nodelist = parser.parse(("endblock",)) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/template/base.py", line 518, in parse + self.unclosed_block_tag(parse_until) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/template/base.py", line 581, in unclosed_block_tag + raise self.error(token, msg) +django.template.exceptions.TemplateSyntaxError: Unclosed tag on line 2: 'block'. Looking for one of: endblock. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/urls.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +ERROR:django.request:Internal Server Error: /challenge/do-it-fast +Traceback (most recent call last): + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/core/handlers/exception.py", line 55, in inner + response = get_response(request) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/core/handlers/base.py", line 197, in _get_response + response = wrapped_callback(request, *callback_args, **callback_kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/views/generic/base.py", line 84, in view + return self.dispatch(request, *args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/views/generic/base.py", line 119, in dispatch + return handler(request, *args, **kwargs) +TypeError: get() got an unexpected keyword argument 'challenge' +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/utility.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/utility.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/utility.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +ERROR:django.request:Internal Server Error: /challenge/do-it-fast +Traceback (most recent call last): + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/core/handlers/exception.py", line 55, in inner + response = get_response(request) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/core/handlers/base.py", line 197, in _get_response + response = wrapped_callback(request, *callback_args, **callback_kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/views/generic/base.py", line 84, in view + return self.dispatch(request, *args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/views/generic/base.py", line 119, in dispatch + return handler(request, *args, **kwargs) + File "/home/rupax/GSOC/pygoat/challenge/utility.py", line 16, in function + if args[0].user.is_authenticated: +AttributeError: 'DoItFast' object has no attribute 'user' +ERROR:django.request:Internal Server Error: /challenge/do-it-fast +Traceback (most recent call last): + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/core/handlers/exception.py", line 55, in inner + response = get_response(request) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/core/handlers/base.py", line 197, in _get_response + response = wrapped_callback(request, *callback_args, **callback_kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/views/generic/base.py", line 84, in view + return self.dispatch(request, *args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/views/generic/base.py", line 119, in dispatch + return handler(request, *args, **kwargs) + File "/home/rupax/GSOC/pygoat/challenge/utility.py", line 16, in function + if args[0].user.is_authenticated: +AttributeError: 'DoItFast' object has no attribute 'user' +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +ERROR:django.request:Internal Server Error: /challenge/do-it-fast +Traceback (most recent call last): + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/core/handlers/exception.py", line 55, in inner + response = get_response(request) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/core/handlers/base.py", line 197, in _get_response + response = wrapped_callback(request, *callback_args, **callback_kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/views/generic/base.py", line 84, in view + return self.dispatch(request, *args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/views/generic/base.py", line 119, in dispatch + return handler(request, *args, **kwargs) + File "/home/rupax/GSOC/pygoat/challenge/utility.py", line 16, in function + if args[0].user.is_authenticated: +AttributeError: 'DoItFast' object has no attribute 'user' +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/utility.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/utility.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/models.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/models.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/models.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/models.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/models.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/models.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/models.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/models.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/models.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/models.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/models.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/models.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/models.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/models.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/models.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/models.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/models.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/models.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/models.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +ERROR:django.request:Internal Server Error: /challenge/do-it-fast +Traceback (most recent call last): + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/core/handlers/exception.py", line 55, in inner + response = get_response(request) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/core/handlers/base.py", line 197, in _get_response + response = wrapped_callback(request, *callback_args, **callback_kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/views/generic/base.py", line 84, in view + return self.dispatch(request, *args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/views/generic/base.py", line 119, in dispatch + return handler(request, *args, **kwargs) +TypeError: delete() got an unexpected keyword argument 'challenge' +ERROR:django.request:Internal Server Error: /challenge/do-it-fast +Traceback (most recent call last): + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/core/handlers/exception.py", line 55, in inner + response = get_response(request) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/core/handlers/base.py", line 197, in _get_response + response = wrapped_callback(request, *callback_args, **callback_kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/views/generic/base.py", line 84, in view + return self.dispatch(request, *args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/views/generic/base.py", line 119, in dispatch + return handler(request, *args, **kwargs) +TypeError: delete() got an unexpected keyword argument 'challenge' +ERROR:django.request:Internal Server Error: /challenge/do-it-fast +Traceback (most recent call last): + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/core/handlers/exception.py", line 55, in inner + response = get_response(request) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/core/handlers/base.py", line 197, in _get_response + response = wrapped_callback(request, *callback_args, **callback_kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/views/generic/base.py", line 84, in view + return self.dispatch(request, *args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/views/generic/base.py", line 119, in dispatch + return handler(request, *args, **kwargs) +TypeError: delete() got an unexpected keyword argument 'challenge' +ERROR:django.request:Internal Server Error: /challenge/do-it-fast +Traceback (most recent call last): + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/core/handlers/exception.py", line 55, in inner + response = get_response(request) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/core/handlers/base.py", line 197, in _get_response + response = wrapped_callback(request, *callback_args, **callback_kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/views/generic/base.py", line 84, in view + return self.dispatch(request, *args, **kwargs) + File "/home/rupax/GSOC/pygoat/venv/lib/python3.8/site-packages/django/views/generic/base.py", line 119, in dispatch + return handler(request, *args, **kwargs) +TypeError: delete() got an unexpected keyword argument 'challenge' +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/views.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/models.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/models.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/models.py changed, reloading. +INFO:django.utils.autoreload:/home/rupax/GSOC/pygoat/challenge/models.py changed, reloading. diff --git a/temp.py b/challenge/__init__.py similarity index 100% rename from temp.py rename to challenge/__init__.py diff --git a/challenge/admin.py b/challenge/admin.py new file mode 100644 index 000000000..f913d9b22 --- /dev/null +++ b/challenge/admin.py @@ -0,0 +1,16 @@ +from django.contrib import admin +from .models import Challenge, UserChallenge +# Register your models here. + +@admin.register(Challenge) +class ChallengeAdmin(admin.ModelAdmin): + list_display = ('name', 'docker_image', 'start_port', 'end_port', 'point') + search_fields = ('name', 'docker_image') + empty_value_display = '-empty-' + + +@admin.register(UserChallenge) +class UserChallengeAdmin(admin.ModelAdmin): + list_display = ('user', 'challenge', 'container_id', 'port', 'no_of_attempt', 'is_solved') + search_fields = ('user__username', 'challenge__name') + empty_value_display = '-empty-' \ No newline at end of file diff --git a/challenge/apps.py b/challenge/apps.py new file mode 100644 index 000000000..ad63d6650 --- /dev/null +++ b/challenge/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class ChallengeConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'challenge' diff --git a/challenge/challenge.json b/challenge/challenge.json new file mode 100644 index 000000000..b92c182af --- /dev/null +++ b/challenge/challenge.json @@ -0,0 +1,12 @@ +[ + { + "name":"do-it-fast", + "description":"You want flag ?\nThis webside gives you ?\nyeah, just need to login and grab fast", + "docker_image": "rupak2001/do-it-fast", + "docker_port": 5050, + "start_port" : 5000, + "end_port" : 5500, + "flag": "flag{do_it_fast}", + "point" : 100 + } +] \ No newline at end of file diff --git a/challenge/management/commands/populate_challenge.py b/challenge/management/commands/populate_challenge.py new file mode 100644 index 000000000..62ab6330d --- /dev/null +++ b/challenge/management/commands/populate_challenge.py @@ -0,0 +1,22 @@ +import json +from django.core.management.base import BaseCommand, CommandError +from challenge.models import Challenge + + +class Command(BaseCommand): + help = "Populates the database with some test data" + + def handle(self, *args, **options): + try: + filename = "challenge/challenge.json" + with open(filename, "r") as f: + data = json.load(f) + for challenge in data: + try: + Challenge.objects.create(**challenge).save() + except: + pass + except FileNotFoundError: + raise CommandError("File not found: {}".format(filename)) + + diff --git a/challenge/migrations/0001_initial.py b/challenge/migrations/0001_initial.py new file mode 100644 index 000000000..16e775aa2 --- /dev/null +++ b/challenge/migrations/0001_initial.py @@ -0,0 +1,47 @@ +# Generated by Django 4.0.4 on 2023-03-03 06:33 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='Challenge', + fields=[ + ('id', models.AutoField(primary_key=True, serialize=False)), + ('name', models.CharField(max_length=100)), + ('description', models.TextField()), + ('docker_image', models.CharField(max_length=100)), + ('start_port', models.IntegerField()), + ('end_port', models.IntegerField()), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('updated_at', models.DateTimeField(auto_now=True)), + ('flag', models.CharField(max_length=100)), + ('point', models.IntegerField()), + ], + ), + migrations.CreateModel( + name='UserChallenge', + fields=[ + ('id', models.AutoField(primary_key=True, serialize=False)), + ('container_id', models.CharField(max_length=100)), + ('port', models.IntegerField()), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('updated_at', models.DateTimeField(auto_now=True)), + ('is_live', models.BooleanField(default=False)), + ('no_of_attempt', models.IntegerField(default=0)), + ('is_solved', models.BooleanField(default=False)), + ('challenge', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='challenge.challenge')), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + ), + ] diff --git a/challenge/migrations/0002_challenge_docker_port.py b/challenge/migrations/0002_challenge_docker_port.py new file mode 100644 index 000000000..bf8fb3aee --- /dev/null +++ b/challenge/migrations/0002_challenge_docker_port.py @@ -0,0 +1,19 @@ +# Generated by Django 4.0.4 on 2023-03-03 06:45 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('challenge', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='challenge', + name='docker_port', + field=models.IntegerField(default=8000), + preserve_default=False, + ), + ] diff --git a/challenge/migrations/0003_alter_challenge_docker_image_alter_challenge_id_and_more.py b/challenge/migrations/0003_alter_challenge_docker_image_alter_challenge_id_and_more.py new file mode 100644 index 000000000..79c7e8164 --- /dev/null +++ b/challenge/migrations/0003_alter_challenge_docker_image_alter_challenge_id_and_more.py @@ -0,0 +1,28 @@ +# Generated by Django 4.0.4 on 2023-03-03 12:11 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('challenge', '0002_challenge_docker_port'), + ] + + operations = [ + migrations.AlterField( + model_name='challenge', + name='docker_image', + field=models.CharField(max_length=100, unique=True), + ), + migrations.AlterField( + model_name='challenge', + name='id', + field=models.AutoField(primary_key=True, serialize=False, unique=True), + ), + migrations.AlterField( + model_name='challenge', + name='name', + field=models.CharField(max_length=100, unique=True), + ), + ] diff --git a/challenge/migrations/__init__.py b/challenge/migrations/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/challenge/models.py b/challenge/models.py new file mode 100644 index 000000000..95442f220 --- /dev/null +++ b/challenge/models.py @@ -0,0 +1,46 @@ +from django.db import models +from django.contrib.auth.models import User + +# Create your models here +class Challenge(models.Model): + id = models.AutoField(primary_key=True, unique=True) + name = models.CharField(max_length=100, unique=True) + description = models.TextField() + docker_image = models.CharField(max_length=100, unique=True) + docker_port = models.IntegerField() + start_port = models.IntegerField() + end_port = models.IntegerField() + created_at = models.DateTimeField(auto_now_add=True) + updated_at = models.DateTimeField(auto_now=True) + flag = models.CharField(max_length=100) + point = models.IntegerField() + + def __str__(self): + return self.name + + # overwriting default save method + def save(self, *args, **kwargs): + if self.start_port > self.end_port: + raise Exception("Start port should be less than end port") + # Here flag need to be hashed + super(Challenge, self).save(*args, **kwargs) + +class UserChallenge(models.Model): + """ + This is a mapping of user to challenge with proper progress tracking + This also allows us to reuse the created container for the user + """ + id = models.AutoField(primary_key=True) + user = models.ForeignKey(User, on_delete=models.CASCADE) + challenge = models.ForeignKey(Challenge, on_delete=models.CASCADE) + container_id = models.CharField(max_length=100) + port = models.IntegerField() + created_at = models.DateTimeField(auto_now_add=True) + updated_at = models.DateTimeField(auto_now=True) + is_live = models.BooleanField(default=False) + no_of_attempt = models.IntegerField(default=0) + is_solved = models.BooleanField(default=False) + port = models.IntegerField() + + def __str__(self): + return f"{self.user.username} - {self.challenge.name}" \ No newline at end of file diff --git a/challenge/templates/chal-not-found.html b/challenge/templates/chal-not-found.html new file mode 100644 index 000000000..1bacba43b --- /dev/null +++ b/challenge/templates/chal-not-found.html @@ -0,0 +1,8 @@ +{% extends "introduction/base.html" %} +{% block content %} +
+ +

Challenge not found

+ +
+{% endblock content %} \ No newline at end of file diff --git a/challenge/templates/challenge.html b/challenge/templates/challenge.html new file mode 100644 index 000000000..f699f25a9 --- /dev/null +++ b/challenge/templates/challenge.html @@ -0,0 +1,81 @@ +{% extends "introduction/base.html" %} +{% block content %} +
+ +
+

{{ chal.name }}

+
+
+
{{ chal.description }}
+
+
+ + + +
+ + + + + +{% endblock content %} \ No newline at end of file diff --git a/challenge/tests.py b/challenge/tests.py new file mode 100644 index 000000000..7ce503c2d --- /dev/null +++ b/challenge/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/challenge/urls.py b/challenge/urls.py new file mode 100644 index 000000000..c9aac3b9f --- /dev/null +++ b/challenge/urls.py @@ -0,0 +1,6 @@ +from django.urls import path,include +from .views import * + +urlpatterns = [ + path('', DoItFast.as_view(), name='do-it-fast'), +] \ No newline at end of file diff --git a/challenge/utility.py b/challenge/utility.py new file mode 100644 index 000000000..d8ab3eb73 --- /dev/null +++ b/challenge/utility.py @@ -0,0 +1,10 @@ +import socket + +def get_free_port(START_PORT, END_PORT, HOST="localhost"): + for port in range(START_PORT, END_PORT): + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: + result = s.connect_ex((HOST, port)) + if result == 111: + print(f"Port {port} is avilable") + return port + return None diff --git a/challenge/views.py b/challenge/views.py new file mode 100644 index 000000000..adb32a5ab --- /dev/null +++ b/challenge/views.py @@ -0,0 +1,88 @@ +from django.http import JsonResponse +from django.shortcuts import redirect, render +from django.views.generic import View +from django.views.decorators.csrf import csrf_exempt +import subprocess +from .utility import get_free_port +from .models import Challenge, UserChallenge +# Create your views here. + + +class DoItFast(View): + def get(self, request, challenge): + if not request.user.is_authenticated: + return redirect('login') + + try: + chal = Challenge.objects.get(name=challenge) + except Exception as e: + return render(request, 'chal-not-found.html') + + try: + user_chal = UserChallenge.objects.get(user=request.user, challenge=chal) + return render(request, 'challenge.html', {'chal': chal, 'user_chal': user_chal}) + except: + return render(request, 'challenge.html', {'chal': chal, 'user_chal': None}) + + def post(self, request, challenge): + user_chall_exists = False + if not request.user.is_authenticated: + return redirect('login') + + try: # checking the existance of challenge + chal = Challenge.objects.get(name=challenge) + except Exception as e: + return render(request, 'chal-not-found.html') + + try: # checking if he attempted it before or not, if yes then check if the container is live or not + user_chal = UserChallenge.objects.get(user=request.user, challenge=chal) + if user_chal.is_live: + return JsonResponse({'message':'already running', 'status': '200', 'endpoint': f'http://localhost:{user_chal.port}'}) + user_chall_exists = True + except: + pass + + port = get_free_port(8000, 8100) + if port == None: + return JsonResponse({'message': 'failed', 'status': '500', 'endpoint': 'None'}) + + command = f"docker run -d -p {port}:{chal.docker_port} {chal.docker_image}" + process = subprocess.Popen(command.split(" "), stdout=subprocess.PIPE) + output, error = process.communicate() + container_id = output.decode('utf-8').strip() + + if user_chall_exists: + # TODO : reuse the container instead of creaing the new one + user_chal.container_id = container_id + user_chal.port = port + user_chal.is_live = True + user_chal.save() + else: + user_chal = UserChallenge(user=request.user, challenge=chal, container_id=container_id, port=port) + user_chal.save() + # save the output in database for stoping the container + return JsonResponse({'message': 'success', 'status': '200', 'endpoint': f'http://localhost:{port}'}) + + + + def delete(self, request, challenge): + if not request.user.is_authenticated: + return redirect('login') + + try: + chal = Challenge.objects.get(name=challenge) + user_chal = UserChallenge.objects.get(user=request.user, challenge=chal) + except Exception as e: + return JsonResponse({'message': 'failed', 'status': '500'}) + + user_chal.is_live = False + user_chal.save() + command = f"docker stop {user_chal.container_id}" + process = subprocess.Popen(command.split(" "), stdout=subprocess.PIPE) + output, error = process.communicate() + return JsonResponse({'message': 'success', 'status': '200'}) + + def put(self, request, challange): + # TODO : implement flag checking + return "not implemented" + \ No newline at end of file diff --git a/db.sqlite3~f1cf11156c656314790387c2c9eb7f187a3d480e b/db.sqlite3~f1cf11156c656314790387c2c9eb7f187a3d480e deleted file mode 100644 index 5b7bde3cb24e70aa42ec4a23c93808de93f8e079..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 290816 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