mirror of
https://github.com/matrix-org/dendrite.git
synced 2026-01-16 10:33:11 -06:00
Tweak getting HistoryVisibilityForRoom
This commit is contained in:
parent
6bf1912525
commit
aee546f2b9
|
|
@ -13,8 +13,6 @@
|
||||||
package auth
|
package auth
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
|
||||||
|
|
||||||
"github.com/matrix-org/gomatrixserverlib"
|
"github.com/matrix-org/gomatrixserverlib"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -30,7 +28,7 @@ func IsServerAllowed(
|
||||||
historyVisibility := HistoryVisibilityForRoom(authEvents)
|
historyVisibility := HistoryVisibilityForRoom(authEvents)
|
||||||
|
|
||||||
// 1. If the history_visibility was set to world_readable, allow.
|
// 1. If the history_visibility was set to world_readable, allow.
|
||||||
if historyVisibility == "world_readable" {
|
if historyVisibility == gomatrixserverlib.HistoryVisibilityWorldReadable {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
// 2. If the user's membership was join, allow.
|
// 2. If the user's membership was join, allow.
|
||||||
|
|
@ -39,12 +37,12 @@ func IsServerAllowed(
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
// 3. If history_visibility was set to shared, and the user joined the room at any point after the event was sent, allow.
|
// 3. If history_visibility was set to shared, and the user joined the room at any point after the event was sent, allow.
|
||||||
if historyVisibility == "shared" && serverCurrentlyInRoom {
|
if historyVisibility == gomatrixserverlib.HistoryVisibilityShared && serverCurrentlyInRoom {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
// 4. If the user's membership was invite, and the history_visibility was set to invited, allow.
|
// 4. If the user's membership was invite, and the history_visibility was set to invited, allow.
|
||||||
invitedUserExists := IsAnyUserOnServerWithMembership(serverName, authEvents, gomatrixserverlib.Invite)
|
invitedUserExists := IsAnyUserOnServerWithMembership(serverName, authEvents, gomatrixserverlib.Invite)
|
||||||
if invitedUserExists && historyVisibility == "invited" {
|
if invitedUserExists && historyVisibility == gomatrixserverlib.HistoryVisibilityInvited {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -52,27 +50,16 @@ func IsServerAllowed(
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
func HistoryVisibilityForRoom(authEvents []*gomatrixserverlib.Event) string {
|
func HistoryVisibilityForRoom(authEvents []*gomatrixserverlib.Event) gomatrixserverlib.HistoryVisibility {
|
||||||
// https://matrix.org/docs/spec/client_server/r0.6.0#id87
|
// https://matrix.org/docs/spec/client_server/r0.6.0#id87
|
||||||
// By default if no history_visibility is set, or if the value is not understood, the visibility is assumed to be shared.
|
// By default if no history_visibility is set, or if the value is not understood, the visibility is assumed to be shared.
|
||||||
visibility := "shared"
|
visibility := gomatrixserverlib.HistoryVisibilityShared
|
||||||
knownStates := []string{"invited", "joined", "shared", "world_readable"}
|
|
||||||
for _, ev := range authEvents {
|
for _, ev := range authEvents {
|
||||||
if ev.Type() != gomatrixserverlib.MRoomHistoryVisibility {
|
if ev.Type() != gomatrixserverlib.MRoomHistoryVisibility {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
// TODO: This should be HistoryVisibilityContent to match things like 'MemberContent'. Do this when moving to GMSL
|
if vis, err := ev.HistoryVisibility(); err == nil {
|
||||||
content := struct {
|
return vis
|
||||||
HistoryVisibility string `json:"history_visibility"`
|
|
||||||
}{}
|
|
||||||
if err := json.Unmarshal(ev.Content(), &content); err != nil {
|
|
||||||
break // value is not understood
|
|
||||||
}
|
|
||||||
for _, s := range knownStates {
|
|
||||||
if s == content.HistoryVisibility {
|
|
||||||
visibility = s
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return visibility
|
return visibility
|
||||||
|
|
@ -80,6 +67,9 @@ func HistoryVisibilityForRoom(authEvents []*gomatrixserverlib.Event) string {
|
||||||
|
|
||||||
func IsAnyUserOnServerWithMembership(serverName gomatrixserverlib.ServerName, authEvents []*gomatrixserverlib.Event, wantMembership string) bool {
|
func IsAnyUserOnServerWithMembership(serverName gomatrixserverlib.ServerName, authEvents []*gomatrixserverlib.Event, wantMembership string) bool {
|
||||||
for _, ev := range authEvents {
|
for _, ev := range authEvents {
|
||||||
|
if ev.Type() != gomatrixserverlib.MRoomMember {
|
||||||
|
continue
|
||||||
|
}
|
||||||
membership, err := ev.Membership()
|
membership, err := ev.Membership()
|
||||||
if err != nil || membership != wantMembership {
|
if err != nil || membership != wantMembership {
|
||||||
continue
|
continue
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue