package application import ( "errors" "net/http" "github.com/rs/zerolog/log" ) func (h *ApplicationHandler) SendSMS(w http.ResponseWriter, r *http.Request) { if r.Method != "POST" { w.WriteHeader(http.StatusMethodNotAllowed) return } referer := r.Referer() if err := r.ParseForm(); err != nil { log.Error().Err(err).Msg("Bad request") w.WriteHeader(http.StatusBadRequest) return } message := r.PostFormValue("message") beneficiaryid := r.PostFormValue("beneficiaryid") h.GenerateSMS(beneficiaryid, message) http.Redirect(w, r, referer, http.StatusFound) } func (h *ApplicationHandler) GenerateSMS(recipientid string, message string) error { recipient, err := h.services.GetAccount(recipientid) if err != nil { log.Error().Err(err).Msg("user not found") return err } pn, ok := recipient.Data["phone_number"] if !ok { log.Error().Msg("Beneficiary doesn't have a phone number") return errors.New("missing phone number") } phoneNumber, ok := pn.(string) if !ok { log.Error().Msg("phone number type error") return errors.New("phone number type error") } sender := h.config.GetString("service_name") err = h.services.SMS.Send(phoneNumber, message, sender) if err != nil { log.Error().Err(err).Msg("cannot send SMS") return err } return nil }