mirror of
https://github.com/element-hq/synapse.git
synced 2024-12-14 11:57:44 +00:00
register_new_matrix_user: read server url from config (#13616)
Fixes https://github.com/matrix-org/synapse/issues/3672: `https://localhost:8448` is virtually never right.
This commit is contained in:
parent
a282446502
commit
a2ce614447
2 changed files with 52 additions and 6 deletions
1
changelog.d/13616.bugfix
Normal file
1
changelog.d/13616.bugfix
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Fix a longstanding bug in `register_new_matrix_user` which meant it was always necessary to explicitly give a server URL.
|
|
@ -20,11 +20,13 @@ import hashlib
|
||||||
import hmac
|
import hmac
|
||||||
import logging
|
import logging
|
||||||
import sys
|
import sys
|
||||||
from typing import Callable, Optional
|
from typing import Any, Callable, Dict, Optional
|
||||||
|
|
||||||
import requests
|
import requests
|
||||||
import yaml
|
import yaml
|
||||||
|
|
||||||
|
_DEFAULT_SERVER_URL = "http://localhost:8008"
|
||||||
|
|
||||||
|
|
||||||
def request_registration(
|
def request_registration(
|
||||||
user: str,
|
user: str,
|
||||||
|
@ -203,31 +205,74 @@ def main() -> None:
|
||||||
|
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"server_url",
|
"server_url",
|
||||||
default="https://localhost:8448",
|
|
||||||
nargs="?",
|
nargs="?",
|
||||||
help="URL to use to talk to the homeserver. Defaults to "
|
help="URL to use to talk to the homeserver. By default, tries to find a "
|
||||||
" 'https://localhost:8448'.",
|
"suitable URL from the configuration file. Otherwise, defaults to "
|
||||||
|
f"'{_DEFAULT_SERVER_URL}'.",
|
||||||
)
|
)
|
||||||
|
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
if "config" in args and args.config:
|
if "config" in args and args.config:
|
||||||
config = yaml.safe_load(args.config)
|
config = yaml.safe_load(args.config)
|
||||||
|
|
||||||
|
if args.shared_secret:
|
||||||
|
secret = args.shared_secret
|
||||||
|
else:
|
||||||
|
# argparse should check that we have either config or shared secret
|
||||||
|
assert config
|
||||||
|
|
||||||
secret = config.get("registration_shared_secret", None)
|
secret = config.get("registration_shared_secret", None)
|
||||||
if not secret:
|
if not secret:
|
||||||
print("No 'registration_shared_secret' defined in config.")
|
print("No 'registration_shared_secret' defined in config.")
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
|
if args.server_url:
|
||||||
|
server_url = args.server_url
|
||||||
|
elif config:
|
||||||
|
server_url = _find_client_listener(config)
|
||||||
|
if not server_url:
|
||||||
|
server_url = _DEFAULT_SERVER_URL
|
||||||
|
print(
|
||||||
|
"Unable to find a suitable HTTP listener in the configuration file. "
|
||||||
|
f"Trying {server_url} as a last resort.",
|
||||||
|
file=sys.stderr,
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
secret = args.shared_secret
|
server_url = _DEFAULT_SERVER_URL
|
||||||
|
print(
|
||||||
|
f"No server url or configuration file given. Defaulting to {server_url}.",
|
||||||
|
file=sys.stderr,
|
||||||
|
)
|
||||||
|
|
||||||
admin = None
|
admin = None
|
||||||
if args.admin or args.no_admin:
|
if args.admin or args.no_admin:
|
||||||
admin = args.admin
|
admin = args.admin
|
||||||
|
|
||||||
register_new_user(
|
register_new_user(
|
||||||
args.user, args.password, args.server_url, secret, admin, args.user_type
|
args.user, args.password, server_url, secret, admin, args.user_type
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def _find_client_listener(config: Dict[str, Any]) -> Optional[str]:
|
||||||
|
# try to find a listener in the config. Returns a host:port pair
|
||||||
|
for listener in config.get("listeners", []):
|
||||||
|
if listener.get("type") != "http" or listener.get("tls", False):
|
||||||
|
continue
|
||||||
|
|
||||||
|
if not any(
|
||||||
|
name == "client"
|
||||||
|
for resource in listener.get("resources", [])
|
||||||
|
for name in resource.get("names", [])
|
||||||
|
):
|
||||||
|
continue
|
||||||
|
|
||||||
|
# TODO: consider bind_addresses
|
||||||
|
return f"http://localhost:{listener['port']}"
|
||||||
|
|
||||||
|
# no suitable listeners?
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
main()
|
main()
|
||||||
|
|
Loading…
Reference in a new issue