[Résolu] Créer une liste de mots de passe non lisibles

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

[Résolu] Créer une liste de mots de passe non lisibles

Message par Micoute »

Bonjour à tous,

Je souhaite créer une liste de mes mots de passe, mais je voudrais que les lettres des mots de passe soient remplacées par "*", mais que quand on sélectionne une ligne, il s'affiche dans un StringGadget prévu à cet effet.

Voici mon code:

Code : Tout sélectionner

;Gestion des sites
Enumeration
  #FichierJSON
EndEnumeration

Enumeration
  #Fenetre_principale
EndEnumeration

Enumeration
  #Txt_Site
  #Str_Site
  #Txt_Site_Utilisateur
  #Str_Nom_Utilisateur
  #Txt_Mdp
  #Str_Mdp
  #Liste_sites
  #Btn_Nouveau
  #Btn_Maj
  #Btn_Supprimer
EndEnumeration

Enumeration
  #Police
EndEnumeration

Structure Liste
  Titre.s
  Largeur.i
EndStructure

;Structure d'un site
Structure Site
  Site.s
  Nom_Utilisateur.s
  Mdp.s
EndStructure
;Création d'une liste vierge pour les sites
Global NewList Sites.Site()
Global$ FichierJson = "D:\Programmation\Donnees\Sites.json"
Global Evenement

Declare Ouvrir_Fenetre_principale()
Declare Redimensionner()
Declare Charger_Sites()
Declare GestionEvenements()
Declare NouveauSite()
Declare SelectionSite()  
Declare MajSite()
Declare SupprimerSite()
Declare SauvegardeSites()

LoadFont(#Police, "Microsoft Sans Serif", 12, #PB_Font_Bold)

Ouvrir_Fenetre_principale()

Macro TrierListeStruc(_NomListe_, _Options_, _Champ_Structure_)
  ; Cette macro simplifie l'utilisation de la fonction intégrée SortStructuredList().
  SortStructuredList(_NomListe_, _Options_, OffsetOf(_Champ_Structure_), TypeOf(_Champ_Structure_))
EndMacro

Procedure Redimensionner()
  ResizeGadget(#Btn_Nouveau, #PB_Ignore, WindowHeight(#Fenetre_principale) - 34, #PB_Ignore, #PB_Ignore)
  ResizeGadget(#Btn_Maj, #PB_Ignore, WindowHeight(#Fenetre_principale) - 34, #PB_Ignore, #PB_Ignore)
  ResizeGadget(#Btn_Supprimer, #PB_Ignore, WindowHeight(#Fenetre_principale) - 34, #PB_Ignore, #PB_Ignore)
  ResizeGadget(#Liste_sites, #PB_Ignore, #PB_Ignore, #PB_Ignore, WindowHeight(#Fenetre_principale)-110)
  ;Debug WindowHeight(#Fenetre_principale)
EndProcedure

Procedure Ouvrir_Fenetre_principale()
  If OpenWindow(#Fenetre_principale, 402, 356, 940, 340, "Mes sites", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
    
    SetGadgetFont(#PB_Default, FontID(#Police))
    
    TextGadget(#Txt_Site, 20, 0, 300, 24, "Site")
    TextGadget(#Txt_Site_Utilisateur, 320, 0, 300, 24, "Nom d'utilisateur", #PB_Text_Center)
    TextGadget(#Txt_Mdp, 620, 0, 300, 24, "Mot de passe")
    
    StringGadget(#Str_Site, 20, 25, 300, 24, "")
    StringGadget(#Str_Nom_Utilisateur, 320, 25, 300, 24, "")
    StringGadget(#Str_Mdp, 620, 25, 300, 24, "")
    
    ListIconGadget(#Liste_sites, 20, 55, 900, 250, "Site", 300, #PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection)
    AddGadgetColumn(#Liste_sites, 1, "Nom d'utilisateur", 300)
    AddGadgetColumn(#Liste_sites, 2, "Mot de passe", 300)
    
    ButtonGadget(#Btn_Nouveau, 20, 310, 80, 24, "Nouveau")
    ButtonGadget(#Btn_Maj, 130, 310, 80, 24, "Ajouter")
    ButtonGadget(#Btn_Supprimer, 235, 310, 90, 24, "Supprimer")
    
    ;Lecture des sites
    Charger_Sites()
    
    ;L'application est prête pour la saisie d'un site
    NouveauSite()
  EndIf
EndProcedure

;Chargement des praticiens existants
Procedure Charger_Sites()
  If ReadFile(#FichierJSON, FichierJson)
    CloseFile(#FichierJSON)
    
    ;Lecture du fichier JSON
    LoadJSON(#FichierJSON, FichierJson, #PB_JSON_NoCase)
    
    ;Extraction de la chaine JSON vers la liste chainée praticiens
    ExtractJSONList(JSONValue(#FichierJSON), Sites())
    
    TrierListeStruc(Sites(), #PB_Sort_Ascending, Site\Site)
    
    ;Affichage de la liste des sites
    ForEach(Sites())
      With Sites()
        AddGadgetItem(#Liste_sites, -1, \Site + #LF$ + \Nom_Utilisateur + #LF$ + \Mdp)
        SetGadgetItemData(#Liste_sites, CountGadgetItems(#Liste_sites)-1, ListIndex(Sites()))
      EndWith                
    Next
    
  Else
    
    MessageRequester("ATTENTION", "Le fichier " + FichierJson + ", n'existe pas" + #CRLF$ + #CRLF$ + "Veuillez le créer", #PB_MessageRequester_Info)
    
  EndIf
EndProcedure

;Gestionnaire de contrôle de la saisie
Procedure GestionEvenements()
  Protected Evenement = EventType()
  
  Select Evenement
    Case #PB_EventType_Change
      If Trim(GetGadgetText(#Str_Site)) <> ""
        DisableGadget(#Btn_Nouveau, #False)
        DisableGadget(#Btn_Maj, #False)
      Else
        DisableGadget(#Btn_Nouveau, #True)
        DisableGadget(#Btn_Maj, #True)
      EndIf         
  EndSelect
  
EndProcedure

;Nouveau site (Remise à zéro des champs de saisie)
Procedure NouveauSite()
  SetWindowData(#Fenetre_principale, 0) ;C'est une création
  
  SetGadgetText(#Str_Site, "")
  SetGadgetText(#Str_Nom_Utilisateur, "")
  SetGadgetText(#Str_Mdp, "")
  
  DisableGadget(#Btn_Nouveau, #True)
  DisableGadget(#Btn_Maj, #True)
  DisableGadget(#Btn_Supprimer, #True)
  
  SetGadgetText(#Btn_Maj, "Ajouter")
  SetActiveGadget(#Str_Site)
EndProcedure

;Un site est sélectionné dans la liste
Procedure SelectionSite()  
  Protected Item = GetGadgetState(#Liste_sites)
  
  If Item <> -1
    SelectElement(Sites(), GetGadgetItemData(#Liste_sites, Item))
    With Sites()
      SetGadgetText(#Str_Site, \Site)
      SetGadgetText(#Str_Nom_Utilisateur, \Nom_Utilisateur)
      SetGadgetText(#Str_Mdp, \Mdp)
    EndWith  
  EndIf
  
  ;C'est une modification de site
  SetWindowData(#Fenetre_principale, 1) 
  
  DisableGadget(#Btn_Nouveau, #False)
  DisableGadget(#Btn_Maj, #False)
  DisableGadget(#Btn_Supprimer, #False)
  
  SetGadgetText(#Btn_Maj, "Modifier")
  SetActiveGadget(#Str_Site)
EndProcedure

;Suppression d'un site
Procedure SupprimerSite()
  If MessageRequester("Information", "Etes vous sûr de supprimer un site ?" + #CRLF$ + "cette action est irrémédiable !", #PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes
    SetWindowData(#Fenetre_principale, 3) ;C'est une suppression
    MajSite()
  EndIf
EndProcedure

;Gestionnaire de mise à jour des sites 
Procedure MajSite()
  Protected.s Site = GetGadgetText(#Str_Site)
  Protected.s Nom_Utilisateur = GetGadgetText(#Str_Nom_Utilisateur)
  Protected.s Mdp  = GetGadgetText(#Str_Mdp)
  
  Select GetWindowData(#Fenetre_principale)
    Case 0 ;Création d'un Site
      AddElement(Sites())
      With Sites()
        \Site = Site
        \Nom_Utilisateur = Nom_Utilisateur
        \Mdp = Mdp
        AddGadgetItem(#Liste_sites, -1, \Site + #LF$ + \Nom_Utilisateur + #LF$ + \Mdp)
        SetGadgetItemData(#Liste_sites, CountGadgetItems(#Liste_sites)-1, ListIndex(Sites()))
      EndWith
      
    Case 1 ;Modification d'un site
      With Sites()
        \Site = Site
        \Nom_Utilisateur = Nom_Utilisateur
        \Mdp = Mdp
        SetGadgetItemText(#Liste_sites, ListIndex(Sites()), \Site, 0)
        SetGadgetItemText(#Liste_sites, ListIndex(Sites()), \Nom_Utilisateur, 1)
        SetGadgetItemText(#Liste_sites, ListIndex(Sites()), \Mdp, 2)
      EndWith
      NouveauSite()
      
    Case 3 ;Suppression d'un site
      RemoveGadgetItem(#Liste_sites, ListIndex(Sites()))
      DeleteElement(Sites())
      
      ;Mise à jour des index de liaison ListIconGadget <-> Sites()
      ForEach(Sites())
        SetGadgetItemData(#Liste_sites, ListIndex(Sites()), ListIndex(Sites()))
      Next
      
  EndSelect
  
EndProcedure

;Sauvegarde automatique des sites à la fermeture de l'application
Procedure SauvegardeSites()
  
  ;Création d'un objet JSON
  CreateJSON(#FichierJSON)
  
  ;Insertion de la liste chainée "Sites" dans l'objet JSON
  InsertJSONList(JSONValue(#FichierJSON), Sites())
  
  ;Sauvegarde du fichier
  SaveJSON(#FichierJSON, FichierJson, #PB_JSON_PrettyPrint)
  
EndProcedure

Repeat
  Evenement = WaitWindowEvent()
  Select Evenement
      
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #Str_Site
          ;Contrôle de la saisie (Le nom du site est obligatoire)
          GestionEvenements()
        Case #Liste_sites
          ;Un site est selectionné dans la liste
          SelectionSite()
        Case #Btn_Nouveau
          ;Mise en place d'un nouveau site
          NouveauSite()
        Case #Btn_Maj
          ;Ajout ou modification d'un site
          MajSite()
        Case #Btn_Supprimer
          ;Supression d'un site
          SupprimerSite()
      EndSelect
      
    Case #PB_Event_CloseWindow
      Select EventWindow()
        Case #Fenetre_principale
          ;Fermeture de l'application et sauvegarde des sites
          SauvegardeSites()
          CloseWindow(#Fenetre_principale)
          Break
      EndSelect
      
  EndSelect
ForEver
Je vous remercie par anticipation de votre aide gracieuse qui me ser profitable.
Dernière modification par Micoute le sam. 10/déc./2016 13:12, modifié 1 fois.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Créer une liste de mots de passe non lisibles

Message par Ar-S »

A l'ouverture de ton Json, tu lis tes données

Code : Tout sélectionner

http://site1.com; user1; mdp1
http://site1.com; user2; mdp2
http://site3.com; user3; mdp3
Donc quand tu lis ce Json, tu n'affiches que les infos
Sites()\Site et Sites()\Nom_Utilisateur
et le 3eme champ tu mets ******

Lorsque l'utilisateur sélectionne une ligne, tu fais apparaître le mdp dans le string que tu veux correspondant à la liste chainée Sites()\MDP
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

[Résolu] Créer une liste de mots de passe non lisibles

Message par Micoute »

Merci beaucoup Ar-s, c'est tellement simple que je n'y avais même pas pensé.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
TazNormand
Messages : 1297
Inscription : ven. 27/oct./2006 12:19
Localisation : Calvados (14)

Re: [Résolu] Créer une liste de mots de passe non lisibles

Message par TazNormand »

Salut Micoute,

Je te conseille d'utiliser un encodage AES pour chiffrer tes mots de passes avant de les enregistrer dans ton fichiers "JSON", car stocker ses mots de passe en clair, ce n'est pas ce qu'il y a de plus prudent.
Image
Image
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: [Résolu] Créer une liste de mots de passe non lisibles

Message par Micoute »

C'est une sage précaution que j'ai pensé à utiliser.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Répondre