Skip to content

Commit

Permalink
update from ma1uta#10
Browse files Browse the repository at this point in the history
  • Loading branch information
almightybob committed Dec 20, 2021
1 parent 893473b commit 3cd310e
Showing 1 changed file with 37 additions and 4 deletions.
41 changes: 37 additions & 4 deletions rest_auth_provider.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,17 +20,20 @@
#

import logging
from typing import Tuple, Optional, Callable, Awaitable

import requests
import json
import time
import synapse
from synapse import module_api

logger = logging.getLogger(__name__)


class RestAuthProvider(object):

def __init__(self, config, account_handler):
self.account_handler = account_handler
def __init__(self, config: dict, api: module_api):
self.account_handler = api

if not config.endpoint:
raise RuntimeError('Missing endpoint config')
Expand All @@ -42,6 +45,36 @@ def __init__(self, config, account_handler):
logger.info('Endpoint: %s', self.endpoint)
logger.info('Enforce lowercase username during registration: %s', self.regLower)

# register an auth callback handler
# see https://matrix-org.github.io/synapse/latest/modules/password_auth_provider_callbacks.html
api.register_password_auth_provider_callbacks(
auth_checkers={
("m.login.password", ("password",)): self.check_m_login_password
}
)

async def check_m_login_password(self, username: str,
login_type: str,
login_dict: "synapse.module_api.JsonDict") -> Optional[
Tuple[
str,
Optional[Callable[["synapse.module_api.LoginResponse"], Awaitable[None]]],
]
]:
if login_type != "m.login.password":
return None

# get the complete MXID
mxid = self.account_handler.get_qualified_user_id(username)

# check if the password is valid with the old function
password_valid = await self.check_password(mxid, login_dict.get("password"))

if password_valid:
return mxid, None
else:
return None

async def check_password(self, user_id, password):
logger.info("Got password check for " + user_id)
data = {'user': {'id': user_id, 'password': password}}
Expand Down Expand Up @@ -208,4 +241,4 @@ def _require_keys(config, required):
def time_msec():
"""Get the current timestamp in milliseconds
"""
return int(time.time() * 1000)
return int(time.time() * 1000)

0 comments on commit 3cd310e

Please sign in to comment.