Files
owncast/models/webhook.go
T
80850b15d0 feat: Adds a webhook for when a user follows the stream (#4362)
* 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>
2025-11-21 13:47:50 -08:00

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
}