This repository has been archived by the owner on Aug 7, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 71
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* create secret in aimmo game manager * added migration for game tokens and not clear them * fix tests * moved game_creator to aimmo * add more tests, but still in progress * Merge branch 'development' into games-not-stopping * fix tests * add another test * code review cleanup
- Loading branch information
1 parent
31e02cd
commit da943f6
Showing
25 changed files
with
689 additions
and
497 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,11 +1 @@ | ||
""" | ||
Sets up the AimmoAppConfig class. Since we don't want to reset the app config every | ||
time the Django server reloads when we make a code change, the app config is set only | ||
if the main thread isn't already running. | ||
""" | ||
import os | ||
|
||
if os.environ.get("RUN_MAIN", None) != "true": | ||
default_app_config = "aimmo.apps.AimmoAppConfig" | ||
|
||
__version__ = "0.69.17b529" |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,74 @@ | ||
# -*- coding: utf-8 -*- | ||
# Code for Life | ||
# | ||
# Copyright (C) 2021, Ocado Innovation Limited | ||
# | ||
# This program is free software: you can redistribute it and/or modify | ||
# it under the terms of the GNU Affero General Public License as | ||
# published by the Free Software Foundation, either version 3 of the | ||
# License, or (at your option) any later version. | ||
# | ||
# This program is distributed in the hope that it will be useful, | ||
# but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
# GNU Affero General Public License for more details. | ||
# | ||
# You should have received a copy of the GNU Affero General Public License | ||
# along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
# | ||
# ADDITIONAL TERMS – Section 7 GNU General Public Licence | ||
# | ||
# This licence does not grant any right, title or interest in any “Ocado” logos, | ||
# trade names or the trademark “Ocado” or any other trademarks or domain names | ||
# owned by Ocado Innovation Limited or the Ocado group of companies or any other | ||
# distinctive brand features of “Ocado” as may be secured from time to time. You | ||
# must not distribute any modification of this program using the trademark | ||
# “Ocado” or claim any affiliation or association with Ocado or its employees. | ||
# | ||
# You are not authorised to use the name Ocado (or any of its trade names) or | ||
# the names of any author or contributor in advertising or for publicity purposes | ||
# pertaining to the distribution of this program, without the prior written | ||
# authorisation of Ocado. | ||
# | ||
# Any propagation, distribution or conveyance of this program must include this | ||
# copyright notice and these terms. You must not misrepresent the origins of this | ||
# program; modified versions of the program must be marked as such and not | ||
# identified as the original program. | ||
|
||
import secrets | ||
from aimmo.avatar_creator import create_avatar_for_user | ||
from aimmo.game_manager import GameManager | ||
|
||
NUM_BYTES_FOR_TOKEN_GENERATOR = 32 | ||
TOKEN_MAX_LENGTH = 48 | ||
|
||
|
||
def generate_game_token(): | ||
return secrets.token_urlsafe(nbytes=NUM_BYTES_FOR_TOKEN_GENERATOR)[ | ||
:TOKEN_MAX_LENGTH | ||
] | ||
|
||
|
||
def create_game(main_user, form): | ||
""" | ||
Creates a Game by: | ||
- saving the form | ||
- setting default values | ||
- adding users who can play the game | ||
- creating an avatar for the main user. | ||
- creating the game secret in game manager | ||
:param main_user: The user who requested game creation, and is the game owner. | ||
:param form: The form used to submit the creation of the game. | ||
:param users_to_add_to_game: List of User objects who are able to play this game. | ||
:return: The initialised Game object. | ||
""" | ||
game = form.save(commit=False) | ||
game.auth_token = generate_game_token() | ||
game.generator = "Main" | ||
game.owner = main_user | ||
game.main_user = main_user | ||
game.save() | ||
create_avatar_for_user(main_user, game.id) | ||
game_manager = GameManager() | ||
game_manager.create_game_secret(game_id=game.id, token=game.auth_token) | ||
return game |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
# Generated by Django 2.2.24 on 2021-07-12 10:50 | ||
|
||
from django.db import migrations, models | ||
|
||
from aimmo.game_creator import generate_game_token | ||
from aimmo.game_manager import GameManager | ||
|
||
|
||
class Migration(migrations.Migration): | ||
|
||
dependencies = [ | ||
("aimmo", "0024_unique_class_per_game"), | ||
] | ||
|
||
def generate_auth_token_for_games(apps, schema_editor): | ||
Game = apps.get_model("aimmo", "Game") | ||
for game in Game.objects.all(): | ||
game.auth_token = generate_game_token() | ||
game.save() | ||
game_manager = GameManager() | ||
game_manager.create_game_secret(game_id=game.id, token=game.auth_token) | ||
|
||
def clear_auth_token_for_games(apps, schema_editor): | ||
Game = apps.get_model("aimmo", "Game") | ||
for game in Game.objects.all(): | ||
game.auth_token = "" | ||
game.save() | ||
game_manager = GameManager() | ||
game_manager.delete_game_secret(game_id=game.id) | ||
|
||
operations = [ | ||
migrations.AlterField( | ||
model_name="game", | ||
name="auth_token", | ||
field=models.CharField(max_length=48), | ||
), | ||
migrations.RunPython( | ||
generate_auth_token_for_games, reverse_code=clear_auth_token_for_games | ||
), | ||
] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
from unittest.mock import MagicMock | ||
|
||
import pytest | ||
|
||
|
||
@pytest.fixture(autouse=True) | ||
def mock_game_manager(monkeypatch): | ||
"""Mock GameManager for tests that don't need it.""" | ||
monkeypatch.setattr( | ||
"aimmo.migrations.0025_generate_auth_token.GameManager", MagicMock() | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.