wip-account-creation #4
129
cmd/main.go
129
cmd/main.go
@ -1,6 +1,7 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"encoding/json"
|
||||
"flag"
|
||||
@ -13,6 +14,7 @@ import (
|
||||
|
||||
"git.defalsify.org/vise.git/cache"
|
||||
"git.defalsify.org/vise.git/engine"
|
||||
"git.defalsify.org/vise.git/lang"
|
||||
"git.defalsify.org/vise.git/persist"
|
||||
"git.defalsify.org/vise.git/resource"
|
||||
"git.defalsify.org/vise.git/state"
|
||||
@ -28,6 +30,11 @@ const (
|
||||
USERFLAG_INVALID_RECIPIENT_WITH_INVITE
|
||||
USERFLAG_INCORRECTPIN
|
||||
USERFLAG_UNLOCKFORUPDATE
|
||||
USERFLAG_INVALID_AMOUNT
|
||||
USERFLAG_QUERYPIN
|
||||
USERFLAG_VALIDPIN
|
||||
USERFLAG_INVALIDPIN
|
||||
USERFLAG_UNLOCKFORUPDATE
|
||||
)
|
||||
|
||||
const (
|
||||
@ -71,6 +78,16 @@ type fsData struct {
|
||||
st *state.State
|
||||
}
|
||||
|
||||
func codeFromCtx(ctx context.Context) string {
|
||||
var code string
|
||||
engine.Logg.DebugCtxf(ctx, "in msg", "ctx", ctx, "val", code)
|
||||
if ctx.Value("Language") != nil {
|
||||
lang := ctx.Value("Language").(lang.Language)
|
||||
code = lang.Code
|
||||
}
|
||||
return code
|
||||
}
|
||||
|
||||
func (fsd *fsData) saveFirstName(cxt context.Context, sym string, input []byte) (resource.Result, error) {
|
||||
res := resource.Result{}
|
||||
fp := fsd.path + "_data"
|
||||
@ -484,8 +501,12 @@ func checkAccountStatus(trackingId string) (string, error) {
|
||||
}
|
||||
|
||||
func (fsd *fsData) quit(ctx context.Context, sym string, input []byte) (resource.Result, error) {
|
||||
res := resource.Result{
|
||||
Content: "Your account is being created",
|
||||
res := resource.Result{}
|
||||
switch codeFromCtx(ctx) {
|
||||
case "swa":
|
||||
res.Content = "Asante kwa kutumia huduma ya Sarafu. Kwaheri!"
|
||||
default:
|
||||
res.Content = "Thank you for using Sarafu. Goodbye!"
|
||||
}
|
||||
res.FlagReset = append(res.FlagReset, USERFLAG_ACCOUNT_UNLOCKED)
|
||||
return res, nil
|
||||
@ -606,6 +627,39 @@ func (fsd *fsData) transaction_reset(ctx context.Context, sym string, input []by
|
||||
return res, nil
|
||||
}
|
||||
|
||||
func (fsd *fsData) reset_transaction_amount(ctx context.Context, sym string, input []byte) (resource.Result, error) {
|
||||
res := resource.Result{}
|
||||
fp := fsd.path + "_data"
|
||||
|
||||
jsonData, err := os.ReadFile(fp)
|
||||
if err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
||||
var accountData map[string]string
|
||||
err = json.Unmarshal(jsonData, &accountData)
|
||||
if err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
||||
// reset the amount
|
||||
accountData["Amount"] = ""
|
||||
|
||||
updatedJsonData, err := json.Marshal(accountData)
|
||||
if err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
||||
err = os.WriteFile(fp, updatedJsonData, 0644)
|
||||
if err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
||||
res.FlagReset = append(res.FlagReset, USERFLAG_INVALID_AMOUNT)
|
||||
|
||||
return res, nil
|
||||
}
|
||||
|
||||
func (fsd *fsData) max_amount(ctx context.Context, sym string, input []byte) (resource.Result, error) {
|
||||
res := resource.Result{}
|
||||
|
||||
@ -632,9 +686,10 @@ func (fsd *fsData) validate_amount(ctx context.Context, sym string, input []byte
|
||||
return res, err
|
||||
}
|
||||
|
||||
// mimic invalid amount check
|
||||
if amount == "0" {
|
||||
// res.FlagSet = []uint32{invalidAmount}
|
||||
if amount != "0" {
|
||||
// mimic invalid amount
|
||||
if amount == "00" {
|
||||
res.FlagSet = append(res.FlagSet, USERFLAG_INVALID_AMOUNT)
|
||||
res.Content = amount
|
||||
|
||||
return res, nil
|
||||
@ -657,6 +712,9 @@ func (fsd *fsData) validate_amount(ctx context.Context, sym string, input []byte
|
||||
return res, nil
|
||||
}
|
||||
|
||||
return res, nil
|
||||
}
|
||||
|
||||
func (fsd *fsData) get_recipient(ctx context.Context, sym string, input []byte) (resource.Result, error) {
|
||||
res := resource.Result{}
|
||||
fp := fsd.path + "_data"
|
||||
@ -762,6 +820,62 @@ func (fsd *fsData) quitWithBalance(ctx context.Context, sym string, input []byte
|
||||
return res, nil
|
||||
}
|
||||
|
||||
func (fsd *fsData) save_pin(ctx context.Context, sym string, input []byte) (resource.Result, error) {
|
||||
res := resource.Result{}
|
||||
accountPIN := string(input)
|
||||
fp := fsd.path + "_data"
|
||||
|
||||
jsonData, err := os.ReadFile(fp)
|
||||
if err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
||||
var accountData map[string]string
|
||||
err = json.Unmarshal(jsonData, &accountData)
|
||||
if err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
||||
accountData["AccountPIN"] = accountPIN
|
||||
|
||||
updatedJsonData, err := json.Marshal(accountData)
|
||||
if err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
||||
err = os.WriteFile(fp, updatedJsonData, 0644)
|
||||
if err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
||||
return res, nil
|
||||
}
|
||||
|
||||
func (fsd *fsData) verify_pin(ctx context.Context, sym string, input []byte) (resource.Result, error) {
|
||||
res := resource.Result{}
|
||||
fp := fsd.path + "_data"
|
||||
|
||||
jsonData, err := os.ReadFile(fp)
|
||||
if err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
||||
var accountData map[string]string
|
||||
err = json.Unmarshal(jsonData, &accountData)
|
||||
if err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
||||
if bytes.Equal(input, []byte(accountData["AccountPIN"])) {
|
||||
res.FlagSet = []uint32{USERFLAG_VALIDPIN}
|
||||
res.FlagReset = []uint32{USERFLAG_INVALIDPIN}
|
||||
} else {
|
||||
res.FlagSet = []uint32{USERFLAG_INVALIDPIN}
|
||||
}
|
||||
|
||||
return res, nil
|
||||
}
|
||||
|
||||
var (
|
||||
scriptDir = path.Join("services", "registration")
|
||||
)
|
||||
@ -779,7 +893,7 @@ func main() {
|
||||
fmt.Fprintf(os.Stderr, "starting session at symbol '%s' using resource dir: %s\n", root, dir)
|
||||
|
||||
ctx := context.Background()
|
||||
st := state.NewState(9)
|
||||
st := state.NewState(15)
|
||||
st.UseDebug()
|
||||
state.FlagDebugger.Register(USERFLAG_LANGUAGE_SET, "LANGUAGE_CHANGE")
|
||||
state.FlagDebugger.Register(USERFLAG_ACCOUNT_CREATED, "ACCOUNT_CREATED")
|
||||
@ -823,6 +937,8 @@ func main() {
|
||||
}
|
||||
rfs.AddLocalFunc("select_language", fs.SetLanguageSelected)
|
||||
rfs.AddLocalFunc("create_account", fs.create_account)
|
||||
rfs.AddLocalFunc("save_pin", fs.save_pin)
|
||||
rfs.AddLocalFunc("verify_pin", fs.verify_pin)
|
||||
rfs.AddLocalFunc("check_identifier", fs.checkIdentifier)
|
||||
rfs.AddLocalFunc("check_account_status", fs.check_account_status)
|
||||
rfs.AddLocalFunc("unlock_account", fs.unLock)
|
||||
@ -832,6 +948,7 @@ func main() {
|
||||
rfs.AddLocalFunc("transaction_reset", fs.transaction_reset)
|
||||
rfs.AddLocalFunc("max_amount", fs.max_amount)
|
||||
rfs.AddLocalFunc("validate_amount", fs.validate_amount)
|
||||
rfs.AddLocalFunc("reset_transaction_amount", fs.reset_transaction_amount)
|
||||
rfs.AddLocalFunc("get_recipient", fs.get_recipient)
|
||||
rfs.AddLocalFunc("get_sender", fs.get_sender)
|
||||
rfs.AddLocalFunc("reset_incorrect", fs.ResetIncorrectPin)
|
||||
|
@ -1,4 +1,4 @@
|
||||
LOAD create_account 0
|
||||
RELOAD verify_pin
|
||||
CATCH create_pin_mismatch 20 1
|
||||
LOAD quit 0
|
||||
HALT
|
||||
|
||||
|
@ -1,3 +1,4 @@
|
||||
LOAD reset_transaction_amount 0
|
||||
RELOAD validate_recipient
|
||||
CATCH invalid_recipient 13 1
|
||||
LOAD max_amount 10
|
||||
|
@ -0,0 +1,2 @@
|
||||
Kiwango cha juu: {{.max_amount}}
|
||||
Weka kiwango:
|
1
services/registration/confirm_create_pin
Normal file
1
services/registration/confirm_create_pin
Normal file
@ -0,0 +1 @@
|
||||
Enter your four number PIN again:
|
4
services/registration/confirm_create_pin.vis
Normal file
4
services/registration/confirm_create_pin.vis
Normal file
@ -0,0 +1,4 @@
|
||||
LOAD save_pin 0
|
||||
HALT
|
||||
LOAD verify_pin 8
|
||||
INCMP account_creation *
|
1
services/registration/confirm_create_pin_swa
Normal file
1
services/registration/confirm_create_pin_swa
Normal file
@ -0,0 +1 @@
|
||||
Weka PIN yako tena:
|
1
services/registration/create_pin
Normal file
1
services/registration/create_pin
Normal file
@ -0,0 +1 @@
|
||||
Please enter a new four number PIN for your account:
|
5
services/registration/create_pin.vis
Normal file
5
services/registration/create_pin.vis
Normal file
@ -0,0 +1,5 @@
|
||||
LOAD create_account 0
|
||||
MOUT exit 0
|
||||
HALT
|
||||
LOAD save_pin 0
|
||||
INCMP confirm_create_pin *
|
1
services/registration/create_pin_mismatch
Normal file
1
services/registration/create_pin_mismatch
Normal file
@ -0,0 +1 @@
|
||||
The PIN is not a match. Try again
|
5
services/registration/create_pin_mismatch.vis
Normal file
5
services/registration/create_pin_mismatch.vis
Normal file
@ -0,0 +1,5 @@
|
||||
MOUT retry 1
|
||||
MOUT quit 9
|
||||
HALT
|
||||
INCMP confirm_create_pin 1
|
||||
INCMP quit 9
|
||||
Alfred-mk marked this conversation as resolved
|
1
services/registration/create_pin_mismatch_swa
Normal file
1
services/registration/create_pin_mismatch_swa
Normal file
@ -0,0 +1 @@
|
||||
PIN uliyoweka haifanani. Jaribu tena
|
1
services/registration/create_pin_swa
Normal file
1
services/registration/create_pin_swa
Normal file
@ -0,0 +1 @@
|
||||
Tafadhali weka PIN mpya yenye nambari nne kwa akaunti yako:
|
1
services/registration/exit_menu
Normal file
1
services/registration/exit_menu
Normal file
@ -0,0 +1 @@
|
||||
Exit
|
1
services/registration/exit_menu_swa
Normal file
1
services/registration/exit_menu_swa
Normal file
@ -0,0 +1 @@
|
||||
Ondoka
|
1
services/registration/invalid_amount
Normal file
1
services/registration/invalid_amount
Normal file
@ -0,0 +1 @@
|
||||
Amount {{.validate_amount}} is invalid, please try again:
|
7
services/registration/invalid_amount.vis
Normal file
7
services/registration/invalid_amount.vis
Normal file
@ -0,0 +1,7 @@
|
||||
MAP validate_amount
|
||||
RELOAD reset_transaction_amount
|
||||
MOUT retry 1
|
||||
MOUT quit 9
|
||||
HALT
|
||||
INCMP amount 1
|
||||
INCMP quit 9
|
1
services/registration/invalid_amount_swa
Normal file
1
services/registration/invalid_amount_swa
Normal file
@ -0,0 +1 @@
|
||||
Kiwango {{.validate_amount}} sio sahihi, tafadhali weka tena:
|
@ -3,5 +3,5 @@ RELOAD select_language
|
||||
MOUT yes 0
|
||||
MOUT no 1
|
||||
HALT
|
||||
INCMP account_creation 0
|
||||
INCMP create_pin 0
|
||||
INCMP _ *
|
||||
|
@ -1,5 +1,6 @@
|
||||
RELOAD validate_amount
|
||||
MAP validate_amount
|
||||
CATCH invalid_amount 17 1
|
||||
RELOAD get_recipient
|
||||
MAP get_recipient
|
||||
RELOAD get_sender
|
||||
|
Loading…
Reference in New Issue
Block a user
if quit is chosen, next time the vm is started, the pin creation is never resumed, it just goes directly to main menu. It should prompt for setting pin again.