summary refs log tree commit diff
path: root/synapse/rest/client/v1 (follow)
Commit message (Expand)AuthorAgeFilesLines
* fix mypyRichard van der Hoff2021-03-191-4/+7
* Fix type-hints from bad merge.Patrick Cloke2021-03-181-2/+2
* Initial spaces summary API (#9643)Richard van der Hoff2021-03-181-3/+63
* Fix up types for the typing handler. (#9638)Patrick Cloke2021-03-171-6/+9
* Add support for stable MSC2858 API (#9617)Richard van der Hoff2021-03-161-5/+34
* Prevent bundling aggregations for state events (#9619)Andrew Morgan2021-03-161-1/+4
* Prometheus metrics for logins and registrations (#9511)Richard van der Hoff2021-03-041-2/+8
* Record the SSO Auth Provider in the login token (#9510)Richard van der Hoff2021-03-041-4/+2
* SSO: redirect to public URL before setting cookies (#9436)Richard van der Hoff2021-02-261-0/+28
* Update black, and run auto formatting over the codebase (#9381)Eric Eastwood2021-02-164-6/+18
* Merge pull request #9150 from Yoric/develop-contextDavid Teller2021-02-081-1/+1
|\
| * FIXUP: Making get_event_context a bit more paranoidDavid Teller2021-01-281-1/+1
* | Add 'brand' field to MSC2858 response (#9242)Richard van der Hoff2021-01-271-0/+2
|/
* Implement MSC2858 support (#9183)Richard van der Hoff2021-01-271-6/+49
* Support icons for Identity Providers (#9154)Richard van der Hoff2021-01-201-2/+1
* Validate the server name for the /publicRooms endpoint. (#9161)Patrick Cloke2021-01-191-2/+17
* Add some tests for the IDP picker flowRichard van der Hoff2021-01-071-2/+2
* Combine the SSO Redirect Servlets (#9015)Richard van der Hoff2021-01-041-69/+20
* Allow redacting events on workers (#8994)Patrick Cloke2020-12-291-7/+10
* Convert internal pusher dicts to attrs classes. (#8940)Patrick Cloke2020-12-161-14/+1
* Honour AS ratelimit settings for /login requests (#8920)Erik Johnston2020-12-111-6/+19
* Support "identifier" dicts in UIA (#8848)Richard van der Hoff2020-12-011-105/+2
* Simplify appservice login code (#8847)Richard van der Hoff2020-11-301-6/+21
* Use TYPE_CHECKING instead of magic MYPY variable. (#8770)Patrick Cloke2020-11-171-3/+2
* Remove unused OPTIONS handlers. (#8621)Patrick Cloke2020-10-229-53/+0
* Expose the experimental appservice login flow to clients. (#8504)Patrick Cloke2020-10-191-0/+2
* Add correct M_BAD_JSON error code to /profile/{userId}/displayname (#8517)Aaron Raimist2020-10-141-1/+3
* Remove the deprecated Handlers object (#8494)Patrick Cloke2020-10-093-21/+15
* Do not expose the experimental appservice login flow to clients. (#8440)Patrick Cloke2020-10-011-2/+0
* Make token serializing/deserializing async (#8427)Erik Johnston2020-09-303-5/+12
* Allow additional SSO properties to be passed to the client (#8413)Patrick Cloke2020-09-301-7/+15
* Simplify super() calls to Python 3 syntax. (#8344)Patrick Cloke2020-09-1811-38/+38
* Allow appservice users to /login (#8320)Will Hunt2020-09-181-10/+39
* Don't remember `enabled` of deleted push rules and properly return 404 for mi...reivilibre2020-09-091-2/+13
* Move and refactor LoginRestServlet helper methods (#8182)Andrew Morgan2020-08-281-54/+6
* Do not propagate typing notifications from shadow-banned users. (#8176)Patrick Cloke2020-08-261-11/+15
* Remove unused parameter from, and add safeguard in, get_room_data (#8174)Andrew Morgan2020-08-261-1/+0
* Stop shadow-banned users from sending non-member events. (#8142)Patrick Cloke2020-08-241-30/+44
* Stop shadow-banned users from sending invites. (#8095)Patrick Cloke2020-08-201-27/+40
* Remove `ChainedIdGenerator`. (#8123)Erik Johnston2020-08-191-1/+1
* Be stricter about JSON that is accepted by Synapse (#8106)Patrick Cloke2020-08-191-4/+7
* Convert pusher databases to async/await. (#8075)Patrick Cloke2020-08-141-4/+5
* Implement new experimental push rules (#7997)Brendan Abolivier2020-08-101-2/+9
|\
| * Merge branch 'develop' of github.com:matrix-org/synapse into babolivier/new_p...Brendan Abolivier2020-08-061-1/+1
| |\
| * | Incorporate reviewBrendan Abolivier2020-08-061-2/+2
| * | Fix PUT /pushrules to use the right rule IDsBrendan Abolivier2020-08-031-2/+9
* | | Convert synapse.api to async/await (#8031)Patrick Cloke2020-08-061-1/+1
| |/ |/|
* | Allow guests to operate in encrypted rooms (#7314)Michael Albert2020-08-031-1/+1
|/
* Allow moving typing off master (#7869)Erik Johnston2020-07-161-0/+9
* Ensure that calls to `json.dumps` are compatible with the standard library js...Patrick Cloke2020-07-151-6/+7
* Return the proper 403 Forbidden error during errors with JWT logins. (#7844)Patrick Cloke2020-07-151-5/+3
* Add the option to validate the `iss` and `aud` claims for JWT logins. (#7827)Patrick Cloke2020-07-141-6/+19
* `update_membership` declaration: now always returns an event id. (#7809)Richard van der Hoff2020-07-091-4/+2
* Stop passing bytes when dumping JSON (#7799)Patrick Cloke2020-07-081-1/+1
* Add documentation for JWT login type and improve sample config. (#7776)Patrick Cloke2020-07-061-21/+27
* Fix inconsistent handling of upper and lower cases of email addresses. (#7021)Dirk Klimpel2020-07-031-4/+8
* Merge branch 'master' into developPatrick Cloke2020-07-021-7/+3
|\
| * Ensure that HTML pages served from Synapse include headers to avoid embedding.Patrick Cloke2020-07-021-7/+3
* | Back out MSC2625 implementation (#7761)Brendan Abolivier2020-07-011-2/+2
* | add org.matrix.login.jwt so that m.login.jwt can be deprecated (#7675)Sorunome2020-06-241-1/+4
* | Implement unread counter (MSC2625) (#7673)Brendan Abolivier2020-06-171-2/+2
|\ \
| * \ Merge branch 'develop' into babolivier/mark_unreadBrendan Abolivier2020-06-151-1/+3
| |\ \
| * | | Use temporary prefixes as per the MSCBrendan Abolivier2020-06-101-1/+1
| * | | Rename dont_push into mark_unreadBrendan Abolivier2020-06-101-2/+2
| | |/ | |/|
* | | Replace all remaining six usage with native Python 3 equivalents (#7704)Dagfinn Ilmari Mannsåker2020-06-162-5/+2
* | | Update m.id.phone to use 'phone' instead of 'number' (#7687)Andrew Morgan2020-06-151-2/+10
| |/ |/|
* | Remove "user_id" from GET /presence. (#7606)Will Hunt2020-06-111-1/+3
|/
* Performance improvements and refactor of Ratelimiter (#7595)Andrew Morgan2020-06-051-44/+21
* Advertise the token login type when OpenID Connect is enabled. (#7631)Patrick Cloke2020-06-041-8/+3
* Fix a bug in automatic user creation with m.login.jwt. (#7585)Olof Johansson2020-06-011-7/+8
* Add ability to wait for replication streams (#7542)Erik Johnston2020-05-221-8/+12
* Support UI Authentication for OpenID Connect accounts (#7457)Patrick Cloke2020-05-151-12/+19
* Allow expired accounts to logout (#7443)Andrew Morgan2020-05-141-3/+3
* Implement OpenID Connect-based login (#7256)Quentin Gliech2020-05-081-3/+25
* Improve error responses when a remote server doesn't allow you to access its ...Andrew Morgan2020-04-061-13/+20
* Support CAS in UI Auth flows. (#7186)Patrick Cloke2020-04-031-4/+16
* Refactor the CAS code (move the logic out of the REST layer to a handler) (#7...Patrick Cloke2020-03-261-155/+16
* Fix CAS redirect url (#6634)Naugrimm2020-03-241-11/+16
* Clean-up some auth/login REST code (#7115)Patrick Cloke2020-03-201-8/+0
* Remove special casing of `m.room.aliases` events (#7034)Patrick Cloke2020-03-171-12/+0
* Merge branch 'master' into developBrendan Abolivier2020-03-031-30/+13
|\
| * Factor out complete_sso_login and expose it to the Module APIBrendan Abolivier2020-03-031-56/+2
| * Add a whitelist for the SSO confirmation step.Richard van der Hoff2020-03-021-8/+18
| * Add a confirmation step to the SSO login flowBrendan Abolivier2020-03-021-6/+34
* | Ensure 'deactivated' parameter is a boolean on user admin API, Fix error hand...Andrew Morgan2020-02-261-0/+1
* | Clarify list/set/dict/tuple comprehensions and enforce via flake8 (#6957)Patrick Cloke2020-02-212-5/+5
|/
* Move MSC2432 stuff onto unstable prefix (#6948)Richard van der Hoff2020-02-191-1/+7
* Implement GET /_matrix/client/r0/rooms/{roomId}/aliases (#6939)Richard van der Hoff2020-02-181-0/+23
* MSC2260: Block direct sends of m.room.aliases events (#6794)Richard van der Hoff2020-01-301-0/+12
* Fixup synapse.rest to pass mypy (#6732)Erik Johnston2020-01-202-7/+13
* Fix `/events/:event_id` deprecated API. (#6731)Erik Johnston2020-01-201-1/+1
* Clean up startup for the pusher (#6558)Richard van der Hoff2019-12-181-17/+16
* Back out change preventing setting null avatar URLsErik Johnston2019-12-111-6/+6
* Better errors regarding changing avatar_url (#6497)Andrew Morgan2019-12-091-3/+8
* Port rest/v1 to async/awaitErik Johnston2019-12-0510-166/+117
* MSC2367 Allow reason field on all member eventsErik Johnston2019-11-281-1/+1
* LintBrendan Abolivier2019-11-201-1/+3
* Apply suggestions from code reviewErik Johnston2019-11-181-1/+1
* Only do `rc_login` ratelimiting on succesful login.Erik Johnston2019-11-061-18/+93
* Support for routing outbound HTTP requests via a proxy (#6239)Richard van der Hoff2019-11-011-1/+1
* Update black to 19.10b0 (#6304)Amber Brown2019-11-011-6/+7
* Remove usage of deprecated logger.warn method from codebase (#6271)Andrew Morgan2019-10-311-1/+1
* Port room rest handlers to async/awaitErik Johnston2019-10-291-94/+72
* cas: support setting display name (#6114)Valérian Rousset2019-10-111-1/+3
* Land improved room list based on room stats (#6019)Erik Johnston2019-10-021-0/+8
* isortErik Johnston2019-09-251-1/+1
* Add tags for event_id and txn_id in event sendingErik Johnston2019-09-251-0/+18
* Merge branch 'develop' into rav/saml_mapping_workRichard van der Hoff2019-09-1911-67/+67
|\
| * Use the v2 Identity Service API for lookups (MSC2134 + MSC2140) (#5976)Andrew Morgan2019-09-111-0/+1
| * Remove double return statements (#5962)Andrew Morgan2019-09-031-1/+0
| * Remove unnecessary parentheses around return statements (#5931)Andrew Morgan2019-08-3011-66/+66
* | Record mappings from saml users in an external tableRichard van der Hoff2019-09-131-0/+14
|/
* Return 404 instead of 403 when retrieving an event without perms (#5798)Andrew Morgan2019-08-061-3/+11
* Merge tag 'v1.2.0rc2' into developAndrew Morgan2019-07-241-7/+30
|\
| * Fix servlet metric names (#5734)Jorik Schellekens2019-07-241-7/+30
* | Replace returnValue with return (#5736)Amber Brown2019-07-2311-76/+72
|/
* Clean up exception handling for access_tokens (#5656)Richard van der Hoff2019-07-112-4/+15
* Remove access-token support from RegistrationHandler.register (#5641)Richard van der Hoff2019-07-081-10/+4
* Factor out some redundant code in the login impl (#5639)Richard van der Hoff2019-07-081-39/+10
* Complete the SAML2 implementation (#5422)Richard van der Hoff2019-07-021-8/+46
|\
| * Merge branch 'develop' into rav/saml2_clientRichard van der Hoff2019-07-011-1/+1
| |\
| * | rename BaseSSORedirectServlet for consistencyRichard van der Hoff2019-06-271-3/+3
| * | Move all the saml stuff out to a centralised handlerRichard van der Hoff2019-06-261-11/+2
| * | Merge branch 'develop' into rav/saml2_clientRichard van der Hoff2019-06-2610-327/+252
| |\ \
| * | | Code cleanups and simplifications.Richard van der Hoff2019-06-111-42/+41
| * | | Merge remote-tracking branch 'origin/develop' into rav/saml2_clientRichard van der Hoff2019-06-1012-203/+185
| |\ \ \
| * | | | SAML2 Improvements and redirect stuffAlexander Trost2019-06-021-0/+46
* | | | | Fix JWT login with new users (#5586)PauRE2019-07-021-6/+3
| |_|_|/ |/| | |
* | | | Fix JWT login (#5555)PauRE2019-06-271-1/+1
| |_|/ |/| |
* | | Split public rooms directory auth config in twoBrendan Abolivier2019-06-241-1/+1
* | | Run Black. (#5482)Amber Brown2019-06-2010-322/+246
| |/ |/|
* | Hawkowl/fix missing auth (#5328)Amber Brown2019-06-041-0/+1
* | Unify v1 and v2 REST client APIs (#5226)Amber Brown2019-06-0312-203/+183
|/
* Fix ignored filter field in `/messages` endpointEisha Chen-yen-su2019-05-301-0/+2
* Merge pull request #5256 from aaronraimist/logout-correct-errorErik Johnston2019-05-301-18/+9
|\
| * LintAaron Raimist2019-05-291-2/+0
| * Get rid of try exceptAaron Raimist2019-05-271-16/+9
| * Show correct error when logging out and access token is missingAaron Raimist2019-05-241-4/+4
* | Serve CAS login over r0 (#5286)Amber Brown2019-05-301-2/+2
|/
* Drop support for v2_alpha API prefix (#5190)Richard van der Hoff2019-05-151-4/+4
* Allow client event serialization to be asyncErik Johnston2019-05-142-14/+20
* add options to require an access_token to GET /profile and /publicRooms on CS...Matthew Hodgson2019-05-082-12/+34
* Move admin api impl to its own packageRichard van der Hoff2019-05-011-896/+0
* Move admin API to a new prefixRichard van der Hoff2019-05-011-20/+50
* Move admin API away from ClientV1RestServletRichard van der Hoff2019-05-011-33/+33
* Merge branch 'develop' of github.com:matrix-org/synapse into babolivier/accou...Erik Johnston2019-04-173-78/+42
|\
| * Remove usage of request.postpathErik Johnston2019-04-161-8/+8
| * Only handle GET requests for /push_rulesErik Johnston2019-04-151-0/+7
| * Add admin API for group deletionErik Johnston2019-04-031-0/+26
| * Fix grammar and document get_current_users_in_room (#4998)Andrew Morgan2019-04-031-1/+1
| * Remove presence lists (#4989)Neil Johnson2019-04-031-67/+0
| * remove log line for password (#4965)Neil Johnson2019-03-281-2/+0
* | Add management endpoints for account validityBrendan Abolivier2019-04-171-0/+39
|/
* Support 3PID login in password providers (#4931)Andrew Morgan2019-03-261-4/+45
* Use flagsErik Johnston2019-03-201-2/+4
* Gracefully handle failing to kick userErik Johnston2019-03-201-19/+27
* Log new room IDErik Johnston2019-03-201-1/+6
* Add ratelimiting on login (#4821)Brendan Abolivier2019-03-151-0/+10
* Send message after room has been shutdownErik Johnston2019-03-061-11/+11
* Add 'server_version' endpoint to admin APIJoseph Weston2019-03-011-0/+23
* Fix registration on workers (#4682)Erik Johnston2019-02-201-2/+2
* Move register_device into handlerErik Johnston2019-02-181-37/+22
* Fix typosAndrew Morgan2019-01-221-4/+4
* Return well_known in /login response (#4319)Richard van der Hoff2018-12-241-7/+11
* create support user (#4141)Neil Johnson2018-12-141-1/+10
* Initialise user displayname from SAML2 data (#4272)Richard van der Hoff2018-12-071-0/+5
* Factor SSO success handling out of CAS login (#4264)Richard van der Hoff2018-12-071-29/+76
* Rip out half-implemented m.login.saml2 support (#4265)Richard van der Hoff2018-12-061-67/+2
* Fix non-ASCII pushrules (#4248)Amber Brown2018-12-041-12/+23
* fix type errorAmber Brown2018-12-031-1/+1
* Support m.login.sso (#4220)Richard van der Hoff2018-11-271-4/+9
* Refactor state group lookup to reduce DB hits (#4011)Erik Johnston2018-10-251-1/+2
* Clean up room alias creationErik Johnston2018-10-191-32/+5
* Merge pull request #3835 from krombel/fix_3821Amber Brown2018-09-121-1/+5
|\
| * fix VOIP crashes under Python 3 (#3821)Krombel2018-09-101-1/+5
* | Port rest/ to Python 3 (#3823)Amber Brown2018-09-127-52/+57
|/
* Allow guests to access /rooms/:roomId/event/:eventIdWill Hunt2018-08-201-1/+1
* Integrate presence from hotfixes (#3694)Amber Brown2018-08-181-1/+2
* speed up /members and add at= and membership params (#3568)Matthew Hodgson2018-08-151-3/+29
* Don't fail requests to unbind 3pids for non supporting ID serversErik Johnston2018-08-081-2/+9
* Merge branch 'master' into developRichard van der Hoff2018-08-022-2/+2
|\
| * Check room visibility for /event/ requestsRichard van der Hoff2018-08-022-2/+2
* | Merge pull request #3620 from fuzzmz/return-404-room-not-foundRichard van der Hoff2018-08-011-2/+2
|\ \
| * | return NotFoundError if room not foundSerban Constantin2018-07-311-2/+2
* | | Python 3: Convert some unicode/bytes uses (#3569)Amber Brown2018-08-021-7/+15
|/ /
* | make /context lazyload & filter aware (#3567)Matthew Hodgson2018-07-271-0/+9
* | Merge branch 'develop' of github.com:matrix-org/synapse into erikj/client_api...Erik Johnston2018-07-233-437/+126
|\ \
| * | Admin API for creating new users (#3415)Amber Brown2018-07-201-0/+122
| * | Move v1-only APIs into their own module & isolate deprecated ones (#3460)Amber Brown2018-07-192-437/+4
| |/
* | Move RoomContextHandler out of HandlersErik Johnston2018-07-181-2/+2
* | Split MessageHandler into read only and writersErik Johnston2018-07-182-15/+13
|/
* check isort by travisKrombel2018-07-162-3/+3
* Fix develop because I broke it :( (#3535)Amber Brown2018-07-141-2/+2
* Merge pull request #3534 from krombel/use_parse_and_asserts_from_servletAmber Brown2018-07-147-74/+42
|\
| * fix sytestsAmber Brown2018-07-141-1/+1
| * add changelogKrombel2018-07-131-1/+1
| * rename assert_params_in_request to assert_params_in_dictKrombel2018-07-135-14/+14
| * Use parse_{int,str} and assert from http.servletKrombel2018-07-137-75/+43
* | Make auth & transactions more testable (#3499)Amber Brown2018-07-143-6/+5
|/
* run isortAmber Brown2018-07-0914-86/+88
* Attempt to be more performant on PyPy (#3462)Amber Brown2018-06-282-2/+3
* update doc for deactivate APIMatthew Hodgson2018-06-261-1/+1
* add GDPR erase param to deactivate APIMatthew Hodgson2018-06-261-1/+12
* Revert "Revert "Merge pull request #3431 from matrix-org/rav/erasure_visibili...Erik Johnston2018-06-251-1/+3
* Revert "Merge pull request #3431 from matrix-org/rav/erasure_visibility"Richard van der Hoff2018-06-221-3/+1
* Merge pull request #3431 from matrix-org/rav/erasure_visibilityErik Johnston2018-06-221-1/+3
|\
| * mark accounts as erased when requestedRichard van der Hoff2018-06-121-1/+3
* | Remove run_on_reactor (#3395)Amber Brown2018-06-141-7/+0
|/
* fix logRichard van der Hoff2018-06-071-1/+1
* Fix event-purge-by-ts admin APIRichard van der Hoff2018-06-071-6/+4
* Replace some more comparisons with sixAdrian Tschira2018-05-191-3/+5
* Merge pull request #3221 from matrix-org/erikj/purge_tokenErik Johnston2018-05-181-7/+10
|\
| * Make purge_history operate on tokensErik Johnston2018-05-151-7/+10
* | Move RoomCreationHandler out of synapse.handlers.HandlersRichard van der Hoff2018-05-172-5/+4
|/
* Set Server header in SynapseRequestRichard van der Hoff2018-05-101-1/+0
* Burminate v1authAdrian Tschira2018-04-302-2/+6
* add guard for None on purge_history apiKrombel2018-04-301-1/+14
* Merge pull request #3156 from NotAFile/py3-hmac-bytesRichard van der Hoff2018-04-301-7/+9
|\
| * Construct HMAC as bytes on py3Adrian Tschira2018-04-291-7/+9
* | Use six.moves.urlparseAdrian Tschira2018-04-152-5/+6
|/
* Merge pull request #3079 from matrix-org/erikj/limit_concurrent_sendsErik Johnston2018-04-101-6/+1
|\
| * Use create_and_send_nonmember_event everywhereErik Johnston2018-04-091-6/+1
* | Merge pull request #3061 from NotAFile/add-some-byte-stringsRichard van der Hoff2018-04-091-2/+2
|\ \
| * | Add b prefixes to some strings that are bytes in py3Adrian Tschira2018-04-041-2/+2
* | | Merge pull request #2938 from dklug/developRichard van der Hoff2018-04-091-1/+4
|\ \ \ | |_|/ |/| |
| * | Return 401 for invalid access_token on logoutdklug2018-03-021-1/+4
* | | Merge pull request #2986 from jplatte/join_reponse_room_idRichard van der Hoff2018-04-051-1/+6
|\ \ \ | |_|/ |/| |
| * | Add room_id to the response of `rooms/{roomId}/join`Jonas Platte2018-03-131-1/+6
* | | Merge branch 'master' of github.com:matrix-org/synapse into developErik Johnston2018-03-191-1/+1
|\ \ \ | |/ / |/| |
| * | Replace ujson with simplejsonErik Johnston2018-03-151-1/+1
* | | RoomMembershipRestServlet doesn't handle /forgetErik Johnston2018-03-131-1/+1
* | | Add transactional API to history purgeRichard van der Hoff2018-03-121-3/+35
* | | Provide a means to pass a timestamp to purge_historyRichard van der Hoff2018-03-051-3/+55
| |/ |/|
* | Move RoomMemberHandler out of HandlersErik Johnston2018-03-012-12/+14
* | Merge pull request #2854 from matrix-org/erikj/event_create_workerErik Johnston2018-02-131-1/+0
|\ \
| * | Add event_creator workerErik Johnston2018-02-071-1/+0
* | | Fix typos in purge api & docRichard van der Hoff2018-02-131-3/+1
* | | Merge pull request #2858 from matrix-org/rav/purge_updatesRichard van der Hoff2018-02-091-1/+10
|\ \ \ | |/ / |/| |
| * | delete_local_events for purge_historyRichard van der Hoff2018-02-091-1/+10
* | | Update copyrightErik Johnston2018-02-062-0/+2
* | | Update places where we create eventsErik Johnston2018-02-052-9/+11
* | | Merge branch 'develop' into travis/admin-list-mediaTravis Ralston2018-02-012-17/+34
|\ \ \
| * | | add ?ts massaging for ASes (#2754)Matthew Hodgson2018-01-231-6/+11
| * | | rewrite based on PR feedback:Matthew Hodgson2018-01-191-13/+7
| * | | fix up v1, and improve errorsMatthew Hodgson2018-01-191-11/+29
| |/ /
* / / Add an admin route to get all the media in a roomTravis Ralston2018-01-201-0/+22
|/ /
* | Add /room/{id}/event/{id} to synapseRichard van der Hoff2018-01-091-3/+26
* | Better logging when login can't find a 3pidRichard van der Hoff2017-12-201-4/+10
|/
* Delete devices in various logout situationsRichard van der Hoff2017-11-291-2/+25
* Move set_password into its own handlerRichard van der Hoff2017-11-291-2/+2