Compare commits
20 Commits
ca81b041f1
...
dc14480519
Author | SHA1 | Date | |
---|---|---|---|
dc14480519 | |||
aaf4923f64 | |||
e9c645bd87 | |||
1be6da9139 | |||
fa2930d93a | |||
a409e292ab | |||
00c86a2850 | |||
4daac7e90b | |||
06e23565df | |||
b19188165b | |||
2ed9f083bb | |||
e323ffa078 | |||
68de83af97 | |||
a3f2b23128 | |||
09f970db9b | |||
04edd90c21 | |||
a3f410875a | |||
3f3e98e637 | |||
660f8b7aa2 | |||
|
8ae3372c36 |
@ -116,6 +116,7 @@ func getHandler(appFlags *asm.FlagParser, rs *resource.DbResource, userdataStore
|
|||||||
rs.AddLocalFunc("reset_incorrect_date_format", ussdHandlers.ResetIncorrectYob)
|
rs.AddLocalFunc("reset_incorrect_date_format", ussdHandlers.ResetIncorrectYob)
|
||||||
rs.AddLocalFunc("set_reset_single_edit", ussdHandlers.SetResetSingleEdit)
|
rs.AddLocalFunc("set_reset_single_edit", ussdHandlers.SetResetSingleEdit)
|
||||||
rs.AddLocalFunc("initiate_transaction", ussdHandlers.InitiateTransaction)
|
rs.AddLocalFunc("initiate_transaction", ussdHandlers.InitiateTransaction)
|
||||||
|
rs.AddLocalFunc("set_new_language", ussdHandlers.SetNewLanguage)
|
||||||
|
|
||||||
return ussdHandlers, nil
|
return ussdHandlers, nil
|
||||||
}
|
}
|
||||||
|
@ -86,6 +86,7 @@ func getHandler(appFlags *asm.FlagParser, rs *resource.DbResource, userdataStore
|
|||||||
rs.AddLocalFunc("reset_incorrect_date_format", ussdHandlers.ResetIncorrectYob)
|
rs.AddLocalFunc("reset_incorrect_date_format", ussdHandlers.ResetIncorrectYob)
|
||||||
rs.AddLocalFunc("set_reset_single_edit", ussdHandlers.SetResetSingleEdit)
|
rs.AddLocalFunc("set_reset_single_edit", ussdHandlers.SetResetSingleEdit)
|
||||||
rs.AddLocalFunc("initiate_transaction", ussdHandlers.InitiateTransaction)
|
rs.AddLocalFunc("initiate_transaction", ussdHandlers.InitiateTransaction)
|
||||||
|
rs.AddLocalFunc("set_new_language", ussdHandlers.SetNewLanguage)
|
||||||
|
|
||||||
return ussdHandlers, nil
|
return ussdHandlers, nil
|
||||||
}
|
}
|
||||||
|
@ -76,6 +76,7 @@ func getHandler(appFlags *asm.FlagParser, rs *resource.DbResource, userdataStore
|
|||||||
rs.AddLocalFunc("reset_incorrect_date_format", ussdHandlers.ResetIncorrectYob)
|
rs.AddLocalFunc("reset_incorrect_date_format", ussdHandlers.ResetIncorrectYob)
|
||||||
rs.AddLocalFunc("set_reset_single_edit", ussdHandlers.SetResetSingleEdit)
|
rs.AddLocalFunc("set_reset_single_edit", ussdHandlers.SetResetSingleEdit)
|
||||||
rs.AddLocalFunc("initiate_transaction", ussdHandlers.InitiateTransaction)
|
rs.AddLocalFunc("initiate_transaction", ussdHandlers.InitiateTransaction)
|
||||||
|
rs.AddLocalFunc("set_new_language", ussdHandlers.SetNewLanguage)
|
||||||
|
|
||||||
return ussdHandlers, nil
|
return ussdHandlers, nil
|
||||||
}
|
}
|
||||||
|
@ -71,6 +71,11 @@ func getHandler(appFlags *asm.FlagParser, rs *resource.DbResource, pe *persist.P
|
|||||||
rs.AddLocalFunc("reset_incorrect_date_format", ussdHandlers.ResetIncorrectYob)
|
rs.AddLocalFunc("reset_incorrect_date_format", ussdHandlers.ResetIncorrectYob)
|
||||||
rs.AddLocalFunc("set_reset_single_edit", ussdHandlers.SetResetSingleEdit)
|
rs.AddLocalFunc("set_reset_single_edit", ussdHandlers.SetResetSingleEdit)
|
||||||
rs.AddLocalFunc("initiate_transaction", ussdHandlers.InitiateTransaction)
|
rs.AddLocalFunc("initiate_transaction", ussdHandlers.InitiateTransaction)
|
||||||
|
rs.AddLocalFunc("save_temporary_pin", ussdHandlers.SaveTemporaryPin)
|
||||||
|
rs.AddLocalFunc("verify_new_pin", ussdHandlers.VerifyNewPin)
|
||||||
|
rs.AddLocalFunc("confirm_pin_change", ussdHandlers.ConfirmPinChange)
|
||||||
|
rs.AddLocalFunc("quit_with_help",ussdHandlers.QuitWithHelp)
|
||||||
|
rs.AddLocalFunc("set_new_language", ussdHandlers.SetNewLanguage)
|
||||||
|
|
||||||
return ussdHandlers, nil
|
return ussdHandlers, nil
|
||||||
}
|
}
|
||||||
|
@ -216,6 +216,74 @@ func (h *Handlers) SavePin(ctx context.Context, sym string, input []byte) (resou
|
|||||||
return res, nil
|
return res, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (h *Handlers) 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")
|
||||||
|
pinInput := string(input)
|
||||||
|
// Validate that the PIN is a 4-digit number
|
||||||
|
if isValidPIN(pinInput) {
|
||||||
|
res.FlagSet = append(res.FlagSet, flag_valid_pin)
|
||||||
|
} else {
|
||||||
|
res.FlagReset = append(res.FlagReset, flag_valid_pin)
|
||||||
|
}
|
||||||
|
|
||||||
|
return res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h *Handlers) SaveTemporaryPin(ctx context.Context, sym string, input []byte) (resource.Result, error) {
|
||||||
|
var res resource.Result
|
||||||
|
var err error
|
||||||
|
|
||||||
|
sessionId, ok := ctx.Value("SessionId").(string)
|
||||||
|
if !ok {
|
||||||
|
return res, fmt.Errorf("missing session")
|
||||||
|
}
|
||||||
|
flag_incorrect_pin, _ := h.flagManager.GetFlag("flag_incorrect_pin")
|
||||||
|
|
||||||
|
accountPIN := string(input)
|
||||||
|
|
||||||
|
// Validate that the PIN is a 4-digit number
|
||||||
|
if !isValidPIN(accountPIN) {
|
||||||
|
res.FlagSet = append(res.FlagSet, flag_incorrect_pin)
|
||||||
|
return res, nil
|
||||||
|
}
|
||||||
|
store := h.userdataStore
|
||||||
|
err = store.WriteEntry(ctx, sessionId, utils.DATA_TEMPORARY_PIN, []byte(accountPIN))
|
||||||
|
if err != nil {
|
||||||
|
return res, err
|
||||||
|
}
|
||||||
|
return res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h *Handlers) ConfirmPinChange(ctx context.Context, sym string, input []byte) (resource.Result, error) {
|
||||||
|
var res resource.Result
|
||||||
|
sessionId, ok := ctx.Value("SessionId").(string)
|
||||||
|
if !ok {
|
||||||
|
return res, fmt.Errorf("missing session")
|
||||||
|
}
|
||||||
|
flag_pin_mismatch, _ := h.flagManager.GetFlag("flag_pin_mismatch")
|
||||||
|
|
||||||
|
store := h.userdataStore
|
||||||
|
temporaryPin, err := store.ReadEntry(ctx, sessionId, utils.DATA_TEMPORARY_PIN)
|
||||||
|
if err != nil {
|
||||||
|
return res, err
|
||||||
|
}
|
||||||
|
if bytes.Equal(temporaryPin, input) {
|
||||||
|
res.FlagReset = append(res.FlagReset, flag_pin_mismatch)
|
||||||
|
} else {
|
||||||
|
res.FlagSet = append(res.FlagSet, flag_pin_mismatch)
|
||||||
|
}
|
||||||
|
err = store.WriteEntry(ctx, sessionId, utils.DATA_ACCOUNT_PIN, []byte(temporaryPin))
|
||||||
|
if err != nil {
|
||||||
|
return res, err
|
||||||
|
}
|
||||||
|
return res, nil
|
||||||
|
}
|
||||||
|
|
||||||
// SetResetSingleEdit sets and resets flags to allow gradual editing of profile information.
|
// SetResetSingleEdit sets and resets flags to allow gradual editing of profile information.
|
||||||
func (h *Handlers) SetResetSingleEdit(ctx context.Context, sym string, input []byte) (resource.Result, error) {
|
func (h *Handlers) SetResetSingleEdit(ctx context.Context, sym string, input []byte) (resource.Result, error) {
|
||||||
var res resource.Result
|
var res resource.Result
|
||||||
@ -322,9 +390,6 @@ func (h *Handlers) SaveFamilyname(ctx context.Context, sym string, input []byte)
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return res, err
|
return res, err
|
||||||
}
|
}
|
||||||
if err != nil {
|
|
||||||
return res, nil
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
return res, fmt.Errorf("a family name cannot be less than one character")
|
return res, fmt.Errorf("a family name cannot be less than one character")
|
||||||
}
|
}
|
||||||
@ -481,8 +546,6 @@ func (h *Handlers) Authorize(ctx context.Context, sym string, input []byte) (res
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return res, err
|
return res, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err == nil {
|
|
||||||
if len(input) == 4 {
|
if len(input) == 4 {
|
||||||
if bytes.Equal(input, AccountPin) {
|
if bytes.Equal(input, AccountPin) {
|
||||||
if h.st.MatchFlag(flag_account_authorized, false) {
|
if h.st.MatchFlag(flag_account_authorized, false) {
|
||||||
@ -497,11 +560,9 @@ func (h *Handlers) Authorize(ctx context.Context, sym string, input []byte) (res
|
|||||||
res.FlagReset = append(res.FlagReset, flag_account_authorized)
|
res.FlagReset = append(res.FlagReset, flag_account_authorized)
|
||||||
return res, nil
|
return res, nil
|
||||||
}
|
}
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
return res, nil
|
return res, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
return res, nil
|
return res, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -569,6 +630,22 @@ func (h *Handlers) Quit(ctx context.Context, sym string, input []byte) (resource
|
|||||||
return res, nil
|
return res, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// QuitWithHelp displays helpline information then exits the menu
|
||||||
|
func (h *Handlers) QuitWithHelp(ctx context.Context, sym string, input []byte) (resource.Result, error) {
|
||||||
|
var res resource.Result
|
||||||
|
|
||||||
|
flag_account_authorized, _ := h.flagManager.GetFlag("flag_account_authorized")
|
||||||
|
|
||||||
|
code := codeFromCtx(ctx)
|
||||||
|
l := gotext.NewLocale(translationDir, code)
|
||||||
|
l.AddDomain("default")
|
||||||
|
|
||||||
|
res.Content = l.Get("For more help,please call: 0757628885")
|
||||||
|
res.FlagReset = append(res.FlagReset, flag_account_authorized)
|
||||||
|
return res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// VerifyYob verifies the length of the given input
|
// VerifyYob verifies the length of the given input
|
||||||
func (h *Handlers) VerifyYob(ctx context.Context, sym string, input []byte) (resource.Result, error) {
|
func (h *Handlers) VerifyYob(ctx context.Context, sym string, input []byte) (resource.Result, error) {
|
||||||
var res resource.Result
|
var res resource.Result
|
||||||
@ -968,3 +1045,22 @@ func (h *Handlers) GetProfileInfo(ctx context.Context, sym string, input []byte)
|
|||||||
|
|
||||||
return res, nil
|
return res, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SetNewLanguage sets the new language based on user input
|
||||||
|
func (h *Handlers) SetNewLanguage(ctx context.Context, sym string, input []byte) (resource.Result, error) {
|
||||||
|
var res resource.Result
|
||||||
|
|
||||||
|
inputStr := string(input)
|
||||||
|
|
||||||
|
switch inputStr {
|
||||||
|
case "0":
|
||||||
|
res.FlagSet = append(res.FlagSet, state.FLAG_LANG)
|
||||||
|
res.Content = "eng"
|
||||||
|
case "1":
|
||||||
|
res.FlagSet = append(res.FlagSet, state.FLAG_LANG)
|
||||||
|
res.Content = "swa"
|
||||||
|
default:
|
||||||
|
}
|
||||||
|
|
||||||
|
return res, nil
|
||||||
|
}
|
||||||
|
@ -22,6 +22,7 @@ const (
|
|||||||
DATA_OFFERINGS
|
DATA_OFFERINGS
|
||||||
DATA_RECIPIENT
|
DATA_RECIPIENT
|
||||||
DATA_AMOUNT
|
DATA_AMOUNT
|
||||||
|
DATA_TEMPORARY_PIN
|
||||||
)
|
)
|
||||||
|
|
||||||
func typToBytes(typ DataTyp) []byte {
|
func typToBytes(typ DataTyp) []byte {
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
# Variables to match files in the current directory
|
# Variables to match files in the current directory
|
||||||
INPUTS = $(wildcard ./*.vis)
|
INPUTS = $(wildcard ./*.vis)
|
||||||
TXTS = $(wildcard ./*.txt.orig)
|
TXTS = $(wildcard ./*.txt.orig)
|
||||||
|
VISE_PATH := ../../go-vise
|
||||||
|
|
||||||
# Rule to build .bin files from .vis files
|
# Rule to build .bin files from .vis files
|
||||||
%.vis:
|
%.vis:
|
||||||
go run ../../go-vise/dev/asm/main.go -f pp.csv $(basename $@).vis > $(basename $@).bin
|
go run $(VISE_PATH)/dev/asm/main.go -f pp.csv $(basename $@).vis > $(basename $@).bin
|
||||||
@echo "Built $(basename $@).bin from $(basename $@).vis"
|
@echo "Built $(basename $@).bin from $(basename $@).vis"
|
||||||
|
|
||||||
# Rule to copy .orig files to .txt
|
# Rule to copy .orig files to .txt
|
||||||
|
@ -1 +1 @@
|
|||||||
Salio
|
Salio:
|
1
services/registration/change_language
Normal file
1
services/registration/change_language
Normal file
@ -0,0 +1 @@
|
|||||||
|
Select language:
|
10
services/registration/change_language.vis
Normal file
10
services/registration/change_language.vis
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
LOAD reset_account_authorized 0
|
||||||
|
LOAD reset_incorrect 0
|
||||||
|
CATCH incorrect_pin flag_incorrect_pin 1
|
||||||
|
CATCH pin_entry flag_account_authorized 0
|
||||||
|
MOUT english 0
|
||||||
|
MOUT kiswahili 1
|
||||||
|
HALT
|
||||||
|
INCMP language_changed 0
|
||||||
|
INCMP language_changed 1
|
||||||
|
INCMP . *
|
1
services/registration/change_language_swa
Normal file
1
services/registration/change_language_swa
Normal file
@ -0,0 +1 @@
|
|||||||
|
Chagua lugha:
|
@ -1,2 +1 @@
|
|||||||
Your community balance is: 0.00SRF
|
Your community balance is: 0.00SRF
|
||||||
|
|
||||||
|
1
services/registration/confirm_pin_change
Normal file
1
services/registration/confirm_pin_change
Normal file
@ -0,0 +1 @@
|
|||||||
|
Confirm your new PIN:
|
7
services/registration/confirm_pin_change.vis
Normal file
7
services/registration/confirm_pin_change.vis
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
CATCH invalid_pin flag_valid_pin 0
|
||||||
|
MOUT back 0
|
||||||
|
HALT
|
||||||
|
INCMP _ 0
|
||||||
|
INCMP * pin_reset_success
|
||||||
|
|
||||||
|
|
1
services/registration/confirm_pin_change_swa
Normal file
1
services/registration/confirm_pin_change_swa
Normal file
@ -0,0 +1 @@
|
|||||||
|
Thibitisha PIN yako mpya:
|
2
services/registration/help.vis
Normal file
2
services/registration/help.vis
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
LOAD quit_with_help 0
|
||||||
|
HALT
|
1
services/registration/invalid_pin
Normal file
1
services/registration/invalid_pin
Normal file
@ -0,0 +1 @@
|
|||||||
|
The PIN you entered is invalid.The PIN must be different from your current PIN.For help call +254757628885
|
3
services/registration/invalid_pin.vis
Normal file
3
services/registration/invalid_pin.vis
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
MOUT back 0
|
||||||
|
HALT
|
||||||
|
INCMP _ 0
|
1
services/registration/invalid_pin_swa
Normal file
1
services/registration/invalid_pin_swa
Normal file
@ -0,0 +1 @@
|
|||||||
|
PIN mpya na udhibitisho wa pin mpya hazilingani.Tafadhali jaribu tena.Kwa usaidizi piga simu +254757628885.
|
1
services/registration/language_changed
Normal file
1
services/registration/language_changed
Normal file
@ -0,0 +1 @@
|
|||||||
|
Your language change request was successful.
|
6
services/registration/language_changed.vis
Normal file
6
services/registration/language_changed.vis
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
LOAD set_new_language 6
|
||||||
|
MOUT back 0
|
||||||
|
MOUT quit 9
|
||||||
|
HALT
|
||||||
|
INCMP ^ 0
|
||||||
|
INCMP quit 9
|
1
services/registration/language_changed_swa
Normal file
1
services/registration/language_changed_swa
Normal file
@ -0,0 +1 @@
|
|||||||
|
Ombi lako la kubadilisha lugha limefanikiwa.
|
@ -6,3 +6,7 @@ msgstr "Ombi lako limetumwa. %s atapokea %s kutoka kwa %s."
|
|||||||
|
|
||||||
msgid "Thank you for using Sarafu. Goodbye!"
|
msgid "Thank you for using Sarafu. Goodbye!"
|
||||||
msgstr "Asante kwa kutumia huduma ya Sarafu. Kwaheri!"
|
msgstr "Asante kwa kutumia huduma ya Sarafu. Kwaheri!"
|
||||||
|
|
||||||
|
|
||||||
|
msgid "For more help,please call: 0757628885"
|
||||||
|
msgstr "Kwa usaidizi zaidi,piga: 0757628885"
|
||||||
|
@ -10,6 +10,6 @@ HALT
|
|||||||
INCMP send 1
|
INCMP send 1
|
||||||
INCMP quit 2
|
INCMP quit 2
|
||||||
INCMP my_account 3
|
INCMP my_account 3
|
||||||
INCMP quit 4
|
INCMP help 4
|
||||||
INCMP quit 9
|
INCMP quit 9
|
||||||
INCMP . *
|
INCMP . *
|
||||||
|
@ -9,6 +9,7 @@ MOUT back 0
|
|||||||
HALT
|
HALT
|
||||||
INCMP _ 0
|
INCMP _ 0
|
||||||
INCMP edit_profile 1
|
INCMP edit_profile 1
|
||||||
|
INCMP change_language 2
|
||||||
INCMP balances 3
|
INCMP balances 3
|
||||||
INCMP pin_management 5
|
INCMP pin_management 5
|
||||||
INCMP address 6
|
INCMP address 6
|
||||||
|
1
services/registration/new_pin
Normal file
1
services/registration/new_pin
Normal file
@ -0,0 +1 @@
|
|||||||
|
Enter a new four number pin
|
13
services/registration/new_pin.vis
Normal file
13
services/registration/new_pin.vis
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
LOAD authorize_account 12
|
||||||
|
RELOAD authorize_account
|
||||||
|
CATCH incorrect_pin flag_incorrect_pin 1
|
||||||
|
CATCH old_pin flag_allow_update 0
|
||||||
|
MOUT back 0
|
||||||
|
HALT
|
||||||
|
INCMP _ 0
|
||||||
|
LOAD save_temporary_pin 6
|
||||||
|
LOAD verify_new_pin 0
|
||||||
|
RELOAD save_temporary_pin
|
||||||
|
RELOAD verify_new_pin
|
||||||
|
INCMP * confirm_pin_change
|
||||||
|
|
2
services/registration/new_pin_swa
Normal file
2
services/registration/new_pin_swa
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
Weka PIN mpya ya nne nambari:
|
||||||
|
|
1
services/registration/old_pin
Normal file
1
services/registration/old_pin
Normal file
@ -0,0 +1 @@
|
|||||||
|
Enter your old PIN
|
7
services/registration/old_pin.vis
Normal file
7
services/registration/old_pin.vis
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
LOAD reset_allow_update 0
|
||||||
|
MOUT back 0
|
||||||
|
HALT
|
||||||
|
RELOAD reset_allow_update
|
||||||
|
INCMP _ 0
|
||||||
|
INCMP new_pin *
|
||||||
|
|
1
services/registration/old_pin_swa
Normal file
1
services/registration/old_pin_swa
Normal file
@ -0,0 +1 @@
|
|||||||
|
Weka PIN yako ya zamani:
|
@ -4,3 +4,5 @@ MOUT guard_pin 3
|
|||||||
MOUT back 0
|
MOUT back 0
|
||||||
HALT
|
HALT
|
||||||
INCMP _ 0
|
INCMP _ 0
|
||||||
|
INCMP old_pin 1
|
||||||
|
|
||||||
|
1
services/registration/pin_reset_mismatch
Normal file
1
services/registration/pin_reset_mismatch
Normal file
@ -0,0 +1 @@
|
|||||||
|
The PIN is not a match. Try again
|
6
services/registration/pin_reset_mismatch.vis
Normal file
6
services/registration/pin_reset_mismatch.vis
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
MOUT retry 1
|
||||||
|
MOUT quit 9
|
||||||
|
HALT
|
||||||
|
INCMP confirm_pin_change 1
|
||||||
|
INCMP quit 9
|
||||||
|
|
1
services/registration/pin_reset_success
Normal file
1
services/registration/pin_reset_success
Normal file
@ -0,0 +1 @@
|
|||||||
|
Your PIN change request has been successful
|
10
services/registration/pin_reset_success.vis
Normal file
10
services/registration/pin_reset_success.vis
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
LOAD confirm_pin_change 0
|
||||||
|
RELOAD confirm_pin_change
|
||||||
|
CATCH pin_reset_mismatch flag_pin_mismatch 1
|
||||||
|
MOUT back 0
|
||||||
|
MOUT quit 9
|
||||||
|
HALT
|
||||||
|
INCMP main 0
|
||||||
|
INCMP quit 9
|
||||||
|
|
||||||
|
|
1
services/registration/pin_reset_success_swa
Normal file
1
services/registration/pin_reset_success_swa
Normal file
@ -0,0 +1 @@
|
|||||||
|
Ombi lako la kubadili PIN limefanikiwa
|
1
services/registration/quit_menu
Normal file
1
services/registration/quit_menu
Normal file
@ -0,0 +1 @@
|
|||||||
|
Quit
|
1
services/registration/quit_menu_swa
Normal file
1
services/registration/quit_menu_swa
Normal file
@ -0,0 +1 @@
|
|||||||
|
Ondoka
|
@ -1 +1,2 @@
|
|||||||
Wasifu wangu
|
Wasifu wangu:
|
||||||
|
{{.get_profile_info}}
|
Loading…
Reference in New Issue
Block a user