mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2024-10-01 11:49:51 -04:00
Use a sender localpart instead of a user ID.
Form the user ID at runtime instead, This gives less room for error in AS config files since they cannot specify the domain of another HS.
This commit is contained in:
parent
3470cb36a8
commit
cf1fa59f4b
@ -21,6 +21,7 @@ from twisted.internet import defer
|
|||||||
from synapse.api.constants import Membership
|
from synapse.api.constants import Membership
|
||||||
from synapse.appservice import ApplicationService, AppServiceTransaction
|
from synapse.appservice import ApplicationService, AppServiceTransaction
|
||||||
from synapse.storage.roommember import RoomsForUser
|
from synapse.storage.roommember import RoomsForUser
|
||||||
|
from synapse.types import UserID
|
||||||
from ._base import SQLBaseStore
|
from ._base import SQLBaseStore
|
||||||
|
|
||||||
|
|
||||||
@ -31,6 +32,7 @@ class ApplicationServiceStore(SQLBaseStore):
|
|||||||
|
|
||||||
def __init__(self, hs):
|
def __init__(self, hs):
|
||||||
super(ApplicationServiceStore, self).__init__(hs)
|
super(ApplicationServiceStore, self).__init__(hs)
|
||||||
|
self.hostname = hs.hostname
|
||||||
self.services_cache = []
|
self.services_cache = []
|
||||||
self._populate_appservice_cache(
|
self._populate_appservice_cache(
|
||||||
hs.config.app_service_config_files
|
hs.config.app_service_config_files
|
||||||
@ -200,11 +202,16 @@ class ApplicationServiceStore(SQLBaseStore):
|
|||||||
return service_list
|
return service_list
|
||||||
|
|
||||||
def _load_appservice(self, as_info):
|
def _load_appservice(self, as_info):
|
||||||
required_string_fields = ["url", "as_token", "hs_token", "sender"]
|
required_string_fields = [
|
||||||
|
"url", "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):
|
||||||
raise KeyError("Required string field: '%s'", field)
|
raise KeyError("Required string field: '%s'", field)
|
||||||
|
|
||||||
|
user = UserID(as_info["sender_localpart"], self.hostname)
|
||||||
|
user_id = user.to_string()
|
||||||
|
|
||||||
# namespace checks
|
# namespace checks
|
||||||
if not isinstance(as_info.get("namespaces"), dict):
|
if not isinstance(as_info.get("namespaces"), dict):
|
||||||
raise KeyError("Requires 'namespaces' object.")
|
raise KeyError("Requires 'namespaces' object.")
|
||||||
@ -231,7 +238,7 @@ class ApplicationServiceStore(SQLBaseStore):
|
|||||||
url=as_info["url"],
|
url=as_info["url"],
|
||||||
namespaces=as_info["namespaces"],
|
namespaces=as_info["namespaces"],
|
||||||
hs_token=as_info["hs_token"],
|
hs_token=as_info["hs_token"],
|
||||||
sender=as_info["sender"],
|
sender=user_id,
|
||||||
id=as_info["as_token"] # the token is the only unique thing here
|
id=as_info["as_token"] # the token is the only unique thing here
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -60,7 +60,7 @@ class ApplicationServiceStoreTestCase(unittest.TestCase):
|
|||||||
|
|
||||||
def _add_appservice(self, as_token, url, hs_token, sender):
|
def _add_appservice(self, as_token, url, hs_token, sender):
|
||||||
as_yaml = dict(url=url, as_token=as_token, hs_token=hs_token,
|
as_yaml = dict(url=url, as_token=as_token, hs_token=hs_token,
|
||||||
sender=sender, namespaces={})
|
sender_localpart=sender, namespaces={})
|
||||||
# use the token as the filename
|
# use the token as the filename
|
||||||
with open(as_token, 'w') as outfile:
|
with open(as_token, 'w') as outfile:
|
||||||
outfile.write(yaml.dump(as_yaml))
|
outfile.write(yaml.dump(as_yaml))
|
||||||
@ -138,7 +138,7 @@ class ApplicationServiceTransactionStoreTestCase(unittest.TestCase):
|
|||||||
|
|
||||||
def _add_service(self, url, as_token):
|
def _add_service(self, url, as_token):
|
||||||
as_yaml = dict(url=url, as_token=as_token, hs_token="something",
|
as_yaml = dict(url=url, as_token=as_token, hs_token="something",
|
||||||
sender="a_sender", namespaces={})
|
sender_localpart="a_sender", namespaces={})
|
||||||
# use the token as the filename
|
# use the token as the filename
|
||||||
with open(as_token, 'w') as outfile:
|
with open(as_token, 'w') as outfile:
|
||||||
outfile.write(yaml.dump(as_yaml))
|
outfile.write(yaml.dump(as_yaml))
|
||||||
|
Loading…
Reference in New Issue
Block a user