Use None instead of the empty string

Change how we validate the 'url' field as a result.
pull/1056/head
Kegan Dougal 2016-08-30 17:16:00 +01:00
parent 16b652f0a3
commit 572acde483
2 changed files with 16 additions and 9 deletions

View File

@ -67,7 +67,7 @@ class ApplicationServiceApi(SimpleHttpClient):
@defer.inlineCallbacks @defer.inlineCallbacks
def query_user(self, service, user_id): def query_user(self, service, user_id):
if service.url == "": if service.url is None:
defer.returnValue(False) defer.returnValue(False)
uri = service.url + ("/users/%s" % urllib.quote(user_id)) uri = service.url + ("/users/%s" % urllib.quote(user_id))
response = None response = None
@ -88,7 +88,7 @@ class ApplicationServiceApi(SimpleHttpClient):
@defer.inlineCallbacks @defer.inlineCallbacks
def query_alias(self, service, alias): def query_alias(self, service, alias):
if service.url == "": if service.url is None:
defer.returnValue(False) defer.returnValue(False)
uri = service.url + ("/rooms/%s" % urllib.quote(alias)) uri = service.url + ("/rooms/%s" % urllib.quote(alias))
response = None response = None
@ -117,7 +117,7 @@ class ApplicationServiceApi(SimpleHttpClient):
raise ValueError( raise ValueError(
"Unrecognised 'kind' argument %r to query_3pe()", kind "Unrecognised 'kind' argument %r to query_3pe()", kind
) )
if service.url == "": if service.url is None:
defer.returnValue([]) defer.returnValue([])
uri = "%s%s/thirdparty/%s/%s" % ( uri = "%s%s/thirdparty/%s/%s" % (
@ -151,7 +151,7 @@ class ApplicationServiceApi(SimpleHttpClient):
defer.returnValue([]) defer.returnValue([])
def get_3pe_protocol(self, service, protocol): def get_3pe_protocol(self, service, protocol):
if service.url == "": if service.url is None:
defer.returnValue({}) defer.returnValue({})
@defer.inlineCallbacks @defer.inlineCallbacks
@ -175,7 +175,7 @@ class ApplicationServiceApi(SimpleHttpClient):
@defer.inlineCallbacks @defer.inlineCallbacks
def push_bulk(self, service, events, txn_id=None): def push_bulk(self, service, events, txn_id=None):
if service.url == "": if service.url is None:
defer.returnValue(True) defer.returnValue(True)
events = self._serialize(events) events = self._serialize(events)

View File

@ -86,7 +86,7 @@ def load_appservices(hostname, config_files):
def _load_appservice(hostname, as_info, config_filename): def _load_appservice(hostname, as_info, config_filename):
required_string_fields = [ required_string_fields = [
"id", "url", "as_token", "hs_token", "sender_localpart" "id", "as_token", "hs_token", "sender_localpart"
] ]
for field in required_string_fields: for field in required_string_fields:
if not isinstance(as_info.get(field), basestring): if not isinstance(as_info.get(field), basestring):
@ -94,6 +94,13 @@ def _load_appservice(hostname, as_info, config_filename):
field, config_filename, field, config_filename,
)) ))
# 'url' must either be a string or explicitly null, not missing
# to avoid accidentally turning off push for ASes.
if not isinstance(as_info.get("url"), basestring) and as_info.get("url", "") is not None:
raise KeyError(
"Required string field or explicit null: 'url' (%s)" % (config_filename,)
)
localpart = as_info["sender_localpart"] localpart = as_info["sender_localpart"]
if urllib.quote(localpart) != localpart: if urllib.quote(localpart) != localpart:
raise ValueError( raise ValueError(
@ -133,10 +140,10 @@ def _load_appservice(hostname, as_info, config_filename):
if not isinstance(p, str): if not isinstance(p, str):
raise KeyError("Bad value for 'protocols' item") raise KeyError("Bad value for 'protocols' item")
if as_info["url"] == "": if as_info["url"] == None:
logger.info( logger.info(
"(%s) Explicitly empty 'url' provided. This application service " + "(%s) Explicitly empty 'url' provided. This application service"
"will not receive events or queries.", " will not receive events or queries.",
config_filename, config_filename,
) )
return ApplicationService( return ApplicationService(