api: disable legacy fillslots api by default (#77806)
gitea/chrono/pipeline/head This commit looks good Details

This commit is contained in:
Valentin Deniaud 2023-05-23 11:33:03 +02:00
parent 84bdeb3ed3
commit 13f44f7cd0
4 changed files with 24 additions and 0 deletions

View File

@ -21,6 +21,7 @@ import itertools
import json import json
import uuid import uuid
from django.conf import settings
from django.db import IntegrityError, transaction from django.db import IntegrityError, transaction
from django.db.models import BooleanField, Count, ExpressionWrapper, F, Func, Prefetch, Q from django.db.models import BooleanField, Count, ExpressionWrapper, F, Func, Prefetch, Q
from django.db.models.expressions import RawSQL from django.db.models.expressions import RawSQL
@ -1402,6 +1403,9 @@ class Fillslots(APIView):
serializer_class = serializers.FillSlotsSerializer serializer_class = serializers.FillSlotsSerializer
def post(self, request, agenda_identifier=None, event_identifier=None, format=None): def post(self, request, agenda_identifier=None, event_identifier=None, format=None):
if not settings.LEGACY_FILLSLOTS_ENABLED:
raise APIErrorBadRequest(N_('deprecated call'))
return self.fillslot(request=request, agenda_identifier=agenda_identifier, format=format) return self.fillslot(request=request, agenda_identifier=agenda_identifier, format=format)
def fillslot(self, request, agenda_identifier=None, slots=None, format=None, retry=False): def fillslot(self, request, agenda_identifier=None, slots=None, format=None, retry=False):

View File

@ -198,6 +198,7 @@ SMS_SENDER = ''
REST_FRAMEWORK = {'EXCEPTION_HANDLER': 'chrono.api.utils.exception_handler'} REST_FRAMEWORK = {'EXCEPTION_HANDLER': 'chrono.api.utils.exception_handler'}
SHARED_CUSTODY_ENABLED = False SHARED_CUSTODY_ENABLED = False
LEGACY_FILLSLOTS_ENABLED = False
local_settings_file = os.environ.get( local_settings_file = os.environ.get(
'CHRONO_SETTINGS_FILE', os.path.join(os.path.dirname(__file__), 'local_settings.py') 'CHRONO_SETTINGS_FILE', os.path.join(os.path.dirname(__file__), 'local_settings.py')

View File

@ -2621,3 +2621,21 @@ def test_user_external_id(app, user):
assert not any(x['disabled'] for x in resp.json['data']) assert not any(x['disabled'] for x in resp.json['data'])
meeting_event.delete() meeting_event.delete()
def test_booking_api_fillslots_deprecated(app, user, settings):
settings.LEGACY_FILLSLOTS_ENABLED = False
agenda = Agenda.objects.create(label='Foo bar', kind='events')
event = Event.objects.create(
label='Event', start_datetime=now() + datetime.timedelta(days=5), places=10, agenda=agenda
)
app.authorization = ('Basic', ('john.doe', 'password'))
resp = app.post_json('/api/agenda/%s/fillslots/' % agenda.slug, params={'slots': [event.id]}, status=400)
assert 'deprecated' in resp.json['err_desc']
assert Booking.objects.count() == 0
resp = app.post_json('/api/agenda/%s/fillslot/%s/' % (agenda.slug, event.id))
assert Booking.objects.count() == 1

View File

@ -45,5 +45,6 @@ EXCEPTIONS_SOURCES = {}
SITE_BASE_URL = 'https://example.com' SITE_BASE_URL = 'https://example.com'
SHARED_CUSTODY_ENABLED = True SHARED_CUSTODY_ENABLED = True
LEGACY_FILLSLOTS_ENABLED = True
PASSWORD_HASHERS = ["django.contrib.auth.hashers.MD5PasswordHasher"] PASSWORD_HASHERS = ["django.contrib.auth.hashers.MD5PasswordHasher"]