82 lines
4.1 KiB
Python
82 lines
4.1 KiB
Python
from pathlib import Path
|
|
import numpy as np
|
|
from secrets import choice
|
|
from string import ascii_lowercase
|
|
from docs.scripts.utils import render_markdown_template, emojis
|
|
from src.models import NKodePolicy, KeypadSize
|
|
from src.nkode_api import NKodeAPI
|
|
from src.utils import select_keys_with_passcode_values
|
|
|
|
|
|
def display_icons(icons_array: np.ndarray, kp: KeypadSize) -> str:
|
|
icons = "["
|
|
for row in icons_array.reshape(-1, kp.numb_of_keys):
|
|
icons += ",".join(row)
|
|
icons += "<br/>"
|
|
icons = icons[:-5]
|
|
icons += "]"
|
|
return icons
|
|
|
|
def display_icons_keypad(icons_array: np.ndarray, props_per_key: int) -> str:
|
|
icons = ""
|
|
for idx, row in enumerate(icons_array.reshape(-1, props_per_key)):
|
|
icons += f"Key {idx}: "
|
|
icons += str(row)
|
|
icons += "<br/>"
|
|
return icons
|
|
|
|
if __name__ == "__main__":
|
|
api = NKodeAPI()
|
|
|
|
policy = NKodePolicy(
|
|
max_nkode_len=10,
|
|
min_nkode_len=4,
|
|
distinct_positions=0,
|
|
distinct_properties=4,
|
|
)
|
|
keypad_size = KeypadSize(
|
|
numb_of_keys=6,
|
|
props_per_key=9
|
|
)
|
|
customer_id = api.create_new_customer(keypad_size, policy)
|
|
username = "test_username" + "".join([choice(ascii_lowercase) for _ in range(6)])
|
|
signup_session_id, set_signup_keypad = api.generate_signup_keypad(customer_id, username)
|
|
ordered_set_icons = emojis[set_signup_keypad]
|
|
passcode_len = 4
|
|
passcode_property_indices = np.random.choice(set_signup_keypad.reshape(-1), size=passcode_len,
|
|
replace=False).tolist()
|
|
selected_keys_set = select_keys_with_passcode_values(passcode_property_indices, set_signup_keypad,
|
|
keypad_size.numb_of_keys)
|
|
confirm_keypad = api.set_nkode(customer_id, selected_keys_set, signup_session_id)
|
|
selected_keys_confirm = select_keys_with_passcode_values(passcode_property_indices, confirm_keypad,
|
|
keypad_size.numb_of_keys)
|
|
ordered_confirm_icons = emojis[confirm_keypad]
|
|
success = api.confirm_nkode(customer_id, selected_keys_confirm, signup_session_id)
|
|
context = {
|
|
"email": "user@example.com",
|
|
"signup_session_id": signup_session_id,
|
|
"set_keypad": display_icons_keypad(set_signup_keypad.reshape(-1, keypad_size.numb_of_keys), keypad_size.numb_of_keys),
|
|
"keypad_icons": display_icons(emojis[:keypad_size.total_props], keypad_size),
|
|
"ordered_keypad": display_icons_keypad(ordered_set_icons, keypad_size.numb_of_keys),
|
|
"passcode_user_icons": str(emojis[passcode_property_indices]),
|
|
"selected_keys_set": str(selected_keys_set),
|
|
"confirm_keypad": display_icons_keypad(confirm_keypad.reshape(-1, keypad_size.numb_of_keys), keypad_size.numb_of_keys),
|
|
"confirm_ordered_keypad": display_icons_keypad(ordered_confirm_icons.reshape(-1, keypad_size.numb_of_keys), keypad_size.numb_of_keys),
|
|
"confirm_key_selection": selected_keys_confirm
|
|
}
|
|
render_markdown_template(Path("../templates/enrollment_diagram.template.md"), Path("../enrollment_diagram.md"), context)
|
|
login_keypad = api.get_login_keypad(username, customer_id)
|
|
selected_keys_login = select_keys_with_passcode_values(passcode_property_indices, login_keypad,
|
|
keypad_size.props_per_key)
|
|
ordered_login_keypad = emojis[login_keypad]
|
|
context = {
|
|
"email": "user@example.com",
|
|
"keypad_icons": display_icons(emojis[:keypad_size.total_props], keypad_size),
|
|
"login_keypad": display_icons_keypad(login_keypad.reshape(-1, keypad_size.props_per_key), keypad_size.props_per_key),
|
|
"ordered_login_icons": display_icons_keypad(ordered_login_keypad.reshape(-1, keypad_size.props_per_key),keypad_size.props_per_key),
|
|
"passcode_user_icons": str(emojis[passcode_property_indices]),
|
|
"selected_keys_login": str(selected_keys_login)
|
|
}
|
|
api.login(customer_id, username, selected_keys_login)
|
|
render_markdown_template(Path("../templates/login_diagram.template.md"), Path("../login_diagram.md"), context)
|