Générateur de mot de passe python / wxpython

Description

Un générateur de mot de passe écrit en Python / wxPython, sans aucune prétention ! Je débute dans wxPython, cette appli fait plutot office d'essais :-)

Source / Exemple :


#!/usr/bin/env python
#-*- coding: ISO-8859-1 -*-

import wx
import os
import sys

class myApp(wx.Frame):
    #__init__:begin
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title, style=wx.DEFAULT_FRAME_STYLE ^ wx.RESIZE_BORDER ^ wx.MAXIMIZE_BOX)

        icon = wx.Icon(name=os.path.join(sys.path[0],"icon_secure.ico"), type=wx.BITMAP_TYPE_ICO)
        self.SetIcon(icon)

        panel = wx.Panel(self, -1) # voir style=wx.SIMPLE_BORDER ou autre

        ## START content

        MainSizer = wx.BoxSizer(wx.VERTICAL)
        TopBox = wx.BoxSizer(wx.HORIZONTAL)
        InTopBoxRight = wx.BoxSizer(wx.VERTICAL)
        hbox0 = wx.GridBagSizer(5,5)
        hbox1 = wx.BoxSizer(wx.HORIZONTAL)
        hbox2 = wx.BoxSizer(wx.HORIZONTAL)

        Logo = os.path.join(sys.path[0],'icon-main.gif')
        img = wx.Image(Logo, wx.BITMAP_TYPE_ANY)
        sb = wx.StaticBitmap(panel, -1, wx.BitmapFromImage(img))

        TopBox.Add(sb, 0)

        ST_PwLenght = wx.StaticText(panel, -1, "Key lenght")
        self.SC_PwLenght = wx.SpinCtrl(panel, -1, "", size=(60,-1))
        self.SC_PwLenght.SetRange(2,62)
        self.SC_PwLenght.SetValue(8)
        self.CB_Alphanum = wx.CheckBox(panel, -1, "Alphanumeric")
        self.CB_SpecChars = wx.CheckBox(panel, -1, "Special chars")
        self.TC_Result = wx.TextCtrl(panel, -1, "", size=(225, -1), style=wx.TE_READONLY)
        BTN_Generate = wx.Button(panel, -1, "Generate")
        BTN_Generate.Bind(wx.EVT_BUTTON, self.onGenerate)
        ST_Copyright = wx.StaticText(panel, -1, "Copyleft © SViollat 2011")

        self.CB_Alphanum.SetValue(True)

        hbox0.Add(ST_PwLenght, (0,0), (1,1), wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.RIGHT | wx.TOP, 5)
        hbox0.Add(self.SC_PwLenght, (0,1), (1,1), wx.RIGHT | wx.TOP, 5)
        hbox0.Add(self.CB_Alphanum, (0,2), (1,1), wx.ALIGN_CENTER_VERTICAL | wx.RIGHT | wx.TOP, 5)
        hbox0.Add(self.CB_SpecChars, (0,3), (1,1), wx.ALIGN_CENTER_VERTICAL | wx.RIGHT | wx.TOP, 5)
        hbox1.Add(self.TC_Result, 0, wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.RIGHT | wx.TOP, 5)
        hbox1.Add(BTN_Generate, 0, wx.RIGHT | wx.TOP, 5)
        hbox2.Add(ST_Copyright, 0, wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.RIGHT | wx.TOP | wx.BOTTOM, 5)

        InTopBoxRight.Add(hbox0, 0)
        InTopBoxRight.Add(hbox1, 0)
        InTopBoxRight.Add(hbox2, 0)

        TopBox.Add(InTopBoxRight, 0)

        MainSizer.Add(TopBox, 0)

        ## END content

        panel.SetSizer(MainSizer)

        self.Centre()
        self.Show(True)
        MainSizer.Fit(self)

    def onGenerate(self, event):

        import random

        AlphaNum = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
        All = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890&#{}()|-_^@=$%<>!:;.,?"

        if not self.CB_Alphanum.IsChecked() and not self.CB_SpecChars.IsChecked():
            self.GenerateWarning("PWGen error","Error.\nYou must choose either Alphanumeric and/or Special chars !")
            self.CB_Alphanum.SetValue(True)

        else:
            if self.CB_Alphanum.IsChecked():
                choice = AlphaNum

            if self.CB_SpecChars.IsChecked():
                choice = All

            Lenght = self.SC_PwLenght.GetValue()
            GeneratedPW = ''.join(random.sample(choice, int(Lenght)))
            self.TC_Result.SetValue(GeneratedPW)

    def GenerateWarning(self, titre, content):
        dialog = wx.MessageDialog(None, content, titre, wx.OK | wx.ICON_EXCLAMATION)
        dialog.ShowModal()
        dialog.Destroy()

app = wx.App()
myApp(None, -1, 'PWGen')
app.MainLoop()

Conclusion :


Une version CLI existe également, sujet d'un prochain post :-) Merci de vos retours !!

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.