Documentation ¶
Index ¶
- func DecodeAndValidateForm(form interface{}, r *http.Request) error
- func DecodeAndValidateJSON(envelope interface{}, r *http.Request) error
- func DecodeAndValidateXML(envelope interface{}, r *http.Request) error
- func DecodePossibleBase64(original string) string
- func GetTextAndAttachments(m courier.Msg) string
- func NameFromFirstLastUsername(first string, last string, username string) string
- func NewExternalIDStatusHandler(h *BaseHandler, statuses map[string]courier.MsgStatusValue, ...) courier.ChannelHandleFunc
- func NewTelReceiveHandler(h *BaseHandler, fromField string, bodyField string) courier.ChannelHandleFunc
- func RunChannelBenchmarks(b *testing.B, channels []courier.Channel, handler courier.ChannelHandler, ...)
- func RunChannelSendTestCases(t *testing.T, channel courier.Channel, handler courier.ChannelHandler, ...)
- func RunChannelTestCases(t *testing.T, channels []courier.Channel, handler courier.ChannelHandler, ...)
- func Sp(str interface{}) *string
- func SplitAttachment(attachment string) (string, string)
- func SplitMsg(text string, max int) []string
- func StrictTelForCountry(number string, country string) (urns.URN, error)
- func Tp(tm time.Time) *time.Time
- func Validate(form interface{}) error
- func WriteAndLogRequestError(ctx context.Context, h ResponseWriter, channel courier.Channel, ...) error
- func WriteAndLogRequestIgnored(ctx context.Context, h ResponseWriter, channel courier.Channel, ...) error
- func WriteMsgStatusAndResponse(ctx context.Context, h ResponseWriter, channel courier.Channel, ...) ([]courier.Event, error)
- func WriteMsgsAndResponse(ctx context.Context, h ResponseWriter, msgs []courier.Msg, ...) ([]courier.Event, error)
- type BaseHandler
- func (h *BaseHandler) Backend() courier.Backend
- func (h *BaseHandler) ChannelName() string
- func (h *BaseHandler) ChannelType() courier.ChannelType
- func (h *BaseHandler) Server() courier.Server
- func (h *BaseHandler) SetServer(server courier.Server)
- func (h *BaseHandler) WriteMsgSuccessResponse(ctx context.Context, w http.ResponseWriter, r *http.Request, ...) error
- func (h *BaseHandler) WriteRequestError(ctx context.Context, w http.ResponseWriter, r *http.Request, err error) error
- func (h *BaseHandler) WriteRequestIgnored(ctx context.Context, w http.ResponseWriter, r *http.Request, details string) error
- func (h *BaseHandler) WriteStatusSuccessResponse(ctx context.Context, w http.ResponseWriter, r *http.Request, ...) error
- type ChannelHandleTestCase
- type ChannelSendTestCase
- type MockedRequest
- type MockedResponse
- type RequestPrepFunc
- type ResponseWriter
- type SendPrepFunc
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func DecodeAndValidateForm ¶
DecodeAndValidateForm takes the passed in form and attempts to parse and validate it from the URL query parameters as well as any POST parameters of the passed in request
func DecodeAndValidateJSON ¶
DecodeAndValidateJSON takes the passed in envelope and tries to unmarshal it from the body of the passed in request, then validating it
func DecodeAndValidateXML ¶
DecodeAndValidateXML takes the passed in envelope and tries to unmarshal it from the body of the passed in request, then validating it
func DecodePossibleBase64 ¶
DecodePossibleBase64 detects and decodes a possibly base64 encoded messages by doing:
- check it's at least 60 characters
- check its length is divisible by 4
- check that there's no whitespace
- check the decoded string contains at least 50% ascii
func GetTextAndAttachments ¶
GetTextAndAttachments returns both the text of our message as well as any attachments, newline delimited
func NameFromFirstLastUsername ¶
NameFromFirstLastUsername is a utility function to build a contact's name from the passed in values, all of which can be empty
func NewExternalIDStatusHandler ¶
func NewExternalIDStatusHandler(h *BaseHandler, statuses map[string]courier.MsgStatusValue, externalIDField string, statusField string) courier.ChannelHandleFunc
NewExternalIDStatusHandler creates a new status handler given the passed in status map and fields
func NewTelReceiveHandler ¶
func NewTelReceiveHandler(h *BaseHandler, fromField string, bodyField string) courier.ChannelHandleFunc
NewTelReceiveHandler creates a new receive handler given the passed in text and from fields
func RunChannelBenchmarks ¶
func RunChannelBenchmarks(b *testing.B, channels []courier.Channel, handler courier.ChannelHandler, testCases []ChannelHandleTestCase)
RunChannelBenchmarks runs all the passed in test cases for the passed in channels
func RunChannelSendTestCases ¶
func RunChannelSendTestCases(t *testing.T, channel courier.Channel, handler courier.ChannelHandler, testCases []ChannelSendTestCase, setupBackend func(*courier.MockBackend))
RunChannelSendTestCases runs all the passed in test cases against the channel
func RunChannelTestCases ¶
func RunChannelTestCases(t *testing.T, channels []courier.Channel, handler courier.ChannelHandler, testCases []ChannelHandleTestCase)
RunChannelTestCases runs all the passed in tests cases for the passed in channel configurations
func Sp ¶
func Sp(str interface{}) *string
Sp is a utility method to get the pointer to the passed in string
func SplitAttachment ¶
SplitAttachment takes an attachment string and returns the media type and URL for the attachment
func StrictTelForCountry ¶
StrictTelForCountry wraps urns.NewURNTelForCountry but is stricter in what it accepts. Incoming tels must be numeric or we will return an error. (IE, alphanumeric shortcodes are not ok)
func Validate ¶
func Validate(form interface{}) error
Validate validates the passe din struct using our shared validator instance
func WriteAndLogRequestError ¶
func WriteAndLogRequestError(ctx context.Context, h ResponseWriter, channel courier.Channel, w http.ResponseWriter, r *http.Request, err error) error
WriteAndLogRequestError logs the passed in error and writes the response to the response writer
func WriteAndLogRequestIgnored ¶
func WriteAndLogRequestIgnored(ctx context.Context, h ResponseWriter, channel courier.Channel, w http.ResponseWriter, r *http.Request, details string) error
WriteAndLogRequestIgnored logs that the passed in request was ignored and writes the response to the response writer
func WriteMsgStatusAndResponse ¶
func WriteMsgStatusAndResponse(ctx context.Context, h ResponseWriter, channel courier.Channel, status courier.MsgStatus, w http.ResponseWriter, r *http.Request) ([]courier.Event, error)
WriteMsgStatusAndResponse write the passed in status to our backend
func WriteMsgsAndResponse ¶
func WriteMsgsAndResponse(ctx context.Context, h ResponseWriter, msgs []courier.Msg, w http.ResponseWriter, r *http.Request) ([]courier.Event, error)
WriteMsgsAndResponse writes the passed in message to our backend
Types ¶
type BaseHandler ¶
type BaseHandler struct {
// contains filtered or unexported fields
}
BaseHandler is the base class for most handlers, it just stored the server, name and channel type for the handler
func NewBaseHandler ¶
func NewBaseHandler(channelType courier.ChannelType, name string) BaseHandler
NewBaseHandler returns a newly constructed BaseHandler with the passed in parameters
func (*BaseHandler) Backend ¶
func (h *BaseHandler) Backend() courier.Backend
Backend returns the backend instance on the BaseHandler
func (*BaseHandler) ChannelName ¶
func (h *BaseHandler) ChannelName() string
ChannelName returns the name of the channel this handler deals with
func (*BaseHandler) ChannelType ¶
func (h *BaseHandler) ChannelType() courier.ChannelType
ChannelType returns the channel type that this handler deals with
func (*BaseHandler) Server ¶
func (h *BaseHandler) Server() courier.Server
Server returns the server instance on the BaseHandler
func (*BaseHandler) SetServer ¶
func (h *BaseHandler) SetServer(server courier.Server)
SetServer can be used to change the server on a BaseHandler
func (*BaseHandler) WriteMsgSuccessResponse ¶
func (h *BaseHandler) WriteMsgSuccessResponse(ctx context.Context, w http.ResponseWriter, r *http.Request, msgs []courier.Msg) error
WriteMsgSuccessResponse writes a success response for the messages
func (*BaseHandler) WriteRequestError ¶
func (h *BaseHandler) WriteRequestError(ctx context.Context, w http.ResponseWriter, r *http.Request, err error) error
WriteRequestError writes the passed in error to our response writer
func (*BaseHandler) WriteRequestIgnored ¶
func (h *BaseHandler) WriteRequestIgnored(ctx context.Context, w http.ResponseWriter, r *http.Request, details string) error
WriteRequestIgnored writes an ignored payload to our response writer
func (*BaseHandler) WriteStatusSuccessResponse ¶
func (h *BaseHandler) WriteStatusSuccessResponse(ctx context.Context, w http.ResponseWriter, r *http.Request, statuses []courier.MsgStatus) error
WriteStatusSuccessResponse writes a success response for the statuses
type ChannelHandleTestCase ¶
type ChannelHandleTestCase struct { Label string URL string Data string Status int Response string Headers map[string]string Name *string Text *string URN *string URNAuth *string Attachment *string Attachments []string Date *time.Time MsgStatus *string ChannelEvent *string ChannelEventExtra map[string]interface{} ExternalID *string ID int64 PrepRequest RequestPrepFunc }
ChannelHandleTestCase defines the test values for a particular test case
type ChannelSendTestCase ¶
type ChannelSendTestCase struct { Label string Text string URN string URNAuth string Attachments []string QuickReplies []string HighPriority bool ResponseToID int64 ResponseToExternalID string Metadata json.RawMessage ResponseStatus int ResponseBody string Responses map[MockedRequest]MockedResponse Path string URLParams map[string]string PostParams map[string]string RequestBody string Headers map[string]string Error string Status string ExternalID string Stopped bool ContactURNs map[string]bool SendPrep SendPrepFunc }
ChannelSendTestCase defines the test values for a particular test case
type MockedRequest ¶
MockedRequest is a fake HTTP request
type MockedResponse ¶
MockedResponse is a fake HTTP response
type RequestPrepFunc ¶
RequestPrepFunc is our type for a hook for tests to use before a request is fired in a test
type ResponseWriter ¶
type ResponseWriter interface { Backend() courier.Backend WriteStatusSuccessResponse(ctx context.Context, w http.ResponseWriter, r *http.Request, statuses []courier.MsgStatus) error WriteMsgSuccessResponse(ctx context.Context, w http.ResponseWriter, r *http.Request, msgs []courier.Msg) error WriteRequestError(ctx context.Context, w http.ResponseWriter, r *http.Request, err error) error WriteRequestIgnored(ctx context.Context, w http.ResponseWriter, r *http.Request, msg string) error }
ResponseWriter interace with response methods for success responses
type SendPrepFunc ¶
SendPrepFunc allows test cases to modify the channel, msg or server before a message is sent