#!/usr/bin/env python
import sys
def mkpass(**kw):
"""
usage: mkpass(kw['size']=8, kw['type']='dlLp', kw['include']=None, kw['exclude']=None, kw['debug']=False)
d: digits
l: lower case letters
L: upper case letters
p: punctuation
"""
from string import digits,letters,punctuation
from random import choice
strs=''
for t in kw['type']:
try:
strs+={ 'd':digits, 'l':letters[0:26], 'L':letters[26:], 'p':punctuation }[t]
except:
print("Please specify the correct TYPE string.")
print("for example: -t dlL")
sys.exit(0)
if kw['include']:
strs+=kw['include']
if kw['exclude']:
for e in kw['exclude']:
strs=strs.replace(e, '', 1)
if kw['debug']: print("Generating password from string\n%s\n" % strs)
return ''.join( [ choice(strs) for i in range( kw['size'] ) ])
if __name__=='__main__':
from optparse import OptionParser
parser=OptionParser()
parser.add_option("-s", "--size", action="store", type="int", dest="size", default=8)
parser.add_option("-t", "--type", action="store", type="string", dest="type", default="dlLp", help="TYPE can be d(digits), l(lower case letters), L(upper case letters) and p(punctuations) or any of the combinations of them, defaults to dlLp")
parser.add_option("-i", "--include", action="store", type="string", dest="include",default=None, help="use backslash to escape punctuations '\"`?!$;")
parser.add_option("-e", "--exclude", action="store", type="string", dest="exclude",default=None, help="use backslash to escape punctuations '\"`?!$;")
parser.add_option("-d", "--debug", action="store_true", dest="debug")
(opts,args)=parser.parse_args()
print mkpass(size=opts.size, type=opts.type, include=opts.include, exclude=opts.exclude, debug=opts.debug)