From 3ac26ebf13d5f5f862fa252b4e6fb80bc71ac683 Mon Sep 17 00:00:00 2001 From: Ryan Mathis Date: Fri, 27 Aug 2021 07:27:25 -0700 Subject: [PATCH] Fixed message for regex matching --- backend/src/main/resources/i18n/messages.properties | 2 +- ui/src/app/form/component/fields/FilterTargetField.js | 2 +- .../definition/DynamicHttpMetadataProviderDefinition.js | 4 ++-- .../FileBackedHttpMetadataProviderDefinition.js | 4 ++-- .../domain/source/definition/SourceDefinition.js | 9 ++++++--- ui/src/app/metadata/editor/MetadataEditor.js | 4 ++-- ui/src/app/metadata/editor/MetadataFilterEditor.js | 4 ++-- ui/src/app/metadata/hoc/MetadataSchema.js | 7 +++++++ ui/src/app/metadata/wizard/MetadataProviderWizard.js | 4 ++-- ui/src/app/metadata/wizard/MetadataSourceWizard.js | 4 ++-- 10 files changed, 27 insertions(+), 17 deletions(-) diff --git a/backend/src/main/resources/i18n/messages.properties b/backend/src/main/resources/i18n/messages.properties index a5cab3353..112287d87 100644 --- a/backend/src/main/resources/i18n/messages.properties +++ b/backend/src/main/resources/i18n/messages.properties @@ -503,7 +503,7 @@ message.delete-group-body=You are requesting to delete a group. If you complete message.delete-attribute-title=Delete Attribute? message.delete-attribute-body=You are requesting to delete a custom attribute. If you complete this process the attribute will be removed. This cannot be undone. Do you wish to continue? -message.group-pattern-fail=Pattern must match group url validation pattern. +message.group-pattern-fail=Pattern must match group url validation pattern: {regex} message.must-be-unique=Must be unique. message.must-be-number=Must be a number. diff --git a/ui/src/app/form/component/fields/FilterTargetField.js b/ui/src/app/form/component/fields/FilterTargetField.js index 9aaf84b97..d639175bb 100644 --- a/ui/src/app/form/component/fields/FilterTargetField.js +++ b/ui/src/app/form/component/fields/FilterTargetField.js @@ -197,7 +197,7 @@ const FilterTargetField = ({ : - + Invalid URL diff --git a/ui/src/app/metadata/domain/provider/definition/DynamicHttpMetadataProviderDefinition.js b/ui/src/app/metadata/domain/provider/definition/DynamicHttpMetadataProviderDefinition.js index af15a7c02..901a613c8 100644 --- a/ui/src/app/metadata/domain/provider/definition/DynamicHttpMetadataProviderDefinition.js +++ b/ui/src/app/metadata/domain/provider/definition/DynamicHttpMetadataProviderDefinition.js @@ -9,7 +9,7 @@ export const DynamicHttpMetadataProviderWizard = { label: 'DynamicHttpMetadataProvider', type: 'DynamicHttpMetadataResolver', schema: `${API_BASE_PATH}/ui/MetadataResolver/DynamicHttpMetadataResolver`, - validator: (data = [], current = { resourceId: null }, group) => { + validator: (data = [], current = { resourceId: null }, group, translator) => { const base = BaseProviderDefinition.validator(data, current, group); const pattern = group?.validationRegex ? new RegExp(group?.validationRegex) : null; @@ -26,7 +26,7 @@ export const DynamicHttpMetadataProviderWizard = { if (formData?.metadataRequestURLConstructionScheme['@type'] === 'MetadataQueryProtocol') { if (pattern && !pattern.test(formData?.metadataRequestURLConstructionScheme?.content)) { - errors?.metadataRequestURLConstructionScheme?.content?.addError('message.group-pattern-fail'); + errors?.metadataRequestURLConstructionScheme?.content?.addError(translator('message.group-pattern-fail', { regex: group?.validationRegex })); } } diff --git a/ui/src/app/metadata/domain/provider/definition/FileBackedHttpMetadataProviderDefinition.js b/ui/src/app/metadata/domain/provider/definition/FileBackedHttpMetadataProviderDefinition.js index 2c37d52c3..489b24cc8 100644 --- a/ui/src/app/metadata/domain/provider/definition/FileBackedHttpMetadataProviderDefinition.js +++ b/ui/src/app/metadata/domain/provider/definition/FileBackedHttpMetadataProviderDefinition.js @@ -8,7 +8,7 @@ export const FileBackedHttpMetadataProviderWizard = { label: 'FileBackedHttpMetadataProvider', type: 'FileBackedHttpMetadataResolver', schema: '/assets/schema/provider/filebacked-http.schema.json', - validator: (data = [], current = { resourceId: null }, group) => { + validator: (data = [], current = { resourceId: null }, group, translator) => { const base = BaseProviderDefinition.validator(data, current, group); const pattern = group?.validationRegex ? new RegExp(group?.validationRegex) : null; @@ -17,7 +17,7 @@ export const FileBackedHttpMetadataProviderWizard = { const errorList = base(formData, errors); if (formData?.metadataURL) { if (pattern && !pattern.test(formData?.metadataURL)) { - errors?.metadataURL?.addError('message.group-pattern-fail'); + errors?.metadataURL?.addError(translator('message.group-pattern-fail', { regex: group?.validationRegex })); } } diff --git a/ui/src/app/metadata/domain/source/definition/SourceDefinition.js b/ui/src/app/metadata/domain/source/definition/SourceDefinition.js index fcabbd1d0..40a331bae 100644 --- a/ui/src/app/metadata/domain/source/definition/SourceDefinition.js +++ b/ui/src/app/metadata/domain/source/definition/SourceDefinition.js @@ -19,19 +19,22 @@ export const SourceBase = { display: (changes) => changes, - validator: (data = [], current = {id: null}, group) => { + validator: (data = [], current = {id: null}, group, translator) => { const sources = current ? data.filter(s => s.id !== current.id) : data; const entityIds = sources.map(s => s.entityId); const pattern = group?.validationRegex ? new RegExp(group?.validationRegex) : null; return (formData, errors) => { + + console.log(errors) + if (entityIds.indexOf(formData.entityId) > -1) { errors.entityId.addError('message.id-unique'); } if (pattern && !pattern.test(formData.entityId)) { - errors.entityId.addError('message.group-pattern-fail'); + errors.entityId.addError(translator('message.group-pattern-fail', {regex: group?.validationRegex})); } if (formData?.serviceProviderSsoDescriptor?.nameIdFormats?.length > 0 && !formData.serviceProviderSsoDescriptor.protocolSupportEnum) { @@ -41,7 +44,7 @@ export const SourceBase = { if (Array.isArray(formData?.assertionConsumerServices)) { formData.assertionConsumerServices.forEach((acs, idx) => { if (!isNil(acs?.locationUrl) && !pattern.test(acs.locationUrl)) { - errors.assertionConsumerServices[idx].locationUrl.addError('message.group-pattern-fail') + errors.assertionConsumerServices[idx].locationUrl.addError(translator('message.group-pattern-fail', { regex: group?.validationRegex })) } }); } diff --git a/ui/src/app/metadata/editor/MetadataEditor.js b/ui/src/app/metadata/editor/MetadataEditor.js index b8ee9f14a..0c8757d97 100644 --- a/ui/src/app/metadata/editor/MetadataEditor.js +++ b/ui/src/app/metadata/editor/MetadataEditor.js @@ -7,7 +7,7 @@ import Alert from 'react-bootstrap/Alert'; import Translate from '../../i18n/components/translate'; import { MetadataFormContext, setFormDataAction, setFormErrorAction } from '../hoc/MetadataFormContext'; -import { MetadataDefinitionContext, MetadataSchemaContext } from '../hoc/MetadataSchema'; +import { MetadataDefinitionContext, MetadataSchemaContext, useMetadataDefinitionValidator } from '../hoc/MetadataSchema'; import { MetadataEditorForm } from './MetadataEditorForm'; import { MetadataEditorNav } from './MetadataEditorNav'; @@ -79,7 +79,7 @@ export function MetadataEditor ({ current }) { const [blocking, setBlocking] = React.useState(false); - const validator = definition.validator(data, current, group); + const validator = useMetadataDefinitionValidator(data, current, group); const warnings = definition.warnings && definition.warnings(metadata); diff --git a/ui/src/app/metadata/editor/MetadataFilterEditor.js b/ui/src/app/metadata/editor/MetadataFilterEditor.js index 44e8f9cba..2fe4f9ca9 100644 --- a/ui/src/app/metadata/editor/MetadataFilterEditor.js +++ b/ui/src/app/metadata/editor/MetadataFilterEditor.js @@ -6,7 +6,7 @@ import Alert from 'react-bootstrap/Alert'; import Translate from '../../i18n/components/translate'; import { MetadataFormContext, setFormDataAction, setFormErrorAction } from '../hoc/MetadataFormContext'; -import { MetadataDefinitionContext, MetadataSchemaContext } from '../hoc/MetadataSchema'; +import { MetadataDefinitionContext, MetadataSchemaContext, useMetadataDefinitionValidator } from '../hoc/MetadataSchema'; import { MetadataEditorForm } from './MetadataEditorForm'; import { MetadataEditorNav } from './MetadataEditorNav'; @@ -34,7 +34,7 @@ export function MetadataFilterEditor({children, onNavigate, block}) { block(checkChanges(metadata, changes.formData)); }; - const validator = definition.validator(data, current, group); + const validator = useMetadataDefinitionValidator(data, current, group); const warnings = definition.warnings && definition.warnings(metadata); diff --git a/ui/src/app/metadata/hoc/MetadataSchema.js b/ui/src/app/metadata/hoc/MetadataSchema.js index c8a8365ee..6ee801c28 100644 --- a/ui/src/app/metadata/hoc/MetadataSchema.js +++ b/ui/src/app/metadata/hoc/MetadataSchema.js @@ -1,6 +1,7 @@ import React from 'react'; import { getDefinition, getWizard } from '../domain/index'; import useFetch from 'use-http'; +import { useTranslator } from '../../i18n/hooks'; export const MetadataSchemaContext = React.createContext(); export const MetadataDefinitionContext = React.createContext(); @@ -47,6 +48,12 @@ export function useMetadataDefinitionContext() { return React.useContext(MetadataDefinitionContext); } +export function useMetadataDefinitionValidator(data, current, group) { + const definition = useMetadataDefinitionContext(); + const translator = useTranslator(); + return definition.validator(data, current, group, translator); +} + //getConfigurationSections export default MetadataSchema; \ No newline at end of file diff --git a/ui/src/app/metadata/wizard/MetadataProviderWizard.js b/ui/src/app/metadata/wizard/MetadataProviderWizard.js index bbcca848b..8004f85f7 100644 --- a/ui/src/app/metadata/wizard/MetadataProviderWizard.js +++ b/ui/src/app/metadata/wizard/MetadataProviderWizard.js @@ -2,7 +2,7 @@ import React from 'react'; import { WizardNav } from './WizardNav'; import { MetadataWizardForm } from './MetadataWizardForm'; import { setWizardIndexAction, useCurrentIndex, useIsLastPage, useWizardDispatcher } from './Wizard'; -import { useMetadataDefinitionContext, useMetadataSchemaContext } from '../hoc/MetadataSchema'; +import { useMetadataDefinitionContext, useMetadataDefinitionValidator, useMetadataSchemaContext } from '../hoc/MetadataSchema'; import { checkChanges, useMetadataSchema } from '../hooks/schema'; import { useMetadataFormDispatcher, setFormDataAction, setFormErrorAction, useMetadataFormData, useMetadataFormErrors } from '../hoc/MetadataFormContext'; import { MetadataConfiguration } from '../component/MetadataConfiguration'; @@ -53,7 +53,7 @@ export function MetadataProviderWizard({onRestart}) { // console.log(form); } - const validator = definition.validator(data, null, group); + const validator = useMetadataDefinitionValidator(data, null, group); async function save() { const body = removeNull(definition.parser(metadata), true); diff --git a/ui/src/app/metadata/wizard/MetadataSourceWizard.js b/ui/src/app/metadata/wizard/MetadataSourceWizard.js index 6da398350..d9ede4e9d 100644 --- a/ui/src/app/metadata/wizard/MetadataSourceWizard.js +++ b/ui/src/app/metadata/wizard/MetadataSourceWizard.js @@ -8,7 +8,7 @@ import Col from 'react-bootstrap/Col'; import { WizardNav } from './WizardNav'; import { MetadataWizardForm } from './MetadataWizardForm'; import { setWizardIndexAction, useCurrentIndex, useIsFirstPage, useIsLastPage, useWizardDispatcher } from './Wizard'; -import { useMetadataDefinitionContext, useMetadataSchemaContext } from '../hoc/MetadataSchema'; +import { useMetadataDefinitionContext, useMetadataSchemaContext, useMetadataDefinitionValidator } from '../hoc/MetadataSchema'; import { useMetadataFormDispatcher, setFormDataAction, setFormErrorAction, useMetadataFormData, useMetadataFormErrors } from '../hoc/MetadataFormContext'; import { MetadataConfiguration } from '../component/MetadataConfiguration'; import { Configuration } from '../hoc/Configuration'; @@ -74,7 +74,7 @@ export function MetadataSourceWizard ({ onShowNav }) { const [blocking, setBlocking] = React.useState(false); - const validator = definition.validator(data, null, group); + const validator = useMetadataDefinitionValidator(data, null, group); const warnings = definition.warnings && definition.warnings(metadata); return (