diff --git a/src/components/models/base/service.ts b/src/components/models/base/service.ts index c26058c43..45a20036e 100644 --- a/src/components/models/base/service.ts +++ b/src/components/models/base/service.ts @@ -299,6 +299,9 @@ export type UpdateConfig = { /** Custom delimiter definition */ custom_delimiter?: string; + /** Default pattern for finding signatures*/ + default_pattern: string + /** Does the updater produce signatures? */ generates_signatures: boolean; diff --git a/src/components/routes/admin/service_detail/source_dialog.tsx b/src/components/routes/admin/service_detail/source_dialog.tsx index 8143743b9..5cc4576eb 100644 --- a/src/components/routes/admin/service_detail/source_dialog.tsx +++ b/src/components/routes/admin/service_detail/source_dialog.tsx @@ -52,7 +52,7 @@ const WrappedSourceDialog = ({ open, setOpen, source = null, defaults, onSave }: { const { t } = useTranslation(['adminServices']); + const { c12nDef } = useALContext(); const [dialog, setDialog] = useState(false); const [editDialog, setEditDialog] = useState(false); const [editedSourceID, setEditedSourceID] = useState(-1); @@ -365,7 +367,17 @@ const ServiceUpdater = ({ service, defaults, setService, setModified }: ServiceU - + diff --git a/src/components/routes/manage/signature_sources.tsx b/src/components/routes/manage/signature_sources.tsx index 187cca008..65261156e 100644 --- a/src/components/routes/manage/signature_sources.tsx +++ b/src/components/routes/manage/signature_sources.tsx @@ -139,11 +139,18 @@ const queueSourceUpdate = (source: UpdateSource) => ({ type SourceDetailDrawerProps = { service: string; base: UpdateSource; + defaults: UpdateSource; generatesSignatures: UpdateConfig['generates_signatures']; onClose?: () => void; }; -const WrappedSourceDetailDrawer = ({ service, base, onClose, generatesSignatures }: SourceDetailDrawerProps) => { +const WrappedSourceDetailDrawer = ({ + service, + base, + defaults, + onClose, + generatesSignatures +}: SourceDetailDrawerProps) => { const { t } = useTranslation(['manageSignatureSources']); const theme = useTheme(); const { apiCall } = useMyAPI(); @@ -168,13 +175,13 @@ const WrappedSourceDetailDrawer = ({ service, base, onClose, generatesSignatures const saveChanges = () => { apiCall({ - method: base ? 'POST' : 'PUT', - url: base + method: base?.name ? 'POST' : 'PUT', + url: base?.name ? `/api/v4/signature/sources/${service}/${encodeURIComponent(source.name)}/` : `/api/v4/signature/sources/${service}/`, body: source, onSuccess: () => { - showSuccessMessage(t(base ? 'change.success' : 'add.success')); + showSuccessMessage(t(base?.name ? 'change.success' : 'add.success')); setModified(false); if (!base || !isXL) onClose(); setTimeout(() => window.dispatchEvent(new CustomEvent('reloadUpdateSources')), 1000); @@ -324,8 +331,8 @@ const WrappedSourceDetailDrawer = ({ service, base, onClose, generatesSignatures { +const ServiceDetail = ({ + service, + sources, + generatesSignatures, + updateIntervalSeconds, + defaultPattern +}: ServiceDetailProps) => { const { t } = useTranslation(['manageSignatureSources']); const theme = useTheme(); const classes = useStyles(); + const { c12nDef } = useALContext(); const { apiCall } = useMyAPI(); const { closeGlobalDrawer, setGlobalDrawer } = useDrawer(); const { showSuccessMessage } = useMySnackbar(); @@ -527,11 +543,12 @@ const ServiceDetail = ({ service, sources, generatesSignatures }: ServiceDetailP }); }; - const openDrawer = useCallback((currentService: string, source) => { + const openDrawer = useCallback((currentService: string, source, defaults) => { setGlobalDrawer( @@ -561,7 +578,22 @@ const ServiceDetail = ({ service, sources, generatesSignatures }: ServiceDetailP color: theme.palette.mode === 'dark' ? theme.palette.success.light : theme.palette.success.dark, margin: '-4px 0' }} - onClick={() => openDrawer(service, null)} + onClick={() => + openDrawer( + service, + { + ...DEFAULT_SOURCE, + update_interval: updateIntervalSeconds, + default_classification: c12nDef.UNRESTRICTED, + pattern: defaultPattern + }, + { + update_interval: updateIntervalSeconds, + default_classification: c12nDef.UNRESTRICTED, + pattern: defaultPattern + } + ) + } size="large" > @@ -610,7 +642,7 @@ const ServiceDetail = ({ service, sources, generatesSignatures }: ServiceDetailP key={id} source={source} service={service} - onClick={() => openDrawer(service, source)} + onClick={() => openDrawer(service, source, source)} generatesSignatures={generatesSignatures} /> )) @@ -623,7 +655,18 @@ const ServiceDetail = ({ service, sources, generatesSignatures }: ServiceDetailP ), - [classes.title, generatesSignatures, open, openDrawer, service, sources, t, theme, triggerSourceUpdateAll] + [ + classes.title, + generatesSignatures, + open, + openDrawer, + service, + sources, + t, + theme, + triggerSourceUpdateAll, + updateIntervalSeconds + ] ); }; @@ -674,6 +717,8 @@ export default function SignatureSources() { service={key} sources={sources[key].sources} generatesSignatures={sources[key].generates_signatures} + updateIntervalSeconds={sources[key].update_interval_seconds} + defaultPattern={sources[key].default_pattern} /> )) : [...Array(2)].map((item, i) => (