cmd: Extract methods to allow import from external
When methods for passwords generation and merge are extracted then external apps and scripts can use those methods without resolving to subprocess execution or injecting sys.argv. Change-Id: I99aff7852180534129fa36859075306eea776ba9 Signed-off-by: Maciej Kucia <maciej@kucia.net>
This commit is contained in:
parent
f637d139d2
commit
89e91b69bd
@ -54,6 +54,44 @@ def generate_RSA(bits=4096):
|
|||||||
return private_key, public_key
|
return private_key, public_key
|
||||||
|
|
||||||
|
|
||||||
|
def genpwd(passwords_file, length, uuid_keys, ssh_keys, blank_keys,
|
||||||
|
fernet_keys, hmac_md5_keys):
|
||||||
|
with open(passwords_file, 'r') as f:
|
||||||
|
passwords = yaml.safe_load(f.read())
|
||||||
|
|
||||||
|
for k, v in passwords.items():
|
||||||
|
if (k in ssh_keys and
|
||||||
|
(v is None
|
||||||
|
or v.get('public_key') is None
|
||||||
|
and v.get('private_key') is None)):
|
||||||
|
private_key, public_key = generate_RSA()
|
||||||
|
passwords[k] = {
|
||||||
|
'private_key': private_key,
|
||||||
|
'public_key': public_key
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
if v is None:
|
||||||
|
if k in blank_keys and v is None:
|
||||||
|
continue
|
||||||
|
if k in uuid_keys:
|
||||||
|
passwords[k] = uuidutils.generate_uuid()
|
||||||
|
elif k in hmac_md5_keys:
|
||||||
|
passwords[k] = (hmac.new(
|
||||||
|
uuidutils.generate_uuid().encode(), ''.encode(), md5)
|
||||||
|
.hexdigest())
|
||||||
|
elif k in fernet_keys:
|
||||||
|
passwords[k] = fernet.Fernet.generate_key()
|
||||||
|
else:
|
||||||
|
passwords[k] = ''.join([
|
||||||
|
random.SystemRandom().choice(
|
||||||
|
string.ascii_letters + string.digits)
|
||||||
|
for n in range(length)
|
||||||
|
])
|
||||||
|
|
||||||
|
with open(passwords_file, 'w') as f:
|
||||||
|
f.write(yaml.safe_dump(passwords, default_flow_style=False))
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
parser = argparse.ArgumentParser()
|
parser = argparse.ArgumentParser()
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
@ -91,40 +129,9 @@ def main():
|
|||||||
# length of password
|
# length of password
|
||||||
length = 40
|
length = 40
|
||||||
|
|
||||||
with open(passwords_file, 'r') as f:
|
genpwd(passwords_file, length, uuid_keys, ssh_keys, blank_keys,
|
||||||
passwords = yaml.safe_load(f.read())
|
fernet_keys, hmac_md5_keys)
|
||||||
|
|
||||||
for k, v in passwords.items():
|
|
||||||
if (k in ssh_keys and
|
|
||||||
(v is None
|
|
||||||
or v.get('public_key') is None
|
|
||||||
and v.get('private_key') is None)):
|
|
||||||
private_key, public_key = generate_RSA()
|
|
||||||
passwords[k] = {
|
|
||||||
'private_key': private_key,
|
|
||||||
'public_key': public_key
|
|
||||||
}
|
|
||||||
continue
|
|
||||||
if v is None:
|
|
||||||
if k in blank_keys and v is None:
|
|
||||||
continue
|
|
||||||
if k in uuid_keys:
|
|
||||||
passwords[k] = uuidutils.generate_uuid()
|
|
||||||
elif k in hmac_md5_keys:
|
|
||||||
passwords[k] = (hmac.new(
|
|
||||||
uuidutils.generate_uuid().encode(), ''.encode(), md5)
|
|
||||||
.hexdigest())
|
|
||||||
elif k in fernet_keys:
|
|
||||||
passwords[k] = fernet.Fernet.generate_key()
|
|
||||||
else:
|
|
||||||
passwords[k] = ''.join([
|
|
||||||
random.SystemRandom().choice(
|
|
||||||
string.ascii_letters + string.digits)
|
|
||||||
for n in range(length)
|
|
||||||
])
|
|
||||||
|
|
||||||
with open(passwords_file, 'w') as f:
|
|
||||||
f.write(yaml.safe_dump(passwords, default_flow_style=False))
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
main()
|
main()
|
||||||
|
@ -16,23 +16,26 @@ import argparse
|
|||||||
import yaml
|
import yaml
|
||||||
|
|
||||||
|
|
||||||
|
def mergepwd(old, new, final):
|
||||||
|
with open(old, "r") as old_file:
|
||||||
|
old_passwords = yaml.safe_load(old_file)
|
||||||
|
|
||||||
|
with open(new, "r") as new_file:
|
||||||
|
new_passwords = yaml.safe_load(new_file)
|
||||||
|
|
||||||
|
new_passwords.update(old_passwords)
|
||||||
|
|
||||||
|
with open(final, "w") as destination:
|
||||||
|
yaml.safe_dump(new_passwords, destination, default_flow_style=False)
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
parser = argparse.ArgumentParser()
|
parser = argparse.ArgumentParser()
|
||||||
parser.add_argument("--old", help="old password file", required=True)
|
parser.add_argument("--old", help="old password file", required=True)
|
||||||
parser.add_argument("--new", help="new password file", required=True)
|
parser.add_argument("--new", help="new password file", required=True)
|
||||||
parser.add_argument("--final", help="merged password file", required=True)
|
parser.add_argument("--final", help="merged password file", required=True)
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
mergepwd(args.old, args.new, args.final)
|
||||||
with open(args.old, "r") as old_file:
|
|
||||||
old_passwords = yaml.safe_load(old_file)
|
|
||||||
|
|
||||||
with open(args.new, "r") as new_file:
|
|
||||||
new_passwords = yaml.safe_load(new_file)
|
|
||||||
|
|
||||||
new_passwords.update(old_passwords)
|
|
||||||
|
|
||||||
with open(args.final, "w") as destination:
|
|
||||||
yaml.safe_dump(new_passwords, destination, default_flow_style=False)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
Loading…
Reference in New Issue
Block a user