|
@@ -13,27 +13,23 @@
|
|
# See the License for the specific language governing permissions and
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
# limitations under the License.
|
|
|
|
|
|
-from synapse.http.server import HttpServer
|
|
|
|
-from synapse.api.errors import cs_error, CodeMessageException, StoreError
|
|
|
|
-from synapse.api.constants import EventTypes
|
|
|
|
-from synapse.storage.prepare_database import prepare_database
|
|
|
|
-from synapse.storage.engines import create_engine
|
|
|
|
-from synapse.server import HomeServer
|
|
|
|
-from synapse.federation.transport import server
|
|
|
|
-from synapse.util.ratelimitutils import FederationRateLimiter
|
|
|
|
-
|
|
|
|
-from synapse.util.logcontext import LoggingContext
|
|
|
|
-
|
|
|
|
-from twisted.internet import defer, reactor
|
|
|
|
-from twisted.enterprise.adbapi import ConnectionPool
|
|
|
|
-
|
|
|
|
-from collections import namedtuple
|
|
|
|
-from mock import patch, Mock
|
|
|
|
import hashlib
|
|
import hashlib
|
|
|
|
+from inspect import getcallargs
|
|
import urllib
|
|
import urllib
|
|
import urlparse
|
|
import urlparse
|
|
|
|
|
|
-from inspect import getcallargs
|
|
|
|
|
|
+from mock import Mock, patch
|
|
|
|
+from twisted.enterprise.adbapi import ConnectionPool
|
|
|
|
+from twisted.internet import defer, reactor
|
|
|
|
+
|
|
|
|
+from synapse.api.errors import CodeMessageException, cs_error
|
|
|
|
+from synapse.federation.transport import server
|
|
|
|
+from synapse.http.server import HttpServer
|
|
|
|
+from synapse.server import HomeServer
|
|
|
|
+from synapse.storage.engines import create_engine
|
|
|
|
+from synapse.storage.prepare_database import prepare_database
|
|
|
|
+from synapse.util.logcontext import LoggingContext
|
|
|
|
+from synapse.util.ratelimitutils import FederationRateLimiter
|
|
|
|
|
|
|
|
|
|
@defer.inlineCallbacks
|
|
@defer.inlineCallbacks
|
|
@@ -334,140 +330,6 @@ class SQLiteMemoryDbPool(ConnectionPool, object):
|
|
return create_engine(self.config.database_config)
|
|
return create_engine(self.config.database_config)
|
|
|
|
|
|
|
|
|
|
-class MemoryDataStore(object):
|
|
|
|
-
|
|
|
|
- Room = namedtuple(
|
|
|
|
- "Room",
|
|
|
|
- ["room_id", "is_public", "creator"]
|
|
|
|
- )
|
|
|
|
-
|
|
|
|
- def __init__(self):
|
|
|
|
- self.tokens_to_users = {}
|
|
|
|
- self.paths_to_content = {}
|
|
|
|
-
|
|
|
|
- self.members = {}
|
|
|
|
- self.rooms = {}
|
|
|
|
-
|
|
|
|
- self.current_state = {}
|
|
|
|
- self.events = []
|
|
|
|
-
|
|
|
|
- class Snapshot(namedtuple("Snapshot", "room_id user_id membership_state")):
|
|
|
|
- def fill_out_prev_events(self, event):
|
|
|
|
- pass
|
|
|
|
-
|
|
|
|
- def snapshot_room(self, room_id, user_id, state_type=None, state_key=None):
|
|
|
|
- return self.Snapshot(
|
|
|
|
- room_id, user_id, self.get_room_member(user_id, room_id)
|
|
|
|
- )
|
|
|
|
-
|
|
|
|
- def register(self, user_id, token, password_hash):
|
|
|
|
- if user_id in self.tokens_to_users.values():
|
|
|
|
- raise StoreError(400, "User in use.")
|
|
|
|
- self.tokens_to_users[token] = user_id
|
|
|
|
-
|
|
|
|
- def get_user_by_access_token(self, token):
|
|
|
|
- try:
|
|
|
|
- return {
|
|
|
|
- "name": self.tokens_to_users[token],
|
|
|
|
- }
|
|
|
|
- except Exception:
|
|
|
|
- raise StoreError(400, "User does not exist.")
|
|
|
|
-
|
|
|
|
- def get_room(self, room_id):
|
|
|
|
- try:
|
|
|
|
- return self.rooms[room_id]
|
|
|
|
- except Exception:
|
|
|
|
- return None
|
|
|
|
-
|
|
|
|
- def store_room(self, room_id, room_creator_user_id, is_public):
|
|
|
|
- if room_id in self.rooms:
|
|
|
|
- raise StoreError(409, "Conflicting room!")
|
|
|
|
-
|
|
|
|
- room = MemoryDataStore.Room(
|
|
|
|
- room_id=room_id,
|
|
|
|
- is_public=is_public,
|
|
|
|
- creator=room_creator_user_id
|
|
|
|
- )
|
|
|
|
- self.rooms[room_id] = room
|
|
|
|
-
|
|
|
|
- def get_room_member(self, user_id, room_id):
|
|
|
|
- return self.members.get(room_id, {}).get(user_id)
|
|
|
|
-
|
|
|
|
- def get_room_members(self, room_id, membership=None):
|
|
|
|
- if membership:
|
|
|
|
- return [
|
|
|
|
- v for k, v in self.members.get(room_id, {}).items()
|
|
|
|
- if v.membership == membership
|
|
|
|
- ]
|
|
|
|
- else:
|
|
|
|
- return self.members.get(room_id, {}).values()
|
|
|
|
-
|
|
|
|
- def get_rooms_for_user_where_membership_is(self, user_id, membership_list):
|
|
|
|
- return [
|
|
|
|
- m[user_id] for m in self.members.values()
|
|
|
|
- if user_id in m and m[user_id].membership in membership_list
|
|
|
|
- ]
|
|
|
|
-
|
|
|
|
- def get_room_events_stream(self, user_id=None, from_key=None, to_key=None,
|
|
|
|
- limit=0, with_feedback=False):
|
|
|
|
- return ([], from_key) # TODO
|
|
|
|
-
|
|
|
|
- def get_joined_hosts_for_room(self, room_id):
|
|
|
|
- return defer.succeed([])
|
|
|
|
-
|
|
|
|
- def persist_event(self, event):
|
|
|
|
- if event.type == EventTypes.Member:
|
|
|
|
- room_id = event.room_id
|
|
|
|
- user = event.state_key
|
|
|
|
- self.members.setdefault(room_id, {})[user] = event
|
|
|
|
-
|
|
|
|
- if hasattr(event, "state_key"):
|
|
|
|
- key = (event.room_id, event.type, event.state_key)
|
|
|
|
- self.current_state[key] = event
|
|
|
|
-
|
|
|
|
- self.events.append(event)
|
|
|
|
-
|
|
|
|
- def get_current_state(self, room_id, event_type=None, state_key=""):
|
|
|
|
- if event_type:
|
|
|
|
- key = (room_id, event_type, state_key)
|
|
|
|
- if self.current_state.get(key):
|
|
|
|
- return [self.current_state.get(key)]
|
|
|
|
- return None
|
|
|
|
- else:
|
|
|
|
- return [
|
|
|
|
- e for e in self.current_state
|
|
|
|
- if e[0] == room_id
|
|
|
|
- ]
|
|
|
|
-
|
|
|
|
- def set_presence_state(self, user_localpart, state):
|
|
|
|
- return defer.succeed({"state": 0})
|
|
|
|
-
|
|
|
|
- def get_presence_list(self, user_localpart, accepted):
|
|
|
|
- return []
|
|
|
|
-
|
|
|
|
- def get_room_events_max_id(self):
|
|
|
|
- return "s0" # TODO (erikj)
|
|
|
|
-
|
|
|
|
- def get_send_event_level(self, room_id):
|
|
|
|
- return defer.succeed(0)
|
|
|
|
-
|
|
|
|
- def get_power_level(self, room_id, user_id):
|
|
|
|
- return defer.succeed(0)
|
|
|
|
-
|
|
|
|
- def get_add_state_level(self, room_id):
|
|
|
|
- return defer.succeed(0)
|
|
|
|
-
|
|
|
|
- def get_room_join_rule(self, room_id):
|
|
|
|
- # TODO (erikj): This should be configurable
|
|
|
|
- return defer.succeed("invite")
|
|
|
|
-
|
|
|
|
- def get_ops_levels(self, room_id):
|
|
|
|
- return defer.succeed((5, 5, 5))
|
|
|
|
-
|
|
|
|
- def insert_client_ip(self, user, access_token, ip, user_agent):
|
|
|
|
- return defer.succeed(None)
|
|
|
|
-
|
|
|
|
-
|
|
|
|
def _format_call(args, kwargs):
|
|
def _format_call(args, kwargs):
|
|
return ", ".join(
|
|
return ", ".join(
|
|
["%r" % (a) for a in args] +
|
|
["%r" % (a) for a in args] +
|