Skip to content

Repository files navigation

MobiList - Inventaire pour Assurance

Application web de gestion d'inventaire personnel avec authentification sécurisée et calcul automatique de vétusté.

Table des matières


À propos

MobiList est une application web qui aide les particuliers à :

  • Gérer un inventaire dématérialisé de leurs biens
  • Conserver les justificatifs (photos, factures)
  • Calculer automatiquement la vétusté et les pertes
  • Sécuriser leurs données avec l'authentification à 2 facteurs
  • Générer des rapports PDF pour les assurances

Contexte : SAE 3.01 - Développement d'application - BUT Informatique 2ème année


Fonctionnalités

Utilisateurs

  • Inscription et connexion sécurisée
  • Authentification à 2 facteurs (A2F) par email
  • Gestion de profil avec suppression de compte
  • Support multilingue (FR, EN, TR)

Gestion des biens

  • Création de logements avec adresses
  • Organisation par pièces (salon, chambre, cuisine...)
  • Ajout de biens avec catégories prédéfinies
  • Upload de justificatifs (PDF, images)
  • Calcul automatique de la vétusté selon l'âge
  • Inventaire complet avec recherche et filtres

Simulation de sinistre

  • Sélection des biens affectés
  • Calcul du montant des pertes
  • Génération de rapport PDF détaillé

Administration

  • Dashboard admin avec statistiques
  • Gestion des utilisateurs
  • Validation des justificatifs avec notifications email
  • Filtrage dynamique par utilisateur/logement/pièce
  • Configuration des taux de vétusté

Technologies

Catégorie Technologies
Backend Python 3.8+, Flask 3.1.2
Base de données MySQL 8.0+, SQLAlchemy
Frontend HTML5, CSS3, JavaScript (ES5)
Sécurité Flask-Login, WTForms, CSRF Protection
Email Flask-Mail, SMTP
PDF WeasyPrint
i18n Flask-Babel (FR, EN, TR)
Tests pytest, unittest, coverage

Prérequis

  • Python 3.8 ou supérieur
  • MySQL 8.0 ou MariaDB 10.5+
  • pip (gestionnaire de paquets Python)
  • Git
  • Un compte Gmail (pour l'envoi d'emails A2F)

Vérifier les installations :

python --version
pip --version
mysql --version
git --version

Installation

Étape 1 : Cloner le dépôt

git clone https://github.com/votre-utilisateur/Projet_FI_SAAS.git
cd Projet_FI_SAAS

Étape 2 : Créer l'environnement virtuel

# Linux / macOS
python3 -m venv venv
source venv/bin/activate

# Windows
python -m venv venv
venv\Scripts\activate

Étape 3 : Installer les dépendances

pip install --upgrade pip
pip install -r requirements.txt

Configuration

Étape 1 : Configuration de la base de données MySQL

1.1 Créer la base de données

# Se connecter à MySQL
mysql -u root -p

# Dans le shell MySQL :
CREATE DATABASE mobilist CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'mobilist_user'@'localhost' IDENTIFIED BY 'votre_mot_de_passe_secure';
GRANT ALL PRIVILEGES ON mobilist.* TO 'mobilist_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;

1.2 Importer le schéma de la base

mysql -u mobilist_user -p mobilist < AppliMobilist/BD/Mobilist_Base.sql

1.3 Peupler avec des données de test (optionnel)

mysql -u mobilist_user -p mobilist < AppliMobilist/BD/peuplement.sql

Ajoutez cette configuration (remplacez les valeurs par les vôtres) :

# ==========================================
# CONFIGURATION MOBILIST - FICHIER .ENV
# ==========================================

# --- BASE DE DONNÉES ---
DB_USER=mobilist_user
DB_PASSWORD=votre_mot_de_passe_secure
DB_HOST=localhost
DB_NAME=mobilist

# --- SÉCURITÉ ---
SECRET_KEY=votre-cle-secrete-super-longue-et-aleatoire-123456789
# Générer une clé sécurisée avec : python -c "import secrets; print(secrets.token_hex(32))"

# --- CONFIGURATION EMAIL (A2F) ---
# Compte Gmail fourni (prêt à l'emploi)
MAIL_SERVER=smtp.gmail.com
MAIL_PORT=587
MAIL_USE_TLS=True
MAIL_USERNAME=mobilistnoreply@gmail.com
MAIL_PASSWORD=zalv tbnv mlfh scnj
MAIL_DEFAULT_SENDER=mobilistnoreply@gmail.com

# --- ENVIRONNEMENT ---
FLASK_ENV=development
FLASK_DEBUG=True

# --- UPLOADS ---
MAX_CONTENT_LENGTH=5242880  # 5 MB en octets

Étape 2 : Configuration Email pour l'A2F

Email déjà configuré et prêt à l'emploi :

Un compte Gmail dédié est fourni avec l'application. Utilisez cette configuration dans votre .env :

MAIL_SERVER=smtp.gmail.com
MAIL_PORT=587
MAIL_USE_TLS=True
MAIL_USERNAME=mobilistnoreply@gmail.com
MAIL_PASSWORD=zalv tbnv mlfh scnj
MAIL_DEFAULT_SENDER=mobilistnoreply@gmail.com

Ce compte est prêt à envoyer les codes A2F. Aucune configuration Gmail supplémentaire n'est nécessaire.

Étape 3 : Créer le dossier des uploads

mkdir -p AppliMobilist/static/uploads/justificatifs
chmod 755 AppliMobilist/static/uploads

Étape 4 : Compiler les traductions (optionnel)

Si vous modifiez les traductions :

# Extraire les chaînes à traduire
pybabel extract -F babel.cfg -o messages.pot .

# Mettre à jour les traductions
pybabel update -i messages.pot -d AppliMobilist/translations

# Compiler les fichiers .po en .mo
pybabel compile -d AppliMobilist/translations

Lancement

# Activer l'environnement virtuel
source venv/bin/activate  # Linux/Mac
venv\Scripts\activate     # Windows

# Lancer l'application
flask run

Application accessible sur http://127.0.0.1:5000

Accéder au dashboard admin

Emails admin configurés dans config.py :

ADMIN_EMAILS = ['admin@mobilist.fr']
  1. Inscrire un compte avec l'email admin
  2. Se connecter
  3. Accéder à /admin

Tests

Lancer tous les tests

pytest
coverage run -m pytest
coverage report

Coverage actuel

Module               Coverage
-----------------------------------
__init__.py          100%
email_utils.py       100%
forms.py             100%
config.py            96%
app.py               86%
models.py            75%
views.py             42%
-----------------------------------
TOTAL                53%

Structure du projet

Projet_FI/
├── AppliMobilist/           # Package principal
│   ├── __init__.py         # Initialisation de l'app
│   ├── app.py              # Configuration Flask
│   ├── models.py           # Modèles SQLAlchemy
│   ├── views.py            # Routes et contrôleurs
│   ├── forms.py            # Formulaires WTForms
│   ├── email_utils.py      # Gestion des emails A2F
│   ├── BD/                 # Scripts SQL
│   │   ├── Mobilist_Base.sql      # Schéma complet
│   │   ├── peuplement.sql         # Données de test
│   │   └── triggers_sqlite.sql    # Triggers
│   ├── static/             # Ressources statiques
│   │   ├── css/           # Feuilles de style
│   │   ├── js/            # Scripts JavaScript
│   │   └── uploads/       # Fichiers uploadés
│   ├── templates/          # Templates Jinja2
│   │   ├── base.html
│   │   ├── index.html
│   │   ├── verify_2fa.html
│   │   └── admin/         # Templates admin
│   ├── tests/              # Tests unitaires
│   │   ├── test_a2f.py
│   │   ├── test_admin.py
│   │   ├── test_email_utils.py
│   │   └── test_views.py
│   └── translations/       # Fichiers i18n
│       ├── en/LC_MESSAGES/
│       └── tr/LC_MESSAGES/
├── rendu/                  # Rapports et livrables
│   └── RAPPORT_INDIVIDUEL_SEMAINE3.md
├── config.py               # Configuration globale
├── run.py                  # Point d'entrée
├── requirements.txt        # Dépendances Python
├── babel.cfg              # Config Babel
├── .env                    # Variables d'environnement (à créer)
├── .gitignore
└── Readme.md              # Ce fichier

Équipe

Projet développé par :

  • Kylian HANIQUET
  • Erdem KURAC
  • Arif APAYDIN
  • Emrecan DEMIRTAY

Encadrant : M. GILLET IUT Orleans


Notes importantes

Sécurité

  • Ne jamais commiter le fichier .env
  • Changez la SECRET_KEY en production
  • Utilisez HTTPS en production
  • Activez l'A2F pour tous les comptes admin

Base de données

  • Les triggers sont chargés automatiquement au démarrage

Utilisation

  1. Activer l'A2F pour un utilisateur

    • Connectez-vous à l'application
    • Accédez à votre profil
    • Dans la section "Paramètres", activez le switch "Authentification à deux facteurs"
  2. Connexion avec A2F activé

    • Entrez votre email et mot de passe
    • Un code à 6 chiffres est envoyé à votre email
    • Entrez le code dans la page de vérification (valide 10 minutes)
    • Cliquez sur "Renvoyer le code" si nécessaire

Services alternatifs

Mailtrap (pour les tests en développement) :

MAIL_SERVER=smtp.mailtrap.io
L_PORT=587
MAIL_USERNAME=votre-email@outlook.com
MAIL_PASSWORD=votre-mot-de-passe

Lancement

flask run

Ou directement :

python AppliMobilist/app.py

L'application sera accessible sur http://localhost:5000

MCD (Mocodo)

MCD — MobiList

Lien : https://www.mocodo.net/?mcd=eNptksFygyAQhu88BQ_gobnmZi3NmFrNqOmVobpNyCg6iJ327bsu2KSZXpBd4N_v33V_rOr0OU1iXLdct_IyT05_6EbhGnH3PcJdqjlDr43E-KzBRrxVDqS6DLOLOExOfqpOt8CqukheRBnxzYZXcZaJiD_k_DEVOaOQik2q6yDiZuj9liVFXos89c-yYideRV7TS3rEtoztPXGQXgTpfH9jhC1ZKvCuwXh9vxut_pKqOSu3gvs9QsNsMXIzENLiRE3TbIkpEWUu_oEq48OhKGu2JqlmN5ygB4OqqrUwTRDaeM1fW8YORVWJp0Ub5ZIsXZVXRYaW0ZPYFWVa3XteD4SkvgYagrBqHAe71jqBAYvjG8zv_MZ2Ge_gVCeDeQPzferajxEs6tAhsJ3AbgSYG-a1Gz5FGE2nyTFOYGk-0Bd6pbuI9-0Y8BoLBCeb0d0a9r68EN47DVaHv-UmdGrGkRqDoOwtzlLfzA2Pq-pYimP5B21Nkqaf72wDHmHJZjAObYebd3O5qrIf5EcFQw==

Code Mocodo: ASSUREUR: id_assureur, nom, email_contact ASSURER, 0N CLIENT, 01 ASSUREUR

CLIENT: id_client, nom, prenom, email, mdp, date_creation_cpt POSSEDER, 0N CLIENT, 0N LOGEMENT

LOGEMENT: id_logement, adresse, type_logement, date_ajout CONTENIR, 11 LOGEMENT, 0N SALLE

SALLE: id_salle, nom_salle STOCKER, 11 SALLE, 0N BIEN

CATEGORIE_BIEN: id_categorie, nom_categorie, taux_annuel CATEGORISER, 11 BIEN, 0N CATEGORIE_BIEN

BIEN: id_bien, nom_bien, prix_achat, date_achat, valeur_actuelle, est_assure

JUSTIFIER, 11 BIEN, 0N JUSTIFICATIF JUSTIFICATIF: id_justificatif, type_justificatif, chemin_fichier, date_ajout, est_valide POSSEDER_JUSTIF, 1N BIEN, 1N JUSTIFICATIF

RAPPORT: id_rapport, date_generation, chemin_pdf, total_valeur_neuf, total_valeur_actuelle, perte_totale GENERER, 11 CLIENT, 0N RAPPORT CONCERNER, 11 LOGEMENT, 0N RAPPORT VALIDER, 01 ASSUREUR, 0N RAPPORT

Diagrammes d'activité

https://drive.google.com/file/d/1JoEySIsrkXjepgKNDoDcLHKrqvTmdy6b/view?usp=sharing

Diagramme de cas d'utilisation

https://drive.google.com/file/d/1AgTkWvYJrBCfJeNcbH25ke5Am9Vyrrl4/view?usp=sharing

Diagrammes de séquences

https://drive.google.com/file/d/17YTLoH1UB_x9tXfGdNs0KYuNkzSRt0qX/view?usp=sharing

About

Projet pour les étudiants en formation initiale

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages