diff --git a/synapse/storage/__init__.py b/synapse/storage/__init__.py
index d53c090a91..169a80dce4 100644
--- a/synapse/storage/__init__.py
+++ b/synapse/storage/__init__.py
@@ -294,13 +294,15 @@ class DataStore(RoomMemberStore, RoomStore,
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(
"user_ips",
{
"user": user.to_string(),
"access_token": access_token,
- "ip": ip
+ "ip": ip,
+ "user_agent": user_agent,
+ "last_used": int(self._clock.time()),
}
)
diff --git a/synapse/storage/schema/delta/v5.sql b/synapse/storage/schema/delta/v5.sql
index 380eec6f35..f5a667a250 100644
--- a/synapse/storage/schema/delta/v5.sql
+++ b/synapse/storage/schema/delta/v5.sql
@@ -3,7 +3,9 @@ CREATE TABLE IF NOT EXISTS user_ips (
user TEXT NOT NULL,
access_token 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);
diff --git a/synapse/storage/schema/users.sql b/synapse/storage/schema/users.sql
index 89eab8babe..d96dd9f075 100644
--- a/synapse/storage/schema/users.sql
+++ b/synapse/storage/schema/users.sql
@@ -35,7 +35,9 @@ CREATE TABLE IF NOT EXISTS user_ips (
user TEXT NOT NULL,
access_token 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);
|