* feat: Adds a webhook for when a user follow the stream Frontend: Adds a checkbox which renders only when social features are enabled. Backend: - Defines a new type for the event - Implements the webhook including unit testing - Fires the webhook inside the ApproveFollower handler * Removes unnecessary Type fiels from Events struct * refactor: renames SendUserFollowedEvent func to FediverseEngagementFollow and fixes linting errors * fix: fixes unit test to reflect removed Type field from FediverseEngagementFollowEvent * feat: fires webhook also when manual approvals are not required * chore: slight cleanup --------- Co-authored-by: Gabe Kangas <gabek@real-ity.com>
41 lines
989 B
Go
41 lines
989 B
Go
package models
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/owncast/owncast/utils"
|
|
)
|
|
|
|
// Webhook is an event that is sent to 3rd party, external services with details about something that took place within an Owncast server.
|
|
type Webhook struct {
|
|
Timestamp time.Time `json:"timestamp"`
|
|
LastUsed *time.Time `json:"lastUsed"`
|
|
URL string `json:"url"`
|
|
Events []EventType `json:"events"`
|
|
ID int `json:"id"`
|
|
}
|
|
|
|
// For an event to be seen as "valid" it must live in this slice.
|
|
var validEvents = []EventType{
|
|
MessageSent,
|
|
UserJoined,
|
|
UserParted,
|
|
UserNameChanged,
|
|
FediverseEngagementFollow,
|
|
VisibiltyToggled,
|
|
StreamStarted,
|
|
StreamStopped,
|
|
StreamTitleUpdated,
|
|
}
|
|
|
|
// HasValidEvents will verify that all the events provided are valid.
|
|
// This is not a efficient method.
|
|
func HasValidEvents(events []EventType) bool {
|
|
for _, event := range events {
|
|
if _, foundInSlice := utils.FindInSlice(validEvents, event); !foundInSlice {
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
}
|