update emojis

This commit is contained in:
2025-03-24 10:04:11 -05:00
parent 0f7bda0942
commit 1846dc1065
4 changed files with 76 additions and 59 deletions

View File

@@ -12,26 +12,26 @@ sequenceDiagram
Server->>Server: Create Signup Session Server->>Server: Create Signup Session
Note over User,Server: Set nKode Note over User,Server: Set nKode
Server-->>-Client: signup_session_id, set_keypad, icons Server-->>-Client: signup_session_id, set_keypad, icons
Note left of Server: signup_session_id:<br/>d7e50a75-d3ff-482a-b0e7-ce99c3838c1a Note left of Server: signup_session_id:<br/>51b187b9-c930-4f5d-81da-c11c082f2c64
Note left of Server: set_keypad:<br/>Key 0: [12 13 20 21 16]<br/>Key 1: [ 6 1 14 9 4]<br/>Key 2: [ 0 7 26 15 28]<br/>Key 3: [24 19 2 27 10]<br/>Key 4: [18 25 8 3 22]<br/> Note left of Server: set_keypad:<br/>Key 0: [ 9 29 3 49 50 25]<br/>Key 1: [27 2 12 22 14 16]<br/>Key 2: [36 47 21 13 23 7]<br/>Key 3: [45 11 30 4 32 43]<br/>Key 4: [18 20 39 40 41 52]<br/>Key 5: [ 0 38 48 31 5 34]<br/>
Note left of Server: Icons:<br/>[😀,😂,🥳,😍,🤓<br/>😎,🥺,😡,😱,🤯<br/>🥰,😴,🤔,🙃,😇<br/>🤖,👽,👾,🐱,🐶<br/>🦁,🐻,🐸,🐙,🦄<br/>🌟,⚡,🔥,🍕,🎉] Note left of Server: Icons:<br/>[🍎,🍏,🍊,🍋,🍌,🍉<br/>🍇,🍓,🍒,🍑,🥭,🍍<br/>🥥,🥝,🍅,🍆,🥑,🥕<br/>🌽,🥔,🍠,🥐,🥖,🥨<br/>🥯,🥞,🧀,🍖,🍗,🥚<br/>🍔,🍟,🍕,🌭,🥪,🌮<br/>🌯,🍣,🍤,🍙,🍚,🍜<br/>🍲,🍛,🍱,🥟,🍦,🍧<br/>🍨,🍩,🍪,🎂,🍰,🧁]
Client->>Client: Order Icons by keypad Client->>Client: Order Icons by keypad
Client->>User: Display Keypad Client->>User: Display Keypad
Note left of Client: Key 0: ['🤔' '🙃' '🦁' '🐻' '👽']<br/>Key 1: ['🥺' '😂' '😇' '🤯' '🤓']<br/>Key 2: ['😀' '😡' '' '🤖' '🍕']<br/>Key 3: ['🦄' '🐶' '🥳' '🔥' '🥰']<br/>Key 4: ['🐱' '🌟' '😱' '😍' '🐸']<br/> Note left of Client: Key 0: ['🍑' '🥚' '🍋' '🍩' '🍪' '🥞']<br/>Key 1: ['🍖' '🍊' '🥥' '🥖' '🍅' '🥑']<br/>Key 2: ['🌯' '🍧' '🥐' '🥝' '🥨' '🍓']<br/>Key 3: ['🥟' '🍍' '🍔' '🍌' '🍕' '🍛']<br/>Key 4: ['🌽' '🍠' '🍙' '🍚' '🍜' '🍰']<br/>Key 5: ['🍎' '🍤' '🍨' '🍟' '🍉' '🥪']<br/>
Note left of User: User icons: ['🤓' '🐶' '🦄' '👽'] Note left of User: User icons: ['🌯' '🍖' '🍰' '🍓']
User->>Client: Set Key Selection: [1, 3, 3, 0] User->>Client: Set Key Selection: [2, 1, 4, 2]
Client->>+Server: Set nKode:<br/>d7e50a75-d3ff-482a-b0e7-ce99c3838c1a<br/>[1, 3, 3, 0] Client->>+Server: Set nKode:<br/>51b187b9-c930-4f5d-81da-c11c082f2c64<br/>[2, 1, 4, 2]
Server->>Server: Disperse Set Keypad Server->>Server: Disperse Set Keypad
Note over User,Server: Confirm nKode Note over User,Server: Confirm nKode
Server-->>-Client: signup_session_id, confirm_keypad, icons Server-->>-Client: signup_session_id, confirm_keypad, icons
Note left of Server: signup_session_id:<br/>d7e50a75-d3ff-482a-b0e7-ce99c3838c1a Note left of Server: signup_session_id:<br/>51b187b9-c930-4f5d-81da-c11c082f2c64
Note left of Server: confirm_keypad:<br/>Key 0: [ 6 13 8 15 10]<br/>Key 1: [24 7 14 3 16]<br/>Key 2: [12 25 2 9 28]<br/>Key 3: [ 0 1 20 27 22]<br/>Key 4: [18 19 26 21 4]<br/> Note left of Server: confirm_keypad:<br/>Key 0: [27 47 39 4 5 25]<br/>Key 1: [45 20 48 49 14 7]<br/>Key 2: [ 9 38 12 13 32 52]<br/>Key 3: [36 2 30 40 50 34]<br/>Key 4: [18 11 3 31 23 16]<br/>Key 5: [ 0 29 21 22 41 43]<br/>
Client->>Client: Order Icons by keypad Client->>Client: Order Icons by keypad
Client->>User: Display Keypad Client->>User: Display Keypad
Note left of Client: Key 0: ['🥺' '🙃' '😱' '🤖' '🥰']<br/>Key 1: ['🦄' '😡' '😇' '😍' '👽']<br/>Key 2: ['🤔' '🌟' '🥳' '🤯' '🍕']<br/>Key 3: ['😀' '😂' '🦁' '🔥' '🐸']<br/>Key 4: ['🐱' '🐶' '' '🐻' '🤓']<br/> Note left of Client: Key 0: ['🍖' '🍧' '🍙' '🍌' '🍉' '🥞']<br/>Key 1: ['🥟' '🍠' '🍨' '🍩' '🍅' '🍓']<br/>Key 2: ['🍑' '🍤' '🥥' '🥝' '🍕' '🍰']<br/>Key 3: ['🌯' '🍊' '🍔' '🍚' '🍪' '🥪']<br/>Key 4: ['🌽' '🍍' '🍋' '🍟' '🥨' '🥑']<br/>Key 5: ['🍎' '🥚' '🥐' '🥖' '🍜' '🍛']<br/>
Note left of User: User icons: ['🤓' '🐶' '🦄' '👽'] Note left of User: User icons: ['🌯' '🍖' '🍰' '🍓']
User->>Client: Key Selection: [4, 4, 1, 1] User->>Client: Key Selection: [3, 0, 2, 1]
Client->>+Server: Confirm nKode:<br/>d7e50a75-d3ff-482a-b0e7-ce99c3838c1a<br/>[4, 4, 1, 1] Client->>+Server: Confirm nKode:<br/>51b187b9-c930-4f5d-81da-c11c082f2c64<br/>[3, 0, 2, 1]
Server->>Server: Create User Server->>Server: Create User
Server-->>-Client: Success Server-->>-Client: Success
``` ```

View File

@@ -10,13 +10,13 @@ sequenceDiagram
Note left of User: email: user@example.com Note left of User: email: user@example.com
User->>Server: Submit Email User->>Server: Submit Email
Server->>Client: login_keypad, icons Server->>Client: login_keypad, icons
Note left of Server: Login Keypad:<br/>Key 0: [12 13 20 21 16 23]<br/>Key 1: [ 6 1 14 9 4 29]<br/>Key 2: [ 0 7 26 15 28 11]<br/>Key 3: [24 19 2 27 10 5]<br/>Key 4: [18 25 8 3 22 17]<br/> Note left of Server: Login Keypad:<br/>Key 0: [ 9 1 29 3 49 50 33 25 35]<br/>Key 1: [27 28 2 12 22 14 24 16 17]<br/>Key 2: [36 37 47 21 13 23 42 7 26]<br/>Key 3: [45 19 11 30 4 32 51 43 8]<br/>Key 4: [18 46 20 39 40 41 15 52 44]<br/>Key 5: [ 0 10 38 48 31 5 6 34 53]<br/>
Note left of Server: Icons:<br/>[😀,😂,🥳,😍,🤓<br/>😎,🥺,😡,😱,🤯<br/>🥰,😴,🤔,🙃,😇<br/>🤖,👽,👾,🐱,🐶<br/>🦁,🐻,🐸,🐙,🦄<br/>🌟,⚡,🔥,🍕,🎉] Note left of Server: Icons:<br/>[🍎,🍏,🍊,🍋,🍌,🍉<br/>🍇,🍓,🍒,🍑,🥭,🍍<br/>🥥,🥝,🍅,🍆,🥑,🥕<br/>🌽,🥔,🍠,🥐,🥖,🥨<br/>🥯,🥞,🧀,🍖,🍗,🥚<br/>🍔,🍟,🍕,🌭,🥪,🌮<br/>🌯,🍣,🍤,🍙,🍚,🍜<br/>🍲,🍛,🍱,🥟,🍦,🍧<br/>🍨,🍩,🍪,🎂,🍰,🧁]
Client->>Client: Order Icons Client->>Client: Order Icons
Client->>User: Display Keypad Client->>User: Display Keypad
Note left of Client: Key 0: ['🤔' '🙃' '🦁' '🐻' '👽' '🐙']<br/>Key 1: ['🥺' '😂' '😇' '🤯' '🤓' '🎉']<br/>Key 2: ['😀' '😡' '' '🤖' '🍕' '😴']<br/>Key 3: ['🦄' '🐶' '🥳' '🔥' '🥰' '😎']<br/>Key 4: ['🐱' '🌟' '😱' '😍' '🐸' '👾']<br/> Note left of Client: Key 0: ['🍑' '🍏' '🥚' '🍋' '🍩' '🍪' '🌭' '🥞' '🌮']<br/>Key 1: ['🍖' '🍗' '🍊' '🥥' '🥖' '🍅' '🥯' '🥑' '🥕']<br/>Key 2: ['🌯' '🍣' '🍧' '🥐' '🥝' '🥨' '🍲' '🍓' '🧀']<br/>Key 3: ['🥟' '🥔' '🍍' '🍔' '🍌' '🍕' '🎂' '🍛' '🍒']<br/>Key 4: ['🌽' '🍦' '🍠' '🍙' '🍚' '🍜' '🍆' '🍰' '🍱']<br/>Key 5: ['🍎' '🥭' '🍤' '🍨' '🍟' '🍉' '🍇' '🥪' '🧁']<br/>
Note left of User: User passcode icons: ['🤓' '🐶' '🦄' '👽'] Note left of User: User passcode icons: ['🌯' '🍖' '🍰' '🍓']
User->>Client: Selected Keys<br/>[1, 3, 3, 0] User->>Client: Selected Keys<br/>[2, 1, 4, 2]
Client->>Server: Login:<br/>email: user@example.com<br/>selected_keys: [1, 3, 3, 0] Client->>Server: Login:<br/>email: user@example.com<br/>selected_keys: [2, 1, 4, 2]
Server-->>Client: Success Server-->>Client: Success
``` ```

View File

@@ -1,35 +1,13 @@
# Render markdown template for nKode enrollment
from pathlib import Path from pathlib import Path
import numpy as np import numpy as np
from jinja2 import Environment, FileSystemLoader, select_autoescape
from secrets import choice from secrets import choice
from string import ascii_lowercase from string import ascii_lowercase
from docs.scripts.utils import render_markdown_template, emojis
from src.models import NKodePolicy, KeypadSize from src.models import NKodePolicy, KeypadSize
from src.nkode_api import NKodeAPI from src.nkode_api import NKodeAPI
from src.utils import select_keys_with_passcode_values from src.utils import select_keys_with_passcode_values
def render_markdown_template(template_path, output_path, context):
template_dir = template_path.parent
template_file = template_path.name
env = Environment(
loader=FileSystemLoader(template_dir),
autoescape=select_autoescape(['html', 'xml']),
trim_blocks=True,
lstrip_blocks=True
)
template = env.get_template(template_file)
rendered = template.render(**context)
with open(output_path, 'w') as f:
f.write(rendered)
print(f"Template rendered to {output_path}")
def display_icons(icons_array: np.ndarray, kp: KeypadSize) -> str: def display_icons(icons_array: np.ndarray, kp: KeypadSize) -> str:
icons = "[" icons = "["
for row in icons_array.reshape(-1, kp.numb_of_keys): for row in icons_array.reshape(-1, kp.numb_of_keys):
@@ -49,14 +27,7 @@ def display_icons_keypad(icons_array: np.ndarray, props_per_key: int) -> str:
if __name__ == "__main__": if __name__ == "__main__":
api = NKodeAPI() api = NKodeAPI()
user_icons = np.array([
"😀", "😂", "🥳", "😍", "🤓",
"😎", "🥺", "😡", "😱", "🤯",
"🥰", "😴", "🤔", "🙃", "😇",
"🤖", "👽", "👾", "🐱", "🐶",
"🦁", "🐻", "🐸", "🐙", "🦄",
"🌟", "", "🔥", "🍕", "🎉"
])
policy = NKodePolicy( policy = NKodePolicy(
max_nkode_len=10, max_nkode_len=10,
min_nkode_len=4, min_nkode_len=4,
@@ -64,12 +35,12 @@ if __name__ == "__main__":
distinct_properties=4, distinct_properties=4,
) )
keypad_size = KeypadSize( keypad_size = KeypadSize(
numb_of_keys=5, numb_of_keys=6,
props_per_key=6 props_per_key=9
) )
customer_id = api.create_new_customer(keypad_size, policy) customer_id = api.create_new_customer(keypad_size, policy)
signup_session_id, set_signup_keypad = api.generate_signup_keypad(customer_id) signup_session_id, set_signup_keypad = api.generate_signup_keypad(customer_id)
ordered_set_icons = user_icons[set_signup_keypad] ordered_set_icons = emojis[set_signup_keypad]
username = "test_username" + "".join([choice(ascii_lowercase) for _ in range(6)]) username = "test_username" + "".join([choice(ascii_lowercase) for _ in range(6)])
passcode_len = 4 passcode_len = 4
passcode_property_indices = np.random.choice(set_signup_keypad.reshape(-1), size=passcode_len, passcode_property_indices = np.random.choice(set_signup_keypad.reshape(-1), size=passcode_len,
@@ -79,16 +50,16 @@ if __name__ == "__main__":
confirm_keypad = api.set_nkode(username, customer_id, selected_keys_set, signup_session_id) confirm_keypad = api.set_nkode(username, customer_id, selected_keys_set, signup_session_id)
selected_keys_confirm = select_keys_with_passcode_values(passcode_property_indices, confirm_keypad, selected_keys_confirm = select_keys_with_passcode_values(passcode_property_indices, confirm_keypad,
keypad_size.numb_of_keys) keypad_size.numb_of_keys)
ordered_confirm_icons = user_icons[confirm_keypad] ordered_confirm_icons = emojis[confirm_keypad]
print(f"Selected Keys\n{selected_keys_confirm}") print(f"Selected Keys\n{selected_keys_confirm}")
success = api.confirm_nkode(username, customer_id, selected_keys_confirm, signup_session_id) success = api.confirm_nkode(username, customer_id, selected_keys_confirm, signup_session_id)
context = { context = {
"email": "user@example.com", "email": "user@example.com",
"signup_session_id": signup_session_id, "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), "set_keypad": display_icons_keypad(set_signup_keypad.reshape(-1, keypad_size.numb_of_keys), keypad_size.numb_of_keys),
"keypad_icons": display_icons(user_icons, keypad_size), "keypad_icons": display_icons(emojis[:keypad_size.total_props], keypad_size),
"ordered_keypad": display_icons_keypad(ordered_set_icons, keypad_size.numb_of_keys), "ordered_keypad": display_icons_keypad(ordered_set_icons, keypad_size.numb_of_keys),
"passcode_user_icons": str(user_icons[passcode_property_indices]), "passcode_user_icons": str(emojis[passcode_property_indices]),
"selected_keys_set": str(selected_keys_set), "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_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_ordered_keypad": display_icons_keypad(ordered_confirm_icons.reshape(-1, keypad_size.numb_of_keys), keypad_size.numb_of_keys),
@@ -98,13 +69,13 @@ if __name__ == "__main__":
login_keypad = api.get_login_keypad(username, customer_id) login_keypad = api.get_login_keypad(username, customer_id)
selected_keys_login = select_keys_with_passcode_values(passcode_property_indices, login_keypad, selected_keys_login = select_keys_with_passcode_values(passcode_property_indices, login_keypad,
keypad_size.props_per_key) keypad_size.props_per_key)
ordered_login_keypad = user_icons[login_keypad] ordered_login_keypad = emojis[login_keypad]
context = { context = {
"email": "user@example.com", "email": "user@example.com",
"keypad_icons": display_icons(user_icons, keypad_size), "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), "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), "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(user_icons[passcode_property_indices]), "passcode_user_icons": str(emojis[passcode_property_indices]),
"selected_keys_login": str(selected_keys_login) "selected_keys_login": str(selected_keys_login)
} }
api.login(customer_id, username, selected_keys_login) api.login(customer_id, username, selected_keys_login)

46
docs/scripts/utils.py Normal file
View File

@@ -0,0 +1,46 @@
import numpy as np
from jinja2 import Environment, FileSystemLoader, select_autoescape
emojis = np.array([
"🍎", "🍏", "🍊", "🍋", "🍌", "🍉", "🍇", "🍓", "🍒", "🍑",
"🥭", "🍍", "🥥", "🥝", "🍅", "🍆", "🥑", "🥕", "🌽", "🥔",
"🍠", "🥐", "🥖", "🥨", "🥯", "🥞", "🧀", "🍖", "🍗", "🥚",
"🍔", "🍟", "🍕", "🌭", "🥪", "🌮", "🌯", "🍣", "🍤", "🍙",
"🍚", "🍜", "🍲", "🍛", "🍱", "🥟", "🍦", "🍧", "🍨", "🍩",
"🍪", "🎂", "🍰", "🧁", "🍫", "🍬", "🍭", "🍮", "", "🍵",
"🥤", "🧃", "🍷", "🍸", "🍹", "🍺", "🥂", "🥃", "🐶", "🐱",
"🐭", "🐹", "🐰", "🦊", "🐻", "🐼", "🐨", "🐯", "🦁", "🐮",
"🐷", "🐽", "🐴", "🦄", "🦓", "🦒", "🐘", "🦏", "🐪", "🐫",
"🐑", "🐐", "🐓", "🐔", "🐣", "🐤", "🐦", "🦅", "🦇", "🦉",
"🐺", "🐍", "🐢", "🦎", "🐙", "🦑", "🦐", "🦀", "🐡", "🐠",
"🐟", "🐬", "🐳", "🦈", "🐊", "🐅", "🐆", "🐾", "🦋", "🐞",
"🐝", "🐜", "🕷️", "🕸️", "🌸", "🌹", "🌺", "🌻", "🌼", "🌷",
"🌱", "🌲", "🌳", "🌴", "🌵", "🌾", "🌿", "🍀", "🍁", "🍂",
"🍃", "", "🌟", "", "⚡️", "☄️", "☀️", "🌤️", "", "🌥️",
"☁️", "🌦️", "🌧️", "⛈️", "🌩️", "❄️", "🌬️", "💨", "🌈", "",
"💧", "🌊", "🔥", "💥", "", "🌋", "⛰️", "🏔️", "🏕️", "🏖️",
"🏜️", "🏝️", "🏞️", "🏟️", "🏠", "🏡", "🏢", "🏣", "🏤", "🏥",
"🏦", "🏨", "🏩", "🏪", "🏫", "🏬", "🏭", "🏯", "🏰", "",
"⛩️", "🕌", "🕍", "🗿", "🎡", "🎢", "🎠", "🎪", "🎨", "🎬",
"🎤", "🎧", "🎼", "🎹", "🎺", "🎸", "🥁", "🎻", "🎮", "🎲"
])
def render_markdown_template(template_path, output_path, context: dict):
template_dir = template_path.parent
template_file = template_path.name
env = Environment(
loader=FileSystemLoader(template_dir),
autoescape=select_autoescape(['html', 'xml']),
trim_blocks=True,
lstrip_blocks=True
)
template = env.get_template(template_file)
rendered = template.render(**context)
with open(output_path, 'w') as f:
f.write(rendered)
print(f"Template rendered to {output_path}")