Store appservice ID on register

This commit is contained in:
Daniel Wagner-Hall 2016-03-10 15:58:22 +00:00 committed by review.rocks
parent 703826886c
commit 465605d616
2 changed files with 38 additions and 7 deletions

View File

@ -182,6 +182,8 @@ class RegistrationHandler(BaseHandler):
errcode=Codes.EXCLUSIVE
)
service_id = service.id if service.is_exclusive_user(user_id) else None
yield self.check_user_id_not_appservice_exclusive(
user_id, allowed_appservice=service
)
@ -190,7 +192,8 @@ class RegistrationHandler(BaseHandler):
yield self.store.register(
user_id=user_id,
token=token,
password_hash=""
password_hash="",
appservice_id=service_id,
)
yield registered_user(self.distributor, user)
defer.returnValue((user_id, token))

View File

@ -76,7 +76,7 @@ class RegistrationStore(SQLBaseStore):
@defer.inlineCallbacks
def register(self, user_id, token, password_hash,
was_guest=False, make_guest=False):
was_guest=False, make_guest=False, appservice_id=None):
"""Attempts to register an account.
Args:
@ -87,16 +87,32 @@ class RegistrationStore(SQLBaseStore):
upgraded to a non-guest account.
make_guest (boolean): True if the the new user should be guest,
false to add a regular user account.
appservice_id (str): The ID of the appservice registering the user.
Raises:
StoreError if the user_id could not be registered.
"""
yield self.runInteraction(
"register",
self._register, user_id, token, password_hash, was_guest, make_guest
self._register,
user_id,
token,
password_hash,
was_guest,
make_guest,
appservice_id
)
self.is_guest.invalidate((user_id,))
def _register(self, txn, user_id, token, password_hash, was_guest, make_guest):
def _register(
self,
txn,
user_id,
token,
password_hash,
was_guest,
make_guest,
appservice_id
):
now = int(self.clock.time())
next_id = self._access_tokens_id_gen.get_next()
@ -111,9 +127,21 @@ class RegistrationStore(SQLBaseStore):
[password_hash, now, 1 if make_guest else 0, user_id])
else:
txn.execute("INSERT INTO users "
"(name, password_hash, creation_ts, is_guest) "
"VALUES (?,?,?,?)",
[user_id, password_hash, now, 1 if make_guest else 0])
"("
" name,"
" password_hash,"
" creation_ts,"
" is_guest,"
" appservice_id"
") "
"VALUES (?,?,?,?,?)",
[
user_id,
password_hash,
now,
1 if make_guest else 0,
appservice_id,
])
except self.database_engine.module.IntegrityError:
raise StoreError(
400, "User ID already taken.", errcode=Codes.USER_IN_USE