36 lines
1.0 KiB
Python
Executable File
36 lines
1.0 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
import sys
|
|
|
|
import petname
|
|
import secrets
|
|
from itertools import chain
|
|
|
|
def generate_password(names: int) -> str:
|
|
"""
|
|
Generate a password from pet names and a random number
|
|
|
|
:param names: Number of names to generate
|
|
:return: A simple yet secure password
|
|
"""
|
|
results = []
|
|
while len(results) < names:
|
|
candidate = petname.Name().capitalize()
|
|
results.append(candidate) if len(candidate) > 3 else None
|
|
results.append(str(secrets.randbelow(8999)+1000))
|
|
return ".".join(results)
|
|
|
|
def generate_insane_password(length: int) -> str:
|
|
"""
|
|
Generate an insane password using extended ascii characters
|
|
|
|
:param length:
|
|
:return:
|
|
"""
|
|
ascii_pool: str = ''.join(chr(i) for i in chain(range(40, 127), range(180, 256)))
|
|
return ''.join(secrets.choice(ascii_pool) for _ in range(length))
|
|
|
|
if __name__ == '__main__':
|
|
if len(sys.argv) <= 1:
|
|
print(generate_password(3))
|
|
elif sys.argv[1] == '-insane' or sys.argv[1] == '-i':
|
|
print(generate_insane_password(20)) |