Daniel Olsen
c1c58122ea
All checks were successful
Eval nix flake / evals (push) Successful in 4m34s
It should be possible to log in with @username:pvv.ntnu.no now That way client well-known in third party clients will work it might also fix the weird logout of session issues in element
51 lines
1.4 KiB
Python
51 lines
1.4 KiB
Python
from typing import Awaitable, Callable, Optional, Tuple
|
|
|
|
from smtplib import SMTP_SSL as SMTP
|
|
|
|
import synapse
|
|
from synapse import module_api
|
|
|
|
import re
|
|
|
|
class SMTPAuthProvider:
|
|
def __init__(self, config: dict, api: module_api):
|
|
self.api = api
|
|
|
|
self.config = config
|
|
|
|
api.register_password_auth_provider_callbacks(
|
|
auth_checkers={
|
|
("m.login.password", ("password",)): self.check_pass,
|
|
},
|
|
)
|
|
|
|
async def check_pass(
|
|
self,
|
|
username: str,
|
|
login_type: str,
|
|
login_dict: "synapse.module_api.JsonDict",
|
|
):
|
|
if login_type != "m.login.password":
|
|
return None
|
|
|
|
# Convert `@username:server` to `username`
|
|
match = re.match(r'^@([\da-z\-\.=_\/\+]+):[\w\d\.:\[\]]+$', username)
|
|
username = match.group(1) if match else username
|
|
|
|
result = False
|
|
with SMTP(self.config["smtp_host"]) as smtp:
|
|
password = login_dict.get("password")
|
|
try:
|
|
smtp.login(username, password)
|
|
result = True
|
|
except:
|
|
return None
|
|
|
|
if result == True:
|
|
userid = self.api.get_qualified_user_id(username)
|
|
if not self.api.check_user_exists(userid):
|
|
self.api.register_user(username)
|
|
return (userid, None)
|
|
else:
|
|
return None
|