<?xml version='1.0' encoding='UTF-8'?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0"><channel><title>Token Authenticated Registration for Matrix</title><link>https://calcuode.com/matrix-gsoc/atom.xml</link><description>abc</description><atom:link href="https://calcuode.com/matrix-gsoc/atom.xml" rel="self"/><docs>http://www.rssboard.org/rss-specification</docs><generator>python-feedgen</generator><language>en</language><lastBuildDate>Wed, 22 Feb 2023 21:17:19 +0000</lastBuildDate><item><title>Introduction</title><link>https://calcuode.com/matrix-gsoc/2021-05-22_introduction.html</link><description>&lt;p&gt;&lt;em&gt;This post will pretty much be a copy of the proposal from my GSoC application. Hopefully it will give you a bit of an idea of what I'm going to be doing.&lt;/em&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;I run a small Matrix homeserver for family and friends with registrationdisabled. Like some others who run small servers I do not have the resources toprovide a public service, and do not want strangers to be partly reliant on mefor their communications.&lt;/p&gt;&lt;p&gt;Therefore, if someone would like an account I have to register it myself,which involves setting the username and password, and then provide themwith the required login information. This means: extra interaction is requiredto set-up an account, some people will forget to (or not be bothered to) changetheir password, and the existing registration flows integrated into clientscannot be used.&lt;/p&gt;&lt;p&gt;It would be useful for server admins to have a method of controllingregistrations which requires minimal setup and lets people register throughexisting clients. This functionality may also be useful to organisations whichdo not have a single sign-on system.The simplest solution is to authenticate registering users bya token which the admin provides. This would require a small addition to thespecification in the form of a new authentication type for the &lt;a href="https://spec.matrix.org/unstable/client-server-api/#user-interactive-authentication-api"&gt;User-Interactive Authentication API&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Existing projects, such as &lt;a href="https://github.com/ZerataX/matrix-registration/"&gt;ZerataX's matrix-registration&lt;/a&gt; partially solve the problem of token authenticated registration, but requireadditional effort on the part of admins and are disconnected from Matrixclients.&lt;/p&gt;&lt;p&gt;The minimum I would like to achieve for GSoC would be to write an MSC for anew user-interactive authentication type and implement the server side inSynapse, including an admin API for managing tokens. I would also aim toimplement the client side in Nheko, and, in the event that everything turns outto be easier than expected, it would be nice to support registrationtokens in matrix URIs.&lt;/p&gt;&lt;table&gt;	&lt;tr&gt;&lt;th&gt;Week&lt;/th&gt;&lt;th&gt;Planned Activities&lt;/th&gt;&lt;/tr&gt;	&lt;tr&gt;		&lt;td&gt;1-2&lt;/td&gt;		&lt;td&gt;Draft an MSC.&lt;br&gt;		Write a new UserInteractiveAuthChecker for Synapse using a hard-coded list of		allowed tokens for testing purposes.&lt;br&gt;		Add a configuration option to Synapse which adds the new checker to the		authentication flows for registration.&lt;/td&gt;	&lt;/tr&gt;	&lt;tr&gt;		&lt;td&gt;3-4&lt;/td&gt;		&lt;td&gt;Remove the hard-coded tokens and instead check against tokens stored in a database.&lt;/td&gt;	&lt;/tr&gt;	&lt;tr&gt;		&lt;td&gt;5-6&lt;/td&gt;		&lt;td&gt;Write an admin API for managing tokens.&lt;/td&gt;	&lt;/tr&gt;	&lt;tr&gt;		&lt;td&gt;7&lt;/td&gt;		&lt;td&gt;Add a fallback for clients that don't support the new auth type.&lt;/td&gt;	&lt;/tr&gt;	&lt;tr&gt;		&lt;td&gt;8-9&lt;/td&gt;		&lt;td&gt;Add support for the new auth type in Nheko.&lt;/td&gt;	&lt;/tr&gt;	&lt;tr&gt;		&lt;td&gt;10&lt;/td&gt;		&lt;td&gt;Buffer for finishing things off.&lt;/td&gt;	&lt;/tr&gt;&lt;/table&gt;&lt;p&gt;Possible challenges:&lt;ul&gt;	&lt;li&gt;Limiting the new UIA type to only the /register endpoint, or		make it sufficiently broad that it can be used for any UIA protected		endpoint&lt;/li&gt;	&lt;li&gt;Getting the database parts right&lt;/li&gt;	&lt;li&gt;Deleting single-use tokens after use&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;br&gt;&lt;h2&gt;Example&lt;/h2&gt;&lt;p&gt;&lt;em&gt;The details will likely change, but this should give an idea of how it willlook.&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Alice administers a Synapse homeserver (example.net) and wants to allow Bob tocreate account on it.&lt;br&gt;&lt;br&gt;Alice uses the Synapse admin API to generate a new token:&lt;pre&gt;POST /_synapse/admin/v2/registration-tokens/new{	"uses": 1}&lt;/pre&gt;The server replies with the generated token:&lt;pre&gt;HTTP/1.1 200 OK{	"token": "fBVFdqVE"}&lt;/pre&gt;Alice gives the token to Bob. When Bob goes to the registration page of hisclient and enters the homeserver, username, and password, the client attemptsto register the account:&lt;pre&gt;POST /_matrix/client/r0/register{	"device_id": "ABC",	"initial_device_display_name": "Some Client",	"password": "badpassword",	"username": "bob"}&lt;/pre&gt;However, the homeserver requires a registration token to authenticate therequest:&lt;pre&gt;HTTP/1.1 401 Unauthorized{	"flows": [		{			"stages": [ "m.registration.token" ]		}	],	"params": {},	"session": "xxxxx"}&lt;/pre&gt;The client then asks Bob to enter his registration token and sends a newrequest with an auth parameter:&lt;pre&gt;POST /_matrix/client/r0/register{	"auth": {		"type": "m.registration.token",		"token": "fBVFdqVE",		"session": "xxxxx"	}	"device_id": "ABC",	"initial_device_display_name": "Some Client",	"password": "badpassword",	"username": "bob"}&lt;/pre&gt;The server registers the account and deletes the token because Alice specifiedit could only be used once. It then responds with success:&lt;pre&gt;HTTP/1.1 200 OK{  "access_token": "abc123",  "device_id": "ABC",  "user_id": "@bob:example.net"}&lt;/pre&gt;The client proceeds to it's main interface where Bob can send a message toAlice.&lt;/p&gt;</description><guid isPermaLink="false">https://calcuode.com/matrix-gsoc/2021-05-22_introduction.html</guid><pubDate>Sat, 22 May 2021 18:36:00 +0100</pubDate></item><item><title>MSC3231</title><link>https://calcuode.com/matrix-gsoc/2021-06-04_msc3231.html</link><description>&lt;p&gt;I have written an MSC for token authenticated registration! Take a look at &lt;a href="https://github.com/matrix-org/matrix-doc/pull/3231"&gt;MSC3231&lt;/a&gt; and let me know what you think.&lt;/p&gt;</description><guid isPermaLink="false">https://calcuode.com/matrix-gsoc/2021-06-04_msc3231.html</guid><pubDate>Fri, 04 Jun 2021 20:11:00 +0100</pubDate></item><item><title>Synapse implementation with hard-coded tokens</title><link>https://calcuode.com/matrix-gsoc/2021-06-08_hard-coded.html</link><description>&lt;p&gt;I've got token authenticated registration working in Synapse with a hard-coded list of permissible tokens!&lt;ul&gt;	&lt;li&gt;&lt;a href="https://github.com/matrix-org/synapse/pull/10142/commits/5856f815471625170d67df83b1f02b913e8bf7e5"&gt;The commit&lt;/a&gt;&lt;/li&gt;	&lt;li&gt;&lt;a href="https://github.com/matrix-org/synapse/pull/10142"&gt;The draft pull request&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;p&gt;This involved:&lt;ul&gt;	&lt;li&gt;Adding a configuration option which prepends the registration token UIA type to the flows for registration&lt;/li&gt;	&lt;li&gt;Writing a new &lt;code&gt;UserInteractiveAuthChecker&lt;/code&gt; which validates a token or raises an error&lt;/li&gt;	&lt;li&gt;Writing a couple of unit tests&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;p&gt;The next thing to do will be storing the tokens in the database.&lt;/p&gt;</description><guid isPermaLink="false">https://calcuode.com/matrix-gsoc/2021-06-08_hard-coded.html</guid><pubDate>Tue, 08 Jun 2021 14:27:00 +0100</pubDate></item><item><title>Tokens in the database</title><link>https://calcuode.com/matrix-gsoc/2021-06-18_database.html</link><description>&lt;p&gt;My &lt;a href="https://github.com/matrix-org/synapse/pull/10142"&gt;WIP Synapse implementation&lt;/a&gt;now checks against tokens stored in a database table.The tokens can have an expiry time and/or a limited number of uses.The table could look a bit like this:&lt;/p&gt;&lt;table&gt;	&lt;tr&gt;&lt;th&gt;token&lt;/th&gt;   &lt;th&gt;allowed_uses&lt;/th&gt;&lt;th&gt;pending&lt;/th&gt;&lt;th&gt;completed&lt;/th&gt;&lt;th&gt;expiry_time&lt;/th&gt;&lt;/tr&gt;	&lt;tr&gt;&lt;td&gt;abcd&lt;/td&gt;    &lt;td&gt;NULL&lt;/td&gt;        &lt;td&gt;0&lt;/td&gt;      &lt;td&gt;3&lt;/td&gt;        &lt;td&gt;NULL&lt;/td&gt;&lt;/tr&gt;	&lt;tr&gt;&lt;td&gt;limited&lt;/td&gt; &lt;td&gt;1&lt;/td&gt;           &lt;td&gt;1&lt;/td&gt;      &lt;td&gt;0&lt;/td&gt;        &lt;td&gt;NULL&lt;/td&gt;&lt;/tr&gt;	&lt;tr&gt;&lt;td&gt;expires&lt;/td&gt; &lt;td&gt;5&lt;/td&gt;           &lt;td&gt;0&lt;/td&gt;      &lt;td&gt;1&lt;/td&gt;        &lt;td&gt;1625102880000&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;ul&gt;	&lt;li&gt;The token &lt;code&gt;abcd&lt;/code&gt; can be used an unlimited number of times, does not expire and has been used to successfully register three people.&lt;/li&gt;	&lt;li&gt;There is once person who has passed UIA using the token &lt;code&gt;limited&lt;/code&gt;, but not completed registration yet. That token can only be used once, so while it has a pending use it is invalid for anyone else.&lt;/li&gt;	&lt;li&gt;The token &lt;code&gt;expires&lt;/code&gt; has four uses left, and will be invalid after 01:28 UTC on July 1st 2021 (&lt;code&gt;expiry_time&lt;/code&gt; is given in milliseconds since the Unix epoch).&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;This involved: creating a table; writing functions to check token validity, seta pending use, and complete a use; and storing the token in the UIA session sothat the token is only used once registration is complete. There are still a few things to smooth out, but it works pretty well.Next I'll implement the validity checking endpoint, and then probably thefallback too, before getting on to the admin API for managing tokens.&lt;/p&gt;</description><guid isPermaLink="false">https://calcuode.com/matrix-gsoc/2021-06-18_database.html</guid><pubDate>Fri, 18 Jun 2021 14:50:00 +0100</pubDate></item><item><title>Validity Checking and Fallback</title><link>https://calcuode.com/matrix-gsoc/2021-06-30_validity-checking-and-fallback.html</link><description>&lt;p&gt;Another short update about my progress on the &lt;a href="https://github.com/matrix-org/synapse/pull/10142"&gt;Synapse implementation&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;I added:&lt;ul&gt;&lt;li&gt;The endpoint for &lt;a href="https://github.com/govynnus/matrix-doc/blob/token-registration/proposals/3231-token-authenticated-registration.md#checking-the-validity-of-a-token"&gt;checking the validity of a token&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;A fallback webpage which can be used by clients which don't know about the registration token auth type. This still has some problems with invalid tokens not being rejected gracefully, but that should be sorted at some point.&lt;/li&gt;&lt;/ul&gt;Both those things turned out to be pretty simple to implement. The exciting thing is that, with the fallback, you can now use a Matrix client to register with a token! The UX of fallbacks is a bit clunky though.&lt;/p&gt;&lt;p&gt;Now, the two big things left for this project are the Synapse admin API, and the client implementation in Nheko.&lt;/p&gt;</description><guid isPermaLink="false">https://calcuode.com/matrix-gsoc/2021-06-30_validity-checking-and-fallback.html</guid><pubDate>Wed, 30 Jun 2021 17:26:00 +0100</pubDate></item><item><title>Admin API</title><link>https://calcuode.com/matrix-gsoc/2021-07-16_admin-api.html</link><description>&lt;p&gt;The &lt;a href="https://github.com/matrix-org/synapse/pull/10142"&gt;Synapse implementation&lt;/a&gt;now has an admin API that lets you create, update, delete, and list tokens.This involved writing some new store functions that manipulate the &lt;code&gt;registration_tokens&lt;/code&gt; table, adding the new endpoints, and a fair few unit tests.Take a look at the &lt;a href="https://github.com/govynnus/synapse/blob/token-registration/docs/admin_api/registration_tokens.md"&gt;documentation&lt;/a&gt; for more detail about how it's used.&lt;/p&gt;&lt;p&gt;There are a few admin API related bits that I'd like to do before the end of GSoC:&lt;ul&gt;	&lt;li&gt;A human friendly format for &lt;code&gt;expiry_time&lt;/code&gt; (currently you have to give it as milliseconds since the start of the unix epoch).&lt;/li&gt;	&lt;li&gt;Pagination when listing tokens.&lt;/li&gt;	&lt;li&gt;Saying whether a token is valid or not when returning it.&lt;/li&gt;	&lt;li&gt;Maybe adding support for it in &lt;a href="https://github.com/JOJ0/synadm"&gt;synadm&lt;/a&gt;, which I found out about recently and haven't yet used.&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;p&gt;Apart from a couple issues with expiring sessions and the fallback, the Synapsepart of this project is now pretty much done!Next week I'll be starting on the Nheko implementation :-)&lt;/p&gt;</description><guid isPermaLink="false">https://calcuode.com/matrix-gsoc/2021-07-16_admin-api.html</guid><pubDate>Fri, 16 Jul 2021 14:06:00 +0100</pubDate></item><item><title>mtxclient and nheko</title><link>https://calcuode.com/matrix-gsoc/2021-08-12_mtxclient-and-nheko.html</link><description>&lt;p&gt;There is now a working client implementation of token authenticated registration!I &lt;a href="https://github.com/Nheko-Reborn/mtxclient/pull/60"&gt;added the registration token UIA type to mtxclient&lt;/a&gt; and &lt;a href="https://github.com/Nheko-Reborn/nheko/pull/680"&gt;used that in nheko&lt;/a&gt;.Those additions come to a grand total of 38 lines of code :D(although I did also &lt;a href="https://github.com/Nheko-Reborn/nheko/pull/664"&gt;reorganise nheko's registration page&lt;/a&gt;).&lt;/p&gt;&lt;p&gt;At the moment, nheko asks for the registration token using a dialog after theuser has filled in the registration form.&lt;/p&gt;&lt;img src="nheko-registration-token-dialog.png" alt="Screenshot of the input dialog asking for a registration token."&gt;&lt;p&gt;It could be nice to have the registration token field as part of the form,but the spec is a bit unclear about getting UIA flows in advance ofactually attempting an action, and the possibility of the user trying to changeusername/password part way through could make that a bit difficult. It may comein a future reorganisation of registration in nheko, though.&lt;/p&gt;</description><guid isPermaLink="false">https://calcuode.com/matrix-gsoc/2021-08-12_mtxclient-and-nheko.html</guid><pubDate>Thu, 12 Aug 2021 18:12:00 +0100</pubDate></item><item><title>Final Report</title><link>https://calcuode.com/matrix-gsoc/2021-08-22_final-report.html</link><description>&lt;p&gt;It's the end of Google Summer of Code, and I've achieved what I set out to do!I want to say a big thank you to my mentors anoa, Nico and red_sky for thehelp they have given, and to the others in the community who have madesuggestions for or comments on this project. I've learnt a lot in the pastcouple months, like how to work on big codebases within a big ecosystem,why unit tests can be useful, a bit of C++, and how to be on&lt;a href="https://youtu.be/bVKg4BHT0Z0"&gt;Matrix Live&lt;/a&gt; :-) &lt;/p&gt;&lt;p&gt;Links to all the work I've done are below, but in summary:&lt;ul&gt;	&lt;li&gt;I wrote a Matrix Spec Change (MSC) proposal for token authenticated registration&lt;/li&gt;	&lt;li&gt;I implemented the MSC in &lt;a href="https://github.com/matrix-org/synapse"&gt;Synapse&lt;/a&gt;,		the (currently) most used Matrix homeserver&lt;/li&gt;	&lt;li&gt;I implemented the MSC in &lt;a href="https://nheko-reborn.github.io/"&gt;Nheko&lt;/a&gt;,		a popular cross-platform Matrix client&lt;/li&gt;&lt;/ul&gt;For more details about each stage, see the&lt;a href="https://calcuode.com/matrix-gsoc/"&gt;blog index&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Of course, there are still a few things to do:&lt;ul&gt;	&lt;li&gt;Displaying a message to the user when they enter an invalid		registration token in Nheko&lt;/li&gt;	&lt;li&gt;Tests for Nheko once the Synapse code is merged&lt;/li&gt;	&lt;li&gt;Pagination of the &lt;code&gt;GET /_synapse/admin/v1/registration_tokens&lt;/code&gt;		endpoint in Synapse&lt;/li&gt;	&lt;li&gt;Tests in &lt;a href="https://github.com/matrix-org/complement/"&gt;Complement&lt;/a&gt;&lt;/li&gt;	&lt;li&gt;Getting the MSC merged&lt;/li&gt;	&lt;li&gt;And supporting registration tokens in more clients! (and servers)&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;h2&gt;Contributions&lt;/h2&gt;&lt;p&gt;Before the start of the coding period I worked on a couple of good first issuesfor Synapse and Nheko in order to get a feel for the codebases and workflows.&lt;ul&gt;	&lt;li&gt;&lt;a href="https://github.com/matrix-org/synapse/pull/10077"&gt;Make reason and score optional for report_event&lt;/a&gt; (Synapse)&lt;/li&gt;	&lt;li&gt;&lt;a href="https://github.com/Nheko-Reborn/nheko/pull/600"&gt;Registration well known&lt;/a&gt; (Nheko)&lt;/li&gt;&lt;/ul&gt;As the first part of the GSoC project, I wrote an MSC which describes howregistration tokens in Matrix would work.&lt;ul&gt;	&lt;li&gt;&lt;a href="https://github.com/matrix-org/matrix-doc/pull/3231"&gt;MSC3231: Token authenticated registration&lt;/a&gt; (Matrix specification)&lt;/li&gt;&lt;/ul&gt;I then started work on the server implementation in Synapse. This is the bulkof the code I wrote for the project, and was gradually improved over the courseof the coding period. Included is: a configuration option which requires theregistration token user-interactive authentication stage to be completed forregistration; an endpoint for checking the validity of registration tokens;a fallback web page for clients that do not support the authentication typenatively; and an admin API for managing registration tokens.&lt;ul&gt;	&lt;li&gt;&lt;a href="https://github.com/matrix-org/synapse/pull/10142"&gt;Implement MSC3231: Token authenticated registration&lt;/a&gt; (Synapse)&lt;/li&gt;	&lt;li&gt;&lt;a href="https://github.com/matrix-org/synapse/pull/10561"&gt;Display an error during failure of fallback UIA&lt;/a&gt; (Synapse)&lt;/li&gt;&lt;/ul&gt;Before I started work on the client implementation, I reorganised the code forthe registration page in Nheko to make it easier to understand. I then addedsupport for the registration token authentication type to&lt;a href="https://github.com/Nheko-Reborn/mtxclient"&gt;mtxclient&lt;/a&gt; (the Matrixlibrary Nheko uses), and used this in Nheko. When a server requires aregistration token, Nheko presents an input dialog where the user can enter one.&lt;ul&gt;	&lt;li&gt;&lt;a href="https://github.com/Nheko-Reborn/nheko/pull/664"&gt;Reorganise src/RegisterPage.cpp&lt;/a&gt; (Nheko)&lt;/li&gt;	&lt;li&gt;&lt;a href="https://github.com/Nheko-Reborn/mtxclient/pull/60"&gt;Support registration token UIA type&lt;/a&gt; (mtxclient)&lt;/li&gt;	&lt;li&gt;&lt;a href="https://github.com/Nheko-Reborn/nheko/pull/680"&gt;Support token authenticated registration&lt;/a&gt; (Nheko)&lt;/li&gt;	&lt;li&gt;&lt;a href="https://github.com/Nheko-Reborn/mtxclient/pull/61"&gt;Support registration token validity checking&lt;/a&gt; (mtxclient)&lt;/li&gt;&lt;/ul&gt;During GSoC I found out about &lt;a href="https://github.com/JOJ0/synadm"&gt;synadm&lt;/a&gt;,a CLI tool for convenient use of Synapse's admin API. Towards the end of thecoding period I added support for the new registration token admin API tosynadm, which has made token management much easier.&lt;ul&gt;	&lt;li&gt;&lt;a href="https://github.com/JOJ0/synadm/pull/42"&gt;Add support for registration token management&lt;/a&gt; (synadm)&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;h2&gt;How to try it&lt;/h2&gt;&lt;p&gt;&lt;s&gt;None of the code has been released yet, so you'll need to get the latestsources of each project.&lt;/s&gt;The Synapse implementation is released in v1.42.0, but for Nheko you will needto get the latest source:&lt;/p&gt;&lt;!--&lt;p&gt;For Synapse:&lt;pre&gt;git clone https://github.com/matrix-org/synapse.gitcd synapsegit checkout develop&lt;/pre&gt;and follow the &lt;a href="https://matrix-org.github.io/synapse/latest/setup/installation.html#installing-synapse"&gt;installation instructions&lt;/a&gt;,but use &lt;code&gt;pip install -e .&lt;/code&gt; rather than &lt;code&gt;pip install matrix-synapse&lt;/code&gt;.&lt;/p&gt;--&gt;&lt;p&gt;&lt;pre&gt;git clone https://github.com/Nheko-Reborn/nheko.git&lt;/pre&gt;and follow the &lt;a href="https://github.com/Nheko-Reborn/nheko#build-requirements"&gt;installation instructions&lt;/a&gt; using the bundled mtxclient.&lt;/p&gt;</description><guid isPermaLink="false">https://calcuode.com/matrix-gsoc/2021-08-22_final-report.html</guid><pubDate>Sun, 22 Aug 2021 16:31:00 +0100</pubDate></item><item><title>Synapse and Synadm</title><link>https://calcuode.com/matrix-gsoc/2021-09-22_synapse-and-synadm.html</link><description>&lt;p&gt;The &lt;a href="https://github.com/matrix-org/synapse/pull/10142"&gt;Synapse implementation&lt;/a&gt;has been released since Synapse&lt;a href="https://github.com/matrix-org/synapse/releases/tag/v1.42.0"&gt;v1.42.0&lt;/a&gt;,and support for&lt;a href="https://github.com/JOJ0/synadm/pull/42"&gt;registration token management in synadm&lt;/a&gt;is available in &lt;a href="https://github.com/JOJ0/synadm/releases/tag/v0.31"&gt;v0.31&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;This makes it a lot easier to use registration tokens: just enable the Synapseconfig option (&lt;code&gt;registration_requires_token&lt;/code&gt;) and use&lt;code&gt;synadm regtok new&lt;/code&gt;. Client support is still lacking though :(&lt;/p&gt;</description><guid isPermaLink="false">https://calcuode.com/matrix-gsoc/2021-09-22_synapse-and-synadm.html</guid><pubDate>Wed, 22 Sep 2021 18:02:00 +0100</pubDate></item><item><title>Token Authenticated Registration in the Matrix Spec</title><link>https://calcuode.com/matrix-gsoc/2022-02-03_spec-released.html</link><description>&lt;p&gt;Been a while since the last update...&lt;br&gt;The main news is that with the release of v1.2 of the Matrix specification,&lt;a href="https://spec.matrix.org/v1.2/client-server-api/#token-authenticated-registration"&gt;token authenticated registration&lt;/a&gt;is now in the released spec!ShadowJonathan has written patches to use the stable&lt;code&gt;m.login.registration_token&lt;/code&gt; auth type in&lt;a href="https://github.com/matrix-org/synapse/pull/11867"&gt;Synapse&lt;/a&gt; and&lt;a href="https://github.com/ruma/ruma/commit/f63168538970c76bdd1639c27606442a80a567a9"&gt;Ruma&lt;/a&gt;,and I've done the same for&lt;a href="https://github.com/Nheko-Reborn/mtxclient/pull/71"&gt;mtxclient&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;A while (2 months) ago I started working on getting token authenticatedregistration support into matrix-js-sdk and matrix-react-sdk so that it can beused in Element Web. I didn't finish this, but hopefully I'll get back to itin the next few weeks. We'll see.&lt;/p&gt;</description><guid isPermaLink="false">https://calcuode.com/matrix-gsoc/2022-02-03_spec-released.html</guid><pubDate>Thu, 03 Feb 2022 16:08:00 +0100</pubDate></item><item><title>Element Web supports registration tokens</title><link>https://calcuode.com/matrix-gsoc/2023-02-22_element-web.html</link><description>&lt;p&gt;Just over a year since they made it into the spec, Element Web finally natively&lt;a href="https://github.com/matrix-org/matrix-react-sdk/pull/7275"&gt;supports registration tokens&lt;/a&gt;in version 1.11.23!&lt;/p&gt;</description><guid isPermaLink="false">https://calcuode.com/matrix-gsoc/2023-02-22_element-web.html</guid><pubDate>Wed, 22 Feb 2023 21:00:00 +0000</pubDate></item></channel></rss>