#!/usr/bin/env python3 import infamy import copy from passlib.hash import sha256_crypt import random import string import re def generate_restrictred_credential(): credential = "".join(random.choices(string.ascii_lowercase, k=64)) while not re.match("^(?![0-9])[\w]+$", credential): credential = "".join(random.choices(string.ascii_lowercase, k=64)) return credential with infamy.Test() as test: with test.step("Initialize"): env = infamy.Env(infamy.std_topology("1x1")) target = env.attach("target", "mgmt") with test.step("Add new user"): username = generate_restrictred_credential() password = generate_restrictred_credential() hashed_password = sha256_crypt.using(rounds=5000).hash(password) print(f"username: {username}") print(f"password: {password}") print(f"hashed_password: {hashed_password}") target.put_config_dict("ietf-system", { "system": { "authentication": { "user": [ { "name": username, "password": hashed_password, } ] } } }) with test.step(f"Verify user ({username} / {hashed_password})"): running = target.get_config_dict("/ietf-system:system") users = running["system"]["authentication"]["user"] user_found = False for user in users: if user["name"] == username: user_found = True assert user["password"] == hashed_password break assert user_found, f"User {username} not found" with test.step(f"Delete user ({username} / {hashed_password})"): running = target.get_config_dict("/ietf-system:system") new = copy.deepcopy(running) for userx in new["system"]["authentication"]["user"]: if userx["name"] == username: del new["system"]["authentication"]["user"][username] break target.put_diff_dicts("ietf-system", running, new) with test.step(f"Verify erasure of user ({username} / {hashed_password})"): running = target.get_config_dict("/ietf-system:system") users = running["system"]["authentication"]["user"] for user in users: assert user["name"] != username, f"User {username} not deleted" test.succeed()