diff --git a/cmd/africastalking/main.go b/cmd/africastalking/main.go index 9f5b501..81a750e 100644 --- a/cmd/africastalking/main.go +++ b/cmd/africastalking/main.go @@ -20,6 +20,7 @@ import ( "git.defalsify.org/vise.git/logging" "git.defalsify.org/vise.git/resource" + "git.grassecon.net/urdt/ussd/common" "git.grassecon.net/urdt/ussd/config" "git.grassecon.net/urdt/ussd/initializers" "git.grassecon.net/urdt/ussd/internal/handlers" @@ -76,7 +77,13 @@ func (arp *atRequestParser) GetSessionId(rq any) (string, error) { return "", fmt.Errorf("no phone number found") } - return phoneNumber, nil + formattedNumber, err := common.FormatPhoneNumber(phoneNumber) + if err != nil { + fmt.Printf("Error: %v\n", err) + return "", fmt.Errorf("failed to format number") + } + + return formattedNumber, nil } func (arp *atRequestParser) GetInput(rq any) ([]byte, error) { diff --git a/common/recipient.go b/common/recipient.go index c5b6a4b..9b44926 100644 --- a/common/recipient.go +++ b/common/recipient.go @@ -3,6 +3,7 @@ package common import ( "fmt" "regexp" + "strings" ) // Define the regex patterns as constants @@ -46,3 +47,17 @@ func CheckRecipient(recipient string) (string, error) { return "", fmt.Errorf("invalid recipient: must be a phone number, address or alias") } + +// FormatPhoneNumber formats a Kenyan phone number to "254xxxxxxxx". +func FormatPhoneNumber(phone string) (string, error) { + // Remove any leading "+" and spaces + phone = strings.TrimPrefix(phone, "+") + phone = strings.ReplaceAll(phone, " ", "") + + // Replace leading "0" with "254" if present + if strings.HasPrefix(phone, "0") { + phone = "254" + phone[1:] + } + + return phone, nil +} \ No newline at end of file