Skip to content

Commit 19c791a

Browse files
committed
Add ability to post discord webhook events
1 parent fad3235 commit 19c791a

1 file changed

Lines changed: 28 additions & 3 deletions

File tree

api/pkg/services/webhook_service.go

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,12 @@ import (
44
"context"
55
"fmt"
66
"net/http"
7+
"strings"
78
"sync"
89
"time"
910

11+
"github.com/NdoleStudio/httpsms/pkg/events"
12+
1013
"github.com/NdoleStudio/httpsms/pkg/entities"
1114
"github.com/NdoleStudio/httpsms/pkg/repositories"
1215
"github.com/NdoleStudio/httpsms/pkg/telemetry"
@@ -194,23 +197,45 @@ func (service *WebhookService) sendNotification(ctx context.Context, event cloud
194197
Client(service.client).
195198
Bearer(token).
196199
Header("X-Event-Type", event.Type()).
197-
BodyJSON(event).
200+
BodyJSON(service.getPayload(ctxLogger, event, webhook)).
198201
ToString(&response).
199202
Fetch(ctx)
200203
if err != nil {
201204
msg := fmt.Sprintf("cannot send [%s] event to webhook [%s] for user [%s]", event.Type(), webhook.URL, webhook.UserID)
202205
ctxLogger.Error(service.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg)))
203206
}
204207

205-
ctxLogger.Info(fmt.Sprintf("sent webhook to url [%s] for event [%s] with ID [%s]", webhook.URL, event.Type(), event.ID()))
208+
ctxLogger.Info(fmt.Sprintf("sent webhook to url [%s] for event [%s] with ID [%s] and response [%s]", webhook.URL, event.Type(), event.ID(), response))
209+
}
210+
211+
func (service *WebhookService) getPayload(ctxLogger telemetry.Logger, event cloudevents.Event, webhook *entities.Webhook) any {
212+
if event.Type() != events.EventTypeMessagePhoneReceived {
213+
return event
214+
}
215+
216+
if !strings.HasPrefix(webhook.URL, "https://discord.com/api/webhooks/") {
217+
return event
218+
}
219+
220+
payload := new(events.MessagePhoneReceivedPayload)
221+
err := event.DataAs(payload)
222+
if err != nil {
223+
ctxLogger.Error(stacktrace.Propagate(err, fmt.Sprintf("cannot unmarshal event [%s] with ID [%s] into [%T]", event.Type(), event.ID(), payload)))
224+
return event
225+
}
226+
227+
return map[string]string{
228+
"username": payload.Contact,
229+
"content": payload.Content,
230+
}
206231
}
207232

208233
func (service *WebhookService) getAuthToken(webhook *entities.Webhook) (string, error) {
209234
token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.StandardClaims{
210235
Audience: webhook.URL,
211236
ExpiresAt: time.Now().UTC().Add(10 * time.Minute).Unix(),
212237
IssuedAt: time.Now().UTC().Unix(),
213-
Issuer: "httpSMS",
238+
Issuer: "api.httpsms.com",
214239
NotBefore: time.Now().UTC().Add(-10 * time.Minute).Unix(),
215240
Subject: string(webhook.UserID),
216241
})

0 commit comments

Comments
 (0)