mirror of
https://github.com/caronc/apprise.git
synced 2024-10-05 01:32:08 +02:00
cache bugfix + support empty 200 response from .well-known
This commit is contained in:
parent
c804def0ab
commit
43a9bb51c4
@ -1300,14 +1300,14 @@ class NotifyMatrix(NotifyBase):
|
|||||||
timeout=self.request_timeout,
|
timeout=self.request_timeout,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Store status code
|
||||||
|
status_code = r.status_code
|
||||||
|
|
||||||
self.logger.debug(
|
self.logger.debug(
|
||||||
'Matrix Response: code=%d, %s' % (
|
'Matrix Response: code=%d, %s' % (
|
||||||
r.status_code, str(r.content)))
|
r.status_code, str(r.content)))
|
||||||
response = loads(r.content)
|
response = loads(r.content)
|
||||||
|
|
||||||
# Store status code
|
|
||||||
status_code = r.status_code
|
|
||||||
|
|
||||||
if r.status_code == requests.codes.too_many_requests:
|
if r.status_code == requests.codes.too_many_requests:
|
||||||
wait = self.default_wait_ms / 1000
|
wait = self.default_wait_ms / 1000
|
||||||
try:
|
try:
|
||||||
@ -1616,7 +1616,7 @@ class NotifyMatrix(NotifyBase):
|
|||||||
self.store.get(self.discovery_identity_key),
|
self.store.get(self.discovery_identity_key),
|
||||||
)
|
)
|
||||||
|
|
||||||
if base_url is not None and identity_url is not None:
|
if not (base_url is None and identity_url is None):
|
||||||
# We can use our cached value and return early
|
# We can use our cached value and return early
|
||||||
return base_url
|
return base_url
|
||||||
|
|
||||||
@ -1641,7 +1641,7 @@ class NotifyMatrix(NotifyBase):
|
|||||||
self.logger.debug(
|
self.logger.debug(
|
||||||
'Matrix Well-Known Base URI not found at %s', verify_url)
|
'Matrix Well-Known Base URI not found at %s', verify_url)
|
||||||
|
|
||||||
# Clear our keys out for fast recall later on
|
# Set our keys out for fast recall later on
|
||||||
self.store.set(
|
self.store.set(
|
||||||
self.discovery_base_key, '',
|
self.discovery_base_key, '',
|
||||||
expires=self.discovery_cache_length_sec)
|
expires=self.discovery_cache_length_sec)
|
||||||
@ -1657,6 +1657,20 @@ class NotifyMatrix(NotifyBase):
|
|||||||
'%s - %s returned error code: %d', msg, verify_url, code)
|
'%s - %s returned error code: %d', msg, verify_url, code)
|
||||||
raise MatrixDiscoveryException(msg, error_code=code)
|
raise MatrixDiscoveryException(msg, error_code=code)
|
||||||
|
|
||||||
|
if not wk_response:
|
||||||
|
# This is an acceptable response; we simply do nothing
|
||||||
|
self.logger.debug(
|
||||||
|
'Matrix Well-Known Base URI not defined %s', verify_url)
|
||||||
|
|
||||||
|
# Set our keys out for fast recall later on
|
||||||
|
self.store.set(
|
||||||
|
self.discovery_base_key, '',
|
||||||
|
expires=self.discovery_cache_length_sec)
|
||||||
|
self.store.set(
|
||||||
|
self.discovery_identity_key, '',
|
||||||
|
expires=self.discovery_cache_length_sec)
|
||||||
|
return ''
|
||||||
|
|
||||||
#
|
#
|
||||||
# Parse our m.homeserver information
|
# Parse our m.homeserver information
|
||||||
#
|
#
|
||||||
@ -1695,8 +1709,7 @@ class NotifyMatrix(NotifyBase):
|
|||||||
#
|
#
|
||||||
# Phase 2: Handle m.identity_server IF defined
|
# Phase 2: Handle m.identity_server IF defined
|
||||||
#
|
#
|
||||||
if isinstance(wk_response, dict) \
|
if 'm.identity_server' in wk_response:
|
||||||
and 'm.identity_server' in wk_response:
|
|
||||||
try:
|
try:
|
||||||
identity_url = \
|
identity_url = \
|
||||||
wk_response['m.identity_server']['base_url'].rstrip('/')
|
wk_response['m.identity_server']['base_url'].rstrip('/')
|
||||||
@ -1733,7 +1746,14 @@ class NotifyMatrix(NotifyBase):
|
|||||||
# Update our cache
|
# Update our cache
|
||||||
self.store.set(
|
self.store.set(
|
||||||
self.discovery_identity_key, identity_url,
|
self.discovery_identity_key, identity_url,
|
||||||
expires=self.discovery_cache_length_sec)
|
# Add 2 seconds to prevent this key from expiring before base
|
||||||
|
expires=self.discovery_cache_length_sec + 2)
|
||||||
|
else:
|
||||||
|
# No identity server
|
||||||
|
self.store.set(
|
||||||
|
self.discovery_identity_key, '',
|
||||||
|
# Add 2 seconds to prevent this key from expiring before base
|
||||||
|
expires=self.discovery_cache_length_sec + 2)
|
||||||
|
|
||||||
# Update our cache
|
# Update our cache
|
||||||
self.store.set(
|
self.store.set(
|
||||||
@ -1758,6 +1778,8 @@ class NotifyMatrix(NotifyBase):
|
|||||||
self.discovery_base_key, self.discovery_identity_key)
|
self.discovery_base_key, self.discovery_identity_key)
|
||||||
raise
|
raise
|
||||||
|
|
||||||
|
# If we get hear, we need to build our URL dynamically based on what
|
||||||
|
# was provided to us during the plugins initialization
|
||||||
default_port = 443 if self.secure else 80
|
default_port = 443 if self.secure else 80
|
||||||
|
|
||||||
return '{schema}://{hostname}{port}'.format(
|
return '{schema}://{hostname}{port}'.format(
|
||||||
|
@ -1192,12 +1192,23 @@ def test_plugin_matrix_discovery_service(mock_post, mock_get):
|
|||||||
assert NotifyMatrix.discovery_base_key not in obj.store
|
assert NotifyMatrix.discovery_base_key not in obj.store
|
||||||
assert NotifyMatrix.discovery_identity_key not in obj.store
|
assert NotifyMatrix.discovery_identity_key not in obj.store
|
||||||
|
|
||||||
# Enforce cleanup
|
# Test an empty block response
|
||||||
response.status_code = requests.codes.ok
|
response.status_code = requests.codes.ok
|
||||||
|
response.content = ''
|
||||||
mock_get.return_value = response
|
mock_get.return_value = response
|
||||||
mock_get.side_effect = None
|
mock_get.side_effect = None
|
||||||
mock_post.return_value = response
|
mock_post.return_value = response
|
||||||
mock_post.side_effect = None
|
mock_post.side_effect = None
|
||||||
|
obj.store.clear(
|
||||||
|
NotifyMatrix.discovery_base_key, NotifyMatrix.discovery_identity_key)
|
||||||
|
|
||||||
|
assert obj.base_url == 'https://example.com'
|
||||||
|
assert obj.identity_url == 'https://example.com'
|
||||||
|
|
||||||
|
# Verify cache saved
|
||||||
|
assert NotifyMatrix.discovery_base_key in obj.store
|
||||||
|
assert NotifyMatrix.discovery_identity_key in obj.store
|
||||||
|
|
||||||
del obj
|
del obj
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user