From 1fccc59c0171b1079a613c713b0ec0e588505c9e Mon Sep 17 00:00:00 2001 From: headlessdev Date: Tue, 29 Apr 2025 22:52:29 +0200 Subject: [PATCH] Add Echobell provider --- agent/internal/database/database.go | 4 +-- agent/internal/models/models.go | 1 + agent/internal/notifications/notifications.go | 27 +++++++++++++++++++ app/api/notifications/add/route.ts | 6 ++--- app/dashboard/settings/Settings.tsx | 14 +--------- i18n/languages/de.json | 3 +-- i18n/languages/en.json | 3 +-- .../20250429204709_echobell_fix/migration.sql | 8 ++++++ prisma/schema.prisma | 1 - 9 files changed, 43 insertions(+), 24 deletions(-) create mode 100644 prisma/migrations/20250429204709_echobell_fix/migration.sql diff --git a/agent/internal/database/database.go b/agent/internal/database/database.go index 42330a1..41a8556 100644 --- a/agent/internal/database/database.go +++ b/agent/internal/database/database.go @@ -86,7 +86,7 @@ func LoadNotifications(db *sql.DB) ([]models.Notification, error) { rows, err := db.Query( `SELECT id, enabled, type, "smtpHost", "smtpPort", "smtpFrom", "smtpUser", "smtpPass", "smtpSecure", "smtpTo", "telegramChatId", "telegramToken", "discordWebhook", "gotifyUrl", "gotifyToken", "ntfyUrl", "ntfyToken", - "pushoverUrl", "pushoverToken", "pushoverUser" + "pushoverUrl", "pushoverToken", "pushoverUser", "echobellUrl" FROM notification WHERE enabled = true`, ) @@ -103,7 +103,7 @@ func LoadNotifications(db *sql.DB) ([]models.Notification, error) { &n.SMTPHost, &n.SMTPPort, &n.SMTPFrom, &n.SMTPUser, &n.SMTPPass, &n.SMTPSecure, &n.SMTPTo, &n.TelegramChatID, &n.TelegramToken, &n.DiscordWebhook, &n.GotifyUrl, &n.GotifyToken, &n.NtfyUrl, &n.NtfyToken, - &n.PushoverUrl, &n.PushoverToken, &n.PushoverUser, + &n.PushoverUrl, &n.PushoverToken, &n.PushoverUser, &n.EchobellURL, ); err != nil { fmt.Printf("Error scanning notification: %v\n", err) continue diff --git a/agent/internal/models/models.go b/agent/internal/models/models.go index 5a73718..6bb27e1 100644 --- a/agent/internal/models/models.go +++ b/agent/internal/models/models.go @@ -94,4 +94,5 @@ type Notification struct { PushoverUrl sql.NullString PushoverToken sql.NullString PushoverUser sql.NullString + EchobellURL sql.NullString } diff --git a/agent/internal/notifications/notifications.go b/agent/internal/notifications/notifications.go index 37b459d..0e9ca28 100644 --- a/agent/internal/notifications/notifications.go +++ b/agent/internal/notifications/notifications.go @@ -84,6 +84,10 @@ func (ns *NotificationSender) SendSpecificNotification(n models.Notification, me if n.PushoverUrl.Valid && n.PushoverToken.Valid && n.PushoverUser.Valid { ns.sendPushover(n, message) } + case "echobell": + if n.EchobellURL.Valid { + ns.sendEchobell(n, message) + } } } @@ -237,3 +241,26 @@ func (ns *NotificationSender) sendPushover(n models.Notification, message string fmt.Printf("Pushover: ERROR status code: %d\n", resp.StatusCode) } } + +func (ns *NotificationSender) sendEchobell(n models.Notification, message string) { + jsonData := fmt.Sprintf(`{"message": "%s"}`, message) + req, err := http.NewRequest("POST", n.EchobellURL.String, strings.NewReader(jsonData)) + if err != nil { + fmt.Printf("Echobell: ERROR creating request: %v\n", err) + return + } + + req.Header.Set("Content-Type", "application/json") + + client := &http.Client{Timeout: 5 * time.Second} + resp, err := client.Do(req) + if err != nil { + fmt.Printf("Echobell: ERROR sending request: %v\n", err) + return + } + defer resp.Body.Close() + + if resp.StatusCode != http.StatusOK { + fmt.Printf("Echobell: ERROR status code: %d\n", resp.StatusCode) + } +} diff --git a/app/api/notifications/add/route.ts b/app/api/notifications/add/route.ts index e3c7376..db6a271 100644 --- a/app/api/notifications/add/route.ts +++ b/app/api/notifications/add/route.ts @@ -22,13 +22,12 @@ interface AddRequest { pushoverToken?: string; pushoverUser?: string; echobellURL?: string; - echobellData?: string; } export async function POST(request: NextRequest) { try { const body: AddRequest = await request.json(); - const { type, name, smtpHost, smtpPort, smtpSecure, smtpUsername, smtpPassword, smtpFrom, smtpTo, telegramToken, telegramChatId, discordWebhook, gotifyUrl, gotifyToken, ntfyUrl, ntfyToken, pushoverUrl, pushoverToken, pushoverUser, echobellURL, echobellData } = body; + const { type, name, smtpHost, smtpPort, smtpSecure, smtpUsername, smtpPassword, smtpFrom, smtpTo, telegramToken, telegramChatId, discordWebhook, gotifyUrl, gotifyToken, ntfyUrl, ntfyToken, pushoverUrl, pushoverToken, pushoverUser, echobellURL } = body; const notification = await prisma.notification.create({ data: { @@ -51,8 +50,7 @@ export async function POST(request: NextRequest) { pushoverUrl: pushoverUrl, pushoverToken: pushoverToken, pushoverUser: pushoverUser, - echobellURL: echobellURL, - echobellData: echobellData, + echobellURL: echobellURL } }); diff --git a/app/dashboard/settings/Settings.tsx b/app/dashboard/settings/Settings.tsx index 6c8ca22..81bdd89 100644 --- a/app/dashboard/settings/Settings.tsx +++ b/app/dashboard/settings/Settings.tsx @@ -83,7 +83,6 @@ export default function Settings() { const [pushoverToken, setPushoverToken] = useState("") const [pushoverUser, setPushoverUser] = useState("") const [echobellURL, setEchobellURL] = useState("") - const [echobellData, setEchobellData] = useState("") const [language, setLanguage] = useState("english") const [notifications, setNotifications] = useState([]) @@ -193,7 +192,6 @@ export default function Settings() { pushoverToken: pushoverToken, pushoverUser: pushoverUser, echobellURL: echobellURL, - echobellData: echobellData, }) getNotifications() } catch (error: any) { @@ -701,17 +699,7 @@ export default function Settings() { onChange={(e) => setEchobellURL(e.target.value)} /> -
- -