SYN-48: Track User-Agents as well as IPs for client devices.

This commit is contained in:
Erik Johnston 2014-09-29 13:35:15 +01:00
parent 0fdf308874
commit f7d80930f2
4 changed files with 20 additions and 5 deletions

View File

@ -223,8 +223,17 @@ class Auth(object):
user = yield self.get_user_by_token(access_token) user = yield self.get_user_by_token(access_token)
ip_addr = self.hs.get_ip_from_request(request) ip_addr = self.hs.get_ip_from_request(request)
user_agent = request.requestHeaders.getRawHeaders(
"User-Agent",
default=[""]
)[0]
if user and access_token and ip_addr: if user and access_token and ip_addr:
self.store.insert_client_ip(user, access_token, ip_addr) self.store.insert_client_ip(
user,
access_token,
ip_addr,
user_agent
)
defer.returnValue(user) defer.returnValue(user)
except KeyError: except KeyError:

View File

@ -294,13 +294,15 @@ class DataStore(RoomMemberStore, RoomStore,
defer.returnValue(self.min_token) defer.returnValue(self.min_token)
def insert_client_ip(self, user, access_token, ip): def insert_client_ip(self, user, access_token, ip, user_agent):
return self._simple_insert( return self._simple_insert(
"user_ips", "user_ips",
{ {
"user": user.to_string(), "user": user.to_string(),
"access_token": access_token, "access_token": access_token,
"ip": ip "ip": ip,
"user_agent": user_agent,
"last_used": int(self._clock.time()),
} }
) )

View File

@ -3,7 +3,9 @@ CREATE TABLE IF NOT EXISTS user_ips (
user TEXT NOT NULL, user TEXT NOT NULL,
access_token TEXT NOT NULL, access_token TEXT NOT NULL,
ip TEXT NOT NULL, ip TEXT NOT NULL,
CONSTRAINT user_ip UNIQUE (user, access_token, ip) ON CONFLICT IGNORE user_agent TEXT NOT NULL,
last_used INTEGER NOT NULL,
CONSTRAINT user_ip UNIQUE (user, access_token, ip, user_agent) ON CONFLICT REPLACE
); );
CREATE INDEX IF NOT EXISTS user_ips_user ON user_ips(user); CREATE INDEX IF NOT EXISTS user_ips_user ON user_ips(user);

View File

@ -35,7 +35,9 @@ CREATE TABLE IF NOT EXISTS user_ips (
user TEXT NOT NULL, user TEXT NOT NULL,
access_token TEXT NOT NULL, access_token TEXT NOT NULL,
ip TEXT NOT NULL, ip TEXT NOT NULL,
CONSTRAINT user_ip UNIQUE (user, access_token, ip) ON CONFLICT IGNORE user_agent TEXT NOT NULL,
last_used INTEGER NOT NULL,
CONSTRAINT user_ip UNIQUE (user, access_token, ip, user_agent) ON CONFLICT REPLACE
); );
CREATE INDEX IF NOT EXISTS user_ips_user ON user_ips(user); CREATE INDEX IF NOT EXISTS user_ips_user ON user_ips(user);