diff --git a/cookbook/admin.py b/cookbook/admin.py index 8893a7a0..b96fa2e4 100644 --- a/cookbook/admin.py +++ b/cookbook/admin.py @@ -22,7 +22,7 @@ admin.site.unregister(Group) class SpaceAdmin(admin.ModelAdmin): - list_display = ('name', 'message') + list_display = ('name', 'created_by', 'message') admin.site.register(Space, SpaceAdmin) diff --git a/cookbook/helper/scope_middleware.py b/cookbook/helper/scope_middleware.py index 9726d526..6dacc5b9 100644 --- a/cookbook/helper/scope_middleware.py +++ b/cookbook/helper/scope_middleware.py @@ -2,6 +2,8 @@ from django.shortcuts import redirect from django.urls import reverse from django_scopes import scope, scopes_disabled +from cookbook.views import views + class ScopeMiddleware: def __init__(self, get_response): @@ -10,17 +12,17 @@ class ScopeMiddleware: def __call__(self, request): if request.user.is_authenticated: - if request.user.groups.count() == 0: - return redirect('view_no_group') - - with scopes_disabled(): - if request.user.userpreference.space is None and not reverse('view_no_space') in request.path and not reverse('account_logout') in request.path: - return redirect(reverse('view_no_space')) - if request.path.startswith('/admin/'): with scopes_disabled(): return self.get_response(request) + with scopes_disabled(): + if request.user.userpreference.space is None and not reverse('account_logout') in request.path: + return views.no_space(request) + + if request.user.groups.count() == 0 and not reverse('account_logout') in request.path: + return views.no_groups(request) + request.space = request.user.userpreference.space # with scopes_disabled(): with scope(space=request.space): diff --git a/cookbook/migrations/0010_auto_20200130_1059.py b/cookbook/migrations/0010_auto_20200130_1059.py index 3ef2f066..ffd49acc 100644 --- a/cookbook/migrations/0010_auto_20200130_1059.py +++ b/cookbook/migrations/0010_auto_20200130_1059.py @@ -1,20 +1,22 @@ # Generated by Django 3.0.2 on 2020-01-30 09:59 from django.db import migrations +from django_scopes import scopes_disabled def migrate_ingredient_units(apps, schema_editor): - Unit = apps.get_model('cookbook', 'Unit') - RecipeIngredients = apps.get_model('cookbook', 'RecipeIngredients') + with scopes_disabled(): + Unit = apps.get_model('cookbook', 'Unit') + RecipeIngredients = apps.get_model('cookbook', 'RecipeIngredients') - for u in RecipeIngredients.objects.values('unit').distinct(): - unit = Unit() - unit.name = u['unit'] - unit.save() + for u in RecipeIngredients.objects.values('unit').distinct(): + unit = Unit() + unit.name = u['unit'] + unit.save() - for i in RecipeIngredients.objects.all(): - i.unit_key = Unit.objects.get(name=i.unit) - i.save() + for i in RecipeIngredients.objects.all(): + i.unit_key = Unit.objects.get(name=i.unit) + i.save() class Migration(migrations.Migration): diff --git a/cookbook/migrations/0021_auto_20200216_2309.py b/cookbook/migrations/0021_auto_20200216_2309.py index 1d111549..617dd9ef 100644 --- a/cookbook/migrations/0021_auto_20200216_2309.py +++ b/cookbook/migrations/0021_auto_20200216_2309.py @@ -1,19 +1,21 @@ # Generated by Django 3.0.2 on 2020-02-16 22:09 from django.db import migrations +from django_scopes import scopes_disabled def migrate_ingredients(apps, schema_editor): - Ingredient = apps.get_model('cookbook', 'Ingredient') - RecipeIngredient = apps.get_model('cookbook', 'RecipeIngredient') + with scopes_disabled(): + Ingredient = apps.get_model('cookbook', 'Ingredient') + RecipeIngredient = apps.get_model('cookbook', 'RecipeIngredient') - for u in RecipeIngredient.objects.values('name').distinct(): - ingredient = Ingredient() - ingredient.name = u['name'] - ingredient.save() + for u in RecipeIngredient.objects.values('name').distinct(): + ingredient = Ingredient() + ingredient.name = u['name'] + ingredient.save() - for i in RecipeIngredient.objects.all(): - i.ingredient = Ingredient.objects.get(name=i.name) - i.save() + for i in RecipeIngredient.objects.all(): + i.ingredient = Ingredient.objects.get(name=i.name) + i.save() class Migration(migrations.Migration): diff --git a/cookbook/migrations/0034_auto_20200426_1614.py b/cookbook/migrations/0034_auto_20200426_1614.py index ee3797aa..a7844e6d 100644 --- a/cookbook/migrations/0034_auto_20200426_1614.py +++ b/cookbook/migrations/0034_auto_20200426_1614.py @@ -1,15 +1,17 @@ # Generated by Django 3.0.5 on 2020-04-26 14:14 from django.db import migrations +from django_scopes import scopes_disabled def apply_migration(apps, schema_editor): - Group = apps.get_model('auth', 'Group') - Group.objects.bulk_create([ - Group(name=u'guest'), - Group(name=u'user'), - Group(name=u'admin'), - ]) + with scopes_disabled(): + Group = apps.get_model('auth', 'Group') + Group.objects.bulk_create([ + Group(name=u'guest'), + Group(name=u'user'), + Group(name=u'admin'), + ]) class Migration(migrations.Migration): diff --git a/cookbook/migrations/0036_auto_20200427_1800.py b/cookbook/migrations/0036_auto_20200427_1800.py index 25ee2f9d..f47cb832 100644 --- a/cookbook/migrations/0036_auto_20200427_1800.py +++ b/cookbook/migrations/0036_auto_20200427_1800.py @@ -1,15 +1,17 @@ # Generated by Django 3.0.5 on 2020-04-27 16:00 from django.db import migrations +from django_scopes import scopes_disabled def apply_migration(apps, schema_editor): - Group = apps.get_model('auth', 'Group') - User = apps.get_model('auth', 'User') - for u in User.objects.all(): - if u.groups.count() < 1: - u.groups.add(Group.objects.get(name='admin')) - u.save() + with scopes_disabled(): + Group = apps.get_model('auth', 'Group') + User = apps.get_model('auth', 'User') + for u in User.objects.all(): + if u.groups.count() < 1: + u.groups.add(Group.objects.get(name='admin')) + u.save() class Migration(migrations.Migration): diff --git a/cookbook/migrations/0047_auto_20200602_1133.py b/cookbook/migrations/0047_auto_20200602_1133.py index cc500a26..d9287457 100644 --- a/cookbook/migrations/0047_auto_20200602_1133.py +++ b/cookbook/migrations/0047_auto_20200602_1133.py @@ -2,43 +2,45 @@ from django.db import migrations from django.utils.translation import gettext as _ +from django_scopes import scopes_disabled def migrate_meal_types(apps, schema_editor): - MealPlan = apps.get_model('cookbook', 'MealPlan') - MealType = apps.get_model('cookbook', 'MealType') + with scopes_disabled(): + MealPlan = apps.get_model('cookbook', 'MealPlan') + MealType = apps.get_model('cookbook', 'MealType') - breakfast = MealType.objects.create( - name=_('Breakfast'), - order=0, - ) + breakfast = MealType.objects.create( + name=_('Breakfast'), + order=0, + ) - lunch = MealType.objects.create( - name=_('Lunch'), - order=0, - ) + lunch = MealType.objects.create( + name=_('Lunch'), + order=0, + ) - dinner = MealType.objects.create( - name=_('Dinner'), - order=0, - ) + dinner = MealType.objects.create( + name=_('Dinner'), + order=0, + ) - other = MealType.objects.create( - name=_('Other'), - order=0, - ) + other = MealType.objects.create( + name=_('Other'), + order=0, + ) - for m in MealPlan.objects.all(): - if m.meal == 'BREAKFAST': - m.meal_type = breakfast - if m.meal == 'LUNCH': - m.meal_type = lunch - if m.meal == 'DINNER': - m.meal_type = dinner - if m.meal == 'OTHER': - m.meal_type = other + for m in MealPlan.objects.all(): + if m.meal == 'BREAKFAST': + m.meal_type = breakfast + if m.meal == 'LUNCH': + m.meal_type = lunch + if m.meal == 'DINNER': + m.meal_type = dinner + if m.meal == 'OTHER': + m.meal_type = other - m.save() + m.save() class Migration(migrations.Migration): diff --git a/cookbook/migrations/0050_auto_20200611_1509.py b/cookbook/migrations/0050_auto_20200611_1509.py index 7c841368..e5e6404c 100644 --- a/cookbook/migrations/0050_auto_20200611_1509.py +++ b/cookbook/migrations/0050_auto_20200611_1509.py @@ -2,22 +2,24 @@ from django.db import migrations from django.db.models import Q +from django_scopes import scopes_disabled def migrate_meal_types(apps, schema_editor): - MealPlan = apps.get_model('cookbook', 'MealPlan') - MealType = apps.get_model('cookbook', 'MealType') - User = apps.get_model('auth', 'User') + with scopes_disabled(): + MealPlan = apps.get_model('cookbook', 'MealPlan') + MealType = apps.get_model('cookbook', 'MealType') + User = apps.get_model('auth', 'User') - for u in User.objects.all(): - for t in MealType.objects.filter(created_by=None).all(): - user_type = MealType.objects.create( - name=t.name, - created_by=u, - ) - MealPlan.objects.filter(Q(created_by=u) and Q(meal_type=t)).update(meal_type=user_type) + for u in User.objects.all(): + for t in MealType.objects.filter(created_by=None).all(): + user_type = MealType.objects.create( + name=t.name, + created_by=u, + ) + MealPlan.objects.filter(Q(created_by=u) and Q(meal_type=t)).update(meal_type=user_type) - MealType.objects.filter(created_by=None).delete() + MealType.objects.filter(created_by=None).delete() class Migration(migrations.Migration): diff --git a/cookbook/migrations/0056_auto_20200625_2157.py b/cookbook/migrations/0056_auto_20200625_2157.py index 65a6e281..8a0a3bfd 100644 --- a/cookbook/migrations/0056_auto_20200625_2157.py +++ b/cookbook/migrations/0056_auto_20200625_2157.py @@ -3,11 +3,14 @@ from django.db import migrations, models import uuid +from django_scopes import scopes_disabled + def invalidate_shares(apps, schema_editor): - ShareLink = apps.get_model('cookbook', 'ShareLink') + with scopes_disabled(): + ShareLink = apps.get_model('cookbook', 'ShareLink') - ShareLink.objects.all().delete() + ShareLink.objects.all().delete() class Migration(migrations.Migration): diff --git a/cookbook/migrations/0059_auto_20200625_2137.py b/cookbook/migrations/0059_auto_20200625_2137.py index 58781b3f..09cb1d42 100644 --- a/cookbook/migrations/0059_auto_20200625_2137.py +++ b/cookbook/migrations/0059_auto_20200625_2137.py @@ -1,16 +1,18 @@ # Generated by Django 3.0.7 on 2020-06-25 19:37 from django.db import migrations +from django_scopes import scopes_disabled def migrate_ingredients(apps, schema_editor): - Recipe = apps.get_model('cookbook', 'Recipe') - Ingredient = apps.get_model('cookbook', 'Ingredient') + with scopes_disabled(): + Recipe = apps.get_model('cookbook', 'Recipe') + Ingredient = apps.get_model('cookbook', 'Ingredient') - for r in Recipe.objects.all(): - for i in Ingredient.objects.filter(recipe=r).all(): - r.ingredients.add(i) - r.save() + for r in Recipe.objects.all(): + for i in Ingredient.objects.filter(recipe=r).all(): + r.ingredients.add(i) + r.save() class Migration(migrations.Migration): diff --git a/cookbook/migrations/0062_auto_20200625_2219.py b/cookbook/migrations/0062_auto_20200625_2219.py index c852a020..7dd1efd7 100644 --- a/cookbook/migrations/0062_auto_20200625_2219.py +++ b/cookbook/migrations/0062_auto_20200625_2219.py @@ -1,21 +1,23 @@ # Generated by Django 3.0.7 on 2020-06-25 20:19 from django.db import migrations, models +from django_scopes import scopes_disabled def create_default_step(apps, schema_editor): - Recipe = apps.get_model('cookbook', 'Recipe') - Step = apps.get_model('cookbook', 'Step') + with scopes_disabled(): + Recipe = apps.get_model('cookbook', 'Recipe') + Step = apps.get_model('cookbook', 'Step') - for r in Recipe.objects.filter(internal=True).all(): - s = Step.objects.create( - instruction=r.instructions - ) - for i in r.ingredients.all(): - s.ingredients.add(i) - s.save() - r.steps.add(s) - r.save() + for r in Recipe.objects.filter(internal=True).all(): + s = Step.objects.create( + instruction=r.instructions + ) + for i in r.ingredients.all(): + s.ingredients.add(i) + s.save() + r.steps.add(s) + r.save() class Migration(migrations.Migration): diff --git a/cookbook/migrations/0068_auto_20200629_2127.py b/cookbook/migrations/0068_auto_20200629_2127.py index daea00bd..7f92dff2 100644 --- a/cookbook/migrations/0068_auto_20200629_2127.py +++ b/cookbook/migrations/0068_auto_20200629_2127.py @@ -2,27 +2,29 @@ from django.db import migrations, models import django.db.models.deletion +from django_scopes import scopes_disabled def convert_old_specials(apps, schema_editor): - Ingredient = apps.get_model('cookbook', 'Ingredient') - Food = apps.get_model('cookbook', 'Food') - Unit = apps.get_model('cookbook', 'Unit') + with scopes_disabled(): + Ingredient = apps.get_model('cookbook', 'Ingredient') + Food = apps.get_model('cookbook', 'Food') + Unit = apps.get_model('cookbook', 'Unit') - for i in Ingredient.objects.all(): - if i.amount == 0: - i.no_amount = True - if i.unit.name == 'Special:Header': - i.header = True - i.unit = None - i.food = None - i.save() + for i in Ingredient.objects.all(): + if i.amount == 0: + i.no_amount = True + if i.unit.name == 'Special:Header': + i.header = True + i.unit = None + i.food = None + i.save() - try: - Unit.objects.filter(name='Special:Header').delete() - Food.objects.filter(name='Header').delete() - except Exception: - pass + try: + Unit.objects.filter(name='Special:Header').delete() + Food.objects.filter(name='Header').delete() + except Exception: + pass class Migration(migrations.Migration): diff --git a/cookbook/views/views.py b/cookbook/views/views.py index f781a766..74886145 100644 --- a/cookbook/views/views.py +++ b/cookbook/views/views.py @@ -7,6 +7,7 @@ from django.conf import settings from django.contrib import messages from django.contrib.auth import update_session_auth_hash from django.contrib.auth.forms import PasswordChangeForm +from django.contrib.auth.models import Group from django.contrib.auth.password_validation import validate_password from django.core.exceptions import ValidationError from django.db import IntegrityError @@ -85,10 +86,6 @@ def search(request): def no_groups(request): - if not request.user.is_authenticated: - return HttpResponseRedirect(reverse('account_login') + '?next=' + request.GET['next']) - if request.user.is_authenticated and request.user.groups.count() > 0: - return HttpResponseRedirect(reverse('index')) return render(request, 'no_groups_info.html') @@ -335,37 +332,40 @@ def system(request): def setup(request): - if User.objects.count() > 0 or 'django.contrib.auth.backends.RemoteUserBackend' in settings.AUTHENTICATION_BACKENDS: - messages.add_message(request, messages.ERROR, _('The setup page can only be used to create the first user! If you have forgotten your superuser credentials please consult the django documentation on how to reset passwords.')) - return HttpResponseRedirect(reverse('account_login')) + with scopes_disabled(): + if User.objects.count() > 0 or 'django.contrib.auth.backends.RemoteUserBackend' in settings.AUTHENTICATION_BACKENDS: + messages.add_message(request, messages.ERROR, _('The setup page can only be used to create the first user! If you have forgotten your superuser credentials please consult the django documentation on how to reset passwords.')) + return HttpResponseRedirect(reverse('account_login')) - if request.method == 'POST': - form = UserCreateForm(request.POST) - if form.is_valid(): - if form.cleaned_data['password'] != form.cleaned_data['password_confirm']: # noqa: E501 - form.add_error('password', _('Passwords dont match!')) - else: - user = User(username=form.cleaned_data['name'], is_superuser=True, is_staff=True) - try: - validate_password(form.cleaned_data['password'], user=user) - user.set_password(form.cleaned_data['password']) - user.save() - user.userpreference.space = Space.objects.first() - user.userpreference.save() + if request.method == 'POST': + form = UserCreateForm(request.POST) + if form.is_valid(): + if form.cleaned_data['password'] != form.cleaned_data['password_confirm']: + form.add_error('password', _('Passwords dont match!')) + else: + user = User(username=form.cleaned_data['name'], is_superuser=True, is_staff=True) + try: + validate_password(form.cleaned_data['password'], user=user) + user.set_password(form.cleaned_data['password']) + user.save() + + user.groups.add(Group.objects.get(name='admin')) + + user.userpreference.space = Space.objects.first() + user.userpreference.save() - with scopes_disabled(): for x in Space.objects.all(): x.created_by = user x.save() - messages.add_message(request, messages.SUCCESS, _('User has been created, please login!')) - return HttpResponseRedirect(reverse('account_login')) - except ValidationError as e: - for m in e: - form.add_error('password', m) - else: - form = UserCreateForm() + messages.add_message(request, messages.SUCCESS, _('User has been created, please login!')) + return HttpResponseRedirect(reverse('account_login')) + except ValidationError as e: + for m in e: + form.add_error('password', m) + else: + form = UserCreateForm() - return render(request, 'setup.html', {'form': form}) + return render(request, 'setup.html', {'form': form}) def signup(request, token):