Ejemplo n.º 1
0
    def clean(self):
        email = self.cleaned_data.get("email")
        password = self.cleaned_data.get("password")

        if email is not None and password:
            email = email.lower().strip()
            try:
                data = {
                    "jsonrpc": "2.0",
                    "method": "authorize",
                    "params": {
                        "email": email,
                        "password": password
                    },
                    "id": make_random_letters_and_digit_string(),
                }

                headers = {"X-Auth-Token": settings.PANTHEON_ADMIN_TOKEN}
                response = requests.post(settings.PANTHEON_AUTH_API_URL,
                                         json=data,
                                         headers=headers)

                if response.json().get("error"):
                    raise self.get_invalid_login_error()

                pantheon_id, auth_token = response.json()["result"]

                data = {
                    "jsonrpc": "2.0",
                    "method": "me",
                    "params": {
                        "id": pantheon_id,
                        "clientSideToken": auth_token
                    },
                    "id": make_random_letters_and_digit_string(),
                }

                headers = {"X-Auth-Token": settings.PANTHEON_ADMIN_TOKEN}
                response = requests.post(settings.PANTHEON_AUTH_API_URL,
                                         json=data,
                                         headers=headers)
                if response.json().get("error"):
                    raise self.get_invalid_login_error()

                assert response.json()["result"]["email"]
                self.user_data = response.json()["result"]
            except Exception as e:
                capture_exception(e)
                raise self.get_invalid_login_error() from None

        return self.cleaned_data
Ejemplo n.º 2
0
def disable_user_in_pantheon(request, record_id):
    record = TournamentPlayers.objects.get(id=record_id)

    headers = {
        'X-Auth-Token': settings.PANTHEON_ADMIN_TOKEN,
    }

    # The first step is update player tenhou nickname
    data = {
        'jsonrpc': '2.0',
        'method': 'updatePlayerSeatingFlagCP',
        'params': {
            'playerId': record.pantheon_id,
            'eventId': settings.PANTHEON_EVENT_ID,
            'ignoreSeating': 1,
        },
        'id': make_random_letters_and_digit_string()
    }

    response = requests.post(settings.PANTHEON_URL, json=data, headers=headers)
    if response.status_code == 500:
        return HttpResponse('Disable player. 500 response')

    content = response.json()
    if content.get('error'):
        return HttpResponse('Disable player. Pantheon error: {}'.format(
            content.get('error')))

    record.enabled_in_pantheon = False
    record.save()

    return redirect(request.META.get('HTTP_REFERER'))
Ejemplo n.º 3
0
    def send_team_names_to_pantheon(self):
        registrations = TournamentPlayers.objects.filter(
            tournament=self.tournament)

        team_names = {}
        for registration in registrations:
            team_names[registration.pantheon_id] = registration.team_name

        data = {
            "jsonrpc": "2.0",
            "method": "updatePlayersTeams",
            "params": {
                "eventId": settings.PANTHEON_TOURNAMENT_EVENT_ID,
                "teamNameMap": team_names
            },
            "id": make_random_letters_and_digit_string(),
        }

        headers = {"X-Auth-Token": settings.PANTHEON_ADMIN_TOKEN}

        response = requests.post(settings.PANTHEON_OLD_API_URL,
                                 json=data,
                                 headers=headers)
        if response.status_code == 500:
            logger.error("Log add. Pantheon 500.")
            return "Pantheon 500 error"

        content = response.json()
        if content.get("error"):
            logger.error("Log add. Pantheon error. {}".format(
                content.get("error")))
            return "Pantheon {} error".format(content.get("error"))

        return "Готово"
Ejemplo n.º 4
0
def get_pantheon_swiss_sortition():
    data = {
        "jsonrpc": "2.0",
        "method": "generateSwissSeating",
        "params": {
            "eventId": settings.PANTHEON_TOURNAMENT_EVENT_ID
        },
        "id": make_random_letters_and_digit_string(),
    }

    headers = {"X-Auth-Token": settings.PANTHEON_ADMIN_TOKEN}

    response = requests.post(settings.PANTHEON_OLD_API_URL,
                             json=data,
                             headers=headers)
    if response.status_code == 500:
        logger.error("Make sortition. Pantheon 500.")
        return []

    content = response.json()
    if content.get("error"):
        logger.error("Make sortition. Pantheon error. {}".format(
            content.get("error")))
        return []

    return content["result"]
Ejemplo n.º 5
0
def add_penalty_game(request, game_id):
    game = TournamentGame.objects.get(id=game_id)

    headers = {"X-Auth-Token": settings.PANTHEON_ADMIN_TOKEN}
    data = {
        "jsonrpc": "2.0",
        "method": "addPenaltyGame",
        "params": {
            "eventId": settings.PANTHEON_EVENT_ID,
            "players": [x.player.pantheon_id for x in game.game_players.all()],
        },
        "id": make_random_letters_and_digit_string(),
    }

    response = requests.post(settings.PANTHEON_URL, json=data, headers=headers)
    if response.status_code == 500:
        return HttpResponse("addPenaltyGame. 500 response")

    content = response.json()
    if content.get("error"):
        return HttpResponse("addPenaltyGame. Pantheon error: {}".format(
            content.get("error")))

    handler = TournamentHandler()
    handler.init(tournament=Tournament.objects.get(id=settings.TOURNAMENT_ID),
                 lobby="",
                 game_type="",
                 destination="")
    player_names = handler.get_players_message_string(
        [x.player for x in game.game_players.all()])
    handler.create_notification(TournamentNotification.GAME_PENALTY,
                                {"player_names": player_names})
    handler.check_round_was_finished()

    return redirect(request.META.get("HTTP_REFERER"))
Ejemplo n.º 6
0
def disable_user_in_pantheon(request, record_id):
    record = TournamentPlayers.objects.get(id=record_id)

    headers = {"X-Auth-Token": settings.PANTHEON_ADMIN_TOKEN}

    data = {
        "jsonrpc": "2.0",
        "method": "updatePlayerSeatingFlagCP",
        "params": {
            "playerId": record.pantheon_id,
            "eventId": settings.PANTHEON_EVENT_ID,
            "ignoreSeating": 1
        },
        "id": make_random_letters_and_digit_string(),
    }

    response = requests.post(settings.PANTHEON_URL, json=data, headers=headers)
    if response.status_code == 500:
        return HttpResponse("Disable player. 500 response")

    content = response.json()
    if content.get("error"):
        return HttpResponse("Disable player. Pantheon error: {}".format(
            content.get("error")))

    record.enabled_in_pantheon = False
    record.save()

    return redirect(request.META.get("HTTP_REFERER"))
Ejemplo n.º 7
0
def toggle_replacement_flag_in_pantheon(request, record_id):
    record = TournamentPlayers.objects.get(id=record_id)

    headers = {"X-Auth-Token": settings.PANTHEON_ADMIN_TOKEN}

    new_is_replacement = not record.is_replacement

    data = {
        "jsonrpc": "2.0",
        "method": "updatePlayer",
        "params": {
            "id": record.pantheon_id,
            "ident": "",
            "alias": "",
            "displayName": "",
            "tenhouId": record.tenhou_username,
            "isReplacement": new_is_replacement,
        },
        "id": make_random_letters_and_digit_string(),
    }

    response = requests.post(settings.PANTHEON_URL, json=data, headers=headers)
    if response.status_code == 500:
        return HttpResponse("updatePlayer. 500 response")

    content = response.json()
    if content.get("error"):
        return HttpResponse("updatePlayer. Pantheon error: {}".format(
            content.get("error")))

    record.is_replacement = new_is_replacement
    record.save()

    return redirect(request.META.get("HTTP_REFERER"))
Ejemplo n.º 8
0
    def _pantheon_swiss_sortition(self):
        data = {
            'jsonrpc': '2.0',
            'method': 'generateSwissSeating',
            'params': {
                'eventId': settings.PANTHEON_EVENT_ID,
            },
            'id': make_random_letters_and_digit_string()
        }

        headers = {
            'X-Auth-Token': settings.PANTHEON_ADMIN_TOKEN,
        }

        response = requests.post(settings.PANTHEON_URL,
                                 json=data,
                                 headers=headers)
        if response.status_code == 500:
            logger.error('Make sortition. Pantheon 500.')
            return []

        content = response.json()
        if content.get('error'):
            logger.error('Make sortition. Pantheon error. {}'.format(
                content.get('error')))
            return []

        return content['result']
Ejemplo n.º 9
0
    def add_game_log(self, log_link):
        error_message = 'Это не похоже на лог игры.'

        log_link = log_link.strip()
        if not log_link.startswith('http://tenhou.net/'):
            return error_message

        attributes = parse_qs(urlparse(log_link).query)

        if 'log' not in attributes:
            return error_message

        log_id = attributes['log'][0]

        try:
            parser = TenhouParser()
            players = parser.get_player_names(log_id)
        except HTTPError:
            return 'Не получилось. Возможно тенха не успела сохранить игру или вы скопировали не весь log id.'

        if TournamentGame.objects.filter(log_id=log_id).exists():
            return 'Игра уже была добавлена в систему. Спасибо.'

        games = (TournamentGame.objects.filter(
            tournament=self.tournament).filter(
                game_players__player__tenhou_username__in=players).filter(
                    tournament_round=self.status.current_round).distinct())
        if games.count() >= 2:
            logger.error('Log add. Too much games.')
            return 'Призошла ошибка при добавлении лога. Обратитесь к администратору.'

        game = games.first()

        data = {
            'jsonrpc': '2.0',
            'method': 'addOnlineReplay',
            'params': {
                'eventId': settings.PANTHEON_EVENT_ID,
                'link': log_link
            },
            'id': make_random_letters_and_digit_string()
        }

        response = requests.post(settings.PANTHEON_URL, json=data)
        if response.status_code == 500:
            logger.error('Log add. Pantheon 500.')
            return 'Призошла ошибка при добавлении лога. Обратитесь к администратору.'

        content = response.json()
        if content.get('error'):
            logger.error('Log add. Pantheon error. {}'.format(
                content.get('error')))
            return 'Призошла ошибка при добавлении лога. Обратитесь к администратору.'

        game.log_id = log_id
        game.status = TournamentGame.FINISHED
        game.save()

        return 'Игра была добавлена. Спасибо.'
Ejemplo n.º 10
0
def add_tenhou_game_to_pantheon(log_link: str):
    data = {
        "jsonrpc": "2.0",
        "method": "addOnlineReplay",
        "params": {"eventId": settings.PANTHEON_EVENT_ID, "link": log_link},
        "id": make_random_letters_and_digit_string(),
    }
    return requests.post(settings.PANTHEON_URL, json=data)
Ejemplo n.º 11
0
    def __init__(self, bot_config, print_logs, replay_name, game_count):
        super().__init__(bot_config)
        self.id = make_random_letters_and_digit_string()
        self.player.name = bot_config.name

        if print_logs:
            settings.LOG_PREFIX = self.player.name
            logger = set_up_logging(
                save_to_file=True, print_to_console=False, logger_name=self.player.name + str(game_count)
            )
            logger.info(f"Replay name: {replay_name}")
            self.player.init_logger(logger)
Ejemplo n.º 12
0
    def create_player(self, country_code=None):
        if country_code:
            country, _ = Country.objects.get_or_create(code=country_code,
                                                       name=country_code)
        else:
            country = self.country

        return Player.objects.create(
            first_name="test",
            last_name="test",
            slug=make_random_letters_and_digit_string(),
            country=country)
Ejemplo n.º 13
0
 def create_tournament(self,
                       players=1,
                       sessions=1,
                       start_date=None,
                       end_date=None,
                       tournament_type=Tournament.EMA):
     start_date = start_date or timezone.now().date()
     end_date = end_date or timezone.now().date()
     return Tournament.objects.create(
         name="test",
         slug=make_random_letters_and_digit_string(),
         start_date=start_date,
         end_date=end_date,
         country=self.country,
         tournament_type=tournament_type,
         number_of_players=players,
         number_of_sessions=sessions,
     )
    def add_user_to_pantheon(self, player_pantheon_id):
        headers = {"X-Internal-Query-Secret": settings.PANTHEON_ADMIN_TOKEN}
        data = {
            "jsonrpc": "2.0",
            "method": "registerPlayerCP",
            "params": {
                "eventId": settings.LEAGUE_PANTHEON_EVENT_ID,
                "playerId": player_pantheon_id
            },
            "id": make_random_letters_and_digit_string(),
        }

        response = requests.post(settings.PANTHEON_NEW_API_URL,
                                 json=data,
                                 headers=headers)
        if response.status_code == 500:
            raise Exception("Register player. 500 response")

        content = response.json()
        if content.get("error"):
            raise Exception("Register player. Pantheon error: {}".format(
                content.get("error")))
Ejemplo n.º 15
0
    def __init__(self, use_previous_ai_version=False):
        self.table = Table(use_previous_ai_version)
        self.statistics = Statistics()
        self.player = self.table.get_main_player()

        self.id = make_random_letters_and_digit_string()
Ejemplo n.º 16
0
def add_user_to_the_pantheon(request, record_id):
    record = TournamentPlayers.objects.get(id=record_id)

    headers = {
        'X-Auth-Token': settings.PANTHEON_ADMIN_TOKEN,
    }

    # The first step is update player tenhou nickname
    data = {
        'jsonrpc': '2.0',
        'method': 'updatePlayer',
        'params': {
            'id': record.pantheon_id,
            'ident': '',
            'alias': '',
            'displayName': '',
            'tenhouId': record.tenhou_username
        },
        'id': make_random_letters_and_digit_string()
    }

    response = requests.post(settings.PANTHEON_URL, json=data, headers=headers)
    if response.status_code == 500:
        return HttpResponse('Update player. 500 response')

    content = response.json()
    if content.get('error'):
        return HttpResponse('Update player. Pantheon error: {}'.format(
            content.get('error')))

    # The second step is enroll player
    data = {
        'jsonrpc': '2.0',
        'method': 'enrollPlayerCP',
        'params': {
            'eventId': settings.PANTHEON_EVENT_ID,
            'playerId': record.pantheon_id,
        },
        'id': make_random_letters_and_digit_string()
    }

    response = requests.post(settings.PANTHEON_URL, json=data, headers=headers)
    if response.status_code == 500:
        return HttpResponse('Enroll player. 500 response')

    content = response.json()
    if content.get('error'):
        return HttpResponse('Enroll player. Pantheon error: {}'.format(
            content.get('error')))

    # The third step is register player
    data = {
        'jsonrpc': '2.0',
        'method': 'registerPlayerCP',
        'params': {
            'eventId': settings.PANTHEON_EVENT_ID,
            'playerId': record.pantheon_id,
        },
        'id': make_random_letters_and_digit_string()
    }

    response = requests.post(settings.PANTHEON_URL, json=data, headers=headers)
    if response.status_code == 500:
        return HttpResponse('Register player. 500 response')

    content = response.json()
    if content.get('error'):
        return HttpResponse('Register player. Pantheon error: {}'.format(
            content.get('error')))

    record.added_to_pantheon = True
    record.save()

    return redirect(request.META.get('HTTP_REFERER'))
Ejemplo n.º 17
0
def add_user_to_pantheon(record: TournamentPlayers):
    if not record.pantheon_id:
        return

    headers = {"X-Auth-Token": settings.PANTHEON_ADMIN_TOKEN}

    # The first step is update player tenhou nickname
    data = {
        "jsonrpc": "2.0",
        "method": "updatePlayer",
        "params": {
            "id": record.pantheon_id,
            "ident": "",
            "alias": "",
            "displayName": "",
            "tenhouId": record.tenhou_username,
        },
        "id": make_random_letters_and_digit_string(),
    }

    response = requests.post(settings.PANTHEON_URL, json=data, headers=headers)
    if response.status_code == 500:
        return HttpResponse("Update player. 500 response")

    content = response.json()
    if content.get("error"):
        return HttpResponse("Update player. Pantheon error: {}".format(
            content.get("error")))

    # The second step is enroll player
    data = {
        "jsonrpc": "2.0",
        "method": "enrollPlayerCP",
        "params": {
            "eventId": settings.PANTHEON_EVENT_ID,
            "playerId": record.pantheon_id
        },
        "id": make_random_letters_and_digit_string(),
    }

    response = requests.post(settings.PANTHEON_URL, json=data, headers=headers)
    if response.status_code == 500:
        return HttpResponse("Enroll player. 500 response")

    content = response.json()
    if content.get("error"):
        return HttpResponse("Enroll player. Pantheon error: {}".format(
            content.get("error")))

    # The third step is register player
    data = {
        "jsonrpc": "2.0",
        "method": "registerPlayerCP",
        "params": {
            "eventId": settings.PANTHEON_EVENT_ID,
            "playerId": record.pantheon_id
        },
        "id": make_random_letters_and_digit_string(),
    }

    response = requests.post(settings.PANTHEON_URL, json=data, headers=headers)
    if response.status_code == 500:
        return HttpResponse("Register player. 500 response")

    content = response.json()
    if content.get("error"):
        return HttpResponse("Register player. Pantheon error: {}".format(
            content.get("error")))

    record.added_to_pantheon = True
    record.save()