ensure that user is in default-rooms on login

This commit is contained in:
HF 2022-07-22 13:08:05 +02:00
parent efeed17537
commit 48f83239ef
2 changed files with 37 additions and 10 deletions

View File

@ -16,6 +16,8 @@ modules:
ppfunurl: "http://local.pixelplanet.url:port"
# if true, only mail-verified users can log in
verified: true
# rooms that will be automatically joined on login
autojoin_rooms: ['#pp_en:pixelplanet.fun', '#pp_int:pixelplanet.fun']
```
## References

View File

@ -4,11 +4,12 @@
# All the self.api._underline using methods could break on updates
#
from typing import Awaitable, Callable, Optional, Tuple
from typing import Awaitable, Callable, Optional, Tuple, List
import logging
import synapse
from synapse import module_api
from synapse.types import RoomAlias
logger = logging.getLogger(__name__)
@ -26,11 +27,9 @@ class PPfunAuthProvider:
self.check_verified = config['verified']
else:
self.check_verified = False
self.credentials = {
"bob": "building",
"@scoop:matrix.org": "digging",
}
if 'autojoin_rooms' in config:
self.parsed_rooms = False
self.autojoin_rooms = config["autojoin_rooms"]
api.register_password_auth_provider_callbacks(
check_3pid_auth = self.check_3pid_pass,
@ -39,6 +38,21 @@ class PPfunAuthProvider:
},
)
# resolve room_aliases to room_ids
async def translate_room_aliases_to_ids(
self,
room_aliases: List[str],
) -> List[str]:
room_ids = []
logger.info('Translating room_aliases to ids')
for alias in room_aliases:
aliasObject = RoomAlias.from_string(alias)
room = await self.api._store.get_association_from_room_alias(aliasObject)
if room is not None:
logger.info('Map alias %s to room %s', alias, room.room_id)
room_ids.append(room.room_id)
return room_ids;
async def check_credentials(
self,
query,
@ -87,11 +101,21 @@ class PPfunAuthProvider:
await registration_handler._register_email_threepid(user_id, threepid_dict, None)
return True
async def join_auto_rooms(
self,
user_id: str,
) -> None:
if not self.parsed_rooms:
self.autojoin_rooms = await self.translate_room_aliases_to_ids(self.autojoin_rooms)
self.parsed_rooms = True
for room_id in self.autojoin_rooms:
await self.api.update_room_membership(user_id, user_id, room_id, 'join')
async def login(
self,
ppfun_id,
ppfun_name,
ppfun_email,
ppfun_id: str,
ppfun_name: str,
ppfun_email: str,
) -> Optional[
Tuple[
str,
@ -114,6 +138,7 @@ class PPfunAuthProvider:
return None
else:
await self.set_email(user_id, ppfun_email)
await self.join_auto_rooms(user_id)
logger.info('User %s logged in via ppfun %s', user_id, ppfun_name)
return user_id, None
@ -159,7 +184,7 @@ class PPfunAuthProvider:
}
if username.startswith('@pp_'):
query['id'] = username[4: username.index(':')]
elif username.startswith('pp_') and username.endswith(f':{self.api._server_name}'):
elif username.startswith('pp_') and username.endswith(f':{self.api.server_name}'):
query['id'] = username[3: username.index(':')]
else:
query['name'] = username