aboutsummaryrefslogtreecommitdiff
path: root/federationapi/queue
diff options
context:
space:
mode:
authorNeil Alexander <neilalexander@users.noreply.github.com>2022-11-11 16:41:37 +0000
committerGitHub <noreply@github.com>2022-11-11 16:41:37 +0000
commit529df30b5649e67a2f98114e6640d259cba53566 (patch)
treebcb994ce79916f14c9a11cd11f32063411332585 /federationapi/queue
parente177e0ae73d7cc34ffb9869681a6bf177f805205 (diff)
Virtual hosting schema and logic changes (#2876)
Note that virtual users cannot federate correctly yet.
Diffstat (limited to 'federationapi/queue')
-rw-r--r--federationapi/queue/destinationqueue.go2
-rw-r--r--federationapi/queue/queue.go26
-rw-r--r--federationapi/queue/queue_test.go10
3 files changed, 21 insertions, 17 deletions
diff --git a/federationapi/queue/destinationqueue.go b/federationapi/queue/destinationqueue.go
index a638a574..bf04ee99 100644
--- a/federationapi/queue/destinationqueue.go
+++ b/federationapi/queue/destinationqueue.go
@@ -50,7 +50,7 @@ type destinationQueue struct {
queues *OutgoingQueues
db storage.Database
process *process.ProcessContext
- signing *SigningInfo
+ signing map[gomatrixserverlib.ServerName]*SigningInfo
rsAPI api.FederationRoomserverAPI
client fedapi.FederationClient // federation client
origin gomatrixserverlib.ServerName // origin of requests
diff --git a/federationapi/queue/queue.go b/federationapi/queue/queue.go
index b5d0552c..68f35499 100644
--- a/federationapi/queue/queue.go
+++ b/federationapi/queue/queue.go
@@ -46,7 +46,7 @@ type OutgoingQueues struct {
origin gomatrixserverlib.ServerName
client fedapi.FederationClient
statistics *statistics.Statistics
- signing *SigningInfo
+ signing map[gomatrixserverlib.ServerName]*SigningInfo
queuesMutex sync.Mutex // protects the below
queues map[gomatrixserverlib.ServerName]*destinationQueue
}
@@ -91,7 +91,7 @@ func NewOutgoingQueues(
client fedapi.FederationClient,
rsAPI api.FederationRoomserverAPI,
statistics *statistics.Statistics,
- signing *SigningInfo,
+ signing map[gomatrixserverlib.ServerName]*SigningInfo,
) *OutgoingQueues {
queues := &OutgoingQueues{
disabled: disabled,
@@ -199,11 +199,10 @@ func (oqs *OutgoingQueues) SendEvent(
log.Trace("Federation is disabled, not sending event")
return nil
}
- if origin != oqs.origin {
- // TODO: Support virtual hosting; gh issue #577.
+ if _, ok := oqs.signing[origin]; !ok {
return fmt.Errorf(
- "sendevent: unexpected server to send as: got %q expected %q",
- origin, oqs.origin,
+ "sendevent: unexpected server to send as %q",
+ origin,
)
}
@@ -214,7 +213,9 @@ func (oqs *OutgoingQueues) SendEvent(
destmap[d] = struct{}{}
}
delete(destmap, oqs.origin)
- delete(destmap, oqs.signing.ServerName)
+ for local := range oqs.signing {
+ delete(destmap, local)
+ }
// Check if any of the destinations are prohibited by server ACLs.
for destination := range destmap {
@@ -288,11 +289,10 @@ func (oqs *OutgoingQueues) SendEDU(
log.Trace("Federation is disabled, not sending EDU")
return nil
}
- if origin != oqs.origin {
- // TODO: Support virtual hosting; gh issue #577.
+ if _, ok := oqs.signing[origin]; !ok {
return fmt.Errorf(
- "sendevent: unexpected server to send as: got %q expected %q",
- origin, oqs.origin,
+ "sendevent: unexpected server to send as %q",
+ origin,
)
}
@@ -303,7 +303,9 @@ func (oqs *OutgoingQueues) SendEDU(
destmap[d] = struct{}{}
}
delete(destmap, oqs.origin)
- delete(destmap, oqs.signing.ServerName)
+ for local := range oqs.signing {
+ delete(destmap, local)
+ }
// There is absolutely no guarantee that the EDU will have a room_id
// field, as it is not required by the spec. However, if it *does*
diff --git a/federationapi/queue/queue_test.go b/federationapi/queue/queue_test.go
index 7ef4646f..58745c60 100644
--- a/federationapi/queue/queue_test.go
+++ b/federationapi/queue/queue_test.go
@@ -350,10 +350,12 @@ func testSetup(failuresUntilBlacklist uint32, shouldTxSucceed bool, t *testing.T
}
rs := &stubFederationRoomServerAPI{}
stats := statistics.NewStatistics(db, failuresUntilBlacklist)
- signingInfo := &SigningInfo{
- KeyID: "ed21019:auto",
- PrivateKey: test.PrivateKeyA,
- ServerName: "localhost",
+ signingInfo := map[gomatrixserverlib.ServerName]*SigningInfo{
+ "localhost": {
+ KeyID: "ed21019:auto",
+ PrivateKey: test.PrivateKeyA,
+ ServerName: "localhost",
+ },
}
queues := NewOutgoingQueues(db, processContext, false, "localhost", fc, rs, &stats, signingInfo)