diff --git a/ipe/channel.go b/ipe/channel.go index 3ed2aff..aafec9e 100644 --- a/ipe/channel.go +++ b/ipe/channel.go @@ -7,7 +7,6 @@ package ipe import ( "encoding/json" "errors" - "strings" "sync" "time" @@ -215,7 +214,7 @@ func (c *channel) Publish(a *app, event rawEvent, ignore string) error { subs.Connection.Publish(newResponseEvent(event.Event, event.Channel, v)) } else { // Webhook - if strings.HasPrefix(event.Event, "client-") { + if utils.IsClientEvent(event.Event) { a.TriggerClientEventHook(c, subs, event.Event, v) } } diff --git a/ipe/websocket.go b/ipe/websocket.go index 57cc65b..aafedbd 100644 --- a/ipe/websocket.go +++ b/ipe/websocket.go @@ -171,7 +171,7 @@ func onMessage(conn *websocket.Conn, w http.ResponseWriter, r *http.Request, ses } default: // CLient Events ?? // see http://pusher.com/docs/client_api_guide/client_events#trigger-events - if strings.HasPrefix(event.Event, "client-") { + if utils.IsClientEvent(event.Event) { if !app.UserEvents { emitWSError(newGenericError("To send client events, you must enable this feature in the Settings."), conn) } diff --git a/utils/utils.go b/utils/utils.go index 51b4ce2..1f34630 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -40,10 +40,17 @@ func IsChannelNameValid(channelName string) bool { return validChannelName.Match([]byte(channelName)) } +// IsPrivateChannel Verify if the channel name represents a private channel func IsPrivateChannel(channelName string) bool { return strings.HasPrefix(channelName, "private-") } +// IsPresenceChannel Verify if the channel name represents a presence channel func IsPresenceChannel(channelName string) bool { return strings.HasPrefix(channelName, "presence-") } + +// IsClientEvent Verify if the event name represents a client event type +func IsClientEvent(event string) bool { + return strings.HasPrefix(event, "client-") +} diff --git a/utils/utils_test.go b/utils/utils_test.go index 31600e5..df960b4 100644 --- a/utils/utils_test.go +++ b/utils/utils_test.go @@ -95,6 +95,24 @@ func TestIsPresenceChannel_invalid(t *testing.T) { } } +func TestIsClientEvent_valid(t *testing.T) { + name := "client-hello" + ok := IsClientEvent(name) + + if !ok { + t.Errorf("IsClientEvent(%s) == %t, wants %t", name, ok, true) + } +} + +func TestIsClientEvent_invalid(t *testing.T) { + name := "hello" + ok := IsClientEvent(name) + + if ok { + t.Errorf("IsClientEvent(%s) == %t, wants %t", name, ok, false) + } +} + func TestHashMAC(t *testing.T) { message := []byte("hello world") key := []byte("my super secret key")