Outbound live stream notifications (#1663)
* First pass at browser, discord, twilio notifications * Commit updated Javascript packages * Remove twilio notification support * Email notifications/smtp support * Fix Firefox notification support, remove chrome checks * WIP more email work * Add support for twitter notifications * Add stream title to discord and twitter notifications * Update notification registration modal * Fix hide/show email section * Commit updated API documentation * Commit updated Javascript packages * Fix post-rebase missing var * Remove unused var * Handle unsubscribe errors for browser push * Standardize email config prop names * Allow overriding go live email template * Some notifications cleanup * Commit updated Javascript packages * Remove email/smtp/mailjet support * Remove more references to email notifications Co-authored-by: Owncast <owncast@owncast.online>
This commit is contained in:
@@ -40,3 +40,10 @@ type IpBan struct {
|
||||
Notes sql.NullString
|
||||
CreatedAt sql.NullTime
|
||||
}
|
||||
|
||||
type Notification struct {
|
||||
ID int32
|
||||
Channel string
|
||||
Destination string
|
||||
CreatedAt sql.NullTime
|
||||
}
|
||||
|
||||
@@ -70,3 +70,11 @@ SELECT count(*) FROM ip_bans WHERE ip_address = $1;
|
||||
|
||||
-- name: GetIPAddressBans :many
|
||||
SELECT * FROM ip_bans;
|
||||
-- name: AddNotification :exec
|
||||
INSERT INTO notifications (channel, destination) VALUES($1, $2);
|
||||
|
||||
-- name: GetNotificationDestinationsForChannel :many
|
||||
SELECT destination FROM notifications WHERE channel = $1;
|
||||
|
||||
-- name: RemoveNotificationDestinationForChannel :exec
|
||||
DELETE FROM notifications WHERE channel = $1 AND destination = $2;
|
||||
|
||||
@@ -36,6 +36,20 @@ func (q *Queries) AddFollower(ctx context.Context, arg AddFollowerParams) error
|
||||
return err
|
||||
}
|
||||
|
||||
const addNotification = `-- name: AddNotification :exec
|
||||
INSERT INTO notifications (channel, destination) VALUES($1, $2)
|
||||
`
|
||||
|
||||
type AddNotificationParams struct {
|
||||
Channel string
|
||||
Destination string
|
||||
}
|
||||
|
||||
func (q *Queries) AddNotification(ctx context.Context, arg AddNotificationParams) error {
|
||||
_, err := q.db.ExecContext(ctx, addNotification, arg.Channel, arg.Destination)
|
||||
return err
|
||||
}
|
||||
|
||||
const addToAcceptedActivities = `-- name: AddToAcceptedActivities :exec
|
||||
INSERT INTO ap_accepted_activities(iri, actor, type, timestamp) values($1, $2, $3, $4)
|
||||
`
|
||||
@@ -343,6 +357,33 @@ func (q *Queries) GetLocalPostCount(ctx context.Context) (int64, error) {
|
||||
return count, err
|
||||
}
|
||||
|
||||
const getNotificationDestinationsForChannel = `-- name: GetNotificationDestinationsForChannel :many
|
||||
SELECT destination FROM notifications WHERE channel = $1
|
||||
`
|
||||
|
||||
func (q *Queries) GetNotificationDestinationsForChannel(ctx context.Context, channel string) ([]string, error) {
|
||||
rows, err := q.db.QueryContext(ctx, getNotificationDestinationsForChannel, channel)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
var items []string
|
||||
for rows.Next() {
|
||||
var destination string
|
||||
if err := rows.Scan(&destination); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
items = append(items, destination)
|
||||
}
|
||||
if err := rows.Close(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if err := rows.Err(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return items, nil
|
||||
}
|
||||
|
||||
const getObjectFromOutboxByID = `-- name: GetObjectFromOutboxByID :one
|
||||
SELECT value FROM ap_outbox WHERE iri = $1
|
||||
`
|
||||
@@ -489,6 +530,20 @@ func (q *Queries) RemoveIPAddressBan(ctx context.Context, ipAddress string) erro
|
||||
return err
|
||||
}
|
||||
|
||||
const removeNotificationDestinationForChannel = `-- name: RemoveNotificationDestinationForChannel :exec
|
||||
DELETE FROM notifications WHERE channel = $1 AND destination = $2
|
||||
`
|
||||
|
||||
type RemoveNotificationDestinationForChannelParams struct {
|
||||
Channel string
|
||||
Destination string
|
||||
}
|
||||
|
||||
func (q *Queries) RemoveNotificationDestinationForChannel(ctx context.Context, arg RemoveNotificationDestinationForChannelParams) error {
|
||||
_, err := q.db.ExecContext(ctx, removeNotificationDestinationForChannel, arg.Channel, arg.Destination)
|
||||
return err
|
||||
}
|
||||
|
||||
const updateFollowerByIRI = `-- name: UpdateFollowerByIRI :exec
|
||||
UPDATE ap_followers SET inbox = $1, name = $2, username = $3, image = $4 WHERE iri = $5
|
||||
`
|
||||
|
||||
@@ -41,3 +41,10 @@ CREATE TABLE IF NOT EXISTS ap_accepted_activities (
|
||||
"notes" TEXT,
|
||||
"created_at" TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS notifications (
|
||||
"id" INTEGER NOT NULL PRIMARY KEY,
|
||||
"channel" TEXT NOT NULL,
|
||||
"destination" TEXT NOT NULL,
|
||||
"created_at" TIMESTAMP DEFAULT CURRENT_TIMESTAMP);
|
||||
CREATE INDEX channel_index ON notifications (channel);
|
||||
|
||||
Reference in New Issue
Block a user