mirror of
https://github.com/TandoorRecipes/recipes.git
synced 2026-01-08 15:48:27 -05:00
moved create space to its own file
This commit is contained in:
@@ -3,17 +3,19 @@ import inspect
|
|||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from django.contrib.auth.decorators import user_passes_test
|
from django.contrib.auth.decorators import user_passes_test
|
||||||
|
from django.contrib.auth.models import Group
|
||||||
from django.core.cache import cache
|
from django.core.cache import cache
|
||||||
from django.core.exceptions import ObjectDoesNotExist, ValidationError
|
from django.core.exceptions import ObjectDoesNotExist, ValidationError
|
||||||
from django.http import HttpResponseRedirect
|
from django.http import HttpResponseRedirect
|
||||||
from django.urls import reverse, reverse_lazy
|
from django.urls import reverse, reverse_lazy
|
||||||
from django.utils.translation import gettext as _
|
from django.utils.translation import gettext as _
|
||||||
|
from django_scopes import scopes_disabled
|
||||||
from oauth2_provider.contrib.rest_framework import TokenHasReadWriteScope, TokenHasScope
|
from oauth2_provider.contrib.rest_framework import TokenHasReadWriteScope, TokenHasScope
|
||||||
from oauth2_provider.models import AccessToken
|
from oauth2_provider.models import AccessToken
|
||||||
from rest_framework import permissions
|
from rest_framework import permissions
|
||||||
from rest_framework.permissions import SAFE_METHODS
|
from rest_framework.permissions import SAFE_METHODS
|
||||||
|
import random
|
||||||
from cookbook.models import Recipe, ShareLink, UserSpace
|
from cookbook.models import Recipe, ShareLink, UserSpace, Space
|
||||||
|
|
||||||
|
|
||||||
def get_allowed_groups(groups_required):
|
def get_allowed_groups(groups_required):
|
||||||
@@ -330,6 +332,7 @@ class CustomRecipePermission(permissions.BasePermission):
|
|||||||
return ((has_group_permission(request.user, ['guest']) and request.method in SAFE_METHODS)
|
return ((has_group_permission(request.user, ['guest']) and request.method in SAFE_METHODS)
|
||||||
or has_group_permission(request.user, ['user'])) and obj.space == request.space
|
or has_group_permission(request.user, ['user'])) and obj.space == request.space
|
||||||
|
|
||||||
|
|
||||||
class CustomAiProviderPermission(permissions.BasePermission):
|
class CustomAiProviderPermission(permissions.BasePermission):
|
||||||
"""
|
"""
|
||||||
Custom permission class for the AiProvider api endpoint
|
Custom permission class for the AiProvider api endpoint
|
||||||
@@ -456,8 +459,35 @@ class IsReadOnlyDRF(permissions.BasePermission):
|
|||||||
def has_permission(self, request, view):
|
def has_permission(self, request, view):
|
||||||
return request.method in SAFE_METHODS
|
return request.method in SAFE_METHODS
|
||||||
|
|
||||||
|
|
||||||
class IsCreateDRF(permissions.BasePermission):
|
class IsCreateDRF(permissions.BasePermission):
|
||||||
message = 'You cannot interact with this object, you can only create'
|
message = 'You cannot interact with this object, you can only create'
|
||||||
|
|
||||||
def has_permission(self, request, view):
|
def has_permission(self, request, view):
|
||||||
return request.method == 'POST'
|
return request.method == 'POST'
|
||||||
|
|
||||||
|
|
||||||
|
def create_space_for_user(user, name=None):
|
||||||
|
with scopes_disabled():
|
||||||
|
if not name:
|
||||||
|
name = f"{user.username}'s Space"
|
||||||
|
|
||||||
|
if Space.objects.filter(name=name).exists():
|
||||||
|
name = f'{name} #{random.randrange(1, 10 ** 5)}'
|
||||||
|
|
||||||
|
created_space = Space(name=name,
|
||||||
|
created_by=user,
|
||||||
|
max_file_storage_mb=settings.SPACE_DEFAULT_MAX_FILES,
|
||||||
|
max_recipes=settings.SPACE_DEFAULT_MAX_RECIPES,
|
||||||
|
max_users=settings.SPACE_DEFAULT_MAX_USERS,
|
||||||
|
allow_sharing=settings.SPACE_DEFAULT_ALLOW_SHARING,
|
||||||
|
ai_enabled=settings.SPACE_AI_ENABLED,
|
||||||
|
ai_credits_monthly=settings.SPACE_AI_CREDITS_MONTHLY,
|
||||||
|
space_setup_completed=False, )
|
||||||
|
created_space.save()
|
||||||
|
|
||||||
|
UserSpace.objects.filter(user=user).update(active=False)
|
||||||
|
user_space = UserSpace.objects.create(space=created_space, user=user, active=True)
|
||||||
|
user_space.groups.add(Group.objects.filter(name='admin').get())
|
||||||
|
|
||||||
|
return user_space
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ from rest_framework.exceptions import AuthenticationFailed
|
|||||||
|
|
||||||
import random
|
import random
|
||||||
|
|
||||||
|
from cookbook.helper.permission_helper import create_space_for_user
|
||||||
from cookbook.models import Space, UserSpace
|
from cookbook.models import Space, UserSpace
|
||||||
from cookbook.views import views
|
from cookbook.views import views
|
||||||
from recipes import settings
|
from recipes import settings
|
||||||
@@ -83,29 +84,3 @@ class ScopeMiddleware:
|
|||||||
with scopes_disabled():
|
with scopes_disabled():
|
||||||
request.space = None
|
request.space = None
|
||||||
return self.get_response(request)
|
return self.get_response(request)
|
||||||
|
|
||||||
|
|
||||||
def create_space_for_user(user, name=None):
|
|
||||||
with scopes_disabled():
|
|
||||||
if not name:
|
|
||||||
name = f"{user.username}'s Space"
|
|
||||||
|
|
||||||
if Space.objects.filter(name=name).exists():
|
|
||||||
name = f'{name} #{random.randrange(1, 10 ** 5)}'
|
|
||||||
|
|
||||||
created_space = Space(name=name,
|
|
||||||
created_by=user,
|
|
||||||
max_file_storage_mb=settings.SPACE_DEFAULT_MAX_FILES,
|
|
||||||
max_recipes=settings.SPACE_DEFAULT_MAX_RECIPES,
|
|
||||||
max_users=settings.SPACE_DEFAULT_MAX_USERS,
|
|
||||||
allow_sharing=settings.SPACE_DEFAULT_ALLOW_SHARING,
|
|
||||||
ai_enabled=settings.SPACE_AI_ENABLED,
|
|
||||||
ai_credits_monthly=settings.SPACE_AI_CREDITS_MONTHLY,
|
|
||||||
space_setup_completed=False, )
|
|
||||||
created_space.save()
|
|
||||||
|
|
||||||
UserSpace.objects.filter(user=user).update(active=False)
|
|
||||||
user_space = UserSpace.objects.create(space=created_space, user=user, active=True)
|
|
||||||
user_space.groups.add(Group.objects.filter(name='admin').get())
|
|
||||||
|
|
||||||
return user_space
|
|
||||||
|
|||||||
@@ -26,9 +26,8 @@ from cookbook.helper.CustomStorageClass import CachedS3Boto3Storage
|
|||||||
from cookbook.helper.HelperFunctions import str2bool
|
from cookbook.helper.HelperFunctions import str2bool
|
||||||
from cookbook.helper.ai_helper import get_monthly_token_usage
|
from cookbook.helper.ai_helper import get_monthly_token_usage
|
||||||
from cookbook.helper.image_processing import is_file_type_allowed
|
from cookbook.helper.image_processing import is_file_type_allowed
|
||||||
from cookbook.helper.permission_helper import above_space_limit
|
from cookbook.helper.permission_helper import above_space_limit, create_space_for_user
|
||||||
from cookbook.helper.property_helper import FoodPropertyHelper
|
from cookbook.helper.property_helper import FoodPropertyHelper
|
||||||
from cookbook.helper.scope_middleware import create_space_for_user
|
|
||||||
from cookbook.helper.shopping_helper import RecipeShoppingEditor
|
from cookbook.helper.shopping_helper import RecipeShoppingEditor
|
||||||
from cookbook.helper.unit_conversion_helper import UnitConversionHelper
|
from cookbook.helper.unit_conversion_helper import UnitConversionHelper
|
||||||
from cookbook.models import (Automation, BookmarkletImport, Comment, CookLog, CustomFilter,
|
from cookbook.models import (Automation, BookmarkletImport, Comment, CookLog, CustomFilter,
|
||||||
|
|||||||
@@ -18,8 +18,6 @@ import litellm
|
|||||||
import redis
|
import redis
|
||||||
import requests
|
import requests
|
||||||
from PIL import UnidentifiedImageError
|
from PIL import UnidentifiedImageError
|
||||||
from PIL.ImImagePlugin import number
|
|
||||||
from PIL.features import check
|
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from django.contrib.auth.models import Group, User
|
from django.contrib.auth.models import Group, User
|
||||||
from django.contrib.postgres.search import TrigramSimilarity
|
from django.contrib.postgres.search import TrigramSimilarity
|
||||||
|
|||||||
Reference in New Issue
Block a user