71 lines
1.7 KiB
Go
71 lines
1.7 KiB
Go
package sms_provider
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
"time"
|
|
|
|
"github.com/supabase/auth/internal/conf"
|
|
)
|
|
|
|
// overrides the SmsProvider set to always return the mock provider
|
|
var MockProvider SmsProvider = nil
|
|
|
|
var defaultTimeout time.Duration = time.Second * 10
|
|
|
|
const SMSProvider = "sms"
|
|
const WhatsappProvider = "whatsapp"
|
|
|
|
func init() {
|
|
timeoutStr := os.Getenv("GOTRUE_INTERNAL_HTTP_TIMEOUT")
|
|
if timeoutStr != "" {
|
|
if timeout, err := time.ParseDuration(timeoutStr); err != nil {
|
|
log.Fatalf("error loading GOTRUE_INTERNAL_HTTP_TIMEOUT: %v", err.Error())
|
|
} else if timeout != 0 {
|
|
defaultTimeout = timeout
|
|
}
|
|
}
|
|
}
|
|
|
|
type SmsProvider interface {
|
|
SendMessage(phone, message, channel, otp string) (string, error)
|
|
VerifyOTP(phone, token string) error
|
|
}
|
|
|
|
func GetSmsProvider(config conf.GlobalConfiguration) (SmsProvider, error) {
|
|
if MockProvider != nil {
|
|
return MockProvider, nil
|
|
}
|
|
|
|
switch name := config.Sms.Provider; name {
|
|
case "twilio":
|
|
return NewTwilioProvider(config.Sms.Twilio)
|
|
case "messagebird":
|
|
return NewMessagebirdProvider(config.Sms.Messagebird)
|
|
case "textlocal":
|
|
return NewTextlocalProvider(config.Sms.Textlocal)
|
|
case "vonage":
|
|
return NewVonageProvider(config.Sms.Vonage)
|
|
case "twilio_verify":
|
|
return NewTwilioVerifyProvider(config.Sms.TwilioVerify)
|
|
default:
|
|
return nil, fmt.Errorf("sms Provider %s could not be found", name)
|
|
}
|
|
}
|
|
|
|
func IsValidMessageChannel(channel string, config *conf.GlobalConfiguration) bool {
|
|
if config.Hook.SendSMS.Enabled {
|
|
// channel doesn't matter if SMS hook is enabled
|
|
return true
|
|
}
|
|
switch channel {
|
|
case SMSProvider:
|
|
return true
|
|
case WhatsappProvider:
|
|
return config.Sms.Provider == "twilio" || config.Sms.Provider == "twilio_verify"
|
|
default:
|
|
return false
|
|
}
|
|
}
|