diff --git a/app b/app index 94e4fd6..c7174a6 100755 Binary files a/app and b/app differ diff --git a/donnee/mdp.txt b/donnee/mdp.txt index af51f1e..3d7ac61 100644 --- a/donnee/mdp.txt +++ b/donnee/mdp.txt @@ -1 +1 @@ -qtqnqtq 5 \ No newline at end of file +yescdsds 10 \ No newline at end of file diff --git a/src/app/core_logic/responsable.c b/src/app/core_logic/responsable.c index 46462c8..e2d6cf7 100644 --- a/src/app/core_logic/responsable.c +++ b/src/app/core_logic/responsable.c @@ -9,6 +9,8 @@ #include "responsable.h" #include "../interface/interface_resp.h" +#define MAX_SIZE_MDP 20 + /** * @brief Charge les informations des articles à partir d'un fichier dans des tableaux. * @@ -268,3 +270,46 @@ int decodageMDP(char *mdpEnter) return -2; } } + +void chiffrementCesar(char *mdp, int decalage) { + int i; + int longueur = strlen(mdp); + for (i = 0; i < longueur; ++i) + { + if (mdp[i] >= 'a' && mdp[i] <= 'z') { + mdp[i] = 'a' + (mdp[i] - 'a' + decalage) % 26; + } else if (mdp[i] >= 'A' && mdp[i] <= 'Z') + { + mdp[i] = 'A' + (mdp[i] - 'A' + decalage) % 26; + } + } +} + +int verifModifMDP(char *mdp, char *confirmMDP, int decalage) +{ + if ( strcmp(mdp, confirmMDP) == 0 ) + { + enregistrerMotDePasse(mdp, decalage); + return 0; + } + fprintf(stderr, "\tLes mot de passe ne sont pas identiques !\n"); + return -1; + +} + +int enregistrerMotDePasse(char *mdp, int decalage) +{ + FILE *fe; + fe = fopen("donnee/mdp.txt", "w"); + if (fe == NULL) + { + fprintf(stderr,"Erreur lors de l'ouverture du fichier.\n"); + return -1; + } + + chiffrementCesar(mdp, decalage); + + fprintf(fe,"%s %d", mdp, decalage); + fclose(fe); + return 0; +} \ No newline at end of file diff --git a/src/app/core_logic/responsable.h b/src/app/core_logic/responsable.h index 24cadc4..b3d3471 100644 --- a/src/app/core_logic/responsable.h +++ b/src/app/core_logic/responsable.h @@ -117,4 +117,8 @@ int decodageMDP(char *mdpEnter); * @param texte chaine de caractère comparé avec le mot de passe du fichier. * @param decalage entier qui sert de clé pour déchiffrer le mot de passe. */ -void dechiffrerCesar(char *texte, int decalage); \ No newline at end of file +void dechiffrerCesar(char *texte, int decalage); + +void chiffrementCesar(char *mdp, int decalage); +int verifModifMDP(char *mdp, char *confirmMDP, int decalage); +int enregistrerMotDePasse(char *mdp, int decalage); \ No newline at end of file diff --git a/src/app/interface/interface_resp.c b/src/app/interface/interface_resp.c index 3d20807..ce5e4ff 100644 --- a/src/app/interface/interface_resp.c +++ b/src/app/interface/interface_resp.c @@ -11,7 +11,8 @@ #define MAX_CLIENTS 100 #define MAX_ARTICLES 100 -#define MENU_QUIT 11 +#define MAX_SIZE_MDP 20 +#define MENU_QUIT 12 /** * @brief Affiche le menu principal de l'interface du responsable. @@ -34,7 +35,8 @@ void affiche_resp(void) { printf("||\t8 : Ajouter un client\t\t\t\t\t||\n"); printf("||\t9 : Modifier le statut du client\t\t\t||\n"); printf("||\t10 : Supprimer un client\t\t\t\t||\n"); - printf("||\t11 : Quittez.\t\t\t\t\t\t||\n"); + printf("||\t11 : Modifier le mot de passe\t\t\t\t||\n"); + printf("||\t12 : Quittez.\t\t\t\t\t\t||\n"); printf("+----------------------------------------------------------------+\n"); } @@ -351,6 +353,52 @@ void suppressionClient(int tNumClient[], float tCagnotte[], int tSus[], int *tLo return; } +void affichModifMDP() +{ + int choix, decalage; + char newMDP[MAX_SIZE_MDP], confirmMDP[MAX_SIZE_MDP]; + printf("\t /!/ Vous entrez dans le menu de modification du mot de passe /!/\n"); + printf("\t Êtes-vous sur de vouloir changer le mot de passe ?\n Si oui, entrez 0 et sinon entrez 1\n"); + while (scanf("%d", &choix) !=1 || choix < 0 || choix > 1) + { + printf("/!/ Entrez une valeur valide /!/"); + } + if ( choix == 1 ) + { + printf("\t Vous quittez le menu de modification du mot de passe.\n"); + return; + } + else + { + printf("Veuillez entrer le nouveau mot de passe.\n\n\tMAXIXMUM 20 CARACTERES ET SEULEMENT DES LETTRES\n"); + while (scanf("%s", newMDP) != 1) + { + printf("Veuillez recommencer la saisie : "); + } + printf("Veuillez entrer à nouveau le mot de passe.\n"); + while (scanf("%s", confirmMDP) != 1) + { + printf("Veuillez recommencer la saisie : "); + } + printf("\t Veuillez entrer le nouveau décalage\n"); + while (scanf("%d", &decalage) != 1 || decalage < 0) + { + printf("\t Veuillez entrer un nombre valide : "); + } + int verif = verifModifMDP(newMDP, confirmMDP, decalage); + if ( verif == 0 ) + { + printf("\t Mot de passe modifié !\n"); + return; + } + else + { + printf("\t/!/ Erreur lors du changement de mot de passe. /!/\n"); + return; + } + } +} + /** * @brief Fonction de menu pour le responsable. * @@ -382,7 +430,6 @@ void global_resp() { int tLogArticle = chargementArticles(tRef, tPoids, tVol, tPrix, MAX_ARTICLES); int tLogClient = charger_clients(tNumClient, tCagnotte, tSus, MAX_CLIENTS); - do { menu_resp(&choix); switch (choix) { @@ -417,6 +464,9 @@ void global_resp() { suppressionClient(tNumClient, tCagnotte ,tSus , &tLogClient); break; case 11: + affichModifMDP(); + break; + case 12: sauvegardArticles(tRef, tPoids, tVol, tPrix, tLogArticle); sauvegarde_clients(tNumClient, tCagnotte, tSus, tLogClient); printf("Sauvegarde des articles effectuée.\n");