diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7991ac17..067932a3 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -27,7 +27,7 @@ jobs: with: registry: ghcr.io username: ${{ github.repository_owner }} - password: ${{ secrets.GITHUB_TOKEN }} + password: ${{ github.token }} - name: Build and push id: docker_build diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 8db1fa61..e392feb8 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -17,14 +17,11 @@ jobs: tests: strategy: matrix: - os: - - ubuntu-20.04 - - ubuntu-18.04 test_type: - BLITZ - CLASSIC - runs-on: ${{ matrix.os }} + runs-on: "ubuntu-20.04" timeout-minutes: 15 env: TEST: 1 @@ -41,7 +38,7 @@ jobs: - uses: actions/cache@v2 with: path: ~/.cache/pip - key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }} + key: ${{ runner.os }}-pip-${{ hashFiles('backend/requirements.txt') }}-${{ hashFiles('cli/requirements.txt') }}-${{ hashFiles('tests/requirements.txt') }} restore-keys: | ${{ runner.os }}-pip- - name: Setup tests diff --git a/Makefile b/Makefile index 0dc0690c..4c4224bb 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,14 @@ -.PHONY: lint -lint: +.PHONY: lint-backend +lint-backend: flake8 --config .flake8 +.PHONY: lint-frontend +lint-frontend: + cd front && npx eslint . + +.PHONY: lint +lint: lint-backend lint-frontend + .PHONY: clean clean: ./control.py reset || : @@ -23,4 +30,4 @@ release-base: start: clean ./control.py setup ./control.py start --fast - ./control.py rd logs -f inititializer + ./control.py rd logs -f initializer diff --git a/README.md b/README.md index 6a5f1056..ee983263 100644 --- a/README.md +++ b/README.md @@ -54,7 +54,7 @@ statistics, services description, writing a checker, modifying the rating system images or backend requirements, omit this option to run the full build. That's all! Now you should be able to access the scoreboard at `http://127.0.0.1:8080/`. Admin panel is accessible at -`http://127.0.0.1:8080/admin`. Celery visualization (flower) is at `http://127.0.0.1:8080/flower`. +`http://127.0.0.1:8080/admin/`. Celery visualization (flower) is at `http://127.0.0.1:8080/flower/`. > Before each new game run `./control.py reset` to delete old database and temporary files (and docker networks) @@ -92,7 +92,7 @@ Config file (`config.yml`) is split into five main parts: * `default_score` (optional, default `2500`): default score for tasks. - * `env_path` (optional, default `/checkers/bin/`): string to append to checkers' `$PATH` environment variable + * `env_path` (optional): string to append to checkers' `$PATH` environment variable (see [checkers](#checkers) section). Example: `/checkers/bin/`. * `game_hardness` (optional, default `10`): game hardness parameter @@ -109,6 +109,8 @@ Config file (`config.yml`) is split into five main parts: * `username: forcad` * `password: **change_me**` + It will be auto-generated if missing. Usernames & passwords to all storages will be the same as to the admin panel. + * **teams** contains playing teams. Example contents: ```yaml @@ -128,7 +130,7 @@ Highlighted teams will be marked on the scoreboard with a rainbow border. ```yaml tasks: - checker: collacode/checker.py - checker_type: gevent_pfr + checker_type: pfr checker_timeout: 30 default_score: 1500 gets: 3 @@ -145,7 +147,7 @@ tasks: puts: 2 ``` -* **storages** is an **auto-generated section**, which will be overridden by `control.py setup/kube setup` and describes +* **storages** is an **auto-generated section**, which will be overridden by `control.py /` and describes settings used to connect to PostgreSQL, Redis and RabbitMQ: * `db`: PostgreSQL settings: @@ -206,7 +208,7 @@ The following options are supported: * `checker_type` (optional, default `hackerdom`): an option containing underscore-separated tags, (missing tags are ignored). Examples: `hackerdom` (hackerdom tag ignored, so no modifier tags are applied), - `gevent_pfr` (gevent checker with public flag data returned). Currently, supported tags are: + `pfr` (checker with public flag data returned). Currently, supported tags are: * `pfr`: checker returns public flag data (e.g. username of flag user) from `PUT` action as a **public message**, private flag data (`flag_id`) as a **private message**, and **public message** is shown @@ -217,16 +219,11 @@ The following options are supported: random generator in checkers so it would return the same values for `GET` and `PUT`. Checkers supporting this options are quite rare (and old), so **don't use it** unless you're sure. - * `gevent`: an experimental checker type to make checkers faster. **Don't use it** if you're not absolutely sure you - know how it works. **Don't use it** on long and (or) large competitions! Example checker - is [here](tests/service/checker/gevent_checker.py). - More detailed explanation of checker tags can be found [in this issue](https://github.com/pomo-mondreganto/ForcAD/issues/18#issuecomment-618072993). -* `env_path` (optional, default `/checkers/bin`): path or a combination of paths to be prepended to `PATH` env - variable (e.g. path to chromedriver). By default, `/checkers/bin` is used, so all auxiliary executables can be but - in `checkers/bin`. +* `env_path` (optional): path or a combination of paths to be prepended to `PATH` env + variable (e.g. path to chromedriver). See more in [checker writing](#writing-a-checker) section. @@ -236,11 +233,11 @@ See more in [checker writing](#writing-a-checker) section. ```yaml checkers: - - requirements.txt <-- automatically installed (with pip) combined requirements of all checkers + - requirements.txt <-- automatically installed (with pip) combined requirements of all checkers (must be present) - task1: - - checker.py <-- executable + - checker.py <-- executable (o+rx) - task2: - - checker.py <-- executable + - checker.py <-- executable (o+rx) ``` ### Writing a checker diff --git a/backend/lib/config/models.py b/backend/lib/config/models.py index bde0384f..1c928c84 100644 --- a/backend/lib/config/models.py +++ b/backend/lib/config/models.py @@ -39,10 +39,11 @@ class Celery(BaseModel): worker_prefetch_multiplier: int = 1 + result_expires = 15 * 60 redis_socket_timeout: int = 10 redis_socket_keepalive: bool = True redis_retry_on_timeout: bool = True - accept_content: List[str] = ['pickle'] + accept_content: List[str] = ['pickle', 'json'] result_serializer: str = 'pickle' task_serializer: str = 'pickle' diff --git a/backend/lib/helpers/__init__.py b/backend/lib/helpers/__init__.py index 7f7089eb..a9ab62a8 100644 --- a/backend/lib/helpers/__init__.py +++ b/backend/lib/helpers/__init__.py @@ -1,7 +1,7 @@ from . import ( cache, checkers, commands, events, exceptions, jobs, - thread_actions, singleton, + singleton, ) __all__ = ( @@ -11,6 +11,5 @@ 'events', 'exceptions', 'jobs', - 'thread_actions', 'singleton', ) diff --git a/backend/lib/helpers/checkers.py b/backend/lib/helpers/checkers.py index f17613d5..90f41de5 100644 --- a/backend/lib/helpers/checkers.py +++ b/backend/lib/helpers/checkers.py @@ -1,20 +1,9 @@ from logging import Logger -from typing import Optional, List +from typing import Optional from lib import models from lib.helpers.commands import run_generic_command -from lib.helpers.thread_actions import run_generic_action_in_thread -from lib.models import TaskStatus, Action - - -def first_error_or_first_verdict( - verdicts: List[models.CheckerVerdict], -) -> models.CheckerVerdict: - for verdict in verdicts: - if verdict.status != TaskStatus.UP: - return verdict - - return verdicts[0] +from lib.models import Action class CheckerRunner: @@ -37,18 +26,12 @@ def __init__( self.flag = flag def check(self) -> models.CheckerVerdict: - if self.task.is_checker_gevent_optimized: - return self._check_in_thread() return self._check_as_process() def put(self) -> models.CheckerVerdict: - if self.task.is_checker_gevent_optimized: - return self._put_in_thread() return self._put_as_process() def get(self) -> models.CheckerVerdict: - if self.task.is_checker_gevent_optimized: - return self._get_in_thread() return self._get_as_process() def _check_as_process(self) -> models.CheckerVerdict: @@ -108,53 +91,3 @@ def _get_as_process(self) -> models.CheckerVerdict: team=self.team, logger=self.logger, ) - - def _check_in_thread(self) -> models.CheckerVerdict: - """Check implementation, gevent-compatible""" - - return run_generic_action_in_thread( - action=Action.CHECK, - task=self.task, - team=self.team, - logger=self.logger, - action_args=(), - action_kwargs={}, - ) - - def _put_in_thread(self) -> models.CheckerVerdict: - """Check implementation, gevent-compatible""" - assert self.flag is not None, 'Can only be called when flag is passed' - - kwargs = { - 'flag_id': self.flag.private_flag_data, - 'flag': self.flag.flag, - 'vuln': str(self.flag.vuln_number), - } - - return run_generic_action_in_thread( - action=Action.PUT, - task=self.task, - team=self.team, - logger=self.logger, - action_args=(), - action_kwargs=kwargs, - ) - - def _get_in_thread(self) -> models.CheckerVerdict: - """Check implementation, gevent-compatible""" - assert self.flag is not None, 'Can only be called when flag is passed' - - kwargs = { - 'flag_id': self.flag.private_flag_data, - 'flag': self.flag.flag, - 'vuln': str(self.flag.vuln_number), - } - - return run_generic_action_in_thread( - action=Action.GET, - task=self.task, - team=self.team, - logger=self.logger, - action_args=(), - action_kwargs=kwargs, - ) diff --git a/backend/lib/helpers/exceptions.py b/backend/lib/helpers/exceptions.py index 0d8bf374..aeb3e70d 100644 --- a/backend/lib/helpers/exceptions.py +++ b/backend/lib/helpers/exceptions.py @@ -2,10 +2,6 @@ class FlagSubmitException(Exception): """Exception for flag validation.""" -class CheckerTimeoutException(BaseException): - """Exception raised by gevent-optimized checkers.""" - - class FlagExceptionEnum: GAME_NOT_AVAILABLE = FlagSubmitException('Game is not available.') FLAG_INVALID = FlagSubmitException('Flag is invalid or too old.') diff --git a/backend/lib/helpers/thread_actions.py b/backend/lib/helpers/thread_actions.py deleted file mode 100644 index 5f46eef1..00000000 --- a/backend/lib/helpers/thread_actions.py +++ /dev/null @@ -1,100 +0,0 @@ -import importlib.util -from logging import Logger -from traceback import format_exc - -import gevent - -from lib import models -from lib.helpers import exceptions -from lib.models import TaskStatus, Action - - -def set_verdict_error(verdict: models.CheckerVerdict, action: Action, message: str): - verdict.status = TaskStatus.CHECK_FAILED - verdict.public_message = f'{action} failed' - verdict.private_message = message - - -def run_generic_action_in_thread( - action: Action, - task: models.Task, - team: models.Team, - action_args: tuple, - action_kwargs: dict, - logger: Logger, -) -> models.CheckerVerdict: - verdict = models.CheckerVerdict( - command=f'checker.{action}()', - action=action, - status=TaskStatus.CHECK_FAILED, - public_message=f'{action} pending', - private_message=f'{action} pending', - ) - - try: - spec = importlib.util.spec_from_file_location(task.name, task.checker) - checker_module = importlib.util.module_from_spec(spec) - spec.loader.exec_module(checker_module) # type: ignore - checker = checker_module.Checker(team.ip) # type: ignore - finished_exception = checker.get_check_finished_exception() - except BaseException as e: - tb = format_exc() - exc = f'{type(e)}: {e}\n{tb}' - - message = ( - 'Exception while importing checker. ' - 'Your checker is not compatible with "gevent" checker tag. ' - f'Exception: {exc}' - ) - - logger.critical(message) - - set_verdict_error(verdict=verdict, action=action, message=message) - return verdict - - try: - with gevent.Timeout(task.checker_timeout, exceptions.CheckerTimeoutException): - checker.action(action.name.lower(), *action_args, **action_kwargs) - - except finished_exception: - try: - verdict.status = TaskStatus(checker.status) - except ValueError: - mess = ( - f'Invalid TaskStatus: {checker.status} for ' - f'team `{team.id}` task `{task.id}`' - ) - logger.error(mess) - - set_verdict_error(verdict=verdict, action=action, message=mess) - else: - verdict.public_message = checker.public - verdict.private_message = checker.private - - except exceptions.CheckerTimeoutException: - logger.warning('%s for team %s task %s timed out', action, team.id, task.id) - - verdict.status = TaskStatus.DOWN - verdict.public_message = 'Checker timed out' - verdict.private_message = f'Checker for {action} timed out' - - except BaseException as e: - tb = format_exc() - exc = f'{type(e)}: {e}\n{tb}' - - logger.error( - '%s for team %s task %s failed with %s', - action, - team.id, - task.id, - exc, - ) - - set_verdict_error(verdict=verdict, action=action, message=exc) - - else: - mess = 'Checker did not raise CheckFinished' - logger.error(mess) - set_verdict_error(verdict=verdict, action=action, message=mess) - - return verdict diff --git a/backend/lib/models/task.py b/backend/lib/models/task.py index 0c318587..bd690d56 100644 --- a/backend/lib/models/task.py +++ b/backend/lib/models/task.py @@ -1,6 +1,7 @@ -from kombu.utils import json as kjson from typing import Optional, List, Dict, Any +from kombu.utils import json as kjson + from .base import BaseModel from .flag import Flag from .verdict import CheckerVerdict @@ -61,10 +62,6 @@ def to_json_for_participants(self) -> str: def checker_tags(self) -> List[str]: return self.checker_type.split('_') - @property - def is_checker_gevent_optimized(self) -> bool: - return 'gevent' in self.checker_tags - @property def checker_returns_flag_id(self) -> bool: return 'nfr' not in self.checker_tags diff --git a/backend/requirements.txt b/backend/requirements.txt index 4c4b11bc..5e644f44 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -1,43 +1,43 @@ -amqp==5.0.6 +amqp==5.0.9 bidict==0.21.2 billiard==3.6.4.0 -celery==5.0.5 +celery==5.2.3 certifi==2020.12.5 -click==7.1.2 +click==8.0.3 click-didyoumean==0.0.3 click-plugins==1.1.1 -click-repl==0.1.6 +click-repl==0.2.0 +Deprecated==1.2.13 dnspython==1.16.0 eventlet==0.30.2 -Flask==1.1.2 +Flask==2.0.2 Flask-Cors==3.0.10 -Flask-SocketIO==5.0.1 -flower @ https://github.com/mher/flower/zipball/master -gevent==21.1.2 -greenlet==1.1.0 +Flask-SocketIO==5.1.1 +flower @ https://github.com/mher/flower/zipball/47a0eb937a1a132a9cb5b2e137d96b93e4cdc89e +greenlet==1.1.2 gunicorn==20.1.0 hiredis==2.0.0 -humanize==3.5.0 -itsdangerous==1.1.0 -Jinja2==2.11.3 -kombu==5.0.2 -librabbitmq==2.0.0 -MarkupSafe==1.1.1 +humanize==3.12.0 +itsdangerous==2.0.1 +Jinja2==3.0.3 +kombu==5.2.3 +MarkupSafe==2.0.1 +packaging==21.3 prometheus-client==0.8.0 prompt-toolkit==3.0.18 -psycopg2==2.8.6 -pydantic==1.8.1 +psycopg2==2.9.3 +pydantic==1.9.0 +pyparsing==3.0.6 python-dateutil==2.8.1 python-engineio==4.1.0 python-socketio==5.2.1 -pytz==2021.1 +pytz==2021.3 PyYAML==5.4.1 -redis==3.5.3 +redis==4.1.0 six==1.16.0 tornado==6.1 typing-extensions==3.10.0.0 vine==5.0.0 wcwidth==0.2.5 -Werkzeug==1.0.1 -zope.event==4.5.0 -zope.interface==5.4.0 +Werkzeug==2.0.2 +wrapt==1.13.3 diff --git a/backend/services/admin/viewsets/api_base.py b/backend/services/admin/viewsets/api_base.py index 939c2fd5..928c5f72 100644 --- a/backend/services/admin/viewsets/api_base.py +++ b/backend/services/admin/viewsets/api_base.py @@ -1,6 +1,7 @@ -from flask import Blueprint, request from typing import Mapping +from flask import Blueprint, request + from .authentication import check_session from .utils import abort_with_error @@ -25,7 +26,7 @@ def __init__(self, bp: Blueprint, auth: bool = False): f'/{self.model}s//', endpoint=f'{self.model}_detail', view_func=self.Dispatch(self), - methods=['PUT', 'DELETE'], + methods=['GET', 'PUT', 'DELETE'], ) self.kwargs: Mapping = {} diff --git a/backend/services/admin/viewsets/tasks.py b/backend/services/admin/viewsets/tasks.py index 41359012..b680bf1a 100644 --- a/backend/services/admin/viewsets/tasks.py +++ b/backend/services/admin/viewsets/tasks.py @@ -9,6 +9,16 @@ class TaskApi(ApiSet): model = 'task' + @staticmethod + def retrieve(task_id): + tasks = storage.tasks.get_all_tasks() + try: + task = next(filter(lambda x: x.id == task_id, tasks)) + except StopIteration: + return make_err_response('No such task', status=404) + + return jsonify(task.to_dict()) + @staticmethod def list(): tasks = storage.tasks.get_all_tasks() diff --git a/backend/services/admin/viewsets/teams.py b/backend/services/admin/viewsets/teams.py index cc833d92..31bda8f4 100644 --- a/backend/services/admin/viewsets/teams.py +++ b/backend/services/admin/viewsets/teams.py @@ -9,6 +9,16 @@ class TeamApi(ApiSet): model = 'team' + @staticmethod + def retrieve(team_id): + teams = storage.teams.get_all_teams() + try: + team = next(filter(lambda x: x.id == team_id, teams)) + except StopIteration: + return make_err_response('No such team', status=404) + + return jsonify(team.to_dict()) + @staticmethod def list(): teams = storage.teams.get_all_teams() diff --git a/backend/services/events/app.py b/backend/services/events/app.py index 37d0d5be..d09b9aac 100644 --- a/backend/services/events/app.py +++ b/backend/services/events/app.py @@ -19,7 +19,7 @@ async_mode='eventlet', client_manager=sio_manager, path='socket.io', - cors_allowed_origins=[], + cors_allowed_origins='*', ) diff --git a/backend/services/tasks/handlers.py b/backend/services/tasks/handlers.py index f05fbd6f..b8c6c626 100644 --- a/backend/services/tasks/handlers.py +++ b/backend/services/tasks/handlers.py @@ -5,7 +5,6 @@ from celery.utils.log import get_task_logger from lib import storage, models -from lib.helpers import checkers from lib.helpers.jobs import JobNames from lib.models import TaskStatus, Action @@ -61,8 +60,8 @@ def checker_results_handler( """ Parse returning verdicts and return the final one. - If there were any errors, the first one'll be returned - Otherwise, verdict of the first (sequentially) action will be returned. + If there were any errors, the first error is returned + Otherwise, verdict of the first action's verdict is returned. """ check_verdict = None puts_verdicts = [] @@ -96,7 +95,13 @@ def checker_results_handler( parsed_verdicts.append(gets_verdict) if verdicts: - result_verdict = checkers.first_error_or_first_verdict(parsed_verdicts) + try: + result_verdict = next(filter( + lambda x: x.status != TaskStatus.UP, + verdicts, + )) + except StopIteration: + result_verdict = verdicts[0] else: logger.critical('No verdicts returned from actions!') result_verdict = models.CheckerVerdict( diff --git a/backend/services/ticker/__main__.py b/backend/services/ticker/__main__.py index c1b6c529..3153935c 100644 --- a/backend/services/ticker/__main__.py +++ b/backend/services/ticker/__main__.py @@ -1,9 +1,7 @@ import logging import sys import time -from datetime import timedelta, datetime - -import pytz +from datetime import timedelta, datetime, timezone from lib import storage, models from services.tasks import get_celery_app @@ -75,10 +73,8 @@ def bootstrap_schedules(state: TickerState): def main(state: TickerState): - game_config = storage.game.get_current_game_config() - tz = pytz.timezone(game_config.timezone) while True: - now = tz.localize(datetime.now()) + now = datetime.now(timezone.utc) due_schedules = state.get_due_schedules(now) for schedule in due_schedules: logger.info('Executing schedule %s', schedule.schedule_id) diff --git a/cli/base/setup.py b/cli/base/setup.py index 020963e2..93a8182f 100644 --- a/cli/base/setup.py +++ b/cli/base/setup.py @@ -51,6 +51,7 @@ def setup_redis(config: models.RedisConfig): def setup_rabbitmq(config: models.RabbitMQConfig): + management_url = f'http://{config.user}:{config.password}@{config.host}:15672/api/' rabbitmq_config = [ "# THIS FILE IS MANAGED BY 'control.py'", f'RABBITMQ_HOST={config.host}', @@ -58,6 +59,7 @@ def setup_rabbitmq(config: models.RabbitMQConfig): f'RABBITMQ_DEFAULT_USER={config.user}', f'RABBITMQ_DEFAULT_PASS={config.password}', f'RABBITMQ_DEFAULT_VHOST={config.vhost}', + f'BROKER_API_URL={management_url}', ] utils.print_bold(f'Writing broker env to {constants.RABBITMQ_ENV_PATH}') diff --git a/cli/kube/destroy.py b/cli/kube/destroy.py index b062da9b..cb6251f6 100644 --- a/cli/kube/destroy.py +++ b/cli/kube/destroy.py @@ -25,7 +25,7 @@ def destroy(): for entry in to_unset: utils.run_command(['kubectl', 'config', 'unset', entry]) - click.echo('Cleaning up the registry') + click.echo('Cleaning up the registry', err=True) cmd = [ 'yc', 'container', 'image', 'list', '--registry-id', registry_id, @@ -35,7 +35,7 @@ def destroy(): for image in registry_images: image_id = image['id'] image_name = image['name'] - click.echo(f'Removing image {image_name}') + click.echo(f'Removing image {image_name}', err=True) utils.run_command(['yc', 'container', 'image', 'delete', image_id]) utils.run_command( diff --git a/cli/models.py b/cli/models.py index ddfc545f..73067bf7 100644 --- a/cli/models.py +++ b/cli/models.py @@ -1,5 +1,5 @@ from datetime import datetime -from typing import List, Optional, Union +from typing import List, Optional from pydantic import BaseModel @@ -44,24 +44,27 @@ class GameConfig(BaseModel): start_time: datetime timezone: str = 'UTC' - default_score: Union[int, float] = 2500 - game_hardness: Union[int, float] = 10 + default_score: float = 2500 + game_hardness: float = 10 mode: str = 'classic' - get_period: Optional[int] = None + get_period: Optional[int] inflation: bool = True checkers_path: str = '/checkers/' - env_path: str = '/checkers/bin/' + env_path: str = '' class Task(BaseModel): - checker: str name: str + checker: str + gets: int + puts: int + places: int + checker_timeout: int checker_type: str = 'hackerdom' - checker_timeout: int = 15 - gets: int = 1 - puts: int = 1 - places: int = 1 + env_path: Optional[str] + default_score: Optional[float] + get_period: Optional[int] class Team(BaseModel): diff --git a/cli/requirements.txt b/cli/requirements.txt index fba0c660..4a3937c1 100644 --- a/cli/requirements.txt +++ b/cli/requirements.txt @@ -1,3 +1,3 @@ click==7.1.2 -pydantic==1.7.3 +pydantic==1.9.0 PyYAML==5.4.1 diff --git a/cli/utils.py b/cli/utils.py index f48856ea..3484a5bf 100644 --- a/cli/utils.py +++ b/cli/utils.py @@ -64,7 +64,7 @@ def backup_config(): def dump_config(config: models.Config): print_bold(f'Writing new configuration to {constants.CONFIG_PATH}') with constants.CONFIG_PATH.open(mode='w') as f: - yaml.safe_dump(config.dict(by_alias=True), f) + yaml.safe_dump(config.dict(by_alias=True, exclude_none=True), f) def override_config( @@ -121,6 +121,7 @@ def setup_auxiliary_structure(config: models.BasicConfig) -> models.Config: def run_command(command: List[str], cwd=None, env=None): + print_bold(f'Running command {command}') p = subprocess.Popen(command, cwd=cwd, env=env) rc = p.wait() if rc != 0: @@ -129,6 +130,7 @@ def run_command(command: List[str], cwd=None, env=None): def get_output(command: List[str], cwd=None, env=None) -> str: + print_bold(f'Running command {command}') return subprocess.check_output(command, cwd=cwd, env=env).decode() @@ -166,15 +168,15 @@ def print_file_exception_info(_func, path, _exc_info): def print_error(message: str): - click.secho(message, fg='red') + click.secho(message, fg='red', err=True) def print_success(message: str): - click.secho(message, fg='green') + click.secho(message, fg='green', err=True) def print_bold(message: str): - click.secho(message, bold=True) + click.secho(message, bold=True, err=True) def remove_file(path: Path): diff --git a/docker-compose-tests.yml b/docker-compose-tests.yml index a7edd872..08450520 100644 --- a/docker-compose-tests.yml +++ b/docker-compose-tests.yml @@ -65,5 +65,5 @@ services: build: context: ./tests/service ports: - - 10000:10000 + - "10000:10000" restart: "no" diff --git a/docker-compose.yml b/docker-compose.yml index 0a3631fc..0f6beeb0 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -109,7 +109,7 @@ services: - http-receiver redis: - image: redis:5.0.8-alpine + image: redis:6.2.5-alpine command: [ "sh", "-c", "redis-server --requirepass $$REDIS_PASSWORD" ] restart: on-failure sysctls: @@ -121,7 +121,7 @@ services: rabbitmq: hostname: rabbitmq - image: rabbitmq:3.8.3-management-alpine + image: rabbitmq:3.9.7-management-alpine restart: on-failure env_file: - ./docker_config/rabbitmq_environment.env @@ -130,7 +130,7 @@ services: - "15672:15672" postgres: - image: postgres:12.2 + image: postgres:13.4-alpine volumes: - ./docker_volumes/postgres/data/:/var/lib/postgresql/data/ env_file: diff --git a/docker_config/celery/Dockerfile b/docker_config/celery/Dockerfile index 8d50def8..8219701d 100644 --- a/docker_config/celery/Dockerfile +++ b/docker_config/celery/Dockerfile @@ -21,6 +21,8 @@ RUN chmod +x /await_start.sh ########## CUSTOMIZE ########## +ENV PWNLIB_NOTERM=true + # uncomment blocks to enable features ### selenium (chromedriver) dependencies (from https://github.com/joyzoursky/docker-python-chromedriver) ### diff --git a/docker_config/celery/entrypoint.sh b/docker_config/celery/entrypoint.sh index 1ab062e5..5313cf80 100644 --- a/docker_config/celery/entrypoint.sh +++ b/docker_config/celery/entrypoint.sh @@ -11,17 +11,27 @@ case ${SERVICE} in echo "[*] Starting celery worker" celery -A tasks.app \ worker \ - -E -l info \ - --pool=gevent \ - --concurrency=20 + -E -l info ;; "flower") + set +e + echo "[*] Checking if celery is available" + celery -A tasks.app inspect registered + # shellcheck disable=SC2181 + while [[ $? != 0 ]]; do + echo "[*] Waiting for celery..." + sleep 5 + celery -A tasks.app inspect registered + done + set -e + echo "[*] Starting celery flower" FLOWER_PORT=${PORT:-5000} \ - flower -A tasks.app \ + celery -A tasks.app \ flower \ --basic_auth="${ADMIN_USERNAME}:${ADMIN_PASSWORD}" \ --url_prefix=flower \ - --address=0.0.0.0 + --address=0.0.0.0 \ + --broker_api="${BROKER_API_URL}" ;; esac diff --git a/front/.eslintrc.js b/front/.eslintrc.js index 3f3df4f7..b4f659a2 100644 --- a/front/.eslintrc.js +++ b/front/.eslintrc.js @@ -1,14 +1,17 @@ module.exports = { - root: true, - env: { - node: true - }, - extends: ["plugin:vue/essential", "@vue/prettier"], - rules: { - "no-console": process.env.NODE_ENV === "production" ? "error" : "off", - "no-debugger": process.env.NODE_ENV === "production" ? "error" : "off" - }, - parserOptions: { - parser: "babel-eslint" - } + root: true, + env: { + node: true, + }, + extends: ['plugin:vue/essential', '@vue/prettier'], + rules: { + 'no-console': [ + process.env.NODE_ENV === 'production' ? 'error' : 'off', + { "allow": ["warn", "error"] }, + ], + 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off', + }, + parserOptions: { + parser: 'babel-eslint', + }, }; diff --git a/front/babel.config.js b/front/babel.config.js index 397abca8..218963bd 100644 --- a/front/babel.config.js +++ b/front/babel.config.js @@ -1,3 +1,3 @@ module.exports = { - presets: ["@vue/cli-plugin-babel/preset"] + presets: ['@vue/cli-plugin-babel/preset'], }; diff --git a/front/dist/css/admin.707afa6c.css b/front/dist/css/admin.707afa6c.css new file mode 100644 index 00000000..3b6826a8 --- /dev/null +++ b/front/dist/css/admin.707afa6c.css @@ -0,0 +1 @@ +.error-message[data-v-c74ac9a2]{color:red}.table{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-flow:column nowrap;-moz-box-orient:vertical;-moz-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap}.table>:first-child>:not(:last-child){font-weight:700;padding-top:.6em;padding-bottom:.6em}.table>:not(:first-child)>*{min-height:6em}.table>:last-child>:last-child>*{border-bottom:1px solid #c6cad1}.row{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row nowrap;-moz-box-orient:horizontal;-moz-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;text-align:center;border-top:1px solid #c6cad1;border-left:1px solid #c6cad1;border-right:1px solid #c6cad1}.row.highlighted>*{padding-top:3px;padding-bottom:3px}.row.highlighted>:first-child{padding-left:3px}.row.highlighted>:last-child{padding-right:3px}.pd-3[data-v-359d0233]{margin-left:2px}.team-group[data-v-359d0233]{-webkit-box-flex:7;-webkit-flex:7 1 20%;-moz-box-flex:7;-ms-flex:7 1 20%;flex:7 1 20%;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row nowrap;-moz-box-orient:horizontal;-moz-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap}.teams-list-move[data-v-359d0233]{-webkit-transition:-webkit-transform 1s;transition:-webkit-transform 1s;-o-transition:-o-transform 1s;-moz-transition:transform 1s,-moz-transform 1s;transition:transform 1s;transition:transform 1s,-webkit-transform 1s,-moz-transform 1s,-o-transform 1s}.team-name[data-v-359d0233]{font-weight:700}.number[data-v-359d0233]{-webkit-box-flex:1;-webkit-flex:1 1 0;-moz-box-flex:1;-ms-flex:1 1 0px;flex:1 1 0;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-flow:column nowrap;-moz-box-orient:vertical;-moz-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap;-webkit-box-pack:center;-webkit-justify-content:center;-moz-box-pack:center;-ms-flex-pack:center;justify-content:center}.team[data-v-359d0233]{-webkit-box-flex:4;-webkit-flex:4 1 15%;-moz-box-flex:4;-ms-flex:4 1 15%;flex:4 1 15%;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-flow:column nowrap;-moz-box-orient:vertical;-moz-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap;-webkit-box-pack:center;-webkit-justify-content:center;-moz-box-pack:center;-ms-flex-pack:center;justify-content:center;position:relative}.score[data-v-359d0233]{-webkit-box-flex:2;-webkit-flex:2 1 5%;-moz-box-flex:2;-ms-flex:2 1 5%;flex:2 1 5%;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-flow:column nowrap;-moz-box-orient:vertical;-moz-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap;-webkit-box-pack:center;-webkit-justify-content:center;-moz-box-pack:center;-ms-flex-pack:center;justify-content:center}.service[data-v-359d0233]{-webkit-box-flex:20;-webkit-flex:20 2 0;-moz-box-flex:20;-ms-flex:20 2 0px;flex:20 2 0;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row nowrap;-moz-box-orient:horizontal;-moz-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;border-left:1px solid #c6cad1}.service[data-v-359d0233]>:not(:last-child){border-right:1px solid #c6cad1}.service-name[data-v-359d0233]{-webkit-box-flex:20;-webkit-flex:20 2 0;-moz-box-flex:20;-ms-flex:20 2 0px;flex:20 2 0;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row nowrap;-moz-box-orient:horizontal;-moz-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;text-align:center}.service-cell[data-v-359d0233]{-webkit-box-flex:1;-webkit-flex:1 1 0;-moz-box-flex:1;-ms-flex:1 1 0px;flex:1 1 0;position:relative;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-flow:column nowrap;-moz-box-orient:vertical;-moz-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap;-webkit-justify-content:space-around;-ms-flex-pack:distribute;justify-content:space-around}.sla[data-v-359d0233]{text-align:left;margin-left:.5em}.fp[data-v-359d0233]{text-align:left;margin-left:.5em}.flags[data-v-359d0233]{text-align:left;margin-left:.5em}.edit[data-v-359d0233],.info[data-v-359d0233],.tt-edit[data-v-359d0233]{padding:0;position:absolute;top:.5em;left:-webkit-calc(100% - 3em);left:-moz-calc(100% - 3em);left:calc(100% - 3em);width:2.5em;height:2.5em;-webkit-border-radius:.3em;-moz-border-radius:.3em;border-radius:.3em;font-size:.7em;border:1px solid #c6cad1}.edit[data-v-359d0233]:focus,.info[data-v-359d0233]:focus,.tt-edit[data-v-359d0233]:focus{outline:0;border:1px solid #c6cad1}.tt-edit[data-v-359d0233]{left:-webkit-calc(100% - 6em);left:-moz-calc(100% - 6em);left:calc(100% - 6em)}.tooltip[data-v-359d0233]{font-size:.7rem;left:0;top:0;-webkit-transform:translateX(-100%) translateY(-webkit-calc(-100% - .25em));-moz-transform:translateX(-100%) translateY(-moz-calc(-100% - .25em));-ms-transform:translateX(-100%) translateY(calc(-100% - .25em));-o-transform:translateX(-100%) translateY(calc(-100% - .25em));transform:translateX(-100%) translateY(calc(-100% - .25em));position:absolute;width:20em;text-align:center;display:block;background-color:#000;color:#fff;-webkit-border-radius:.5em;-moz-border-radius:.5em;border-radius:.5em;padding:1em;opacity:0;z-index:-1}.edit:hover .tooltip[data-v-359d0233],.info:hover .tooltip[data-v-359d0233],.tt-edit:hover .tooltip[data-v-359d0233]{opacity:1;z-index:1}.highlighted[data-v-359d0233]{-webkit-transform:translateZ(0);-moz-transform:translateZ(0);transform:translateZ(0);-webkit-animation:rotate-data-v-359d0233 5s linear infinite;-moz-animation:rotate-data-v-359d0233 5s infinite linear;animation:rotate-data-v-359d0233 5s linear infinite;background:#30ff90;background:-webkit-gradient(linear,left top,right top,from(#30ff90),color-stop(25%,#ed2ded),color-stop(50%,#c99826),color-stop(75%,#30ffe6),to(#30ff90));background:-webkit-linear-gradient(left,#30ff90,#ed2ded 25%,#c99826 50%,#30ffe6 75%,#30ff90);background:-moz-linear-gradient(left,#30ff90 0,#ed2ded 25%,#c99826 50%,#30ffe6 75%,#30ff90 100%);background:-o-linear-gradient(left,#30ff90 0,#ed2ded 25%,#c99826 50%,#30ffe6 75%,#30ff90 100%);background:linear-gradient(90deg,#30ff90 0,#ed2ded 25%,#c99826 50%,#30ffe6 75%,#30ff90)}@-webkit-keyframes rotate-data-v-359d0233{0%{background-position:-3000px}to{background-position:0}}@-moz-keyframes rotate-data-v-359d0233{0%{background-position:-3000px}to{background-position:0}}@keyframes rotate-data-v-359d0233{0%{background-position:-3000px}to{background-position:0}}.create-group[data-v-16c38602]{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-flow:row-reverse;-moz-box-orient:horizontal;-moz-box-direction:reverse;-ms-flex-flow:row-reverse;flex-flow:row-reverse}.create-btn[data-v-16c38602]{font-size:1em;margin:1em}.error-message[data-v-7c304018]{color:red}.content-row[data-v-b3593882]>:not(:first-child){border-left:1px solid #c6cad1}.checks[data-v-b3593882],.command[data-v-b3593882],.flags[data-v-b3593882],.private[data-v-b3593882],.public[data-v-b3593882],.round[data-v-b3593882],.score[data-v-b3593882],.status[data-v-b3593882]{-webkit-box-flex:1;-webkit-flex:1 1 0;-moz-box-flex:1;-ms-flex:1 1 0px;flex:1 1 0;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-flow:column nowrap;-moz-box-orient:vertical;-moz-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap;-webkit-box-pack:center;-webkit-justify-content:center;-moz-box-pack:center;-ms-flex-pack:center;justify-content:center}.command[data-v-b3593882],.private[data-v-b3593882],.public[data-v-b3593882]{-webkit-box-flex:1.5;-webkit-flex:1.5 2 15%;-moz-box-flex:1.5;-ms-flex:1.5 2 15%;flex:1.5 2 15%;overflow:scroll} \ No newline at end of file diff --git a/front/dist/css/app.119a3a7c.css b/front/dist/css/app.119a3a7c.css deleted file mode 100644 index 85ba43e7..00000000 --- a/front/dist/css/app.119a3a7c.css +++ /dev/null @@ -1 +0,0 @@ -body,html{height:100%;margin:0;background-color:#fff}body{font-family:Merriweather,serif}.status-101{background-color:#7dfc74}.status-102{background-color:#5191ff}.status-103{background-color:#ff9114}.status-104{background-color:#ff5b5b}.status-110{background-color:#ff0}.status--1{background-color:#fa83fc}.status-0{background-color:#fff}.top-1{background-color:#ffdf00}.top-2{background-color:silver}.top-3{background-color:#d3983f}.container[data-v-2788e5c9]{margin-left:4em;margin-right:4em}.tp[data-v-6d6964e1]{z-index:1}.topbar[data-v-6d6964e1]{position:relative;background:hsla(0,0%,73.3%,.3333333333333333);padding:1em;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row nowrap;-moz-box-orient:horizontal;-moz-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:justify;-webkit-justify-content:space-between;-moz-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-webkit-align-items:center;-moz-box-align:center;-ms-flex-align:center;align-items:center}.progress-bar[data-v-6d6964e1]{background-color:#0f0;height:100%;position:absolute;top:0;left:0;opacity:.5}.pd-3[data-v-232ca285]{margin-left:2px}.default-team[data-v-232ca285]{background-color:#fff}.team-group[data-v-232ca285]{-webkit-box-flex:7;-webkit-flex:7 1 20%;-moz-box-flex:7;-ms-flex:7 1 20%;flex:7 1 20%;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row nowrap;-moz-box-orient:horizontal;-moz-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap}.team-row[data-v-232ca285]{cursor:pointer}.teams-list-move[data-v-232ca285]{-webkit-transition:-webkit-transform 1s;transition:-webkit-transform 1s;-o-transition:-o-transform 1s;-moz-transition:transform 1s,-moz-transform 1s;transition:transform 1s;transition:transform 1s,-webkit-transform 1s,-moz-transform 1s,-o-transform 1s}.table[data-v-232ca285]{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-flow:column nowrap;-moz-box-orient:vertical;-moz-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap}.table[data-v-232ca285]>:first-child>:not(:last-child){font-weight:700;padding-top:.6em;padding-bottom:.6em}.table>:not(:first-child)>[data-v-232ca285]{height:6em}.table>:last-child>:last-child>[data-v-232ca285]{border-bottom:1px solid #c6cad1}.row[data-v-232ca285]{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row nowrap;-moz-box-orient:horizontal;-moz-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;text-align:center;border-top:1px solid #c6cad1;border-left:1px solid #c6cad1;border-right:1px solid #c6cad1}.row>[data-v-232ca285]{word-wrap:break-word;min-width:0}.row.highlighted>[data-v-232ca285]{padding-top:3px;padding-bottom:3px}.row.highlighted[data-v-232ca285]>:first-child{padding-left:3px}.row.highlighted[data-v-232ca285]>:last-child{padding-right:3px}.team-name[data-v-232ca285]{font-weight:700}.number[data-v-232ca285]{-webkit-box-flex:1;-webkit-flex:1 1 0;-moz-box-flex:1;-ms-flex:1 1 0px;flex:1 1 0;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-flow:column nowrap;-moz-box-orient:vertical;-moz-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap;-webkit-box-pack:center;-webkit-justify-content:center;-moz-box-pack:center;-ms-flex-pack:center;justify-content:center}.team[data-v-232ca285]{-webkit-box-flex:4;-webkit-flex:4 1 15%;-moz-box-flex:4;-ms-flex:4 1 15%;flex:4 1 15%;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-flow:column nowrap;-moz-box-orient:vertical;-moz-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap;-webkit-box-pack:center;-webkit-justify-content:center;-moz-box-pack:center;-ms-flex-pack:center;justify-content:center}.score[data-v-232ca285]{-webkit-box-flex:2;-webkit-flex:2 1 5%;-moz-box-flex:2;-ms-flex:2 1 5%;flex:2 1 5%;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-flow:column nowrap;-moz-box-orient:vertical;-moz-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap;-webkit-box-pack:center;-webkit-justify-content:center;-moz-box-pack:center;-ms-flex-pack:center;justify-content:center}.service[data-v-232ca285]{-webkit-box-flex:20;-webkit-flex:20 2 0;-moz-box-flex:20;-ms-flex:20 2 0px;flex:20 2 0;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row nowrap;-moz-box-orient:horizontal;-moz-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;border-left:1px solid #c6cad1}.service[data-v-232ca285]>:not(:last-child){border-right:1px solid #c6cad1}.service-name[data-v-232ca285]{-webkit-box-flex:20;-webkit-flex:20 2 0;-moz-box-flex:20;-ms-flex:20 2 0px;flex:20 2 0;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row nowrap;-moz-box-orient:horizontal;-moz-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;text-align:center}.service-cell[data-v-232ca285]{-webkit-box-flex:1;-webkit-flex:1 1 0;-moz-box-flex:1;-ms-flex:1 1 0px;flex:1 1 0;position:relative;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-flow:column nowrap;-moz-box-orient:vertical;-moz-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap;-webkit-justify-content:space-around;-ms-flex-pack:distribute;justify-content:space-around}.sla[data-v-232ca285]{text-align:left;margin-left:.5em}.fp[data-v-232ca285]{text-align:left;margin-left:.5em}.flags[data-v-232ca285]{text-align:left;margin-left:.5em}.info[data-v-232ca285]{padding:0;position:absolute;top:.5em;left:-webkit-calc(100% - 3em);left:-moz-calc(100% - 3em);left:calc(100% - 3em);width:2.5em;height:2.5em;-webkit-border-radius:.3em;-moz-border-radius:.3em;border-radius:.3em;font-size:.7em;border:1px solid #c6cad1}.info[data-v-232ca285]:focus{outline:0;border:1px solid #c6cad1}.tooltip[data-v-232ca285]{font-size:.7rem;left:0;top:0;-webkit-transform:translateX(-100%) translateY(-webkit-calc(-100% - .25em));-moz-transform:translateX(-100%) translateY(-moz-calc(-100% - .25em));-ms-transform:translateX(-100%) translateY(calc(-100% - .25em));-o-transform:translateX(-100%) translateY(calc(-100% - .25em));transform:translateX(-100%) translateY(calc(-100% - .25em));position:absolute;width:20em;text-align:center;display:block;background-color:#000;color:#fff;-webkit-border-radius:.5em;-moz-border-radius:.5em;border-radius:.5em;padding:1em;opacity:0;z-index:-1}.info:hover .tooltip[data-v-232ca285]{opacity:1;z-index:1}.highlighted[data-v-232ca285]{-webkit-transform:translateZ(0);-moz-transform:translateZ(0);transform:translateZ(0);-webkit-animation:rotate-data-v-232ca285 5s linear infinite;-moz-animation:rotate-data-v-232ca285 5s infinite linear;animation:rotate-data-v-232ca285 5s linear infinite;background:#30ff90;background:-webkit-gradient(linear,left top,right top,from(#30ff90),color-stop(25%,#ed2ded),color-stop(50%,#c99826),color-stop(75%,#30ffe6),to(#30ff90));background:-webkit-linear-gradient(left,#30ff90,#ed2ded 25%,#c99826 50%,#30ffe6 75%,#30ff90);background:-moz-linear-gradient(left,#30ff90 0,#ed2ded 25%,#c99826 50%,#30ffe6 75%,#30ff90 100%);background:-o-linear-gradient(left,#30ff90 0,#ed2ded 25%,#c99826 50%,#30ffe6 75%,#30ff90 100%);background:linear-gradient(90deg,#30ff90 0,#ed2ded 25%,#c99826 50%,#30ffe6 75%,#30ff90)}@-webkit-keyframes rotate-data-v-232ca285{0%{background-position:-3000px}to{background-position:0}}@-moz-keyframes rotate-data-v-232ca285{0%{background-position:-3000px}to{background-position:0}}@keyframes rotate-data-v-232ca285{0%{background-position:-3000px}to{background-position:0}}.statuses[data-v-4069afa5]{margin-top:2em;margin-bottom:2em;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row nowrap;-moz-box-orient:horizontal;-moz-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap}.statuses>[data-v-4069afa5]{-webkit-box-flex:1;-webkit-flex:1 1 auto;-moz-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;text-align:center;padding:.5em}.statuses .status-cell[data-v-4069afa5]{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-flow:column nowrap;-moz-box-orient:vertical;-moz-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap;-webkit-box-pack:center;-webkit-justify-content:center;-moz-box-pack:center;-ms-flex-pack:center;justify-content:center}#app[data-v-4d8480e4]{height:100%;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-flow:column nowrap;-moz-box-orient:vertical;-moz-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap}#app[data-v-4d8480e4]>:nth-child(2){-webkit-box-flex:1;-webkit-flex-grow:1;-moz-box-flex:1;-ms-flex-positive:1;flex-grow:1}.footer[data-v-4d8480e4]{text-align:center;margin-top:3em}.team[data-v-4d8480e4]{font-size:1.1em}.flag[data-v-0618c0a0]{color:#0f0;background-color:#000}.mark[data-v-0618c0a0]{color:#ff0}.screen[data-v-11926072]{width:100%;height:100%;background-color:#000}.pony[data-v-11926072]{position:fixed;overflow:hidden;border-style:none;margin:0;padding:0;background:rgba(0,0,0,0);width:100%;height:100%}.table[data-v-321a8719]{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-flow:column nowrap;-moz-box-orient:vertical;-moz-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap}.table[data-v-321a8719]>:first-child>:not(:last-child){font-weight:700;padding-top:.6em;padding-bottom:.6em}.table>:not(:first-child)>[data-v-321a8719]{height:6em}.table>:last-child>:last-child>[data-v-321a8719]{border-bottom:1px solid #c6cad1}.row[data-v-321a8719]{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row nowrap;-moz-box-orient:horizontal;-moz-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;text-align:center}.row>[data-v-321a8719]{border-top:1px solid #c6cad1;word-wrap:break-word;min-width:0}.row[data-v-321a8719]>:first-child{border-left:1px solid #c6cad1}.row[data-v-321a8719]>:last-child{border-right:1px solid #c6cad1}.team-name[data-v-321a8719]{font-weight:700}.number[data-v-321a8719]{-webkit-box-flex:1;-webkit-flex:1 1 0;-moz-box-flex:1;-ms-flex:1 1 0px;flex:1 1 0;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-flow:column nowrap;-moz-box-orient:vertical;-moz-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap;-webkit-box-pack:center;-webkit-justify-content:center;-moz-box-pack:center;-ms-flex-pack:center;justify-content:center}.team[data-v-321a8719]{-webkit-box-flex:4;-webkit-flex:4 1 15%;-moz-box-flex:4;-ms-flex:4 1 15%;flex:4 1 15%;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-flow:column nowrap;-moz-box-orient:vertical;-moz-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap;-webkit-box-pack:center;-webkit-justify-content:center;-moz-box-pack:center;-ms-flex-pack:center;justify-content:center}.score[data-v-321a8719]{-webkit-box-flex:2;-webkit-flex:2 1 5%;-moz-box-flex:2;-ms-flex:2 1 5%;flex:2 1 5%;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-flow:column nowrap;-moz-box-orient:vertical;-moz-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap;-webkit-box-pack:center;-webkit-justify-content:center;-moz-box-pack:center;-ms-flex-pack:center;justify-content:center}.service[data-v-321a8719]{-webkit-box-flex:20;-webkit-flex:20 2 0;-moz-box-flex:20;-ms-flex:20 2 0px;flex:20 2 0;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row nowrap;-moz-box-orient:horizontal;-moz-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;border-left:1px solid #c6cad1}.service[data-v-321a8719]>:not(:last-child){border-right:1px solid #c6cad1}.service-name[data-v-321a8719]{-webkit-box-flex:20;-webkit-flex:20 2 0;-moz-box-flex:20;-ms-flex:20 2 0px;flex:20 2 0;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row nowrap;-moz-box-orient:horizontal;-moz-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;text-align:center}.service-cell[data-v-321a8719]{-webkit-box-flex:1;-webkit-flex:1 1 0;-moz-box-flex:1;-ms-flex:1 1 0px;flex:1 1 0;position:relative;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-flow:column nowrap;-moz-box-orient:vertical;-moz-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap;-webkit-justify-content:space-around;-ms-flex-pack:distribute;justify-content:space-around}.sla[data-v-321a8719]{text-align:left;margin-left:.5em}.fp[data-v-321a8719]{text-align:left;margin-left:.5em}.flags[data-v-321a8719]{text-align:left;margin-left:.5em}.info[data-v-321a8719]{padding:0;position:absolute;top:.5em;left:-webkit-calc(100% - 3em);left:-moz-calc(100% - 3em);left:calc(100% - 3em);width:2.5em;height:2.5em;-webkit-border-radius:.3em;-moz-border-radius:.3em;border-radius:.3em;font-size:.7em;border:1px solid #c6cad1}.info[data-v-321a8719]:focus{outline:0;border:1px solid #c6cad1}.tooltip[data-v-321a8719]{font-size:.7rem;left:0;top:0;-webkit-transform:translateX(-100%) translateY(-webkit-calc(-100% - .25em));-moz-transform:translateX(-100%) translateY(-moz-calc(-100% - .25em));-ms-transform:translateX(-100%) translateY(calc(-100% - .25em));-o-transform:translateX(-100%) translateY(calc(-100% - .25em));transform:translateX(-100%) translateY(calc(-100% - .25em));position:absolute;width:20em;text-align:center;display:block;background-color:#000;color:#fff;-webkit-border-radius:.5em;-moz-border-radius:.5em;border-radius:.5em;padding:1em;opacity:0;z-index:-1}.info:hover .tooltip[data-v-321a8719]{opacity:1;z-index:1}#app[data-v-bd6848d8]{height:100%;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-flow:column nowrap;-moz-box-orient:vertical;-moz-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap}#app[data-v-bd6848d8]>:nth-child(2){-webkit-box-flex:1;-webkit-flex-grow:1;-moz-box-flex:1;-ms-flex-positive:1;flex-grow:1}.footer[data-v-bd6848d8]{text-align:center;margin-top:3em}.team[data-v-bd6848d8]{font-size:1.1em}.pd-3[data-v-95736662]{margin-left:2px}.default-team[data-v-95736662]{background-color:#fff}.team-group[data-v-95736662]{-webkit-box-flex:7;-webkit-flex:7 1 20%;-moz-box-flex:7;-ms-flex:7 1 20%;flex:7 1 20%;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row nowrap;-moz-box-orient:horizontal;-moz-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap}.team-row[data-v-95736662]{cursor:pointer}.teams-list-move[data-v-95736662]{-webkit-transition:-webkit-transform 1s;transition:-webkit-transform 1s;-o-transition:-o-transform 1s;-moz-transition:transform 1s,-moz-transform 1s;transition:transform 1s;transition:transform 1s,-webkit-transform 1s,-moz-transform 1s,-o-transform 1s}.table[data-v-95736662]{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-flow:column nowrap;-moz-box-orient:vertical;-moz-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap}.table[data-v-95736662]>:first-child>:not(:last-child){font-weight:700;padding-top:.6em;padding-bottom:.6em}.table>:not(:first-child)>[data-v-95736662]{height:6em}.table>:last-child>:last-child>[data-v-95736662]{border-bottom:1px solid #c6cad1}.row[data-v-95736662]{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row nowrap;-moz-box-orient:horizontal;-moz-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;text-align:center;border-top:1px solid #c6cad1;border-left:1px solid #c6cad1;border-right:1px solid #c6cad1}.row>[data-v-95736662]{word-wrap:break-word;min-width:0}.row.highlighted>[data-v-95736662]{padding-top:3px;padding-bottom:3px}.row.highlighted[data-v-95736662]>:first-child{padding-left:3px}.row.highlighted[data-v-95736662]>:last-child{padding-right:3px}.team-name[data-v-95736662]{font-weight:700}.number[data-v-95736662]{-webkit-box-flex:1;-webkit-flex:1 1 0;-moz-box-flex:1;-ms-flex:1 1 0px;flex:1 1 0;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-flow:column nowrap;-moz-box-orient:vertical;-moz-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap;-webkit-box-pack:center;-webkit-justify-content:center;-moz-box-pack:center;-ms-flex-pack:center;justify-content:center}.team[data-v-95736662]{-webkit-box-flex:4;-webkit-flex:4 1 15%;-moz-box-flex:4;-ms-flex:4 1 15%;flex:4 1 15%;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-flow:column nowrap;-moz-box-orient:vertical;-moz-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap;-webkit-box-pack:center;-webkit-justify-content:center;-moz-box-pack:center;-ms-flex-pack:center;justify-content:center;position:relative}.score[data-v-95736662]{-webkit-box-flex:2;-webkit-flex:2 1 5%;-moz-box-flex:2;-ms-flex:2 1 5%;flex:2 1 5%;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-flow:column nowrap;-moz-box-orient:vertical;-moz-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap;-webkit-box-pack:center;-webkit-justify-content:center;-moz-box-pack:center;-ms-flex-pack:center;justify-content:center}.service[data-v-95736662]{-webkit-box-flex:20;-webkit-flex:20 2 0;-moz-box-flex:20;-ms-flex:20 2 0px;flex:20 2 0;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row nowrap;-moz-box-orient:horizontal;-moz-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;border-left:1px solid #c6cad1}.service[data-v-95736662]>:not(:last-child){border-right:1px solid #c6cad1}.service-name[data-v-95736662]{-webkit-box-flex:20;-webkit-flex:20 2 0;-moz-box-flex:20;-ms-flex:20 2 0px;flex:20 2 0;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row nowrap;-moz-box-orient:horizontal;-moz-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;text-align:center}.service-cell[data-v-95736662]{-webkit-box-flex:1;-webkit-flex:1 1 0;-moz-box-flex:1;-ms-flex:1 1 0px;flex:1 1 0;position:relative;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-flow:column nowrap;-moz-box-orient:vertical;-moz-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap;-webkit-justify-content:space-around;-ms-flex-pack:distribute;justify-content:space-around}.sla[data-v-95736662]{text-align:left;margin-left:.5em}.fp[data-v-95736662]{text-align:left;margin-left:.5em}.flags[data-v-95736662]{text-align:left;margin-left:.5em}.edit[data-v-95736662],.info[data-v-95736662],.tt-edit[data-v-95736662]{padding:0;position:absolute;top:.5em;left:-webkit-calc(100% - 3em);left:-moz-calc(100% - 3em);left:calc(100% - 3em);width:2.5em;height:2.5em;-webkit-border-radius:.3em;-moz-border-radius:.3em;border-radius:.3em;font-size:.7em;border:1px solid #c6cad1}.edit[data-v-95736662]:focus,.info[data-v-95736662]:focus,.tt-edit[data-v-95736662]:focus{outline:0;border:1px solid #c6cad1}.tt-edit[data-v-95736662]{left:-webkit-calc(100% - 6em);left:-moz-calc(100% - 6em);left:calc(100% - 6em)}.tooltip[data-v-95736662]{font-size:.7rem;left:0;top:0;-webkit-transform:translateX(-100%) translateY(-webkit-calc(-100% - .25em));-moz-transform:translateX(-100%) translateY(-moz-calc(-100% - .25em));-ms-transform:translateX(-100%) translateY(calc(-100% - .25em));-o-transform:translateX(-100%) translateY(calc(-100% - .25em));transform:translateX(-100%) translateY(calc(-100% - .25em));position:absolute;width:20em;text-align:center;display:block;background-color:#000;color:#fff;-webkit-border-radius:.5em;-moz-border-radius:.5em;border-radius:.5em;padding:1em;opacity:0;z-index:-1}.edit:hover .tooltip[data-v-95736662],.info:hover .tooltip[data-v-95736662],.tt-edit:hover .tooltip[data-v-95736662]{opacity:1;z-index:1}.highlighted[data-v-95736662]{-webkit-transform:translateZ(0);-moz-transform:translateZ(0);transform:translateZ(0);-webkit-animation:rotate-data-v-95736662 5s linear infinite;-moz-animation:rotate-data-v-95736662 5s infinite linear;animation:rotate-data-v-95736662 5s linear infinite;background:#30ff90;background:-webkit-gradient(linear,left top,right top,from(#30ff90),color-stop(25%,#ed2ded),color-stop(50%,#c99826),color-stop(75%,#30ffe6),to(#30ff90));background:-webkit-linear-gradient(left,#30ff90,#ed2ded 25%,#c99826 50%,#30ffe6 75%,#30ff90);background:-moz-linear-gradient(left,#30ff90 0,#ed2ded 25%,#c99826 50%,#30ffe6 75%,#30ff90 100%);background:-o-linear-gradient(left,#30ff90 0,#ed2ded 25%,#c99826 50%,#30ffe6 75%,#30ff90 100%);background:linear-gradient(90deg,#30ff90 0,#ed2ded 25%,#c99826 50%,#30ffe6 75%,#30ff90)}@-webkit-keyframes rotate-data-v-95736662{0%{background-position:-3000px}to{background-position:0}}@-moz-keyframes rotate-data-v-95736662{0%{background-position:-3000px}to{background-position:0}}@keyframes rotate-data-v-95736662{0%{background-position:-3000px}to{background-position:0}}#app[data-v-30996ed0]{height:100%;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-flow:column nowrap;-moz-box-orient:vertical;-moz-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap}#app[data-v-30996ed0]>:nth-child(2){-webkit-box-flex:1;-webkit-flex-grow:1;-moz-box-flex:1;-ms-flex-positive:1;flex-grow:1}.create-group[data-v-30996ed0]{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-flow:row-reverse;-moz-box-orient:horizontal;-moz-box-direction:reverse;-ms-flex-flow:row-reverse;flex-flow:row-reverse}.create-btn[data-v-30996ed0]{font-size:1em;margin:1em}.footer[data-v-30996ed0]{text-align:center;margin-top:3em}.team[data-v-30996ed0]{font-size:1.1em}#app[data-v-64e78166]{height:100%;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-flow:column nowrap;-moz-box-orient:vertical;-moz-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap}#app[data-v-64e78166]>:nth-child(2){-webkit-box-flex:1;-webkit-flex-grow:1;-moz-box-flex:1;-ms-flex-positive:1;flex-grow:1}.footer[data-v-64e78166]{text-align:center;margin-top:3em}.team[data-v-64e78166]{font-size:1.1em}#app[data-v-c695c784]{height:100%;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-flow:column nowrap;-moz-box-orient:vertical;-moz-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap}#app[data-v-c695c784]>:nth-child(2){-webkit-box-flex:1;-webkit-flex-grow:1;-moz-box-flex:1;-ms-flex-positive:1;flex-grow:1}.footer[data-v-c695c784]{text-align:center;margin-top:3em}.team[data-v-c695c784]{font-size:1.1em}#app[data-v-67f4a374]{height:100%;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-flow:column nowrap;-moz-box-orient:vertical;-moz-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap}#app[data-v-67f4a374]>:nth-child(2){-webkit-box-flex:1;-webkit-flex-grow:1;-moz-box-flex:1;-ms-flex-positive:1;flex-grow:1}.footer[data-v-67f4a374]{text-align:center;margin-top:3em}.error-message[data-v-67f4a374]{color:red}.pd-3[data-v-2f9d297e]{margin-left:2px}.default-team[data-v-2f9d297e]{background-color:#fff}.table[data-v-2f9d297e]{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-flow:column nowrap;-moz-box-orient:vertical;-moz-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap}.table[data-v-2f9d297e]>:first-child>:not(:last-child){font-weight:700;padding-top:.6em;padding-bottom:.6em}.table>:not(:first-child)>[data-v-2f9d297e]{min-height:6em}.table>:last-child>:last-child>[data-v-2f9d297e]{border-bottom:1px solid #c6cad1}.row[data-v-2f9d297e]{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row nowrap;-moz-box-orient:horizontal;-moz-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;text-align:center;border-top:1px solid #c6cad1;border-left:1px solid #c6cad1;border-right:1px solid #c6cad1}.row>[data-v-2f9d297e]{word-wrap:break-word;border-left:1px solid #c6cad1;min-width:0}.row.highlighted>[data-v-2f9d297e]{padding-top:3px;padding-bottom:3px}.row.highlighted[data-v-2f9d297e]>:first-child{padding-left:3px}.row.highlighted[data-v-2f9d297e]>:last-child{padding-right:3px}.checks[data-v-2f9d297e],.command[data-v-2f9d297e],.flags[data-v-2f9d297e],.private[data-v-2f9d297e],.public[data-v-2f9d297e],.round[data-v-2f9d297e],.score[data-v-2f9d297e],.status[data-v-2f9d297e]{-webkit-box-flex:1;-webkit-flex:1 1 0;-moz-box-flex:1;-ms-flex:1 1 0px;flex:1 1 0;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-flow:column nowrap;-moz-box-orient:vertical;-moz-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap;-webkit-box-pack:center;-webkit-justify-content:center;-moz-box-pack:center;-ms-flex-pack:center;justify-content:center}.command[data-v-2f9d297e],.private[data-v-2f9d297e],.public[data-v-2f9d297e]{-webkit-box-flex:1.5;-webkit-flex:1.5 2 15%;-moz-box-flex:1.5;-ms-flex:1.5 2 15%;flex:1.5 2 15%;overflow:scroll}#app[data-v-57fb3f15]{height:100%;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-flow:column nowrap;-moz-box-orient:vertical;-moz-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap}#app[data-v-57fb3f15]>:nth-child(2){-webkit-box-flex:1;-webkit-flex-grow:1;-moz-box-flex:1;-ms-flex-positive:1;flex-grow:1}.footer[data-v-57fb3f15]{text-align:center;margin-top:3em}.team[data-v-57fb3f15]{font-size:1.1em} \ No newline at end of file diff --git a/front/dist/css/app.f1c2eeec.css b/front/dist/css/app.f1c2eeec.css new file mode 100644 index 00000000..3537a0c2 --- /dev/null +++ b/front/dist/css/app.f1c2eeec.css @@ -0,0 +1 @@ +body,html{height:100%;margin:0;background-color:#fff}body{font-family:Merriweather,serif}.container[data-v-831e0c14]{margin-left:4em;margin-right:4em}.tp[data-v-14c1d177]{z-index:1}.topbar[data-v-14c1d177]{position:relative;background:hsla(0,0%,73.3%,.3333333333333333);padding:1em;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row nowrap;-moz-box-orient:horizontal;-moz-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:justify;-webkit-justify-content:space-between;-moz-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-webkit-align-items:center;-moz-box-align:center;-ms-flex-align:center;align-items:center}.progress-bar[data-v-14c1d177]{background-color:#0f0;height:100%;position:absolute;top:0;left:0;opacity:.5}#app[data-v-4f40b6be]{height:100%;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-flow:column nowrap;-moz-box-orient:vertical;-moz-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap}#app[data-v-4f40b6be]>:nth-child(2){-webkit-box-flex:1;-webkit-flex-grow:1;-moz-box-flex:1;-ms-flex-positive:1;flex-grow:1}.footer[data-v-4f40b6be]{text-align:center;margin-top:3em}#app{width:100%;height:100%} \ No newline at end of file diff --git a/front/dist/css/main.4fcc7dda.css b/front/dist/css/main.4fcc7dda.css new file mode 100644 index 00000000..7aebad51 --- /dev/null +++ b/front/dist/css/main.4fcc7dda.css @@ -0,0 +1 @@ +.table{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-flow:column nowrap;-moz-box-orient:vertical;-moz-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap}.table>:first-child>:not(:last-child){font-weight:700;padding-top:.6em;padding-bottom:.6em}.table>:not(:first-child)>*{min-height:6em}.table>:last-child>:last-child>*{border-bottom:1px solid #c6cad1}.row{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row nowrap;-moz-box-orient:horizontal;-moz-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;text-align:center;border-top:1px solid #c6cad1;border-left:1px solid #c6cad1;border-right:1px solid #c6cad1}.row.highlighted>*{padding-top:3px;padding-bottom:3px}.row.highlighted>:first-child{padding-left:3px}.row.highlighted>:last-child{padding-right:3px}.pd-3[data-v-359d0233]{margin-left:2px}.team-group[data-v-359d0233]{-webkit-box-flex:7;-webkit-flex:7 1 20%;-moz-box-flex:7;-ms-flex:7 1 20%;flex:7 1 20%;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row nowrap;-moz-box-orient:horizontal;-moz-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap}.teams-list-move[data-v-359d0233]{-webkit-transition:-webkit-transform 1s;transition:-webkit-transform 1s;-o-transition:-o-transform 1s;-moz-transition:transform 1s,-moz-transform 1s;transition:transform 1s;transition:transform 1s,-webkit-transform 1s,-moz-transform 1s,-o-transform 1s}.team-name[data-v-359d0233]{font-weight:700}.number[data-v-359d0233]{-webkit-box-flex:1;-webkit-flex:1 1 0;-moz-box-flex:1;-ms-flex:1 1 0px;flex:1 1 0;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-flow:column nowrap;-moz-box-orient:vertical;-moz-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap;-webkit-box-pack:center;-webkit-justify-content:center;-moz-box-pack:center;-ms-flex-pack:center;justify-content:center}.team[data-v-359d0233]{-webkit-box-flex:4;-webkit-flex:4 1 15%;-moz-box-flex:4;-ms-flex:4 1 15%;flex:4 1 15%;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-flow:column nowrap;-moz-box-orient:vertical;-moz-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap;-webkit-box-pack:center;-webkit-justify-content:center;-moz-box-pack:center;-ms-flex-pack:center;justify-content:center;position:relative}.score[data-v-359d0233]{-webkit-box-flex:2;-webkit-flex:2 1 5%;-moz-box-flex:2;-ms-flex:2 1 5%;flex:2 1 5%;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-flow:column nowrap;-moz-box-orient:vertical;-moz-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap;-webkit-box-pack:center;-webkit-justify-content:center;-moz-box-pack:center;-ms-flex-pack:center;justify-content:center}.service[data-v-359d0233]{-webkit-box-flex:20;-webkit-flex:20 2 0;-moz-box-flex:20;-ms-flex:20 2 0px;flex:20 2 0;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row nowrap;-moz-box-orient:horizontal;-moz-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;border-left:1px solid #c6cad1}.service[data-v-359d0233]>:not(:last-child){border-right:1px solid #c6cad1}.service-name[data-v-359d0233]{-webkit-box-flex:20;-webkit-flex:20 2 0;-moz-box-flex:20;-ms-flex:20 2 0px;flex:20 2 0;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row nowrap;-moz-box-orient:horizontal;-moz-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;text-align:center}.service-cell[data-v-359d0233]{-webkit-box-flex:1;-webkit-flex:1 1 0;-moz-box-flex:1;-ms-flex:1 1 0px;flex:1 1 0;position:relative;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-flow:column nowrap;-moz-box-orient:vertical;-moz-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap;-webkit-justify-content:space-around;-ms-flex-pack:distribute;justify-content:space-around}.sla[data-v-359d0233]{text-align:left;margin-left:.5em}.fp[data-v-359d0233]{text-align:left;margin-left:.5em}.flags[data-v-359d0233]{text-align:left;margin-left:.5em}.edit[data-v-359d0233],.info[data-v-359d0233],.tt-edit[data-v-359d0233]{padding:0;position:absolute;top:.5em;left:-webkit-calc(100% - 3em);left:-moz-calc(100% - 3em);left:calc(100% - 3em);width:2.5em;height:2.5em;-webkit-border-radius:.3em;-moz-border-radius:.3em;border-radius:.3em;font-size:.7em;border:1px solid #c6cad1}.edit[data-v-359d0233]:focus,.info[data-v-359d0233]:focus,.tt-edit[data-v-359d0233]:focus{outline:0;border:1px solid #c6cad1}.tt-edit[data-v-359d0233]{left:-webkit-calc(100% - 6em);left:-moz-calc(100% - 6em);left:calc(100% - 6em)}.tooltip[data-v-359d0233]{font-size:.7rem;left:0;top:0;-webkit-transform:translateX(-100%) translateY(-webkit-calc(-100% - .25em));-moz-transform:translateX(-100%) translateY(-moz-calc(-100% - .25em));-ms-transform:translateX(-100%) translateY(calc(-100% - .25em));-o-transform:translateX(-100%) translateY(calc(-100% - .25em));transform:translateX(-100%) translateY(calc(-100% - .25em));position:absolute;width:20em;text-align:center;display:block;background-color:#000;color:#fff;-webkit-border-radius:.5em;-moz-border-radius:.5em;border-radius:.5em;padding:1em;opacity:0;z-index:-1}.edit:hover .tooltip[data-v-359d0233],.info:hover .tooltip[data-v-359d0233],.tt-edit:hover .tooltip[data-v-359d0233]{opacity:1;z-index:1}.highlighted[data-v-359d0233]{-webkit-transform:translateZ(0);-moz-transform:translateZ(0);transform:translateZ(0);-webkit-animation:rotate-data-v-359d0233 5s linear infinite;-moz-animation:rotate-data-v-359d0233 5s infinite linear;animation:rotate-data-v-359d0233 5s linear infinite;background:#30ff90;background:-webkit-gradient(linear,left top,right top,from(#30ff90),color-stop(25%,#ed2ded),color-stop(50%,#c99826),color-stop(75%,#30ffe6),to(#30ff90));background:-webkit-linear-gradient(left,#30ff90,#ed2ded 25%,#c99826 50%,#30ffe6 75%,#30ff90);background:-moz-linear-gradient(left,#30ff90 0,#ed2ded 25%,#c99826 50%,#30ffe6 75%,#30ff90 100%);background:-o-linear-gradient(left,#30ff90 0,#ed2ded 25%,#c99826 50%,#30ffe6 75%,#30ff90 100%);background:linear-gradient(90deg,#30ff90 0,#ed2ded 25%,#c99826 50%,#30ffe6 75%,#30ff90)}@-webkit-keyframes rotate-data-v-359d0233{0%{background-position:-3000px}to{background-position:0}}@-moz-keyframes rotate-data-v-359d0233{0%{background-position:-3000px}to{background-position:0}}@keyframes rotate-data-v-359d0233{0%{background-position:-3000px}to{background-position:0}}.statuses[data-v-6e65e674]{margin-top:2em;margin-bottom:2em;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row nowrap;-moz-box-orient:horizontal;-moz-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap}.statuses>[data-v-6e65e674]{-webkit-box-flex:1;-webkit-flex:1 1 auto;-moz-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;text-align:center;padding:.5em}.statuses .status-cell[data-v-6e65e674]{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-flow:column nowrap;-moz-box-orient:vertical;-moz-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap;-webkit-box-pack:center;-webkit-justify-content:center;-moz-box-pack:center;-ms-flex-pack:center;justify-content:center}.error-message[data-v-7c304018]{color:red}.flag[data-v-6fd2ecae]{color:#0f0;background-color:#000}.mark[data-v-6fd2ecae]{color:#ff0}.screen[data-v-7828c828]{width:100%;height:100%;background-color:#000}.pony[data-v-7828c828]{position:fixed;overflow:hidden;border-style:none;margin:0;padding:0;background:rgba(0,0,0,0);width:100%;height:100%;z-index:2}.ponies-toggle-btn[data-v-7828c828]{z-index:3;position:absolute;right:1em}.team-name[data-v-5a76aa78]{font-weight:700}.number[data-v-5a76aa78]{-webkit-box-flex:1;-webkit-flex:1 1 0;-moz-box-flex:1;-ms-flex:1 1 0px;flex:1 1 0;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-flow:column nowrap;-moz-box-orient:vertical;-moz-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap;-webkit-box-pack:center;-webkit-justify-content:center;-moz-box-pack:center;-ms-flex-pack:center;justify-content:center}.team[data-v-5a76aa78]{-webkit-box-flex:4;-webkit-flex:4 1 15%;-moz-box-flex:4;-ms-flex:4 1 15%;flex:4 1 15%;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-flow:column nowrap;-moz-box-orient:vertical;-moz-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap;-webkit-box-pack:center;-webkit-justify-content:center;-moz-box-pack:center;-ms-flex-pack:center;justify-content:center}.score[data-v-5a76aa78]{-webkit-box-flex:2;-webkit-flex:2 1 5%;-moz-box-flex:2;-ms-flex:2 1 5%;flex:2 1 5%;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-flow:column nowrap;-moz-box-orient:vertical;-moz-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap;-webkit-box-pack:center;-webkit-justify-content:center;-moz-box-pack:center;-ms-flex-pack:center;justify-content:center}.service[data-v-5a76aa78]{-webkit-box-flex:20;-webkit-flex:20 2 0;-moz-box-flex:20;-ms-flex:20 2 0px;flex:20 2 0;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row nowrap;-moz-box-orient:horizontal;-moz-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;border-left:1px solid #c6cad1}.service[data-v-5a76aa78]>:not(:last-child){border-right:1px solid #c6cad1}.service-name[data-v-5a76aa78]{-webkit-box-flex:20;-webkit-flex:20 2 0;-moz-box-flex:20;-ms-flex:20 2 0px;flex:20 2 0;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row nowrap;-moz-box-orient:horizontal;-moz-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;text-align:center}.service-cell[data-v-5a76aa78]{-webkit-box-flex:1;-webkit-flex:1 1 0;-moz-box-flex:1;-ms-flex:1 1 0px;flex:1 1 0;position:relative;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-flow:column nowrap;-moz-box-orient:vertical;-moz-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap;-webkit-justify-content:space-around;-ms-flex-pack:distribute;justify-content:space-around}.sla[data-v-5a76aa78]{text-align:left;margin-left:.5em}.fp[data-v-5a76aa78]{text-align:left;margin-left:.5em}.flags[data-v-5a76aa78]{text-align:left;margin-left:.5em}.info[data-v-5a76aa78]{padding:0;position:absolute;top:.5em;left:-webkit-calc(100% - 3em);left:-moz-calc(100% - 3em);left:calc(100% - 3em);width:2.5em;height:2.5em;-webkit-border-radius:.3em;-moz-border-radius:.3em;border-radius:.3em;font-size:.7em;border:1px solid #c6cad1}.info[data-v-5a76aa78]:focus{outline:0;border:1px solid #c6cad1}.tooltip[data-v-5a76aa78]{font-size:.7rem;left:0;top:0;-webkit-transform:translateX(-100%) translateY(-webkit-calc(-100% - .25em));-moz-transform:translateX(-100%) translateY(-moz-calc(-100% - .25em));-ms-transform:translateX(-100%) translateY(calc(-100% - .25em));-o-transform:translateX(-100%) translateY(calc(-100% - .25em));transform:translateX(-100%) translateY(calc(-100% - .25em));position:absolute;width:20em;text-align:center;display:block;background-color:#000;color:#fff;-webkit-border-radius:.5em;-moz-border-radius:.5em;border-radius:.5em;padding:1em;opacity:0;z-index:-1}.info:hover .tooltip[data-v-5a76aa78]{opacity:1;z-index:1} \ No newline at end of file diff --git a/front/dist/index.html b/front/dist/index.html index 010e50b7..87338977 100644 --- a/front/dist/index.html +++ b/front/dist/index.html @@ -1,23 +1 @@ - - - - - - - - - - ForcAD - - - - - - - -
- - - - \ No newline at end of file +ForcAD
\ No newline at end of file diff --git a/front/dist/js/admin.b681ebd2.js b/front/dist/js/admin.b681ebd2.js new file mode 100644 index 00000000..0f9d9dbb --- /dev/null +++ b/front/dist/js/admin.b681ebd2.js @@ -0,0 +1,2 @@ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["admin"],{"0ebb":function(t,e,a){"use strict";a("dae0")},"23b1":function(t,e,a){"use strict";a.r(e);var s=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("form-wrapper",{attrs:{title:"Log into the admin panel",submitCallback:t.submitCallback}},[a("p",[t._v(" Username: "),a("input",{directives:[{name:"model",rawName:"v-model",value:t.username,expression:"username"}],attrs:{type:"text",placeholder:"Username"},domProps:{value:t.username},on:{input:function(e){e.target.composing||(t.username=e.target.value)}}})]),a("p",[t._v(" Password: "),a("input",{directives:[{name:"model",rawName:"v-model",value:t.password,expression:"password"}],attrs:{type:"password",placeholder:"Password"},domProps:{value:t.password},on:{input:function(e){e.target.composing||(t.password=e.target.value)}}})])])},n=[],r=a("1da1"),i=(a("96cf"),a("a4c5")),c={components:{FormWrapper:i["a"]},data:function(){return{username:null,password:null,error:null}},methods:{submitCallback:function(){var t=Object(r["a"])(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:return t.next=2,this.$http.post("/admin/login/",{username:this.username,password:this.password});case 2:this.$router.push({name:"admin"})["catch"]((function(){}));case 3:case"end":return t.stop()}}),t,this)})));function e(){return t.apply(this,arguments)}return e}()}},o=c,u=a("2877"),m=Object(u["a"])(o,s,n,!1,null,"7e3ae0ee",null);e["default"]=m.exports},"2a66":function(t,e,a){},"3e4e":function(t,e,a){"use strict";var s=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"table"},[a("div",{staticClass:"row"},[a("div",{staticClass:"number"},[t._v(t._s(t.headRowTitle))]),a("div",{staticClass:"team"},[t._v("team")]),a("div",{staticClass:"score"},[t._v("score")]),a("div",{staticClass:"service-name"},t._l(t.tasks,(function(e){var s=e.name,n=e.id;return a("div",{key:s,staticClass:"service-cell",style:t.taskStyle,on:{click:function(e){return t.$emit("openTask",n)}}},[t._v(" "+t._s(s)+" "),t.admin?a("button",{staticClass:"edit",on:{click:function(e){return t.$emit("openTaskAdmin",n)}}},[a("i",{staticClass:"fas fa-edit"})]):t._e()])})),0)]),a("transition-group",{attrs:{name:"teams-list"}},t._l(t.teams,(function(e,s){var n=e.name,r=e.score,i=e.tasks,c=e.ip,o=e.id,u=e.highlighted;return a("div",{key:n,staticClass:"row",class:[u?"highlighted":""],style:{backgroundColor:t.getTeamRowBackground(s)}},[a("div",{staticClass:"team-group",class:u?"":"pd-3"},[a("div",{staticClass:"number",style:{backgroundColor:t.getTeamRowBackground(s)}},[t._v(" "+t._s(s+1)+" ")]),a("div",{staticClass:"team team-row",style:[t.teamStyle,{backgroundColor:t.getTeamRowBackground(s)}],on:{click:function(e){return t.$emit("openTeam",o)}}},[a("div",{staticClass:"team-name"},[t._v(t._s(n))]),a("div",{staticClass:"ip"},[t._v(t._s(c))]),t.admin?a("button",{staticClass:"edit",on:{click:[function(e){return t.$emit("openTeamAdmin",o)},function(t){t.stopPropagation()}]}},[a("i",{staticClass:"fas fa-edit"})]):t._e()]),a("div",{staticClass:"score",style:{backgroundColor:t.getTeamRowBackground(s)}},[t._v(" "+t._s(r.toFixed(2))+" ")])]),a("div",{staticClass:"service"},t._l(i,(function(e){var s=e.id,n=e.teamId,r=e.taskId,c=e.sla,o=e.score,u=e.stolen,m=e.lost,l=e.message,p=e.status;return a("div",{key:s,staticClass:"service-cell",style:{fontSize:1-i.length/20+"em",backgroundColor:t.getTeamTaskBackground(p)}},[t.admin?a("button",{staticClass:"tt-edit",on:{click:function(e){return t.$emit("openTeamTaskHistory",n,r)}}},[a("i",{staticClass:"fas fa-edit"})]):t._e(),a("button",{staticClass:"info"},[a("i",{staticClass:"fas fa-info-circle"}),a("span",{staticClass:"tooltip"},[t._v(t._s(l))])]),a("div",{staticClass:"sla"},[a("strong",[t._v("SLA")]),t._v(" : "+t._s(c.toFixed(2))+"% ")]),a("div",{staticClass:"fp"},[a("strong",[t._v("FP")]),t._v(" : "+t._s(o.toFixed(2))+" ")]),a("div",{staticClass:"flags"},[a("i",{staticClass:"fas fa-flag"}),t._v(" +"+t._s(u)+"/-"+t._s(m)+" ")])])})),0)])})),0)],1)},n=[],r=a("bc8f"),i=(a("ab94"),{props:{headRowTitle:{type:String,default:"#"},tasks:{type:Array,required:!0},teams:{type:Array,required:!0},teamClickable:Boolean,taskClickable:Boolean,admin:Boolean},data:function(){return{getTeamRowBackground:r["a"],getTeamTaskBackground:r["b"]}},computed:{teamStyle:function(){return this.teamClickable?{cursor:"pointer"}:{}},taskStyle:function(){return this.taskClickable?{cursor:"pointer"}:{}}}}),c=i,o=(a("0ebb"),a("2877")),u=Object(o["a"])(c,s,n,!1,null,"359d0233",null);e["a"]=u.exports},"73c6":function(t,e,a){},"7c91":function(t,e,a){"use strict";a("2a66")},"89ff":function(t,e,a){},"8ace":function(t,e,a){"use strict";var s=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",[null!==t.error?a("p",{staticClass:"error-message"},[t._v(t._s(t.error))]):t._t("default")],2)},n=[],r={props:{error:String}},i=r,c=(a("c8f0"),a("2877")),o=Object(c["a"])(i,s,n,!1,null,"7c304018",null);e["a"]=o.exports},"8eec":function(t,e,a){},"99af":function(t,e,a){"use strict";var s=a("23e7"),n=a("d039"),r=a("e8b5"),i=a("861d"),c=a("7b0b"),o=a("50c4"),u=a("8418"),m=a("65f0"),l=a("1dde"),p=a("b622"),d=a("2d00"),v=p("isConcatSpreadable"),h=9007199254740991,f="Maximum allowed index exceeded",k=d>=51||!n((function(){var t=[];return t[v]=!1,t.concat()[0]!==t})),g=l("concat"),_=function(t){if(!i(t))return!1;var e=t[v];return void 0!==e?!!e:r(t)},b=!k||!g;s({target:"Array",proto:!0,forced:b},{concat:function(t){var e,a,s,n,r,i=c(this),l=m(i,0),p=0;for(e=-1,s=arguments.length;eh)throw TypeError(f);for(a=0;a=h)throw TypeError(f);u(l,p++,r)}return l.length=p,l}})},"9fc2":function(t,e,a){"use strict";a("73c6")},a4c5:function(t,e,a){"use strict";var s=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("form",{on:{submit:function(e){return e.preventDefault(),t.handleSubmit.apply(null,arguments)}}},[a("p",[t._v(t._s(t.title))]),t._t("default"),null!==t.error?a("p",{staticClass:"error-message"},[t._v(t._s(t.error))]):t._e(),a("input",{attrs:{type:"submit",value:"Submit"}})],2)},n=[],r=a("1da1"),i=(a("96cf"),{props:{title:String,submitCallback:Function},data:function(){return{error:null}},methods:{handleSubmit:function(){var t=Object(r["a"])(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:return t.prev=0,t.next=3,this.submitCallback();case 3:t.next=9;break;case 5:t.prev=5,t.t0=t["catch"](0),console.error(t.t0),this.error=t.t0;case 9:case"end":return t.stop()}}),t,this,[[0,5]])})));function e(){return t.apply(this,arguments)}return e}()}}),c=i,o=(a("dd3a"),a("2877")),u=Object(o["a"])(c,s,n,!1,null,"c74ac9a2",null);e["a"]=u.exports},a4ee:function(t,e,a){"use strict";a.r(e);var s=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("admin-team-task-log")},n=[],r=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("error-box",{attrs:{error:t.error}},[a("div",[a("p",[t._v(" Team "),a("b",[t._v(t._s(t.teamName))]),t._v(" ("+t._s(t.teamId)+") task "),a("b",[t._v(t._s(t.taskName))]),t._v(" ("+t._s(t.taskId)+") history ")]),a("div",{staticClass:"table"},[a("div",{staticClass:"row"},[a("div",{staticClass:"round"},[t._v("round")]),a("div",{staticClass:"status"},[t._v("status")]),a("div",{staticClass:"score"},[t._v("score")]),a("div",{staticClass:"flags"},[t._v("flags")]),a("div",{staticClass:"checks"},[t._v("checks")]),a("div",{staticClass:"public"},[t._v("public")]),a("div",{staticClass:"private"},[t._v("private")]),a("div",{staticClass:"command"},[t._v("command")])]),t._l(t.teamtasks,(function(e){return a("div",{key:e.id,staticClass:"row content-row",style:{backgroundColor:t.getTeamTaskBackground(e.status)}},[a("div",{staticClass:"round"},[t._v(t._s(e.round))]),a("div",{staticClass:"status"},[t._v(t._s(e.status))]),a("div",{staticClass:"score"},[t._v(t._s(e.score))]),a("div",{staticClass:"flags"},[t._v("+"+t._s(e.stolen)+"/-"+t._s(e.lost))]),a("div",{staticClass:"checks"},[t._v(" "+t._s(e.checks_passed)+"/"+t._s(e.checks)+" ")]),a("div",{staticClass:"public"},[t._v(t._s(e.public_message))]),a("div",{staticClass:"private"},[t._v(t._s(e.private_message))]),a("div",{staticClass:"command"},[t._v(t._s(e.command))])])}))],2)])])},i=[],c=a("1da1"),o=(a("96cf"),a("b0c0"),a("bc8f")),u=a("8ace"),m=(a("ab94"),{components:{ErrorBox:u["a"]},data:function(){return{error:null,taskId:null,teamId:null,teamtasks:null,teamName:null,taskName:null,getTeamTaskBackground:o["b"]}},methods:{openTeam:function(t){this.$router.push({name:"team",params:{id:t}})["catch"]((function(){}))}},created:function(){var t=Object(c["a"])(regeneratorRuntime.mark((function t(){var e,a,s,n,r;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:return t.prev=0,this.taskId=this.$route.params.taskId,this.teamId=this.$route.params.teamId,t.next=5,this.$http.get("/admin/teamtasks/",{params:{team_id:this.teamId,task_id:this.taskId}});case 5:return e=t.sent,this.teamtasks=e.data,t.next=9,this.$http.get("/admin/teams/".concat(this.teamId,"/"));case 9:return a=t.sent,s=a.data.name,this.teamName=s,t.next=14,this.$http.get("/admin/tasks/".concat(this.taskId,"/"));case 14:n=t.sent,r=n.data.name,this.taskName=r,t.next=23;break;case 19:t.prev=19,t.t0=t["catch"](0),console.error(t.t0),this.error="Error occured while fetching data.";case 23:case"end":return t.stop()}}),t,this,[[0,19]])})));function e(){return t.apply(this,arguments)}return e}()}),l=m,p=(a("7c91"),a("2877")),d=Object(p["a"])(l,r,i,!1,null,"b3593882",null),v=d.exports,h={components:{AdminTeamTaskLog:v}},f=h,k=Object(p["a"])(f,s,n,!1,null,"15bde3a8",null);e["default"]=k.exports},ab94:function(t,e,a){},b022:function(t,e,a){"use strict";a.r(e);var s=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("task-admin")},n=[],r=function(){var t=this,e=t.$createElement,a=t._self._c||e;return null!==t.task?a("form-wrapper",{attrs:{title:t.message,submitCallback:t.submitForm}},[a("p",[t._v(" Name: "),a("input",{directives:[{name:"model",rawName:"v-model",value:t.task.name,expression:"task.name"}],attrs:{type:"text"},domProps:{value:t.task.name},on:{input:function(e){e.target.composing||t.$set(t.task,"name",e.target.value)}}})]),a("p",[t._v(" Checker: "),a("input",{directives:[{name:"model",rawName:"v-model",value:t.task.checker,expression:"task.checker"}],attrs:{type:"text"},domProps:{value:t.task.checker},on:{input:function(e){e.target.composing||t.$set(t.task,"checker",e.target.value)}}})]),a("p",[t._v(" Gets: "),a("input",{directives:[{name:"model",rawName:"v-model",value:t.task.gets,expression:"task.gets"}],attrs:{type:"number"},domProps:{value:t.task.gets},on:{input:function(e){e.target.composing||t.$set(t.task,"gets",e.target.value)}}})]),a("p",[t._v(" Puts: "),a("input",{directives:[{name:"model",rawName:"v-model",value:t.task.puts,expression:"task.puts"}],attrs:{type:"number"},domProps:{value:t.task.puts},on:{input:function(e){e.target.composing||t.$set(t.task,"puts",e.target.value)}}})]),a("p",[t._v(" Places: "),a("input",{directives:[{name:"model",rawName:"v-model",value:t.task.places,expression:"task.places"}],attrs:{type:"number"},domProps:{value:t.task.places},on:{input:function(e){e.target.composing||t.$set(t.task,"places",e.target.value)}}})]),a("p",[t._v(" Checker timeout: "),a("input",{directives:[{name:"model",rawName:"v-model",value:t.task.checker_timeout,expression:"task.checker_timeout"}],attrs:{type:"number"},domProps:{value:t.task.checker_timeout},on:{input:function(e){e.target.composing||t.$set(t.task,"checker_timeout",e.target.value)}}})]),a("p",[t._v(" Checker type: "),a("input",{directives:[{name:"model",rawName:"v-model",value:t.task.checker_type,expression:"task.checker_type"}],attrs:{type:"text"},domProps:{value:t.task.checker_type},on:{input:function(e){e.target.composing||t.$set(t.task,"checker_type",e.target.value)}}})]),a("p",[t._v(" Env path: "),a("input",{directives:[{name:"model",rawName:"v-model",value:t.task.env_path,expression:"task.env_path"}],attrs:{type:"text"},domProps:{value:t.task.env_path},on:{input:function(e){e.target.composing||t.$set(t.task,"env_path",e.target.value)}}})]),a("p",[t._v(" Get period: "),a("input",{directives:[{name:"model",rawName:"v-model",value:t.task.get_period,expression:"task.get_period"}],attrs:{type:"number"},domProps:{value:t.task.get_period},on:{input:function(e){e.target.composing||t.$set(t.task,"get_period",e.target.value)}}})]),a("p",[t._v(" Default score: "),a("input",{directives:[{name:"model",rawName:"v-model",value:t.task.default_score,expression:"task.default_score"}],attrs:{type:"number"},domProps:{value:t.task.default_score},on:{input:function(e){e.target.composing||t.$set(t.task,"default_score",e.target.value)}}})]),a("p",[t._v(" Active: "),a("input",{attrs:{type:"checkbox"},domProps:{checked:t.task.active},on:{input:function(e){t.task.active=e.target.checked}}})])]):t._e()},i=[],c=a("1da1"),o=(a("99af"),a("b0c0"),a("96cf"),a("a4c5")),u={components:{FormWrapper:o["a"]},data:function(){return{task:null,taskId:null,message:null}},created:function(){var t=Object(c["a"])(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:return t.next=2,this.updateData();case 2:case"end":return t.stop()}}),t,this)})));function e(){return t.apply(this,arguments)}return e}(),watch:{$route:function(){var t=Object(c["a"])(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:return t.next=2,this.updateData();case 2:case"end":return t.stop()}}),t,this)})));function e(){return t.apply(this,arguments)}return e}()},methods:{updateData:function(){var t=Object(c["a"])(regeneratorRuntime.mark((function t(){var e,a;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:if(this.taskId=this.$route.params.id,this.taskId){t.next=6;break}this.task={name:"",checker:"",gets:1,puts:1,places:1,checker_timeout:20,checker_type:"hackerdom",env_path:"",get_period:10,default_score:2500,active:!0},this.message="Creating task",t.next=12;break;case 6:return t.next=8,this.$http.get("/admin/tasks/".concat(this.taskId));case 8:e=t.sent,a=e.data,this.task=a,this.message="Editing task ".concat(this.task.name," (").concat(this.task.id,")");case 12:case"end":return t.stop()}}),t,this)})));function e(){return t.apply(this,arguments)}return e}(),submitForm:function(){var t=Object(c["a"])(regeneratorRuntime.mark((function t(){var e,a,s,n;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:if(this.taskId){t.next=8;break}return t.next=3,this.$http.post("/admin/tasks/",this.task);case 3:e=t.sent,a=e.data,this.$router.push({name:"taskAdmin",params:{id:a.id}})["catch"]((function(){})),t.next=15;break;case 8:return t.next=10,this.$http.put("/admin/tasks/".concat(this.taskId,"/"),this.task);case 10:return s=t.sent,n=s.data,this.task=n,t.next=15,this.updateData();case 15:case"end":return t.stop()}}),t,this)})));function e(){return t.apply(this,arguments)}return e}()}},m=u,l=a("2877"),p=Object(l["a"])(m,r,i,!1,null,"8780d078",null),d=p.exports,v={components:{TaskAdmin:d}},h=v,f=Object(l["a"])(h,s,n,!1,null,"3440e4b6",null);e["default"]=f.exports},bc8f:function(t,e,a){"use strict";a.d(e,"a",(function(){return n})),a.d(e,"b",(function(){return r}));var s=a("f121");function n(t){return t\n \n

\n Username:\n \n

\n

\n Password:\n \n

\n \n\n\n\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AdminLogin.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AdminLogin.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AdminLogin.vue?vue&type=template&id=7e3ae0ee&scoped=true&\"\nimport script from \"./AdminLogin.vue?vue&type=script&lang=js&\"\nexport * from \"./AdminLogin.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7e3ae0ee\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"table\"},[_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"number\"},[_vm._v(_vm._s(_vm.headRowTitle))]),_c('div',{staticClass:\"team\"},[_vm._v(\"team\")]),_c('div',{staticClass:\"score\"},[_vm._v(\"score\")]),_c('div',{staticClass:\"service-name\"},_vm._l((_vm.tasks),function(ref){\nvar name = ref.name;\nvar id = ref.id;\nreturn _c('div',{key:name,staticClass:\"service-cell\",style:(_vm.taskStyle),on:{\"click\":function($event){return _vm.$emit('openTask', id)}}},[_vm._v(\" \"+_vm._s(name)+\" \"),(_vm.admin)?_c('button',{staticClass:\"edit\",on:{\"click\":function($event){return _vm.$emit('openTaskAdmin', id)}}},[_c('i',{staticClass:\"fas fa-edit\"})]):_vm._e()])}),0)]),_c('transition-group',{attrs:{\"name\":\"teams-list\"}},_vm._l((_vm.teams),function(ref,index){\nvar name = ref.name;\nvar score = ref.score;\nvar tasks = ref.tasks;\nvar ip = ref.ip;\nvar id = ref.id;\nvar highlighted = ref.highlighted;\nreturn _c('div',{key:name,staticClass:\"row\",class:[highlighted ? 'highlighted' : ''],style:({\n backgroundColor: _vm.getTeamRowBackground(index),\n })},[_c('div',{staticClass:\"team-group\",class:highlighted ? '' : 'pd-3'},[_c('div',{staticClass:\"number\",style:({\n backgroundColor: _vm.getTeamRowBackground(index),\n })},[_vm._v(\" \"+_vm._s(index + 1)+\" \")]),_c('div',{staticClass:\"team team-row\",style:([\n _vm.teamStyle,\n { backgroundColor: _vm.getTeamRowBackground(index) } ]),on:{\"click\":function($event){return _vm.$emit('openTeam', id)}}},[_c('div',{staticClass:\"team-name\"},[_vm._v(_vm._s(name))]),_c('div',{staticClass:\"ip\"},[_vm._v(_vm._s(ip))]),(_vm.admin)?_c('button',{staticClass:\"edit\",on:{\"click\":[function($event){return _vm.$emit('openTeamAdmin', id)},function($event){$event.stopPropagation();}]}},[_c('i',{staticClass:\"fas fa-edit\"})]):_vm._e()]),_c('div',{staticClass:\"score\",style:({\n backgroundColor: _vm.getTeamRowBackground(index),\n })},[_vm._v(\" \"+_vm._s(score.toFixed(2))+\" \")])]),_c('div',{staticClass:\"service\"},_vm._l((tasks),function(ref){\n var id = ref.id;\n var teamId = ref.teamId;\n var taskId = ref.taskId;\n var sla = ref.sla;\n var score = ref.score;\n var stolen = ref.stolen;\n var lost = ref.lost;\n var message = ref.message;\n var status = ref.status;\nreturn _c('div',{key:id,staticClass:\"service-cell\",style:({\n fontSize: ((1 - tasks.length / 20) + \"em\"),\n backgroundColor: _vm.getTeamTaskBackground(status),\n })},[(_vm.admin)?_c('button',{staticClass:\"tt-edit\",on:{\"click\":function($event){return _vm.$emit('openTeamTaskHistory', teamId, taskId)}}},[_c('i',{staticClass:\"fas fa-edit\"})]):_vm._e(),_c('button',{staticClass:\"info\"},[_c('i',{staticClass:\"fas fa-info-circle\"}),_c('span',{staticClass:\"tooltip\"},[_vm._v(_vm._s(message))])]),_c('div',{staticClass:\"sla\"},[_c('strong',[_vm._v(\"SLA\")]),_vm._v(\" : \"+_vm._s(sla.toFixed(2))+\"% \")]),_c('div',{staticClass:\"fp\"},[_c('strong',[_vm._v(\"FP\")]),_vm._v(\" : \"+_vm._s(score.toFixed(2))+\" \")]),_c('div',{staticClass:\"flags\"},[_c('i',{staticClass:\"fas fa-flag\"}),_vm._v(\" +\"+_vm._s(stolen)+\"/-\"+_vm._s(lost)+\" \")])])}),0)])}),0)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ScoreTable.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ScoreTable.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ScoreTable.vue?vue&type=template&id=359d0233&scoped=true&\"\nimport script from \"./ScoreTable.vue?vue&type=script&lang=js&\"\nexport * from \"./ScoreTable.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ScoreTable.vue?vue&type=style&index=0&id=359d0233&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"359d0233\",\n null\n \n)\n\nexport default component.exports","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TeamTaskLog.vue?vue&type=style&index=0&id=b3593882&lang=scss&scoped=true&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[(_vm.error !== null)?_c('p',{staticClass:\"error-message\"},[_vm._v(_vm._s(_vm.error))]):_vm._t(\"default\")],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ErrorBox.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ErrorBox.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ErrorBox.vue?vue&type=template&id=7c304018&scoped=true&\"\nimport script from \"./ErrorBox.vue?vue&type=script&lang=js&\"\nexport * from \"./ErrorBox.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ErrorBox.vue?vue&type=style&index=0&id=7c304018&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7c304018\",\n null\n \n)\n\nexport default component.exports","'use strict';\nvar $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar isArray = require('../internals/is-array');\nvar isObject = require('../internals/is-object');\nvar toObject = require('../internals/to-object');\nvar toLength = require('../internals/to-length');\nvar createProperty = require('../internals/create-property');\nvar arraySpeciesCreate = require('../internals/array-species-create');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar IS_CONCAT_SPREADABLE = wellKnownSymbol('isConcatSpreadable');\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;\nvar MAXIMUM_ALLOWED_INDEX_EXCEEDED = 'Maximum allowed index exceeded';\n\n// We can't use this feature detection in V8 since it causes\n// deoptimization and serious performance degradation\n// https://github.com/zloirock/core-js/issues/679\nvar IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION >= 51 || !fails(function () {\n var array = [];\n array[IS_CONCAT_SPREADABLE] = false;\n return array.concat()[0] !== array;\n});\n\nvar SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('concat');\n\nvar isConcatSpreadable = function (O) {\n if (!isObject(O)) return false;\n var spreadable = O[IS_CONCAT_SPREADABLE];\n return spreadable !== undefined ? !!spreadable : isArray(O);\n};\n\nvar FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !SPECIES_SUPPORT;\n\n// `Array.prototype.concat` method\n// https://tc39.es/ecma262/#sec-array.prototype.concat\n// with adding support of @@isConcatSpreadable and @@species\n$({ target: 'Array', proto: true, forced: FORCED }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n concat: function concat(arg) {\n var O = toObject(this);\n var A = arraySpeciesCreate(O, 0);\n var n = 0;\n var i, k, length, len, E;\n for (i = -1, length = arguments.length; i < length; i++) {\n E = i === -1 ? O : arguments[i];\n if (isConcatSpreadable(E)) {\n len = toLength(E.length);\n if (n + len > MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);\n for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]);\n } else {\n if (n >= MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);\n createProperty(A, n++, E);\n }\n }\n A.length = n;\n return A;\n }\n});\n","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AdminScoreboard.vue?vue&type=style&index=0&id=16c38602&lang=scss&scoped=true&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('form',{on:{\"submit\":function($event){$event.preventDefault();return _vm.handleSubmit.apply(null, arguments)}}},[_c('p',[_vm._v(_vm._s(_vm.title))]),_vm._t(\"default\"),(_vm.error !== null)?_c('p',{staticClass:\"error-message\"},[_vm._v(_vm._s(_vm.error))]):_vm._e(),_c('input',{attrs:{\"type\":\"submit\",\"value\":\"Submit\"}})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FormWrapper.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FormWrapper.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./FormWrapper.vue?vue&type=template&id=c74ac9a2&scoped=true&\"\nimport script from \"./FormWrapper.vue?vue&type=script&lang=js&\"\nexport * from \"./FormWrapper.vue?vue&type=script&lang=js&\"\nimport style0 from \"./FormWrapper.vue?vue&type=style&index=0&id=c74ac9a2&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"c74ac9a2\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('admin-team-task-log')}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('error-box',{attrs:{\"error\":_vm.error}},[_c('div',[_c('p',[_vm._v(\" Team \"),_c('b',[_vm._v(_vm._s(_vm.teamName))]),_vm._v(\" (\"+_vm._s(_vm.teamId)+\") task \"),_c('b',[_vm._v(_vm._s(_vm.taskName))]),_vm._v(\" (\"+_vm._s(_vm.taskId)+\") history \")]),_c('div',{staticClass:\"table\"},[_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"round\"},[_vm._v(\"round\")]),_c('div',{staticClass:\"status\"},[_vm._v(\"status\")]),_c('div',{staticClass:\"score\"},[_vm._v(\"score\")]),_c('div',{staticClass:\"flags\"},[_vm._v(\"flags\")]),_c('div',{staticClass:\"checks\"},[_vm._v(\"checks\")]),_c('div',{staticClass:\"public\"},[_vm._v(\"public\")]),_c('div',{staticClass:\"private\"},[_vm._v(\"private\")]),_c('div',{staticClass:\"command\"},[_vm._v(\"command\")])]),_vm._l((_vm.teamtasks),function(tt){return _c('div',{key:tt.id,staticClass:\"row content-row\",style:({\n backgroundColor: _vm.getTeamTaskBackground(tt.status),\n })},[_c('div',{staticClass:\"round\"},[_vm._v(_vm._s(tt.round))]),_c('div',{staticClass:\"status\"},[_vm._v(_vm._s(tt.status))]),_c('div',{staticClass:\"score\"},[_vm._v(_vm._s(tt.score))]),_c('div',{staticClass:\"flags\"},[_vm._v(\"+\"+_vm._s(tt.stolen)+\"/-\"+_vm._s(tt.lost))]),_c('div',{staticClass:\"checks\"},[_vm._v(\" \"+_vm._s(tt.checks_passed)+\"/\"+_vm._s(tt.checks)+\" \")]),_c('div',{staticClass:\"public\"},[_vm._v(_vm._s(tt.public_message))]),_c('div',{staticClass:\"private\"},[_vm._v(_vm._s(tt.private_message))]),_c('div',{staticClass:\"command\"},[_vm._v(_vm._s(tt.command))])])})],2)])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TeamTaskLog.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TeamTaskLog.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TeamTaskLog.vue?vue&type=template&id=b3593882&scoped=true&\"\nimport script from \"./TeamTaskLog.vue?vue&type=script&lang=js&\"\nexport * from \"./TeamTaskLog.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TeamTaskLog.vue?vue&type=style&index=0&id=b3593882&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"b3593882\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AdminTeamTaskLog.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AdminTeamTaskLog.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AdminTeamTaskLog.vue?vue&type=template&id=15bde3a8&scoped=true&\"\nimport script from \"./AdminTeamTaskLog.vue?vue&type=script&lang=js&\"\nexport * from \"./AdminTeamTaskLog.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"15bde3a8\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('task-admin')}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.task !== null)?_c('form-wrapper',{attrs:{\"title\":_vm.message,\"submitCallback\":_vm.submitForm}},[_c('p',[_vm._v(\" Name: \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.task.name),expression:\"task.name\"}],attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.task.name)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.task, \"name\", $event.target.value)}}})]),_c('p',[_vm._v(\" Checker: \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.task.checker),expression:\"task.checker\"}],attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.task.checker)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.task, \"checker\", $event.target.value)}}})]),_c('p',[_vm._v(\" Gets: \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.task.gets),expression:\"task.gets\"}],attrs:{\"type\":\"number\"},domProps:{\"value\":(_vm.task.gets)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.task, \"gets\", $event.target.value)}}})]),_c('p',[_vm._v(\" Puts: \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.task.puts),expression:\"task.puts\"}],attrs:{\"type\":\"number\"},domProps:{\"value\":(_vm.task.puts)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.task, \"puts\", $event.target.value)}}})]),_c('p',[_vm._v(\" Places: \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.task.places),expression:\"task.places\"}],attrs:{\"type\":\"number\"},domProps:{\"value\":(_vm.task.places)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.task, \"places\", $event.target.value)}}})]),_c('p',[_vm._v(\" Checker timeout: \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.task.checker_timeout),expression:\"task.checker_timeout\"}],attrs:{\"type\":\"number\"},domProps:{\"value\":(_vm.task.checker_timeout)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.task, \"checker_timeout\", $event.target.value)}}})]),_c('p',[_vm._v(\" Checker type: \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.task.checker_type),expression:\"task.checker_type\"}],attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.task.checker_type)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.task, \"checker_type\", $event.target.value)}}})]),_c('p',[_vm._v(\" Env path: \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.task.env_path),expression:\"task.env_path\"}],attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.task.env_path)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.task, \"env_path\", $event.target.value)}}})]),_c('p',[_vm._v(\" Get period: \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.task.get_period),expression:\"task.get_period\"}],attrs:{\"type\":\"number\"},domProps:{\"value\":(_vm.task.get_period)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.task, \"get_period\", $event.target.value)}}})]),_c('p',[_vm._v(\" Default score: \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.task.default_score),expression:\"task.default_score\"}],attrs:{\"type\":\"number\"},domProps:{\"value\":(_vm.task.default_score)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.task, \"default_score\", $event.target.value)}}})]),_c('p',[_vm._v(\" Active: \"),_c('input',{attrs:{\"type\":\"checkbox\"},domProps:{\"checked\":_vm.task.active},on:{\"input\":function($event){_vm.task.active = $event.target.checked}}})])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Task.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Task.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Task.vue?vue&type=template&id=8780d078&scoped=true&\"\nimport script from \"./Task.vue?vue&type=script&lang=js&\"\nexport * from \"./Task.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"8780d078\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TaskAdmin.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TaskAdmin.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TaskAdmin.vue?vue&type=template&id=3440e4b6&scoped=true&\"\nimport script from \"./TaskAdmin.vue?vue&type=script&lang=js&\"\nexport * from \"./TaskAdmin.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3440e4b6\",\n null\n \n)\n\nexport default component.exports","import {\n statusColors,\n defaultStatusColor,\n topTeamColors,\n defaultTeamColor,\n} from '@/config';\n\nfunction getTeamRowBackground(index) {\n return index < topTeamColors.length\n ? topTeamColors[index]\n : defaultTeamColor;\n}\n\nfunction getTeamTaskBackground(status) {\n return statusColors[status] ? statusColors[status] : defaultStatusColor;\n}\n\nexport { getTeamRowBackground, getTeamTaskBackground };\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ErrorBox.vue?vue&type=style&index=0&id=7c304018&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FormWrapper.vue?vue&type=style&index=0&id=c74ac9a2&lang=scss&scoped=true&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('team-admin')}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.team !== null)?_c('form-wrapper',{attrs:{\"title\":_vm.message,\"submitCallback\":_vm.submitForm}},[_c('p',[_vm._v(\" Name: \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.team.name),expression:\"team.name\"}],attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.team.name)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.team, \"name\", $event.target.value)}}})]),_c('p',[_vm._v(\" IP: \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.team.ip),expression:\"team.ip\"}],attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.team.ip)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.team, \"ip\", $event.target.value)}}})]),_c('p',[_vm._v(\" Token: \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.team.token),expression:\"team.token\"}],attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.team.token)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.team, \"token\", $event.target.value)}}})]),_c('p',[_vm._v(\" Highlighted: \"),_c('input',{attrs:{\"type\":\"checkbox\"},domProps:{\"checked\":_vm.team.highlighted},on:{\"input\":function($event){_vm.team.highlighted = $event.target.checked}}})]),_c('p',[_vm._v(\" Active: \"),_c('input',{attrs:{\"type\":\"checkbox\"},domProps:{\"checked\":_vm.team.active},on:{\"input\":function($event){_vm.team.active = $event.target.checked}}})])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Team.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Team.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Team.vue?vue&type=template&id=046021ab&scoped=true&\"\nimport script from \"./Team.vue?vue&type=script&lang=js&\"\nexport * from \"./Team.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"046021ab\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TeamAdmin.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TeamAdmin.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TeamAdmin.vue?vue&type=template&id=78bab306&scoped=true&\"\nimport script from \"./TeamAdmin.vue?vue&type=script&lang=js&\"\nexport * from \"./TeamAdmin.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"78bab306\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{staticClass:\"create-group\"},[_c('button',{staticClass:\"create-btn\",on:{\"click\":_vm.createTask}},[_vm._v(\" Create task \")]),_c('button',{staticClass:\"create-btn\",on:{\"click\":_vm.createTeam}},[_vm._v(\" Create team \")])]),_c('admin-scoreboard')],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.teams !== null)?_c('score-table',{attrs:{\"headRowTitle\":\"#\",\"teamClickable\":true,\"admin\":true,\"tasks\":_vm.tasks,\"teams\":_vm.teams},on:{\"openTeam\":_vm.openTeam,\"openTeamAdmin\":_vm.openTeamAdmin,\"openTaskAdmin\":_vm.openTaskAdmin,\"openTeamTaskHistory\":_vm.openTeamTaskHistory}}):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Scoreboard.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Scoreboard.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Scoreboard.vue?vue&type=template&id=7824f278&scoped=true&\"\nimport script from \"./Scoreboard.vue?vue&type=script&lang=js&\"\nexport * from \"./Scoreboard.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7824f278\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AdminScoreboard.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AdminScoreboard.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AdminScoreboard.vue?vue&type=template&id=16c38602&scoped=true&\"\nimport script from \"./AdminScoreboard.vue?vue&type=script&lang=js&\"\nexport * from \"./AdminScoreboard.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AdminScoreboard.vue?vue&type=style&index=0&id=16c38602&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"16c38602\",\n null\n \n)\n\nexport default component.exports"],"sourceRoot":""} \ No newline at end of file diff --git a/front/dist/js/app.5706f8d1.js b/front/dist/js/app.5706f8d1.js new file mode 100644 index 00000000..9c1beae4 --- /dev/null +++ b/front/dist/js/app.5706f8d1.js @@ -0,0 +1,2 @@ +(function(t){function e(e){for(var a,r,i=e[0],u=e[1],c=e[2],d=0,l=[];d\n \n \n \n\n\n\n\n\n","import mod from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=33eddfe4&\"\nimport script from \"./App.vue?vue&type=script&lang=js&\"\nexport * from \"./App.vue?vue&type=script&lang=js&\"\nimport style0 from \"./App.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import Vue from 'vue';\nimport VueRouter from 'vue-router';\n\nimport { serverUrl } from '@/config';\n\nconst Scoreboard = () =>\n import(/* webpackChunkName: \"main\" */ '@/views/Scoreboard');\nconst LiveScoreboard = () =>\n import(/* webpackChunkName: \"main\" */ '@/views/LiveScoreboard');\nconst TeamScoreboard = () =>\n import(/* webpackChunkName: \"main\" */ '@/views/TeamScoreboard');\n\nconst AdminLogin = () =>\n import(/* webpackChunkName: \"admin\" */ '@/views/AdminLogin');\nconst AdminScoreboard = () =>\n import(/* webpackChunkName: \"admin\" */ '@/views/AdminScoreboard');\nconst TaskAdmin = () =>\n import(/* webpackChunkName: \"admin\" */ '@/views/TaskAdmin');\nconst TeamAdmin = () =>\n import(/* webpackChunkName: \"admin\" */ '@/views/TeamAdmin');\nconst AdminTeamTaskLog = () =>\n import(/* webpackChunkName: \"admin\" */ '@/views/AdminTeamTaskLog');\n\nVue.use(VueRouter);\n\nconst routes = [\n {\n path: '/',\n name: 'index',\n component: Scoreboard,\n },\n {\n path: '/live/',\n name: 'live',\n component: LiveScoreboard,\n meta: {\n layout: 'empty-layout',\n },\n },\n {\n path: '/team/:id/',\n name: 'team',\n component: TeamScoreboard,\n },\n {\n path: '/admin/login/',\n name: 'adminLogin',\n component: AdminLogin,\n },\n {\n path: '/admin/',\n name: 'admin',\n component: AdminScoreboard,\n meta: {\n auth: true,\n },\n },\n {\n path: '/admin/task/:id/',\n name: 'taskAdmin',\n component: TaskAdmin,\n meta: {\n auth: true,\n },\n },\n {\n path: '/admin/team/:id/',\n name: 'teamAdmin',\n component: TeamAdmin,\n meta: {\n auth: true,\n },\n },\n {\n path: '/admin/create_task/',\n name: 'createTask',\n component: TaskAdmin,\n meta: {\n auth: true,\n },\n },\n {\n path: '/admin/create_team/',\n name: 'createTeam',\n component: TeamAdmin,\n meta: {\n auth: true,\n },\n },\n {\n path: '/admin/teamtask_log/team/:teamId/task/:taskId/',\n name: 'adminTeamTaskLog',\n component: () => AdminTeamTaskLog,\n meta: {\n auth: true,\n },\n },\n];\n\nconst router = new VueRouter({\n mode: 'history',\n base: process.env.BASE_URL,\n routes,\n});\n\nrouter.beforeEach(async function(to, from, next) {\n if (to.meta.auth) {\n let ok = false;\n try {\n await router.$http.get(`${serverUrl}/api/admin/status/`);\n ok = true;\n } catch (e) {\n next({\n name: 'adminLogin',\n });\n }\n if (ok) {\n next();\n }\n } else {\n next();\n }\n});\n\nexport default router;\n","import TeamTask from '@/models/teamTask';\n\nclass Team {\n constructor({ name, ip, id, teamTasks, tasks, highlighted }) {\n this.name = name;\n this.ip = ip;\n this.id = id;\n this.highlighted = highlighted;\n this.taskModels = tasks;\n this.update(teamTasks);\n }\n\n update(teamTasks) {\n this.tasks = teamTasks.filter(({ teamId }) => teamId === this.id);\n this.score = this.tasks.reduce(\n (acc, { score, sla }) => acc + score * (sla / 100.0),\n 0\n );\n let taskIds = this.tasks.map(x => x.taskId);\n for (let task of this.taskModels) {\n if (!taskIds.includes(task.id)) {\n this.tasks.push(\n new TeamTask({\n id: 0,\n task_id: task.id,\n team_id: this.id,\n status: 0,\n stolen: 0,\n lost: 0,\n score: 0,\n checks: 0,\n checks_passed: 0,\n })\n );\n }\n }\n this.tasks.sort(TeamTask.comp);\n }\n\n static comp(A, B) {\n return B.score - A.score;\n }\n}\n\nexport default Team;\n","import Vue from 'vue';\nimport Vuex from 'vuex';\nimport createPersistedState from 'vuex-persistedstate';\nimport Team from '@/models/team';\nimport Task from '@/models/task';\nimport TeamTask from '@/models/teamTask';\n\nVue.use(Vuex);\n\nconst store = new Vuex.Store({\n plugins: [createPersistedState({ paths: ['showPonies'] })],\n state: {\n round: 0,\n roundTime: null,\n roundStart: null,\n roundProgress: null,\n\n teams: null,\n tasks: null,\n teamTasks: null,\n\n showPonies: true,\n\n layout: 'default-layout',\n },\n mutations: {\n setRound(state, round) {\n state.round = round;\n },\n setRoundStart(state, roundStart) {\n state.roundStart = roundStart;\n },\n setRoundTime(state, roundTime) {\n state.roundTime = roundTime;\n },\n setRoundProgress(state, roundProgress) {\n state.roundProgress = roundProgress;\n },\n setTeams(state, teams) {\n state.teams = teams;\n },\n setTasks(state, tasks) {\n state.tasks = tasks;\n },\n setGameState(state, payload) {\n state.round = payload.round;\n state.roundStart = payload.roundStart;\n state.teamTasks = payload.teamTasks;\n },\n updateTeams(state) {\n if (state.teams !== null) {\n state.teams.forEach(team => {\n team.update(state.teamTasks);\n });\n state.teams = state.teams.sort(Team.comp);\n }\n },\n togglePonies(state) {\n state.showPonies = !state.showPonies;\n },\n\n setLayout(state, layout) {\n state.layout = layout;\n },\n },\n getters: {\n layout(state) {\n return state.layout;\n },\n },\n actions: {\n fetchRoundTime: async function(context) {\n const {\n data: { round_time: roundTime },\n } = await this.$http.get('/client/config/');\n context.commit('setRoundTime', roundTime);\n },\n calculateRoundProgress: function(context) {\n const { round, roundTime, roundStart } = context.state;\n if (roundTime === null || roundStart === null || round < 1) {\n context.commit('setRoundProgress', null);\n }\n let roundProgress =\n (new Date().getTime() / 1000 - roundStart - roundTime) /\n roundTime;\n roundProgress = Math.min(roundProgress, 1);\n roundProgress = Math.floor(roundProgress * 100);\n context.commit('setRoundProgress', roundProgress);\n },\n handleUpdateScoreboardMessage(context, payload) {\n let {\n round,\n round_start: roundStart,\n team_tasks: teamTasks,\n } = payload;\n\n teamTasks = teamTasks.map(tt => new TeamTask(tt));\n const state = { round, roundStart, teamTasks };\n\n context.commit('setGameState', state);\n context.commit('updateTeams');\n },\n handleInitScoreboardMessage(context, payload) {\n let { state, teams, tasks } = payload;\n\n tasks = tasks.map(task => new Task(task)).sort(Task.comp);\n context.commit('setTasks', tasks);\n context.dispatch('handleUpdateScoreboardMessage', state);\n\n teams = teams\n .map(\n team =>\n new Team({\n teamTasks: context.state.teamTasks,\n tasks: context.state.tasks,\n ...team,\n })\n )\n .sort(Team.comp);\n\n context.commit('setTeams', teams);\n },\n },\n});\n\nexport default store;\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"app\"}},[_c('header',[_c('topbar')],1),_c('container',[_vm._t(\"default\")],2),_vm._m(0)],1)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('footer',{staticClass:\"footer\"},[_vm._v(\" Powered by \"),_c('span',{staticClass:\"team\"},[_vm._v(\"C4T BuT S4D\")]),_vm._v(\" CTF team \")])}]\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"container\"},[_vm._t(\"default\")],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { render, staticRenderFns } from \"./Container.vue?vue&type=template&id=831e0c14&scoped=true&\"\nvar script = {}\nimport style0 from \"./Container.vue?vue&type=style&index=0&id=831e0c14&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"831e0c14\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"topbar\"},[_c('router-link',{staticClass:\"tp\",attrs:{\"to\":\"/live/\"}},[_vm._v(\"Live\")]),_c('div',{staticClass:\"progress-bar\",style:({ width: (_vm.roundProgress + \"%\") })}),_c('div',{staticClass:\"tp\"},[_vm._v(\"Round: \"+_vm._s(_vm.round))])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Topbar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Topbar.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Topbar.vue?vue&type=template&id=14c1d177&scoped=true&\"\nimport script from \"./Topbar.vue?vue&type=script&lang=js&\"\nexport * from \"./Topbar.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Topbar.vue?vue&type=style&index=0&id=14c1d177&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"14c1d177\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DefaultLayout.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DefaultLayout.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./DefaultLayout.vue?vue&type=template&id=4f40b6be&scoped=true&\"\nimport script from \"./DefaultLayout.vue?vue&type=script&lang=js&\"\nexport * from \"./DefaultLayout.vue?vue&type=script&lang=js&\"\nimport style0 from \"./DefaultLayout.vue?vue&type=style&index=0&id=4f40b6be&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4f40b6be\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"app\"}},[_vm._t(\"default\")],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { render, staticRenderFns } from \"./EmptyLayout.vue?vue&type=template&id=d5718dea&\"\nvar script = {}\nimport style0 from \"./EmptyLayout.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import Vue from 'vue';\nimport App from './App.vue';\nimport router from './router';\nimport axios from 'axios';\nimport store from '@/store';\nimport { apiUrl } from '@/config';\nimport DefaultLayout from '@/layouts/DefaultLayout';\nimport EmptyLayout from '@/layouts/EmptyLayout';\n\nVue.config.productionTip = false;\n\naxios.defaults.baseURL = apiUrl;\naxios.defaults.withCredentials = true;\n\nVue.prototype.$http = axios;\nrouter.$http = axios;\nstore.$http = axios;\n\nVue.component('default-layout', DefaultLayout);\nVue.component('empty-layout', EmptyLayout);\n\nnew Vue({\n router,\n store,\n render: h => h(App),\n}).$mount('#app');\n","export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=scss&\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DefaultLayout.vue?vue&type=style&index=0&id=4f40b6be&lang=scss&scoped=true&\"","class TeamTask {\n constructor({\n id,\n task_id: taskId,\n team_id: teamId,\n status,\n stolen,\n lost,\n score,\n checks,\n checks_passed: checksPassed,\n message,\n }) {\n this.id = id;\n this.taskId = taskId;\n this.teamId = teamId;\n this.status = status;\n this.stolen = stolen;\n this.lost = lost;\n this.sla = (100.0 * checksPassed) / Math.max(checks, 1);\n this.score = score;\n this.message = message === '' && this.status == 101 ? 'OK' : message;\n }\n\n static comp(A, B) {\n return A.taskId - B.taskId;\n }\n}\n\nexport default TeamTask;\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Container.vue?vue&type=style&index=0&id=831e0c14&lang=scss&scoped=true&\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EmptyLayout.vue?vue&type=style&index=0&lang=scss&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Topbar.vue?vue&type=style&index=0&id=14c1d177&lang=scss&scoped=true&\"","let url = '';\n\nif (process.env.NODE_ENV === 'development') {\n url = 'http://127.0.0.1:8080';\n} else {\n url = window.location.origin;\n}\n\nconst serverUrl = url;\nconst apiUrl = `${serverUrl}/api`;\n\nconst statuses = [101, 102, 103, 104, 110];\n\nconst statusesNames = {\n 101: 'UP',\n 102: 'CORRUPT',\n 103: 'MUMBLE',\n 104: 'DOWN',\n 110: 'CHECK FAILED',\n '-1': 'OFFLINE',\n};\n\nconst statusColors = {\n 101: '#7dfc74',\n 102: '#5191ff',\n 103: '#ff9114',\n 104: '#ff5b5b',\n 110: '#ffff00',\n '-1': '#fa83fc',\n};\n\nconst defaultStatusColor = '#ffffff';\n\nconst topTeamColors = ['#ffdf00', '#c0c0c0', '#d3983f'];\nconst defaultTeamColor = '#ffffff';\n\nexport {\n serverUrl,\n apiUrl,\n statusesNames,\n statuses,\n topTeamColors,\n defaultTeamColor,\n statusColors,\n defaultStatusColor,\n};\n","class Task {\n constructor({ name, id }) {\n this.name = name;\n this.id = id;\n }\n\n static comp(A, B) {\n return A.id - B.id;\n }\n}\n\nexport default Task;\n"],"sourceRoot":""} \ No newline at end of file diff --git a/front/dist/js/app.ee6220d5.js b/front/dist/js/app.ee6220d5.js deleted file mode 100644 index 966bce11..00000000 --- a/front/dist/js/app.ee6220d5.js +++ /dev/null @@ -1,2 +0,0 @@ -(function(t){function e(e){for(var s,i,o=e[0],c=e[1],u=e[2],d=0,m=[];d2?"default-team":""]},[t._v(" "+t._s(s+1)+" ")]),a("div",{staticClass:"team team-row",class:["top-"+(s+1),s>2?"default-team":""],on:{click:function(e){return t.openTeam(c)}}},[a("div",{staticClass:"team-name"},[t._v(t._s(n))]),a("div",{staticClass:"ip"},[t._v(t._s(o))])]),a("div",{staticClass:"score",class:["top-"+(s+1),s>2?"default-team":""]},[t._v(" "+t._s(r.toFixed(2))+" ")])]),a("div",{staticClass:"service"},t._l(i,(function(e){var s=e.id,n=e.sla,r=e.score,o=e.stolen,c=e.lost,u=e.message,l=e.status;return a("div",{key:s,staticClass:"service-cell",class:"status-"+l,style:{"font-size":1-i.length/20+"em"}},[a("button",{staticClass:"info"},[a("i",{staticClass:"fas fa-info-circle"}),a("span",{staticClass:"tooltip"},[t._v(t._s(""===u?"OK":u))])]),a("div",{staticClass:"sla"},[a("strong",[t._v("SLA")]),t._v(" : "+t._s(n.toFixed(2))+"% ")]),a("div",{staticClass:"fp"},[a("strong",[t._v("FP")]),t._v(" : "+t._s(r.toFixed(2))+" ")]),a("div",{staticClass:"flags"},[a("i",{staticClass:"fas fa-flag"}),t._v(" +"+t._s(o)+"/-"+t._s(c)+" ")])])})),0)])})),0)],1):t._e()},T=[],$=(a("4160"),a("d81d"),a("4e82"),a("159b"),a("5530")),O=a("8e27"),P=a.n(O),j="";j=window.location.origin;var I=j,S=[101,102,103,104,110],N={101:"UP",102:"CORRUPT",103:"MUMBLE",104:"DOWN",110:"CHECK FAILED","-1":"OFFLINE"},F=(a("b0c0"),a("d4ec")),E=a("bee2"),D=function(){function t(e){var a=e.name,s=e.id;Object(F["a"])(this,t),this.name=a,this.id=s}return Object(E["a"])(t,null,[{key:"comp",value:function(t,e){return t.id-e.id}}]),t}(),A=D,M=(a("4de4"),a("caad"),a("13d5"),a("2532"),a("b85c")),L=function(){function t(e){var a=e.id,s=e.task_id,n=e.team_id,r=e.status,i=e.stolen,o=e.lost,c=e.score,u=e.checks,l=e.checks_passed,d=e.message;Object(F["a"])(this,t),this.id=a,this.taskId=s,this.teamId=n,this.status=r,this.stolen=i,this.lost=o,this.sla=100*l/Math.max(u,1),this.score=c,this.message=d}return Object(E["a"])(t,null,[{key:"comp",value:function(t,e){return t.taskId-e.taskId}}]),t}(),B=L,z=function(){function t(e){var a=e.name,s=e.ip,n=e.id,r=e.teamTasks,i=e.tasks,o=e.highlighted;Object(F["a"])(this,t),this.name=a,this.ip=s,this.id=n,this.highlighted=o,this.taskModels=i,this.update(r)}return Object(E["a"])(t,[{key:"update",value:function(t){var e=this;this.tasks=t.filter((function(t){var a=t.team_id;return a===e.id})).map((function(t){return new B(t)})),this.score=this.tasks.reduce((function(t,e){var a=e.score,s=e.sla;return t+a*(s/100)}),0);var a,s=this.tasks.map((function(t){return t.taskId})),n=Object(M["a"])(this.taskModels);try{for(n.s();!(a=n.n()).done;){var r=a.value;s.includes(r.id)||this.tasks.push(new B({id:0,task_id:r.id,team_id:this.id,status:0,stolen:0,lost:0,score:0,checks:0,checks_passed:0}))}}catch(i){n.e(i)}finally{n.f()}this.tasks.sort(B.comp)}}],[{key:"comp",value:function(t,e){return e.score-t.score}}]),t}(),U=z,H={props:{updateRound:Function,updateRoundStart:Function,timer:Number},data:function(){return{error:null,server:null,tasks:null,teams:null,round_start:0}},methods:{openTeam:function(t){clearInterval(this.timer),this.$router.push({name:"team",params:{id:t}})["catch"]((function(){}))}},created:function(){var t=this;this.server=P()("".concat(I,"/game_events"),{forceNew:!0}),this.server.on("connect_error",(function(){t.error="Can't connect to server"})),this.server.on("init_scoreboard",(function(e){var a=e.data;t.error=null;var s=a.state,n=s.round_start,r=s.round,i=s.team_tasks,o=a.tasks,c=a.teams;t.updateRoundStart(n),t.updateRound(r),t.tasks=o.map((function(t){return new A(t)})).sort(A.comp),t.teams=c.map((function(t){return new U(Object($["a"])(Object($["a"])({},t),{},{tasks:o,teamTasks:i}))})).sort(U.comp)})),this.server.on("update_scoreboard",(function(e){var a=e.data;t.error=null;var s=a.round,n=a.team_tasks,r=a.round_start;t.updateRoundStart(r),t.updateRound(s),t.teams.forEach((function(t){t.update(n)})),t.teams=t.teams.sort(U.comp)}))}},K=H,G=(a("a6d0"),Object(i["a"])(K,R,T,!1,null,"232ca285",null)),J=G.exports,q=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"statuses"},t._l(t.statuses,(function(e){return a("div",{key:e,staticClass:"status-cell",class:"status-"+e},[t._v(" "+t._s(t.statusesNames[e])+" ")])})),0)},W=[],Q={data:function(){return{statuses:S,statusesNames:N}}},V=Q,X=(a("2586"),Object(i["a"])(V,q,W,!1,null,"4069afa5",null)),Y=X.exports,Z=a("bc3a"),tt=a.n(Z),et={components:{Container:k,Topbar:y,Scoreboard:J,Statuses:Y},data:function(){return{round:0,roundStart:0,timer:null,roundTime:null,roundProgress:null}},created:function(){var t=Object(l["a"])(regeneratorRuntime.mark((function t(){var e,a;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:return t.next=2,tt.a.get("".concat(I,"/api/client/config/"));case 2:e=t.sent,a=e.data.round_time,this.roundTime=a,this.timer=setInterval(this.tick,500);case 6:case"end":return t.stop()}}),t,this)})));function e(){return t.apply(this,arguments)}return e}(),methods:{updateRound:function(t){this.round=t},updateRoundStart:function(t){this.roundStart=t},tick:function(){null===this.roundTime||null===this.roundStart||this.round<1?this.roundProgress=0:(this.roundProgress=((new Date).getTime()/1e3-this.roundStart-this.roundTime)/this.roundTime,this.roundProgress=Math.min(this.roundProgress,1))}}},at=et,st=(a("a778"),Object(i["a"])(at,m,p,!1,null,"4d8480e4",null)),nt=st.exports,rt=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"screen"},[a("iframe",{staticClass:"pony",attrs:{src:"https://panzi.github.io/Browser-Ponies/ponies-iframe.html#fadeDuration=500&volume=1&fps=25&speed=3&audioEnabled=false&dontSpeak=true&showFps=false&showLoadProgress=false&speakProbability=0.1&spawn.masked%20matterhorn=1&spawn.nightmare%20moon=1&spawn.princess%20cadance=1&spawn.princess%20cadance%20(teenager)=1&spawn.princess%20celestia=1&spawn.princess%20celestia%20(alternate%20filly)=1&spawn.princess%20celestia%20(filly)=1&spawn.princess%20luna=1&spawn.princess%20luna%20(filly)=1&spawn.princess%20luna%20(season%201)=1&spawn.princess%20twilight%20sparkle=1&spawn.queen%20chrysalis=1&spawn.roseluck=1&spawn.sapphire%20shores=1&spawn.screw%20loose=1&spawn.screwball=1&spawn.seabreeze=1&spawn.sheriff%20silverstar=1&spawn.shoeshine=1&spawn.shopkeeper=1&spawn.silver%20spoon=1&spawn.sindy=1&spawn.sir%20colton%20vines=1&spawn.slendermane=1&spawn.soigne%20folio=1&spawn.stella=1&spawn.sue%20pie=1&spawn.suri%20polomare=1&spawn.twist=1&spawn.walter=1&spawnRandom=1&paddock=false&grass=false",width:"640",height:"480",frameborder:"0",scrolling:"no",marginheight:"0",marginwidth:"0",title:"pony"}}),a("live-scoreboard")],1)},it=[],ot=function(){var t=this,e=t.$createElement,a=t._self._c||e;return null!==t.error?a("div",{staticClass:"flag"},[t._v(t._s(t.error))]):a("div",{staticClass:"flag"},t._l(t.events,(function(e,s){var n=e.attacker,r=e.victim,i=e.task,o=e.delta;return a("div",{key:s},[a("span",{staticClass:"mark"},[t._v(t._s(n))]),t._v(" stole a flag from "),a("span",{staticClass:"mark"},[t._v(t._s(r))]),t._v("'s service "),a("span",{staticClass:"mark"},[t._v(t._s(i))]),t._v(" and got "),a("span",{staticClass:"mark"},[t._v(t._s(o))]),t._v(" points ")])})),0)},ct=[],ut={data:function(){return{error:null,server:null,teams:null,tasks:null,events:[]}},created:function(){var t=Object(l["a"])(regeneratorRuntime.mark((function t(){var e,a,s,n,r=this;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:return t.prev=0,t.next=3,this.$http.get("".concat(I,"/api/client/teams/"));case 3:return e=t.sent,a=e.data,t.next=7,this.$http.get("".concat(I,"/api/client/tasks/"));case 7:s=t.sent,n=s.data,this.teams=a,this.tasks=n,t.next=17;break;case 13:return t.prev=13,t.t0=t["catch"](0),this.error="Can't connect to server",t.abrupt("return");case 17:this.server=P()("".concat(I,"/live_events"),{forceNew:!0}),this.server.on("connect_error",(function(){r.error="Can't connect to server"})),this.server.on("flag_stolen",(function(t){var e=t.data;r.error=null;var a=e.attacker_id,s=e.victim_id,n=e.task_id,i=e.attacker_delta;r.events.unshift({attacker:r.teams.filter((function(t){var e=t.id;return e===a}))[0].name,victim:r.teams.filter((function(t){var e=t.id;return e===s}))[0].name,task:r.tasks.filter((function(t){var e=t.id;return e==n}))[0].name,delta:i})}));case 20:case"end":return t.stop()}}),t,this,[[0,13]])})));function e(){return t.apply(this,arguments)}return e}()},lt=ut,dt=(a("bacc"),Object(i["a"])(lt,ot,ct,!1,null,"0618c0a0",null)),mt=dt.exports,pt={components:{LiveScoreboard:mt}},vt=pt,ht=(a("b319"),Object(i["a"])(vt,rt,it,!1,null,"11926072",null)),ft=ht.exports,_t=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{attrs:{id:"app"}},[a("header",[a("topbar",{attrs:{round:t.round}})],1),a("container",[a("statuses"),a("team-scoreboard",{attrs:{updateRound:t.updateRound}})],1),t._m(0)],1)},kt=[function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("footer",{staticClass:"footer"},[t._v(" Powered by "),a("span",{staticClass:"team"},[t._v("C4T BuT S4D")]),t._v(" CTF team ")])}],gt=function(){var t=this,e=t.$createElement,a=t._self._c||e;return null!==t.error?a("div",[t._v(" "+t._s(t.error)+" ")]):null!==t.team?a("div",{staticClass:"table"},[a("div",{staticClass:"row"},[a("div",{staticClass:"team"},[t._v("team")]),a("div",{staticClass:"score"},[t._v("score")]),a("div",{staticClass:"service-name"},t._l(t.tasks,(function(e){var s=e.name;return a("div",{key:s,staticClass:"service-cell"},[t._v(" "+t._s(s)+" ")])})),0)]),a("div",t._l(t.states,(function(e,s){return a("div",{key:s,staticClass:"row"},[a("div",{staticClass:"team"},[a("div",{staticClass:"team-name"},[t._v(t._s(t.team.name))]),a("div",{staticClass:"ip"},[t._v(t._s(t.team.ip))])]),a("div",{staticClass:"score"},[t._v(" "+t._s(e.score.toFixed(2))+" ")]),a("div",{staticClass:"service"},t._l(e.tasks,(function(e){var s=e.id,n=e.checks,r=e.checks_passed,i=e.score,o=e.stolen,c=e.lost,u=e.message,l=e.status;return a("div",{key:s,staticClass:"service-cell",class:"status-"+l,style:{"font-size":1-t.tasks.length/20+"em"}},[a("button",{staticClass:"info"},[a("i",{staticClass:"fas fa-info-circle"}),a("span",{staticClass:"tooltip"},[t._v(" "+t._s(""===u?"OK":u)+" ")])]),a("div",{staticClass:"sla"},[a("strong",[t._v("SLA")]),t._v(": "+t._s((100*r/Math.max(n,1)).toFixed(2))+"% ")]),a("div",{staticClass:"fp"},[a("strong",[t._v("FP")]),t._v(": "+t._s(i.toFixed(2))+" ")]),a("div",{staticClass:"flags"},[a("i",{staticClass:"fas fa-flag"}),t._v(" +"+t._s(o)+"/-"+t._s(c)+" ")])])})),0)])})),0)]):t._e()},bt=[],wt=(a("99af"),a("c975"),a("fb6a"),a("07ac"),a("2909")),Ct={props:{updateRound:Function,updateRoundStart:Function},data:function(){return{error:null,team:null,teamId:null,tasks:null,round:0,by_task:[]}},created:function(){var t=Object(l["a"])(regeneratorRuntime.mark((function t(){var e,a,s,n,r,i,o,c,u,l,d,m,p,v=this;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:return this.teamId=this.$route.params.id,t.prev=1,t.next=4,this.$http.get("".concat(I,"/api/client/teams/"));case 4:return e=t.sent,a=e.data,t.next=8,this.$http.get("".concat(I,"/api/client/tasks/"));case 8:return s=t.sent,n=s.data,t.next=12,this.$http.get("".concat(I,"/api/client/teams/").concat(this.teamId));case 12:r=t.sent,i=r.data,this.team=a.filter((function(t){var e=t.id;return e==v.teamId}))[0],this.tasks=n.sort((function(t,e){var a=t.id,s=e.id;return a-s})),this.round=i.reduce((function(t,e){var a=e.round;return Math.max(t,a)}),0),this.updateRound(this.round),i=i.map((function(t){return{id:Number(t.id),round:Number(t.round),task_id:Number(t.task_id),team_id:Number(t.team_id),status:t.status,stolen:t.stolen,lost:t.lost,score:Number(t.score),checks:Number(t.checks),checks_passed:Number(t.checks_passed),timestamp_secs:Number(t.timestamp.slice(0,t.timestamp.indexOf("-"))),timestamp_num:Number(t.timestamp.slice(t.timestamp.indexOf("-")+1)),message:t.message}})),i=i.sort((function(t,e){var a=t.timestamp_secs,s=t.timestamp_num,n=e.timestamp_secs,r=e.timestamp_num;return a===n?r-s:n-a})),this.by_task={},o=Object(M["a"])(i);try{for(o.s();!(c=o.n()).done;)u=c.value,l=u.task_id-1,this.by_task[l]||(this.by_task[l]=[]),this.by_task[l].push(u)}catch(h){o.e(h)}finally{o.f()}for(this.by_task=Object.values(this.by_task),d=Math.min.apply(Math,Object(wt["a"])(this.by_task.map((function(t){return t.length})))),this.states=[],m=function(t){v.states.push({tasks:v.by_task.map((function(e){return e[t]})),score:v.by_task.map((function(e){return e[t]})).reduce((function(t,e){var a=e.score,s=e.checks,n=e.checks_passed;return t+a*(n/Math.max(s,1))}),0)})},p=0;p2?"default-team":""]},[t._v(" "+t._s(s+1)+" ")]),a("div",{staticClass:"team team-row",class:["top-"+(s+1),s>2?"default-team":""],on:{click:function(e){return t.openTeam(c)}}},[a("div",{staticClass:"team-name"},[t._v(t._s(n))]),a("div",{staticClass:"ip"},[t._v(t._s(o))]),a("button",{staticClass:"edit",on:{click:[function(e){return t.openTeamAdmin(c)},function(t){t.stopPropagation()}]}},[a("i",{staticClass:"fas fa-edit"})])]),a("div",{staticClass:"score",class:["top-"+(s+1),s>2?"default-team":""]},[t._v(" "+t._s(r.toFixed(2))+" ")])]),a("div",{staticClass:"service"},t._l(i,(function(e){var s=e.id,n=e.teamId,r=e.taskId,o=e.sla,c=e.score,u=e.stolen,l=e.lost,d=e.message,m=e.status;return a("div",{key:s,staticClass:"service-cell",class:"status-"+m,style:{"font-size":1-i.length/20+"em"}},[a("button",{staticClass:"tt-edit",on:{click:function(e){return t.openTeamTaskHistory(n,r)}}},[a("i",{staticClass:"fas fa-edit"})]),a("button",{staticClass:"info"},[a("i",{staticClass:"fas fa-info-circle"}),a("span",{staticClass:"tooltip"},[t._v(t._s(""===d?"OK":d))])]),a("div",{staticClass:"sla"},[a("strong",[t._v("SLA")]),t._v(" : "+t._s(o.toFixed(2))+"% ")]),a("div",{staticClass:"fp"},[a("strong",[t._v("FP")]),t._v(" : "+t._s(c.toFixed(2))+" ")]),a("div",{staticClass:"flags"},[a("i",{staticClass:"fas fa-flag"}),t._v(" +"+t._s(u)+"/-"+t._s(l)+" ")])])})),0)])})),0)],1):t._e()},Nt=[],Ft={props:{updateRound:Function,updateRoundStart:Function,timer:Number},data:function(){return{error:null,server:null,tasks:null,teams:null,round_start:0}},methods:{openTeam:function(t){clearInterval(this.timer),this.$router.push({name:"team",params:{id:t}})["catch"]((function(){}))},openTaskAdmin:function(t){clearInterval(this.timer),this.$router.push({name:"taskAdmin",params:{id:t}})["catch"]((function(){}))},openTeamAdmin:function(t){clearInterval(this.timer),this.$router.push({name:"teamAdmin",params:{id:t}})["catch"]((function(){}))},openTeamTaskHistory:function(t,e){clearInterval(this.timer),this.$router.push({name:"adminTeamTaskLog",params:{teamId:t,taskId:e}})["catch"]((function(){}))}},created:function(){var t=this;this.server=P()("".concat(I,"/game_events"),{forceNew:!0}),this.server.on("connect_error",(function(){t.error="Can't connect to server"})),this.server.on("init_scoreboard",function(){var e=Object(l["a"])(regeneratorRuntime.mark((function e(a){var s,n,r,i,o,c,u,l,d;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return s=a.data,t.error=null,n=s.state,r=n.round_start,i=n.round,o=n.team_tasks,e.next=5,t.$http.get("".concat(I,"/api/admin/tasks/"));case 5:return c=e.sent,u=c.data,e.next=9,t.$http.get("".concat(I,"/api/admin/teams/"));case 9:l=e.sent,d=l.data,t.updateRoundStart(r),t.updateRound(i),t.tasks=u.map((function(t){return new A(t)})).sort(A.comp),t.teams=d.map((function(e){return new U(Object($["a"])(Object($["a"])({},e),{},{tasks:t.tasks,teamTasks:o}))})).sort(U.comp);case 15:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}()),this.server.on("update_scoreboard",(function(e){var a=e.data;t.error=null;var s=a.round,n=a.team_tasks,r=a.round_start;t.updateRoundStart(r),t.updateRound(s),t.teams.forEach((function(t){t.update(n)})),t.teams=t.teams.sort(U.comp)}))}},Et=Ft,Dt=(a("935a"),Object(i["a"])(Et,St,Nt,!1,null,"95736662",null)),At=Dt.exports,Mt={components:{Container:k,Topbar:y,AdminScoreboard:At},data:function(){return{round:0,roundStart:0,timer:null,roundTime:null,roundProgress:null}},created:function(){var t=Object(l["a"])(regeneratorRuntime.mark((function t(){var e,a;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:return t.next=2,tt.a.get("".concat(I,"/api/client/config/"));case 2:e=t.sent,a=e.data.round_time,this.roundTime=a,this.timer=setInterval(this.tick,500);case 6:case"end":return t.stop()}}),t,this)})));function e(){return t.apply(this,arguments)}return e}(),methods:{updateRound:function(t){this.round=t},updateRoundStart:function(t){this.roundStart=t},createTask:function(){var t=Object(l["a"])(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:this.$router.push({name:"createTask"})["catch"]((function(){}));case 1:case"end":return t.stop()}}),t,this)})));function e(){return t.apply(this,arguments)}return e}(),createTeam:function(){var t=Object(l["a"])(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:this.$router.push({name:"createTeam"})["catch"]((function(){}));case 1:case"end":return t.stop()}}),t,this)})));function e(){return t.apply(this,arguments)}return e}(),tick:function(){null===this.roundTime||null===this.roundStart||this.round<1?this.roundProgress=0:(this.roundProgress=((new Date).getTime()/1e3-this.roundStart-this.roundTime)/this.roundTime,this.roundProgress=Math.min(this.roundProgress,1))}}},Lt=Mt,Bt=(a("f8fd"),Object(i["a"])(Lt,jt,It,!1,null,"30996ed0",null)),zt=Bt.exports,Ut=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{attrs:{id:"app"}},[a("header",[a("topbar",{attrs:{round:t.round}})],1),a("container",[a("task-admin")],1),t._m(0)],1)},Ht=[function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("footer",{staticClass:"footer"},[t._v(" Powered by "),a("span",{staticClass:"team"},[t._v("C4T BuT S4D")]),t._v(" CTF team ")])}],Kt=function(){var t=this,e=t.$createElement,a=t._self._c||e;return null!==t.error?a("div",[t._v(" "+t._s(t.error)+" ")]):null!==t.task?a("form",{on:{submit:function(e){return e.preventDefault(),t.submitForm(e)}}},[a("p",[t._v(t._s(t.message))]),a("p",[t._v(" Name: "),a("input",{directives:[{name:"model",rawName:"v-model",value:t.task.name,expression:"task.name"}],attrs:{type:"text"},domProps:{value:t.task.name},on:{input:function(e){e.target.composing||t.$set(t.task,"name",e.target.value)}}})]),a("p",[t._v(" Checker: "),a("input",{directives:[{name:"model",rawName:"v-model",value:t.task.checker,expression:"task.checker"}],attrs:{type:"text"},domProps:{value:t.task.checker},on:{input:function(e){e.target.composing||t.$set(t.task,"checker",e.target.value)}}})]),a("p",[t._v(" Gets: "),a("input",{directives:[{name:"model",rawName:"v-model",value:t.task.gets,expression:"task.gets"}],attrs:{type:"number"},domProps:{value:t.task.gets},on:{input:function(e){e.target.composing||t.$set(t.task,"gets",e.target.value)}}})]),a("p",[t._v(" Puts: "),a("input",{directives:[{name:"model",rawName:"v-model",value:t.task.puts,expression:"task.puts"}],attrs:{type:"number"},domProps:{value:t.task.puts},on:{input:function(e){e.target.composing||t.$set(t.task,"puts",e.target.value)}}})]),a("p",[t._v(" Places: "),a("input",{directives:[{name:"model",rawName:"v-model",value:t.task.places,expression:"task.places"}],attrs:{type:"number"},domProps:{value:t.task.places},on:{input:function(e){e.target.composing||t.$set(t.task,"places",e.target.value)}}})]),a("p",[t._v(" Checker timeout: "),a("input",{directives:[{name:"model",rawName:"v-model",value:t.task.checker_timeout,expression:"task.checker_timeout"}],attrs:{type:"number"},domProps:{value:t.task.checker_timeout},on:{input:function(e){e.target.composing||t.$set(t.task,"checker_timeout",e.target.value)}}})]),a("p",[t._v(" Checker type: "),a("input",{directives:[{name:"model",rawName:"v-model",value:t.task.checker_type,expression:"task.checker_type"}],attrs:{type:"text"},domProps:{value:t.task.checker_type},on:{input:function(e){e.target.composing||t.$set(t.task,"checker_type",e.target.value)}}})]),a("p",[t._v(" Env path: "),a("input",{directives:[{name:"model",rawName:"v-model",value:t.task.env_path,expression:"task.env_path"}],attrs:{type:"text"},domProps:{value:t.task.env_path},on:{input:function(e){e.target.composing||t.$set(t.task,"env_path",e.target.value)}}})]),a("p",[t._v(" Get period: "),a("input",{directives:[{name:"model",rawName:"v-model",value:t.task.get_period,expression:"task.get_period"}],attrs:{type:"number"},domProps:{value:t.task.get_period},on:{input:function(e){e.target.composing||t.$set(t.task,"get_period",e.target.value)}}})]),a("p",[t._v(" Default score: "),a("input",{directives:[{name:"model",rawName:"v-model",value:t.task.default_score,expression:"task.default_score"}],attrs:{type:"number"},domProps:{value:t.task.default_score},on:{input:function(e){e.target.composing||t.$set(t.task,"default_score",e.target.value)}}})]),a("p",[t._v(" Active: "),a("input",{attrs:{type:"checkbox"},domProps:{checked:t.task.active},on:{input:function(e){t.task.active=e.target.checked}}})]),a("input",{attrs:{type:"submit",value:"Submit"}})]):t._e()},Gt=[],Jt={props:{updateRound:Function,updateRoundStart:Function},data:function(){return{error:null,task:null,taskId:null,message:null}},created:function(){var t=Object(l["a"])(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:return t.next=2,this.updateData();case 2:case"end":return t.stop()}}),t,this)})));function e(){return t.apply(this,arguments)}return e}(),watch:{$route:function(){var t=Object(l["a"])(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:return t.next=2,this.updateData();case 2:case"end":return t.stop()}}),t,this)})));function e(){return t.apply(this,arguments)}return e}()},methods:{updateData:function(){var t=Object(l["a"])(regeneratorRuntime.mark((function t(){var e,a,s=this;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:if(this.taskId=this.$route.params.id,this.taskId){t.next=6;break}this.task={name:"",checker:"",gets:1,puts:1,places:1,checker_timeout:20,checker_type:"hackerdom",env_path:"",get_period:10,default_score:2500,active:!0},this.message="Creating task",t.next=12;break;case 6:return t.next=8,this.$http.get("".concat(I,"/api/admin/tasks/"));case 8:e=t.sent,a=e.data,this.task=a.filter((function(t){var e=t.id;return e==s.taskId}))[0],this.message="Editing task ".concat(this.task.id," ").concat(this.task.name);case 12:case"end":return t.stop()}}),t,this)})));function e(){return t.apply(this,arguments)}return e}(),submitForm:function(){var t=Object(l["a"])(regeneratorRuntime.mark((function t(){var e,a,s,n;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:if(this.taskId){t.next=8;break}return t.next=3,this.$http.post("".concat(I,"/api/admin/tasks/"),this.task);case 3:e=t.sent,a=e.data,this.$router.push({name:"taskAdmin",params:{id:a.id}})["catch"]((function(){})),t.next=13;break;case 8:return t.next=10,this.$http.put("".concat(I,"/api/admin/tasks/").concat(this.taskId,"/"),this.task);case 10:s=t.sent,n=s.data,this.task=n;case 13:case"end":return t.stop()}}),t,this)})));function e(){return t.apply(this,arguments)}return e}()}},qt=Jt,Wt=Object(i["a"])(qt,Kt,Gt,!1,null,"3c2a7f28",null),Qt=Wt.exports,Vt={components:{Container:k,Topbar:y,TaskAdmin:Qt},data:function(){return{round:0}},methods:{updateRound:function(t){this.round=t}}},Xt=Vt,Yt=(a("62e5"),Object(i["a"])(Xt,Ut,Ht,!1,null,"64e78166",null)),Zt=Yt.exports,te=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{attrs:{id:"app"}},[a("header",[a("topbar",{attrs:{round:t.round}})],1),a("container",[a("team-admin")],1),t._m(0)],1)},ee=[function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("footer",{staticClass:"footer"},[t._v(" Powered by "),a("span",{staticClass:"team"},[t._v("C4T BuT S4D")]),t._v(" CTF team ")])}],ae=function(){var t=this,e=t.$createElement,a=t._self._c||e;return null!==t.error?a("div",[t._v(" "+t._s(t.error)+" ")]):null!==t.team?a("form",{on:{submit:function(e){return e.preventDefault(),t.submitForm(e)}}},[a("p",[t._v(t._s(t.message))]),a("p",[t._v(" Name: "),a("input",{directives:[{name:"model",rawName:"v-model",value:t.team.name,expression:"team.name"}],attrs:{type:"text"},domProps:{value:t.team.name},on:{input:function(e){e.target.composing||t.$set(t.team,"name",e.target.value)}}})]),a("p",[t._v(" IP: "),a("input",{directives:[{name:"model",rawName:"v-model",value:t.team.ip,expression:"team.ip"}],attrs:{type:"text"},domProps:{value:t.team.ip},on:{input:function(e){e.target.composing||t.$set(t.team,"ip",e.target.value)}}})]),a("p",[t._v(" Token: "),a("input",{directives:[{name:"model",rawName:"v-model",value:t.team.token,expression:"team.token"}],attrs:{type:"text"},domProps:{value:t.team.token},on:{input:function(e){e.target.composing||t.$set(t.team,"token",e.target.value)}}})]),a("p",[t._v(" Highlighted: "),a("input",{attrs:{type:"checkbox"},domProps:{checked:t.team.highlighted},on:{input:function(e){t.team.highlighted=e.target.checked}}})]),a("p",[t._v(" Active: "),a("input",{attrs:{type:"checkbox"},domProps:{checked:t.team.active},on:{input:function(e){t.team.active=e.target.checked}}})]),a("input",{attrs:{type:"submit",value:"Submit"}})]):t._e()},se=[],ne={props:{updateRound:Function,updateRoundStart:Function},data:function(){return{error:null,team:null,teamId:null,message:null}},created:function(){var t=Object(l["a"])(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:return t.next=2,this.updateData();case 2:case"end":return t.stop()}}),t,this)})));function e(){return t.apply(this,arguments)}return e}(),watch:{$route:function(){var t=Object(l["a"])(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:return t.next=2,this.updateData();case 2:case"end":return t.stop()}}),t,this)})));function e(){return t.apply(this,arguments)}return e}()},methods:{updateData:function(){var t=Object(l["a"])(regeneratorRuntime.mark((function t(){var e,a,s=this;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:if(this.teamId=this.$route.params.id,this.teamId){t.next=6;break}this.team={name:"",ip:"",token:"",highlighted:!1,active:!0},this.message="Creating team",t.next=12;break;case 6:return t.next=8,this.$http.get("".concat(I,"/api/admin/teams/"));case 8:e=t.sent,a=e.data,this.team=a.filter((function(t){var e=t.id;return e==s.teamId}))[0],this.message="Editing team ".concat(this.team.id," ").concat(this.team.name);case 12:case"end":return t.stop()}}),t,this)})));function e(){return t.apply(this,arguments)}return e}(),submitForm:function(){var t=Object(l["a"])(regeneratorRuntime.mark((function t(){var e,a,s,n;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:if(this.teamId){t.next=8;break}return t.next=3,this.$http.post("".concat(I,"/api/admin/teams/"),this.team);case 3:e=t.sent,a=e.data,this.$router.push({name:"teamAdmin",params:{id:a.id}})["catch"]((function(){})),t.next=13;break;case 8:return t.next=10,this.$http.put("".concat(I,"/api/admin/teams/").concat(this.teamId,"/"),this.team);case 10:s=t.sent,n=s.data,this.team=n;case 13:case"end":return t.stop()}}),t,this)})));function e(){return t.apply(this,arguments)}return e}()}},re=ne,ie=Object(i["a"])(re,ae,se,!1,null,"368fb983",null),oe=ie.exports,ce={components:{Container:k,Topbar:y,TeamAdmin:oe},data:function(){return{round:0}},methods:{updateRound:function(t){this.round=t}}},ue=ce,le=(a("7c0f"),Object(i["a"])(ue,te,ee,!1,null,"c695c784",null)),de=le.exports,me=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{attrs:{id:"app"}},[a("header",[a("topbar",{attrs:{round:t.round}})],1),a("container",[a("form",{on:{submit:function(e){return e.preventDefault(),t.submitForm(e)}}},[a("p",[t._v(" Username: "),a("input",{directives:[{name:"model",rawName:"v-model",value:t.username,expression:"username"}],attrs:{type:"text",placeholder:"Username"},domProps:{value:t.username},on:{input:function(e){e.target.composing||(t.username=e.target.value)}}})]),a("p",[t._v(" Password: "),a("input",{directives:[{name:"model",rawName:"v-model",value:t.password,expression:"password"}],attrs:{type:"password",placeholder:"Password"},domProps:{value:t.password},on:{input:function(e){e.target.composing||(t.password=e.target.value)}}})]),null!==t.error?a("p",{staticClass:"error-message"},[t._v(t._s(t.error))]):t._e(),a("input",{attrs:{type:"submit",value:"Submit"}})])]),t._m(0)],1)},pe=[function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("footer",{staticClass:"footer"},[t._v(" Powered by "),a("span",{staticClass:"team"},[t._v("C4T BuT S4D")]),t._v(" CTF team ")])}],ve={components:{Container:k,Topbar:y},data:function(){return{username:null,password:null,error:null,round:0}},methods:{updateRound:function(t){this.round=t},submitForm:function(){var t=Object(l["a"])(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:return t.prev=0,t.next=3,this.$http.post("".concat(I,"/api/admin/login/"),{username:this.username,password:this.password});case 3:this.$router.push({name:"admin"})["catch"]((function(){})),t.next=9;break;case 6:t.prev=6,t.t0=t["catch"](0),this.error=t.t0.response.data;case 9:case"end":return t.stop()}}),t,this,[[0,6]])})));function e(){return t.apply(this,arguments)}return e}()}},he=ve,fe=(a("efe8"),Object(i["a"])(he,me,pe,!1,null,"67f4a374",null)),_e=fe.exports,ke=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{attrs:{id:"app"}},[a("header",[a("topbar",{attrs:{round:t.round}})],1),a("container",[a("admin-team-task-log")],1),t._m(0)],1)},ge=[function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("footer",{staticClass:"footer"},[t._v(" Powered by "),a("span",{staticClass:"team"},[t._v("C4T BuT S4D")]),t._v(" CTF team ")])}],be=function(){var t=this,e=t.$createElement,a=t._self._c||e;return null!==t.error?a("div",[t._v(t._s(t.error))]):null!==t.teams?a("div",[a("p",[t._v(" Team "),a("b",[t._v(t._s(t.teamName))]),t._v(" ("+t._s(t.teamId)+") task "),a("b",[t._v(t._s(t.taskName))]),t._v(" ("+t._s(t.taskId)+") history ")]),a("div",{staticClass:"table"},[t._m(0),t._l(t.teamtasks,(function(e){var s=e.id,n=e.round,r=e.status,i=e.score,o=e.stolen,c=e.lost,u=e.checks,l=e.checks_passed,d=e.public_message,m=e.private_message,p=e.command;return a("div",{key:s,staticClass:"row",class:"status-"+r},[a("div",{staticClass:"round"},[t._v(t._s(n))]),a("div",{staticClass:"status"},[t._v(t._s(r))]),a("div",{staticClass:"score"},[t._v(t._s(i))]),a("div",{staticClass:"flags"},[t._v("+"+t._s(o)+"/-"+t._s(c))]),a("div",{staticClass:"checks"},[t._v(t._s(l)+"/"+t._s(u))]),a("div",{staticClass:"public"},[t._v(t._s(d))]),a("div",{staticClass:"private"},[t._v(t._s(m))]),a("div",{staticClass:"command"},[t._v(t._s(p))])])}))],2)]):t._e()},we=[function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"row"},[a("div",{staticClass:"round"},[t._v("round")]),a("div",{staticClass:"status"},[t._v("status")]),a("div",{staticClass:"score"},[t._v("score")]),a("div",{staticClass:"flags"},[t._v("flags")]),a("div",{staticClass:"checks"},[t._v("checks")]),a("div",{staticClass:"public"},[t._v("public")]),a("div",{staticClass:"private"},[t._v("private")]),a("div",{staticClass:"command"},[t._v("command")])])}],Ce={props:{updateRound:Function,updateRoundStart:Function,timer:Number},data:function(){return{error:null,taskId:null,teamId:null,teamtasks:null,teamName:null,taskName:null}},methods:{openTeam:function(t){clearInterval(this.timer),this.$router.push({name:"team",params:{id:t}})["catch"]((function(){}))}},created:function(){var t=Object(l["a"])(regeneratorRuntime.mark((function t(){var e,a=this;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:return this.taskId=this.$route.params.taskId,this.teamId=this.$route.params.teamId,t.next=4,this.$http.get("".concat(I,"/api/admin/teamtasks/?team_id=").concat(this.teamId,"&task_id=").concat(this.taskId));case 4:return e=t.sent,this.teamtasks=e.data,t.next=8,this.$http.get("".concat(I,"/api/admin/teams/"));case 8:return e=t.sent,this.teamName=e.data.filter((function(t){var e=t.id;return e==a.teamId}))[0].name,t.next=12,this.$http.get("".concat(I,"/api/admin/tasks/"));case 12:e=t.sent,this.taskName=e.data.filter((function(t){var e=t.id;return e==a.taskId}))[0].name;case 14:case"end":return t.stop()}}),t,this)})));function e(){return t.apply(this,arguments)}return e}()},xe=Ce,ye=(a("4e39"),Object(i["a"])(xe,be,we,!1,null,"2f9d297e",null)),Re=ye.exports,Te={components:{Container:k,Topbar:y,AdminTeamTaskLog:Re},data:function(){return{round:0}},methods:{updateRound:function(t){this.round=t}}},$e=Te,Oe=(a("bf9f"),Object(i["a"])($e,ke,ge,!1,null,"57fb3f15",null)),Pe=Oe.exports;s["a"].use(d["a"]);var je=[{path:"/",name:"index",component:nt},{path:"/live/",name:"live",component:ft},{path:"/team/:id/",name:"team",component:Pt},{path:"/admin/login/",name:"adminLogin",component:_e},{path:"/admin/",name:"admin",component:zt,meta:{auth:!0}},{path:"/admin/task/:id/",name:"taskAdmin",component:Zt,meta:{auth:!0}},{path:"/admin/team/:id/",name:"teamAdmin",component:de,meta:{auth:!0}},{path:"/admin/create_task/",name:"createTask",component:Zt,meta:{auth:!0}},{path:"/admin/create_team/",name:"createTeam",component:de,meta:{auth:!0}},{path:"/admin/teamtask_log/team/:teamId/task/:taskId/",name:"adminTeamTaskLog",component:Pe,meta:{auth:!0}}],Ie=new d["a"]({mode:"history",base:"/",routes:je});Ie.beforeEach(function(){var t=Object(l["a"])(regeneratorRuntime.mark((function t(e,a,s){var n;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:if(!e.meta.auth){t.next=14;break}return n=!1,t.prev=2,t.next=5,Ie.$http.get("".concat(I,"/api/admin/status/"));case 5:n=!0,t.next=11;break;case 8:t.prev=8,t.t0=t["catch"](2),s({name:"adminLogin"});case 11:n&&s(),t.next=15;break;case 14:s();case 15:case"end":return t.stop()}}),t,null,[[2,8]])})));return function(e,a,s){return t.apply(this,arguments)}}());var Se=Ie;s["a"].config.productionTip=!1,tt.a.defaults.withCredentials=!0,s["a"].prototype.$http=tt.a,Se.$http=tt.a,new s["a"]({router:Se,render:function(t){return t(u)}}).$mount("#app")},"5c0b":function(t,e,a){"use strict";a("9c0c")},"62e5":function(t,e,a){"use strict";a("5100")},"77ef":function(t,e,a){},"7c0f":function(t,e,a){"use strict";a("ead9")},"935a":function(t,e,a){"use strict";a("3800")},"989d":function(t,e,a){"use strict";a("d3e3")},"9c0c":function(t,e,a){},a6d0:function(t,e,a){"use strict";a("f47f")},a778:function(t,e,a){"use strict";a("4bda")},af25:function(t,e,a){},b319:function(t,e,a){"use strict";a("f604")},bacc:function(t,e,a){"use strict";a("f481")},bdfb:function(t,e,a){},bf9f:function(t,e,a){"use strict";a("c9b3")},c9b3:function(t,e,a){},cc0c:function(t,e,a){},d2fd:function(t,e,a){"use strict";a("4c5c")},d3e3:function(t,e,a){},dc71:function(t,e,a){"use strict";a("bdfb")},e2d3:function(t,e,a){},ead9:function(t,e,a){},ef42:function(t,e,a){"use strict";a("77ef")},efe8:function(t,e,a){"use strict";a("e2d3")},f47f:function(t,e,a){},f481:function(t,e,a){},f604:function(t,e,a){},f8fd:function(t,e,a){"use strict";a("cc0c")}}); -//# sourceMappingURL=app.ee6220d5.js.map \ No newline at end of file diff --git a/front/dist/js/app.ee6220d5.js.map b/front/dist/js/app.ee6220d5.js.map deleted file mode 100644 index 2b96a0ce..00000000 --- a/front/dist/js/app.ee6220d5.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/components/Statuses/Index.vue?d6ef","webpack:///./src/components/AdminTeamTaskLog/Index.vue?731f","webpack:///./src/App.vue?74d2","webpack:///./src/App.vue","webpack:///./src/views/Scoreboard.vue?f931","webpack:///./src/components/Container/Index.vue?4d5d","webpack:///./src/components/Container/Index.vue","webpack:///./src/components/Topbar/Index.vue?ee8f","webpack:///src/components/Topbar/Index.vue","webpack:///./src/components/Topbar/Index.vue?af1b","webpack:///./src/components/Topbar/Index.vue","webpack:///./src/components/Scoreboard/Index.vue?8917","webpack:///./src/config/index.js","webpack:///./src/models/task.js","webpack:///./src/models/teamTask.js","webpack:///./src/models/team.js","webpack:///src/components/Scoreboard/Index.vue","webpack:///./src/components/Scoreboard/Index.vue?da32","webpack:///./src/components/Scoreboard/Index.vue","webpack:///./src/components/Statuses/Index.vue?49f0","webpack:///src/components/Statuses/Index.vue","webpack:///./src/components/Statuses/Index.vue?0956","webpack:///./src/components/Statuses/Index.vue","webpack:///src/views/Scoreboard.vue","webpack:///./src/views/Scoreboard.vue?3d60","webpack:///./src/views/Scoreboard.vue","webpack:///./src/views/LiveScoreboard.vue?265e","webpack:///./src/components/LiveScoreboard/Index.vue?c2b0","webpack:///src/components/LiveScoreboard/Index.vue","webpack:///./src/components/LiveScoreboard/Index.vue?fb57","webpack:///./src/components/LiveScoreboard/Index.vue","webpack:///src/views/LiveScoreboard.vue","webpack:///./src/views/LiveScoreboard.vue?5a2f","webpack:///./src/views/LiveScoreboard.vue","webpack:///./src/views/TeamScoreboard.vue?533b","webpack:///./src/components/TeamScoreboard/Index.vue?6097","webpack:///src/components/TeamScoreboard/Index.vue","webpack:///./src/components/TeamScoreboard/Index.vue?12d1","webpack:///./src/components/TeamScoreboard/Index.vue","webpack:///src/views/TeamScoreboard.vue","webpack:///./src/views/TeamScoreboard.vue?4094","webpack:///./src/views/TeamScoreboard.vue","webpack:///./src/views/AdminScoreboard.vue?9cad","webpack:///./src/components/AdminScoreboard/Index.vue?12ce","webpack:///src/components/AdminScoreboard/Index.vue","webpack:///./src/components/AdminScoreboard/Index.vue?82e7","webpack:///./src/components/AdminScoreboard/Index.vue","webpack:///src/views/AdminScoreboard.vue","webpack:///./src/views/AdminScoreboard.vue?2524","webpack:///./src/views/AdminScoreboard.vue","webpack:///./src/views/TaskAdmin.vue?37fd","webpack:///./src/components/TaskAdmin/Index.vue?361a","webpack:///src/components/TaskAdmin/Index.vue","webpack:///./src/components/TaskAdmin/Index.vue?f018","webpack:///./src/components/TaskAdmin/Index.vue","webpack:///src/views/TaskAdmin.vue","webpack:///./src/views/TaskAdmin.vue?d73e","webpack:///./src/views/TaskAdmin.vue","webpack:///./src/views/TeamAdmin.vue?87b5","webpack:///./src/components/TeamAdmin/Index.vue?6235","webpack:///src/components/TeamAdmin/Index.vue","webpack:///./src/components/TeamAdmin/Index.vue?e7fb","webpack:///./src/components/TeamAdmin/Index.vue","webpack:///src/views/TeamAdmin.vue","webpack:///./src/views/TeamAdmin.vue?2a7e","webpack:///./src/views/TeamAdmin.vue","webpack:///./src/views/AdminLogin.vue?e37a","webpack:///src/views/AdminLogin.vue","webpack:///./src/views/AdminLogin.vue?282a","webpack:///./src/views/AdminLogin.vue","webpack:///./src/views/AdminTeamTaskLog.vue?3358","webpack:///./src/components/AdminTeamTaskLog/Index.vue?4ab5","webpack:///src/components/AdminTeamTaskLog/Index.vue","webpack:///./src/components/AdminTeamTaskLog/Index.vue?0648","webpack:///./src/components/AdminTeamTaskLog/Index.vue","webpack:///src/views/AdminTeamTaskLog.vue","webpack:///./src/views/AdminTeamTaskLog.vue?9467","webpack:///./src/views/AdminTeamTaskLog.vue","webpack:///./src/router/index.js","webpack:///./src/main.js","webpack:///./src/App.vue?c650","webpack:///./src/views/TaskAdmin.vue?3e46","webpack:///./src/views/TeamAdmin.vue?6a22","webpack:///./src/components/AdminScoreboard/Index.vue?5834","webpack:///./src/components/Container/Index.vue?4813","webpack:///./src/components/Scoreboard/Index.vue?dcad","webpack:///./src/views/Scoreboard.vue?39d1","webpack:///./src/views/LiveScoreboard.vue?c6c0","webpack:///./src/components/LiveScoreboard/Index.vue?1538","webpack:///./src/views/AdminTeamTaskLog.vue?fe4c","webpack:///./src/views/TeamScoreboard.vue?033d","webpack:///./src/components/TeamScoreboard/Index.vue?89d0","webpack:///./src/components/Topbar/Index.vue?16d4","webpack:///./src/views/AdminLogin.vue?e80b","webpack:///./src/views/AdminScoreboard.vue?d090"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","_vm","this","_h","$createElement","_c","_self","staticRenderFns","script","component","attrs","round","roundProgress","timer","updateRound","updateRoundStart","_m","staticClass","_v","_t","on","go","style","width","roundProgressInteger","_s","error","teams","_l","ref","index","score","tasks","ip","id","highlighted","class","$event","openTeam","toFixed","sla","stolen","lost","message","status","_e","url","location","origin","serverUrl","statuses","statusesNames","101","102","103","104","110","Task","A","B","TeamTask","taskId","task_id","teamId","team_id","checks","checksPassed","checks_passed","Math","max","Team","teamTasks","taskModels","update","filter","map","teamTask","reduce","acc","taskIds","x","task","includes","sort","comp","attacker","victim","delta","team","state","by_task","createTask","createTeam","openTaskAdmin","openTeamAdmin","stopPropagation","openTeamTaskHistory","preventDefault","submitForm","directives","rawName","expression","domProps","target","composing","$set","active","checked","$router","username","password","teamName","taskName","public_message","private_message","command","Vue","use","VueRouter","routes","path","Scoreboard","LiveScoreboard","TeamScoreboard","AdminLogin","AdminScoreboard","meta","auth","TaskAdmin","TeamAdmin","AdminTeamTaskLog","router","base","process","beforeEach","to","from","next","ok","$http","config","productionTip","axios","defaults","withCredentials","render","h","App","$mount"],"mappings":"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","file":"js/app.ee6220d5.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=style&index=0&id=4069afa5&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=style&index=0&id=2f9d297e&lang=scss&scoped=true&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('router-view')}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=5cbaa4c4&\"\nvar script = {}\nimport style0 from \"./App.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"app\"}},[_c('header',[_c('topbar',{attrs:{\"round\":_vm.round,\"roundProgress\":_vm.roundProgress,\"timer\":_vm.timer}})],1),_c('container',[_c('statuses'),_c('scoreboard',{attrs:{\"updateRound\":_vm.updateRound,\"updateRoundStart\":_vm.updateRoundStart,\"timer\":_vm.timer}})],1),_vm._m(0)],1)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('footer',{staticClass:\"footer\"},[_vm._v(\" Powered by \"),_c('span',{staticClass:\"team\"},[_vm._v(\"C4T BuT S4D\")]),_vm._v(\" CTF team \")])}]\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"container\"},[_vm._t(\"default\")],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { render, staticRenderFns } from \"./Index.vue?vue&type=template&id=2788e5c9&scoped=true&\"\nvar script = {}\nimport style0 from \"./Index.vue?vue&type=style&index=0&id=2788e5c9&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2788e5c9\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"topbar\"},[_c('router-link',{staticClass:\"tp\",attrs:{\"to\":\"/live/\"},on:{\"click\":_vm.go}},[_vm._v(\"Live\")]),_c('div',{staticClass:\"progress-bar\",style:({ width: _vm.roundProgressInteger })}),_c('div',{staticClass:\"tp\"},[_vm._v(\"Round: \"+_vm._s(_vm.round))])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Index.vue?vue&type=template&id=6d6964e1&scoped=true&\"\nimport script from \"./Index.vue?vue&type=script&lang=js&\"\nexport * from \"./Index.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Index.vue?vue&type=style&index=0&id=6d6964e1&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6d6964e1\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.error !== null)?_c('div',[_vm._v(_vm._s(_vm.error))]):(_vm.teams !== null)?_c('div',{staticClass:\"table\"},[_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"number\"},[_vm._v(\"#\")]),_c('div',{staticClass:\"team\"},[_vm._v(\"team\")]),_c('div',{staticClass:\"score\"},[_vm._v(\"score\")]),_c('div',{staticClass:\"service-name\"},_vm._l((_vm.tasks),function(ref){\nvar name = ref.name;\nreturn _c('div',{key:name,staticClass:\"service-cell\"},[_vm._v(\" \"+_vm._s(name)+\" \")])}),0)]),_c('transition-group',{attrs:{\"name\":\"teams-list\"}},_vm._l((_vm.teams),function(ref,index){\nvar name = ref.name;\nvar score = ref.score;\nvar tasks = ref.tasks;\nvar ip = ref.ip;\nvar id = ref.id;\nvar highlighted = ref.highlighted;\nreturn _c('div',{key:name,staticClass:\"row\",class:[(\"top-\" + (index + 1)), highlighted ? 'highlighted' : '']},[_c('div',{staticClass:\"team-group\",class:highlighted ? '' : 'pd-3'},[_c('div',{staticClass:\"number\",class:[\n (\"top-\" + (index + 1)),\n index > 2 ? 'default-team' : '' ]},[_vm._v(\" \"+_vm._s(index + 1)+\" \")]),_c('div',{staticClass:\"team team-row\",class:[\n (\"top-\" + (index + 1)),\n index > 2 ? 'default-team' : '' ],on:{\"click\":function($event){return _vm.openTeam(id)}}},[_c('div',{staticClass:\"team-name\"},[_vm._v(_vm._s(name))]),_c('div',{staticClass:\"ip\"},[_vm._v(_vm._s(ip))])]),_c('div',{staticClass:\"score\",class:[\n (\"top-\" + (index + 1)),\n index > 2 ? 'default-team' : '' ]},[_vm._v(\" \"+_vm._s(score.toFixed(2))+\" \")])]),_c('div',{staticClass:\"service\"},_vm._l((tasks),function(ref){\n var id = ref.id;\n var sla = ref.sla;\n var score = ref.score;\n var stolen = ref.stolen;\n var lost = ref.lost;\n var message = ref.message;\n var status = ref.status;\nreturn _c('div',{key:id,staticClass:\"service-cell\",class:(\"status-\" + status),style:({\n 'font-size': ((1 - tasks.length / 20) + \"em\"),\n })},[_c('button',{staticClass:\"info\"},[_c('i',{staticClass:\"fas fa-info-circle\"}),_c('span',{staticClass:\"tooltip\"},[_vm._v(_vm._s(message === '' ? 'OK' : message))])]),_c('div',{staticClass:\"sla\"},[_c('strong',[_vm._v(\"SLA\")]),_vm._v(\" : \"+_vm._s(sla.toFixed(2))+\"% \")]),_c('div',{staticClass:\"fp\"},[_c('strong',[_vm._v(\"FP\")]),_vm._v(\" : \"+_vm._s(score.toFixed(2))+\" \")]),_c('div',{staticClass:\"flags\"},[_c('i',{staticClass:\"fas fa-flag\"}),_vm._v(\" +\"+_vm._s(stolen)+\"/-\"+_vm._s(lost)+\" \")])])}),0)])}),0)],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","let url = '';\n\nif (process.env.NODE_ENV === 'development') {\n url = 'http://127.0.0.1:8080';\n} else {\n url = window.location.origin;\n}\n\nconst serverUrl = url;\n\nconst statuses = [101, 102, 103, 104, 110];\n\nconst statusesNames = {\n 101: 'UP',\n 102: 'CORRUPT',\n 103: 'MUMBLE',\n 104: 'DOWN',\n 110: 'CHECK FAILED',\n '-1': 'OFFLINE',\n};\n\nexport { serverUrl, statusesNames, statuses };\n","class Task {\n constructor({ name, id }) {\n this.name = name;\n this.id = id;\n }\n\n static comp(A, B) {\n return A.id - B.id;\n }\n}\n\nexport default Task;\n","class TeamTask {\n constructor({\n id,\n task_id: taskId,\n team_id: teamId,\n status,\n stolen,\n lost,\n score,\n checks,\n checks_passed: checksPassed,\n message,\n }) {\n this.id = id;\n this.taskId = taskId;\n this.teamId = teamId;\n this.status = status;\n this.stolen = stolen;\n this.lost = lost;\n this.sla = (100.0 * checksPassed) / Math.max(checks, 1);\n this.score = score;\n this.message = message;\n }\n\n static comp(A, B) {\n return A.taskId - B.taskId;\n }\n}\n\nexport default TeamTask;\n","import TeamTask from '@/models/teamTask';\n\nclass Team {\n constructor({ name, ip, id, teamTasks, tasks, highlighted }) {\n this.name = name;\n this.ip = ip;\n this.id = id;\n this.highlighted = highlighted;\n this.taskModels = tasks;\n this.update(teamTasks);\n }\n\n update(teamTasks) {\n this.tasks = teamTasks\n .filter(({ team_id: teamId }) => teamId === this.id)\n .map(teamTask => new TeamTask(teamTask));\n this.score = this.tasks.reduce(\n (acc, { score, sla }) => acc + score * (sla / 100.0),\n 0\n );\n let taskIds = this.tasks.map(x => x.taskId);\n for (let task of this.taskModels) {\n if (!taskIds.includes(task.id)) {\n this.tasks.push(\n new TeamTask({\n id: 0,\n task_id: task.id,\n team_id: this.id,\n status: 0,\n stolen: 0,\n lost: 0,\n score: 0,\n checks: 0,\n checks_passed: 0,\n })\n );\n }\n }\n this.tasks.sort(TeamTask.comp);\n }\n\n static comp(A, B) {\n return B.score - A.score;\n }\n}\n\nexport default Team;\n","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Index.vue?vue&type=template&id=232ca285&scoped=true&\"\nimport script from \"./Index.vue?vue&type=script&lang=js&\"\nexport * from \"./Index.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Index.vue?vue&type=style&index=0&id=232ca285&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"232ca285\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"statuses\"},_vm._l((_vm.statuses),function(status){return _c('div',{key:status,staticClass:\"status-cell\",class:(\"status-\" + status)},[_vm._v(\" \"+_vm._s(_vm.statusesNames[status])+\" \")])}),0)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Index.vue?vue&type=template&id=4069afa5&scoped=true&\"\nimport script from \"./Index.vue?vue&type=script&lang=js&\"\nexport * from \"./Index.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Index.vue?vue&type=style&index=0&id=4069afa5&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4069afa5\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Scoreboard.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Scoreboard.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Scoreboard.vue?vue&type=template&id=4d8480e4&scoped=true&\"\nimport script from \"./Scoreboard.vue?vue&type=script&lang=js&\"\nexport * from \"./Scoreboard.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Scoreboard.vue?vue&type=style&index=0&id=4d8480e4&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4d8480e4\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"screen\"},[_c('iframe',{staticClass:\"pony\",attrs:{\"src\":\"https://panzi.github.io/Browser-Ponies/ponies-iframe.html#fadeDuration=500&volume=1&fps=25&speed=3&audioEnabled=false&dontSpeak=true&showFps=false&showLoadProgress=false&speakProbability=0.1&spawn.masked%20matterhorn=1&spawn.nightmare%20moon=1&spawn.princess%20cadance=1&spawn.princess%20cadance%20(teenager)=1&spawn.princess%20celestia=1&spawn.princess%20celestia%20(alternate%20filly)=1&spawn.princess%20celestia%20(filly)=1&spawn.princess%20luna=1&spawn.princess%20luna%20(filly)=1&spawn.princess%20luna%20(season%201)=1&spawn.princess%20twilight%20sparkle=1&spawn.queen%20chrysalis=1&spawn.roseluck=1&spawn.sapphire%20shores=1&spawn.screw%20loose=1&spawn.screwball=1&spawn.seabreeze=1&spawn.sheriff%20silverstar=1&spawn.shoeshine=1&spawn.shopkeeper=1&spawn.silver%20spoon=1&spawn.sindy=1&spawn.sir%20colton%20vines=1&spawn.slendermane=1&spawn.soigne%20folio=1&spawn.stella=1&spawn.sue%20pie=1&spawn.suri%20polomare=1&spawn.twist=1&spawn.walter=1&spawnRandom=1&paddock=false&grass=false\",\"width\":\"640\",\"height\":\"480\",\"frameborder\":\"0\",\"scrolling\":\"no\",\"marginheight\":\"0\",\"marginwidth\":\"0\",\"title\":\"pony\"}}),_c('live-scoreboard')],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.error !== null)?_c('div',{staticClass:\"flag\"},[_vm._v(_vm._s(_vm.error))]):_c('div',{staticClass:\"flag\"},_vm._l((_vm.events),function(ref,index){\nvar attacker = ref.attacker;\nvar victim = ref.victim;\nvar task = ref.task;\nvar delta = ref.delta;\nreturn _c('div',{key:index},[_c('span',{staticClass:\"mark\"},[_vm._v(_vm._s(attacker))]),_vm._v(\" stole a flag from \"),_c('span',{staticClass:\"mark\"},[_vm._v(_vm._s(victim))]),_vm._v(\"'s service \"),_c('span',{staticClass:\"mark\"},[_vm._v(_vm._s(task))]),_vm._v(\" and got \"),_c('span',{staticClass:\"mark\"},[_vm._v(_vm._s(delta))]),_vm._v(\" points \")])}),0)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Index.vue?vue&type=template&id=0618c0a0&scoped=true&\"\nimport script from \"./Index.vue?vue&type=script&lang=js&\"\nexport * from \"./Index.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Index.vue?vue&type=style&index=0&id=0618c0a0&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0618c0a0\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LiveScoreboard.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LiveScoreboard.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LiveScoreboard.vue?vue&type=template&id=11926072&scoped=true&\"\nimport script from \"./LiveScoreboard.vue?vue&type=script&lang=js&\"\nexport * from \"./LiveScoreboard.vue?vue&type=script&lang=js&\"\nimport style0 from \"./LiveScoreboard.vue?vue&type=style&index=0&id=11926072&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"11926072\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"app\"}},[_c('header',[_c('topbar',{attrs:{\"round\":_vm.round}})],1),_c('container',[_c('statuses'),_c('team-scoreboard',{attrs:{\"updateRound\":_vm.updateRound}})],1),_vm._m(0)],1)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('footer',{staticClass:\"footer\"},[_vm._v(\" Powered by \"),_c('span',{staticClass:\"team\"},[_vm._v(\"C4T BuT S4D\")]),_vm._v(\" CTF team \")])}]\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.error !== null)?_c('div',[_vm._v(\" \"+_vm._s(_vm.error)+\" \")]):(_vm.team !== null)?_c('div',{staticClass:\"table\"},[_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"team\"},[_vm._v(\"team\")]),_c('div',{staticClass:\"score\"},[_vm._v(\"score\")]),_c('div',{staticClass:\"service-name\"},_vm._l((_vm.tasks),function(ref){\nvar name = ref.name;\nreturn _c('div',{key:name,staticClass:\"service-cell\"},[_vm._v(\" \"+_vm._s(name)+\" \")])}),0)]),_c('div',_vm._l((_vm.states),function(state,index){return _c('div',{key:index,staticClass:\"row\"},[_c('div',{staticClass:\"team\"},[_c('div',{staticClass:\"team-name\"},[_vm._v(_vm._s(_vm.team.name))]),_c('div',{staticClass:\"ip\"},[_vm._v(_vm._s(_vm.team.ip))])]),_c('div',{staticClass:\"score\"},[_vm._v(\" \"+_vm._s(state.score.toFixed(2))+\" \")]),_c('div',{staticClass:\"service\"},_vm._l((state.tasks),function(ref){\n var id = ref.id;\n var checks = ref.checks;\n var checksPassed = ref.checks_passed;\n var score = ref.score;\n var stolen = ref.stolen;\n var lost = ref.lost;\n var message = ref.message;\n var status = ref.status;\nreturn _c('div',{key:id,staticClass:\"service-cell\",class:(\"status-\" + status),style:({\n 'font-size': ((1 - _vm.tasks.length / 20) + \"em\"),\n })},[_c('button',{staticClass:\"info\"},[_c('i',{staticClass:\"fas fa-info-circle\"}),_c('span',{staticClass:\"tooltip\"},[_vm._v(\" \"+_vm._s(message === '' ? 'OK' : message)+\" \")])]),_c('div',{staticClass:\"sla\"},[_c('strong',[_vm._v(\"SLA\")]),_vm._v(\": \"+_vm._s(( (100.0 * checksPassed) / Math.max(checks, 1) ).toFixed(2))+\"% \")]),_c('div',{staticClass:\"fp\"},[_c('strong',[_vm._v(\"FP\")]),_vm._v(\": \"+_vm._s(score.toFixed(2))+\" \")]),_c('div',{staticClass:\"flags\"},[_c('i',{staticClass:\"fas fa-flag\"}),_vm._v(\" +\"+_vm._s(stolen)+\"/-\"+_vm._s(lost)+\" \")])])}),0)])}),0)]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Index.vue?vue&type=template&id=321a8719&scoped=true&\"\nimport script from \"./Index.vue?vue&type=script&lang=js&\"\nexport * from \"./Index.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Index.vue?vue&type=style&index=0&id=321a8719&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"321a8719\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TeamScoreboard.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TeamScoreboard.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TeamScoreboard.vue?vue&type=template&id=bd6848d8&scoped=true&\"\nimport script from \"./TeamScoreboard.vue?vue&type=script&lang=js&\"\nexport * from \"./TeamScoreboard.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TeamScoreboard.vue?vue&type=style&index=0&id=bd6848d8&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"bd6848d8\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"app\"}},[_c('header',[_c('topbar',{attrs:{\"round\":_vm.round,\"roundProgress\":_vm.roundProgress,\"timer\":_vm.timer}})],1),_c('container',[_c('div',{staticClass:\"create-group\"},[_c('button',{staticClass:\"create-btn\",on:{\"click\":_vm.createTask}},[_vm._v(\" Create task \")]),_c('button',{staticClass:\"create-btn\",on:{\"click\":_vm.createTeam}},[_vm._v(\" Create team \")])]),_c('admin-scoreboard',{attrs:{\"updateRound\":_vm.updateRound,\"updateRoundStart\":_vm.updateRoundStart,\"timer\":_vm.timer}})],1),_vm._m(0)],1)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('footer',{staticClass:\"footer\"},[_vm._v(\" Powered by \"),_c('span',{staticClass:\"team\"},[_vm._v(\"C4T BuT S4D\")]),_vm._v(\" CTF team \")])}]\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.error !== null)?_c('div',[_vm._v(_vm._s(_vm.error))]):(_vm.teams !== null)?_c('div',{staticClass:\"table\"},[_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"number\"},[_vm._v(\"#\")]),_c('div',{staticClass:\"team\"},[_vm._v(\"team\")]),_c('div',{staticClass:\"score\"},[_vm._v(\"score\")]),_c('div',{staticClass:\"service-name\"},_vm._l((_vm.tasks),function(ref){\nvar id = ref.id;\nvar name = ref.name;\nreturn _c('div',{key:name,staticClass:\"service-cell\"},[_vm._v(\" \"+_vm._s(name)+\" \"),_c('button',{staticClass:\"edit\",on:{\"click\":function($event){return _vm.openTaskAdmin(id)}}},[_c('i',{staticClass:\"fas fa-edit\"})])])}),0)]),_c('transition-group',{attrs:{\"name\":\"teams-list\"}},_vm._l((_vm.teams),function(ref,index){\nvar name = ref.name;\nvar score = ref.score;\nvar tasks = ref.tasks;\nvar ip = ref.ip;\nvar id = ref.id;\nvar highlighted = ref.highlighted;\nreturn _c('div',{key:name,staticClass:\"row\",class:[(\"top-\" + (index + 1)), highlighted ? 'highlighted' : '']},[_c('div',{staticClass:\"team-group\",class:highlighted ? '' : 'pd-3'},[_c('div',{staticClass:\"number\",class:[\n (\"top-\" + (index + 1)),\n index > 2 ? 'default-team' : '' ]},[_vm._v(\" \"+_vm._s(index + 1)+\" \")]),_c('div',{staticClass:\"team team-row\",class:[\n (\"top-\" + (index + 1)),\n index > 2 ? 'default-team' : '' ],on:{\"click\":function($event){return _vm.openTeam(id)}}},[_c('div',{staticClass:\"team-name\"},[_vm._v(_vm._s(name))]),_c('div',{staticClass:\"ip\"},[_vm._v(_vm._s(ip))]),_c('button',{staticClass:\"edit\",on:{\"click\":[function($event){return _vm.openTeamAdmin(id)},function($event){$event.stopPropagation();}]}},[_c('i',{staticClass:\"fas fa-edit\"})])]),_c('div',{staticClass:\"score\",class:[\n (\"top-\" + (index + 1)),\n index > 2 ? 'default-team' : '' ]},[_vm._v(\" \"+_vm._s(score.toFixed(2))+\" \")])]),_c('div',{staticClass:\"service\"},_vm._l((tasks),function(ref){\n var id = ref.id;\n var teamId = ref.teamId;\n var taskId = ref.taskId;\n var sla = ref.sla;\n var score = ref.score;\n var stolen = ref.stolen;\n var lost = ref.lost;\n var message = ref.message;\n var status = ref.status;\nreturn _c('div',{key:id,staticClass:\"service-cell\",class:(\"status-\" + status),style:({\n 'font-size': ((1 - tasks.length / 20) + \"em\"),\n })},[_c('button',{staticClass:\"tt-edit\",on:{\"click\":function($event){return _vm.openTeamTaskHistory(teamId, taskId)}}},[_c('i',{staticClass:\"fas fa-edit\"})]),_c('button',{staticClass:\"info\"},[_c('i',{staticClass:\"fas fa-info-circle\"}),_c('span',{staticClass:\"tooltip\"},[_vm._v(_vm._s(message === '' ? 'OK' : message))])]),_c('div',{staticClass:\"sla\"},[_c('strong',[_vm._v(\"SLA\")]),_vm._v(\" : \"+_vm._s(sla.toFixed(2))+\"% \")]),_c('div',{staticClass:\"fp\"},[_c('strong',[_vm._v(\"FP\")]),_vm._v(\" : \"+_vm._s(score.toFixed(2))+\" \")]),_c('div',{staticClass:\"flags\"},[_c('i',{staticClass:\"fas fa-flag\"}),_vm._v(\" +\"+_vm._s(stolen)+\"/-\"+_vm._s(lost)+\" \")])])}),0)])}),0)],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Index.vue?vue&type=template&id=95736662&scoped=true&\"\nimport script from \"./Index.vue?vue&type=script&lang=js&\"\nexport * from \"./Index.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Index.vue?vue&type=style&index=0&id=95736662&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"95736662\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AdminScoreboard.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AdminScoreboard.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AdminScoreboard.vue?vue&type=template&id=30996ed0&scoped=true&\"\nimport script from \"./AdminScoreboard.vue?vue&type=script&lang=js&\"\nexport * from \"./AdminScoreboard.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AdminScoreboard.vue?vue&type=style&index=0&id=30996ed0&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"30996ed0\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"app\"}},[_c('header',[_c('topbar',{attrs:{\"round\":_vm.round}})],1),_c('container',[_c('task-admin')],1),_vm._m(0)],1)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('footer',{staticClass:\"footer\"},[_vm._v(\" Powered by \"),_c('span',{staticClass:\"team\"},[_vm._v(\"C4T BuT S4D\")]),_vm._v(\" CTF team \")])}]\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.error !== null)?_c('div',[_vm._v(\" \"+_vm._s(_vm.error)+\" \")]):(_vm.task !== null)?_c('form',{on:{\"submit\":function($event){$event.preventDefault();return _vm.submitForm($event)}}},[_c('p',[_vm._v(_vm._s(_vm.message))]),_c('p',[_vm._v(\" Name: \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.task.name),expression:\"task.name\"}],attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.task.name)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.task, \"name\", $event.target.value)}}})]),_c('p',[_vm._v(\" Checker: \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.task.checker),expression:\"task.checker\"}],attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.task.checker)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.task, \"checker\", $event.target.value)}}})]),_c('p',[_vm._v(\" Gets: \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.task.gets),expression:\"task.gets\"}],attrs:{\"type\":\"number\"},domProps:{\"value\":(_vm.task.gets)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.task, \"gets\", $event.target.value)}}})]),_c('p',[_vm._v(\" Puts: \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.task.puts),expression:\"task.puts\"}],attrs:{\"type\":\"number\"},domProps:{\"value\":(_vm.task.puts)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.task, \"puts\", $event.target.value)}}})]),_c('p',[_vm._v(\" Places: \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.task.places),expression:\"task.places\"}],attrs:{\"type\":\"number\"},domProps:{\"value\":(_vm.task.places)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.task, \"places\", $event.target.value)}}})]),_c('p',[_vm._v(\" Checker timeout: \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.task.checker_timeout),expression:\"task.checker_timeout\"}],attrs:{\"type\":\"number\"},domProps:{\"value\":(_vm.task.checker_timeout)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.task, \"checker_timeout\", $event.target.value)}}})]),_c('p',[_vm._v(\" Checker type: \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.task.checker_type),expression:\"task.checker_type\"}],attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.task.checker_type)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.task, \"checker_type\", $event.target.value)}}})]),_c('p',[_vm._v(\" Env path: \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.task.env_path),expression:\"task.env_path\"}],attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.task.env_path)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.task, \"env_path\", $event.target.value)}}})]),_c('p',[_vm._v(\" Get period: \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.task.get_period),expression:\"task.get_period\"}],attrs:{\"type\":\"number\"},domProps:{\"value\":(_vm.task.get_period)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.task, \"get_period\", $event.target.value)}}})]),_c('p',[_vm._v(\" Default score: \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.task.default_score),expression:\"task.default_score\"}],attrs:{\"type\":\"number\"},domProps:{\"value\":(_vm.task.default_score)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.task, \"default_score\", $event.target.value)}}})]),_c('p',[_vm._v(\" Active: \"),_c('input',{attrs:{\"type\":\"checkbox\"},domProps:{\"checked\":_vm.task.active},on:{\"input\":function($event){_vm.task.active = $event.target.checked}}})]),_c('input',{attrs:{\"type\":\"submit\",\"value\":\"Submit\"}})]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Index.vue?vue&type=template&id=3c2a7f28&scoped=true&\"\nimport script from \"./Index.vue?vue&type=script&lang=js&\"\nexport * from \"./Index.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3c2a7f28\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TaskAdmin.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TaskAdmin.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TaskAdmin.vue?vue&type=template&id=64e78166&scoped=true&\"\nimport script from \"./TaskAdmin.vue?vue&type=script&lang=js&\"\nexport * from \"./TaskAdmin.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TaskAdmin.vue?vue&type=style&index=0&id=64e78166&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"64e78166\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"app\"}},[_c('header',[_c('topbar',{attrs:{\"round\":_vm.round}})],1),_c('container',[_c('team-admin')],1),_vm._m(0)],1)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('footer',{staticClass:\"footer\"},[_vm._v(\" Powered by \"),_c('span',{staticClass:\"team\"},[_vm._v(\"C4T BuT S4D\")]),_vm._v(\" CTF team \")])}]\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.error !== null)?_c('div',[_vm._v(\" \"+_vm._s(_vm.error)+\" \")]):(_vm.team !== null)?_c('form',{on:{\"submit\":function($event){$event.preventDefault();return _vm.submitForm($event)}}},[_c('p',[_vm._v(_vm._s(_vm.message))]),_c('p',[_vm._v(\" Name: \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.team.name),expression:\"team.name\"}],attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.team.name)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.team, \"name\", $event.target.value)}}})]),_c('p',[_vm._v(\" IP: \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.team.ip),expression:\"team.ip\"}],attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.team.ip)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.team, \"ip\", $event.target.value)}}})]),_c('p',[_vm._v(\" Token: \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.team.token),expression:\"team.token\"}],attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.team.token)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.team, \"token\", $event.target.value)}}})]),_c('p',[_vm._v(\" Highlighted: \"),_c('input',{attrs:{\"type\":\"checkbox\"},domProps:{\"checked\":_vm.team.highlighted},on:{\"input\":function($event){_vm.team.highlighted = $event.target.checked}}})]),_c('p',[_vm._v(\" Active: \"),_c('input',{attrs:{\"type\":\"checkbox\"},domProps:{\"checked\":_vm.team.active},on:{\"input\":function($event){_vm.team.active = $event.target.checked}}})]),_c('input',{attrs:{\"type\":\"submit\",\"value\":\"Submit\"}})]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Index.vue?vue&type=template&id=368fb983&scoped=true&\"\nimport script from \"./Index.vue?vue&type=script&lang=js&\"\nexport * from \"./Index.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"368fb983\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TeamAdmin.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TeamAdmin.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TeamAdmin.vue?vue&type=template&id=c695c784&scoped=true&\"\nimport script from \"./TeamAdmin.vue?vue&type=script&lang=js&\"\nexport * from \"./TeamAdmin.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TeamAdmin.vue?vue&type=style&index=0&id=c695c784&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"c695c784\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"app\"}},[_c('header',[_c('topbar',{attrs:{\"round\":_vm.round}})],1),_c('container',[_c('form',{on:{\"submit\":function($event){$event.preventDefault();return _vm.submitForm($event)}}},[_c('p',[_vm._v(\" Username: \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.username),expression:\"username\"}],attrs:{\"type\":\"text\",\"placeholder\":\"Username\"},domProps:{\"value\":(_vm.username)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.username=$event.target.value}}})]),_c('p',[_vm._v(\" Password: \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.password),expression:\"password\"}],attrs:{\"type\":\"password\",\"placeholder\":\"Password\"},domProps:{\"value\":(_vm.password)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.password=$event.target.value}}})]),(_vm.error !== null)?_c('p',{staticClass:\"error-message\"},[_vm._v(_vm._s(_vm.error))]):_vm._e(),_c('input',{attrs:{\"type\":\"submit\",\"value\":\"Submit\"}})])]),_vm._m(0)],1)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('footer',{staticClass:\"footer\"},[_vm._v(\" Powered by \"),_c('span',{staticClass:\"team\"},[_vm._v(\"C4T BuT S4D\")]),_vm._v(\" CTF team \")])}]\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AdminLogin.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AdminLogin.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AdminLogin.vue?vue&type=template&id=67f4a374&scoped=true&\"\nimport script from \"./AdminLogin.vue?vue&type=script&lang=js&\"\nexport * from \"./AdminLogin.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AdminLogin.vue?vue&type=style&index=0&id=67f4a374&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"67f4a374\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"app\"}},[_c('header',[_c('topbar',{attrs:{\"round\":_vm.round}})],1),_c('container',[_c('admin-team-task-log')],1),_vm._m(0)],1)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('footer',{staticClass:\"footer\"},[_vm._v(\" Powered by \"),_c('span',{staticClass:\"team\"},[_vm._v(\"C4T BuT S4D\")]),_vm._v(\" CTF team \")])}]\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.error !== null)?_c('div',[_vm._v(_vm._s(_vm.error))]):(_vm.teams !== null)?_c('div',[_c('p',[_vm._v(\" Team \"),_c('b',[_vm._v(_vm._s(_vm.teamName))]),_vm._v(\" (\"+_vm._s(_vm.teamId)+\") task \"),_c('b',[_vm._v(_vm._s(_vm.taskName))]),_vm._v(\" (\"+_vm._s(_vm.taskId)+\") history \")]),_c('div',{staticClass:\"table\"},[_vm._m(0),_vm._l((_vm.teamtasks),function(ref){\n var id = ref.id;\n var round = ref.round;\n var status = ref.status;\n var score = ref.score;\n var stolen = ref.stolen;\n var lost = ref.lost;\n var checks = ref.checks;\n var checks_passed = ref.checks_passed;\n var public_message = ref.public_message;\n var private_message = ref.private_message;\n var command = ref.command;\nreturn _c('div',{key:id,staticClass:\"row\",class:(\"status-\" + status)},[_c('div',{staticClass:\"round\"},[_vm._v(_vm._s(round))]),_c('div',{staticClass:\"status\"},[_vm._v(_vm._s(status))]),_c('div',{staticClass:\"score\"},[_vm._v(_vm._s(score))]),_c('div',{staticClass:\"flags\"},[_vm._v(\"+\"+_vm._s(stolen)+\"/-\"+_vm._s(lost))]),_c('div',{staticClass:\"checks\"},[_vm._v(_vm._s(checks_passed)+\"/\"+_vm._s(checks))]),_c('div',{staticClass:\"public\"},[_vm._v(_vm._s(public_message))]),_c('div',{staticClass:\"private\"},[_vm._v(_vm._s(private_message))]),_c('div',{staticClass:\"command\"},[_vm._v(_vm._s(command))])])})],2)]):_vm._e()}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"round\"},[_vm._v(\"round\")]),_c('div',{staticClass:\"status\"},[_vm._v(\"status\")]),_c('div',{staticClass:\"score\"},[_vm._v(\"score\")]),_c('div',{staticClass:\"flags\"},[_vm._v(\"flags\")]),_c('div',{staticClass:\"checks\"},[_vm._v(\"checks\")]),_c('div',{staticClass:\"public\"},[_vm._v(\"public\")]),_c('div',{staticClass:\"private\"},[_vm._v(\"private\")]),_c('div',{staticClass:\"command\"},[_vm._v(\"command\")])])}]\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Index.vue?vue&type=template&id=2f9d297e&scoped=true&\"\nimport script from \"./Index.vue?vue&type=script&lang=js&\"\nexport * from \"./Index.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Index.vue?vue&type=style&index=0&id=2f9d297e&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2f9d297e\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AdminTeamTaskLog.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AdminTeamTaskLog.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AdminTeamTaskLog.vue?vue&type=template&id=57fb3f15&scoped=true&\"\nimport script from \"./AdminTeamTaskLog.vue?vue&type=script&lang=js&\"\nexport * from \"./AdminTeamTaskLog.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AdminTeamTaskLog.vue?vue&type=style&index=0&id=57fb3f15&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"57fb3f15\",\n null\n \n)\n\nexport default component.exports","import Vue from 'vue';\nimport VueRouter from 'vue-router';\n\nimport Scoreboard from '@/views/Scoreboard';\nimport LiveScoreboard from '@/views/LiveScoreboard';\nimport TeamScoreboard from '@/views/TeamScoreboard';\nimport AdminScoreboard from '@/views/AdminScoreboard';\nimport TaskAdmin from '@/views/TaskAdmin';\nimport TeamAdmin from '@/views/TeamAdmin';\nimport AdminLogin from '@/views/AdminLogin';\nimport AdminTeamTaskLog from '@/views/AdminTeamTaskLog';\n\nimport { serverUrl } from '@/config';\n\nVue.use(VueRouter);\n\nconst routes = [\n {\n path: '/',\n name: 'index',\n component: Scoreboard,\n },\n {\n path: '/live/',\n name: 'live',\n component: LiveScoreboard,\n },\n {\n path: '/team/:id/',\n name: 'team',\n component: TeamScoreboard,\n },\n {\n path: '/admin/login/',\n name: 'adminLogin',\n component: AdminLogin,\n },\n {\n path: '/admin/',\n name: 'admin',\n component: AdminScoreboard,\n meta: {\n auth: true,\n },\n },\n {\n path: '/admin/task/:id/',\n name: 'taskAdmin',\n component: TaskAdmin,\n meta: {\n auth: true,\n },\n },\n {\n path: '/admin/team/:id/',\n name: 'teamAdmin',\n component: TeamAdmin,\n meta: {\n auth: true,\n },\n },\n {\n path: '/admin/create_task/',\n name: 'createTask',\n component: TaskAdmin,\n meta: {\n auth: true,\n },\n },\n {\n path: '/admin/create_team/',\n name: 'createTeam',\n component: TeamAdmin,\n meta: {\n auth: true,\n },\n },\n {\n path: '/admin/teamtask_log/team/:teamId/task/:taskId/',\n name: 'adminTeamTaskLog',\n component: AdminTeamTaskLog,\n meta: {\n auth: true,\n },\n },\n];\n\nconst router = new VueRouter({\n mode: 'history',\n base: process.env.BASE_URL,\n routes,\n});\n\nrouter.beforeEach(async function(to, from, next) {\n if (to.meta.auth) {\n let ok = false;\n try {\n await router.$http.get(`${serverUrl}/api/admin/status/`);\n ok = true;\n } catch (e) {\n next({\n name: 'adminLogin',\n });\n }\n if (ok) {\n next();\n }\n } else {\n next();\n }\n});\n\nexport default router;\n","import Vue from 'vue';\nimport App from './App.vue';\nimport router from './router';\nimport axios from 'axios';\n\nVue.config.productionTip = false;\n\naxios.defaults.withCredentials = true;\n\nVue.prototype.$http = axios;\nrouter.$http = axios;\n\nnew Vue({\n router,\n render: h => h(App),\n}).$mount('#app');\n","export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=scss&\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TaskAdmin.vue?vue&type=style&index=0&id=64e78166&lang=scss&scoped=true&\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TeamAdmin.vue?vue&type=style&index=0&id=c695c784&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=style&index=0&id=95736662&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=style&index=0&id=2788e5c9&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=style&index=0&id=232ca285&lang=scss&scoped=true&\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Scoreboard.vue?vue&type=style&index=0&id=4d8480e4&lang=scss&scoped=true&\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LiveScoreboard.vue?vue&type=style&index=0&id=11926072&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=style&index=0&id=0618c0a0&lang=scss&scoped=true&\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AdminTeamTaskLog.vue?vue&type=style&index=0&id=57fb3f15&lang=scss&scoped=true&\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TeamScoreboard.vue?vue&type=style&index=0&id=bd6848d8&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=style&index=0&id=321a8719&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=style&index=0&id=6d6964e1&lang=scss&scoped=true&\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AdminLogin.vue?vue&type=style&index=0&id=67f4a374&lang=scss&scoped=true&\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AdminScoreboard.vue?vue&type=style&index=0&id=30996ed0&lang=scss&scoped=true&\""],"sourceRoot":""} \ No newline at end of file diff --git a/front/dist/js/chunk-vendors.08deae4f.js b/front/dist/js/chunk-vendors.08deae4f.js deleted file mode 100644 index abfb95f1..00000000 --- a/front/dist/js/chunk-vendors.08deae4f.js +++ /dev/null @@ -1,20 +0,0 @@ -(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-vendors"],{"00ee":function(t,e,n){var r=n("b622"),o=r("toStringTag"),i={};i[o]="z",t.exports="[object z]"===String(i)},"01d3":function(t,e,n){const r=n("c9eb"),o=n("d941");t.exports=function(t){const e=t.xdomain,n=t.xscheme,i=t.enablesXDR;try{if("undefined"!==typeof XMLHttpRequest&&(!e||r))return new XMLHttpRequest}catch(s){}try{if("undefined"!==typeof XDomainRequest&&!n&&i)return new XDomainRequest}catch(s){}if(!e)try{return new(o[["Active"].concat("Object").join("X")])("Microsoft.XMLHTTP")}catch(s){}}},"0299":function(t,e,n){"use strict";var r,o="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_".split(""),i=64,s={},a=0,c=0;function u(t){var e="";do{e=o[t%i]+e,t=Math.floor(t/i)}while(t>0);return e}function f(t){var e=0;for(c=0;c{this.doWrite(t,()=>{this.writable=!0,this.emit("drain")})})}uri(){let t=this.query||{};const e=this.opts.secure?"https":"http";let n="";!1!==this.opts.timestampRequests&&(t[this.opts.timestampParam]=s()),this.supportsBinary||t.sid||(t.b64=1),t=o.encode(t),this.opts.port&&("https"===e&&443!==Number(this.opts.port)||"http"===e&&80!==Number(this.opts.port))&&(n=":"+this.opts.port),t.length&&(t="?"+t);const r=-1!==this.opts.hostname.indexOf(":");return e+"://"+(r?"["+this.opts.hostname+"]":this.opts.hostname)+n+this.opts.path+t}}t.exports=c},"0a06":function(t,e,n){"use strict";var r=n("c532"),o=n("30b5"),i=n("f6b4"),s=n("5270"),a=n("4a7b");function c(t){this.defaults=t,this.interceptors={request:new i,response:new i}}c.prototype.request=function(t){"string"===typeof t?(t=arguments[1]||{},t.url=arguments[0]):t=t||{},t=a(this.defaults,t),t.method?t.method=t.method.toLowerCase():this.defaults.method?t.method=this.defaults.method.toLowerCase():t.method="get";var e=[s,void 0],n=Promise.resolve(t);this.interceptors.request.forEach((function(t){e.unshift(t.fulfilled,t.rejected)})),this.interceptors.response.forEach((function(t){e.push(t.fulfilled,t.rejected)}));while(e.length)n=n.then(e.shift(),e.shift());return n},c.prototype.getUri=function(t){return t=a(this.defaults,t),o(t.url,t.params,t.paramsSerializer).replace(/^\?/,"")},r.forEach(["delete","get","head","options"],(function(t){c.prototype[t]=function(e,n){return this.request(r.merge(n||{},{method:t,url:e}))}})),r.forEach(["post","put","patch"],(function(t){c.prototype[t]=function(e,n,o){return this.request(r.merge(o||{},{method:t,url:e,data:n}))}})),t.exports=c},"0a5e":function(t,e,n){const r=n("0949"),o=n("d941"),i=/\n/g,s=/\\n/g;let a;function c(){}class u extends r{constructor(t){super(t),this.query=this.query||{},a||(a=o.___eio=o.___eio||[]),this.index=a.length;const e=this;a.push((function(t){e.onData(t)})),this.query.j=this.index,"function"===typeof addEventListener&&addEventListener("beforeunload",(function(){e.script&&(e.script.onerror=c)}),!1)}get supportsBinary(){return!1}doClose(){this.script&&(this.script.parentNode.removeChild(this.script),this.script=null),this.form&&(this.form.parentNode.removeChild(this.form),this.form=null,this.iframe=null),super.doClose()}doPoll(){const t=this,e=document.createElement("script");this.script&&(this.script.parentNode.removeChild(this.script),this.script=null),e.async=!0,e.src=this.uri(),e.onerror=function(e){t.onError("jsonp poll error",e)};const n=document.getElementsByTagName("script")[0];n?n.parentNode.insertBefore(e,n):(document.head||document.body).appendChild(e),this.script=e;const r="undefined"!==typeof navigator&&/gecko/i.test(navigator.userAgent);r&&setTimeout((function(){const t=document.createElement("iframe");document.body.appendChild(t),document.body.removeChild(t)}),100)}doWrite(t,e){const n=this;let r;if(!this.form){const t=document.createElement("form"),e=document.createElement("textarea"),n=this.iframeId="eio_iframe_"+this.index;t.className="socketio",t.style.position="absolute",t.style.top="-1000px",t.style.left="-1000px",t.target=n,t.method="POST",t.setAttribute("accept-charset","utf-8"),e.name="d",t.appendChild(e),document.body.appendChild(t),this.form=t,this.area=e}function o(){a(),e()}function a(){if(n.iframe)try{n.form.removeChild(n.iframe)}catch(t){n.onError("jsonp polling iframe removal error",t)}try{const t='