@@ -127,14 +127,12 @@ class CodeMessageException(RuntimeError):
127
127
Attributes:
128
128
code: HTTP error code
129
129
msg: string describing the error
130
- headers: optional response headers to send
131
130
"""
132
131
133
132
def __init__ (
134
133
self ,
135
134
code : Union [int , HTTPStatus ],
136
135
msg : str ,
137
- headers : Optional [Dict [str , str ]] = None ,
138
136
):
139
137
super ().__init__ ("%d: %s" % (code , msg ))
140
138
@@ -146,7 +144,11 @@ def __init__(
146
144
# To eliminate this behaviour, we convert them to their integer equivalents here.
147
145
self .code = int (code )
148
146
self .msg = msg
149
- self .headers = headers
147
+
148
+ def headers_dict (
149
+ self , config : Optional ["HomeServerConfig" ]
150
+ ) -> Optional [Dict [str , str ]]:
151
+ return None
150
152
151
153
152
154
class RedirectException (CodeMessageException ):
@@ -192,7 +194,6 @@ def __init__(
192
194
msg : str ,
193
195
errcode : str = Codes .UNKNOWN ,
194
196
additional_fields : Optional [Dict ] = None ,
195
- headers : Optional [Dict [str , str ]] = None ,
196
197
):
197
198
"""Constructs a synapse error.
198
199
@@ -201,7 +202,7 @@ def __init__(
201
202
msg: The human-readable error message.
202
203
errcode: The matrix error code e.g 'M_FORBIDDEN'
203
204
"""
204
- super ().__init__ (code , msg , headers )
205
+ super ().__init__ (code , msg )
205
206
self .errcode = errcode
206
207
if additional_fields is None :
207
208
self ._additional_fields : Dict = {}
@@ -360,11 +361,14 @@ def __init__(
360
361
self ,
361
362
required_scopes : List [str ],
362
363
):
363
- headers = {
364
+ self .required_scopes = required_scopes
365
+ super ().__init__ (401 , "Insufficient scope" , Codes .FORBIDDEN , None )
366
+
367
+ def headers_dict (self , config : Optional ["HomeServerConfig" ]) -> Dict [str , str ]:
368
+ return {
364
369
"WWW-Authenticate" : 'Bearer error="insufficient_scope", scope="%s"'
365
- % (" " .join (required_scopes ))
370
+ % (" " .join (self . required_scopes ))
366
371
}
367
- super ().__init__ (401 , "Insufficient scope" , Codes .FORBIDDEN , None , headers )
368
372
369
373
370
374
class UnstableSpecAuthError (AuthError ):
@@ -511,17 +515,23 @@ def __init__(
511
515
retry_after_ms : Optional [int ] = None ,
512
516
errcode : str = Codes .LIMIT_EXCEEDED ,
513
517
):
514
- headers = (
515
- None
516
- if retry_after_ms is None
517
- else {"Retry-After" : str (math .ceil (retry_after_ms / 1000 ))}
518
- )
519
- super ().__init__ (code , msg , errcode , headers = headers )
518
+ super ().__init__ (code , msg , errcode )
520
519
self .retry_after_ms = retry_after_ms
521
520
522
521
def error_dict (self , config : Optional ["HomeServerConfig" ]) -> "JsonDict" :
523
522
return cs_error (self .msg , self .errcode , retry_after_ms = self .retry_after_ms )
524
523
524
+ def headers_dict (
525
+ self , config : Optional ["HomeServerConfig" ]
526
+ ) -> Optional [Dict [str , str ]]:
527
+ if (
528
+ self .retry_after_ms is not None
529
+ and config
530
+ and config .experimental .msc4041_enabled
531
+ ):
532
+ return {"Retry-After" : str (math .ceil (self .retry_after_ms / 1000 ))}
533
+ return None
534
+
525
535
526
536
class RoomKeysVersionError (SynapseError ):
527
537
"""A client has tried to upload to a non-current version of the room_keys store"""
0 commit comments