diff --git a/.gitignore b/.gitignore index aceaa0b7e..797fbf22c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ *.DS_Store *~$* .env +.venv venv **/node_modules/ .vscode diff --git a/backend/ciso_assistant/settings.py b/backend/ciso_assistant/settings.py index 95cf91f0d..bd0a74f51 100644 --- a/backend/ciso_assistant/settings.py +++ b/backend/ciso_assistant/settings.py @@ -114,7 +114,9 @@ def set_ciso_assistant_url(_, __, event_dict): logger.info("DEBUG mode: %s", DEBUG) logger.info("CISO_ASSISTANT_URL: %s", CISO_ASSISTANT_URL) # ALLOWED_HOSTS should contain the backend address -ALLOWED_HOSTS = os.environ.get("ALLOWED_HOSTS", "localhost,127.0.0.1").split(",") +ALLOWED_HOSTS = os.environ.get( + "ALLOWED_HOSTS", "localhost,127.0.0.1,host.docker.internal" +).split(",") logger.info("ALLOWED_HOSTS: %s", ALLOWED_HOSTS) CSRF_TRUSTED_ORIGINS = [CISO_ASSISTANT_URL] LOCAL_STORAGE_DIRECTORY = os.environ.get( diff --git a/frontend/messages/en.json b/frontend/messages/en.json index 29d10f325..b6de1b0af 100644 --- a/frontend/messages/en.json +++ b/frontend/messages/en.json @@ -1084,6 +1084,37 @@ "human": "Human", "material": "Material", "environmental": "Environmental", + "guidedTour": "Guided tour", + "tourWelcomeTitle": "Welcome!", + "tourWelcomeDescription": "Let's take a tour of the main features to get you started.", + "tourHelpButtonDescription": "You can always restart this tour by clicking this button.", + "tourOrganizationTitle": "Organization", + "tourOrganizationDescription": "This is where you will define the hierarchy and perimeters of your organization. Click on it.", + "tourDomainsDescription": "Domains allow you to isolate your objects using the associated roles. You will need at least one. Click on it.", + "tourDomainAddDescription": "This where you will be able to create a new domain.", + "tourProjectsDescription": "Projects are functional perimeters within a domain. You will need at least one. Click on it.", + "tourProjectAddDescription": "This is where you will be able to create a project.", + "tourCatalogTitle": "Catalog Overview", + "tourCatalogDescription": "The catalog is where you will be able to import frameworks, threats, matrices and other predifined objects", + "tourCatalogBrowseDescription": "You will be able to browse the loaded objects per category and import new ones. Click on it.", + "tourFrameworksTitle": "Frameworks", + "tourFrameworksDescription": "View and manage compliance frameworks. You will need at least one to initiate an audit. Click on it.", + "tourFrameworkAddDescription": "This where you will be able to import new frameworks.", + "tourRiskMatricesTitle": "Risk Matrices", + "tourRiskMatricesDescription": "View and manage risk matrices. You will need at least one to initiate a risk assessment. Click on it.", + "tourMatricesAddDescription": "This is where you will be able to import new matrices.", + "tourComplianceDescription": "This where will be able to manage your compliance activities. Click on it.", + "tourAuditsTitle": "Audits", + "tourAuditsDescription": "This is where you will be able to drive and track your audits and baselines", + "tourRiskDescription": "This is where you will be able to manage your risk analysis and registry. Click on it.", + "tourRiskAssessmentTitle": "Risk Assessment", + "tourRiskAssessmentDescription": "Group and manage your analysis through risk assessments.", + "tourAnalyticsTitle": "Analytics", + "tourAnalyticsDescription": "The overview section cover your main dashboards and analytics.", + "tourAnalyticsViewDescription": "View the aggregated analytics and reports here.", + "tourAssignmentsDescription": "or track your indivdual assignements and tasks here.", + "tourHelpFinalTitle": "Help & Tour", + "tourHelpFinalDescription": "Remember, you can always restart the tour from here!", "documentationScore": "Documentation score", "implementationScore": "Implementation score", "useDocumentationScore": "Use documentation score", diff --git a/frontend/messages/fr.json b/frontend/messages/fr.json index 247401b1e..07c908731 100644 --- a/frontend/messages/fr.json +++ b/frontend/messages/fr.json @@ -1084,6 +1084,37 @@ "human": "Humain", "material": "Matériel", "environmental": "Environnemental", + "guidedTour": "Visite guidée", + "tourWelcomeTitle": "Bienvenue !", + "tourWelcomeDescription": "Faisons un tour des principales fonctionnalités pour vous aider à démarrer.", + "tourHelpButtonDescription": "Vous pouvez toujours redémarrer cette visite via ce bouton.", + "tourOrganizationTitle": "Organisation", + "tourOrganizationDescription": "C'est ici que vous définirez la hiérarchie et les périmètres de votre organisation. Cliquez dessus.", + "tourDomainsDescription": "Les domaines vous permettent d'isoler vos objets en utilisant les rôles associés. Vous en aurez besoin d'au moins un. Cliquez dessus.", + "tourDomainAddDescription": "C'est ici que vous pourrez créer un nouveau domaine.", + "tourProjectsDescription": "Les projets sont des périmètres fonctionnels au sein d'un domaine. Vous en aurez besoin d'au moins un. Cliquez dessus.", + "tourProjectAddDescription": "C'est ici que vous pourrez créer un projet.", + "tourCatalogTitle": "Aperçu du Catalogue", + "tourCatalogDescription": "Le catalogue est l'endroit où vous pourrez importer des référentiels, des menaces, des matrices et d'autres objets prédéfinis", + "tourCatalogBrowseDescription": "Vous pourrez parcourir les objets chargés par catégorie et en importer de nouveaux. Cliquez dessus.", + "tourFrameworksTitle": "Référentiels", + "tourFrameworksDescription": "Consultez et gérez les référentiels de conformité. Vous en aurez besoin d'au moins un pour initier un audit. Cliquez dessus.", + "tourFrameworkAddDescription": "C'est ici que vous pourrez importer de nouveaux référentiels.", + "tourRiskMatricesTitle": "Matrices de Risques", + "tourRiskMatricesDescription": "Consultez et gérez les matrices de risques. Vous en aurez besoin d'au moins une pour initier une évaluation des risques. Cliquez dessus.", + "tourMatricesAddDescription": "C'est ici que vous pourrez importer de nouvelles matrices.", + "tourComplianceDescription": "C'est ici que vous pourrez gérer vos activités de conformité. Cliquez dessus.", + "tourAuditsTitle": "Audits", + "tourAuditsDescription": "C'est ici que vous pourrez piloter et suivre vos audits et référentiels", + "tourRiskDescription": "C'est ici que vous pourrez gérer votre analyse et registre des risques. Cliquez dessus.", + "tourRiskAssessmentTitle": "Évaluation des Risques", + "tourRiskAssessmentDescription": "Groupez et gérez vos analyses à travers des évaluations des risques.", + "tourAnalyticsTitle": "Analyses", + "tourAnalyticsDescription": "La section aperçu couvre vos principaux tableaux de bord et analyses.", + "tourAnalyticsViewDescription": "Consultez ici les analyses et rapports agrégés.", + "tourAssignmentsDescription": "ou suivez ici vos tâches et assignations individuelles.", + "tourHelpFinalTitle": "Aide & Visite", + "tourHelpFinalDescription": "Vous pouvez toujours redémarrer la visite d'ici !", "documentationScore": "Score de documentation", "implementationScore": "Score d'implémentation", "useDocumentationScore": "Utiliser le score de documentation", diff --git a/frontend/package.json b/frontend/package.json index ed41c2914..59ce3f47b 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -84,7 +84,8 @@ "@unovis/ts": "1.4.3-beta.0", "cmdk-sv": "^0.0.18", "dotenv": "^16.4.7", - "echarts": "^5.5.1", + "driver.js": "^1.3.1", + "echarts": "^5.6.0", "eslint-plugin-storybook": "^0.10.2", "globals": "^15.13.0", "svelte-multiselect": "^10.3.0", diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml index 3186d167a..8dbdb11da 100644 --- a/frontend/pnpm-lock.yaml +++ b/frontend/pnpm-lock.yaml @@ -35,9 +35,12 @@ importers: dotenv: specifier: ^16.4.7 version: 16.4.7 + driver.js: + specifier: ^1.3.1 + version: 1.3.1 echarts: - specifier: ^5.5.1 - version: 5.5.1 + specifier: ^5.6.0 + version: 5.6.0 eslint-plugin-storybook: specifier: ^0.10.2 version: 0.10.2(eslint@9.16.0(jiti@1.21.6))(typescript@5.7.2) @@ -2338,8 +2341,11 @@ packages: resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} engines: {node: '>=12'} - dunder-proto@1.0.0: - resolution: {integrity: sha512-9+Sj30DIu+4KvHqMfLUGLFYL2PkURSYMVXJyXe92nFRvlYq5hBjLEhblKB+vkd/WVlUYMWigiY07T91Fkk0+4A==} + driver.js@1.3.1: + resolution: {integrity: sha512-MvUdXbqSgEsgS/H9KyWb5Rxy0aE6BhOVT4cssi2x2XjmXea6qQfgdx32XKVLLSqTaIw7q/uxU5Xl3NV7+cN6FQ==} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} earcut@2.2.4: @@ -2351,8 +2357,8 @@ packages: ecdsa-sig-formatter@1.0.11: resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} - echarts@5.5.1: - resolution: {integrity: sha512-Fce8upazaAXUVUVsjgV6mBnGuqgO+JNDlcgF79Dksy4+wgGpQB2lmYoO4TSweFg/mZITdpGHomw/cNBJZj1icA==} + echarts@5.6.0: + resolution: {integrity: sha512-oTbVTsXfKuEhxftHqL5xprgLoc0k7uScAwtryCgWF6hPYFLRwOUHiFmHGCBKP5NPFNkDVopOieyUqYGH8Fa3kA==} effect@3.11.5: resolution: {integrity: sha512-oSzaR/S/2A/qDTnDqMWxQUNSjCG2sRLB4NEvTu+l9RqE122MTgKXOWzw0x4MHsdovRTzAihfkpgBj2aLFnH2+w==} @@ -4266,8 +4272,8 @@ packages: zod@3.24.1: resolution: {integrity: sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==} - zrender@5.6.0: - resolution: {integrity: sha512-uzgraf4njmmHAbEUxMJ8Oxg+P3fT04O+9p7gY+wJRVxo8Ge+KmYv0WJev945EH4wFuc4OY2NLXz46FZrWS9xJg==} + zrender@5.6.1: + resolution: {integrity: sha512-OFXkDJKcrlx5su2XbzJvj/34Q3m6PvyCZkVPHGYpcCJ52ek4U/ymZyfuV1nKE23AyBJ51E/6Yr0mhZ7xGTO4ag==} snapshots: @@ -6648,7 +6654,9 @@ snapshots: dotenv@16.4.7: {} - dunder-proto@1.0.0: + driver.js@1.3.1: {} + + dunder-proto@1.0.1: dependencies: call-bind-apply-helpers: 1.0.1 es-errors: 1.3.0 @@ -6662,10 +6670,10 @@ snapshots: dependencies: safe-buffer: 5.2.1 - echarts@5.5.1: + echarts@5.6.0: dependencies: tslib: 2.3.0 - zrender: 5.6.0 + zrender: 5.6.1 effect@3.11.5: dependencies: @@ -7079,7 +7087,7 @@ snapshots: get-intrinsic@1.2.5: dependencies: call-bind-apply-helpers: 1.0.1 - dunder-proto: 1.0.0 + dunder-proto: 1.0.1 es-define-property: 1.0.1 es-errors: 1.3.0 function-bind: 1.1.2 @@ -8692,6 +8700,6 @@ snapshots: zod@3.24.1: {} - zrender@5.6.0: + zrender@5.6.1: dependencies: tslib: 2.3.0 diff --git a/frontend/src/lib/components/Forms/TextField.svelte b/frontend/src/lib/components/Forms/TextField.svelte index 97ea45c96..47b7d077b 100644 --- a/frontend/src/lib/components/Forms/TextField.svelte +++ b/frontend/src/lib/components/Forms/TextField.svelte @@ -59,6 +59,7 @@ type="text" class="{'input ' + _class} {classesTextField($errors)}" data-testid="form-input-{field.replaceAll('_', '-')}" + id="form-input-{field.replaceAll('_', '-')}" name={field} aria-invalid={$errors ? 'true' : undefined} placeholder="" diff --git a/frontend/src/lib/components/ModelTable/LibraryActions.svelte b/frontend/src/lib/components/ModelTable/LibraryActions.svelte index 4a5d25404..9e61d1cce 100644 --- a/frontend/src/lib/components/ModelTable/LibraryActions.svelte +++ b/frontend/src/lib/components/ModelTable/LibraryActions.svelte @@ -66,6 +66,7 @@
{/each} + {#if URLModel === 'applied-controls'} @@ -173,15 +181,19 @@ {:else if URLModel === 'risk-matrices'} {:else if URLModel === 'frameworks'} {:else if URLModel === 'requirement-mapping-sets'} @@ -189,6 +201,7 @@ href="/libraries?objectType=requirement_mapping_set" class="inline-block p-3 btn-mini-primary w-12 focus:relative" data-testid="add-button" + id="add-button" title={m.importMappings()}> {/if} diff --git a/frontend/src/routes/(app)/(third-party)/[model=thirdparty_urlmodels]/+page.svelte b/frontend/src/routes/(app)/(third-party)/[model=thirdparty_urlmodels]/+page.svelte index 5c556e7aa..b25cc4396 100644 --- a/frontend/src/routes/(app)/(third-party)/[model=thirdparty_urlmodels]/+page.svelte +++ b/frontend/src/routes/(app)/(third-party)/[model=thirdparty_urlmodels]/+page.svelte @@ -61,6 +61,7 @@