concept Session purpose a period during which a user interacts with the system
state logged_in : Boolean user_handle : String create_public_key : Boolean keychain : set KeyPair // Assuming KeyPair represents a user's key pair active_sessions : set Session // Assuming Session represents an active session on the server
actions exit () pre logged_in // Additional logic to handle session exit
goToProfile () pre logged_in // Additional logic to navigate to the user's profile
begin () pre !logged_in // Additional logic to handle session initiation promptForHandle ()
toggleCreatePublicKey () // Additional logic to toggle the "Create public key" option
addToKeychain (keyPair: KeyPair) pre logged_in add keyPair to keychain
listActiveSessions () // Additional logic to retrieve and display active sessions
promptForHandle () pre !logged_in // Additional logic to prompt the user for their handle
operational principle after exit(), the session is terminated after goToProfile(), the user is navigated to their profile after begin(), the user is prompted for their handle after toggleCreatePublicKey(), the "Create public key" option is toggled after addToKeychain(keyPair), keyPair is added to the keychain after listActiveSessions(), active sessions are listed after promptForHandle(), the user is prompted for their handle