From c51fd89ad53bf22477d2340ab3cb0642cf76d868 Mon Sep 17 00:00:00 2001 From: alfred-mk Date: Mon, 28 Jul 2025 16:14:32 +0300 Subject: [PATCH 1/2] set key flags (language and PIN) if the data exists and the flags are missing --- handlers/application/account_status.go | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/handlers/application/account_status.go b/handlers/application/account_status.go index 845107b..7714276 100644 --- a/handlers/application/account_status.go +++ b/handlers/application/account_status.go @@ -83,6 +83,7 @@ func (h *MenuHandlers) CheckAccountCreated(ctx context.Context, sym string, inpu // 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. +// 3. Sets key flags (language and PIN) if the data exists func (h *MenuHandlers) CheckBlockedStatus(ctx context.Context, sym string, input []byte) (resource.Result, error) { var res resource.Result store := h.userdataStore @@ -90,11 +91,30 @@ func (h *MenuHandlers) CheckBlockedStatus(ctx context.Context, sym string, input flag_account_blocked, _ := h.flagManager.GetFlag("flag_account_blocked") flag_account_pin_reset, _ := h.flagManager.GetFlag("flag_account_pin_reset") + flag_pin_set, _ := h.flagManager.GetFlag("flag_pin_set") + flag_language_set, _ := h.flagManager.GetFlag("flag_language_set") + pinFlagSet := h.st.MatchFlag(flag_pin_set, true) + languageFlagSet := h.st.MatchFlag(flag_language_set, true) + sessionId, ok := ctx.Value("SessionId").(string) if !ok { return res, fmt.Errorf("missing session") } + // only check the data if the flag isn't set + if !pinFlagSet { + accountPin, _ := store.ReadEntry(ctx, sessionId, storedb.DATA_ACCOUNT_PIN) + if len(accountPin) > 0 { + res.FlagSet = append(res.FlagSet, flag_pin_set) + } + } + if !languageFlagSet { + languageCode, _ := store.ReadEntry(ctx, sessionId, storedb.DATA_SELECTED_LANGUAGE_CODE) + if len(languageCode) > 0 { + res.FlagSet = append(res.FlagSet, flag_language_set) + } + } + res.FlagReset = append(res.FlagReset, flag_account_pin_reset) selfPinReset, err := store.ReadEntry(ctx, sessionId, storedb.DATA_SELF_PIN_RESET) From bd8631eb05463a5d3c8b4316523f7ab84f3423ca Mon Sep 17 00:00:00 2001 From: alfred-mk Date: Mon, 28 Jul 2025 16:15:21 +0300 Subject: [PATCH 2/2] update the TestCheckBlockedStatus to account for the udpated functionality --- handlers/application/account_status_test.go | 31 +++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/handlers/application/account_status_test.go b/handlers/application/account_status_test.go index fc7e09c..873e2df 100644 --- a/handlers/application/account_status_test.go +++ b/handlers/application/account_status_test.go @@ -5,6 +5,7 @@ import ( "testing" "git.defalsify.org/vise.git/resource" + "git.defalsify.org/vise.git/state" "git.grassecon.net/grassrootseconomics/sarafu-api/models" "git.grassecon.net/grassrootseconomics/sarafu-api/testutil/mocks" storedb "git.grassecon.net/grassrootseconomics/sarafu-vise/store/db" @@ -93,16 +94,24 @@ func TestCheckBlockedStatus(t *testing.T) { } flag_account_blocked, _ := fm.GetFlag("flag_account_blocked") flag_account_pin_reset, _ := fm.GetFlag("flag_account_pin_reset") + flag_pin_set, _ := fm.GetFlag("flag_pin_set") + flag_language_set, _ := fm.GetFlag("flag_language_set") + + // Set the flag in the State + mockState := state.NewState(128) h := &MenuHandlers{ userdataStore: store, flagManager: fm, + st: mockState, } tests := []struct { name string currentWrongPinAttempts string expectedResult resource.Result + languageSet bool + PinSet bool }{ { name: "Currently blocked account", @@ -118,6 +127,16 @@ func TestCheckBlockedStatus(t *testing.T) { FlagReset: []uint32{flag_account_pin_reset, flag_account_blocked}, }, }, + { + name: "Valid account with reset language and PIN flags", + currentWrongPinAttempts: "0", + languageSet: true, + PinSet: true, + expectedResult: resource.Result{ + FlagReset: []uint32{flag_account_pin_reset, flag_account_blocked}, + FlagSet: []uint32{flag_pin_set, flag_language_set}, + }, + }, } for _, tt := range tests { @@ -126,6 +145,18 @@ func TestCheckBlockedStatus(t *testing.T) { t.Fatal(err) } + if tt.languageSet { + if err := store.WriteEntry(ctx, sessionId, storedb.DATA_SELECTED_LANGUAGE_CODE, []byte("eng")); err != nil { + t.Fatal(err) + } + } + + if tt.PinSet { + if err := store.WriteEntry(ctx, sessionId, storedb.DATA_ACCOUNT_PIN, []byte("hasedPinValue")); err != nil { + t.Fatal(err) + } + } + res, err := h.CheckBlockedStatus(ctx, "", []byte("")) assert.NoError(t, err)