63 lines
2.4 KiB
Python
63 lines
2.4 KiB
Python
|
"""This package handles account operations."""
|
||
|
|
||
|
# external imports
|
||
|
from cic_eth.api import Api
|
||
|
|
||
|
# local imports
|
||
|
from cic_ussd.operations import (add_tasks_to_tracker,
|
||
|
cache_account_creation_task_id,
|
||
|
create_or_update_session,
|
||
|
define_multilingual_responses)
|
||
|
from cic_ussd.menu.ussd_menu import UssdMenu
|
||
|
|
||
|
|
||
|
def create(chain_str: str,
|
||
|
external_session_id: str,
|
||
|
phone_number: str,
|
||
|
service_code: str,
|
||
|
user_input: str) -> str:
|
||
|
"""This function issues a task to create a blockchain account on cic-eth. It then creates a record of the ussd
|
||
|
session corresponding to the creation of the account and returns a response denoting that the user's account is
|
||
|
being created.
|
||
|
:param chain_str: The chain name and network id.
|
||
|
:type chain_str: str
|
||
|
:param external_session_id: A unique ID from africastalking.
|
||
|
:type external_session_id: str
|
||
|
:param phone_number: The phone number for the account to be created.
|
||
|
:type phone_number: str
|
||
|
:param service_code: The service code dialed.
|
||
|
:type service_code: str
|
||
|
:param user_input: The input entered by the user.
|
||
|
:type user_input: str
|
||
|
:return: A response denoting that the account is being created.
|
||
|
:rtype: str
|
||
|
"""
|
||
|
# attempt to create a user
|
||
|
cic_eth_api = Api(callback_task='cic_ussd.tasks.callback_handler.process_account_creation_callback',
|
||
|
callback_queue='cic-ussd',
|
||
|
callback_param='',
|
||
|
chain_str=chain_str)
|
||
|
creation_task_id = cic_eth_api.create_account().id
|
||
|
|
||
|
# record task initiation time
|
||
|
add_tasks_to_tracker(task_uuid=creation_task_id)
|
||
|
|
||
|
# cache account creation data
|
||
|
cache_account_creation_task_id(phone_number=phone_number, task_id=creation_task_id)
|
||
|
|
||
|
# find menu to notify user account is being created
|
||
|
current_menu = UssdMenu.find_by_name(name='account_creation_prompt')
|
||
|
|
||
|
# create a ussd session session
|
||
|
create_or_update_session(
|
||
|
external_session_id=external_session_id,
|
||
|
phone=phone_number,
|
||
|
service_code=service_code,
|
||
|
current_menu=current_menu.get('name'),
|
||
|
user_input=user_input)
|
||
|
|
||
|
# define response to relay to user
|
||
|
response = define_multilingual_responses(
|
||
|
key='ussd.kenya.account_creation_prompt', locales=['en', 'sw'], prefix='END')
|
||
|
return response
|