From 2e6eb4e0a9dc64ce3ef5a3025de819759f146758 Mon Sep 17 00:00:00 2001 From: Till Faelligen Date: Wed, 19 Jan 2022 17:44:52 +0100 Subject: [PATCH] Remove ToPresenceStatus Use Presence struct field --- clientapi/routing/presence.go | 4 ++-- federationapi/internal/perform.go | 2 +- federationapi/routing/send.go | 9 ++++++++- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/clientapi/routing/presence.go b/clientapi/routing/presence.go index ea1a6a21f..df94a12d5 100644 --- a/clientapi/routing/presence.go +++ b/clientapi/routing/presence.go @@ -150,9 +150,9 @@ func GetPresence(req *http.Request, resp.StatusMsg = presence.StatusMsg resp.CurrentlyActive = lastActive <= time.Minute*5 if !resp.CurrentlyActive { - presence.PresenceStatus = types.Unavailable + presence.Presence = types.Unavailable } - resp.Presence = presence.PresenceStatus.String() + resp.Presence = presence.Presence.String() return util.JSONResponse{ Code: http.StatusOK, JSON: resp, diff --git a/federationapi/internal/perform.go b/federationapi/internal/perform.go index c1c836fbf..331cd758f 100644 --- a/federationapi/internal/perform.go +++ b/federationapi/internal/perform.go @@ -176,7 +176,7 @@ func (r *FederationInternalAPI) sendPresenceData( ev := eduserverAPI.FederationPresenceSingle{ CurrentlyActive: lastActiveTS < time.Minute*5, LastActiveAgo: int(lastActiveTS.Milliseconds()), - Presence: presence.Presence, + Presence: presence.Presence.String(), UserID: presence.UserID, StatusMsg: presence.StatusMsg, } diff --git a/federationapi/routing/send.go b/federationapi/routing/send.go index 91a923159..5013172c8 100644 --- a/federationapi/routing/send.go +++ b/federationapi/routing/send.go @@ -20,6 +20,7 @@ import ( "errors" "fmt" "net/http" + "strings" "sync" "time" @@ -577,8 +578,14 @@ func (t *txnReq) handlePresence(ctx context.Context, e gomatrixserverlib.EDU) { return } for _, presence := range payload.Push { + p := strings.TrimSpace(strings.ToLower(presence.Presence)) + v, ok := types.KnownPresence[p] + if !ok { + util.GetLogger(ctx).WithField("presence", p).Warnf("dropping unknown presence") + continue + } timestamp := gomatrixserverlib.AsTimestamp(now.Add(-(time.Millisecond * time.Duration(presence.LastActiveAgo)))) - if err := eduserverAPI.SetPresence(ctx, t.eduAPI, t.userAPI, presence.UserID, presence.StatusMsg, types.ToPresenceStatus(presence.Presence), timestamp); err != nil { + if err := eduserverAPI.SetPresence(ctx, t.eduAPI, t.userAPI, presence.UserID, presence.StatusMsg, v, timestamp); err != nil { util.GetLogger(ctx).WithError(err).Error("unable to send presence data to edu server") } }