Skip to content

Commit

Permalink
Use named constants for event types (matrix-org#44)
Browse files Browse the repository at this point in the history
* Use named constants for event types

* Make the event type constants public
  • Loading branch information
NegativeMjark authored May 24, 2017
1 parent 9cefcd6 commit 7d789f4
Show file tree
Hide file tree
Showing 6 changed files with 61 additions and 45 deletions.
2 changes: 1 addition & 1 deletion event.go
Original file line number Diff line number Diff line change
Expand Up @@ -386,7 +386,7 @@ func (e Event) CheckFields() error {
// are allowed to have a different sender because they have the same
// sender as the "m.room.third_party_invite" event they derived from.
// https://github.com/matrix-org/synapse/blob/v0.21.0/synapse/event_auth.py#L58-L64
if e.fields.Type != "m.room.member" {
if e.fields.Type != MRoomMember {
return fmt.Errorf(
"gomatrixserverlib: sender domain doesn't match origin: %q != %q",
eventDomain, e.fields.Origin,
Expand Down
56 changes: 36 additions & 20 deletions eventauth.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,22 @@ const (
leave = "leave"
invite = "invite"
public = "public"
// MRoomCreate https://matrix.org/docs/spec/client_server/r0.2.0.html#m-room-create
MRoomCreate = "m.room.create"
// MRoomJoinRules https://matrix.org/docs/spec/client_server/r0.2.0.html#m-room-join-rules
MRoomJoinRules = "m.room.join_rules"
// MRoomPowerLevels https://matrix.org/docs/spec/client_server/r0.2.0.html#m-room-power-levels
MRoomPowerLevels = "m.room.power_levels"
// MRoomMember https://matrix.org/docs/spec/client_server/r0.2.0.html#m-room-member
MRoomMember = "m.room.member"
// MRoomThirdPartyInvite https://matrix.org/docs/spec/client_server/r0.2.0.html#m-room-third-party-invite
MRoomThirdPartyInvite = "m.room.third_party_invite"
// MRoomAliases https://matrix.org/docs/spec/client_server/r0.2.0.html#m-room-aliases
MRoomAliases = "m.room.aliases"
// MRoomHistoryVisibility https://matrix.org/docs/spec/client_server/r0.2.0.html#m-room-history-visibility
MRoomHistoryVisibility = "m.room.history_visibility"
// MRoomRedaction https://matrix.org/docs/spec/client_server/r0.2.0.html#id21
MRoomRedaction = "m.room.redaction"
)

// StateNeeded lists the event types and state_keys needed to authenticate an event.
Expand All @@ -47,19 +63,19 @@ type StateNeeded struct {
// Tuples returns the needed state key tuples for performing auth on an event.
func (s StateNeeded) Tuples() (res []StateKeyTuple) {
if s.Create {
res = append(res, StateKeyTuple{"m.room.create", ""})
res = append(res, StateKeyTuple{MRoomCreate, ""})
}
if s.JoinRules {
res = append(res, StateKeyTuple{"m.room.join_rules", ""})
res = append(res, StateKeyTuple{MRoomJoinRules, ""})
}
if s.PowerLevels {
res = append(res, StateKeyTuple{"m.room.power_levels", ""})
res = append(res, StateKeyTuple{MRoomPowerLevels, ""})
}
for _, userID := range s.Member {
res = append(res, StateKeyTuple{"m.room.member", userID})
res = append(res, StateKeyTuple{MRoomMember, userID})
}
for _, token := range s.ThirdPartyInvite {
res = append(res, StateKeyTuple{"m.room.third_party_invite", token})
res = append(res, StateKeyTuple{MRoomThirdPartyInvite, token})
}
return
}
Expand Down Expand Up @@ -114,7 +130,7 @@ func (s StateNeeded) AuthEventReferences(provider AuthEventProvider) (refs []Eve
func StateNeededForEventBuilder(builder *EventBuilder) (result StateNeeded, err error) {
// Extract the 'content' object from the event if it is m.room.member as we need to know 'membership'
var content *memberContent
if builder.Type == "m.room.member" {
if builder.Type == MRoomMember {
if err = json.Unmarshal(builder.Content, &content); err != nil {
err = errorf("unparsable member event content: %s", err.Error())
return
Expand All @@ -132,7 +148,7 @@ func StateNeededForAuth(events []Event) (result StateNeeded) {
for _, event := range events {
// Extract the 'content' object from the event if it is m.room.member as we need to know 'membership'
var content *memberContent
if event.Type() == "m.room.member" {
if event.Type() == MRoomMember {
c, err := newMemberContentFromEvent(event)
if err == nil {
content = &c
Expand All @@ -151,17 +167,17 @@ func StateNeededForAuth(events []Event) (result StateNeeded) {

func accumulateStateNeeded(result *StateNeeded, eventType, sender string, stateKey *string, content *memberContent) (err error) {
switch eventType {
case "m.room.create":
case MRoomCreate:
// The create event doesn't require any state to authenticate.
// https://github.com/matrix-org/synapse/blob/v0.18.5/synapse/api/auth.py#L123
case "m.room.aliases":
case MRoomAliases:
// Alias events need:
// * The create event.
// https://github.com/matrix-org/synapse/blob/v0.18.5/synapse/api/auth.py#L128
// Alias events need no further authentication.
// https://github.com/matrix-org/synapse/blob/v0.18.5/synapse/api/auth.py#L160
result.Create = true
case "m.room.member":
case MRoomMember:
// Member events need:
// * The previous membership of the target.
// https://github.com/matrix-org/synapse/blob/v0.18.5/synapse/api/auth.py#L355
Expand Down Expand Up @@ -255,27 +271,27 @@ func (a *AuthEvents) AddEvent(event *Event) error {

// Create implements AuthEventProvider
func (a *AuthEvents) Create() (*Event, error) {
return a.events[StateKeyTuple{"m.room.create", ""}], nil
return a.events[StateKeyTuple{MRoomCreate, ""}], nil
}

// JoinRules implements AuthEventProvider
func (a *AuthEvents) JoinRules() (*Event, error) {
return a.events[StateKeyTuple{"m.room.join_rules", ""}], nil
return a.events[StateKeyTuple{MRoomJoinRules, ""}], nil
}

// PowerLevels implements AuthEventProvider
func (a *AuthEvents) PowerLevels() (*Event, error) {
return a.events[StateKeyTuple{"m.room.power_levels", ""}], nil
return a.events[StateKeyTuple{MRoomPowerLevels, ""}], nil
}

// Member implements AuthEventProvider
func (a *AuthEvents) Member(stateKey string) (*Event, error) {
return a.events[StateKeyTuple{"m.room.member", stateKey}], nil
return a.events[StateKeyTuple{MRoomMember, stateKey}], nil
}

// ThirdPartyInvite implements AuthEventProvider
func (a *AuthEvents) ThirdPartyInvite(stateKey string) (*Event, error) {
return a.events[StateKeyTuple{"m.room.third_party_invite", stateKey}], nil
return a.events[StateKeyTuple{MRoomThirdPartyInvite, stateKey}], nil
}

// NewAuthEvents returns an AuthEventProvider backed by the given events. New events can be added by
Expand Down Expand Up @@ -306,15 +322,15 @@ func errorf(message string, args ...interface{}) error {
// If there was an error loading the auth events then it returns that error.
func Allowed(event Event, authEvents AuthEventProvider) error {
switch event.Type() {
case "m.room.create":
case MRoomCreate:
return createEventAllowed(event)
case "m.room.aliases":
case MRoomAliases:
return aliasEventAllowed(event, authEvents)
case "m.room.member":
case MRoomMember:
return memberEventAllowed(event, authEvents)
case "m.room.power_levels":
case MRoomPowerLevels:
return powerLevelsEventAllowed(event, authEvents)
case "m.room.redaction":
case MRoomRedaction:
return redactEventAllowed(event, authEvents)
default:
return defaultEventAllowed(event, authEvents)
Expand Down
2 changes: 1 addition & 1 deletion eventcontent.go
Original file line number Diff line number Diff line change
Expand Up @@ -191,7 +191,7 @@ func (c *powerLevelContent) userLevel(userID string) int64 {

// eventLevel returns the power level needed to send an event in the room.
func (c *powerLevelContent) eventLevel(eventType string, isState bool) int64 {
if eventType == "m.room.third_party_invite" {
if eventType == MRoomThirdPartyInvite {
// Special case third_party_invite events to have the same level as
// m.room.member invite events.
// https://github.com/matrix-org/synapse/blob/v0.18.5/synapse/api/auth.py#L182
Expand Down
4 changes: 2 additions & 2 deletions eventcrypto.go
Original file line number Diff line number Diff line change
Expand Up @@ -201,9 +201,9 @@ func VerifyEventSignatures(events []Event, keyRing KeyRing) error {
}
toVerify = append(toVerify, v)

// "m.room.member" invite events are signed by both the server sending
// MRoomMember invite events are signed by both the server sending
// the invite and the server the invite is for.
if event.Type() == "m.room.member" && event.StateKey() != nil {
if event.Type() == MRoomMember && event.StateKey() != nil {
targetDomain, err := domainFromID(*event.StateKey())
if err != nil {
return err
Expand Down
12 changes: 6 additions & 6 deletions redactevent.go
Original file line number Diff line number Diff line change
Expand Up @@ -140,17 +140,17 @@ func redactEvent(eventJSON []byte) ([]byte, error) {
// Copy the content fields that we should keep for the event type.
// By default we copy nothing leaving the content object empty.
switch event.Type {
case "m.room.create":
case MRoomCreate:
newContent.createContent = event.Content.createContent
case "m.room.member":
case MRoomMember:
newContent.memberContent = event.Content.memberContent
case "m.room.join_rules":
case MRoomJoinRules:
newContent.joinRulesContent = event.Content.joinRulesContent
case "m.room.power_levels":
case MRoomPowerLevels:
newContent.powerLevelContent = event.Content.powerLevelContent
case "m.room.history_visibility":
case MRoomHistoryVisibility:
newContent.historyVisibilityContent = event.Content.historyVisibilityContent
case "m.room.aliases":
case MRoomAliases:
newContent.aliasesContent = event.Content.aliasesContent
}
// Replace the content with our new filtered content.
Expand Down
30 changes: 15 additions & 15 deletions stateresolution.go
Original file line number Diff line number Diff line change
Expand Up @@ -114,24 +114,24 @@ func (r *stateResolver) addConflicted(events []Event) {
// By default we add the event to a block in the others list.
blockList := &r.others
switch key.eventType {
case "m.room.create":
case MRoomCreate:
if key.stateKey == "" {
r.creates = append(r.creates, event)
continue
}
case "m.room.power_levels":
case MRoomPowerLevels:
if key.stateKey == "" {
r.powerLevels = append(r.powerLevels, event)
continue
}
case "m.room.join_rules":
case MRoomJoinRules:
if key.stateKey == "" {
r.joinRules = append(r.joinRules, event)
continue
}
case "m.room.member":
case MRoomMember:
blockList = &r.members
case "m.room.third_party_invite":
case MRoomThirdPartyInvite:
blockList = &r.thirdPartyInvites
}
// We need to find an entry for the state key in a block list.
Expand All @@ -153,21 +153,21 @@ func (r *stateResolver) addConflicted(events []Event) {
// Add an event to the resolved auth events.
func (r *stateResolver) addAuthEvent(event *Event) {
switch event.Type() {
case "m.room.create":
case MRoomCreate:
if event.StateKeyEquals("") {
r.resolvedCreate = event
}
case "m.room.power_levels":
case MRoomPowerLevels:
if event.StateKeyEquals("") {
r.resolvedPowerLevels = event
}
case "m.room.join_rules":
case MRoomJoinRules:
if event.StateKeyEquals("") {
r.resolvedJoinRules = event
}
case "m.room.member":
case MRoomMember:
r.resolvedMembers[*event.StateKey()] = event
case "m.room.third_party_invite":
case MRoomThirdPartyInvite:
r.resolvedThirdPartyInvites[*event.StateKey()] = event
default:
panic(fmt.Errorf("Unexpected auth event with type %q", event.Type()))
Expand All @@ -177,21 +177,21 @@ func (r *stateResolver) addAuthEvent(event *Event) {
// Remove the auth event with the given type and state key.
func (r *stateResolver) removeAuthEvent(eventType, stateKey string) {
switch eventType {
case "m.room.create":
case MRoomCreate:
if stateKey == "" {
r.resolvedCreate = nil
}
case "m.room.power_levels":
case MRoomPowerLevels:
if stateKey == "" {
r.resolvedPowerLevels = nil
}
case "m.room.join_rules":
case MRoomJoinRules:
if stateKey == "" {
r.resolvedJoinRules = nil
}
case "m.room.member":
case MRoomMember:
r.resolvedMembers[stateKey] = nil
case "m.room.third_party_invite":
case MRoomThirdPartyInvite:
r.resolvedThirdPartyInvites[stateKey] = nil
default:
panic(fmt.Errorf("Unexpected auth event with type %q", eventType))
Expand Down

0 comments on commit 7d789f4

Please sign in to comment.