Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: parametric ebios radar #1379

Merged
merged 11 commits into from
Jan 24, 2025
4 changes: 4 additions & 0 deletions backend/global_settings/serializers.py
Original file line number Diff line number Diff line change
@@ -4,6 +4,10 @@

GENERAL_SETTINGS_KEYS = [
"security_objective_scale",
"ebios_radar_max",
"ebios_radar_green_zone_radius",
"ebios_radar_yellow_zone_radius",
"ebios_radar_red_zone_radius",
]


26 changes: 25 additions & 1 deletion backend/global_settings/views.py
Original file line number Diff line number Diff line change
@@ -61,7 +61,15 @@ def get_object(self):
def object(self, request, pk=None):
GlobalSettings.objects.get_or_create(
name="general",
defaults={"value": {"security_objective_scale": "1-4"}},
defaults={
"value": {
"security_objective_scale": "1-4",
"ebios_radar_max": 6,
"ebios_radar_green_zone_radius": 0.2,
"ebios_radar_yellow_zone_radius": 0.9,
"ebios_radar_red_zone_radius": 2.5,
}
},
)
return Response(GeneralSettingsSerializer(self.get_object()).data.get("value"))

@@ -74,6 +82,22 @@ def security_objective_scale(self, request):
}
return Response(choices)

@action(detail=True, name="Get ebios rm radar parameters")
def ebios_radar_parameters(self, request):
ebios_rm_parameters = {
"ebios_radar_max": self.get_object().value.get("ebios_radar_max"),
"ebios_radar_green_zone_radius": self.get_object().value.get(
"ebios_radar_green_zone_radius"
),
"ebios_radar_yellow_zone_radius": self.get_object().value.get(
"ebios_radar_yellow_zone_radius"
),
"ebios_radar_red_zone_radius": self.get_object().value.get(
"ebios_radar_red_zone_radius"
),
}
return Response(ebios_rm_parameters)

Comment on lines +89 to +104
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Endpoint clarity for eBios radar parameters.

This action method clearly fetches only the relevant radar settings. Consider adding default fallback values (e.g., get("ebios_radar_max", 0)) or explicit error handling for missing keys, ensuring robust responses in every scenario.


@api_view(["GET"])
@permission_classes([permissions.AllowAny])
7 changes: 6 additions & 1 deletion frontend/messages/en.json
Original file line number Diff line number Diff line change
@@ -1128,5 +1128,10 @@
"missingLibrariesInImport": "Some libraries are missing, see the list above",
"yes": "Yes",
"no": "No",
"updateAvailable": "Update available"
"updateAvailable": "Update available",
"ebiosRadarParameters": "Ebios RM radar parameters",
"max": "Max",
"greenZoneRadius": "Green zone radius",
"yellowZoneRadius": "Yellow zone radius",
"redZoneRadius": "Red zone radius"
}
Original file line number Diff line number Diff line change
@@ -1,21 +1,69 @@
<script lang="ts">
import Select from '../Select.svelte';
import NumberField from '../NumberField.svelte';
import * as m from '$paraglide/messages';
import type { CacheLock, ModelInfo } from '$lib/utils/types';
import type { SuperForm } from 'sveltekit-superforms';
import { Accordion, AccordionItem } from '@skeletonlabs/skeleton';

export let form: SuperForm<any>;
export let model: ModelInfo;
export let cacheLocks: Record<string, CacheLock> = {};
export let formDataCache: Record<string, any> = {};
</script>

<Select
{form}
field="security_objective_scale"
cacheLock={cacheLocks['security_objective_scale']}
bind:cachedValue={formDataCache['security_objective_scale']}
options={model.selectOptions['security_objective_scale']}
helpText={m.securityObjectiveScaleHelpText()}
label={m.securityObjectiveScale()}
/>
<Accordion regionControl="font-bold">
<AccordionItem open>
<svelte:fragment slot="summary"><i class="fa-solid fa-gem mr-2"></i>{m.asset()}</svelte:fragment
>
<svelte:fragment slot="content">
<Select
{form}
field="security_objective_scale"
cacheLock={cacheLocks['security_objective_scale']}
bind:cachedValue={formDataCache['security_objective_scale']}
options={model.selectOptions['security_objective_scale']}
helpText={m.securityObjectiveScaleHelpText()}
label={m.securityObjectiveScale()}
/>
</svelte:fragment>
</AccordionItem>
<AccordionItem open>
<svelte:fragment slot="summary"
><i class="fa-solid fa-gopuram mr-2"></i>{m.ebiosRadarParameters()}</svelte:fragment
>
<svelte:fragment slot="content">
<NumberField
{form}
field="ebios_radar_max"
label={m.max()}
cacheLock={cacheLocks['ebios_radar_max']}
bind:cachedValue={formDataCache['ebios_radar_max']}
/>
<NumberField
{form}
field="ebios_radar_green_zone_radius"
label={m.greenZoneRadius()}
step={0.1}
cacheLock={cacheLocks['ebios_radar_green_zone_radius']}
bind:cachedValue={formDataCache['ebios_radar_green_zone_radius']}
/>
<NumberField
{form}
field="ebios_radar_yellow_zone_radius"
label={m.yellowZoneRadius()}
step={0.1}
cacheLock={cacheLocks['ebios_radar_yellow_zone_radius']}
bind:cachedValue={formDataCache['ebios_radar_yellow_zone_radius']}
/>
<NumberField
{form}
field="ebios_radar_red_zone_radius"
label={m.redZoneRadius()}
step={0.1}
cacheLock={cacheLocks['ebios_radar_red_zone_radius']}
bind:cachedValue={formDataCache['ebios_radar_red_zone_radius']}
/>
</svelte:fragment>
</AccordionItem>
</Accordion>
2 changes: 2 additions & 0 deletions frontend/src/lib/components/Forms/NumberField.svelte
Original file line number Diff line number Diff line change
@@ -6,6 +6,7 @@
let _class = '';
export { _class as class };
export let label: string | undefined = undefined;
export let step: number = 1;
export let field: string;
export let helpText: string | undefined = undefined;
export let cachedValue: string | undefined;
@@ -57,6 +58,7 @@
<div class="control">
<input
type="number"
{step}
class="{'input ' + _class} {classesTextField($errors)}"
data-testid="form-input-{field.replaceAll('_', '-')}"
name={field}
6 changes: 5 additions & 1 deletion frontend/src/lib/utils/schemas.ts
Original file line number Diff line number Diff line change
@@ -290,7 +290,11 @@ export const EvidenceSchema = z.object({
});

export const GeneralSettingsSchema = z.object({
security_objective_scale: z.string()
security_objective_scale: z.string(),
ebios_radar_max: z.number().int().default(6),
ebios_radar_green_zone_radius: z.number().default(0.2),
ebios_radar_yellow_zone_radius: z.number().default(0.9),
ebios_radar_red_zone_radius: z.number().default(2.5)
});

export const SSOSettingsSchema = z.object({
Loading