11# -*- coding: utf-8 -*-
22# Copyright 2014-2016 OpenMarket Ltd
3- # Copyright 2018 New Vector Ltd
3+ # Copyright 2017-2018 New Vector Ltd
4+ # Copyright 2019 The Matrix.org Foundation C.I.C.
45#
56# Licensed under the Apache License, Version 2.0 (the "License");
67# you may not use this file except in compliance with the License.
3334from synapse .api .errors import (
3435 AuthError ,
3536 CodeMessageException ,
37+ Codes ,
3638 FederationDeniedError ,
3739 FederationError ,
3840 RequestSendFailed ,
@@ -127,6 +129,8 @@ def __init__(self, hs):
127129 self .room_queues = {}
128130 self ._room_pdu_linearizer = Linearizer ("fed_room_pdu" )
129131
132+ self .third_party_event_rules = hs .get_third_party_event_rules ()
133+
130134 @defer .inlineCallbacks
131135 def on_receive_pdu (
132136 self , origin , pdu , sent_to_us_directly = False ,
@@ -1258,6 +1262,15 @@ def on_make_join_request(self, room_id, user_id):
12581262 logger .warn ("Failed to create join %r because %s" , event , e )
12591263 raise e
12601264
1265+ event_allowed = yield self .third_party_event_rules .check_event_allowed (
1266+ event , context ,
1267+ )
1268+ if not event_allowed :
1269+ logger .info ("Creation of join %s forbidden by third-party rules" , event )
1270+ raise SynapseError (
1271+ 403 , "This event is not allowed in this context" , Codes .FORBIDDEN ,
1272+ )
1273+
12611274 # The remote hasn't signed it yet, obviously. We'll do the full checks
12621275 # when we get the event back in `on_send_join_request`
12631276 yield self .auth .check_from_context (
@@ -1300,6 +1313,15 @@ def on_send_join_request(self, origin, pdu):
13001313 origin , event
13011314 )
13021315
1316+ event_allowed = yield self .third_party_event_rules .check_event_allowed (
1317+ event , context ,
1318+ )
1319+ if not event_allowed :
1320+ logger .info ("Sending of join %s forbidden by third-party rules" , event )
1321+ raise SynapseError (
1322+ 403 , "This event is not allowed in this context" , Codes .FORBIDDEN ,
1323+ )
1324+
13031325 logger .debug (
13041326 "on_send_join_request: After _handle_new_event: %s, sigs: %s" ,
13051327 event .event_id ,
@@ -1458,6 +1480,15 @@ def on_make_leave_request(self, room_id, user_id):
14581480 builder = builder ,
14591481 )
14601482
1483+ event_allowed = yield self .third_party_event_rules .check_event_allowed (
1484+ event , context ,
1485+ )
1486+ if not event_allowed :
1487+ logger .warning ("Creation of leave %s forbidden by third-party rules" , event )
1488+ raise SynapseError (
1489+ 403 , "This event is not allowed in this context" , Codes .FORBIDDEN ,
1490+ )
1491+
14611492 try :
14621493 # The remote hasn't signed it yet, obviously. We'll do the full checks
14631494 # when we get the event back in `on_send_leave_request`
@@ -1484,10 +1515,19 @@ def on_send_leave_request(self, origin, pdu):
14841515
14851516 event .internal_metadata .outlier = False
14861517
1487- yield self ._handle_new_event (
1518+ context = yield self ._handle_new_event (
14881519 origin , event
14891520 )
14901521
1522+ event_allowed = yield self .third_party_event_rules .check_event_allowed (
1523+ event , context ,
1524+ )
1525+ if not event_allowed :
1526+ logger .info ("Sending of leave %s forbidden by third-party rules" , event )
1527+ raise SynapseError (
1528+ 403 , "This event is not allowed in this context" , Codes .FORBIDDEN ,
1529+ )
1530+
14911531 logger .debug (
14921532 "on_send_leave_request: After _handle_new_event: %s, sigs: %s" ,
14931533 event .event_id ,
@@ -2550,6 +2590,18 @@ def exchange_third_party_invite(
25502590 builder = builder
25512591 )
25522592
2593+ event_allowed = yield self .third_party_event_rules .check_event_allowed (
2594+ event , context ,
2595+ )
2596+ if not event_allowed :
2597+ logger .info (
2598+ "Creation of threepid invite %s forbidden by third-party rules" ,
2599+ event ,
2600+ )
2601+ raise SynapseError (
2602+ 403 , "This event is not allowed in this context" , Codes .FORBIDDEN ,
2603+ )
2604+
25532605 event , context = yield self .add_display_name_to_third_party_invite (
25542606 room_version , event_dict , event , context
25552607 )
@@ -2598,6 +2650,18 @@ def on_exchange_third_party_invite_request(self, origin, room_id, event_dict):
25982650 builder = builder ,
25992651 )
26002652
2653+ event_allowed = yield self .third_party_event_rules .check_event_allowed (
2654+ event , context ,
2655+ )
2656+ if not event_allowed :
2657+ logger .warning (
2658+ "Exchange of threepid invite %s forbidden by third-party rules" ,
2659+ event ,
2660+ )
2661+ raise SynapseError (
2662+ 403 , "This event is not allowed in this context" , Codes .FORBIDDEN ,
2663+ )
2664+
26012665 event , context = yield self .add_display_name_to_third_party_invite (
26022666 room_version , event_dict , event , context
26032667 )
0 commit comments