summaryrefslogtreecommitdiff
path: root/internal/api/client/notifications/notificationsget.go
diff options
context:
space:
mode:
authorLibravatar tobi <31960611+tsmethurst@users.noreply.github.com>2024-11-27 18:22:45 +0100
committerLibravatar GitHub <noreply@github.com>2024-11-27 17:22:45 +0000
commit65917f5bb98f1c0a0ce7285c284d25ea843c02c7 (patch)
tree9dd34f87dd8f5fd08ff22e98ba26556486eb6a97 /internal/api/client/notifications/notificationsget.go
parentpull in ncruces/go-sqlite3 v0.20.3 with tetratelabs/wazero v1.8.2 (#3574) (diff)
downloadgotosocial-65917f5bb98f1c0a0ce7285c284d25ea843c02c7.tar.xz
[bugfix] Log + ignore unknown notification types (#3577)
* [bugfix] Log + ignore unknown notification types * pass context to ParseNotificationTypes
Diffstat (limited to 'internal/api/client/notifications/notificationsget.go')
-rw-r--r--internal/api/client/notifications/notificationsget.go47
1 files changed, 32 insertions, 15 deletions
diff --git a/internal/api/client/notifications/notificationsget.go b/internal/api/client/notifications/notificationsget.go
index 841768c63..7caadbe7d 100644
--- a/internal/api/client/notifications/notificationsget.go
+++ b/internal/api/client/notifications/notificationsget.go
@@ -18,11 +18,14 @@
package notifications
import (
+ "context"
"net/http"
"github.com/gin-gonic/gin"
apiutil "github.com/superseriousbusiness/gotosocial/internal/api/util"
"github.com/superseriousbusiness/gotosocial/internal/gtserror"
+ "github.com/superseriousbusiness/gotosocial/internal/gtsmodel"
+ "github.com/superseriousbusiness/gotosocial/internal/log"
"github.com/superseriousbusiness/gotosocial/internal/oauth"
"github.com/superseriousbusiness/gotosocial/internal/paging"
)
@@ -151,18 +154,6 @@ func (m *Module) NotificationsGETHandler(c *gin.Context) {
return
}
- types, errWithCode := apiutil.ParseNotificationTypes(c.QueryArray(TypesKey))
- if errWithCode != nil {
- apiutil.ErrorHandler(c, errWithCode, m.processor.InstanceGetV1)
- return
- }
-
- exclTypes, errWithCode := apiutil.ParseNotificationTypes(c.QueryArray(ExcludeTypesKey))
- if errWithCode != nil {
- apiutil.ErrorHandler(c, errWithCode, m.processor.InstanceGetV1)
- return
- }
-
page, errWithCode := paging.ParseIDPage(c,
1, // min limit
80, // max limit
@@ -173,12 +164,13 @@ func (m *Module) NotificationsGETHandler(c *gin.Context) {
return
}
+ ctx := c.Request.Context()
resp, errWithCode := m.processor.Timeline().NotificationsGet(
- c.Request.Context(),
+ ctx,
authed,
page,
- types,
- exclTypes,
+ ParseNotificationTypes(ctx, c.QueryArray(TypesKey)), // Include types.
+ ParseNotificationTypes(ctx, c.QueryArray(ExcludeTypesKey)), // Exclude types.
)
if errWithCode != nil {
apiutil.ErrorHandler(c, errWithCode, m.processor.InstanceGetV1)
@@ -191,3 +183,28 @@ func (m *Module) NotificationsGETHandler(c *gin.Context) {
apiutil.JSON(c, http.StatusOK, resp.Items)
}
+
+// ParseNotificationTypes converts the given slice of string values
+// to gtsmodel notification types, logging + skipping unknown types.
+func ParseNotificationTypes(
+ ctx context.Context,
+ values []string,
+) []gtsmodel.NotificationType {
+ if len(values) == 0 {
+ return nil
+ }
+
+ ntypes := make([]gtsmodel.NotificationType, 0, len(values))
+ for _, value := range values {
+ ntype := gtsmodel.NewNotificationType(value)
+ if ntype == gtsmodel.NotificationUnknown {
+ // Type we don't know about (yet), log and ignore it.
+ log.Debugf(ctx, "ignoring unknown type %s", value)
+ continue
+ }
+
+ ntypes = append(ntypes, ntype)
+ }
+
+ return ntypes
+}