From 4d4a93405aee8195f5c27ea0ed8c2b45de76a123 Mon Sep 17 00:00:00 2001 From: Gary Kim Date: Thu, 27 May 2021 18:33:01 -0400 Subject: [PATCH] Update to go-nc-talk v0.2.1 Signed-off-by: Gary Kim --- go.mod | 2 +- go.sum | 4 +- vendor/gomod.garykim.dev/nc-talk/room/room.go | 32 +++++-- vendor/gomod.garykim.dev/nc-talk/user/user.go | 96 +++++++++---------- vendor/modules.txt | 2 +- 5 files changed, 76 insertions(+), 60 deletions(-) diff --git a/go.mod b/go.mod index 1afc4b16..4e1e3ea5 100644 --- a/go.mod +++ b/go.mod @@ -53,7 +53,7 @@ require ( github.com/zfjagann/golang-ring v0.0.0-20210116075443-7c86fdb43134 golang.org/x/image v0.0.0-20210220032944-ac19c3e999fb golang.org/x/oauth2 v0.0.0-20210427180440-81ed05c6b58c - gomod.garykim.dev/nc-talk v0.2.0 + gomod.garykim.dev/nc-talk v0.2.1 gopkg.in/olahol/melody.v1 v1.0.0-20170518105555-d52139073376 layeh.com/gumble v0.0.0-20200818122324-146f9205029b ) diff --git a/go.sum b/go.sum index 8996919a..5fb6d53a 100644 --- a/go.sum +++ b/go.sum @@ -1243,8 +1243,8 @@ golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -gomod.garykim.dev/nc-talk v0.2.0 h1:uTGgDOsz7G3l1YxKVv/daufQII4MBfOPxK7iuKQOtZg= -gomod.garykim.dev/nc-talk v0.2.0/go.mod h1:q/Adot/H7iqi+H4lANopV7/xcMf+sX3AZXUXqiITwok= +gomod.garykim.dev/nc-talk v0.2.1 h1:O+5IAdAhQCh5fiR+Ye3ljsdUktl8fXw1/+3ZMItX8WQ= +gomod.garykim.dev/nc-talk v0.2.1/go.mod h1:q/Adot/H7iqi+H4lANopV7/xcMf+sX3AZXUXqiITwok= google.golang.org/api v0.0.0-20180910000450-7ca32eb868bf/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= google.golang.org/api v0.0.0-20181030000543-1d582fd0359e/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= google.golang.org/api v0.0.0-20181220000619-583d854617af/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= diff --git a/vendor/gomod.garykim.dev/nc-talk/room/room.go b/vendor/gomod.garykim.dev/nc-talk/room/room.go index 2a1dc0c4..4d8a1e06 100644 --- a/vendor/gomod.garykim.dev/nc-talk/room/room.go +++ b/vendor/gomod.garykim.dev/nc-talk/room/room.go @@ -18,6 +18,7 @@ import ( "context" "errors" "io/ioutil" + "net/http" "strconv" "time" @@ -43,6 +44,10 @@ var ( ErrTooManyRequests = errors.New("too many requests") // ErrLackingCapabilities is returned if the server lacks the required capability for the given function ErrLackingCapabilities = errors.New("lacking required capabilities") + // ErrForbidden is returned if the user is forbidden from accessing the requested resource + ErrForbidden = errors.New("request forbidden") + // ErrUnexpectedResponse is returned if the response from the Nextcloud Talk server is not formatted as expected + ErrUnexpectedResponse = errors.New("unexpected response") ) // TalkRoom represents a room in Nextcloud Talk @@ -115,10 +120,16 @@ func (t *TalkRoom) DeleteMessage(messageID int) (*ocs.TalkRoomMessageData, error if err != nil { return nil, err } + if res.StatusCode() != http.StatusOK && res.StatusCode() != http.StatusAccepted { + return nil, ErrUnexpectedReturnCode + } msgInfo, err := ocs.TalkRoomMessageDataUnmarshal(&res.Data) if err != nil { return nil, err } + if len(msgInfo.OCS.TalkRoomMessage) == 0 { + return nil, ErrUnexpectedResponse + } return &msgInfo.OCS.TalkRoomMessage[0], nil } @@ -165,23 +176,28 @@ func (t *TalkRoom) ReceiveMessages(ctx context.Context) (chan ocs.TalkRoomMessag } // If it seems that we no longer have access to the chat for one reason or another, stop the goroutine and set error in the next return. - if res.StatusCode == 404 { + if res.StatusCode == http.StatusNotFound { _ = res.Body.Close() c <- ocs.TalkRoomMessageData{Error: ErrRoomNotFound} return } - if res.StatusCode == 401 { + if res.StatusCode == http.StatusUnauthorized { _ = res.Body.Close() c <- ocs.TalkRoomMessageData{Error: ErrUnauthorized} return } - if res.StatusCode == 429 { + if res.StatusCode == http.StatusTooManyRequests { _ = res.Body.Close() c <- ocs.TalkRoomMessageData{Error: ErrTooManyRequests} return } + if res.StatusCode == http.StatusForbidden { + _ = res.Body.Close() + c <- ocs.TalkRoomMessageData{Error: ErrForbidden} + return + } - if res.StatusCode == 200 { + if res.StatusCode == http.StatusOK { lastKnown = res.Header.Get("X-Chat-Last-Given") data, err := ioutil.ReadAll(res.Body) _ = res.Body.Close() @@ -224,13 +240,13 @@ func (t *TalkRoom) TestConnection() error { return err } switch res.StatusCode() { - case 200: + case http.StatusOK: return nil - case 304: + case http.StatusNotModified: return nil - case 404: + case http.StatusNotFound: return ErrRoomNotFound - case 412: + case http.StatusPreconditionFailed: return ErrNotModeratorInLobby } return ErrUnexpectedReturnCode diff --git a/vendor/gomod.garykim.dev/nc-talk/user/user.go b/vendor/gomod.garykim.dev/nc-talk/user/user.go index 95356411..e557cffa 100644 --- a/vendor/gomod.garykim.dev/nc-talk/user/user.go +++ b/vendor/gomod.garykim.dev/nc-talk/user/user.go @@ -57,52 +57,52 @@ type TalkUserConfig struct { // Capabilities describes the capabilities that the Nextcloud Talk instance is capable of. Visit https://nextcloud-talk.readthedocs.io/en/latest/capabilities/ for more info. type Capabilities struct { AttachmentsFolder string `ocscapability:"config => attachments => folder"` - ChatMaxLength int - Audio bool `ocscapability:"audio"` - Video bool `ocscapability:"video"` - Chat bool `ocscapability:"chat"` - GuestSignaling bool `ocscapability:"guest-signaling"` - EmptyGroupRoom bool `ocscapability:"empty-group-room"` - GuestDisplayNames bool `ocscapability:"guest-display-names"` - MultiRoomUsers bool `ocscapability:"multi-room-users"` - ChatV2 bool `ocscapability:"chat-v2"` - Favorites bool `ocscapability:"favorites"` - LastRoomActivity bool `ocscapability:"last-room-activity"` - NoPing bool `ocscapability:"no-ping"` - SystemMessages bool `ocscapability:"system-messages"` - MentionFlag bool `ocscapability:"mention-flag"` - InCallFlags bool `ocscapability:"in-call-flags"` - InviteByMail bool `ocscapability:"invite-by-mail"` - NotificationLevels bool `ocscapability:"notification-levels"` - InviteGroupsAndMails bool `ocscapability:"invite-groups-and-mails"` - LockedOneToOneRooms bool `ocscapability:"locked-one-to-one-rooms"` - ReadOnlyRooms bool `ocscapability:"read-only-rooms"` - ChatReadMarker bool `ocscapability:"chat-read-marker"` - WebinaryLobby bool `ocscapability:"webinary-lobby"` - StartCallFlag bool `ocscapability:"start-call-flag"` - ChatReplies bool `ocscapability:"chat-replies"` - CirclesSupport bool `ocscapability:"circles-support"` - AttachmentsAllowed bool `ocscapability:"config => attachments => allowed"` - ConversationsCanCreate bool `ocscapability:"config => conversations => can-create"` - ForceMute bool `ocscapability:"force-mute"` - ConversationV2 bool `ocscapability:"conversation-v2"` - ChatReferenceID bool `ocscapability:"chat-reference-id"` - ConversationV3 bool `ocscapability:"conversation-v3"` - ConversationV4 bool `ocscapability:"conversation-v4"` - SIPSupport bool `ocscapability:"sip-support"` - ChatReadStatus bool `ocscapability:"chat-read-status"` - ListableRooms bool `ocscapability:"listable-rooms"` - PhonebookSearch bool `ocscapability:"phonebook-search"` - RaiseHand bool `ocscapability:"raise-hand"` - RoomDescription bool `ocscapability:"room-description"` - DeleteMessages bool `ocscapability:"delete-messages"` - RichObjectSharing bool `ocscapability:"rich-object-sharing"` - ConversationCallFlags bool `ocscapability:"conversation-call-flags"` - GeoLocationSharing bool `ocscapability:"geo-location-sharing"` - ReadPrivacyConfig bool `ocscapability:"config => chat => read-privacy"` - SignalingV3 bool `ocscapability:"signaling-v3"` - TempUserAvatarAPI bool `ocscapability:"temp-user-avatar-api"` - MaxGifSizeConfig int `ocscapability:"config => previews => max-gif-size"` + Audio bool `ocscapability:"audio"` + Video bool `ocscapability:"video"` + Chat bool `ocscapability:"chat"` + GuestSignaling bool `ocscapability:"guest-signaling"` + EmptyGroupRoom bool `ocscapability:"empty-group-room"` + GuestDisplayNames bool `ocscapability:"guest-display-names"` + MultiRoomUsers bool `ocscapability:"multi-room-users"` + ChatV2 bool `ocscapability:"chat-v2"` + Favorites bool `ocscapability:"favorites"` + LastRoomActivity bool `ocscapability:"last-room-activity"` + NoPing bool `ocscapability:"no-ping"` + SystemMessages bool `ocscapability:"system-messages"` + MentionFlag bool `ocscapability:"mention-flag"` + InCallFlags bool `ocscapability:"in-call-flags"` + InviteByMail bool `ocscapability:"invite-by-mail"` + NotificationLevels bool `ocscapability:"notification-levels"` + InviteGroupsAndMails bool `ocscapability:"invite-groups-and-mails"` + LockedOneToOneRooms bool `ocscapability:"locked-one-to-one-rooms"` + ReadOnlyRooms bool `ocscapability:"read-only-rooms"` + ChatReadMarker bool `ocscapability:"chat-read-marker"` + WebinaryLobby bool `ocscapability:"webinary-lobby"` + StartCallFlag bool `ocscapability:"start-call-flag"` + ChatReplies bool `ocscapability:"chat-replies"` + CirclesSupport bool `ocscapability:"circles-support"` + AttachmentsAllowed bool `ocscapability:"config => attachments => allowed"` + ConversationsCanCreate bool `ocscapability:"config => conversations => can-create"` + ForceMute bool `ocscapability:"force-mute"` + ConversationV2 bool `ocscapability:"conversation-v2"` + ChatReferenceID bool `ocscapability:"chat-reference-id"` + ConversationV3 bool `ocscapability:"conversation-v3"` + ConversationV4 bool `ocscapability:"conversation-v4"` + SIPSupport bool `ocscapability:"sip-support"` + ChatReadStatus bool `ocscapability:"chat-read-status"` + ListableRooms bool `ocscapability:"listable-rooms"` + PhonebookSearch bool `ocscapability:"phonebook-search"` + RaiseHand bool `ocscapability:"raise-hand"` + RoomDescription bool `ocscapability:"room-description"` + DeleteMessages bool `ocscapability:"delete-messages"` + RichObjectSharing bool `ocscapability:"rich-object-sharing"` + ConversationCallFlags bool `ocscapability:"conversation-call-flags"` + GeoLocationSharing bool `ocscapability:"geo-location-sharing"` + ReadPrivacyConfig bool `ocscapability:"config => chat => read-privacy"` + SignalingV3 bool `ocscapability:"signaling-v3"` + TempUserAvatarAPI bool `ocscapability:"temp-user-avatar-api"` + MaxGifSizeConfig int `ocscapability:"config => previews => max-gif-size"` + ChatMaxLength int `ocscapability:"config => chat => max-length"` } // RoomInfo contains information about a room @@ -181,11 +181,11 @@ func (t *TalkUser) RequestClient(client request.Client) *request.Client { // GetRooms returns a list of all rooms the user is in func (t *TalkUser) GetRooms() (*[]RoomInfo, error) { endpoint := ocsRoomsv2Endpoint - cap, err := t.Capabilities() + capabilities, err := t.Capabilities() if err != nil { return nil, err } - if cap.ConversationV4 { + if capabilities.ConversationV4 { endpoint = ocsRoomsv4Endpoint } diff --git a/vendor/modules.txt b/vendor/modules.txt index 2608d863..fd35a76a 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -384,7 +384,7 @@ golang.org/x/text/unicode/norm golang.org/x/text/width # golang.org/x/time v0.0.0-20201208040808-7e3f01d25324 golang.org/x/time/rate -# gomod.garykim.dev/nc-talk v0.2.0 +# gomod.garykim.dev/nc-talk v0.2.1 ## explicit gomod.garykim.dev/nc-talk/constants gomod.garykim.dev/nc-talk/ocs