コード例 #1
0
    def test_sign_message(self):
        builder = EventBuilder({
            'content': {
                'body': "Here is the message content",
            },
            'event_id': "$0:domain",
            'origin': "domain",
            'origin_server_ts': 1000000,
            'type': "m.room.message",
            'room_id': "!r:domain",
            'sender': "@u:domain",
            'signatures': {},
            'unsigned': {
                'age_ts': 1000000
            },
        })

        add_hashes_and_signatures(builder, HOSTNAME, self.signing_key)

        event = builder.build()

        self.assertTrue(hasattr(event, 'hashes'))
        self.assertIn('sha256', event.hashes)
        self.assertEquals(
            event.hashes['sha256'],
            "onLKD1bGljeBWQhWZ1kaP9SorVmRQNdN5aM2JYU2n/g",
        )

        self.assertTrue(hasattr(event, 'signatures'))
        self.assertIn(HOSTNAME, event.signatures)
        self.assertIn(KEY_NAME, event.signatures["domain"])
        self.assertEquals(
            event.signatures[HOSTNAME][KEY_NAME],
            "Wm+VzmOUOz08Ds+0NTWb1d4CZrVsJSikkeRxh6aCcUw"
            "u6pNC78FunoD7KNWzqFn241eYHYMGCA5McEiVPdhzBA")
コード例 #2
0
ファイル: test_presence.py プロジェクト: vadimzakirov/synapse
    def _add_new_user(self, room_id, user_id):
        """Add new user to the room by creating an event and poking the federation API."""

        hostname = get_domain_from_id(user_id)

        room_version = self.get_success(
            self.store.get_room_version_id(room_id))

        builder = EventBuilder(
            state=self.state,
            auth=self.auth,
            store=self.store,
            clock=self.clock,
            hostname=hostname,
            signing_key=self.random_signing_key,
            room_version=KNOWN_ROOM_VERSIONS[room_version],
            room_id=room_id,
            type=EventTypes.Member,
            sender=user_id,
            state_key=user_id,
            content={"membership": Membership.JOIN},
        )

        prev_event_ids = self.get_success(
            self.store.get_latest_event_ids_in_room(room_id))

        event = self.get_success(builder.build(prev_event_ids, None))

        self.get_success(
            self.federation_handler.on_receive_pdu(hostname, event))

        # Check that it was successfully persisted.
        self.get_success(self.store.get_event(event.event_id))
        self.get_success(self.store.get_event(event.event_id))
コード例 #3
0
    def test_sign_minimal(self):
        builder = EventBuilder(
            {
                'event_id': "$0:domain",
                'origin': "domain",
                'origin_server_ts': 1000000,
                'signatures': {},
                'type': "X",
                'unsigned': {
                    'age_ts': 1000000
                },
            }, )

        add_hashes_and_signatures(builder, HOSTNAME, self.signing_key)

        event = builder.build()

        self.assertTrue(hasattr(event, 'hashes'))
        self.assertIn('sha256', event.hashes)
        self.assertEquals(
            event.hashes['sha256'],
            "6tJjLpXtggfke8UxFhAKg82QVkJzvKOVOOSjUDK4ZSI",
        )

        self.assertTrue(hasattr(event, 'signatures'))
        self.assertIn(HOSTNAME, event.signatures)
        self.assertIn(KEY_NAME, event.signatures["domain"])
        self.assertEquals(
            event.signatures[HOSTNAME][KEY_NAME],
            "2Wptgo4CwmLo/Y8B8qinxApKaCkBG2fjTWB7AbP5Uy+"
            "aIbygsSdLOFzvdDjww8zUVKCmI02eP9xtyJxc/cLiBA",
        )
コード例 #4
0
    def test_sign_minimal(self):
        builder = EventBuilder(
            {
                'event_id': "$0:domain",
                'origin': "domain",
                'origin_server_ts': 1000000,
                'signatures': {},
                'type': "X",
                'unsigned': {'age_ts': 1000000},
            },
        )

        add_hashes_and_signatures(builder, HOSTNAME, self.signing_key)

        event = builder.build()

        self.assertTrue(hasattr(event, 'hashes'))
        self.assertIn('sha256', event.hashes)
        self.assertEquals(
            event.hashes['sha256'],
            "6tJjLpXtggfke8UxFhAKg82QVkJzvKOVOOSjUDK4ZSI",
        )

        self.assertTrue(hasattr(event, 'signatures'))
        self.assertIn(HOSTNAME, event.signatures)
        self.assertIn(KEY_NAME, event.signatures["domain"])
        self.assertEquals(
            event.signatures[HOSTNAME][KEY_NAME],
            "2Wptgo4CwmLo/Y8B8qinxApKaCkBG2fjTWB7AbP5Uy+"
            "aIbygsSdLOFzvdDjww8zUVKCmI02eP9xtyJxc/cLiBA",
        )
コード例 #5
0
    def test_sign_message(self):
        builder = EventBuilder(
            {
                'content': {'body': "Here is the message content"},
                'event_id': "$0:domain",
                'origin': "domain",
                'origin_server_ts': 1000000,
                'type': "m.room.message",
                'room_id': "!r:domain",
                'sender': "@u:domain",
                'signatures': {},
                'unsigned': {'age_ts': 1000000},
            }
        )

        add_hashes_and_signatures(builder, HOSTNAME, self.signing_key)

        event = builder.build()

        self.assertTrue(hasattr(event, 'hashes'))
        self.assertIn('sha256', event.hashes)
        self.assertEquals(
            event.hashes['sha256'], "onLKD1bGljeBWQhWZ1kaP9SorVmRQNdN5aM2JYU2n/g"
        )

        self.assertTrue(hasattr(event, 'signatures'))
        self.assertIn(HOSTNAME, event.signatures)
        self.assertIn(KEY_NAME, event.signatures["domain"])
        self.assertEquals(
            event.signatures[HOSTNAME][KEY_NAME],
            "Wm+VzmOUOz08Ds+0NTWb1d4CZrVsJSikkeRxh6aCcUw"
            "u6pNC78FunoD7KNWzqFn241eYHYMGCA5McEiVPdhzBA",
        )
コード例 #6
0
ファイル: test_presence.py プロジェクト: matrix-org/synapse
    def _add_new_user(self, room_id, user_id):
        """Add new user to the room by creating an event and poking the federation API.
        """

        hostname = get_domain_from_id(user_id)

        room_version = self.get_success(self.store.get_room_version(room_id))

        builder = EventBuilder(
            state=self.state,
            auth=self.auth,
            store=self.store,
            clock=self.clock,
            hostname=hostname,
            signing_key=self.random_signing_key,
            format_version=room_version_to_event_format(room_version),
            room_id=room_id,
            type=EventTypes.Member,
            sender=user_id,
            state_key=user_id,
            content={"membership": Membership.JOIN},
        )

        prev_event_ids = self.get_success(
            self.store.get_latest_event_ids_in_room(room_id)
        )

        event = self.get_success(builder.build(prev_event_ids))

        self.get_success(self.federation_handler.on_receive_pdu(hostname, event))

        # Check that it was successfully persisted.
        self.get_success(self.store.get_event(event.event_id))
        self.get_success(self.store.get_event(event.event_id))
コード例 #7
0
    def _generate_event_json(self, txn, rows):
        events = []
        for row in rows:
            d = dict(row)

            d.pop("stream_ordering", None)
            d.pop("topological_ordering", None)
            d.pop("processed", None)

            if "origin_server_ts" not in d:
                d["origin_server_ts"] = d.pop("ts", 0)
            else:
                d.pop("ts", 0)

            d.pop("prev_state", None)
            d.update(json.loads(d.pop("unrecognized_keys")))

            d["sender"] = d.pop("user_id")

            d["content"] = json.loads(d["content"])

            if "age_ts" not in d:
                # For compatibility
                d["age_ts"] = d.get("origin_server_ts", 0)

            d.setdefault("unsigned", {})["age_ts"] = d.pop("age_ts")

            outlier = d.pop("outlier", False)

            # d.pop("membership", None)

            d.pop("state_hash", None)

            d.pop("replaces_state", None)

            b = EventBuilder(d)
            b.internal_metadata.outlier = outlier

            events.append(b)

        for i, ev in enumerate(events):
            signatures = self._get_event_signatures_txn(
                txn,
                ev.event_id,
            )

            ev.signatures = {
                n: {k: encode_base64(v)
                    for k, v in s.items()}
                for n, s in signatures.items()
            }

            hashes = self._get_event_content_hashes_txn(
                txn,
                ev.event_id,
            )

            ev.hashes = {k: encode_base64(v) for k, v in hashes.items()}

            prevs = self._get_prev_events_and_state(txn, ev.event_id)

            ev.prev_events = [(e_id, h) for e_id, h, is_state in prevs
                              if is_state == 0]

            # ev.auth_events = self._get_auth_events(txn, ev.event_id)

            hashes = dict(ev.auth_events)

            for e_id, hash in ev.prev_events:
                if e_id in hashes and not hash:
                    hash.update(hashes[e_id])
            #
            # if hasattr(ev, "state_key"):
            #     ev.prev_state = [
            #         (e_id, h)
            #         for e_id, h, is_state in prevs
            #         if is_state == 1
            #     ]

        return [e.build() for e in events]