forked from urdt/ussd
validate recipients and invite valid ones
This commit is contained in:
parent
8c13e44a15
commit
93df6a6a08
@ -80,6 +80,7 @@ func (ls *LocalHandlerService) GetHandler(accountService remote.AccountServiceIn
|
||||
ls.DbRs.AddLocalFunc("check_balance", ussdHandlers.CheckBalance)
|
||||
ls.DbRs.AddLocalFunc("validate_recipient", ussdHandlers.ValidateRecipient)
|
||||
ls.DbRs.AddLocalFunc("transaction_reset", ussdHandlers.TransactionReset)
|
||||
ls.DbRs.AddLocalFunc("invite_valid_recipient", ussdHandlers.InviteValidRecipient)
|
||||
ls.DbRs.AddLocalFunc("max_amount", ussdHandlers.MaxAmount)
|
||||
ls.DbRs.AddLocalFunc("validate_amount", ussdHandlers.ValidateAmount)
|
||||
ls.DbRs.AddLocalFunc("reset_transaction_amount", ussdHandlers.ResetTransactionAmount)
|
||||
|
@ -929,7 +929,7 @@ func (h *Handlers) ValidateBlockedNumber(ctx context.Context, sym string, input
|
||||
// ValidateRecipient validates that the given input is a valid phone number.
|
||||
func (h *Handlers) ValidateRecipient(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 {
|
||||
@ -939,18 +939,41 @@ func (h *Handlers) ValidateRecipient(ctx context.Context, sym string, input []by
|
||||
recipient := string(input)
|
||||
|
||||
flag_invalid_recipient, _ := h.flagManager.GetFlag("flag_invalid_recipient")
|
||||
flag_invalid_recipient_with_invite, _ := h.flagManager.GetFlag("flag_invalid_recipient_with_invite")
|
||||
|
||||
if recipient != "0" {
|
||||
// mimic invalid number check
|
||||
if recipient == "000" {
|
||||
if !isValidPhoneNumber(recipient) {
|
||||
res.FlagSet = append(res.FlagSet, flag_invalid_recipient)
|
||||
res.Content = recipient
|
||||
|
||||
return res, nil
|
||||
}
|
||||
store := h.userdataStore
|
||||
err = store.WriteEntry(ctx, sessionId, common.DATA_RECIPIENT, []byte(recipient))
|
||||
|
||||
publicKey, err := store.ReadEntry(ctx, recipient, common.DATA_PUBLIC_KEY)
|
||||
if err != nil {
|
||||
if db.IsNotFound(err) {
|
||||
logg.InfoCtxf(ctx, "Unregistered number")
|
||||
|
||||
// save the recipient as the temporaryInvitedNumber
|
||||
err = store.WriteEntry(ctx, sessionId, common.DATA_TEMPORARY_VALUE, []byte(recipient))
|
||||
if err != nil {
|
||||
logg.ErrorCtxf(ctx, "failed to write temporaryInvitedNumber entry with", "key", common.DATA_TEMPORARY_VALUE, "value", recipient, "error", err)
|
||||
return res, err
|
||||
}
|
||||
|
||||
res.FlagSet = append(res.FlagSet, flag_invalid_recipient_with_invite)
|
||||
res.Content = recipient
|
||||
|
||||
return res, nil
|
||||
}
|
||||
|
||||
logg.ErrorCtxf(ctx, "failed to read publicKey entry with", "key", common.DATA_PUBLIC_KEY, "error", err)
|
||||
return res, err
|
||||
}
|
||||
|
||||
err = store.WriteEntry(ctx, sessionId, common.DATA_RECIPIENT, publicKey)
|
||||
if err != nil {
|
||||
logg.ErrorCtxf(ctx, "failed to write recipient entry with", "key", common.DATA_RECIPIENT, "value", string(publicKey), "error", err)
|
||||
return res, nil
|
||||
}
|
||||
}
|
||||
@ -987,6 +1010,31 @@ func (h *Handlers) TransactionReset(ctx context.Context, sym string, input []byt
|
||||
return res, nil
|
||||
}
|
||||
|
||||
// InviteValidRecipient sends an invitation to the valid phone number.
|
||||
func (h *Handlers) InviteValidRecipient(ctx context.Context, sym string, input []byte) (resource.Result, error) {
|
||||
var res resource.Result
|
||||
store := h.userdataStore
|
||||
|
||||
sessionId, ok := ctx.Value("SessionId").(string)
|
||||
if !ok {
|
||||
return res, fmt.Errorf("missing session")
|
||||
}
|
||||
|
||||
code := codeFromCtx(ctx)
|
||||
l := gotext.NewLocale(translationDir, code)
|
||||
l.AddDomain("default")
|
||||
|
||||
recipient, _ := store.ReadEntry(ctx, sessionId, common.DATA_TEMPORARY_VALUE)
|
||||
|
||||
// TODO
|
||||
// send an invitation SMS
|
||||
// if successful
|
||||
// res.Content = l.Get("Your invitation to %s to join Sarafu Network has been sent.", string(recipient))
|
||||
|
||||
res.Content = l.Get("Your invite request for %s to Sarafu Network failed. Please try again later.", string(recipient))
|
||||
return res, nil
|
||||
}
|
||||
|
||||
// ResetTransactionAmount resets the transaction amount and invalid flag
|
||||
func (h *Handlers) ResetTransactionAmount(ctx context.Context, sym string, input []byte) (resource.Result, error) {
|
||||
var res resource.Result
|
||||
|
@ -1 +1 @@
|
||||
{{.validate_recipient}} is not registered or invalid, please try again:
|
||||
{{.validate_recipient}} is invalid, please try again:
|
@ -1 +1 @@
|
||||
{{.validate_recipient}} haijasajiliwa au sio sahihi, tafadhali weka tena:
|
||||
{{.validate_recipient}} sio sahihi, tafadhali weka tena:
|
1
services/registration/invite_menu
Normal file
1
services/registration/invite_menu
Normal file
@ -0,0 +1 @@
|
||||
Invite to Sarafu Network
|
1
services/registration/invite_menu_swa
Normal file
1
services/registration/invite_menu_swa
Normal file
@ -0,0 +1 @@
|
||||
Karibisha kwa matandao wa Sarafu
|
1
services/registration/invite_recipient
Normal file
1
services/registration/invite_recipient
Normal file
@ -0,0 +1 @@
|
||||
{{.validate_recipient}} is not registered, please try again:
|
8
services/registration/invite_recipient.vis
Normal file
8
services/registration/invite_recipient.vis
Normal file
@ -0,0 +1,8 @@
|
||||
MAP validate_recipient
|
||||
MOUT retry 1
|
||||
MOUT invite 2
|
||||
MOUT quit 9
|
||||
HALT
|
||||
INCMP _ 1
|
||||
INCMP invite_result 2
|
||||
INCMP quit 9
|
1
services/registration/invite_recipient_swa
Normal file
1
services/registration/invite_recipient_swa
Normal file
@ -0,0 +1 @@
|
||||
{{.validate_recipient}} haijasajiliwa, tafadhali weka tena:
|
2
services/registration/invite_result.vis
Normal file
2
services/registration/invite_result.vis
Normal file
@ -0,0 +1,2 @@
|
||||
LOAD invite_valid_recipient 0
|
||||
HALT
|
@ -12,3 +12,9 @@ msgstr "Kwa usaidizi zaidi,piga: 0757628885"
|
||||
|
||||
msgid "Balance: %s\n"
|
||||
msgstr "Salio: %s\n"
|
||||
|
||||
msid "Your invite request for %s to Sarafu Network failed. Please try again later."
|
||||
msgstr "Ombi lako la kumwalika %s kwa matandao wa Sarafu halikufaulu. Tafadhali jaribu tena baadaye."
|
||||
|
||||
msgid "Your invitation to %s to join Sarafu Network has been sent."
|
||||
msgstr "Ombi lako la kumwalika %s kwa matandao wa Sarafu limetumwa."
|
||||
|
@ -1,9 +1,11 @@
|
||||
LOAD transaction_reset 0
|
||||
RELOAD transaction_reset
|
||||
CATCH no_voucher flag_no_active_voucher 1
|
||||
MOUT back 0
|
||||
HALT
|
||||
LOAD validate_recipient 20
|
||||
RELOAD validate_recipient
|
||||
CATCH invalid_recipient flag_invalid_recipient 1
|
||||
CATCH invite_recipient flag_invalid_recipient_with_invite 1
|
||||
INCMP _ 0
|
||||
INCMP amount *
|
||||
|
Loading…
Reference in New Issue
Block a user