fix nkode api; username should be specified at the beginning of the enrollment
This commit is contained in:
@@ -15,6 +15,9 @@ class NKodeAPI:
|
||||
customers: dict[UUID, Customer] = field(default_factory=dict)
|
||||
signup_sessions: dict[UUID, UserSignupSession] = field(default_factory=dict)
|
||||
|
||||
def get_customer(self, customer_id: UUID) -> Customer:
|
||||
return self.customers[customer_id]
|
||||
|
||||
def create_new_customer(self, keypad_size: KeypadSize, nkode_policy: NKodePolicy) -> UUID:
|
||||
new_customer = Customer.create(
|
||||
cipher=CustomerCipher.create(keypad_size),
|
||||
@@ -23,13 +26,17 @@ class NKodeAPI:
|
||||
self.customers[new_customer.customer_id] = new_customer
|
||||
return new_customer.customer_id
|
||||
|
||||
def generate_signup_keypad(self, customer_id: UUID) -> tuple[UUID, np.ndarray]:
|
||||
def generate_signup_keypad(self, customer_id: UUID, username: str) -> tuple[UUID, np.ndarray]:
|
||||
if customer_id not in self.customers.keys():
|
||||
raise ValueError(f"Customer with ID '{customer_id}' does not exist")
|
||||
customer = self.customers[customer_id]
|
||||
if username in customer.users.keys():
|
||||
raise ValueError(f"Username '{username}' already exists for this customer")
|
||||
customer = self.customers[customer_id]
|
||||
login_keypad = UserKeypad.create(customer.cipher.keypad_size)
|
||||
set_keypad = login_keypad.sign_up_keypad()
|
||||
new_session = UserSignupSession(
|
||||
username=username,
|
||||
session_id=uuid4(),
|
||||
login_keypad=login_keypad,
|
||||
set_keypad=set_keypad.keypad,
|
||||
@@ -41,24 +48,20 @@ class NKodeAPI:
|
||||
|
||||
def set_nkode(
|
||||
self,
|
||||
username: str,
|
||||
customer_id: UUID,
|
||||
key_selection: list[int],
|
||||
session_id: UUID
|
||||
) -> np.ndarray:
|
||||
if customer_id not in self.customers.keys():
|
||||
raise ValueError(f"Customer ID {customer_id} not found")
|
||||
customer = self.customers[customer_id]
|
||||
if username in customer.users.keys():
|
||||
raise ValueError(f"Username '{username}' already exists for this customer")
|
||||
if session_id not in self.signup_sessions.keys():
|
||||
raise ValueError(f"Session ID {session_id} not found")
|
||||
self.signup_sessions[session_id].set_user_nkode(username, key_selection)
|
||||
session = self.signup_sessions[session_id]
|
||||
self.signup_sessions[session_id].set_user_nkode(session.username, key_selection)
|
||||
return self.signup_sessions[session_id].confirm_keypad
|
||||
|
||||
def confirm_nkode(
|
||||
self,
|
||||
username: str,
|
||||
customer_id: UUID,
|
||||
confirm_key_entry: list[int],
|
||||
session_id: UUID
|
||||
@@ -68,8 +71,6 @@ class NKodeAPI:
|
||||
session = self.signup_sessions[session_id]
|
||||
if customer_id != session.customer_id:
|
||||
raise AssertionError(f"Customer ID mismatch: {customer_id} vs {session.customer_id}")
|
||||
if username != session.username:
|
||||
raise AssertionError(f"Username mismatch: {username} vs {session.username}")
|
||||
customer = self.customers[customer_id]
|
||||
passcode = self.signup_sessions[session_id].deduce_passcode(confirm_key_entry)
|
||||
new_user_keys = UserCipher.create(
|
||||
@@ -79,7 +80,7 @@ class NKodeAPI:
|
||||
)
|
||||
enciphered_passcode = new_user_keys.encipher_nkode(passcode, customer.cipher)
|
||||
new_user = User(
|
||||
username=username,
|
||||
username=session.username,
|
||||
enciphered_passcode=enciphered_passcode,
|
||||
cipher=new_user_keys,
|
||||
user_keypad=self.signup_sessions[session_id].login_keypad,
|
||||
|
||||
Reference in New Issue
Block a user