From 2d7efd8d6c3ee03847ebb13357424289590d8041 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Wed, 8 Nov 2023 13:08:49 +0100 Subject: [PATCH] mod/notification-matrix: introduce $SetupMatrix{Authenticate,JoinRoom} for setup Well, now that we have a JSON parser... Let's improve the user experience a bit. --- .../01-authenticate.avif | Bin 0 -> 4209 bytes .../notification-matrix.d/01-home-server.avif | Bin 2317 -> 0 bytes .../02-access-token.avif | Bin 4105 -> 0 bytes .../notification-matrix.d/02-join-room.avif | Bin 0 -> 3955 bytes .../notification-matrix.d/03-join-room.avif | Bin 3166 -> 0 bytes doc/mod/notification-matrix.md | 83 ++++++++---------- global-functions.rsc | 2 +- mod/notification-matrix.rsc | 79 +++++++++++++++++ news-and-changes.rsc | 1 + 9 files changed, 120 insertions(+), 45 deletions(-) create mode 100644 doc/mod/notification-matrix.d/01-authenticate.avif delete mode 100644 doc/mod/notification-matrix.d/01-home-server.avif delete mode 100644 doc/mod/notification-matrix.d/02-access-token.avif create mode 100644 doc/mod/notification-matrix.d/02-join-room.avif delete mode 100644 doc/mod/notification-matrix.d/03-join-room.avif diff --git a/doc/mod/notification-matrix.d/01-authenticate.avif b/doc/mod/notification-matrix.d/01-authenticate.avif new file mode 100644 index 0000000000000000000000000000000000000000..1db516b784b2779b1ab1054fcb149753b2c53dbf GIT binary patch literal 4209 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 Iq5{po0Ha9~3;+NC literal 0 HcmV?d00001 diff --git a/doc/mod/notification-matrix.d/01-home-server.avif b/doc/mod/notification-matrix.d/01-home-server.avif deleted file mode 100644 index 683c7b581bbf141e83a831ddfec8c47a8383d6e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2317 zcmXv|2|UyP8~-kI6c&@_=Pneo)>y9GM=WQUa>s00#^y{vLMReeD3WWAnGo#v#{+Rtnm{CB_bU?s0CC2kORpa-GV^Ik~n;X5Jbl9 zHv#~cJO>;&Ux-WyBm7bL`1m+1;2DZEz9qY_03uitG0-1N4C71|1bCu35{y9h^W671 z!8r^JIuHxyT*dbD_6&vshYo5gRB01skL3@l&K$P%J}{0l_L`V@T{My}Grjx`)VC6Y ztWUP#a#_CR(EVtf{%u%*xeGUmP_0!6T=bJa^)^n!KkH&YvsNTBM8nQOIUGE+j+nX+ zY0b-FT(>$dgMmm1v>f{3MfDjU2?@o@l=Vx+W9;+w6~3@2p!oq@fybx4b@sV2(tOg* zD1o}m={0bQO14 z&JVW~09%vhG0ldLA2*OsPGDx-+cL@SCK0l_2Qxno8N}LoSv#}i!s>$70PsslyfJMq zm9MTCtnigjoXhOY*P;lZvLg~PI(OX}OY)j;uhV6lf;x3^9ie%S{Os7IJo!7ctpyE9 zRtWO7=I)fr{Hmca{CndW>em+QQ)P7j=Ere-AzD*+8dbFUBPU*56-7onImhT54o0eW zN-ZivjS1S%gF2@sKSNXn6oy<2rV(XcP&&OXVWaQdYD&)q+z(~|&H4@1{ATTf%eyY& zT>oa<%Ztg$HX_^foRC3hox;n7hb~8`vQ}Cj z3zP`Z4C~77LgWe?Ts%=%$v5HI0b_cPn6>FJly+n{kBZIHL{BKByr}PvpI5dnF-}K1 zv6XuKr_s-HdF_h@RzCE#fo!DescrGBig|K^_jY35qGpSa%g-NKvV*$mNnHys`hrDy zyTVRTcy~M>59SA%Xd3HY!5^1vRr*y1UUHIhUSpDiwxk8Cffn;A=wM zRj0OB=$&%rsFYRynysSurs)I2wdSO`onF@veVvxjSjP5xK#qP))24q}uH#QvS5%}- zfMn9yS4F}HxT~H7sqw+?>p!hkTEaN<_QQm2Z)IxIcGb{gy~WQH(cIUy)AfX6Jpzn| zL`u4xc4&nYxEo*A!&&X_N0yJc-fL$kwRtb5>%k^>V;z4#=^?mg<)@7X!l7UCz=u&+ z>=cFd*mFxsj47J9-{~G6l^leLiv|^8Bsyxx*Ri?Nhze`uafVIIyaFGJx3s4H{m!<{ zrV9BpJa*2_N^>tJT1>pP=W1)&Z{MO3fz`uO@Axs8iK|(Tk5Hph7$~3Yh3Rc$;57C1 z)h3C|_}<)_(^qw9 zjq`@KtnHQi5^4qpjP%2;1}zJRfhBHOVnA@b z{*xi_6`*t#h)oDD*{gY$Ht&m~?{z8Z51%Qwe9#5I>Hgd0t;JD`0;AkfNgM8g_C=qw z%WR(ZoB49Xrki%>uR(i7UR8Wjn6l{p6uHR!S#vMq+oWxGnJ?xayj7<{I-99DdORb- zoyWoQ@m(?8x75m*FE1hRt%}HX92}uLy)bqQ*1D83@;p>szLcas&~l<>mOkhH&?L(BB`0EjRZS+?&0t6R?XXubaZu>wVY$j`u_@{N>IcOdbrHnwbbgM zr#>%vJ(J8Buz0I4r|>kjv$-?O{K-% z;%wljdCfqZ@aMtksXE3Z!XeH{5o(ZcV+EDFVG(9p$Xnl%^inbzjy-a%DpcC4EF)$Z)yiEb6|<8tw#%HoEj24UP1tnTe!zS%i;&0Gh@ z^Hvj#;=)4H5sZVpO_N<8`5`a+tHHH*#fM8t=0=0T9Zw~PoZ5N&$o U;E;tj+vMsflf~@RR9+VP7Z!sp761SM diff --git a/doc/mod/notification-matrix.d/02-access-token.avif b/doc/mod/notification-matrix.d/02-access-token.avif deleted file mode 100644 index 54109a6b8f5296e696011d65b227fbbf9d98040e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4105 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 HYY6xk29A|S literal 0 HcmV?d00001 diff --git a/doc/mod/notification-matrix.d/03-join-room.avif b/doc/mod/notification-matrix.d/03-join-room.avif deleted file mode 100644 index 45974b86b5fc39c652591cebd32650bcc78f0b5f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3166 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 diff --git a/doc/mod/notification-matrix.md b/doc/mod/notification-matrix.md index 4ae6e18..b309d3d 100644 --- a/doc/mod/notification-matrix.md +++ b/doc/mod/notification-matrix.md @@ -21,8 +21,8 @@ Just install the module: $ScriptInstallUpdate mod/notification-matrix; Also install a Matrix client on at least one of your mobile and/or desktop -devices. As there is no privilege separation you should create a dedicated -notification account, in addition to your general user account. +devices. Create and setup an account there, we will reference that as +"*general account*" later. Configuration ------------- @@ -35,58 +35,53 @@ reload the configuration. > [`global-config`](../../global-config.rsc) (the one without `-overlay`) to > your local `global-config-overlay` and modify it to your specific needs. -### Home server +The Matrix server is connected via encrypted https, and certificate +verification is applied. So make sure you have the certificate chain for +your server in device's certificate store. + +> ℹ️ **Info**: The *matrix.org* server uses a Cloudflare certificate. You can +> install that with: `$CertificateAvailable "Cloudflare Inc ECC CA-3"` + +### From other device + +If you have setup your Matrix *notification account* before just reuse that. +Copy the relevant configuration to the device to be configured. + +### Setup new account + +As there is no privilege separation you should create a dedicated account +for use with these scripts, in addition to your *general account*. +We will reference that as "*notification account*" in the following steps. + +#### Authenticate Matrix user accounts are identified by a unique user id in the form of -`@localpart:domain`. The `domain` part is not necessarily your home server -address, you have to resolve it with the procedure described in the -[Matrix specification](https://spec.matrix.org/latest/client-server-api/#server-discovery). +`@localpart:domain`. Use that and your password to generate an access token +and write first part of the configuration: -Your best bet is to query the server at `domain` with the -[well-known uri](https://spec.matrix.org/latest/client-server-api/#well-known-uri). -For "*matrix.org*" this query is: + $SetupMatrixAuthenticate "@example:matrix.org" "v3ry-s3cr3t"; - /tool/fetch "https://matrix.org/.well-known/matrix/client" output=user; +![authenticate](notification-matrix.d/01-authenticate.avif) -![home server](notification-matrix.d/01-home-server.avif) +#### Join Room -So the home server for "*matrix.org*" is "*matrix-client.matrix.org*". -Please strip the protocol ("*https://*") for `MatrixHomeServer` if given. +Every Matix chat is a room, so we have to create one. Do that with your +*general account*, this makes sure your *general account* is the room owner. +Then join the room and invite the *notification account* by its user id +"*@example:matrix.org*". +Look up the *room id* within the Matrix client, it should read like +"*!WUcxpSjKyxSGelouhA:matrix.org*" (starting with an exclamation mark and +ending with the domain). -### Access token +Finally make the *notification account* join into the room by accepting +the invite. -After discovering the correct home server an access token has to be created. -For this the login credentials (username and password) of the notification -account must be sent to the home server via -[client server api](https://matrix.org/docs/guides/client-server-api#login). + $SetupMatrixJoinRoom "!WUcxpSjKyxSGelouhA:matrix.org"; -We use the home server discovered above, "*matrix-client.matrix.org*". -The user is "*example*" and password is "*v3ry-s3cr3t*". +![join room](notification-matrix.d/02-join-room.avif) - /tool/fetch "https://matrix-client.matrix.org/_matrix/client/r0/login" http-method=post http-data="{\"type\":\"m.login.password\", \"user\":\"example\", \"password\":\"v3ry-s3cr3t\"}" output=user; - -![access token](notification-matrix.d/02-access-token.avif) - -The server replied with a JSON object containing the `access_token`, use that -for `MatrixAccessToken`. - -### Room - -Every Matix chat is a room, so we have to create one. Do so with your general -user, this makes sure your general user is the room owner. Then join the room -and invite the notification user by its user id "*@example:matrix.org*". Look -up the room id within the Matrix client, it should read like -"*!WUcxpSjKyxSGelouhA:matrix.org*". Use that for `MatrixRoom`. - -Finally join the notification user to the room by accepting the invite. Again, -this can be done with -[client server api](https://matrix.org/docs/guides/client-server-api#joining-a-room-via-an-invite). -Make sure to replace room id ("*!*" is escaped with "*%21*") and access token -with your data. - - /tool/fetch "https://matrix-client.matrix.org/_matrix/client/r0/rooms/%21WUcxpSjKyxSGelouhA:matrix.org/join?access_token=yt_ZXdvcm0tdGVzdA_NNqUyvKHRhBLZmnzVVSK_0xu6yN" http-method=post http-data="" output=user; - -![join room](notification-matrix.d/03-join-room.avif) +The settings have been appended to `global-config-overlay`. You may want to +edit to move it to an appropriate place. Usage and invocation -------------------- diff --git a/global-functions.rsc b/global-functions.rsc index 7eb1ec5..5c6e3c5 100644 --- a/global-functions.rsc +++ b/global-functions.rsc @@ -12,7 +12,7 @@ :local 0 "global-functions"; # expected configuration version -:global ExpectedConfigVersion 112; +:global ExpectedConfigVersion 113; # global variables not to be changed by user :global GlobalFunctionsReady false; diff --git a/mod/notification-matrix.rsc b/mod/notification-matrix.rsc index 03cfb13..a8983a7 100644 --- a/mod/notification-matrix.rsc +++ b/mod/notification-matrix.rsc @@ -12,6 +12,8 @@ :global PurgeMatrixQueue; :global SendMatrix; :global SendMatrix2; +:global SetupMatrixAuthenticate; +:global SetupMatrixJoinRoom; # flush Matrix queue :set FlushMatrixQueue do={ @@ -175,3 +177,80 @@ ($NotificationFunctions->"matrix") ("\$NotificationFunctions->\"matrix\"") $Notification; } + +# setup - get home server and access token +:set SetupMatrixAuthenticate do={ + :local User [ :tostr $1 ]; + :local Pass [ :tostr $2 ]; + + :global CharacterReplace; + :global LogPrintExit2; + :global ParseJson; + :global UrlEncode; + + :global MatrixAccessToken; + :global MatrixHomeServer; + + :local Domain [ :pick $User ([ :find $User ":" ] + 1) [ :len $User] ]; + :do { + :local Data ([ /tool/fetch check-certificate=yes-without-crl output=user \ + ("https://" . $Domain . "/.well-known/matrix/client") as-value ]->"data"); + :set MatrixHomeServer ([ $ParseJson ([ $ParseJson [ $CharacterReplace $Data " " "" ] ]->"m.homeserver") ]->"base_url"); + $LogPrintExit2 debug $0 ("Home server is: " . $MatrixHomeServer) false; + } on-error={ + $LogPrintExit2 error $0 ("Failed getting home server!") true; + } + + :if ([ :pick $MatrixHomeServer 0 8 ] = "https://") do={ + :set MatrixHomeServer [ :pick $MatrixHomeServer 8 [ :len $MatrixHomeServer ] ]; + } + + :do { + :local Data ([ /tool/fetch check-certificate=yes-without-crl output=user \ + http-method=post http-data=("{\"type\":\"m.login.password\", \"user\":\"" . $User . "\", \"password\":\"" . $Pass . "\"}") \ + ("https://" . $MatrixHomeServer . "/_matrix/client/r0/login") as-value ]->"data"); + :set MatrixAccessToken ([ $ParseJson $Data ]->"access_token"); + $LogPrintExit2 debug $0 ("Access token is: " . $MatrixAccessToken) false; + } on-error={ + $LogPrintExit2 error $0 ("Failed logging in (and getting access token)!") true; + } + + :do { + /system/script/set global-config-overlay source=([ get global-config-overlay source ] . "\n" . \ + ":global MatrixHomeServer \"" . $MatrixHomeServer . "\";\n" . \ + ":global MatrixAccessToken \"" . $MatrixAccessToken . "\";\n"); + $LogPrintExit2 info $0 ("Appended configuration to global-config-overlay. Now create and join a room, please!") false; + } on-error={ + $LogPrintExit2 error $0 ("Failed appending configuration to global-config-overlay!") true; + } +} + +# setup - join a room +:set SetupMatrixJoinRoom do={ + :global MatrixRoom [ :tostr $1 ]; + + :global LogPrintExit2; + :global UrlEncode; + + :global MatrixAccessToken; + :global MatrixHomeServer; + :global MatrixRoom; + + :do { + /tool/fetch check-certificate=yes-without-crl output=none \ + http-method=post http-data="" \ + ("https://" . $MatrixHomeServer . "/_matrix/client/r0/rooms/" . [ $UrlEncode $MatrixRoom ] . \ + "/join?access_token=" . [ $UrlEncode $MatrixAccessToken ]) as-value; + $LogPrintExit2 debug $0 ("Joined the room.") false; + } on-error={ + $LogPrintExit2 error $0 ("Failed joining the room!") true; + } + + :do { + /system/script/set global-config-overlay source=([ get global-config-overlay source ] . "\n" . \ + ":global MatrixRoom \"" . $MatrixRoom . "\";\n"); + $LogPrintExit2 info $0 ("Appended configuration to global-config-overlay. Please review and cleanup!") false; + } on-error={ + $LogPrintExit2 error $0 ("Failed appending configuration to global-config-overlay!") true; + } +} diff --git a/news-and-changes.rsc b/news-and-changes.rsc index babcec8..64e114f 100644 --- a/news-and-changes.rsc +++ b/news-and-changes.rsc @@ -26,6 +26,7 @@ 110="Dropped support for loading scripts from local storage."; 111="Modified 'dhcp-to-dns' to allow multiple records for one mac address."; 112="Enhanced 'mod/ssh-keys-import' to record the fingerprint of keys."; + 113="Added helper functions for easier setup to Matrix notification module."; }; # Migration steps to be applied on script updates