Manage notification channels instead of an ntfy topic
Mirrors the server's channels API: add/remove channels per user from the Users section. Requires the matching server release. Claude-Session: https://claude.ai/code/session_016mBLURvJoMuUEr9cB2RpUN
This commit is contained in:
+21
-10
@@ -623,21 +623,32 @@ func (c *Client) CreateUser(username, email string) (*User, error) {
|
||||
return &user, c.do(req, &user)
|
||||
}
|
||||
|
||||
// SetUserNotifyTarget points a user's push notifications at an ntfy topic.
|
||||
// AddChannel gives a user a notification channel: a provider type the server
|
||||
// has configured ("ntfy") and an address that provider understands (a topic).
|
||||
//
|
||||
// An empty topic clears it: the server stores NULL, and that user's incidents
|
||||
// page the shared fallback topic instead — which carries no Acknowledge button,
|
||||
// because anyone subscribed to it could otherwise acknowledge as somebody else.
|
||||
func (c *Client) SetUserNotifyTarget(userID int64, topic string) (*User, error) {
|
||||
// With no channel a user's incidents page the shared fallback instead, which
|
||||
// carries no Acknowledge button, because anyone subscribed to it could
|
||||
// otherwise acknowledge as somebody else.
|
||||
func (c *Client) AddChannel(userID int64, typ, address string) (*NotificationChannel, error) {
|
||||
body := struct {
|
||||
NtfyTopic string `json:"ntfy_topic"`
|
||||
}{NtfyTopic: topic}
|
||||
req, err := c.newRequestWithBody(http.MethodPut, fmt.Sprintf("/api/users/%d/notify", userID), body)
|
||||
Type string `json:"type"`
|
||||
Address string `json:"address"`
|
||||
}{Type: typ, Address: address}
|
||||
req, err := c.newRequestWithBody(http.MethodPost, fmt.Sprintf("/api/users/%d/channels", userID), body)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
var user User
|
||||
return &user, c.do(req, &user)
|
||||
var ch NotificationChannel
|
||||
return &ch, c.do(req, &ch)
|
||||
}
|
||||
|
||||
// RemoveChannel deletes one of a user's notification channels.
|
||||
func (c *Client) RemoveChannel(userID, channelID int64) error {
|
||||
req, err := c.newRequest(http.MethodDelete, fmt.Sprintf("/api/users/%d/channels/%d", userID, channelID))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return c.do(req, nil)
|
||||
}
|
||||
|
||||
func (c *Client) DeleteUser(id int64) error {
|
||||
|
||||
Reference in New Issue
Block a user