Compare commits
No commits in common. "0370a3def4e27bf47da76aa4af9141a784cef7f9" and "a38ac06a3d7bcfc69d96e0c406a755d84fe9f333" have entirely different histories.
0370a3def4
...
a38ac06a3d
@ -29,7 +29,6 @@ import (
|
||||
"git.grassecon.net/grassrootseconomics/sarafu-api/models"
|
||||
"git.grassecon.net/grassrootseconomics/sarafu-api/remote"
|
||||
"git.grassecon.net/grassrootseconomics/sarafu-vise/config"
|
||||
"git.grassecon.net/grassrootseconomics/sarafu-vise/internal/sms"
|
||||
"git.grassecon.net/grassrootseconomics/sarafu-vise/profile"
|
||||
"git.grassecon.net/grassrootseconomics/sarafu-vise/store"
|
||||
storedb "git.grassecon.net/grassrootseconomics/sarafu-vise/store/db"
|
||||
@ -78,7 +77,6 @@ type MenuHandlers struct {
|
||||
flagManager *FlagManager
|
||||
accountService remote.AccountService
|
||||
prefixDb storedb.PrefixDb
|
||||
smsService sms.SmsService
|
||||
profile *profile.Profile
|
||||
ReplaceSeparatorFunc func(string) string
|
||||
}
|
||||
@ -91,10 +89,6 @@ func NewMenuHandlers(appFlags *FlagManager, userdataStore db.Db, accountService
|
||||
userDb := &store.UserDataStore{
|
||||
Db: userdataStore,
|
||||
}
|
||||
smsservice := sms.SmsService{
|
||||
Accountservice: accountService,
|
||||
Userdatastore: *userDb,
|
||||
}
|
||||
|
||||
// Instantiate the SubPrefixDb with "DATATYPE_USERDATA" prefix
|
||||
prefix := storedb.ToBytes(db.DATATYPE_USERDATA)
|
||||
@ -104,7 +98,6 @@ func NewMenuHandlers(appFlags *FlagManager, userdataStore db.Db, accountService
|
||||
userdataStore: userDb,
|
||||
flagManager: appFlags,
|
||||
accountService: accountService,
|
||||
smsService: smsservice,
|
||||
prefixDb: prefixDb,
|
||||
profile: &profile.Profile{Max: 6},
|
||||
ReplaceSeparatorFunc: replaceSeparatorFunc,
|
||||
@ -509,10 +502,7 @@ func (h *MenuHandlers) ValidateBlockedNumber(ctx context.Context, sym string, in
|
||||
// 3. Resetting the DATA_INCORRECT_PIN_ATTEMPTS to 0 for the blocked phone number
|
||||
func (h *MenuHandlers) ResetOthersPin(ctx context.Context, sym string, input []byte) (resource.Result, error) {
|
||||
var res resource.Result
|
||||
|
||||
store := h.userdataStore
|
||||
smsservice := h.smsService
|
||||
|
||||
sessionId, ok := ctx.Value("SessionId").(string)
|
||||
if !ok {
|
||||
return res, fmt.Errorf("missing session")
|
||||
@ -537,7 +527,7 @@ func (h *MenuHandlers) ResetOthersPin(ctx context.Context, sym string, input []b
|
||||
blockedPhoneStr := string(blockedPhonenumber)
|
||||
//Trigger an SMS to inform a user that the blocked account has been reset
|
||||
if phone.IsValidPhoneNumber(blockedPhoneStr) {
|
||||
err = smsservice.SendPINResetSMS(ctx, sessionId, blockedPhoneStr)
|
||||
err = h.sendPINResetSMS(ctx, sessionId, blockedPhoneStr)
|
||||
if err != nil {
|
||||
logg.DebugCtxf(ctx, "Failed to send PIN reset SMS", "error", err)
|
||||
return res, nil
|
||||
@ -1236,9 +1226,6 @@ func (h *MenuHandlers) ResetAccountAuthorized(ctx context.Context, sym string, i
|
||||
// will be sent to the associated session id
|
||||
func (h *MenuHandlers) CheckIdentifier(ctx context.Context, sym string, input []byte) (resource.Result, error) {
|
||||
var res resource.Result
|
||||
|
||||
smsservice := h.smsService
|
||||
|
||||
sessionId, ok := ctx.Value("SessionId").(string)
|
||||
if !ok {
|
||||
return res, fmt.Errorf("missing session")
|
||||
@ -1251,7 +1238,7 @@ func (h *MenuHandlers) CheckIdentifier(ctx context.Context, sym string, input []
|
||||
}
|
||||
res.Content = string(publicKey)
|
||||
//trigger an address sms to be delivered to the associated session id
|
||||
err = smsservice.SendAddressSMS(ctx)
|
||||
err = h.sendAddressSMS(ctx)
|
||||
if err != nil {
|
||||
logg.DebugCtxf(ctx, "Failed to trigger an address sms", "error", err)
|
||||
return res, nil
|
||||
@ -1652,7 +1639,6 @@ func (h *MenuHandlers) TransactionReset(ctx context.Context, sym string, input [
|
||||
func (h *MenuHandlers) InviteValidRecipient(ctx context.Context, sym string, input []byte) (resource.Result, error) {
|
||||
var res resource.Result
|
||||
store := h.userdataStore
|
||||
smsservice := h.smsService
|
||||
|
||||
sessionId, ok := ctx.Value("SessionId").(string)
|
||||
if !ok {
|
||||
@ -1674,7 +1660,7 @@ func (h *MenuHandlers) InviteValidRecipient(ctx context.Context, sym string, inp
|
||||
return res, nil
|
||||
}
|
||||
|
||||
_, err = smsservice.Accountservice.SendUpsellSMS(ctx, sessionId, string(recipient))
|
||||
_, err = h.accountService.SendUpsellSMS(ctx, sessionId, string(recipient))
|
||||
if err != nil {
|
||||
res.Content = l.Get("Your invite request for %s to Sarafu Network failed. Please try again later.", string(recipient))
|
||||
return res, nil
|
||||
@ -2523,3 +2509,62 @@ func (h *MenuHandlers) ClearTemporaryValue(ctx context.Context, sym string, inpu
|
||||
}
|
||||
return res, nil
|
||||
}
|
||||
|
||||
// SendAddressSMS will triger an SMS when a user navigates to the my address node.The SMS will be sent to the associated phonenumber.
|
||||
func (h *MenuHandlers) sendAddressSMS(ctx context.Context) error {
|
||||
store := h.userdataStore
|
||||
|
||||
sessionId, ok := ctx.Value("SessionId").(string)
|
||||
if !ok {
|
||||
return fmt.Errorf("missing session")
|
||||
}
|
||||
|
||||
publicKey, err := store.ReadEntry(ctx, sessionId, storedb.DATA_PUBLIC_KEY)
|
||||
if err != nil {
|
||||
logg.ErrorCtxf(ctx, "failed to read publicKey entry with", "key", storedb.DATA_PUBLIC_KEY, "error", err)
|
||||
return err
|
||||
}
|
||||
originPhone, err := phone.FormatPhoneNumber(sessionId)
|
||||
if err != nil {
|
||||
logg.DebugCtxf(ctx, "Failed to format origin phonenumber", "sessionid", sessionId)
|
||||
return nil
|
||||
}
|
||||
|
||||
if !phone.IsValidPhoneNumber(originPhone) {
|
||||
logg.InfoCtxf(ctx, "Invalid origin phone number", "origin phonenumber", originPhone)
|
||||
return fmt.Errorf("invalid origin phone number")
|
||||
}
|
||||
err = h.accountService.SendAddressSMS(ctx, string(publicKey), sessionId)
|
||||
if err != nil {
|
||||
logg.DebugCtxf(ctx, "Failed to send address sms", "error", err)
|
||||
return fmt.Errorf("Failed to send address sms: %v", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// sendPINResetSMS will send an SMS to a user's phonenumber in the event that the associated account's PIN has been reset.
|
||||
func (h *MenuHandlers) sendPINResetSMS(ctx context.Context, adminPhoneNumber, blockedPhoneNumber string) error {
|
||||
formattedAdminPhone, err := phone.FormatPhoneNumber(adminPhoneNumber)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to format admin phone number: %w", err)
|
||||
}
|
||||
|
||||
formattedBlockedPhone, err := phone.FormatPhoneNumber(blockedPhoneNumber)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to format blocked phone number: %w", err)
|
||||
}
|
||||
|
||||
if !phone.IsValidPhoneNumber(formattedAdminPhone) {
|
||||
return fmt.Errorf("invalid admin phone number")
|
||||
}
|
||||
if !phone.IsValidPhoneNumber(formattedBlockedPhone) {
|
||||
return fmt.Errorf("invalid blocked phone number")
|
||||
}
|
||||
|
||||
err = h.accountService.SendPINResetSMS(ctx, formattedAdminPhone, formattedBlockedPhone)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to send pin reset sms: %v", err)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
@ -1,96 +0,0 @@
|
||||
package sms
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
|
||||
"git.defalsify.org/vise.git/logging"
|
||||
"git.grassecon.net/grassrootseconomics/common/phone"
|
||||
"git.grassecon.net/grassrootseconomics/sarafu-api/remote"
|
||||
"git.grassecon.net/grassrootseconomics/sarafu-vise/store"
|
||||
storedb "git.grassecon.net/grassrootseconomics/sarafu-vise/store/db"
|
||||
)
|
||||
|
||||
var (
|
||||
logg = logging.NewVanilla().WithDomain("smsservice")
|
||||
)
|
||||
|
||||
type SmsService struct {
|
||||
Accountservice remote.AccountService
|
||||
Userdatastore store.UserDataStore
|
||||
}
|
||||
|
||||
// SendUpsellSMS will send an invitation SMS to an unregistered phone number
|
||||
func (smsservice *SmsService) SendUpsellSMS(ctx context.Context, inviterPhone, inviteePhone string) error {
|
||||
if !phone.IsValidPhoneNumber(inviterPhone) {
|
||||
return fmt.Errorf("invalid inviter phone number %v", inviterPhone)
|
||||
}
|
||||
|
||||
if !phone.IsValidPhoneNumber(inviteePhone) {
|
||||
return fmt.Errorf("Invalid invitee phone number %v", inviteePhone)
|
||||
}
|
||||
_, err := smsservice.Accountservice.SendUpsellSMS(ctx, inviterPhone, inviteePhone)
|
||||
if err != nil {
|
||||
return fmt.Errorf("Failed to send upsell sms: %v", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// sendPINResetSMS will send an SMS to a user's phonenumber in the event that the associated account's PIN has been reset.
|
||||
func (smsService *SmsService) SendPINResetSMS(ctx context.Context, adminPhoneNumber, blockedPhoneNumber string) error {
|
||||
formattedAdminPhone, err := phone.FormatPhoneNumber(adminPhoneNumber)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to format admin phone number: %w", err)
|
||||
}
|
||||
|
||||
formattedBlockedPhone, err := phone.FormatPhoneNumber(blockedPhoneNumber)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to format blocked phone number: %w", err)
|
||||
}
|
||||
|
||||
if !phone.IsValidPhoneNumber(formattedAdminPhone) {
|
||||
return fmt.Errorf("invalid admin phone number")
|
||||
}
|
||||
if !phone.IsValidPhoneNumber(formattedBlockedPhone) {
|
||||
return fmt.Errorf("invalid blocked phone number")
|
||||
}
|
||||
|
||||
err = smsService.Accountservice.SendPINResetSMS(ctx, formattedAdminPhone, formattedBlockedPhone)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to send pin reset sms: %v", err)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// SendAddressSMS will triger an SMS when a user navigates to the my address node.The SMS will be sent to the associated phonenumber.
|
||||
func (smsService *SmsService) SendAddressSMS(ctx context.Context) error {
|
||||
store := smsService.Userdatastore
|
||||
sessionId, ok := ctx.Value("SessionId").(string)
|
||||
if !ok {
|
||||
return fmt.Errorf("missing session")
|
||||
}
|
||||
|
||||
publicKey, err := store.ReadEntry(ctx, sessionId, storedb.DATA_PUBLIC_KEY)
|
||||
if err != nil {
|
||||
logg.ErrorCtxf(ctx, "failed to read publicKey entry with", "key", storedb.DATA_PUBLIC_KEY, "error", err)
|
||||
return err
|
||||
}
|
||||
|
||||
originPhone, err := phone.FormatPhoneNumber(sessionId)
|
||||
if err != nil {
|
||||
logg.DebugCtxf(ctx, "Failed to format origin phonenumber", "sessionid", sessionId)
|
||||
return nil
|
||||
}
|
||||
|
||||
if !phone.IsValidPhoneNumber(originPhone) {
|
||||
logg.InfoCtxf(ctx, "Invalid origin phone number", "origin phonenumber", originPhone)
|
||||
return fmt.Errorf("invalid origin phone number")
|
||||
}
|
||||
err = smsService.Accountservice.SendAddressSMS(ctx, string(publicKey), originPhone)
|
||||
if err != nil {
|
||||
logg.DebugCtxf(ctx, "Failed to send address sms", "error", err)
|
||||
return fmt.Errorf("Failed to send address sms: %v", err)
|
||||
}
|
||||
return nil
|
||||
}
|
Loading…
Reference in New Issue
Block a user