From c5673b339b49c0d836dd0e2355d0bbd66ceee47a Mon Sep 17 00:00:00 2001 From: alfred-mk Date: Wed, 2 Apr 2025 18:24:34 +0300 Subject: [PATCH 01/30] added a DATA_SELF_PIN_RESET to track when a user's PIN is reset by an admin --- store/db/db.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/store/db/db.go b/store/db/db.go index 220ac56..f7f7013 100644 --- a/store/db/db.go +++ b/store/db/db.go @@ -65,6 +65,8 @@ const ( DATA_ACCOUNT_ALIAS //currently suggested alias by the api awaiting user's confirmation as accepted account alias DATA_SUGGESTED_ALIAS + //currently suggested alias by the api awaiting user's confirmation as accepted account alias + DATA_SELF_PIN_RESET ) const ( -- 2.45.2 From 2c671bc0d4f972894f4559393092abe5d2a9a286 Mon Sep 17 00:00:00 2001 From: alfred-mk Date: Wed, 2 Apr 2025 18:29:04 +0300 Subject: [PATCH 02/30] use the DATA_SELF_PIN_RESET to set the flag_account_pin_reset --- handlers/application/menuhandler.go | 23 +++++++++++++++++++++-- services/registration/pp.csv | 1 + 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/handlers/application/menuhandler.go b/handlers/application/menuhandler.go index 13d1315..1c28217 100644 --- a/handlers/application/menuhandler.go +++ b/handlers/application/menuhandler.go @@ -273,18 +273,29 @@ func (h *MenuHandlers) ResetValidPin(ctx context.Context, sym string, input []by return res, nil } -// CheckBlockedStatus resets the account blocked flag if the PIN attempts have been reset by an admin. +// CheckBlockedStatus: +// 1. Checks whether the DATA_SELF_PIN_RESET is 1 and sets the flag_account_pin_reset +// 2. resets the account blocked flag if the PIN attempts have been reset by an admin. func (h *MenuHandlers) CheckBlockedStatus(ctx context.Context, sym string, input []byte) (resource.Result, error) { var res resource.Result store := h.userdataStore flag_account_blocked, _ := h.flagManager.GetFlag("flag_account_blocked") + flag_account_pin_reset, _ := h.flagManager.GetFlag("flag_account_pin_reset") sessionId, ok := ctx.Value("SessionId").(string) if !ok { return res, fmt.Errorf("missing session") } + selfPinReset, err := store.ReadEntry(ctx, sessionId, storedb.DATA_SELF_PIN_RESET) + if err == nil { + pinResetValue, _ := strconv.ParseUint(string(selfPinReset), 0, 64) + if pinResetValue == 1 { + res.FlagSet = append(res.FlagSet, flag_account_pin_reset) + } + } + currentWrongPinAttempts, err := store.ReadEntry(ctx, sessionId, storedb.DATA_INCORRECT_PIN_ATTEMPTS) if err != nil { if !db.IsNotFound(err) { @@ -293,7 +304,6 @@ func (h *MenuHandlers) CheckBlockedStatus(ctx context.Context, sym string, input } pinAttemptsValue, _ := strconv.ParseUint(string(currentWrongPinAttempts), 0, 64) - if pinAttemptsValue == 0 { res.FlagReset = append(res.FlagReset, flag_account_blocked) return res, nil @@ -630,6 +640,7 @@ func (h *MenuHandlers) ResetUnregisteredNumber(ctx context.Context, sym string, // ValidateBlockedNumber performs validation of phone numbers, specifically for blocked numbers in the system. // It checks phone number format and verifies registration status. +// If valid, it sets DATA_SELF_PIN_RESET as 1 on the account func (h *MenuHandlers) ValidateBlockedNumber(ctx context.Context, sym string, input []byte) (resource.Result, error) { var res resource.Result var err error @@ -665,10 +676,18 @@ func (h *MenuHandlers) ValidateBlockedNumber(ctx context.Context, sym string, in return res, err } } + err = store.WriteEntry(ctx, sessionId, storedb.DATA_BLOCKED_NUMBER, []byte(formattedNumber)) if err != nil { return res, nil } + + // set the DATA_SELF_PIN_RESET for the account + err = store.WriteEntry(ctx, formattedNumber, storedb.DATA_SELF_PIN_RESET, []byte("1")) + if err != nil { + return res, nil + } + return res, nil } diff --git a/services/registration/pp.csv b/services/registration/pp.csv index e34de5d..dec5b42 100644 --- a/services/registration/pp.csv +++ b/services/registration/pp.csv @@ -31,3 +31,4 @@ flag,flag_back_set,37,this is set when it is a back navigation flag,flag_account_blocked,38,this is set when an account has been blocked after the allowed incorrect PIN attempts have been exceeded flag,flag_invalid_pin,39,this is set when the given PIN is invalid(is less than or more than 4 digits) flag,flag_alias_set,40,this is set when an account alias has been assigned to a user +flag,flag_account_pin_reset,41,this is set on an account when an admin triggers a PIN reset for them -- 2.45.2 From f96f9c11e6d32c3243dcae7c71dbc14fa98ec9bf Mon Sep 17 00:00:00 2001 From: alfred-mk Date: Tue, 8 Apr 2025 16:23:21 +0300 Subject: [PATCH 03/30] updated the ResetOthersPin and ValidateBlockedNumber for the updated reset other's PIN functionality --- handlers/application/menuhandler.go | 118 ++++++++++++---------------- 1 file changed, 52 insertions(+), 66 deletions(-) diff --git a/handlers/application/menuhandler.go b/handlers/application/menuhandler.go index 1c28217..d835d84 100644 --- a/handlers/application/menuhandler.go +++ b/handlers/application/menuhandler.go @@ -539,10 +539,57 @@ func (h *MenuHandlers) ConfirmPinChange(ctx context.Context, sym string, input [ return res, nil } +// ValidateBlockedNumber performs validation of phone numbers during the Reset other's PIN. +// It checks phone number format and verifies registration status. +// If valid, it writes the number under DATA_BLOCKED_NUMBER on the admin account +func (h *MenuHandlers) ValidateBlockedNumber(ctx context.Context, sym string, input []byte) (resource.Result, error) { + var res resource.Result + var err error + + flag_unregistered_number, _ := h.flagManager.GetFlag("flag_unregistered_number") + store := h.userdataStore + sessionId, ok := ctx.Value("SessionId").(string) + if !ok { + return res, fmt.Errorf("missing session") + } + + if string(input) == "0" { + res.FlagReset = append(res.FlagReset, flag_unregistered_number) + return res, nil + } + + blockedNumber := string(input) + formattedNumber, err := phone.FormatPhoneNumber(blockedNumber) + if err != nil { + res.FlagSet = append(res.FlagSet, flag_unregistered_number) + logg.ErrorCtxf(ctx, "Failed to format the phone number: %s", blockedNumber, "error", err) + return res, nil + } + + _, err = store.ReadEntry(ctx, formattedNumber, storedb.DATA_PUBLIC_KEY) + if err != nil { + if db.IsNotFound(err) { + logg.InfoCtxf(ctx, "Invalid or unregistered number") + res.FlagSet = append(res.FlagSet, flag_unregistered_number) + return res, nil + } else { + logg.ErrorCtxf(ctx, "Error on ValidateBlockedNumber", "error", err) + return res, err + } + } + + err = store.WriteEntry(ctx, sessionId, storedb.DATA_BLOCKED_NUMBER, []byte(formattedNumber)) + if err != nil { + return res, nil + } + + return res, nil +} + // ResetOthersPin handles the PIN reset process for other users' accounts by: // 1. Retrieving the blocked phone number from the session -// 2. Fetching the hashed temporary PIN associated with that number -// 3. Updating the account PIN with the temporary PIN +// 2. Writing the DATA_SELF_PIN_RESET on the blocked phone number +// 3. Resetting the DATA_INCORRECT_PIN_ATTEMPTS to 0 for the blocked phone number func (h *MenuHandlers) ResetOthersPin(ctx context.Context, sym string, input []byte) (resource.Result, error) { var res resource.Result store := h.userdataStore @@ -555,19 +602,11 @@ func (h *MenuHandlers) ResetOthersPin(ctx context.Context, sym string, input []b logg.ErrorCtxf(ctx, "failed to read blockedPhonenumber entry with", "key", storedb.DATA_BLOCKED_NUMBER, "error", err) return res, err } - hashedTemporaryPin, err := store.ReadEntry(ctx, string(blockedPhonenumber), storedb.DATA_TEMPORARY_VALUE) - if err != nil { - logg.ErrorCtxf(ctx, "failed to read hashedTmporaryPin entry with", "key", storedb.DATA_TEMPORARY_VALUE, "error", err) - return res, err - } - if len(hashedTemporaryPin) == 0 { - logg.ErrorCtxf(ctx, "hashedTemporaryPin is empty", "key", storedb.DATA_TEMPORARY_VALUE) - return res, fmt.Errorf("Data error encountered") - } - err = store.WriteEntry(ctx, string(blockedPhonenumber), storedb.DATA_ACCOUNT_PIN, []byte(hashedTemporaryPin)) + // set the DATA_SELF_PIN_RESET for the account + err = store.WriteEntry(ctx, string(blockedPhonenumber), storedb.DATA_SELF_PIN_RESET, []byte("1")) if err != nil { - return res, err + return res, nil } err = store.WriteEntry(ctx, string(blockedPhonenumber), storedb.DATA_INCORRECT_PIN_ATTEMPTS, []byte(string("0"))) @@ -638,59 +677,6 @@ func (h *MenuHandlers) ResetUnregisteredNumber(ctx context.Context, sym string, return res, nil } -// ValidateBlockedNumber performs validation of phone numbers, specifically for blocked numbers in the system. -// It checks phone number format and verifies registration status. -// If valid, it sets DATA_SELF_PIN_RESET as 1 on the account -func (h *MenuHandlers) ValidateBlockedNumber(ctx context.Context, sym string, input []byte) (resource.Result, error) { - var res resource.Result - var err error - - flag_unregistered_number, _ := h.flagManager.GetFlag("flag_unregistered_number") - store := h.userdataStore - sessionId, ok := ctx.Value("SessionId").(string) - if !ok { - return res, fmt.Errorf("missing session") - } - - if string(input) == "0" { - res.FlagReset = append(res.FlagReset, flag_unregistered_number) - return res, nil - } - - blockedNumber := string(input) - formattedNumber, err := phone.FormatPhoneNumber(blockedNumber) - if err != nil { - res.FlagSet = append(res.FlagSet, flag_unregistered_number) - logg.ErrorCtxf(ctx, "Failed to format the phone number: %s", blockedNumber, "error", err) - return res, nil - } - - _, err = store.ReadEntry(ctx, formattedNumber, storedb.DATA_PUBLIC_KEY) - if err != nil { - if db.IsNotFound(err) { - logg.InfoCtxf(ctx, "Invalid or unregistered number") - res.FlagSet = append(res.FlagSet, flag_unregistered_number) - return res, nil - } else { - logg.ErrorCtxf(ctx, "Error on ValidateBlockedNumber", "error", err) - return res, err - } - } - - err = store.WriteEntry(ctx, sessionId, storedb.DATA_BLOCKED_NUMBER, []byte(formattedNumber)) - if err != nil { - return res, nil - } - - // set the DATA_SELF_PIN_RESET for the account - err = store.WriteEntry(ctx, formattedNumber, storedb.DATA_SELF_PIN_RESET, []byte("1")) - if err != nil { - return res, nil - } - - return res, nil -} - // VerifyCreatePin checks whether the confirmation PIN is similar to the temporary PIN // If similar, it sets the USERFLAG_PIN_SET flag and writes the account PIN allowing the user // to access the main menu. -- 2.45.2 From d094af9c51d749884a731ffebeeffbddbbca05cb Mon Sep 17 00:00:00 2001 From: alfred-mk Date: Tue, 8 Apr 2025 16:25:11 +0300 Subject: [PATCH 04/30] move to the authorize_reset_others_pin if the given number is valid and registered --- services/registration/enter_other_number.vis | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/registration/enter_other_number.vis b/services/registration/enter_other_number.vis index 018aad3..56b0558 100644 --- a/services/registration/enter_other_number.vis +++ b/services/registration/enter_other_number.vis @@ -7,4 +7,4 @@ INCMP _ 0 LOAD validate_blocked_number 6 RELOAD validate_blocked_number CATCH unregistered_number flag_unregistered_number 1 -INCMP enter_others_new_pin * +INCMP authorize_reset_others_pin * -- 2.45.2 From 8a6659a98b2f3b602ff35b7835ebd91c9eacbb65 Mon Sep 17 00:00:00 2001 From: alfred-mk Date: Tue, 8 Apr 2025 16:25:50 +0300 Subject: [PATCH 05/30] request the admin to authorize the PIN reset --- services/registration/authorize_reset_others_pin | 2 ++ services/registration/authorize_reset_others_pin.vis | 12 ++++++++++++ services/registration/authorize_reset_others_pin_swa | 2 ++ 3 files changed, 16 insertions(+) create mode 100644 services/registration/authorize_reset_others_pin create mode 100644 services/registration/authorize_reset_others_pin.vis create mode 100644 services/registration/authorize_reset_others_pin_swa diff --git a/services/registration/authorize_reset_others_pin b/services/registration/authorize_reset_others_pin new file mode 100644 index 0000000..1ed5a77 --- /dev/null +++ b/services/registration/authorize_reset_others_pin @@ -0,0 +1,2 @@ +{{.retrieve_blocked_number}} will get a PIN reset request. +Please enter your PIN to confirm: \ No newline at end of file diff --git a/services/registration/authorize_reset_others_pin.vis b/services/registration/authorize_reset_others_pin.vis new file mode 100644 index 0000000..6f9e5b3 --- /dev/null +++ b/services/registration/authorize_reset_others_pin.vis @@ -0,0 +1,12 @@ +LOAD retrieve_blocked_number 0 +RELOAD retrieve_blocked_number +MAP retrieve_blocked_number +MOUT back 0 +MOUT quit 9 +LOAD authorize_account 6 +HALT +RELOAD authorize_account +CATCH incorrect_pin flag_incorrect_pin 1 +INCMP _ 0 +INCMP quit 9 +INCMP pin_reset_result * diff --git a/services/registration/authorize_reset_others_pin_swa b/services/registration/authorize_reset_others_pin_swa new file mode 100644 index 0000000..4f355ac --- /dev/null +++ b/services/registration/authorize_reset_others_pin_swa @@ -0,0 +1,2 @@ +{{.retrieve_blocked_number}} atapokea ombi la kuweka upya PIN. +Tafadhali weka PIN yako kudhibitisha: \ No newline at end of file -- 2.45.2 From 514f6ae05b6b89be45165cb250bcb2da1b0fba9b Mon Sep 17 00:00:00 2001 From: alfred-mk Date: Tue, 8 Apr 2025 16:26:21 +0300 Subject: [PATCH 06/30] move back to the previous node if the admin user is not authorized --- services/registration/pin_reset_result.vis | 1 + 1 file changed, 1 insertion(+) diff --git a/services/registration/pin_reset_result.vis b/services/registration/pin_reset_result.vis index de877e5..a676198 100644 --- a/services/registration/pin_reset_result.vis +++ b/services/registration/pin_reset_result.vis @@ -1,3 +1,4 @@ +CATCH _ flag_account_authorized 0 LOAD retrieve_blocked_number 0 MAP retrieve_blocked_number LOAD reset_others_pin 6 -- 2.45.2 From 33c376c971e3d3757f972f457fbd52038bda20e0 Mon Sep 17 00:00:00 2001 From: alfred-mk Date: Wed, 9 Apr 2025 15:10:12 +0300 Subject: [PATCH 07/30] set the DATA_SELF_PIN_RESET as 0 and reset the flag_account_pin_reset --- handlers/application/menuhandler.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/handlers/application/menuhandler.go b/handlers/application/menuhandler.go index d835d84..1abb5ce 100644 --- a/handlers/application/menuhandler.go +++ b/handlers/application/menuhandler.go @@ -288,6 +288,8 @@ func (h *MenuHandlers) CheckBlockedStatus(ctx context.Context, sym string, input return res, fmt.Errorf("missing session") } + res.FlagReset = append(res.FlagReset, flag_account_pin_reset) + selfPinReset, err := store.ReadEntry(ctx, sessionId, storedb.DATA_SELF_PIN_RESET) if err == nil { pinResetValue, _ := strconv.ParseUint(string(selfPinReset), 0, 64) @@ -505,6 +507,7 @@ func (h *MenuHandlers) ConfirmPinChange(ctx context.Context, sym string, input [ return res, fmt.Errorf("missing session") } flag_pin_mismatch, _ := h.flagManager.GetFlag("flag_pin_mismatch") + flag_account_pin_reset, _ := h.flagManager.GetFlag("flag_account_pin_reset") if string(input) == "0" { res.FlagReset = append(res.FlagReset, flag_pin_mismatch) @@ -535,6 +538,13 @@ func (h *MenuHandlers) ConfirmPinChange(ctx context.Context, sym string, input [ logg.ErrorCtxf(ctx, "failed to write DATA_ACCOUNT_PIN entry with", "key", storedb.DATA_ACCOUNT_PIN, "hashedPIN value", hashedTemporaryPin, "error", err) return res, err } + // set the DATA_SELF_PIN_RESET as 0 + err = store.WriteEntry(ctx, sessionId, storedb.DATA_SELF_PIN_RESET, []byte("0")) + if err != nil { + logg.ErrorCtxf(ctx, "failed to write DATA_SELF_PIN_RESET entry with", "key", storedb.DATA_SELF_PIN_RESET, "self PIN reset value", "0", "error", err) + return res, err + } + res.FlagReset = append(res.FlagReset, flag_account_pin_reset) return res, nil } -- 2.45.2 From 477f3a307a5fa4c5750c79b665137a11c25910b6 Mon Sep 17 00:00:00 2001 From: alfred-mk Date: Wed, 9 Apr 2025 15:11:51 +0300 Subject: [PATCH 08/30] use the self_reset_pin node to reset PINs for accounts with a flag_account_pin_reset --- services/registration/root.vis | 1 + services/registration/self_reset_pin | 2 ++ services/registration/self_reset_pin.vis | 8 ++++++++ services/registration/self_reset_pin_swa | 2 ++ 4 files changed, 13 insertions(+) create mode 100644 services/registration/self_reset_pin create mode 100644 services/registration/self_reset_pin.vis create mode 100644 services/registration/self_reset_pin_swa diff --git a/services/registration/root.vis b/services/registration/root.vis index c57f31c..923caef 100644 --- a/services/registration/root.vis +++ b/services/registration/root.vis @@ -2,6 +2,7 @@ LOAD check_blocked_status 1 RELOAD check_blocked_status LOAD check_account_created 2 RELOAD check_account_created +CATCH self_reset_pin flag_account_pin_reset 1 CATCH blocked_account flag_account_blocked 1 CATCH select_language flag_language_set 0 CATCH terms flag_account_created 0 diff --git a/services/registration/self_reset_pin b/services/registration/self_reset_pin new file mode 100644 index 0000000..ce40705 --- /dev/null +++ b/services/registration/self_reset_pin @@ -0,0 +1,2 @@ +A PIN reset has been done on your account. +Please enter a new four number PIN: \ No newline at end of file diff --git a/services/registration/self_reset_pin.vis b/services/registration/self_reset_pin.vis new file mode 100644 index 0000000..3439fcd --- /dev/null +++ b/services/registration/self_reset_pin.vis @@ -0,0 +1,8 @@ +LOAD reset_invalid_pin 6 +HALT +LOAD save_temporary_pin 1 +RELOAD save_temporary_pin +LOAD verify_new_pin 2 +RELOAD verify_new_pin +CATCH invalid_pin flag_valid_pin 0 +INCMP confirm_self_pin_reset * diff --git a/services/registration/self_reset_pin_swa b/services/registration/self_reset_pin_swa new file mode 100644 index 0000000..0ef19d0 --- /dev/null +++ b/services/registration/self_reset_pin_swa @@ -0,0 +1,2 @@ +Uwekaji upya wa PIN umefanyika kwenye akaunti yako. +Tafadhali weka PIN mpya ya nambari nne: \ No newline at end of file -- 2.45.2 From 71ef950fff654a4c1971f9706fe24f97060edc24 Mon Sep 17 00:00:00 2001 From: alfred-mk Date: Wed, 9 Apr 2025 15:12:51 +0300 Subject: [PATCH 09/30] use the confirm_self_pin_reset to confirm the new PIN --- services/registration/confirm_self_pin_reset | 1 + services/registration/confirm_self_pin_reset.vis | 7 +++++++ services/registration/confirm_self_pin_reset_swa | 1 + 3 files changed, 9 insertions(+) create mode 100644 services/registration/confirm_self_pin_reset create mode 100644 services/registration/confirm_self_pin_reset.vis create mode 100644 services/registration/confirm_self_pin_reset_swa diff --git a/services/registration/confirm_self_pin_reset b/services/registration/confirm_self_pin_reset new file mode 100644 index 0000000..2e1b83e --- /dev/null +++ b/services/registration/confirm_self_pin_reset @@ -0,0 +1 @@ +Confirm your new PIN: \ No newline at end of file diff --git a/services/registration/confirm_self_pin_reset.vis b/services/registration/confirm_self_pin_reset.vis new file mode 100644 index 0000000..043ad38 --- /dev/null +++ b/services/registration/confirm_self_pin_reset.vis @@ -0,0 +1,7 @@ +MOUT back 0 +HALT +INCMP _ 0 +LOAD confirm_pin_change 0 +RELOAD confirm_pin_change +CATCH pin_reset_mismatch flag_pin_mismatch 1 +INCMP pin_reset_success * diff --git a/services/registration/confirm_self_pin_reset_swa b/services/registration/confirm_self_pin_reset_swa new file mode 100644 index 0000000..e407fec --- /dev/null +++ b/services/registration/confirm_self_pin_reset_swa @@ -0,0 +1 @@ +Thibitisha PIN yako mpya: \ No newline at end of file -- 2.45.2 From aec96ce9ba11ca125dccb83fc07f3c274cebc825 Mon Sep 17 00:00:00 2001 From: alfred-mk Date: Wed, 9 Apr 2025 15:19:23 +0300 Subject: [PATCH 10/30] move to the top node when one selects back --- services/registration/my_account.vis | 2 +- services/registration/pin_reset_success.vis | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/services/registration/my_account.vis b/services/registration/my_account.vis index c0b624e..fc0a634 100644 --- a/services/registration/my_account.vis +++ b/services/registration/my_account.vis @@ -9,7 +9,7 @@ MOUT my_address 6 MOUT my_account_alias 7 MOUT back 0 HALT -INCMP main 0 +INCMP ^ 0 INCMP edit_profile 1 INCMP change_language 2 INCMP balances 3 diff --git a/services/registration/pin_reset_success.vis b/services/registration/pin_reset_success.vis index a3a143f..5535616 100644 --- a/services/registration/pin_reset_success.vis +++ b/services/registration/pin_reset_success.vis @@ -1,6 +1,6 @@ MOUT back 0 MOUT quit 9 HALT -INCMP main 0 +INCMP ^ 0 INCMP quit 9 INCMP . * -- 2.45.2 From f8c258a3b4b70d3c1822512faf8b9d55cef8ecfb Mon Sep 17 00:00:00 2001 From: alfred-mk Date: Wed, 9 Apr 2025 16:49:04 +0300 Subject: [PATCH 11/30] allow the user to quit and move to invalid_pin node if the given input is invalid --- services/registration/create_pin.vis | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/services/registration/create_pin.vis b/services/registration/create_pin.vis index 40989ec..b329fc3 100644 --- a/services/registration/create_pin.vis +++ b/services/registration/create_pin.vis @@ -2,8 +2,8 @@ LOAD create_account 0 CATCH account_creation_failed flag_account_creation_failed 1 MOUT exit 0 HALT +INCMP quit 0 LOAD save_temporary_pin 6 RELOAD save_temporary_pin -CATCH . flag_incorrect_pin 1 -INCMP quit 0 +CATCH invalid_pin flag_invalid_pin 1 INCMP confirm_create_pin * -- 2.45.2 From 067c4962445823bed3dcea11691492620e3c72dc Mon Sep 17 00:00:00 2001 From: alfred-mk Date: Wed, 9 Apr 2025 16:55:46 +0300 Subject: [PATCH 12/30] use a single pin_mismatch node for a confirmed PIN that does not match the original PIN --- services/registration/confirm_create_pin.vis | 5 ++++- services/registration/confirm_pin_change.vis | 2 +- services/registration/confirm_self_pin_reset.vis | 2 +- services/registration/create_pin_mismatch.vis | 5 ----- services/registration/{create_pin_mismatch => pin_mismatch} | 0 .../{pin_reset_mismatch.vis => pin_mismatch.vis} | 0 .../{create_pin_mismatch_swa => pin_mismatch_swa} | 0 services/registration/pin_reset_mismatch | 1 - services/registration/pin_reset_mismatch_swa | 1 - 9 files changed, 6 insertions(+), 10 deletions(-) delete mode 100644 services/registration/create_pin_mismatch.vis rename services/registration/{create_pin_mismatch => pin_mismatch} (100%) rename services/registration/{pin_reset_mismatch.vis => pin_mismatch.vis} (100%) rename services/registration/{create_pin_mismatch_swa => pin_mismatch_swa} (100%) delete mode 100644 services/registration/pin_reset_mismatch delete mode 100644 services/registration/pin_reset_mismatch_swa diff --git a/services/registration/confirm_create_pin.vis b/services/registration/confirm_create_pin.vis index 02279dc..2e82d7d 100644 --- a/services/registration/confirm_create_pin.vis +++ b/services/registration/confirm_create_pin.vis @@ -1,4 +1,7 @@ -LOAD save_temporary_pin 6 +MOUT back 0 HALT +INCMP _ 0 LOAD verify_create_pin 8 +RELOAD verify_create_pin +CATCH pin_mismatch flag_pin_mismatch 1 INCMP account_creation * diff --git a/services/registration/confirm_pin_change.vis b/services/registration/confirm_pin_change.vis index 09b12f8..6e50c11 100644 --- a/services/registration/confirm_pin_change.vis +++ b/services/registration/confirm_pin_change.vis @@ -3,5 +3,5 @@ MOUT back 0 HALT INCMP _ 0 RELOAD confirm_pin_change -CATCH pin_reset_mismatch flag_pin_mismatch 1 +CATCH pin_mismatch flag_pin_mismatch 1 INCMP * pin_reset_success diff --git a/services/registration/confirm_self_pin_reset.vis b/services/registration/confirm_self_pin_reset.vis index 043ad38..419662b 100644 --- a/services/registration/confirm_self_pin_reset.vis +++ b/services/registration/confirm_self_pin_reset.vis @@ -3,5 +3,5 @@ HALT INCMP _ 0 LOAD confirm_pin_change 0 RELOAD confirm_pin_change -CATCH pin_reset_mismatch flag_pin_mismatch 1 +CATCH pin_mismatch flag_pin_mismatch 1 INCMP pin_reset_success * diff --git a/services/registration/create_pin_mismatch.vis b/services/registration/create_pin_mismatch.vis deleted file mode 100644 index 91793b5..0000000 --- a/services/registration/create_pin_mismatch.vis +++ /dev/null @@ -1,5 +0,0 @@ -MOUT retry 1 -MOUT quit 9 -HALT -INCMP confirm_create_pin 1 -INCMP quit 9 diff --git a/services/registration/create_pin_mismatch b/services/registration/pin_mismatch similarity index 100% rename from services/registration/create_pin_mismatch rename to services/registration/pin_mismatch diff --git a/services/registration/pin_reset_mismatch.vis b/services/registration/pin_mismatch.vis similarity index 100% rename from services/registration/pin_reset_mismatch.vis rename to services/registration/pin_mismatch.vis diff --git a/services/registration/create_pin_mismatch_swa b/services/registration/pin_mismatch_swa similarity index 100% rename from services/registration/create_pin_mismatch_swa rename to services/registration/pin_mismatch_swa diff --git a/services/registration/pin_reset_mismatch b/services/registration/pin_reset_mismatch deleted file mode 100644 index dc0236b..0000000 --- a/services/registration/pin_reset_mismatch +++ /dev/null @@ -1 +0,0 @@ -The PIN is not a match. Try again diff --git a/services/registration/pin_reset_mismatch_swa b/services/registration/pin_reset_mismatch_swa deleted file mode 100644 index 5787790..0000000 --- a/services/registration/pin_reset_mismatch_swa +++ /dev/null @@ -1 +0,0 @@ -PIN uliyoweka hailingani.Jaribu tena. \ No newline at end of file -- 2.45.2 From 29d94bb2e514331b16e6c6af7f325432b63f182c Mon Sep 17 00:00:00 2001 From: alfred-mk Date: Wed, 9 Apr 2025 16:57:22 +0300 Subject: [PATCH 13/30] have the catch for create_pin above to catch accounts that do not have a PIN before the status on chain is checked --- services/registration/root.vis | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/registration/root.vis b/services/registration/root.vis index 923caef..ec5b54e 100644 --- a/services/registration/root.vis +++ b/services/registration/root.vis @@ -6,10 +6,10 @@ CATCH self_reset_pin flag_account_pin_reset 1 CATCH blocked_account flag_account_blocked 1 CATCH select_language flag_language_set 0 CATCH terms flag_account_created 0 +CATCH create_pin flag_pin_set 0 LOAD check_account_status 0 RELOAD check_account_status CATCH api_failure flag_api_call_error 1 CATCH account_pending flag_account_pending 1 -CATCH create_pin flag_pin_set 0 CATCH main flag_account_success 1 HALT -- 2.45.2 From 0c1d9ab58232b86b71f2408f913c10ea003b28e5 Mon Sep 17 00:00:00 2001 From: alfred-mk Date: Wed, 9 Apr 2025 16:58:13 +0300 Subject: [PATCH 14/30] updated the description of the flag_incorrect_pin --- services/registration/pp.csv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/registration/pp.csv b/services/registration/pp.csv index dec5b42..ff26614 100644 --- a/services/registration/pp.csv +++ b/services/registration/pp.csv @@ -9,7 +9,7 @@ flag,flag_account_authorized,15,this is set to allow a user access guarded nodes flag,flag_invalid_recipient,16,this is set when the transaction recipient is invalid flag,flag_invalid_recipient_with_invite,17,this is set when the transaction recipient is valid but not on the platform flag,flag_invalid_amount,18,this is set when the given transaction amount is invalid -flag,flag_incorrect_pin,19,this is set when the provided PIN is invalid or does not match the current account's PIN +flag,flag_incorrect_pin,19,this is set when the provided PIN does not match the current account's PIN flag,flag_valid_pin,20,this is set when the given PIN is valid flag,flag_allow_update,21,this is set to allow a user to update their profile data flag,flag_single_edit,22,this is set to allow a user to edit a single profile item such as year of birth -- 2.45.2 From 1f6bf2bbed2daa33194e479eed442e78cd144561 Mon Sep 17 00:00:00 2001 From: alfred-mk Date: Wed, 9 Apr 2025 16:59:48 +0300 Subject: [PATCH 15/30] updated the flags set and reset in SaveTemporaryPin and VerifyCreatePin --- handlers/application/menuhandler.go | 38 +++++++++++++++++++---------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/handlers/application/menuhandler.go b/handlers/application/menuhandler.go index 1abb5ce..69a681d 100644 --- a/handlers/application/menuhandler.go +++ b/handlers/application/menuhandler.go @@ -383,15 +383,20 @@ func (h *MenuHandlers) SaveTemporaryPin(ctx context.Context, sym string, input [ return res, fmt.Errorf("missing session") } - flag_incorrect_pin, _ := h.flagManager.GetFlag("flag_incorrect_pin") - accountPIN := string(input) + flag_invalid_pin, _ := h.flagManager.GetFlag("flag_invalid_pin") - // Validate that the PIN is a 4-digit number. - if !pin.IsValidPIN(accountPIN) { - res.FlagSet = append(res.FlagSet, flag_incorrect_pin) + if string(input) == "0" { return res, nil } - res.FlagReset = append(res.FlagReset, flag_incorrect_pin) + + accountPIN := string(input) + + // Validate that the PIN has a valid format. + if !pin.IsValidPIN(accountPIN) { + res.FlagSet = append(res.FlagSet, flag_invalid_pin) + return res, nil + } + res.FlagReset = append(res.FlagReset, flag_invalid_pin) // Hash the PIN hashedPIN, err := pin.HashPIN(string(accountPIN)) @@ -693,14 +698,20 @@ func (h *MenuHandlers) ResetUnregisteredNumber(ctx context.Context, sym string, func (h *MenuHandlers) VerifyCreatePin(ctx context.Context, sym string, input []byte) (resource.Result, error) { var res resource.Result - flag_valid_pin, _ := h.flagManager.GetFlag("flag_valid_pin") - flag_pin_mismatch, _ := h.flagManager.GetFlag("flag_pin_mismatch") - flag_pin_set, _ := h.flagManager.GetFlag("flag_pin_set") - sessionId, ok := ctx.Value("SessionId").(string) if !ok { return res, fmt.Errorf("missing session") } + + flag_valid_pin, _ := h.flagManager.GetFlag("flag_valid_pin") + flag_pin_mismatch, _ := h.flagManager.GetFlag("flag_pin_mismatch") + flag_pin_set, _ := h.flagManager.GetFlag("flag_pin_set") + + if string(input) == "0" { + res.FlagReset = append(res.FlagReset, flag_pin_mismatch) + return res, nil + } + store := h.userdataStore hashedTemporaryPin, err := store.ReadEntry(ctx, sessionId, storedb.DATA_TEMPORARY_VALUE) if err != nil { @@ -713,14 +724,15 @@ func (h *MenuHandlers) VerifyCreatePin(ctx context.Context, sym string, input [] } if pin.VerifyPIN(string(hashedTemporaryPin), string(input)) { - res.FlagSet = []uint32{flag_valid_pin} - res.FlagReset = []uint32{flag_pin_mismatch} + res.FlagSet = append(res.FlagSet, flag_valid_pin) res.FlagSet = append(res.FlagSet, flag_pin_set) + res.FlagReset = append(res.FlagReset, flag_pin_mismatch) } else { - res.FlagSet = []uint32{flag_pin_mismatch} + res.FlagSet = append(res.FlagSet, flag_pin_mismatch) return res, nil } + // save the hashed PIN as the new account PIN err = store.WriteEntry(ctx, sessionId, storedb.DATA_ACCOUNT_PIN, []byte(hashedTemporaryPin)) if err != nil { logg.ErrorCtxf(ctx, "failed to write DATA_ACCOUNT_PIN entry with", "key", storedb.DATA_ACCOUNT_PIN, "value", hashedTemporaryPin, "error", err) -- 2.45.2 From 26353bdf6e632ef8013f515ce8f117f52c5c90a5 Mon Sep 17 00:00:00 2001 From: alfred-mk Date: Wed, 9 Apr 2025 17:34:24 +0300 Subject: [PATCH 16/30] add a space --- services/registration/invalid_pin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/registration/invalid_pin b/services/registration/invalid_pin index 607c151..a5031af 100644 --- a/services/registration/invalid_pin +++ b/services/registration/invalid_pin @@ -1 +1 @@ -The PIN you entered is invalid.The PIN must be a 4 digit number. \ No newline at end of file +The PIN you entered is invalid. The PIN must be a 4 digit number. \ No newline at end of file -- 2.45.2 From 834f2ce629af708311e89e7bb0b9742a1163fe59 Mon Sep 17 00:00:00 2001 From: alfred-mk Date: Wed, 9 Apr 2025 17:39:41 +0300 Subject: [PATCH 17/30] remove code related to admins resetting a user's actual PIN --- handlers/application/menuhandler.go | 81 --------- handlers/application/menuhandler_test.go | 167 ------------------ handlers/local.go | 2 - services/registration/confirm_others_new_pin | 1 - .../registration/confirm_others_new_pin.vis | 14 -- .../registration/confirm_others_new_pin_swa | 1 - services/registration/enter_others_new_pin | 1 - .../registration/enter_others_new_pin.vis | 9 - .../registration/enter_others_new_pin_swa | 1 - services/registration/invalid_others_pin | 1 - services/registration/invalid_others_pin.vis | 5 - services/registration/others_pin_mismatch | 1 - services/registration/others_pin_mismatch.vis | 6 - services/registration/others_pin_mismatch_swa | 1 - 14 files changed, 291 deletions(-) delete mode 100644 services/registration/confirm_others_new_pin delete mode 100644 services/registration/confirm_others_new_pin.vis delete mode 100644 services/registration/confirm_others_new_pin_swa delete mode 100644 services/registration/enter_others_new_pin delete mode 100644 services/registration/enter_others_new_pin.vis delete mode 100644 services/registration/enter_others_new_pin_swa delete mode 100644 services/registration/invalid_others_pin delete mode 100644 services/registration/invalid_others_pin.vis delete mode 100644 services/registration/others_pin_mismatch delete mode 100644 services/registration/others_pin_mismatch.vis delete mode 100644 services/registration/others_pin_mismatch_swa diff --git a/handlers/application/menuhandler.go b/handlers/application/menuhandler.go index 69a681d..bf0a42e 100644 --- a/handlers/application/menuhandler.go +++ b/handlers/application/menuhandler.go @@ -415,87 +415,6 @@ func (h *MenuHandlers) SaveTemporaryPin(ctx context.Context, sym string, input [ return res, nil } -// SaveOthersTemporaryPin allows authorized users to set temporary PINs for blocked numbers. -func (h *MenuHandlers) SaveOthersTemporaryPin(ctx context.Context, sym string, input []byte) (resource.Result, error) { - var res resource.Result - var err error - - store := h.userdataStore - sessionId, ok := ctx.Value("SessionId").(string) - if !ok { - return res, fmt.Errorf("missing session") - } - - temporaryPin := string(input) - - // Validate that the input is a 4-digit number. - if !pin.IsValidPIN(temporaryPin) { - return res, nil - } - - // Retrieve the blocked number associated with this session - blockedNumber, err := store.ReadEntry(ctx, sessionId, storedb.DATA_BLOCKED_NUMBER) - if err != nil { - logg.ErrorCtxf(ctx, "failed to read blockedNumber entry with", "key", storedb.DATA_BLOCKED_NUMBER, "error", err) - return res, err - } - - // Hash the temporary PIN - hashedPIN, err := pin.HashPIN(string(temporaryPin)) - if err != nil { - logg.ErrorCtxf(ctx, "failed to hash temporaryPin", "error", err) - return res, err - } - - // Save the hashed temporary PIN for that blocked number - err = store.WriteEntry(ctx, string(blockedNumber), storedb.DATA_TEMPORARY_VALUE, []byte(hashedPIN)) - if err != nil { - logg.ErrorCtxf(ctx, "failed to write hashed temporaryPin entry with", "key", storedb.DATA_TEMPORARY_VALUE, "value", temporaryPin, "error", err) - return res, err - } - - return res, nil -} - -// CheckBlockedNumPinMisMatch checks if the provided PIN matches a temporary PIN stored for a blocked number. -func (h *MenuHandlers) CheckBlockedNumPinMisMatch(ctx context.Context, sym string, input []byte) (resource.Result, error) { - res := resource.Result{} - flag_pin_mismatch, _ := h.flagManager.GetFlag("flag_pin_mismatch") - sessionId, ok := ctx.Value("SessionId").(string) - if !ok { - return res, fmt.Errorf("missing session") - } - if string(input) == "0" { - res.FlagReset = append(res.FlagReset, flag_pin_mismatch) - return res, nil - } - - // Get blocked number from storage. - store := h.userdataStore - blockedNumber, err := store.ReadEntry(ctx, sessionId, storedb.DATA_BLOCKED_NUMBER) - if err != nil { - logg.ErrorCtxf(ctx, "failed to read blockedNumber entry with", "key", storedb.DATA_BLOCKED_NUMBER, "error", err) - return res, err - } - // Get Hashed temporary PIN for the blocked number. - hashedTemporaryPin, err := store.ReadEntry(ctx, string(blockedNumber), storedb.DATA_TEMPORARY_VALUE) - if err != nil { - logg.ErrorCtxf(ctx, "failed to read hashedTemporaryPin entry with", "key", storedb.DATA_TEMPORARY_VALUE, "error", err) - return res, err - } - if len(hashedTemporaryPin) == 0 { - logg.ErrorCtxf(ctx, "hashedTemporaryPin is empty", "key", storedb.DATA_TEMPORARY_VALUE) - return res, fmt.Errorf("Data error encountered") - } - - if pin.VerifyPIN(string(hashedTemporaryPin), string(input)) { - res.FlagReset = append(res.FlagReset, flag_pin_mismatch) - } else { - res.FlagSet = append(res.FlagSet, flag_pin_mismatch) - } - return res, nil -} - // ResetInvalidPIN resets the invalid PIN flag func (h *MenuHandlers) ResetInvalidPIN(ctx context.Context, sym string, input []byte) (resource.Result, error) { var res resource.Result diff --git a/handlers/application/menuhandler_test.go b/handlers/application/menuhandler_test.go index 6c5f5a2..ddaf88a 100644 --- a/handlers/application/menuhandler_test.go +++ b/handlers/application/menuhandler_test.go @@ -2906,173 +2906,6 @@ func TestValidateBlockedNumber(t *testing.T) { } } -func TestSaveOthersTemporaryPin(t *testing.T) { - sessionId := "session123" - blockedNumber := "+254712345678" - testPin := "1234" - - ctx, userStore := InitializeTestStore(t) - ctx = context.WithValue(ctx, "SessionId", sessionId) - - h := &MenuHandlers{ - userdataStore: userStore, - } - - tests := []struct { - name string - sessionId string - blockedNumber string - testPin string - setup func() error // Setup function for each test case - expectedError bool - verifyResult func(t *testing.T) // Function to verify the result - }{ - { - name: "Missing Session ID", - sessionId: "", // Empty session ID - blockedNumber: blockedNumber, - testPin: testPin, - setup: nil, - expectedError: true, - verifyResult: nil, - }, - { - name: "Failed to Read Blocked Number", - sessionId: sessionId, - blockedNumber: blockedNumber, - testPin: testPin, - setup: func() error { - // Do not write the blocked number to simulate a read failure - return nil - }, - expectedError: true, - verifyResult: nil, - }, - - { - name: "Successfully save hashed PIN", - sessionId: sessionId, - blockedNumber: blockedNumber, - testPin: testPin, - setup: func() error { - // Write the blocked number to the store - return userStore.WriteEntry(ctx, sessionId, storedb.DATA_BLOCKED_NUMBER, []byte(blockedNumber)) - }, - expectedError: false, - verifyResult: func(t *testing.T) { - // Read the stored hashed PIN - othersHashedPin, err := userStore.ReadEntry(ctx, blockedNumber, storedb.DATA_TEMPORARY_VALUE) - if err != nil { - t.Fatal(err) - } - - // Verify that the stored hashed PIN matches the original PIN - if !pin.VerifyPIN(string(othersHashedPin), testPin) { - t.Fatal("stored hashed PIN does not match the original PIN") - } - }, - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - // Set up the context with the session ID - ctx := context.WithValue(context.Background(), "SessionId", tt.sessionId) - - // Run the setup function if provided - if tt.setup != nil { - err := tt.setup() - if err != nil { - t.Fatal(err) - } - } - - // Call the function under test - _, err := h.SaveOthersTemporaryPin(ctx, "save_others_temporary_pin", []byte(tt.testPin)) - - // Assert the error - if tt.expectedError { - assert.Error(t, err) - } else { - assert.NoError(t, err) - } - - // Verify the result if a verification function is provided - if tt.verifyResult != nil { - tt.verifyResult(t) - } - }) - } -} - -func TestCheckBlockedNumPinMisMatch(t *testing.T) { - sessionId := "session123" - blockedNumber := "+254712345678" - testPin := "1234" - mockState := state.NewState(128) - - ctx, userStore := InitializeTestStore(t) - ctx = context.WithValue(ctx, "SessionId", sessionId) - - hashedPIN, err := pin.HashPIN(testPin) - if err != nil { - logg.ErrorCtxf(ctx, "failed to hash testPin", "error", err) - t.Fatal(err) - } - - fm, err := NewFlagManager(flagsPath) - if err != nil { - t.Fatal(err) - } - flag_pin_mismatch, _ := fm.GetFlag("flag_pin_mismatch") - - h := &MenuHandlers{ - userdataStore: userStore, - st: mockState, - flagManager: fm, - } - - // Write initial data to the store - err = userStore.WriteEntry(ctx, sessionId, storedb.DATA_BLOCKED_NUMBER, []byte(blockedNumber)) - if err != nil { - t.Fatal(err) - } - err = userStore.WriteEntry(ctx, blockedNumber, storedb.DATA_TEMPORARY_VALUE, []byte(hashedPIN)) - if err != nil { - t.Fatal(err) - } - - tests := []struct { - name string - input []byte - expectedResult resource.Result - }{ - { - name: "Successful PIN match", - input: []byte(testPin), - expectedResult: resource.Result{ - FlagReset: []uint32{flag_pin_mismatch}, - }, - }, - { - name: "PIN mismatch", - input: []byte("1345"), - expectedResult: resource.Result{ - FlagSet: []uint32{flag_pin_mismatch}, - }, - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - res, err := h.CheckBlockedNumPinMisMatch(ctx, "sym", tt.input) - - assert.NoError(t, err) - assert.Equal(t, tt.expectedResult, res) - }) - } -} - func TestGetCurrentProfileInfo(t *testing.T) { sessionId := "session123" ctx, store := InitializeTestStore(t) diff --git a/handlers/local.go b/handlers/local.go index 43b0bb5..507a79c 100644 --- a/handlers/local.go +++ b/handlers/local.go @@ -110,12 +110,10 @@ func (ls *LocalHandlerService) GetHandler(accountService remote.AccountService) ls.DbRs.AddLocalFunc("set_voucher", appHandlers.SetVoucher) ls.DbRs.AddLocalFunc("get_voucher_details", appHandlers.GetVoucherDetails) ls.DbRs.AddLocalFunc("reset_valid_pin", appHandlers.ResetValidPin) - ls.DbRs.AddLocalFunc("check_pin_mismatch", appHandlers.CheckBlockedNumPinMisMatch) ls.DbRs.AddLocalFunc("validate_blocked_number", appHandlers.ValidateBlockedNumber) ls.DbRs.AddLocalFunc("retrieve_blocked_number", appHandlers.RetrieveBlockedNumber) ls.DbRs.AddLocalFunc("reset_unregistered_number", appHandlers.ResetUnregisteredNumber) ls.DbRs.AddLocalFunc("reset_others_pin", appHandlers.ResetOthersPin) - ls.DbRs.AddLocalFunc("save_others_temporary_pin", appHandlers.SaveOthersTemporaryPin) ls.DbRs.AddLocalFunc("get_current_profile_info", appHandlers.GetCurrentProfileInfo) ls.DbRs.AddLocalFunc("check_transactions", appHandlers.CheckTransactions) ls.DbRs.AddLocalFunc("get_transactions", appHandlers.GetTransactionsList) diff --git a/services/registration/confirm_others_new_pin b/services/registration/confirm_others_new_pin deleted file mode 100644 index 720778b..0000000 --- a/services/registration/confirm_others_new_pin +++ /dev/null @@ -1 +0,0 @@ -Please confirm new PIN for: {{.retrieve_blocked_number}} \ No newline at end of file diff --git a/services/registration/confirm_others_new_pin.vis b/services/registration/confirm_others_new_pin.vis deleted file mode 100644 index 50dfb19..0000000 --- a/services/registration/confirm_others_new_pin.vis +++ /dev/null @@ -1,14 +0,0 @@ -CATCH incorrect_pin flag_incorrect_pin 1 -RELOAD retrieve_blocked_number -MAP retrieve_blocked_number -CATCH invalid_others_pin flag_valid_pin 0 -CATCH pin_reset_result flag_account_authorized 1 -LOAD save_others_temporary_pin 6 -RELOAD save_others_temporary_pin -MOUT back 0 -HALT -INCMP _ 0 -LOAD check_pin_mismatch 6 -RELOAD check_pin_mismatch -CATCH others_pin_mismatch flag_pin_mismatch 1 -INCMP pin_entry * diff --git a/services/registration/confirm_others_new_pin_swa b/services/registration/confirm_others_new_pin_swa deleted file mode 100644 index f0b09c8..0000000 --- a/services/registration/confirm_others_new_pin_swa +++ /dev/null @@ -1 +0,0 @@ -Tafadhali thibitisha PIN mpya ya: {{.retrieve_blocked_number}} \ No newline at end of file diff --git a/services/registration/enter_others_new_pin b/services/registration/enter_others_new_pin deleted file mode 100644 index 52ae664..0000000 --- a/services/registration/enter_others_new_pin +++ /dev/null @@ -1 +0,0 @@ -Please enter new PIN for: {{.retrieve_blocked_number}} \ No newline at end of file diff --git a/services/registration/enter_others_new_pin.vis b/services/registration/enter_others_new_pin.vis deleted file mode 100644 index 3f8a5c6..0000000 --- a/services/registration/enter_others_new_pin.vis +++ /dev/null @@ -1,9 +0,0 @@ -LOAD retrieve_blocked_number 0 -RELOAD retrieve_blocked_number -MAP retrieve_blocked_number -MOUT back 0 -HALT -LOAD verify_new_pin 6 -RELOAD verify_new_pin -INCMP _ 0 -INCMP * confirm_others_new_pin diff --git a/services/registration/enter_others_new_pin_swa b/services/registration/enter_others_new_pin_swa deleted file mode 100644 index 77ec2f3..0000000 --- a/services/registration/enter_others_new_pin_swa +++ /dev/null @@ -1 +0,0 @@ -Tafadhali weka PIN mpya ya: {{.retrieve_blocked_number}} \ No newline at end of file diff --git a/services/registration/invalid_others_pin b/services/registration/invalid_others_pin deleted file mode 100644 index acdf45f..0000000 --- a/services/registration/invalid_others_pin +++ /dev/null @@ -1 +0,0 @@ -The PIN you have entered is invalid.Please try a 4 digit number instead. \ No newline at end of file diff --git a/services/registration/invalid_others_pin.vis b/services/registration/invalid_others_pin.vis deleted file mode 100644 index d218e6d..0000000 --- a/services/registration/invalid_others_pin.vis +++ /dev/null @@ -1,5 +0,0 @@ -MOUT retry 1 -MOUT quit 9 -HALT -INCMP enter_others_new_pin 1 -INCMP quit 9 diff --git a/services/registration/others_pin_mismatch b/services/registration/others_pin_mismatch deleted file mode 100644 index deb9fe5..0000000 --- a/services/registration/others_pin_mismatch +++ /dev/null @@ -1 +0,0 @@ -The PIN you have entered is not a match diff --git a/services/registration/others_pin_mismatch.vis b/services/registration/others_pin_mismatch.vis deleted file mode 100644 index b2421aa..0000000 --- a/services/registration/others_pin_mismatch.vis +++ /dev/null @@ -1,6 +0,0 @@ -MOUT retry 1 -MOUT quit 9 -HALT -INCMP _ 1 -INCMP quit 9 -INCMP . * diff --git a/services/registration/others_pin_mismatch_swa b/services/registration/others_pin_mismatch_swa deleted file mode 100644 index 5787790..0000000 --- a/services/registration/others_pin_mismatch_swa +++ /dev/null @@ -1 +0,0 @@ -PIN uliyoweka hailingani.Jaribu tena. \ No newline at end of file -- 2.45.2 From 35a2732fe2dd60a8d825d03d8cfa1983fa8d90d9 Mon Sep 17 00:00:00 2001 From: alfred-mk Date: Wed, 9 Apr 2025 17:52:18 +0300 Subject: [PATCH 18/30] updated the menu flow for the admin reset others PIN in test --- menutraversal_test/group_test.json | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) diff --git a/menutraversal_test/group_test.json b/menutraversal_test/group_test.json index b3177a9..c5dc3a2 100644 --- a/menutraversal_test/group_test.json +++ b/menutraversal_test/group_test.json @@ -202,23 +202,7 @@ }, { "input": "0700000000", - "expectedContent": "Please enter new PIN for: {secondary_session_id}\n0:Back" - }, - { - "input": "11111", - "expectedContent": "The PIN you have entered is invalid.Please try a 4 digit number instead.\n1:Retry\n9:Quit" - }, - { - "input": "1", - "expectedContent": "Please enter new PIN for: {secondary_session_id}\n0:Back" - }, - { - "input": "1111", - "expectedContent": "Please confirm new PIN for: {secondary_session_id}\n0:Back" - }, - { - "input": "1111", - "expectedContent": "Please enter your PIN:" + "expectedContent": "{secondary_session_id} will get a PIN reset request.\nPlease enter your PIN to confirm:\n0:Back\n9:Quit" }, { "input": "1234", -- 2.45.2 From a27d44e56116916ef20bd02e480980f1cd8bc2a7 Mon Sep 17 00:00:00 2001 From: alfred-mk Date: Wed, 9 Apr 2025 17:52:58 +0300 Subject: [PATCH 19/30] updated the expected content for the alias in view profile --- menutraversal_test/group_test.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/menutraversal_test/group_test.json b/menutraversal_test/group_test.json index c5dc3a2..38c382e 100644 --- a/menutraversal_test/group_test.json +++ b/menutraversal_test/group_test.json @@ -596,7 +596,7 @@ }, { "input": "1234", - "expectedContent": "My profile:\nName: foo bar\nGender: male\nAge: 80\nLocation: Kilifi\nYou provide: Bananas\nYour alias: \n\n0:Back\n9:Quit" + "expectedContent": "My profile:\nName: foo bar\nGender: male\nAge: 80\nLocation: Kilifi\nYou provide: Bananas\nYour alias: Not Provided\n\n0:Back\n9:Quit" }, { "input": "0", -- 2.45.2 From 1076a9578e96388ef89e78cbbf94f321155e1528 Mon Sep 17 00:00:00 2001 From: alfred-mk Date: Wed, 9 Apr 2025 17:57:54 +0300 Subject: [PATCH 20/30] use the correct flag_invalid_pin in TestSaveTemporaryPin --- handlers/application/menuhandler_test.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/handlers/application/menuhandler_test.go b/handlers/application/menuhandler_test.go index ddaf88a..893ca42 100644 --- a/handlers/application/menuhandler_test.go +++ b/handlers/application/menuhandler_test.go @@ -566,7 +566,7 @@ func TestSaveTemporaryPin(t *testing.T) { log.Fatal(err) } - flag_incorrect_pin, _ := fm.GetFlag("flag_incorrect_pin") + flag_invalid_pin, _ := fm.GetFlag("flag_invalid_pin") // Create the MenuHandlers instance with the mock flag manager h := &MenuHandlers{ @@ -584,14 +584,14 @@ func TestSaveTemporaryPin(t *testing.T) { name: "Valid Pin entry", input: []byte("1234"), expectedResult: resource.Result{ - FlagReset: []uint32{flag_incorrect_pin}, + FlagReset: []uint32{flag_invalid_pin}, }, }, { name: "Invalid Pin entry", input: []byte("12343"), expectedResult: resource.Result{ - FlagSet: []uint32{flag_incorrect_pin}, + FlagSet: []uint32{flag_invalid_pin}, }, }, } -- 2.45.2 From 4ef8c47f8b829b3b9c53986ae8172262682e0d84 Mon Sep 17 00:00:00 2001 From: alfred-mk Date: Wed, 9 Apr 2025 18:01:40 +0300 Subject: [PATCH 21/30] update the reset flags in TestConfirmPinChange --- handlers/application/menuhandler_test.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/handlers/application/menuhandler_test.go b/handlers/application/menuhandler_test.go index 893ca42..83aa6be 100644 --- a/handlers/application/menuhandler_test.go +++ b/handlers/application/menuhandler_test.go @@ -1889,7 +1889,7 @@ func TestVerifyNewPin(t *testing.T) { } } -func TestConfirmPin(t *testing.T) { +func TestConfirmPinChange(t *testing.T) { sessionId := "session123" mockState := state.NewState(16) @@ -1898,6 +1898,8 @@ func TestConfirmPin(t *testing.T) { fm, _ := NewFlagManager(flagsPath) flag_pin_mismatch, _ := fm.GetFlag("flag_pin_mismatch") + flag_account_pin_reset, _ := fm.GetFlag("flag_account_pin_reset") + mockAccountService := new(mocks.MockAccountService) h := &MenuHandlers{ userdataStore: store, @@ -1917,7 +1919,7 @@ func TestConfirmPin(t *testing.T) { input: []byte("1234"), temporarypin: "1234", expectedResult: resource.Result{ - FlagReset: []uint32{flag_pin_mismatch}, + FlagReset: []uint32{flag_pin_mismatch, flag_account_pin_reset}, }, }, } -- 2.45.2 From b89abf3487aa14d55bbd900b481726e41b60bbfd Mon Sep 17 00:00:00 2001 From: alfred-mk Date: Wed, 9 Apr 2025 18:06:24 +0300 Subject: [PATCH 22/30] update the reset flags in TestCheckBlockedStatus --- handlers/application/menuhandler_test.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/handlers/application/menuhandler_test.go b/handlers/application/menuhandler_test.go index 83aa6be..8547401 100644 --- a/handlers/application/menuhandler_test.go +++ b/handlers/application/menuhandler_test.go @@ -2355,10 +2355,8 @@ func TestCheckBlockedStatus(t *testing.T) { if err != nil { t.Logf(err.Error()) } - flag_account_blocked, err := fm.GetFlag("flag_account_blocked") - if err != nil { - t.Logf(err.Error()) - } + flag_account_blocked, _ := fm.GetFlag("flag_account_blocked") + flag_account_pin_reset, _ := fm.GetFlag("flag_account_pin_reset") h := &MenuHandlers{ userdataStore: store, @@ -2373,13 +2371,15 @@ func TestCheckBlockedStatus(t *testing.T) { { name: "Currently blocked account", currentWrongPinAttempts: "4", - expectedResult: resource.Result{}, + expectedResult: resource.Result{ + FlagReset: []uint32{flag_account_pin_reset}, + }, }, { name: "Account with 0 wrong PIN attempts", currentWrongPinAttempts: "0", expectedResult: resource.Result{ - FlagReset: []uint32{flag_account_blocked}, + FlagReset: []uint32{flag_account_pin_reset, flag_account_blocked}, }, }, } -- 2.45.2 From 69ae494b2c4daaafa234dce458bb0c6a2f5410ab Mon Sep 17 00:00:00 2001 From: alfred-mk Date: Wed, 9 Apr 2025 18:10:51 +0300 Subject: [PATCH 23/30] update the order for the INCMP statement --- services/registration/confirm_pin_change.vis | 2 +- services/registration/new_pin.vis | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/services/registration/confirm_pin_change.vis b/services/registration/confirm_pin_change.vis index 6e50c11..2077d23 100644 --- a/services/registration/confirm_pin_change.vis +++ b/services/registration/confirm_pin_change.vis @@ -4,4 +4,4 @@ HALT INCMP _ 0 RELOAD confirm_pin_change CATCH pin_mismatch flag_pin_mismatch 1 -INCMP * pin_reset_success +INCMP pin_reset_success * \ No newline at end of file diff --git a/services/registration/new_pin.vis b/services/registration/new_pin.vis index 56705d7..59e71e4 100644 --- a/services/registration/new_pin.vis +++ b/services/registration/new_pin.vis @@ -4,4 +4,4 @@ INCMP _ 0 RELOAD save_temporary_pin RELOAD verify_new_pin CATCH invalid_pin flag_valid_pin 0 -INCMP * confirm_pin_change +INCMP confirm_pin_change * -- 2.45.2 From 6070792fe4071762d8561ee9bd3a96c1767b91a7 Mon Sep 17 00:00:00 2001 From: alfred-mk Date: Wed, 9 Apr 2025 18:14:10 +0300 Subject: [PATCH 24/30] cleanup: remove extra space --- services/registration/amount.vis | 2 +- services/registration/community_balance.vis | 2 +- services/registration/confirm_new_alias.vis | 2 +- services/registration/my_balance.vis | 2 +- services/registration/root.vis | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/services/registration/amount.vis b/services/registration/amount.vis index 10d4430..c50691f 100644 --- a/services/registration/amount.vis +++ b/services/registration/amount.vis @@ -6,7 +6,7 @@ MOUT back 0 HALT LOAD validate_amount 64 RELOAD validate_amount -CATCH api_failure flag_api_call_error 1 +CATCH api_failure flag_api_call_error 1 CATCH invalid_amount flag_invalid_amount 1 INCMP _ 0 LOAD get_recipient 0 diff --git a/services/registration/community_balance.vis b/services/registration/community_balance.vis index fad90cc..a748685 100644 --- a/services/registration/community_balance.vis +++ b/services/registration/community_balance.vis @@ -1,6 +1,6 @@ LOAD reset_incorrect 6 LOAD fetch_community_balance 0 -CATCH api_failure flag_api_call_error 1 +CATCH api_failure flag_api_call_error 1 MAP fetch_community_balance CATCH incorrect_pin flag_incorrect_pin 1 CATCH pin_entry flag_account_authorized 0 diff --git a/services/registration/confirm_new_alias.vis b/services/registration/confirm_new_alias.vis index ad56fe0..ea79412 100644 --- a/services/registration/confirm_new_alias.vis +++ b/services/registration/confirm_new_alias.vis @@ -8,5 +8,5 @@ HALT INCMP _ 0 RELOAD authorize_account CATCH incorrect_pin flag_incorrect_pin 1 -CATCH invalid_pin flag_invalid_pin 1 +CATCH invalid_pin flag_invalid_pin 1 CATCH update_alias flag_allow_update 1 diff --git a/services/registration/my_balance.vis b/services/registration/my_balance.vis index b6094c0..166d18f 100644 --- a/services/registration/my_balance.vis +++ b/services/registration/my_balance.vis @@ -1,6 +1,6 @@ LOAD reset_incorrect 6 LOAD check_balance 0 -CATCH api_failure flag_api_call_error 1 +CATCH api_failure flag_api_call_error 1 MAP check_balance CATCH incorrect_pin flag_incorrect_pin 1 CATCH pin_entry flag_account_authorized 0 diff --git a/services/registration/root.vis b/services/registration/root.vis index ec5b54e..035db83 100644 --- a/services/registration/root.vis +++ b/services/registration/root.vis @@ -9,7 +9,7 @@ CATCH terms flag_account_created 0 CATCH create_pin flag_pin_set 0 LOAD check_account_status 0 RELOAD check_account_status -CATCH api_failure flag_api_call_error 1 +CATCH api_failure flag_api_call_error 1 CATCH account_pending flag_account_pending 1 CATCH main flag_account_success 1 HALT -- 2.45.2 From 0337c66f968328271d533628410787aaa763f681 Mon Sep 17 00:00:00 2001 From: alfred-mk Date: Wed, 9 Apr 2025 18:17:59 +0300 Subject: [PATCH 25/30] cleanup: remove extra space in all .vis files --- services/registration/my_account_alias.vis | 2 +- services/registration/old_pin.vis | 2 +- services/registration/pin_reset_result.vis | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/services/registration/my_account_alias.vis b/services/registration/my_account_alias.vis index 506f432..b2c48f8 100644 --- a/services/registration/my_account_alias.vis +++ b/services/registration/my_account_alias.vis @@ -5,4 +5,4 @@ HALT INCMP _ 0 LOAD request_custom_alias 0 RELOAD request_custom_alias -INCMP confirm_new_alias * +INCMP confirm_new_alias * diff --git a/services/registration/old_pin.vis b/services/registration/old_pin.vis index de66e2c..ccc2928 100644 --- a/services/registration/old_pin.vis +++ b/services/registration/old_pin.vis @@ -4,5 +4,5 @@ HALT INCMP _ 0 RELOAD authorize_account CATCH incorrect_pin flag_incorrect_pin 1 -CATCH invalid_pin flag_invalid_pin 1 +CATCH invalid_pin flag_invalid_pin 1 INCMP new_pin * diff --git a/services/registration/pin_reset_result.vis b/services/registration/pin_reset_result.vis index a676198..3412473 100644 --- a/services/registration/pin_reset_result.vis +++ b/services/registration/pin_reset_result.vis @@ -6,4 +6,4 @@ MOUT back 0 MOUT quit 9 HALT INCMP ^ 0 -INCMP quit 9 +INCMP quit 9 -- 2.45.2 From d680387ef1e188f02fb2ec5fcd26c154436cf3be Mon Sep 17 00:00:00 2001 From: alfred-mk Date: Wed, 9 Apr 2025 19:21:35 +0300 Subject: [PATCH 26/30] use the same check for flag_invalid_pin to move to the invalid_pin node --- services/registration/new_pin.vis | 2 +- services/registration/self_reset_pin.vis | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/services/registration/new_pin.vis b/services/registration/new_pin.vis index 59e71e4..54f23ec 100644 --- a/services/registration/new_pin.vis +++ b/services/registration/new_pin.vis @@ -3,5 +3,5 @@ HALT INCMP _ 0 RELOAD save_temporary_pin RELOAD verify_new_pin -CATCH invalid_pin flag_valid_pin 0 +CATCH invalid_pin flag_invalid_pin 1 INCMP confirm_pin_change * diff --git a/services/registration/self_reset_pin.vis b/services/registration/self_reset_pin.vis index 3439fcd..bb0adeb 100644 --- a/services/registration/self_reset_pin.vis +++ b/services/registration/self_reset_pin.vis @@ -4,5 +4,5 @@ LOAD save_temporary_pin 1 RELOAD save_temporary_pin LOAD verify_new_pin 2 RELOAD verify_new_pin -CATCH invalid_pin flag_valid_pin 0 +CATCH invalid_pin flag_invalid_pin 1 INCMP confirm_self_pin_reset * -- 2.45.2 From aec1f4c4c1af518a2088f5c2e1b306cd57eeb5c9 Mon Sep 17 00:00:00 2001 From: alfred-mk Date: Wed, 9 Apr 2025 19:23:46 +0300 Subject: [PATCH 27/30] use a single confirm_pin_change node --- services/registration/confirm_pin_change.vis | 4 ++-- services/registration/confirm_self_pin_reset | 1 - services/registration/confirm_self_pin_reset.vis | 7 ------- services/registration/confirm_self_pin_reset_swa | 1 - services/registration/self_reset_pin.vis | 2 +- 5 files changed, 3 insertions(+), 12 deletions(-) delete mode 100644 services/registration/confirm_self_pin_reset delete mode 100644 services/registration/confirm_self_pin_reset.vis delete mode 100644 services/registration/confirm_self_pin_reset_swa diff --git a/services/registration/confirm_pin_change.vis b/services/registration/confirm_pin_change.vis index 2077d23..419662b 100644 --- a/services/registration/confirm_pin_change.vis +++ b/services/registration/confirm_pin_change.vis @@ -1,7 +1,7 @@ -LOAD confirm_pin_change 0 MOUT back 0 HALT INCMP _ 0 +LOAD confirm_pin_change 0 RELOAD confirm_pin_change CATCH pin_mismatch flag_pin_mismatch 1 -INCMP pin_reset_success * \ No newline at end of file +INCMP pin_reset_success * diff --git a/services/registration/confirm_self_pin_reset b/services/registration/confirm_self_pin_reset deleted file mode 100644 index 2e1b83e..0000000 --- a/services/registration/confirm_self_pin_reset +++ /dev/null @@ -1 +0,0 @@ -Confirm your new PIN: \ No newline at end of file diff --git a/services/registration/confirm_self_pin_reset.vis b/services/registration/confirm_self_pin_reset.vis deleted file mode 100644 index 419662b..0000000 --- a/services/registration/confirm_self_pin_reset.vis +++ /dev/null @@ -1,7 +0,0 @@ -MOUT back 0 -HALT -INCMP _ 0 -LOAD confirm_pin_change 0 -RELOAD confirm_pin_change -CATCH pin_mismatch flag_pin_mismatch 1 -INCMP pin_reset_success * diff --git a/services/registration/confirm_self_pin_reset_swa b/services/registration/confirm_self_pin_reset_swa deleted file mode 100644 index e407fec..0000000 --- a/services/registration/confirm_self_pin_reset_swa +++ /dev/null @@ -1 +0,0 @@ -Thibitisha PIN yako mpya: \ No newline at end of file diff --git a/services/registration/self_reset_pin.vis b/services/registration/self_reset_pin.vis index bb0adeb..5fa328f 100644 --- a/services/registration/self_reset_pin.vis +++ b/services/registration/self_reset_pin.vis @@ -5,4 +5,4 @@ RELOAD save_temporary_pin LOAD verify_new_pin 2 RELOAD verify_new_pin CATCH invalid_pin flag_invalid_pin 1 -INCMP confirm_self_pin_reset * +INCMP confirm_pin_change * -- 2.45.2 From 7d9c3b66a9eae203b2b354aca4747decd19008bc Mon Sep 17 00:00:00 2001 From: alfred-mk Date: Wed, 9 Apr 2025 19:29:40 +0300 Subject: [PATCH 28/30] remove unused function reset_valid_pin --- handlers/application/menuhandler.go | 8 -------- handlers/application/menuhandler_test.go | 24 ------------------------ handlers/local.go | 1 - 3 files changed, 33 deletions(-) diff --git a/handlers/application/menuhandler.go b/handlers/application/menuhandler.go index bf0a42e..19cc266 100644 --- a/handlers/application/menuhandler.go +++ b/handlers/application/menuhandler.go @@ -265,14 +265,6 @@ func (h *MenuHandlers) CheckAccountCreated(ctx context.Context, sym string, inpu return res, nil } -// ResetValidPin resets the flag_valid_pin flag. -func (h *MenuHandlers) ResetValidPin(ctx context.Context, sym string, input []byte) (resource.Result, error) { - var res resource.Result - flag_valid_pin, _ := h.flagManager.GetFlag("flag_valid_pin") - res.FlagReset = append(res.FlagReset, flag_valid_pin) - return res, nil -} - // CheckBlockedStatus: // 1. Checks whether the DATA_SELF_PIN_RESET is 1 and sets the flag_account_pin_reset // 2. resets the account blocked flag if the PIN attempts have been reset by an admin. diff --git a/handlers/application/menuhandler_test.go b/handlers/application/menuhandler_test.go index 8547401..d903efc 100644 --- a/handlers/application/menuhandler_test.go +++ b/handlers/application/menuhandler_test.go @@ -3064,30 +3064,6 @@ func TestResetOthersPin(t *testing.T) { assert.NoError(t, err) } -func TestResetValidPin(t *testing.T) { - ctx := context.Background() - - fm, err := NewFlagManager(flagsPath) - if err != nil { - t.Fatal(err) - } - flag_valid_pin, _ := fm.GetFlag("flag_valid_pin") - - expectedResult := resource.Result{ - FlagReset: []uint32{flag_valid_pin}, - } - - h := &MenuHandlers{ - flagManager: fm, - } - - res, err := h.ResetValidPin(ctx, "reset_valid_pin", []byte("")) - - assert.NoError(t, err) - - assert.Equal(t, expectedResult, res) -} - func TestResetUnregisteredNumber(t *testing.T) { ctx := context.Background() diff --git a/handlers/local.go b/handlers/local.go index 507a79c..46a887c 100644 --- a/handlers/local.go +++ b/handlers/local.go @@ -109,7 +109,6 @@ func (ls *LocalHandlerService) GetHandler(accountService remote.AccountService) ls.DbRs.AddLocalFunc("view_voucher", appHandlers.ViewVoucher) ls.DbRs.AddLocalFunc("set_voucher", appHandlers.SetVoucher) ls.DbRs.AddLocalFunc("get_voucher_details", appHandlers.GetVoucherDetails) - ls.DbRs.AddLocalFunc("reset_valid_pin", appHandlers.ResetValidPin) ls.DbRs.AddLocalFunc("validate_blocked_number", appHandlers.ValidateBlockedNumber) ls.DbRs.AddLocalFunc("retrieve_blocked_number", appHandlers.RetrieveBlockedNumber) ls.DbRs.AddLocalFunc("reset_unregistered_number", appHandlers.ResetUnregisteredNumber) -- 2.45.2 From 57a1645c03b00118d1d0dd1ed5d9220ddab482ba Mon Sep 17 00:00:00 2001 From: alfred-mk Date: Wed, 9 Apr 2025 23:40:03 +0300 Subject: [PATCH 29/30] remove the verify_new_pin functionality that managed the unused flag_valid_pin --- handlers/application/menuhandler.go | 23 ------------ handlers/application/menuhandler_test.go | 46 ------------------------ handlers/local.go | 1 - services/registration/new_pin.vis | 1 - services/registration/pin_management.vis | 1 - services/registration/self_reset_pin.vis | 2 -- 6 files changed, 74 deletions(-) diff --git a/handlers/application/menuhandler.go b/handlers/application/menuhandler.go index 19cc266..b1e8109 100644 --- a/handlers/application/menuhandler.go +++ b/handlers/application/menuhandler.go @@ -340,29 +340,6 @@ func (h *MenuHandlers) ResetIncorrectPin(ctx context.Context, sym string, input return res, nil } -// VerifyNewPin checks if a new PIN meets the required format criteria. -func (h *MenuHandlers) VerifyNewPin(ctx context.Context, sym string, input []byte) (resource.Result, error) { - res := resource.Result{} - _, ok := ctx.Value("SessionId").(string) - if !ok { - return res, fmt.Errorf("missing session") - } - flag_valid_pin, _ := h.flagManager.GetFlag("flag_valid_pin") - if string(input) != "0" { - pinInput := string(input) - // Validate that the PIN is a 4-digit number. - if pin.IsValidPIN(pinInput) { - res.FlagSet = append(res.FlagSet, flag_valid_pin) - } else { - res.FlagReset = append(res.FlagReset, flag_valid_pin) - } - } else { - res.FlagSet = append(res.FlagSet, flag_valid_pin) - } - - return res, nil -} - // SaveTemporaryPin saves the valid PIN input to the DATA_TEMPORARY_VALUE, // during the account creation process // and during the change PIN process. diff --git a/handlers/application/menuhandler_test.go b/handlers/application/menuhandler_test.go index d903efc..9a7bc75 100644 --- a/handlers/application/menuhandler_test.go +++ b/handlers/application/menuhandler_test.go @@ -1843,52 +1843,6 @@ func TestGetProfile(t *testing.T) { } } -func TestVerifyNewPin(t *testing.T) { - sessionId := "session123" - - fm, _ := NewFlagManager(flagsPath) - mockState := state.NewState(16) - - flag_valid_pin, _ := fm.GetFlag("flag_valid_pin") - mockAccountService := new(mocks.MockAccountService) - h := &MenuHandlers{ - flagManager: fm, - accountService: mockAccountService, - st: mockState, - } - ctx := context.WithValue(context.Background(), "SessionId", sessionId) - - tests := []struct { - name string - input []byte - expectedResult resource.Result - }{ - { - name: "Test with valid pin", - input: []byte("1234"), - expectedResult: resource.Result{ - FlagSet: []uint32{flag_valid_pin}, - }, - }, - { - name: "Test with invalid pin", - input: []byte("123"), - expectedResult: resource.Result{ - FlagReset: []uint32{flag_valid_pin}, - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - //Call the function under test - res, _ := h.VerifyNewPin(ctx, "verify_new_pin", tt.input) - - //Assert that the result set to content is what was expected - assert.Equal(t, res, tt.expectedResult, "Result should contain flags set according to user input") - }) - } -} - func TestConfirmPinChange(t *testing.T) { sessionId := "session123" diff --git a/handlers/local.go b/handlers/local.go index 46a887c..51f4208 100644 --- a/handlers/local.go +++ b/handlers/local.go @@ -99,7 +99,6 @@ func (ls *LocalHandlerService) GetHandler(accountService remote.AccountService) ls.DbRs.AddLocalFunc("verify_yob", appHandlers.VerifyYob) ls.DbRs.AddLocalFunc("reset_incorrect_date_format", appHandlers.ResetIncorrectYob) ls.DbRs.AddLocalFunc("initiate_transaction", appHandlers.InitiateTransaction) - ls.DbRs.AddLocalFunc("verify_new_pin", appHandlers.VerifyNewPin) ls.DbRs.AddLocalFunc("confirm_pin_change", appHandlers.ConfirmPinChange) ls.DbRs.AddLocalFunc("quit_with_help", appHandlers.QuitWithHelp) ls.DbRs.AddLocalFunc("fetch_community_balance", appHandlers.FetchCommunityBalance) diff --git a/services/registration/new_pin.vis b/services/registration/new_pin.vis index 54f23ec..79e95ea 100644 --- a/services/registration/new_pin.vis +++ b/services/registration/new_pin.vis @@ -2,6 +2,5 @@ MOUT back 0 HALT INCMP _ 0 RELOAD save_temporary_pin -RELOAD verify_new_pin CATCH invalid_pin flag_invalid_pin 1 INCMP confirm_pin_change * diff --git a/services/registration/pin_management.vis b/services/registration/pin_management.vis index ca54ee4..01bd236 100644 --- a/services/registration/pin_management.vis +++ b/services/registration/pin_management.vis @@ -1,7 +1,6 @@ LOAD set_back 6 LOAD authorize_account 16 LOAD reset_allow_update 4 -LOAD verify_new_pin 2 LOAD save_temporary_pin 1 LOAD reset_incorrect 0 LOAD reset_invalid_pin 6 diff --git a/services/registration/self_reset_pin.vis b/services/registration/self_reset_pin.vis index 5fa328f..401a4e0 100644 --- a/services/registration/self_reset_pin.vis +++ b/services/registration/self_reset_pin.vis @@ -2,7 +2,5 @@ LOAD reset_invalid_pin 6 HALT LOAD save_temporary_pin 1 RELOAD save_temporary_pin -LOAD verify_new_pin 2 -RELOAD verify_new_pin CATCH invalid_pin flag_invalid_pin 1 INCMP confirm_pin_change * -- 2.45.2 From 56cda36aa752d32653249fee5f0d2b088e838889 Mon Sep 17 00:00:00 2001 From: alfred-mk Date: Thu, 10 Apr 2025 13:55:00 +0300 Subject: [PATCH 30/30] updated the description of DATA_SELF_PIN_RESET --- store/db/db.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/store/db/db.go b/store/db/db.go index f7f7013..517d0a0 100644 --- a/store/db/db.go +++ b/store/db/db.go @@ -65,7 +65,7 @@ const ( DATA_ACCOUNT_ALIAS //currently suggested alias by the api awaiting user's confirmation as accepted account alias DATA_SUGGESTED_ALIAS - //currently suggested alias by the api awaiting user's confirmation as accepted account alias + //Key used to store a value of 1 for a user to reset their own PIN once they access the menu. DATA_SELF_PIN_RESET ) -- 2.45.2