diff options
| -rw-r--r-- | backend/routes/forms/discover.py | 33 | ||||
| -rw-r--r-- | backend/routes/forms/form.py | 9 | 
2 files changed, 37 insertions, 5 deletions
| diff --git a/backend/routes/forms/discover.py b/backend/routes/forms/discover.py index c4711aa..d7351d5 100644 --- a/backend/routes/forms/discover.py +++ b/backend/routes/forms/discover.py @@ -5,10 +5,33 @@ from spectree.response import Response  from starlette.requests import Request  from starlette.responses import JSONResponse -from backend.models import Form, FormList +from backend import constants +from backend.models import Form, FormList, Question  from backend.route import Route  from backend.validation import api +__FEATURES = [ +    constants.FormFeatures.DISCOVERABLE.value, +    constants.FormFeatures.OPEN.value, +    constants.FormFeatures.REQUIRES_LOGIN.value +] + +__QUESTION = Question( +    id="description", +    name="Check your cookies after pressing the button.", +    type="section", +    data={"text": "You can find cookies under \"Application\" in dev tools."}, +    required=False +) + +EMPTY_FORM = Form( +    id="empty_auth", +    features=__FEATURES, +    questions=[__QUESTION], +    name="Auth form", +    description="An empty form to help you get a token." +) +  class DiscoverableFormsList(Route):      """ @@ -31,6 +54,8 @@ class DiscoverableFormsList(Route):          forms = [form.dict(admin=False) for form in forms] -        return JSONResponse( -            forms -        ) +        # Return an empty form in development environments to help with authentication. +        if not forms and not constants.PRODUCTION: +            forms.append(EMPTY_FORM.dict(admin=False)) + +        return JSONResponse(forms) diff --git a/backend/routes/forms/form.py b/backend/routes/forms/form.py index 1c6e44a..ca67f13 100644 --- a/backend/routes/forms/form.py +++ b/backend/routes/forms/form.py @@ -8,8 +8,10 @@ from starlette.authentication import requires  from starlette.requests import Request  from starlette.responses import JSONResponse +from backend import constants  from backend.models import Form  from backend.route import Route +from backend.routes.forms.discover import EMPTY_FORM  from backend.routes.forms.unittesting import filter_unittests  from backend.validation import ErrorMessage, OkayResponse, api @@ -28,9 +30,10 @@ class SingleForm(Route):      async def get(self, request: Request) -> JSONResponse:          """Returns single form information by ID."""          admin = request.user.admin if request.user.is_authenticated else False +        form_id = request.path_params["form_id"]          filters = { -            "_id": request.path_params["form_id"] +            "_id": form_id          }          if not admin: @@ -43,6 +46,10 @@ class SingleForm(Route):              return JSONResponse(form.dict(admin=admin)) +        elif not constants.PRODUCTION and form_id == EMPTY_FORM.id: +            # Empty form to help with authentication in development. +            return JSONResponse(EMPTY_FORM.dict(admin=admin)) +          return JSONResponse({"error": "not_found"}, status_code=404)      @requires(["authenticated", "admin"]) | 
