diff --git a/backend/src/main.py b/backend/src/main.py
index 25124a0d..a6be2dc9 100644
--- a/backend/src/main.py
+++ b/backend/src/main.py
@@ -84,6 +84,64 @@ def get_device(user_agent) -> str:
return "other"
+def get_base_logs(user_agent, user_id) -> dict:
+ extras_logging = {
+ "bg_date": datetime.now().isoformat(),
+ "bg_user_id": user_id,
+ "bg_version": APP_VERSION,
+ "bg_model": MODEL_VERSION,
+ "bg_device": get_device(user_agent),
+ "bg_device_family": user_agent.device.family,
+ "bg_device_os": user_agent.os.family,
+ "bg_device_browser": user_agent.browser.family,
+ }
+ return extras_logging
+
+
+def upload_image_ovh(content: bytes, img_name: str):
+ """ Uploads an image to owh swift container basegun-public
+ path uploaded-images/WORKSPACE/img_name
+ where WORKSPACE is dev, preprod or prod
+
+ Args:
+ content (bytes): file content
+ img_name (str): name we want to give on ovh
+ """
+ num_tries = 0
+ LIMIT_TRIES = 5
+ image_path = os.path.join(CLOUD_PATH, img_name)
+ start = time.time()
+
+ if not conn:
+ logger.exception("Variables not set for using OVH swift.", extra={
+ "bg_error_type": "NameError"
+ })
+ return
+
+ while num_tries <= LIMIT_TRIES:
+ num_tries += 1
+ extras_logging = {
+ "bg_date": datetime.now().isoformat(),
+ "bg_upload_time": time.time()-start,
+ "bg_image_url": image_path
+ }
+ try:
+ conn.put_object("basegun-public",
+ f'uploaded-images/{os.environ["WORKSPACE"]}/{img_name}',
+ contents=content)
+ # if success, get out of the loop
+ logger.info("Upload to OVH successful", extra=extras_logging)
+ break
+ except Exception as e:
+ if (num_tries <= LIMIT_TRIES and e.__class__.__name__ == "ClientException"):
+ # we try uploading another time
+ time.sleep(30)
+ continue
+ else:
+ extras_logging["bg_error_type"] = e.__class__.__name__
+ logger.exception(e, extra=extras_logging)
+
+
####################
# SETUP #
####################
@@ -151,50 +209,6 @@ def get_device(user_agent) -> str:
logger.warn('Variables necessary for OVH connection not set !')
-def upload_image_ovh(content: bytes, img_name: str):
- """ Uploads an image to owh swift container basegun-public
- path uploaded-images/WORKSPACE/img_name
- where WORKSPACE is dev, preprod or prod
-
- Args:
- content (bytes): file content
- img_name (str): name we want to give on ovh
- """
- num_tries = 0
- LIMIT_TRIES = 5
- image_path = os.path.join(CLOUD_PATH, img_name)
- start = time.time()
-
- if not conn:
- logger.exception("Variables not set for using OVH swift.", extra={
- "bg_error_type": "NameError"
- })
- return
-
- while num_tries <= LIMIT_TRIES:
- num_tries += 1
- extras_logging = {
- "bg_date": datetime.now().isoformat(),
- "bg_upload_time": time.time()-start,
- "bg_image_url": image_path
- }
- try:
- conn.put_object("basegun-public",
- f'uploaded-images/{os.environ["WORKSPACE"]}/{img_name}',
- contents=content)
- # if success, get out of the loop
- logger.info("Upload to OVH successful", extra=extras_logging)
- break
- except Exception as e:
- if (num_tries <= LIMIT_TRIES and e.__class__.__name__ == "ClientException"):
- # we try uploading another time
- time.sleep(30)
- continue
- else:
- extras_logging["bg_error_type"] = e.__class__.__name__
- logger.exception(e, extra=extras_logging)
-
-
####################
# ROUTES #
####################
@@ -232,17 +246,9 @@ async def imageupload(
# prepare content logs
user_agent = parse(request.headers.get("user-agent"))
- extras_logging = {
- "bg_date": datetime.now().isoformat(),
- "bg_upload_time": round(time.time()-date, 2),
- "bg_geolocation": geolocation,
- "bg_device": get_device(user_agent),
- "bg_device_family": user_agent.device.family,
- "bg_device_os": user_agent.os.family,
- "bg_device_browser": user_agent.browser.family,
- "bg_version": APP_VERSION,
- "bg_model": MODEL_VERSION,
- }
+ extras_logging = get_base_logs(user_agent, user_id)
+ extras_logging["bg_geolocation"] = geolocation
+ extras_logging["bg_upload_time"] = round(time.time() - date, 2)
try:
img_name = str(uuid4()) + os.path.splitext(image.filename)[1]
@@ -257,7 +263,7 @@ async def imageupload(
if not user_id:
user_id = uuid4()
response.set_cookie(key="user_id", value=user_id)
- extras_logging["bg_user_id"] = user_id
+ extras_logging["bg_user_id"] = user_id
# send image to model for prediction
start = time.time()
@@ -287,25 +293,17 @@ async def imageupload(
raise HTTPException(status_code=500, detail=str(e))
-@app.post("/feedback")
+@app.post("/identification-feedback")
async def log_feedback(request: Request, user_id: Union[str, None] = Cookie(None)):
res = await request.json()
+
user_agent = parse(request.headers.get("user-agent"))
+ extras_logging = get_base_logs(user_agent, user_id)
+
+ extras_logging["bg_feedback_bool"] = res["feedback"]
+ for key in ["image_url", "label", "confidence", "confidence_level"]:
+ extras_logging["bg_"+key] = res[key]
- extras_logging = {
- "bg_date": datetime.now().isoformat(),
- "bg_image_url": res["image_url"],
- "bg_feedback_bool": res["feedback"],
- "bg_label": res["label"],
- "bg_confidence": res["confidence"],
- "bg_confidence_level": res["confidence_level"],
- "bg_user_id": user_id,
- "bg_device": get_device(user_agent),
- "bg_device_family": user_agent.device.family,
- "bg_device_os": user_agent.os.family,
- "bg_device_browser": user_agent.browser.family,
- "bg_version": APP_VERSION,
- }
logger.info("Identification feedback", extra=extras_logging)
return
@@ -313,25 +311,29 @@ async def log_feedback(request: Request, user_id: Union[str, None] = Cookie(None
@app.post("/tutorial-feedback")
async def log_tutorial_feedback(request: Request, user_id: Union[str, None] = Cookie(None)):
res = await request.json()
+
user_agent = parse(request.headers.get("user-agent"))
+ extras_logging = get_base_logs(user_agent, user_id)
+
+ for key in ["image_url", "label", "confidence", "confidence_level",
+ "tutorial_feedback", "tutorial_option", "route_name"]:
+ extras_logging["bg_"+key] = res[key]
- extras_logging = {
- "bg_date": datetime.now().isoformat(),
- "bg_image_url": res["image_url"],
- "bg_tutorial_feedback": res["tutorial_feedback"],
- "bg_label": res["label"],
- "bg_confidence": res["confidence"],
- "bg_confidence_level": res["confidence_level"],
- "bg_route_name": res["route_name"],
- "bg_current_step": res["current_step"],
- "bg_tutorial_option": res["tutorial_option"],
- "bg_tutorial_ammo": res["tutorial_ammo"],
- "bg_user_id": user_id,
- "bg_device": get_device(user_agent),
- "bg_device_family": user_agent.device.family,
- "bg_device_os": user_agent.os.family,
- "bg_device_browser": user_agent.browser.family,
- "bg_version": APP_VERSION,
- }
logger.info("Tutorial feedback", extra=extras_logging)
return
+
+
+@app.post("/identification-dummy")
+async def log_identification_dummy(request: Request, user_id: Union[str, None] = Cookie(None)):
+ res = await request.json()
+
+ user_agent = parse(request.headers.get("user-agent"))
+ extras_logging = get_base_logs(user_agent, user_id)
+
+ # to know if the firearm is dummy or real
+ extras_logging["bg_dummy_bool"] = res["is_factice"]
+ for key in ["image_url", "label", "confidence", "confidence_level", "tutorial_option"]:
+ extras_logging["bg_"+key] = res[key]
+
+ logger.info("Identification dummy", extra=extras_logging)
+ return
\ No newline at end of file
diff --git a/backend/tests/test_api.py b/backend/tests/test_api.py
index 68bd6132..4ba5c4b5 100644
--- a/backend/tests/test_api.py
+++ b/backend/tests/test_api.py
@@ -5,6 +5,7 @@
import requests
from PIL import Image, ImageChops
+
class TestModel(unittest.TestCase):
def __init__(self, *args, **kwargs):
super(TestModel, self).__init__(*args, **kwargs)
@@ -21,6 +22,15 @@ def test_version(self):
self.assertNotEqual(r.text, "-1")
self.assertEqual(len(r.text.split('.')), 2) # checks version has format X.Y
+ def check_log_base(self, log):
+ self.assertTrue(
+ {'timestamp', 'version', 'host', 'level', 'short_message', '_bg_date', '_bg_user_id',
+ '_bg_device', '_bg_device_os', '_bg_device_family', '_bg_device_browser', '_bg_version',
+ '_bg_model'}.issubset(set(log.keys()))
+ )
+ self.assertEqual(log["level"], 6)
+ self.assertTrue(log["_bg_model"].startswith("EffB"))
+
def test_upload_and_logs(self):
"""Checks that the file upload works properly"""
path = os.path.join(
@@ -37,13 +47,12 @@ def test_upload_and_logs(self):
res = r.json()
# checks that the json result is as expected
- self.assertEqual(set(res.keys()), set({"label", "confidence", "confidence_level", "path"}))
self.assertEqual(res["label"], "revolver")
self.assertAlmostEqual(res["confidence"], 99.53, places=1)
self.assertTrue(res["confidence_level"], "high")
self.assertTrue("ovh" in res["path"])
# checks that written file is exactly the same as input file
- time.sleep(30)
+ time.sleep(10)
response = requests.get(res["path"])
with Image.open(path) as image_one:
with Image.open(BytesIO(response.content)) as image_two:
@@ -58,16 +67,12 @@ def test_upload_and_logs(self):
self.assertEqual(r.json()[0]["short_message"], "Upload to OVH successful")
# checks the previous log "Identification request"
log = r.json()[1]
- self.assertEqual(
- set(log.keys()),
- set({'timestamp', '_bg_device', 'host', '_bg_model_time', 'version', '_bg_device_os', '_bg_device_family',
- 'short_message', '_bg_confidence', '_bg_confidence_level', '_bg_upload_time', '_bg_date', '_bg_user_id', '_bg_label', '_bg_image_url',
- 'level', '_bg_geolocation', '_bg_device_browser', '_bg_version', '_bg_model'})
- )
- self.assertEqual(log["level"], 6)
+ self.check_log_base(log)
self.assertEqual(log["short_message"], "Identification request")
self.assertTrue("-" in log["_bg_user_id"])
self.assertEqual(log["_bg_geolocation"], geoloc)
+ self.assertEqual(log["_bg_label"], "revolver")
+ self.assertAlmostEqual(log["_bg_confidence"], 99.53, places=1)
self.assertTrue(log["_bg_upload_time"]>=0)
def test_feedback_and_logs(self):
@@ -75,22 +80,18 @@ def test_feedback_and_logs(self):
confidence = 90
label = "revolver"
confidence_level = "high"
- r = requests.post(self.url + "/feedback",
- json={"image_url": "test", "feedback": False, "confidence": confidence, "label": label, "confidence_level": confidence_level})
+ image_url = "https://storage.gra.cloud.ovh.net/v1/test"
+ r = requests.post(self.url + "/identification-feedback",
+ json={"image_url": image_url, "feedback": True, "confidence": confidence, "label": label, "confidence_level": confidence_level})
+
self.assertEqual(r.status_code, 200)
r = requests.get(self.url + "/logs")
self.assertEqual(r.status_code, 200)
log = r.json()[0]
- self.assertEqual(
- set(log.keys()),
- set({'timestamp', '_bg_device', 'host', '_bg_feedback_bool', 'version', '_bg_device_os', '_bg_device_family',
- 'short_message', '_bg_confidence', '_bg_confidence_level', '_bg_date', '_bg_user_id', '_bg_label', '_bg_image_url',
- 'level', '_bg_device_browser', '_bg_version'})
- )
- self.assertEqual(log["level"], 6)
+ self.check_log_base(log)
self.assertEqual(log["short_message"], "Identification feedback")
- self.assertEqual(log["_bg_image_url"], "test")
- self.assertFalse(log["_bg_feedback_bool"])
+ self.assertEqual(log["_bg_image_url"], image_url)
+ self.assertTrue(log["_bg_feedback_bool"])
self.assertEqual(log["_bg_confidence"], confidence)
self.assertEqual(log["_bg_label"], label)
self.assertEqual(log["_bg_confidence_level"], confidence_level)
diff --git a/docker-compose-dev.yml b/docker-compose-dev.yml
index c808d29f..72309537 100644
--- a/docker-compose-dev.yml
+++ b/docker-compose-dev.yml
@@ -20,7 +20,9 @@ services:
- OS_PROJECT_NAME
- http_proxy
- https_proxy
+ - no_proxy
- WORKSPACE=dev
+ - REQUESTS_CA_BUNDLE=$CACERT_LOCATION
image: basegun-backend:${TAG}-dev
ports:
- 5000:5000
diff --git a/frontend/src/App.vue b/frontend/src/App.vue
index 23c9984c..d3ad1a64 100644
--- a/frontend/src/App.vue
+++ b/frontend/src/App.vue
@@ -1,49 +1,23 @@
-
diff --git a/frontend/src/components/OnboardingSwiper.vue b/frontend/src/components/OnboardingSwiper.vue
index 58b54a99..9a40047c 100644
--- a/frontend/src/components/OnboardingSwiper.vue
+++ b/frontend/src/components/OnboardingSwiper.vue
@@ -25,7 +25,7 @@ const modules = [Navigation, Pagination, A11y]
-
- Basegun est une application prototype en cours de développement par le Ministère de l’Intérieur.
+ Basegun est une application prototype en cours de développement par le Ministère de l’Intérieur et des Outre-Mer.
-
A ce jour, Basegun prend en compte uniquement l'identification d'armes à feu létales et d'armes factices type airsoft.
@@ -145,4 +145,7 @@ const modules = [Navigation, Pagination, A11y]
margin: 0 auto;
}
+:deep(.swiper-pagination-bullet-active[aria-label="Go to slide 2"]) {
+ background: #ff1d1d;
+}
diff --git a/frontend/src/icons.js b/frontend/src/icons.js
index 4b5aee1e..711bdd8e 100644
--- a/frontend/src/icons.js
+++ b/frontend/src/icons.js
@@ -10,4 +10,5 @@ export {
RiArrowGoBackFill,
RiListOrdered,
RiLogoutBoxRLine,
+ RiInformationFill,
} from 'oh-vue-icons/icons/ri/index.js'
diff --git a/frontend/src/router/index.js b/frontend/src/router/index.js
index 6b913984..6175346c 100644
--- a/frontend/src/router/index.js
+++ b/frontend/src/router/index.js
@@ -7,7 +7,6 @@ import { useStepsStore } from '@/stores/steps.js'
const Home = () => import('@/views/Home.vue')
const Start = () => import('@/views/Start.vue')
-const Informations = () => import('@/views/Informations.vue')
const Instructions = () => import('@/views/Instructions.vue')
const Result = () => import('@/views/Result.vue')
const Error = () => import('@/views/Error.vue')
@@ -22,7 +21,7 @@ const SafetyRecommendation = () => import('@/views/SafetyRecommendation.vue')
const SelectOption = () => import('@/views/GuideFactice/SelectOption.vue')
const ExtractMag = () => import('@/views/GuideFactice/ExtractMag.vue')
const SelectAmmo = () => import('@/views/GuideFactice/SelectAmmo.vue')
-const EndTutorial = () => import('@/views/GuideFactice/EndTutorial.vue')
+const StopTutorial = () => import('@/views/GuideFactice/StopTutorial.vue')
const routes = [
{
@@ -95,20 +94,12 @@ const routes = [
component: SelectAmmo,
},
{
- path: 'fin-tutoriel',
- name: 'EndTutorial',
- component: EndTutorial,
+ path: 'stop-tutoriel',
+ name: 'StopTutorial',
+ component: StopTutorial,
},
],
},
- {
- path: '/informations',
- name: 'Informations',
- meta: {
- displayHeader: true,
- },
- component: Informations,
- },
{
path: '/resultat',
name: 'Result',
diff --git a/frontend/src/views/About.vue b/frontend/src/views/About.vue
index ee03729c..68268919 100644
--- a/frontend/src/views/About.vue
+++ b/frontend/src/views/About.vue
@@ -1,12 +1,83 @@
-
+
À propos
-
+
+
+ Basegun est un projet d'application par apprentissage automatique capable
+ d'identifier et de classifier de manière fiable et rapide une arme à feu.
+
+
+ Le projet a été initié en 2021 dans le contexte du programme
+ Entrepreneurs d’Intérêt Général.
+
+
+ Il est actuellement piloté par le Datalab de la Direction du Numérique du Ministère de l'Intérieur et des Outre-Mer,
+ en partenariat avec le Service Central des Armes et Explosifs. La Direction Générale de la Police Nationale
+ et la Direction Générale de la Gendarmerie Nationale sont associées pour les tests et le suivi de l'application.
+
+
+
+ A ce jour, Basegun permet de prendre en photo une arme à feu et d'obtenir un
+ résultat parmi 10 typologies possibles. Ce résultat donne une indication sur la ou les catégories légales
+ à laquelle l'arme appartient.
+
+
+ Basegun prend en compte uniquement l'identification d'armes à feu létales et d'armes factices type airsoft.
+
Elle ne permet donc pas encore de distinguer les armes à air comprimé > 2 joules, les armes à blanc ou neutralisées.
+
+
+
+
+
![]()
+
+
+
@@ -33,4 +104,31 @@ import AboutInformationTabs from '@/views/InformationTabs/AboutInformationTabs.v
color: #1212ff
}
+ .title-space {
+ margin-top: 20px;
+ }
+
+ .container-img {
+ display: flex;
+ justify-content: center;
+ flex-direction: row;
+ flex-wrap: wrap;
+ align-items: center;
+ }
+
+ .img {
+ margin: 2em;
+ width: 6em;
+ height: auto;
+ }
+
+ .list {
+ margin-left: 2em;
+ list-style: square;
+ }
+
+ :deep(.fr-icon-alert-fill) {
+ padding-right: .1em;
+ }
+
diff --git a/frontend/src/views/Contact.vue b/frontend/src/views/Contact.vue
index eb4b68df..2ad86522 100644
--- a/frontend/src/views/Contact.vue
+++ b/frontend/src/views/Contact.vue
@@ -1,21 +1,20 @@
-
+
Contact
-
+
+
+ Toute question, remarque ou contribution concernant le projet Basegun est à adresser par email à basegun@interieur.gouv.fr.
+
+
diff --git a/frontend/src/views/InformationTabs/ContactInformationTabs.vue b/frontend/src/views/InformationTabs/ContactInformationTabs.vue
deleted file mode 100644
index ed70f62a..00000000
--- a/frontend/src/views/InformationTabs/ContactInformationTabs.vue
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
- Toute question, remarque ou contribution concernant le projet Basegun est à adresser par email à basegun@interieur.gouv.fr.
-
-
-
-
-
diff --git a/frontend/src/views/InformationTabs/LegalInformationTabs.vue b/frontend/src/views/InformationTabs/LegalInformationTabs.vue
deleted file mode 100644
index 02fb4206..00000000
--- a/frontend/src/views/InformationTabs/LegalInformationTabs.vue
+++ /dev/null
@@ -1,59 +0,0 @@
-
-
-
- Editeur
-
-
Le site basegun.fr est édité et géré par l’équipe du Laboratoire de la Donnée, à la Sous-Direction Innovation et Transformation Numérique, Direction du Numérique du Ministère de l’Intérieur.
-
Adresse : 40 avenue des Terroirs de France, 75012 PARIS.
-
-
- Données collectées
-
-
Objectif
-
Basegun est un projet récent, actuellement en phase de test auprès de potentiels utilisateurs. En collectant les données citées ci-dessous, nous pourrons mieux comprendre comment et dans quels contextes le service est utilisé, et avoir les informations nécessaires pour résoudre d’éventuels problèmes.
-
Cadre
-
Nous collectons uniquement les informations relatives à des requêtes pertinentes et correspondant à l’objectif de Basegun: identifier des armes à feu. C’est pourquoi nous demandons à nos utilisateurs de ne soumettre que des requêtes en lien avec cet objectif et de respecter les conditions de l’application.
-
Nous ne souhaitons en aucun cas traiter des informations personnelles (par exemple aucune photo où le visage d'une personne est visible ne doit être déposée sur l'application).
-
Liste des données
-
Pour chaque requête effectuée sur basegun.fr, nous collectons les données suivantes :
-
- - Date et heure
- - Photo soumise
- - Résultat obtenu (label et taux de fiabilité)
- - Temps de traitement de la requête
- - Géolocalisation approximative de l’utilisateur (zone d’environ 10km de rayon)
- - Identification unique et chiffrée (cookie uuid) de l’utilisateur
- - Type d’appareil (mobile, tablette, ordinateur), système d’exploitation (iOS, Android, Windows...) et navigateur (Chrome, Firefox, Safari...) utilisés
- - Evaluation (positive ou négative) par l’utilisateur du résultat obtenu
-
-
Confidentialité
-
Nous nous réservons le droit de supprimer les données collectées suite à des requêtes non pertinentes. Nous pouvons également, sur simple demande d’un utilisateur, supprimer les données relatives à une requête spécifique. Pour cela, il suffit de nous envoyer une demande à basegun@interieur.gouv.fr, en nous précisant la date et l’heure de la requête.
-
Les informations collectées ne sont en aucun cas confiées à des tiers.
-
-
- Code source
-
-
- Le code source du projet est disponible publiquement à l'adresse https://github.com/datalab-mi/Basegun
-
-
-
- Hébergement
-
-
Le site basegun.fr est hébergé par la société OVH. Adresse : 2 rue Kellermann, 59100 ROUBAIX.
-
-
-
-
diff --git a/frontend/src/views/Informations.vue b/frontend/src/views/Informations.vue
deleted file mode 100644
index a6f43acb..00000000
--- a/frontend/src/views/Informations.vue
+++ /dev/null
@@ -1,89 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/frontend/src/views/Legal.vue b/frontend/src/views/Legal.vue
index 17d13576..19a0f2a7 100644
--- a/frontend/src/views/Legal.vue
+++ b/frontend/src/views/Legal.vue
@@ -1,12 +1,56 @@
-
+
Mentions légales
-
+
+
+ Editeur
+
+
Le site basegun.fr est édité et géré par l’équipe du Laboratoire de la Donnée, à la Sous-Direction Innovation et Transformation Numérique, Direction du Numérique du Ministère de l’Intérieur et des Outre-Mer.
+
Adresse : 40 avenue des Terroirs de France, 75012 PARIS.
+
+
+ Données collectées
+
+
Objectif
+
Basegun est un projet récent, actuellement en phase de test auprès de potentiels utilisateurs. En collectant les données citées ci-dessous, nous pourrons mieux comprendre comment et dans quels contextes le service est utilisé, et avoir les informations nécessaires pour résoudre d’éventuels problèmes.
+
Cadre
+
Nous collectons uniquement les informations relatives à des requêtes pertinentes et correspondant à l’objectif de Basegun: identifier des armes à feu. C’est pourquoi nous demandons à nos utilisateurs de ne soumettre que des requêtes en lien avec cet objectif et de respecter les conditions de l’application.
+
Nous ne souhaitons en aucun cas traiter des informations personnelles (par exemple aucune photo où le visage d'une personne est visible ne doit être déposée sur l'application).
+
Liste des données
+
Pour chaque requête effectuée sur basegun.fr, nous collectons les données suivantes :
+
+ - Date et heure
+ - Photo soumise
+ - Résultat obtenu (label et taux de fiabilité)
+ - Temps de traitement de la requête
+ - Géolocalisation approximative de l’utilisateur (zone d’environ 10km de rayon)
+ - Identification unique et chiffrée (cookie uuid) de l’utilisateur
+ - Type d’appareil (mobile, tablette, ordinateur), système d’exploitation (iOS, Android, Windows...) et navigateur (Chrome, Firefox, Safari...) utilisés
+ - Evaluation (positive ou négative) par l’utilisateur du résultat obtenu
+
+
Confidentialité
+
Nous nous réservons le droit de supprimer les données collectées suite à des requêtes non pertinentes. Nous pouvons également, sur simple demande d’un utilisateur, supprimer les données relatives à une requête spécifique. Pour cela, il suffit de nous envoyer une demande à basegun@interieur.gouv.fr, en nous précisant la date et l’heure de la requête.
+
Les informations collectées ne sont en aucun cas confiées à des tiers.
+
+
+ Code source
+
+
+ Le code source du projet est disponible publiquement à l'adresse https://github.com/datalab-mi/Basegun
+
+
+
+ Hébergement
+
+
Le site basegun.fr est hébergé par la société OVH. Adresse : 2 rue Kellermann, 59100 ROUBAIX.
+
@@ -29,4 +73,13 @@ import LegalInformationTabs from '@/views/InformationTabs/LegalInformationTabs.v
color: #1212ff
}
+ .title-space {
+ margin-top: 20px;
+ }
+
+ .list-margin {
+ margin-left: 2rem;
+ margin-bottom: 2rem;
+ }
+
diff --git a/frontend/src/views/Result.vue b/frontend/src/views/Result.vue
index 0b3be6fd..ca2d1abc 100644
--- a/frontend/src/views/Result.vue
+++ b/frontend/src/views/Result.vue
@@ -40,7 +40,7 @@ const cleanMention = computed(() => results[typology.value]?.isFacticeTypology =
const cleanTypology = computed(() => results[typology.value]?.isFacticeTypology === true)
function keepingLastStep () {
- stepsStore.setCurrentStep(guideSteps.value.length)
+ stepsStore.setCurrentStep(guideSteps.length)
}
function sendFeedback (isCorrect) {
@@ -57,7 +57,7 @@ function sendFeedback (isCorrect) {
} else {
isDown.value = true
}
- axios.post('/feedback', json)
+ axios.post('/identification-feedback', json)
.then(async res => {
console.log(res)
setMessage({ type: 'success', message: 'Votre vote a été pris en compte' })
diff --git a/frontend/src/views/SafetyRecommendation.vue b/frontend/src/views/SafetyRecommendation.vue
index 6184fe62..2b68de9b 100644
--- a/frontend/src/views/SafetyRecommendation.vue
+++ b/frontend/src/views/SafetyRecommendation.vue
@@ -21,18 +21,13 @@ const cleanLabel = computed(() => results[typology.value]?.displayLabel)
function setTutorialStep () {
stepsStore.setCurrentStep(1)
}
-
-function setGender () {
- return cleanLabel.value.includes('arme') ? 'une' : 'un'
-}
-
- Vérifier si {{ setGender() }} {{ cleanLabel }} est factice
+ Vérifier si votre {{ cleanLabel }} est factice
diff --git a/infra/scripts/test-alive.sh b/infra/scripts/test-alive.sh
index b2f122bf..97fa65dc 100755
--- a/infra/scripts/test-alive.sh
+++ b/infra/scripts/test-alive.sh
@@ -9,7 +9,7 @@ range=10;
test_result=1
until [ "$elapse" -ge "$timeout" -o "$test_result" -eq "0" ] ; do
- [[ "$(curl -L -k -s $1/api/)" == "Basegun backend" ]]
+ [[ "$(curl -L -s $1/api/)" == "Basegun backend" ]]
test_result=$?
if [ "$test_result" -gt "0" ] ; then
echo "Waited $elapse seconds";