Compare commits
16 Commits
Author | SHA1 | Date |
---|---|---|
Mohamed Sohail | f18934d854 | |
Philip Wafula | 1c3b5f8601 | |
Philip Wafula | 3c768b6722 | |
Mohamed Sohail | a06295f4de | |
Mohamed Sohail | 84504a135e | |
Mohamed Sohail | 4ecac371cf | |
Mohamed Sohail | d5a1809733 | |
Mohamed Sohail | cbef99704f | |
Philip Wafula | ce38e6c6f7 | |
Mohamed Sohail | 86946b4c38 | |
Philip Wafula | 228a39ad8c | |
Philip Wafula | 84f6039da5 | |
Philip Wafula | 3dcfbe59fe | |
Philip Wafula | 0dd21f3970 | |
Philip Wafula | 6ca8632cde | |
Mohamed Sohail | b7dc290992 |
|
@ -0,0 +1,29 @@
|
|||
kind: pipeline
|
||||
name: default
|
||||
|
||||
steps:
|
||||
- name: fetch
|
||||
image: alpine/git
|
||||
commands:
|
||||
- git fetch --tags
|
||||
|
||||
- name: build
|
||||
image: kamikazechaser/docker-build:latest
|
||||
environment:
|
||||
DOCKER_BUILDKIT: 1
|
||||
COMPOSE_DOCKER_CLI_BUILD: 1
|
||||
IMAGE_BASE_URL: docker.grassecon.net/cic-stack
|
||||
PASSWORD:
|
||||
from_secret: docker_password
|
||||
volumes:
|
||||
- name: docker_sock
|
||||
path: /var/run/docker.sock
|
||||
commands:
|
||||
- echo $PASSWORD | docker login docker.grassecon.net --username ci --password-stdin
|
||||
- export TAG=$(git describe --tags $(git rev-list --tags --max-count=1))
|
||||
- docker-compose -f docker-compose.build.yml build --progress plain
|
||||
- docker-compose -f docker-compose.build.yml push
|
||||
volumes:
|
||||
- name: docker_sock
|
||||
host:
|
||||
path: /var/run/docker.sock
|
|
@ -26,6 +26,7 @@ from chainlib.chain import ChainSpec
|
|||
from chainqueue.db.models.otx import Otx
|
||||
from cic_eth_registry.error import UnknownContractError
|
||||
from cic_eth_registry.erc20 import ERC20Token
|
||||
from cic_eth.eth.util import MAXIMUM_FEE_UNITS
|
||||
from hexathon import add_0x
|
||||
import liveness.linux
|
||||
|
||||
|
@ -232,6 +233,7 @@ def main():
|
|||
if config.get('ETH_MIN_FEE_PRICE'):
|
||||
BaseTask.min_fee_price = int(config.get('ETH_MIN_FEE_PRICE'))
|
||||
CriticalWeb3Task.safe_gas_threshold_amount *= BaseTask.min_fee_price
|
||||
CriticalWeb3Task.safe_gas_refill_amount = CriticalWeb3Task.safe_gas_refill_amount + MAXIMUM_FEE_UNITS
|
||||
CriticalWeb3Task.safe_gas_refill_amount *= BaseTask.min_fee_price
|
||||
CriticalWeb3Task.safe_gas_gifter_balance *= BaseTask.min_fee_price
|
||||
|
||||
|
|
|
@ -12,4 +12,4 @@ erc20-faucet~=0.3.2
|
|||
erc20-transfer-authorization~=0.3.6
|
||||
sarafu-faucet~=0.0.7
|
||||
moolb~=0.2.0
|
||||
okota~=0.2.5
|
||||
okota~=0.2.6
|
||||
|
|
|
@ -66,14 +66,15 @@ def parse_statement_transactions(statement: list):
|
|||
:rtype:
|
||||
"""
|
||||
parsed_transactions = []
|
||||
statement.sort(key=lambda d: d['timestamp'], reverse=True)
|
||||
for transaction in statement:
|
||||
action_tag = transaction.get('action_tag')
|
||||
decimals = transaction.get('token_decimals')
|
||||
amount = from_wei(decimals, transaction.get('token_value'))
|
||||
direction_tag = transaction.get('direction_tag')
|
||||
token_symbol = transaction.get('token_symbol')
|
||||
metadata_id = transaction.get('metadata_id')
|
||||
timestamp = datetime.datetime.now().strftime('%d/%m/%y, %H:%M')
|
||||
metadata_id = transaction.get('alt_metadata_id')
|
||||
timestamp = transaction.get('timestamp')
|
||||
transaction_repr = f'{action_tag} {amount} {token_symbol} {direction_tag} {metadata_id} {timestamp}'
|
||||
parsed_transactions.append(transaction_repr)
|
||||
return parsed_transactions
|
||||
|
|
|
@ -265,8 +265,9 @@ def process_token_data(blockchain_address: str, token_symbol: str):
|
|||
query_token_metadata(identifier=identifier)
|
||||
token_info = query_token_info(identifier=identifier)
|
||||
hashed_token_info = hashed_token_proof(token_proof=token_info)
|
||||
hashed_token_symbol = hashed_token_proof(token_symbol)
|
||||
query_token_data(blockchain_address=blockchain_address,
|
||||
hashed_proofs=[hashed_token_info],
|
||||
hashed_proofs=[[hashed_token_info, hashed_token_symbol]],
|
||||
token_symbols=[token_symbol])
|
||||
|
||||
|
||||
|
|
|
@ -1 +1,9 @@
|
|||
+254700000000
|
||||
+254707628499
|
||||
+254757628885
|
||||
+254757628900
|
||||
+254792048646
|
||||
+254792048228
|
||||
+254792048490
|
||||
+254792048902
|
||||
+254727806655
|
||||
+254790079966
|
||||
|
|
|
@ -1,19 +1,19 @@
|
|||
keys,en,sw
|
||||
female,Female,Mwanamke
|
||||
from,From,Kutoka kwa
|
||||
male,Male,Mwanaume
|
||||
not_provided,Not provided,Haijawekwa
|
||||
no_language_list,No language list,Hamna lugha ya kuchagua
|
||||
no_transaction_history,No transaction history,Hamna ripoti ya matumizi
|
||||
no_tokens_list,No tokens to list,Hamna sarafu nyingine
|
||||
other,Other,Nyingine
|
||||
received,Received,Ulipokea
|
||||
sent,Sent,Ulituma
|
||||
to,To,Kwa
|
||||
guardians_list_header,Your set guardians are:,Walinzi uliowaongeza ni:
|
||||
no_guardians_list,No guardians set,Hamna walinzi walioongezwa
|
||||
error.no_phone_number_provided,No phone number was provided.,Namabari ya simu haijawekwa.
|
||||
error.no_matching_account,The number provided is not registered.,Nambari uliyoweka haijasajiliwa.
|
||||
error.is_initiator,Phone number cannot be your own.,Nambari yafaa kuwa tofauti na yako.
|
||||
error.is_existent_guardian,This phone number is is already added as a guardian.,Namabari hii tayari imeongezwa kama mlinzi wa nambari ya siri.
|
||||
error.is_not_existent_guardian,Phone number not set as PIN reset guardian.,Nambari hii haijaongezwa kama mlinzi wa nambari ya siri.
|
||||
keys,en,sw,kam,kik,miji,luo,bor
|
||||
female,Female,Mwanamke,Mundumuka,Mutumia,Muche,Dhako,Uwole
|
||||
from,From,Kutoka kwa,Kuma kwa,Kuuma kwa,Ulaako,Kowuok kuom,ira
|
||||
male,Male,Mwanaume,Mundume,Mundurume,Mulume,Dichuo,Dir
|
||||
not_provided,Not provided,Haijawekwa,Inenganitwe,Ndiikiritwo,Kaphana,Okoketi,Kes inkan
|
||||
no_language_list,No language list,Hamna lugha ya kuchagua,Vai luka ya kusakwa,Hatire ruthiomi rwakucagurwo,Kahana luga irio orodeshwa,Onge dhok miyiero,Afaan chaguad injirt
|
||||
no_transaction_history,No transaction history,Hamna ripoti ya matumizi,Vai livoti ya utumii,Hatire riboti ya mahuthira,Kahana repoti ya mahumizi,Onge ripot mar tiyo,Odhuu jalkaban injirt
|
||||
no_tokens_list,No more Sarafu,Hamna sarafu zingine,Vai Sarafu ingi,Hatire Sarafu inge,Kahana Sarafu zaidi,Onge Sarafu moko,Sarafu dibii injirt
|
||||
other,Other,Nyingine,Ingi,Inge,Nyinjine,Moko,Ta dibii
|
||||
received,Received,Ulipokea,Niwakwatie,Niuramukirire ,Hokera,Niyudo,Argat
|
||||
sent,Sent,Ulituma,Niwatumie,Niuratumire,Humwa,Nioro,Ergan
|
||||
to,To,Kwa,Kwa,Hare,Kwa,Ne,Es
|
||||
guardians_list_header,Your PIN guards are:,PIN Walinzi uliowaongeza ni:,PIN Atetheesya ala wongelile ni:,Agiteri a PIN yaku ni:,PIN Aimirizi urioika ni:,PIN Jorit magi gin:,PIN Naam at korkorad:
|
||||
no_guardians_list,No PIN guardians set,Hamna PIN walinzi walioongezwa,Vai atetheesya mongelwa,Hartire agiteri meekeretwo,Kahana aimirizi adzoikwa,Onge jorit moketi,Nam an korkorad injirt
|
||||
error.no_phone_number_provided,No phone number was provided,Nambari ya simu haijawekwa,Namba ya simu inaikiwa,Namba ya thimu ndihianetwo,Kahana namba ya simu idzopewa,Namba mar simu okoketi,Namba simu kees inkaan
|
||||
error.no_matching_account,The number provided is not registered,Nambari uliyoweka haijasajiliwa,Namba ya simu ila wekiya ti mbandikithye,Namba iria wekera ndiandekithetwo,Namba idzopewa kaidzagwe kusajiliwa,Namba mar simu miketo pok ondiki,Namba ka at kekeet sajiil incab
|
||||
error.is_initiator,Phone number cannot be your own,Nambari yafaa kuwa tofauti na yako,Namba ya simu yaile ithiwa itavwanene na yaku,Namba ifatie gukorwo ina utiganu na yaku,Namba yasimu kaidima kukala niyako,Namba onego obed mopogre gimari,Namba simu tete tau mal
|
||||
error.is_existent_guardian,This phone number is already added as a PIN guardian,Nambari hii tayari imeongezwa kama mlinzi wa nambari ya siri,Namba ii niyongeletwe tayari ta mutethesya wa kusovya pin,Namba ino niyongereirwo ta murugamereri ya namba ya thiri,Nambari ii yasimu yaikwa kare Muimirizi,Nambani oseketi kaka jarit,Namba tana yayu nam korkoradi taat
|
||||
error.is_not_existent_guardian,Phone number not set as PIN guardian,Nambari hii haijaongezwa kama mlinzi wa nambari ya PIN,Namba ii iyongeletwe ta mutethesya wa kusovya PIN,Namba ino ndiongereirwo ta mugiteri wa PIN,Nambari ii yasimu kaiikika kugaluza PIN zda mwimirizi,Nambani pok omed kaka jarit,Namba simu ta nam korkorad indharan
|
|
|
@ -1,7 +1,7 @@
|
|||
keys,en,sw
|
||||
account_successfully_created,You have been registered on Sarafu Network! To use dial *384*96# on Safaricom and *483*96# on other networks. For help %{support_phone}.,Umesajiliwa kwa huduma ya Sarafu! Kutumia bonyeza *384*96# Safaricom ama *483*46# kwa utandao tofauti. Kwa Usaidizi %{support_phone}.
|
||||
received_tokens,Successfully received %{amount} %{token_symbol} from %{tx_sender_information} %{timestamp} to %{tx_recipient_information}. New balance is %{balance} %{token_symbol}.,Umepokea %{amount} %{token_symbol} kutoka kwa %{tx_sender_information} %{timestamp} ikapokewa na %{tx_recipient_information}. Salio lako ni %{balance} %{token_symbol}.
|
||||
sent_tokens,Successfully sent %{amount} %{token_symbol} to %{tx_recipient_information} %{timestamp} from %{tx_sender_information}. New balance is %{balance} %{token_symbol}.,Umetuma %{amount} %{token_symbol} kwa %{tx_recipient_information} %{timestamp} kutoka kwa %{tx_sender_information}. Salio lako ni %{balance} %{token_symbol}.
|
||||
terms,"By using the service, you agree to the terms and conditions at http://grassecon.org/tos","Kwa kutumia hii huduma, umekubali sheria na masharti yafuatayo http://grassecon.org/tos"
|
||||
upsell_unregistered_recipient,%{tx_sender_information} tried to send you %{token_symbol} but you are not registered. To use dial *384*96# on Safaricom and *483*96# on other networks. For help %{support_phone}.,%{tx_sender_information} amejaribu kukutumia %{token_symbol} lakini hujasajili. Kutumia bonyeza *384*96# Safaricom ama *483*46# kwa utandao tofauti. Kwa Usaidizi %{support_phone}.
|
||||
pin_reset_initiated,%{pin_initiator} has sent a request to initiate your PIN reset.,%{pin_initiator} ametuma ombi la kubadilisha PIN yako.
|
||||
keys,en,sw,kam,kik,miji,luo,bor
|
||||
account_successfully_created,You have been registered on Sarafu Network! To use dial *384*96# on Safaricom and *483*96# on other networks. For help %{support_phone},Umesajiliwa kwa Sarafu Network! Kutumia bonyeza *384*96# Safaricom ama *483*46# kwa utandao tofauti. Kwa Usaidizi %{support_phone},Niwayandikithya na Sarafu Network! Safaricom kuna namba ii *384*96# mitandao ingi *483*96#. Utethyo ungi kuna %{support_phone},Niweyandekithia kwe Sarafu Network! Kuhuthira hihinya *384*96# he Safaricom na *483*46# he mitambo ingi Uteithio %{support_phone},Usajiliwa Sarafu Network! kuhumira hopya *384*96# Saf *483*96# mtandao mnjine. Kuvizwa %{support_phone},Osendiki e Sarafu Network! Kidwatiyogo to dii *384*96# Safaricom kata *483*46# e netwak mamoko. Kuom kony %{support_phone},Yaayu sirejestan Sarafu Network! Kuches *384*96# Safaricom *483*46# Airtel
|
||||
received_tokens,Successfully received %{amount} %{token_symbol} from %{tx_sender_information} %{timestamp} to %{tx_recipient_information} Balance %{balance} %{token_symbol},Umepokea %{amount} %{token_symbol} kutoka kwa %{tx_sender_information} %{timestamp} kuendea %{tx_recipient_information} Salio %{balance} %{token_symbol},Niwakwata %{amount} %{token_symbol} kuma %{tx_sender_information} %{timestamp} kuvikia %{tx_recipient_information} Mbalansi %{balance} %{token_symbol},Wamukira %{amount} %{token_symbol} kuuma kwa %{tx_sender_information} %{timestamp} to %{tx_recipient_information} Watigaria %{balance} %{token_symbol},Uphokera %{amount} %{token_symbol} kula %{tx_sender_information} %{timestamp} Kwenda %{tx_recipient_information}. Sazoro %{balance} %{token_symbol},Iyudo %{amount} %{token_symbol} kowuok kuom %{tx_sender_information} %{timestamp} odhi ne %{tx_recipient_information}. Dong mari en %{balance} %{token_symbol},Yaargat %{amount} %{token_symbol} ira %{tx_sender_information} %{timestamp} Es %{tx_recipient_information} Balansi %{balance} %{token_symbol}
|
||||
sent_tokens,Successfully sent %{amount} %{token_symbol} to %{tx_recipient_information} %{timestamp} from %{tx_sender_information} Balance %{balance} %{token_symbol},Umetuma %{amount} %{token_symbol} kwa %{tx_recipient_information} %{timestamp} kutoka kwa %{tx_sender_information} Salio %{balance} %{token_symbol},Niwatuma %{amount} %{token_symbol} kwa %{tx_recipient_information} %{timestamp} kuma %{tx_sender_information} Mbalansi %{balance} %{token_symbol}.,Watuma %{amount} %{token_symbol} kwe %{tx_recipient_information} %{timestamp} kuuma %{tx_sender_information} Watigaria %{balance} %{token_symbol},Uhuma %{amount} %{token_symbol} kwa %{tx_recipient_information} %{timestamp} kula %{tx_sender_information} Sazoro %{balance} %{token_symbol},Ioro %{amount} %{token_symbol} ne %{tx_recipient_information} %{timestamp} kowuok kuom %{tx_sender_information}. Dong mari en %{balance} %{token_symbol},yaergat %{amount} %{token_symbol} Es %{tx_recipient_information} %{timestamp} ira %{tx_sender_information} Balansi hareetin %{balance} %{token_symbol}
|
||||
terms,By using the service you agree to the terms and conditions at http://grassecon.org/tos,Kwa kutumia hii huduma umekubali sheria na masharti yafuatayo http://grassecon.org/tos,Kwa kutumia mutandao uu niwetikilana na miyao na masharti ma http://grassecon.org/tos,"Kuhuthira mitambo ino , niuraetekania na mawatho na mutaratara wa http://grassecon.org/tos","Kuhumira huduma,Ukubali sheria na malagizo http://grassecon.org/tos ",Kuom tiyo gi huduma ni iyie chike kod weche mantie http://grassecon.org/tos,Oja service tun tumiith yaayuu kubalt one chuf at http://grassecon.org/tos
|
||||
upsell_unregistered_recipient,%{tx_sender_information} tried to send you %{token_symbol}. Dial *384*96# on Safaricom and *483*96# on others For help %{support_phone},%{tx_sender_information} amejaribu kutuma %{token_symbol} na hujasajili. Bonyeza*384*96# Saf au*483*46# kwa mitandao tofauti. Usaidizi %{support_phone},%{tx_sender_information} niwatata kuutumia %{token_symbol} lakini ndwimwandikithye. Safaricom kuna *384*96# laini ingi *483*96# Utethyo %{support_phone},%{tx_sender_information} ekugeretie gugutumira %{token_symbol} no ndeyandikithetie. Hihinya *384*96# he Safaricom na *483*96# mitambo ingi. Uteithio %{support_phone},%{tx_sender_information} Yuhuma %{token_symbol} Kudzasajiliwa. Humira hopya *384*96# Safaricom au *483*96# mtandao mnjine. Kuvizwa %{support_phone},%{tx_sender_information} otemo oro ni %{token_symbol} to pok ondiki. Tiyo go dii *384*96# Safaricom gi *483*96# e netwak mamoko. E kony %{support_phone},%{tx_sender_information} yaa si ergu jariib %{token_symbol} ammo atin insajilan.Tumiitu kuches *384*96# Safaricom *483*96# dibii Qarqars %{support_phone}
|
||||
pin_reset_initiated,%{pin_initiator} has sent a request to initiate your PIN reset,%{pin_initiator} ametuma ombi la kubadilisha PIN yako,%{pin_initiator} niwatuma wendi waku wa kwambiisya kusovya PIN yaku,%{pin_initiator} Niatuma ihoya ria guchengia PIN yaku,%{pin_initiator} yuhuma voyo kurekebisha piniyo.,%{pin_initiator} ooro kwayo mar loko nambani mopondo,%{pin_initiator} pin Tate badilishadu feet
|
|
File diff suppressed because it is too large
Load Diff
|
@ -540,5 +540,8 @@ def response(account: Account, display_key: str, menu_name: str, session: Sessio
|
|||
if menu_name == 'exit_successful_token_selection':
|
||||
return menu_processor.exit_successful_token_selection()
|
||||
|
||||
preferred_language = get_cached_preferred_language(account.blockchain_address)
|
||||
preferred_language = i18n.config.get('fallback')
|
||||
if account:
|
||||
preferred_language = get_cached_preferred_language(account.blockchain_address)
|
||||
|
||||
return translation_for(display_key, preferred_language)
|
||||
|
|
|
@ -16,6 +16,7 @@ from cic_ussd.processor.menu import response
|
|||
from cic_ussd.processor.util import latest_input, resume_last_ussd_session
|
||||
from cic_ussd.session.ussd_session import create_or_update_session, persist_ussd_session
|
||||
from cic_ussd.state_machine import UssdStateMachine
|
||||
from cic_ussd.state_machine.logic.manager import States
|
||||
from cic_ussd.validator import is_valid_response
|
||||
|
||||
|
||||
|
@ -123,7 +124,16 @@ def handle_no_account_menu_operations(account: Optional[Account],
|
|||
:return:
|
||||
:rtype:
|
||||
"""
|
||||
menu = UssdMenu.find_by_name('initial_language_selection')
|
||||
initial_language_selection = 'initial_language_selection'
|
||||
menu = UssdMenu.find_by_name(initial_language_selection)
|
||||
last_ussd_session: UssdSession = UssdSession.last_ussd_session(phone_number, session)
|
||||
if last_ussd_session:
|
||||
menu_name = menu.get('name')
|
||||
if user_input:
|
||||
state = next_state(account, session, user_input, last_ussd_session.to_json())
|
||||
menu = UssdMenu.find_by_name(state)
|
||||
elif menu_name not in States.non_resumable_states and menu_name != initial_language_selection:
|
||||
menu = resume_last_ussd_session(last_ussd_session.state)
|
||||
ussd_session = create_or_update_session(
|
||||
external_session_id=external_session_id,
|
||||
msisdn=phone_number,
|
||||
|
@ -132,15 +142,6 @@ def handle_no_account_menu_operations(account: Optional[Account],
|
|||
session=session,
|
||||
user_input=user_input)
|
||||
persist_ussd_session(external_session_id, queue)
|
||||
last_ussd_session: UssdSession = UssdSession.last_ussd_session(phone_number, session)
|
||||
if last_ussd_session:
|
||||
if not user_input:
|
||||
menu = resume_last_ussd_session(last_ussd_session.state)
|
||||
else:
|
||||
session = SessionBase.bind_session(session)
|
||||
state = next_state(account, session, user_input, last_ussd_session.to_json())
|
||||
menu = UssdMenu.find_by_name(state)
|
||||
|
||||
return response(account=account,
|
||||
display_key=menu.get('display_key'),
|
||||
menu_name=menu.get('name'),
|
||||
|
|
|
@ -6,13 +6,12 @@ import time
|
|||
from typing import List, Union
|
||||
|
||||
# external imports
|
||||
from cic_types.condiments import MetadataPointer
|
||||
from cic_types.models.person import get_contact_data_from_vcard
|
||||
from tinydb.table import Document
|
||||
|
||||
# local imports
|
||||
from cic_ussd.cache import cache_data_key, get_cached_data
|
||||
from cic_ussd.menu.ussd_menu import UssdMenu
|
||||
from cic_ussd.state_machine.logic.manager import States
|
||||
from cic_ussd.translation import translation_for
|
||||
|
||||
logg = logging.getLogger(__file__)
|
||||
|
@ -66,19 +65,8 @@ def resume_last_ussd_session(last_state: str) -> Document:
|
|||
:return:
|
||||
:rtype:
|
||||
"""
|
||||
# TODO [Philip]: This can be cleaned further
|
||||
non_reusable_states = [
|
||||
'account_creation_prompt',
|
||||
'exit',
|
||||
'exit_invalid_pin',
|
||||
'exit_invalid_new_pin',
|
||||
'exit_invalid_recipient',
|
||||
'exit_invalid_request',
|
||||
'exit_pin_blocked',
|
||||
'exit_pin_mismatch',
|
||||
'exit_successful_transaction'
|
||||
]
|
||||
if last_state in non_reusable_states:
|
||||
|
||||
if last_state in States.non_resumable_states:
|
||||
return UssdMenu.find_by_name('start')
|
||||
return UssdMenu.find_by_name(last_state)
|
||||
|
||||
|
|
|
@ -20,6 +20,7 @@ from cic_ussd.db import dsn_from_config
|
|||
from cic_ussd.db.models.base import SessionBase
|
||||
from cic_ussd.phone_number import Support
|
||||
from cic_ussd.session.ussd_session import UssdSession as InMemoryUssdSession
|
||||
from cic_ussd.state_machine.logic.manager import States
|
||||
from cic_ussd.translation import generate_locale_files
|
||||
from cic_ussd.validator import validate_presence
|
||||
|
||||
|
@ -94,6 +95,9 @@ i18n.set('fallback', config.get('LOCALE_FALLBACK'))
|
|||
|
||||
chain_spec = ChainSpec.from_chain_str(config.get('CHAIN_SPEC'))
|
||||
|
||||
# make non-resumable states accessible globally
|
||||
States.load_non_resumable_states(config.get("MACHINE_NON_RESUMABLE_STATES"))
|
||||
|
||||
|
||||
Chain.spec = chain_spec
|
||||
Support.phone_number = config.get('OFFICE_SUPPORT_PHONE')
|
||||
|
|
|
@ -34,6 +34,7 @@ from cic_ussd.processor.ussd import handle_menu_operations
|
|||
from cic_ussd.runnable.server_base import exportable_parser, logg
|
||||
from cic_ussd.session.ussd_session import UssdSession as InMemoryUssdSession
|
||||
from cic_ussd.state_machine import UssdStateMachine
|
||||
from cic_ussd.state_machine.logic.manager import States
|
||||
from cic_ussd.translation import generate_locale_files, Languages, translation_for
|
||||
from cic_ussd.validator import check_ip, check_request_content_length, validate_phone_number, validate_presence
|
||||
|
||||
|
@ -94,6 +95,9 @@ celery.Celery(backend=config.get('CELERY_RESULT_URL'), broker=config.get('CELERY
|
|||
states = json_file_parser(filepath=config.get('MACHINE_STATES'))
|
||||
transitions = json_file_parser(filepath=config.get('MACHINE_TRANSITIONS'))
|
||||
|
||||
# make non-resumable states accessible globally
|
||||
States.load_non_resumable_states(config.get("MACHINE_NON_RESUMABLE_STATES"))
|
||||
|
||||
chain_spec = ChainSpec.from_chain_str(config.get('CHAIN_SPEC'))
|
||||
|
||||
Chain.spec = chain_spec
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
# standard imports
|
||||
import json
|
||||
|
||||
# external imports
|
||||
|
||||
# local imports
|
||||
|
||||
|
||||
class States:
|
||||
non_resumable_states = None
|
||||
|
||||
@classmethod
|
||||
def load_non_resumable_states(cls, file_path):
|
||||
with open(file_path, 'r') as states_file:
|
||||
cls.non_resumable_states = json.load(states_file)
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
import json
|
||||
import logging
|
||||
from datetime import timedelta
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
# external imports
|
||||
import celery
|
||||
|
@ -143,9 +143,11 @@ def statement_callback(self, result, param: str, status_code: int):
|
|||
recipient_transaction, sender_transaction = transaction_actors(transaction)
|
||||
if recipient_transaction.get('blockchain_address') == param:
|
||||
recipient_transaction['alt_blockchain_address'] = sender_transaction.get('blockchain_address')
|
||||
recipient_transaction['timestamp'] = datetime.utcfromtimestamp(transaction.get('timestamp')).strftime('%d/%m/%y, %H:%M')
|
||||
generate(param, queue, recipient_transaction)
|
||||
if sender_transaction.get('blockchain_address') == param:
|
||||
sender_transaction['alt_blockchain_address'] = recipient_transaction.get('blockchain_address')
|
||||
sender_transaction['timestamp'] = datetime.utcfromtimestamp(transaction.get('timestamp')).strftime('%d/%m/%y, %H:%M')
|
||||
generate(param, queue, sender_transaction)
|
||||
|
||||
|
||||
|
@ -231,6 +233,10 @@ def transaction_callback(result: dict, param: str, status_code: int):
|
|||
if status_code != 0:
|
||||
raise ValueError(f'Unexpected status code: {status_code}.')
|
||||
|
||||
print(f'THE RETURNING TRANSACTION IS: {result}')
|
||||
print(f'STATUS CODE: {status_code}')
|
||||
print(f'WITH PARAM: {param}')
|
||||
|
||||
chain_str = Chain.spec.__str__()
|
||||
destination_token_symbol = result.get('destination_token_symbol')
|
||||
destination_token_value = result.get('destination_token_value')
|
||||
|
|
|
@ -4,6 +4,7 @@ max_body_length=1024
|
|||
password_pepper=
|
||||
|
||||
[machine]
|
||||
non_resumable_states=states/non_resumable_states.json
|
||||
states=states/
|
||||
transitions=transitions/
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ max_body_length=1024
|
|||
password_pepper=QYbzKff6NhiQzY3ygl2BkiKOpER8RE/Upqs/5aZWW+I=
|
||||
|
||||
[machine]
|
||||
non_resumable_states=states/non_resumable_states.json
|
||||
states=states/
|
||||
transitions=transitions/
|
||||
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
[
|
||||
"account_creation_prompt",
|
||||
"exit",
|
||||
"exit_invalid_pin",
|
||||
"exit_invalid_new_pin",
|
||||
"exit_invalid_recipient",
|
||||
"exit_invalid_request",
|
||||
"exit_pin_blocked",
|
||||
"exit_pin_mismatch",
|
||||
"exit_successful_transaction"
|
||||
]
|
|
@ -1,4 +1,5 @@
|
|||
# standard imports
|
||||
import datetime
|
||||
import json
|
||||
|
||||
# external imports
|
||||
|
@ -119,8 +120,11 @@ def test_statement_callback(activated_account, mocker, transactions_list):
|
|||
[transactions_list, activated_account.blockchain_address, status_code])
|
||||
s_statement_callback.apply_async().get()
|
||||
statement_transactions = filter_statement_transactions(transactions_list)
|
||||
timestamp = transactions_list[0].get('timestamp')
|
||||
timestamp = datetime.datetime.utcfromtimestamp(timestamp).strftime('%d/%m/%y, %H:%M')
|
||||
recipient_transaction, sender_transaction = transaction_actors(statement_transactions[0])
|
||||
sender_transaction['alt_blockchain_address'] = recipient_transaction.get('blockchain_address')
|
||||
sender_transaction['timestamp'] = timestamp
|
||||
mock_statement_generate.assert_called_with(
|
||||
(activated_account.blockchain_address, sender_transaction), {}, queue='cic-ussd')
|
||||
|
||||
|
|
|
@ -9,7 +9,7 @@ from cic_ussd.notifications import Notifier
|
|||
|
||||
@pytest.mark.parametrize("key, preferred_language, recipient, expected_message", [
|
||||
("ussd.exit", "en", "+254712345678", "END Thank you for using the service."),
|
||||
("ussd.exit", "sw", "+254712345678", "END Asante kwa kutumia huduma.")
|
||||
("ussd.exit", "sw", "+254712345678", "END Asante kwa kutumia huduma")
|
||||
])
|
||||
def test_send_sms_notification(celery_session_worker,
|
||||
expected_message,
|
||||
|
|
|
@ -17,5 +17,5 @@ def test_translation_for(set_locale_files):
|
|||
key='ussd.exit_invalid_request',
|
||||
preferred_language='sw'
|
||||
)
|
||||
assert swahili_translation == 'END Chaguo si sahihi.'
|
||||
assert swahili_translation == 'END Chaguo si sahihi'
|
||||
assert english_translation == 'END Invalid request.'
|
||||
|
|
|
@ -16,6 +16,7 @@ from cic_ussd.files.local_files import create_local_file_data_stores, json_file_
|
|||
from cic_ussd.menu.ussd_menu import UssdMenu
|
||||
from cic_ussd.phone_number import E164Format, Support
|
||||
from cic_ussd.state_machine import UssdStateMachine
|
||||
from cic_ussd.state_machine.logic.manager import States
|
||||
from cic_ussd.translation import generate_locale_files, Languages
|
||||
from cic_ussd.validator import validate_presence
|
||||
|
||||
|
@ -69,6 +70,11 @@ def load_e164_region(load_config):
|
|||
E164Format.region = load_config.get('E164_REGION')
|
||||
|
||||
|
||||
@pytest.fixture(scope='session', autouse=True)
|
||||
def load_non_resumable_states(load_config):
|
||||
States.load_non_resumable_states(load_config.get('MACHINE_NON_RESUMABLE_STATES'))
|
||||
|
||||
|
||||
@pytest.fixture(scope='session')
|
||||
def load_support_phone(load_config):
|
||||
Support.phone_number = load_config.get('OFFICE_SUPPORT_PHONE')
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
# standard import
|
||||
import random
|
||||
|
||||
from datetime import datetime
|
||||
# external import
|
||||
import pytest
|
||||
|
||||
|
@ -46,6 +45,7 @@ def statement(activated_account):
|
|||
'direction_tag': 'To',
|
||||
'metadata_id': activated_account.standard_metadata_id(),
|
||||
'phone_number': activated_account.phone_number,
|
||||
'timestamp': datetime.now().strftime('%d/%m/%y, %H:%M')
|
||||
}
|
||||
]
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
"trigger": "scan_data",
|
||||
"source": "first_transaction_set",
|
||||
"dest": "middle_transaction_set",
|
||||
"conditions": "cic_ussd.state_machine.logic.menu.menu_one_selected"
|
||||
"conditions": "cic_ussd.state_machine.logic.menu.menu_eleven_selected"
|
||||
},
|
||||
{
|
||||
"trigger": "scan_data",
|
||||
|
@ -20,13 +20,13 @@
|
|||
"trigger": "scan_data",
|
||||
"source": "middle_transaction_set",
|
||||
"dest": "last_transaction_set",
|
||||
"conditions": "cic_ussd.state_machine.logic.menu.menu_one_selected"
|
||||
"conditions": "cic_ussd.state_machine.logic.menu.menu_eleven_selected"
|
||||
},
|
||||
{
|
||||
"trigger": "scan_data",
|
||||
"source": "middle_transaction_set",
|
||||
"dest": "first_transaction_set",
|
||||
"conditions": "cic_ussd.state_machine.logic.menu.menu_two_selected"
|
||||
"conditions": "cic_ussd.state_machine.logic.menu.menu_twenty_two_selected"
|
||||
},
|
||||
{
|
||||
"trigger": "scan_data",
|
||||
|
@ -43,7 +43,7 @@
|
|||
"trigger": "scan_data",
|
||||
"source": "last_transaction_set",
|
||||
"dest": "middle_transaction_set",
|
||||
"conditions": "cic_ussd.state_machine.logic.menu.menu_two_selected"
|
||||
"conditions": "cic_ussd.state_machine.logic.menu.menu_twenty_two_selected"
|
||||
},
|
||||
{
|
||||
"trigger": "scan_data",
|
||||
|
|
|
@ -9,130 +9,160 @@
|
|||
{
|
||||
"trigger": "scan_data",
|
||||
"source": "initial_language_selection",
|
||||
"dest": "initial_middle_language_set",
|
||||
"conditions": "cic_ussd.state_machine.logic.menu.menu_eleven_selected"
|
||||
"dest": "exit",
|
||||
"conditions": "cic_ussd.state_machine.logic.menu.menu_zero_zero_selected",
|
||||
"unless":"cic_ussd.state_machine.logic.language.is_valid_language_selection"
|
||||
},
|
||||
{
|
||||
"trigger": "scan_data",
|
||||
"source": "initial_language_selection",
|
||||
"dest": "exit",
|
||||
"conditions": "cic_ussd.state_machine.logic.menu.menu_zero_zero_selected"
|
||||
"dest": "initial_middle_language_set",
|
||||
"conditions": "cic_ussd.state_machine.logic.menu.menu_eleven_selected",
|
||||
"unless": "cic_ussd.state_machine.logic.language.is_valid_language_selection"
|
||||
},
|
||||
{
|
||||
"trigger": "scan_data",
|
||||
"source": "initial_language_selection",
|
||||
"dest": "exit_invalid_menu_option"
|
||||
},
|
||||
{
|
||||
"trigger": "scan_data",
|
||||
"source": "initial_middle_language_set",
|
||||
"dest": "initial_language_selection",
|
||||
"conditions": "cic_ussd.state_machine.logic.menu.menu_twenty_two_selected"
|
||||
"dest": "account_creation_prompt",
|
||||
"after": "cic_ussd.state_machine.logic.account.process_account_creation",
|
||||
"conditions": "cic_ussd.state_machine.logic.language.is_valid_language_selection"
|
||||
},
|
||||
{
|
||||
"trigger": "scan_data",
|
||||
"source": "initial_middle_language_set",
|
||||
"dest": "exit",
|
||||
"conditions": "cic_ussd.state_machine.logic.menu.menu_zero_zero_selected",
|
||||
"unless": "cic_ussd.state_machine.logic.language.is_valid_language_selection"
|
||||
},
|
||||
{
|
||||
"trigger": "scan_data",
|
||||
"source": "initial_middle_language_set",
|
||||
"dest": "initial_last_language_set",
|
||||
"conditions": "cic_ussd.state_machine.logic.menu.menu_eleven_selected"
|
||||
"conditions": "cic_ussd.state_machine.logic.menu.menu_eleven_selected",
|
||||
"unless": "cic_ussd.state_machine.logic.language.is_valid_language_selection"
|
||||
},
|
||||
{
|
||||
"trigger": "scan_data",
|
||||
"source": "initial_middle_language_set",
|
||||
"dest": "initial_language_selection",
|
||||
"conditions": "cic_ussd.state_machine.logic.menu.menu_twenty_two_selected",
|
||||
"unless": "cic_ussd.state_machine.logic.language.is_valid_language_selection"
|
||||
},
|
||||
{
|
||||
"trigger": "scan_data",
|
||||
"source": "initial_middle_language_set",
|
||||
"dest": "exit_invalid_menu_option"
|
||||
},
|
||||
{
|
||||
"trigger": "scan_data",
|
||||
"source": "initial_last_language_set",
|
||||
"dest": "account_creation_prompt",
|
||||
"after": "cic_ussd.state_machine.logic.account.process_account_creation",
|
||||
"conditions": "cic_ussd.state_machine.logic.language.is_valid_language_selection"
|
||||
},
|
||||
{
|
||||
"trigger": "scan_data",
|
||||
"source": "initial_last_language_set",
|
||||
"dest": "exit",
|
||||
"conditions": "cic_ussd.state_machine.logic.menu.menu_zero_zero_selected"
|
||||
"conditions": "cic_ussd.state_machine.logic.menu.menu_zero_zero_selected",
|
||||
"unless": "cic_ussd.state_machine.logic.language.is_valid_language_selection"
|
||||
},
|
||||
{
|
||||
"trigger": "scan_data",
|
||||
"source": "initial_last_language_set",
|
||||
"dest": "initial_middle_language_set",
|
||||
"conditions": "cic_ussd.state_machine.logic.menu.menu_twenty_two_selected"
|
||||
"conditions": "cic_ussd.state_machine.logic.menu.menu_twenty_two_selected",
|
||||
"unless": "cic_ussd.state_machine.logic.language.is_valid_language_selection"
|
||||
},
|
||||
{
|
||||
"trigger": "scan_data",
|
||||
"source": "initial_last_language_set",
|
||||
"dest": "exit",
|
||||
"conditions": "cic_ussd.state_machine.logic.menu.menu_zero_zero_selected"
|
||||
},
|
||||
{
|
||||
"trigger": "scan_data",
|
||||
"source": "initial_middle_language_set",
|
||||
"dest": "exit",
|
||||
"conditions": "cic_ussd.state_machine.logic.menu.menu_zero_zero_selected"
|
||||
},
|
||||
{
|
||||
"trigger": "scan_data",
|
||||
"source": "initial_language_selection",
|
||||
"dest": "exit_invalid_menu_option"
|
||||
},
|
||||
{
|
||||
"trigger": "scan_data",
|
||||
"source": "middle_language_set",
|
||||
"dest": "exit_invalid_menu_option"
|
||||
},
|
||||
{
|
||||
"trigger": "scan_data",
|
||||
"source": "last_language_set",
|
||||
"dest": "exit_invalid_menu_option"
|
||||
},
|
||||
{
|
||||
"trigger": "scan_data",
|
||||
"source": "select_preferred_language",
|
||||
"dest": "exit",
|
||||
"dest": "complete",
|
||||
"after": "cic_ussd.state_machine.logic.language.change_preferred_language",
|
||||
"conditions": "cic_ussd.state_machine.logic.language.is_valid_language_selection"
|
||||
},
|
||||
{
|
||||
"trigger": "scan_data",
|
||||
"source": "select_preferred_language",
|
||||
"dest": "middle_language_set",
|
||||
"conditions": "cic_ussd.state_machine.logic.menu.menu_eleven_selected"
|
||||
"dest": "exit",
|
||||
"conditions": "cic_ussd.state_machine.logic.menu.menu_zero_zero_selected",
|
||||
"unless":"cic_ussd.state_machine.logic.language.is_valid_language_selection"
|
||||
},
|
||||
{
|
||||
"trigger": "scan_data",
|
||||
"source": "select_preferred_language",
|
||||
"dest": "exit",
|
||||
"conditions": "cic_ussd.state_machine.logic.menu.menu_zero_zero_selected"
|
||||
"dest": "middle_language_set",
|
||||
"conditions": "cic_ussd.state_machine.logic.menu.menu_eleven_selected",
|
||||
"unless": "cic_ussd.state_machine.logic.language.is_valid_language_selection"
|
||||
},
|
||||
{
|
||||
"trigger": "scan_data",
|
||||
"source": "select_preferred_language",
|
||||
"dest": "exit_invalid_menu_option"
|
||||
},
|
||||
{
|
||||
"trigger": "scan_data",
|
||||
"source": "middle_language_set",
|
||||
"dest": "select_preferred_language",
|
||||
"conditions": "cic_ussd.state_machine.logic.menu.menu_twenty_two_selected"
|
||||
"dest": "complete",
|
||||
"after": "cic_ussd.state_machine.logic.language.change_preferred_language",
|
||||
"conditions": "cic_ussd.state_machine.logic.language.is_valid_language_selection"
|
||||
},
|
||||
{
|
||||
"trigger": "scan_data",
|
||||
"source": "middle_language_set",
|
||||
"dest": "exit",
|
||||
"conditions": "cic_ussd.state_machine.logic.menu.menu_zero_zero_selected",
|
||||
"unless": "cic_ussd.state_machine.logic.language.is_valid_language_selection"
|
||||
},
|
||||
{
|
||||
"trigger": "scan_data",
|
||||
"source": "middle_language_set",
|
||||
"dest": "last_language_set",
|
||||
"conditions": "cic_ussd.state_machine.logic.menu.menu_eleven_selected"
|
||||
"conditions": "cic_ussd.state_machine.logic.menu.menu_eleven_selected",
|
||||
"unless": "cic_ussd.state_machine.logic.language.is_valid_language_selection"
|
||||
},
|
||||
{
|
||||
"trigger": "scan_data",
|
||||
"source": "middle_language_set",
|
||||
"dest": "exit",
|
||||
"conditions": "cic_ussd.state_machine.logic.menu.menu_zero_zero_selected"
|
||||
"dest": "select_preferred_language",
|
||||
"conditions": "cic_ussd.state_machine.logic.menu.menu_twenty_two_selected",
|
||||
"unless": "cic_ussd.state_machine.logic.language.is_valid_language_selection"
|
||||
},
|
||||
{
|
||||
{
|
||||
"trigger": "scan_data",
|
||||
"source": "middle_language_set",
|
||||
"dest": "exit_invalid_menu_option"
|
||||
},
|
||||
{
|
||||
"trigger": "scan_data",
|
||||
"source": "last_language_set",
|
||||
"dest": "middle_language_set",
|
||||
"conditions": "cic_ussd.state_machine.logic.menu.menu_twenty_two_selected"
|
||||
"dest": "complete",
|
||||
"after": "cic_ussd.state_machine.logic.language.change_preferred_language",
|
||||
"conditions": "cic_ussd.state_machine.logic.language.is_valid_language_selection"
|
||||
},
|
||||
{
|
||||
"trigger": "scan_data",
|
||||
"source": "last_language_set",
|
||||
"dest": "exit",
|
||||
"conditions": "cic_ussd.state_machine.logic.menu.menu_zero_zero_selected",
|
||||
"unless": "cic_ussd.state_machine.logic.language.is_valid_language_selection"
|
||||
},
|
||||
{
|
||||
"trigger": "scan_data",
|
||||
"source": "last_language_set",
|
||||
"dest": "exit",
|
||||
"conditions": "cic_ussd.state_machine.logic.menu.menu_zero_zero_selected"
|
||||
},
|
||||
{
|
||||
"trigger": "scan_data",
|
||||
"source": "middle_language_set",
|
||||
"dest": "exit",
|
||||
"conditions": "cic_ussd.state_machine.logic.menu.menu_zero_zero_selected"
|
||||
},
|
||||
{
|
||||
"trigger": "scan_data",
|
||||
"source": "select_preferred_language",
|
||||
"dest": "exit_invalid_menu_option"
|
||||
},
|
||||
{
|
||||
"trigger": "scan_data",
|
||||
"source": "middle_language_set",
|
||||
"dest": "exit_invalid_menu_option"
|
||||
"dest": "middle_language_set",
|
||||
"conditions": "cic_ussd.state_machine.logic.menu.menu_twenty_two_selected",
|
||||
"unless": "cic_ussd.state_machine.logic.language.is_valid_language_selection"
|
||||
},
|
||||
{
|
||||
"trigger": "scan_data",
|
||||
|
|
|
@ -1,16 +1,4 @@
|
|||
[
|
||||
{
|
||||
"trigger": "scan_data",
|
||||
"source": "first_account_tokens_set",
|
||||
"dest": "middle_account_tokens_set",
|
||||
"conditions": "cic_ussd.state_machine.logic.menu.menu_eleven_selected"
|
||||
},
|
||||
{
|
||||
"trigger": "scan_data",
|
||||
"source": "first_account_tokens_set",
|
||||
"dest": "exit",
|
||||
"conditions": "cic_ussd.state_machine.logic.menu.menu_zero_zero_selected"
|
||||
},
|
||||
{
|
||||
"trigger": "scan_data",
|
||||
"source": "first_account_tokens_set",
|
||||
|
@ -18,11 +6,36 @@
|
|||
"conditions": "cic_ussd.state_machine.logic.tokens.is_valid_token_selection",
|
||||
"after": "cic_ussd.state_machine.logic.tokens.process_token_selection"
|
||||
},
|
||||
{
|
||||
"trigger": "scan_data",
|
||||
"source": "first_account_tokens_set",
|
||||
"dest": "exit",
|
||||
"conditions": "cic_ussd.state_machine.logic.menu.menu_zero_zero_selected"
|
||||
},
|
||||
{
|
||||
"trigger": "scan_data",
|
||||
"source": "first_account_tokens_set",
|
||||
"dest": "middle_account_tokens_set",
|
||||
"conditions": "cic_ussd.state_machine.logic.menu.menu_eleven_selected"
|
||||
},
|
||||
{
|
||||
"trigger": "scan_data",
|
||||
"source": "first_account_tokens_set",
|
||||
"dest": "exit_invalid_menu_option"
|
||||
},
|
||||
{
|
||||
"trigger": "scan_data",
|
||||
"source": "middle_account_tokens_set",
|
||||
"dest": "token_selection_pin_authorization",
|
||||
"conditions": "cic_ussd.state_machine.logic.tokens.is_valid_token_selection",
|
||||
"after": "cic_ussd.state_machine.logic.tokens.process_token_selection"
|
||||
},
|
||||
{
|
||||
"trigger": "scan_data",
|
||||
"source": "middle_account_tokens_set",
|
||||
"dest": "exit",
|
||||
"conditions": "cic_ussd.state_machine.logic.menu.menu_zero_zero_selected"
|
||||
},
|
||||
{
|
||||
"trigger": "scan_data",
|
||||
"source": "middle_account_tokens_set",
|
||||
|
@ -38,20 +51,20 @@
|
|||
{
|
||||
"trigger": "scan_data",
|
||||
"source": "middle_account_tokens_set",
|
||||
"dest": "exit",
|
||||
"conditions": "cic_ussd.state_machine.logic.menu.menu_zero_zero_selected"
|
||||
"dest": "exit_invalid_menu_option"
|
||||
},
|
||||
{
|
||||
"trigger": "scan_data",
|
||||
"source": "middle_account_tokens_set",
|
||||
"source": "last_account_tokens_set",
|
||||
"dest": "token_selection_pin_authorization",
|
||||
"conditions": "cic_ussd.state_machine.logic.tokens.is_valid_token_selection",
|
||||
"after": "cic_ussd.state_machine.logic.tokens.process_token_selection"
|
||||
},
|
||||
{
|
||||
"trigger": "scan_data",
|
||||
"source": "middle_account_tokens_set",
|
||||
"dest": "exit_invalid_menu_option"
|
||||
"source": "last_account_tokens_set",
|
||||
"dest": "exit",
|
||||
"conditions": "cic_ussd.state_machine.logic.menu.menu_zero_zero_selected"
|
||||
},
|
||||
{
|
||||
"trigger": "scan_data",
|
||||
|
@ -59,19 +72,6 @@
|
|||
"dest": "middle_account_tokens_set",
|
||||
"conditions": "cic_ussd.state_machine.logic.menu.menu_twenty_two_selected"
|
||||
},
|
||||
{
|
||||
"trigger": "scan_data",
|
||||
"source": "last_account_tokens_set",
|
||||
"dest": "exit",
|
||||
"conditions": "cic_ussd.state_machine.logic.menu.menu_zero_zero_selected"
|
||||
},
|
||||
{
|
||||
"trigger": "scan_data",
|
||||
"source": "last_account_tokens_set",
|
||||
"dest": "token_selection_pin_authorization",
|
||||
"conditions": "cic_ussd.state_machine.logic.tokens.is_valid_token_selection",
|
||||
"after": "cic_ussd.state_machine.logic.tokens.process_token_selection"
|
||||
},
|
||||
{
|
||||
"trigger": "scan_data",
|
||||
"source": "last_account_tokens_set",
|
||||
|
|
|
@ -9,4 +9,4 @@ erc20-faucet==0.3.2
|
|||
sarafu-faucet==0.0.7
|
||||
confini~=0.5.3
|
||||
eth-token-index==0.2.4
|
||||
okota==0.2.5a1
|
||||
okota==0.2.6
|
||||
|
|
|
@ -1,52 +1,52 @@
|
|||
version: '3.2'
|
||||
version: "3.2"
|
||||
|
||||
services:
|
||||
cic-cache:
|
||||
image: ${IMAGE_BASE_URL:-registry.gitlab.com/grassrootseconomics/cic-internal-integration}/cic-cache:${TAG:-latest}
|
||||
image: docker.grassecon.net/cic-stack/cic-cache:${TAG:-latest}
|
||||
build:
|
||||
context: apps/cic-cache
|
||||
dockerfile: docker/Dockerfile
|
||||
cache_from:
|
||||
- ${IMAGE_BASE_URL:-registry.gitlab.com/grassrootseconomics/cic-internal-integration}/cic-cache:latest
|
||||
- docker.grassecon.net/cic-stack/cic-cache:${TAG:-latest}
|
||||
cic-eth:
|
||||
image: ${IMAGE_BASE_URL:-registry.gitlab.com/grassrootseconomics/cic-internal-integration}/cic-eth:${TAG:-latest}
|
||||
image: docker.grassecon.net/cic-stack/cic-eth:${TAG:-latest}
|
||||
build:
|
||||
context: apps/cic-eth
|
||||
dockerfile: docker/Dockerfile
|
||||
cache_from:
|
||||
- ${IMAGE_BASE_URL:-registry.gitlab.com/grassrootseconomics/cic-internal-integration}/cic-eth:latest
|
||||
- docker.grassecon.net/cic-stack/cic-eth:${TAG:-latest}
|
||||
cic-meta:
|
||||
image: ${IMAGE_BASE_URL:-registry.gitlab.com/grassrootseconomics/cic-internal-integration}/cic-meta:${TAG:-latest}
|
||||
image: docker.grassecon.net/cic-stack/cic-meta:${TAG:-latest}
|
||||
build:
|
||||
context: apps/cic-meta
|
||||
dockerfile: docker/Dockerfile
|
||||
cache_from:
|
||||
- ${IMAGE_BASE_URL:-registry.gitlab.com/grassrootseconomics/cic-internal-integration}/cic-meta:latest
|
||||
- docker.grassecon.net/cic-stack/cic-meta:${TAG:-latest}
|
||||
cic-notify:
|
||||
image: ${IMAGE_BASE_URL:-registry.gitlab.com/grassrootseconomics/cic-internal-integration}/cic-notify:${TAG:-latest}
|
||||
image: docker.grassecon.net/cic-stack/cic-notify:${TAG:-latest}
|
||||
build:
|
||||
context: apps/cic-notify
|
||||
dockerfile: docker/Dockerfile
|
||||
cache_from:
|
||||
- ${IMAGE_BASE_URL:-registry.gitlab.com/grassrootseconomics/cic-internal-integration}/cic-notify:latest
|
||||
- docker.grassecon.net/cic-stack/cic-notify:${TAG:-latest}
|
||||
funga-eth:
|
||||
image: ${IMAGE_BASE_URL:-registry.gitlab.com/grassrootseconomics/cic-internal-integration}/funga-eth:${TAG:-latest}
|
||||
image: docker.grassecon.net/cic-stack/funga-eth:${TAG:-latest}
|
||||
build:
|
||||
context: apps/cic-signer
|
||||
dockerfile: Dockerfile
|
||||
cache_from:
|
||||
- ${IMAGE_BASE_URL:-registry.gitlab.com/grassrootseconomics/cic-internal-integration}/funga-eth:latest
|
||||
- docker.grassecon.net/cic-stack/funga-eth:${TAG:-latest}
|
||||
cic-ussd:
|
||||
image: ${IMAGE_BASE_URL:-registry.gitlab.com/grassrootseconomics/cic-internal-integration}/cic-ussd:${TAG:-latest}
|
||||
image: docker.grassecon.net/cic-stack/cic-ussd:${TAG:-latest}
|
||||
build:
|
||||
context: apps/cic-ussd
|
||||
dockerfile: docker/Dockerfile
|
||||
cache_from:
|
||||
- ${IMAGE_BASE_URL:-registry.gitlab.com/grassrootseconomics/cic-internal-integration}/cic-ussd:latest
|
||||
- docker.grassecon.net/cic-stack/cic-ussd:${TAG:-latest}
|
||||
cic-contract-bootstrap:
|
||||
image: ${IMAGE_BASE_URL:-registry.gitlab.com/grassrootseconomics/cic-internal-integration}/cic-contract-bootstrap:${TAG:-latest}
|
||||
image: docker.grassecon.net/cic-stack/cic-contract-bootstrap:${TAG:-latest}
|
||||
build:
|
||||
context: apps/contract-migration
|
||||
dockerfile: docker/Dockerfile
|
||||
cache_from:
|
||||
- ${IMAGE_BASE_URL:-registry.gitlab.com/grassrootseconomics/cic-internal-integration}/cic-ussd:latest
|
||||
- docker.grassecon.net/cic-stack/cic-ussd:${TAG:-latest}
|
||||
|
|
Loading…
Reference in New Issue