summary refs log tree commit diff
path: root/synapse/handlers/message.py (follow)
Commit message (Expand)AuthorAgeFilesLines
* Bundle aggregations outside of the serialization method. (#11612)Patrick Cloke2022-01-071-1/+1
* Do not attempt to bundled aggregations for /members and /state. (#11623)Patrick Cloke2021-12-291-3/+1
* Do not bundle aggregations for APIs which shouldn't include them. (#11592)Patrick Cloke2021-12-201-1/+3
* Add missing type hints to `synapse.logging.context` (#11556)Sean Quah2021-12-141-7/+6
* Allow events to be created with no `prev_events` (MSC2716) (#11243)Eric Eastwood2021-12-101-6/+18
* Include bundled aggregations in /sync and related fixes (#11478)Patrick Cloke2021-12-061-7/+1
* Refactor the code to inject bundled relations during serialization. (#11408)Patrick Cloke2021-11-231-1/+1
* Do not allow MSC3440 threads to fork threads (#11161)Patrick Cloke2021-11-181-6/+48
* Rename to more clear `get_insertion_event_id_by_batch_id` (MSC2716) (#11244)Eric Eastwood2021-11-081-1/+1
* Add remaining type hints to `synapse.events`. (#11098)Patrick Cloke2021-11-021-4/+10
* Implement an `on_new_event` callback (#11126)Brendan Abolivier2021-10-261-3/+6
* Resolve and share `state_groups` for all historical events in batch (MSC2716)...Eric Eastwood2021-10-131-23/+34
* Remove the deprecated BaseHandler. (#11005)Patrick Cloke2021-10-081-5/+2
* Merge tag 'v1.44.0rc2' into developOlivier Wilkinson (reivilibre)2021-09-301-9/+4
|\
| * Fix event context for outliers in important MSC2716 spot (#10938)Eric Eastwood2021-09-301-9/+4
* | Split `event_auth.check` into two parts (#10940)Richard van der Hoff2021-09-291-2/+4
* | Use direct references for configuration variables (part 6). (#10916)Patrick Cloke2021-09-291-6/+8
* | Use `RoomVersion` objects (#10934)Richard van der Hoff2021-09-291-6/+21
* | Ensure `(room_id, next_batch_id)` is unique to avoid cross-talk/conflicts bet...Eric Eastwood2021-09-281-0/+34
|/
* Use direct references for configuration variables (part 5). (#10897)Patrick Cloke2021-09-241-4/+4
* Use direct references for some configuration variables (part 3) (#10885)Patrick Cloke2021-09-231-2/+2
* Remove unnecessary parentheses around tuples returned from methods (#10889)Andrew Morgan2021-09-231-2/+2
* Rename MSC2716 things from `chunk` to `batch` to match `/batch_send` endpoint...Eric Eastwood2021-09-211-1/+1
* Require type hints in the handlers module. (#10831)Patrick Cloke2021-09-201-8/+12
* Use direct references for some configuration variables (#10798)Patrick Cloke2021-09-131-2/+2
* Move `maybe_kick_guest_users` out of `BaseHandler` (#10744)Richard van der Hoff2021-09-061-2/+25
* Allow room creator to send MSC2716 related events in existing room versions (...Eric Eastwood2021-09-041-3/+25
* Merge pull request from GHSA-3x4c-pq33-4w3qreivilibre2021-08-311-3/+20
* Port the ThirdPartyEventRules module interface to the new generic interface (...Brendan Abolivier2021-07-201-4/+4
* Use inline type hints in `handlers/` and `rest/`. (#10382)Jonathan de Jong2021-07-161-11/+7
* Add base starting insertion event when no chunk ID is provided (MSC2716) (#10...Eric Eastwood2021-07-081-0/+8
* Rebuild event auth when rebuilding an event after a call to a `ThirdPartyEven...Brendan Abolivier2021-07-081-4/+6
* Move methods involving event authentication to EventAuthHandler. (#10268)Patrick Cloke2021-07-011-3/+6
* Correct type hints for synapse.event_auth. (#10253)Patrick Cloke2021-06-301-0/+7
* Add endpoints for backfilling history (MSC2716) (#9247)Eric Eastwood2021-06-221-5/+99
* Implement knock feature (#6739)Sorunome2021-06-091-10/+20
* Run cache_joined_hosts_for_event in background (#9951)Erik Johnston2021-05-121-5/+40
* Always cache 'event_to_prev_state_group' (#9950)Erik Johnston2021-05-071-6/+7
* Don't set the external cache if its been done recently (#9905)Erik Johnston2021-05-051-4/+30
* Use get_current_users_in_room from store and not StateHandler (#9910)Erik Johnston2021-05-051-1/+1
* Add missing type hints to handlers and fix a Spam Checker type hint. (#9896)Patrick Cloke2021-04-291-7/+17
* Remove redundant "coding: utf-8" lines (#9786)Jonathan de Jong2021-04-141-1/+0
* Bugbear: Add Mutable Parameter fixes (#9682)Jonathan de Jong2021-04-081-3/+8
* Replace `room_invite_state_types` with `room_prejoin_state` (#9700)Richard van der Hoff2021-03-301-1/+1
* Add configs to make profile data more private (#9203)AndrewFerr2021-02-191-1/+7
* Update black, and run auto formatting over the codebase (#9381)Eric Eastwood2021-02-161-11/+23
* Add an admin API to get the current room state (#9168)Travis Ralston2021-02-021-1/+1
* Precompute joined hosts and store in Redis (#9198)Erik Johnston2021-01-261-0/+42
* Try and drop stale extremities. (#8929)Erik Johnston2020-12-181-1/+1
* Allow spam-checker modules to be provide async methods. (#8890)David Teller2020-12-111-1/+1
* Add admin API for logging in as a user (#8617)Erik Johnston2020-11-171-11/+10
* Block clients from sending server ACLs that lock the local server out. (#8708)Erik Johnston2020-11-031-0/+3
* Merge pull request #8678 from matrix-org/rav/fix_frozen_eventsRichard van der Hoff2020-10-281-3/+2
|\
| * Remove frozendict_json_encoder and support frozendicts everywhereRichard van der Hoff2020-10-281-3/+2
* | Abstract code for stripping room state into a separate method (#8671)Andrew Morgan2020-10-271-28/+7
* | Fix typos and spelling errors. (#8639)Patrick Cloke2020-10-231-1/+1
|/
* Fix modifying events in `ThirdPartyRules` modules (#8564)Richard van der Hoff2020-10-161-1/+6
* Merge pull request #8535 from matrix-org/rav/third_party_events_updatesRichard van der Hoff2020-10-151-8/+71
|\
| * Allow ThirdPartyRules modules to replace event contentRichard van der Hoff2020-10-131-2/+62
| * Move third_party_rules check to event creation timeRichard van der Hoff2020-10-131-8/+11
* | Simplify `_locally_reject_invite`Richard van der Hoff2020-10-131-2/+20
* | Remove redundant `token_id` parameter to create_eventRichard van der Hoff2020-10-131-5/+3
|/
* Move additional tasks to the background worker, part 4 (#8513)Patrick Cloke2020-10-131-9/+9
* Fix message duplication if something goes wrong after persisting the event (#...Erik Johnston2020-10-131-8/+40
* Allow modules to create and send events into rooms (#8479)Andrew Morgan2020-10-091-6/+5
* Remove the deprecated Handlers object (#8494)Patrick Cloke2020-10-091-2/+2
* update wordingRichard van der Hoff2020-10-071-2/+3
* kill off `send_nonmember_event`Richard van der Hoff2020-10-051-49/+25
* pull up event.sender assertionRichard van der Hoff2020-10-051-4/+4
* Move shadow-ban check down into `handle_new_client_event`.Richard van der Hoff2020-10-051-8/+24
* De-duplicate duplicate handlingRichard van der Hoff2020-10-051-18/+23
* Remove stream ordering from Metadata dict (#8452)Richard van der Hoff2020-10-051-1/+3
* Add EventStreamPosition type (#8388)Erik Johnston2020-09-241-3/+3
* Factor out `_send_dummy_event_for_room` (#8370)Richard van der Hoff2020-09-231-48/+54
* Add experimental support for sharding event persister. Again. (#8294)Erik Johnston2020-09-141-6/+8
* Make `StreamToken.room_key` be a `RoomStreamToken` instance. (#8281)Erik Johnston2020-09-111-0/+1
* Clean up `Notifier.on_new_room_event` code path (#8288)Erik Johnston2020-09-101-4/+0
* Fixup pusher pool notifications (#8287)Erik Johnston2020-09-091-1/+1
* Revert "Fixup pusher pool notifications"Erik Johnston2020-09-091-1/+1
* Fixup pusher pool notificationsErik Johnston2020-09-091-1/+1
* Stop sub-classing object (#8249)Patrick Cloke2020-09-041-2/+2
* Revert "Add experimental support for sharding event persister. (#8170)" (#8242)Brendan Abolivier2020-09-041-8/+6
* Add experimental support for sharding event persister. (#8170)Erik Johnston2020-09-021-6/+8
* Convert additional databases to async/await part 2 (#8200)Patrick Cloke2020-09-011-10/+3
* Remove unused parameter from, and add safeguard in, get_room_data (#8174)Andrew Morgan2020-08-261-8/+12
* Do not allow send_nonmember_event to be called with shadow-banned users. (#8158)Patrick Cloke2020-08-251-5/+34
* Stop shadow-banned users from sending non-member events. (#8142)Patrick Cloke2020-08-241-0/+10
* Be stricter about JSON that is accepted by Synapse (#8106)Patrick Cloke2020-08-191-2/+3
* Convert events worker database to async/await. (#8071)Patrick Cloke2020-08-181-3/+3
* Fix the return type of send_nonmember_events. (#8112)Patrick Cloke2020-08-181-1/+1
* Return the previous stream token if a non-member event is a duplicate. (#8093)Patrick Cloke2020-08-181-10/+15
* Run `remove_push_actions_from_staging` in foreground (#8081)Richard van der Hoff2020-08-131-3/+1
* Add type hints to handlers.message and events.builder (#8067)Erik Johnston2020-08-121-9/+13
* Add an assertion on prev_events in create_new_client_event (#8041)Richard van der Hoff2020-08-101-0/+9
* Convert synapse.api to async/await (#8031)Patrick Cloke2020-08-061-1/+1
* Rename database classes to make some sense (#8033)Erik Johnston2020-08-051-1/+1
* Remove hacky error handling for inlineDeferreds. (#7950)Patrick Cloke2020-07-271-12/+7
* Convert the message handler to async/await. (#7884)Patrick Cloke2020-07-221-136/+152
* Convert _base, profile, and _receipts handlers to async/await (#7860)Patrick Cloke2020-07-171-2/+6
* Generate real events when we reject invites (#7804)Richard van der Hoff2020-07-091-7/+16
* Convert directory handler to async/await (#7727)Patrick Cloke2020-06-221-1/+3
* Replace all remaining six usage with native Python 3 equivalents (#7704)Dagfinn Ilmari Mannsåker2020-06-161-3/+1
* Replace iteritems/itervalues/iterkeys with native versions. (#7692)Patrick Cloke2020-06-151-4/+4
* Performance improvements and refactor of Ratelimiter (#7595)Andrew Morgan2020-06-051-1/+0
* Optimise some references to hs.config (#7546)Richard van der Hoff2020-05-221-3/+5
* Add option to move event persistence off master (#7517)Erik Johnston2020-05-221-5/+7
* Add ability to wait for replication streams (#7542)Erik Johnston2020-05-221-11/+25
* Omit displayname or avatar_url if they aren't set instead of returning null (...Aaron Raimist2020-05-191-2/+6
* Allow censoring of events to happen on workers. (#7492)Erik Johnston2020-05-131-2/+0
* Add a configuration setting for the dummy event threshold (#7422)Brendan Abolivier2020-05-071-1/+3
* async/await is_server_admin (#7363)Andrew Morgan2020-05-011-44/+39
* Use the proper error code when a canonical alias that does not exist is used....Patrick Cloke2020-03-231-19/+38
* Don't filter out dummy events when we're checking the visibility of stateBrendan Abolivier2020-03-111-1/+1
* Validate the alt_aliases property of canonical alias events (#6971)Patrick Cloke2020-03-031-3/+44
* Port PresenceHandler to async/await (#6991)Erik Johnston2020-02-261-3/+2
* Add `allow_departed_users` param to `check_in_room_or_world_readable`Richard van der Hoff2020-02-191-4/+8
* make FederationHandler.send_invite asyncRichard van der Hoff2020-02-031-3/+2
* s/get_room_version/get_room_version_id/Richard van der Hoff2020-01-311-3/+5
* Pass room version object into event_auth.check and check_redaction (#6788)Richard van der Hoff2020-01-281-2/+6
* Remove unused hashes and depths from create_event paramsRichard van der Hoff2020-01-061-16/+5
* Remove unused hashes and depths from create_new_client_event paramsRichard van der Hoff2020-01-061-12/+14
* replace get_prev_events_and_hashes_for_room with get_prev_events_for_room in ...Richard van der Hoff2020-01-061-9/+3
* rename get_prev_events_for_room to get_prev_events_and_hashes_for_roomRichard van der Hoff2020-01-061-2/+4
* Change EventContext to use the Storage class (#6564)Erik Johnston2019-12-201-5/+5
* Prevent redacted events from appearing in message search (#6377)Andrew Morgan2019-12-111-2/+3
* Pull out room_invite_state_types config option once.Erik Johnston2019-12-091-1/+3
* Add ephemeral messages support (MSC2228) (#6409)Brendan Abolivier2019-12-031-1/+122
* Discard retention policies when retrieving stateBrendan Abolivier2019-11-281-1/+1
* Implement per-room message retention policiesBrendan Abolivier2019-11-041-2/+2
* Update black to 19.10b0 (#6304)Amber Brown2019-11-011-6/+8
* Merge pull request #6294 from matrix-org/erikj/add_state_storageErik Johnston2019-10-311-4/+6
|\
| * Port to use state storageErik Johnston2019-10-301-4/+6
* | Remove usage of deprecated logger.warn method from codebase (#6271)Andrew Morgan2019-10-311-1/+1
|/
* Use new EventPersistenceStoreErik Johnston2019-10-231-1/+2
* Fix dummy event insertion consent bug (#6053)Neil Johnson2019-09-261-27/+72
* Fix commentsErik Johnston2019-09-111-1/+1
* Fix how we check for self redactionErik Johnston2019-09-111-4/+18
* Allow use of different ratelimits for admin redactions.Erik Johnston2019-09-111-1/+7
* Apply suggestions from code reviewWill Hunt2019-08-231-2/+2
* Exempt bot usersHalf-Shot2019-08-231-1/+1
* Return user_type in get_user_by_idHalf-Shot2019-08-231-1/+4
* Deny redaction of events in a different room.Erik Johnston2019-07-311-1/+3
* Stop trying to fetch events with event_id=None. (#5753)Richard van der Hoff2019-07-241-1/+7
* Replace returnValue with return (#5736)Amber Brown2019-07-231-17/+15
* Ignore redactions of m.room.create events (#5701)Richard van der Hoff2019-07-171-9/+24
* Move logging utilities out of the side drawer of util/ and into logging/ (#5606)Amber Brown2019-07-041-1/+1
* Run Black. (#5482)Amber Brown2019-06-201-158/+100
* Run as background process and fix commentsErik Johnston2019-06-191-2/+5
* Add experimental option to reduce extremities.Erik Johnston2019-06-181-1/+71
* Add plugin APIs for implementations of custom event rules.Brendan Abolivier2019-06-141-2/+12
* Merge pull request #5220 from matrix-org/erikj/dont_bundle_live_eventsErik Johnston2019-05-241-0/+3
|\
| * Don't bundle aggs for /state and /members etc APIsErik Johnston2019-05-241-0/+3
* | Fix wordsErik Johnston2019-05-211-3/+3
* | Block attempts to annotate the same event twiceErik Johnston2019-05-201-1/+15
|/
* Allow client event serialization to be asyncErik Johnston2019-05-141-3/+4
* Do checks on aliases for incoming m.room.aliases events (#5128)Brendan Abolivier2019-05-081-0/+30
* Fix grammar and document get_current_users_in_room (#4998)Andrew Morgan2019-04-031-1/+1
* Collect room-version variations into one place (#4969)Richard van der Hoff2019-04-011-2/+5
* Revert spurious deleteErik Johnston2019-03-201-0/+4
* Use flagsErik Johnston2019-03-201-13/+5
* Move requester check into assert_accepted_privacy_policyErik Johnston2019-03-201-5/+8
* Only require consent for events with an associated requestErik Johnston2019-03-201-1/+5
* fix test_auto_create_auto_join_where_no_consent (#4886)Neil Johnson2019-03-191-3/+10
* Fix incorrect log about not persisting duplicate state event. (#4776)Richard van der Hoff2019-03-011-3/+4
* Merge branch 'develop' of github.com:matrix-org/synapse into erikj/redactions...Erik Johnston2019-01-291-28/+6
|\
| * Correctly set context.app_serviceErik Johnston2019-01-291-0/+2
| * Refactor event building into EventBuilderErik Johnston2019-01-291-29/+5
* | Implement rechecking of redactionsErik Johnston2019-01-291-1/+5
|/
* Merge pull request #4494 from matrix-org/erikj/fixup_event_validatorErik Johnston2019-01-291-1/+3
|\
| * Split up event validation between event and builderErik Johnston2019-01-281-1/+3
* | Correctly use default room version if none is setErik Johnston2019-01-281-2/+2
* | Pass through room version to event authErik Johnston2019-01-251-1/+6
|/
* Require event format version to parse or create eventsErik Johnston2019-01-251-1/+9
* Revert "Require event format version to parse or create events"Erik Johnston2019-01-251-9/+1
* Require event format version to parse or create eventsErik Johnston2019-01-231-1/+9
* Log some bits about event creation (#4121)Richard van der Hoff2018-10-311-0/+3
* Refactor state group lookup to reduce DB hits (#4011)Erik Johnston2018-10-251-12/+8
* Remove redundant run_as_background_process() from pusherpoolRichard van der Hoff2018-10-221-1/+1
* Avoid reraise, to improve stacktracesRichard van der Hoff2018-10-011-12/+13
* Merge pull request #3710 from matrix-org/rav/logcontext_for_pusher_updatesRichard van der Hoff2018-08-171-5/+2
|\
| * Fix logcontexts for running pushersRichard van der Hoff2018-08-171-5/+2
* | block event creation and room creation on hitting resource limitsNeil Johnson2018-08-161-1/+5
|/
* speed up /members and add at= and membership params (#3568)Matthew Hodgson2018-08-151-12/+76
* Rename async to async_helpers because `async` is a keyword on Python 3.7 (#3678)Amber Brown2018-08-101-1/+1
* Use new helper base class for ReplicationSendEventRestServletErik Johnston2018-07-311-7/+4
* Merge branch 'develop' into erikj/client_apis_moveErik Johnston2018-07-241-12/+19
|\
| * Fix missing attributes on workers.Erik Johnston2018-07-231-2/+3
| * Use new gettersErik Johnston2018-07-231-10/+16
* | Merge branch 'develop' of github.com:matrix-org/synapse into erikj/client_api...Erik Johnston2018-07-231-2/+2
|\|
| * Combine Limiter and LinearizerRichard van der Hoff2018-07-201-2/+2
| * Improvements to the LimiterRichard van der Hoff2018-07-201-1/+1
* | Move PaginationHandler to its own fileErik Johnston2018-07-201-240/+2
* | Move check_in_room_or_world_readable to AuthErik Johnston2018-07-201-34/+6
* | Split MessageHandler into read only and writersErik Johnston2018-07-181-131/+150
|/
* s/becuase/because/gMatthew Hodgson2018-07-101-1/+1
* run isortAmber Brown2018-07-091-13/+10
* Attempt to be more performant on PyPy (#3462)Amber Brown2018-06-281-3/+2
* allow non-consented users to still part rooms (to let us autopart them)Matthew Hodgson2018-06-251-2/+6
* Remove all global reactor imports & pass it around explicitly (#3424)Amber Brown2018-06-251-2/+2
* Pass around the reactor explicitly (#3385)Amber Brown2018-06-221-0/+1
* Remove run_on_reactor (#3395)Amber Brown2018-06-141-3/+1
* Exempt AS-registered users from doing gdprRichard van der Hoff2018-05-291-0/+3
* Misc. py3 fixesAdrian Tschira2018-05-241-4/+5
* Merge branch 'release-v0.30.0' into rav/localpart_in_consent_uriRichard van der Hoff2018-05-231-1/+4
|\
| * Support for putting %(consent_uri)s in messagesRichard van der Hoff2018-05-231-1/+4
* | Use the localpart in the consent uriRichard van der Hoff2018-05-231-1/+3
|/
* Reject attempts to send event before privacy consent is givenRichard van der Hoff2018-05-221-1/+85
* Make purge_history operate on tokensErik Johnston2018-05-151-6/+6
* Merge branch 'release-v0.28.1' into developRichard van der Hoff2018-05-011-1/+5
|\
| * Apply some limits to depth to counter abuseRichard van der Hoff2018-05-011-1/+5
* | pep8; remove spurious importRichard van der Hoff2018-04-271-1/+1
* | Merge remote-tracking branch 'origin/develop' into rav/use_run_in_backgroundRichard van der Hoff2018-04-271-13/+30
|\ \
| * \ Merge pull request #3142 from matrix-org/rav/reraiseRichard van der Hoff2018-04-271-7/+14
| |\ \
| | * | reraise exceptions more carefullyRichard van der Hoff2018-04-271-7/+14
| | |/
| * / Improve exception handling for background processesRichard van der Hoff2018-04-271-6/+16
| |/
* / Use run_in_background in preference to preserve_fnRichard van der Hoff2018-04-271-2/+3
|/
* Avoid creating events with huge numbers of prev_eventsRichard van der Hoff2018-04-161-34/+44
* Note why we're limiting concurrent event sendsErik Johnston2018-04-101-0/+5
* Limit concurrent event sends for a roomErik Johnston2018-04-091-49/+50
* Use static JSONEncodersRichard van der Hoff2018-03-291-2/+2
* Merge branch 'master' of github.com:matrix-org/synapse into developErik Johnston2018-03-191-3/+3
|\
| * Replace ujson with simplejsonErik Johnston2018-03-151-3/+3
* | extra_users is actually a list of UserIDsErik Johnston2018-03-131-1/+1
* | Add transactional API to history purgeRichard van der Hoff2018-03-121-5/+99
* | Return an error when doing two purges on a roomRichard van der Hoff2018-03-121-3/+14
* | Provide a means to pass a timestamp to purge_historyRichard van der Hoff2018-03-051-9/+5
* | Check event auth on the workerErik Johnston2018-03-011-16/+16
* | Correctly send ratelimit and extra_users paramsErik Johnston2018-03-011-0/+2
* | Fixup commentsErik Johnston2018-03-011-4/+4
* | Calculate push actions on workerErik Johnston2018-02-281-25/+61
* | Ensure that we delete staging push actions on errorsErik Johnston2018-02-151-3/+9
* | Merge pull request #2854 from matrix-org/erikj/event_create_workerErik Johnston2018-02-131-6/+22
|\ \
| * | Move presence handling into handle_new_client_eventErik Johnston2018-02-071-6/+6
| * | Add replication http endpoint for event sendingErik Johnston2018-02-071-0/+16
* | | Merge pull request #2858 from matrix-org/rav/purge_updatesRichard van der Hoff2018-02-091-2/+2
|\ \ \ | |/ / |/| |
| * | delete_local_events for purge_historyRichard van der Hoff2018-02-091-2/+2
| * | rename delete_old_state -> purge_historyRichard van der Hoff2018-02-091-1/+1
| |/
* | Remove pointless ratelimit checkErik Johnston2018-02-071-5/+0
* | Update copyrightErik Johnston2018-02-061-1/+1
* | s/_create_new_client_event/create_new_client_event/Erik Johnston2018-02-061-3/+3
* | Split event creation into a separate handlerErik Johnston2018-02-051-146/+160
|/
* replace 'except:' with 'except Exception:'Richard van der Hoff2017-10-231-1/+1
* fix isinstanceDavid Baker2017-10-111-1/+1
* Allow error strings from spam checkerDavid Baker2017-10-111-2/+6
* Merge pull request #2466 from matrix-org/erikj/groups_mergedErik Johnston2017-10-111-1/+2
|\
| * Merge branch 'develop' into erikj/groups_mergedDavid Baker2017-10-021-1/+53
| |\
| * | Split out profile handler to fix testsErik Johnston2017-08-251-1/+2
* | | Merge pull request #2483 from jeremycline/unfreeze-ujson-dumpErik Johnston2017-10-111-1/+2
|\ \ \ | |_|/ |/| |
| * | Unfreeze event before serializing with ujsonJeremy Cline2017-09-301-1/+2
| |/
* | Fix /joined_members to work with AS usersErik Johnston2017-09-281-11/+25