From 3ee85038b9a241f8d9c8d885c4ea4b5f86cb1a84 Mon Sep 17 00:00:00 2001 From: Viktor van Wijk Date: Wed, 15 Jan 2025 16:05:32 +0100 Subject: [PATCH] :truck: [#4908] Rename relative_api_endpoint to path --- .../form_design/RegistrationFields.stories.js | 6 +++--- .../json_dump/JSONDumpOptionsForm.js | 8 ++++---- .../fields/{RelativeAPIEndpoint.js => Path.js} | 16 ++++++++-------- .../registrations/json_dump/fields/index.js | 4 ++-- .../variables/VariablesEditor.stories.js | 2 +- .../registrations/contrib/json_dump/config.py | 14 +++++--------- .../registrations/contrib/json_dump/plugin.py | 11 ++++++++--- .../contrib/json_dump/tests/test_backend.py | 8 ++++---- 8 files changed, 35 insertions(+), 34 deletions(-) rename src/openforms/js/components/admin/form_design/registrations/json_dump/fields/{RelativeAPIEndpoint.js => Path.js} (51%) diff --git a/src/openforms/js/components/admin/form_design/RegistrationFields.stories.js b/src/openforms/js/components/admin/form_design/RegistrationFields.stories.js index 6f993e4d57..2e092faddb 100644 --- a/src/openforms/js/components/admin/form_design/RegistrationFields.stories.js +++ b/src/openforms/js/components/admin/form_design/RegistrationFields.stories.js @@ -406,7 +406,7 @@ export default { enum: [1, 2], enumNames: ['Service 1', 'Service 2'], }, - relativeApiEndpoint: { + path: { minLength: 1, title: 'Relative API endpoint', type: 'string', @@ -769,7 +769,7 @@ export const ConfiguredBackends = { backend: 'json_dump', options: { service: 1, - relativeApiEndpoint: 'example/endpoint', + path: 'example/endpoint', formVariables: [], }, }, @@ -1028,7 +1028,7 @@ export const JSONDump = { backend: 'json_dump', options: { service: 1, - relativeApiEndpoint: 'example/endpoint', + path: 'example/endpoint', formVariables: [], }, }, diff --git a/src/openforms/js/components/admin/form_design/registrations/json_dump/JSONDumpOptionsForm.js b/src/openforms/js/components/admin/form_design/registrations/json_dump/JSONDumpOptionsForm.js index ddb0018777..a23024e2ef 100644 --- a/src/openforms/js/components/admin/form_design/registrations/json_dump/JSONDumpOptionsForm.js +++ b/src/openforms/js/components/admin/form_design/registrations/json_dump/JSONDumpOptionsForm.js @@ -12,7 +12,7 @@ import { } from 'components/admin/forms/ValidationErrors'; import {getChoicesFromSchema} from 'utils/json-schema'; -import {FormVariablesSelect, RelativeAPIEndpoint, ServiceSelect} from './fields'; +import {FormVariablesSelect, Path, ServiceSelect} from './fields'; const JSONDumpOptionsForm = ({name, label, schema, formData, onChange}) => { const validationErrors = useContext(ValidationErrorContext); @@ -48,7 +48,7 @@ const JSONDumpOptionsForm = ({name, label, schema, formData, onChange}) => { } initialFormData={{ service: null, - relativeApiEndpoint: '', + path: '', formVariables: [], ...formData, }} @@ -58,7 +58,7 @@ const JSONDumpOptionsForm = ({name, label, schema, formData, onChange}) => {
- +
@@ -79,7 +79,7 @@ JSONDumpOptionsForm.propTypes = { }).isRequired, formData: PropTypes.shape({ service: PropTypes.number, - relativeApiEndpoint: PropTypes.string, + path: PropTypes.string, // TODO-4908: might need to rename this to selectedFormVariables to avoid confusion or even // naming conflicts formVariables: PropTypes.arrayOf(PropTypes.string), diff --git a/src/openforms/js/components/admin/form_design/registrations/json_dump/fields/RelativeAPIEndpoint.js b/src/openforms/js/components/admin/form_design/registrations/json_dump/fields/Path.js similarity index 51% rename from src/openforms/js/components/admin/form_design/registrations/json_dump/fields/RelativeAPIEndpoint.js rename to src/openforms/js/components/admin/form_design/registrations/json_dump/fields/Path.js index 36a0700324..0f7ca403ff 100644 --- a/src/openforms/js/components/admin/form_design/registrations/json_dump/fields/RelativeAPIEndpoint.js +++ b/src/openforms/js/components/admin/form_design/registrations/json_dump/fields/Path.js @@ -6,22 +6,22 @@ import Field from 'components/admin/forms/Field'; import FormRow from 'components/admin/forms/FormRow'; import {TextInput} from 'components/admin/forms/Inputs'; -const RelativeAPIEndpoint = () => { - const [fieldProps] = useField('relativeApiEndpoint'); +const Path = () => { + const [fieldProps] = useField('path'); return ( } helpText={ } > @@ -31,4 +31,4 @@ const RelativeAPIEndpoint = () => { ); }; -export default RelativeAPIEndpoint; +export default Path; diff --git a/src/openforms/js/components/admin/form_design/registrations/json_dump/fields/index.js b/src/openforms/js/components/admin/form_design/registrations/json_dump/fields/index.js index f0d78829b4..2b2cab17e5 100644 --- a/src/openforms/js/components/admin/form_design/registrations/json_dump/fields/index.js +++ b/src/openforms/js/components/admin/form_design/registrations/json_dump/fields/index.js @@ -1,5 +1,5 @@ import FormVariablesSelect from './FormVariablesSelect'; -import RelativeAPIEndpoint from './RelativeAPIEndpoint'; +import Path from './Path'; import ServiceSelect from './ServiceSelect'; -export {FormVariablesSelect, RelativeAPIEndpoint, ServiceSelect}; +export {FormVariablesSelect, Path, ServiceSelect}; diff --git a/src/openforms/js/components/admin/form_design/variables/VariablesEditor.stories.js b/src/openforms/js/components/admin/form_design/variables/VariablesEditor.stories.js index 7833fa768b..26c4ff6b04 100644 --- a/src/openforms/js/components/admin/form_design/variables/VariablesEditor.stories.js +++ b/src/openforms/js/components/admin/form_design/variables/VariablesEditor.stories.js @@ -663,7 +663,7 @@ export const WithJSONDumpRegistrationBackend = { name: 'JSON dump registration', options: { service: 2, - relativeApiEndpoint: 'test', + path: 'test', formVariables: ['aSingleFile', 'now'], }, }, diff --git a/src/openforms/registrations/contrib/json_dump/config.py b/src/openforms/registrations/contrib/json_dump/config.py index 407d15e098..0b30938e8c 100644 --- a/src/openforms/registrations/contrib/json_dump/config.py +++ b/src/openforms/registrations/contrib/json_dump/config.py @@ -1,4 +1,4 @@ -from typing import Required, TypedDict +from typing import TypedDict from django.core.exceptions import ValidationError from django.utils.translation import gettext_lazy as _ @@ -31,14 +31,10 @@ class JSONDumpOptionsSerializer(JsonSchemaSerializerMixin, serializers.Serialize help_text=_("Which service to use."), required=True, ) - # TODO-4908: show the complete API endpoint as a (tooltip) hint after user entry? - # Might be a front-end thing... - relative_api_endpoint = serializers.CharField( + path = serializers.CharField( max_length=255, - label=_("Relative API endpoint"), - help_text=_( - "The API endpoint to send the data to (relative to the service API root)." - ), + label=_("Path"), + help_text=_("Path relative to the Service API root."), allow_blank=True, required=False, default="", @@ -64,5 +60,5 @@ class JSONDumpOptions(TypedDict): """ service: Service - relative_api_endpoint: str + path: str form_variables: list[str] diff --git a/src/openforms/registrations/contrib/json_dump/plugin.py b/src/openforms/registrations/contrib/json_dump/plugin.py index 0e864c010c..18020edf08 100644 --- a/src/openforms/registrations/contrib/json_dump/plugin.py +++ b/src/openforms/registrations/contrib/json_dump/plugin.py @@ -14,6 +14,7 @@ SubmissionValueVariable, ) from openforms.typing import JSONObject +from openforms.variables.constants import FormVariableSources from ...base import BasePlugin # openforms.registrations.base from ...registry import register # openforms.registrations.registry @@ -63,7 +64,7 @@ def register_submission( service = options["service"] submission.registration_result = result = {} with build_client(service) as client: - if ".." in (path := options["relative_api_endpoint"]): + if ".." in (path := options["path"]): raise SuspiciousOperation("Possible path traversal detected") res = client.post(path, json=data) @@ -88,8 +89,12 @@ def process_variables(submission: Submission, values: JSONObject): for key in values.keys(): variable = state.variables.get(key) - if variable is None: - # None for static variables + if ( + variable is None + or variable.form_variable.source == FormVariableSources.user_defined + ): + # None for static variables, and processing user defined variables is + # not relevant here continue component = get_component(variable) diff --git a/src/openforms/registrations/contrib/json_dump/tests/test_backend.py b/src/openforms/registrations/contrib/json_dump/tests/test_backend.py index dc637e86f5..45777a314d 100644 --- a/src/openforms/registrations/contrib/json_dump/tests/test_backend.py +++ b/src/openforms/registrations/contrib/json_dump/tests/test_backend.py @@ -57,7 +57,7 @@ def test_submission_with_json_dump_backend(self): json_form_options = dict( service=(ServiceFactory(api_root="http://localhost:80/")), - relative_api_endpoint="json_plugin", + path="json_plugin", form_variables=["firstName", "file", "auth_bsn"], ) json_plugin = JSONDumpRegistration("json_registration_plugin") @@ -109,7 +109,7 @@ def test_exception_raised_when_service_returns_unexpected_status_code(self): json_form_options = dict( service=(ServiceFactory(api_root="http://localhost:80/")), - relative_api_endpoint="fake_endpoint", + path="fake_endpoint", form_variables=["firstName", "auth_bsn"], ) json_plugin = JSONDumpRegistration("json_registration_plugin") @@ -135,7 +135,7 @@ def test_multiple_file_uploads(self): "name": "file2.txt", "type": "application/text", "originalName": "file2.txt", - } + }, ], }, ) @@ -162,7 +162,7 @@ def test_multiple_file_uploads(self): json_form_options = dict( service=(ServiceFactory(api_root="http://localhost:80/")), - relative_api_endpoint="json_plugin", + path="json_plugin", form_variables=["file"], ) json_plugin = JSONDumpRegistration("json_registration_plugin")